NVIDIA IndeX API nvidia_logo_transpbg.gif Up
iheight_field_subset.h
Go to the documentation of this file.
1/******************************************************************************
2 * Copyright 2023 NVIDIA Corporation. All rights reserved.
3 *****************************************************************************/
6
7#ifndef NVIDIA_INDEX_IHEIGHT_FIELD_SUBSET_H
8#define NVIDIA_INDEX_IHEIGHT_FIELD_SUBSET_H
9
10#include <mi/dice.h>
11#include <mi/math/vector.h>
12
14
15namespace nv
16{
17namespace index
18{
19
29 public mi::base::Interface_declare<0x88014528,0xd6b8,0x4b17,0x9d,0x12,0x74,0x9c,0xe2,0x88,0x46,0x6b,
30 IDistributed_data_subset_data_descriptor>
31{
32public:
35 {
36 mi::math::Vector_struct<mi::Sint32, 2> tile_position;
38 mi::Uint32 tile_lod_level;
39 };
40
45 virtual mi::Uint32 get_dataset_number_of_lod_levels() const = 0;
46
53 virtual mi::math::Bbox_struct<mi::Sint32, 3> get_dataset_lod_level_box(mi::Uint32 lod_level) const = 0;
54
61 virtual mi::math::Vector_struct<mi::Uint32, 2> get_dataset_lod_level_resolution(mi::Uint32 lod_level) const = 0;
62
65 virtual mi::math::Vector_struct<mi::Uint32, 2> get_subset_data_tile_dimensions() const = 0;
66
69 virtual mi::Uint32 get_subset_data_tile_shared_border_size() const = 0;
70
79 virtual mi::math::Bbox_struct<mi::Sint32, 3> get_subset_lod_data_bounds(mi::Uint32 lod_level) const = 0;
80
84 virtual mi::math::Vector_struct<mi::Uint32, 2> get_subset_lod_level_range() const = 0;
85
88 virtual mi::Uint32 get_subset_number_of_data_tiles() const = 0;
89
96 virtual const Data_tile_info get_subset_data_tile_info(mi::Uint32 tile_index) const = 0;
97};
98
109 public mi::base::Interface_declare<0xe6fc895a,0xdd21,0x4f63,0xac,0x99,0x78,0xe3,0x4a,0x95,0x68,0x26,
110 IDistributed_data_subset>
111{
112public:
124 {
126 mi::Float32* data;
127
129 mi::math::Vector_struct<mi::Float32, 3>* normals;
130
132 mi::Size size;
133
135 mi::Sint32 gpu_device_id;
136 };
137
143 {
145 };
146
147
151
163 virtual bool write_tile_data(
164 mi::Uint32 tile_subset_idx,
165 const void* src_values,
166 mi::Sint32 gpu_device_id,
167 Data_transformation tile_data_transform = DATA_TRANSFORMATION_NONE) = 0;
168
181 virtual bool write_tile_data(
182 mi::Uint32 tile_subset_idx,
183 const mi::neuraylib::IRDMA_buffer* src_rdma_buffer,
184 Data_transformation tile_data_transform = DATA_TRANSFORMATION_NONE) = 0;
185
209 const mi::Uint32* tile_subset_indices,
210 mi::Uint32 nb_input_tiles,
211 const mi::Size* src_rdma_buffer_offsets,
212 const mi::neuraylib::IRDMA_buffer* src_rdma_buffer,
213 Data_transformation tile_data_transform = DATA_TRANSFORMATION_NONE) = 0;
214
224 virtual const Data_tile_buffer_info access_tile_data_buffer(mi::Uint32 tile_subset_idx) = 0;
225
236 virtual const Data_tile_buffer_info access_tile_data_buffer(mi::Uint32 tile_subset_idx) const = 0;
237
247 virtual mi::neuraylib::IRDMA_buffer* access_tile_data_buffer_rdma(
248 mi::neuraylib::IRDMA_context* rdma_ctx,
249 mi::Uint32 tile_subset_idx) = 0;
250
259 static inline mi::Float32 get_hole_value()
260 {
261 return mi::base::numeric_traits<mi::Float32>::quiet_NaN();
262 }
263
270 static inline bool is_hole(mi::Float32 height)
271 {
272 // Use binary comparison so that it will work when holes are marked with NaN, as comparing
273 // anything to NaN will always be false. This is also potentially faster than isnan().
274 const mi::Uint32 height_bin = mi::base::binary_cast<mi::Uint32>(height);
275 const mi::Uint32 hole_bin = mi::base::binary_cast<mi::Uint32>(get_hole_value());
276
277 return height_bin == hole_bin;
278 }
279
287 virtual bool store_internal_data_representation(const char* output_filename) const = 0;
288
296 virtual bool load_internal_data_representation(const char* input_filename) = 0;
297};
298
299} // namespace index
300} // namespace nv
301
302#endif // NVIDIA_INDEX_IHEIGHT_FIELD_SUBSET_H
Subset-data descriptor for tiled height-field subsets.
Definition: iheight_field_subset.h:31
virtual mi::Uint32 get_subset_data_tile_shared_border_size() const =0
Returns the size of the shared height-field data tile boundary.
virtual mi::math::Bbox_struct< mi::Sint32, 3 > get_subset_lod_data_bounds(mi::Uint32 lod_level) const =0
Returns the data bounds covering all height-field data tiles required for the subset on a particular ...
virtual mi::Uint32 get_subset_number_of_data_tiles() const =0
Returns the number of height-field data-tiles available in the height-field data subset.
virtual mi::math::Bbox_struct< mi::Sint32, 3 > get_dataset_lod_level_box(mi::Uint32 lod_level) const =0
Returns the bounding box of the requested level-of-detail in local pixel coordinates.
virtual mi::math::Vector_struct< mi::Uint32, 2 > get_dataset_lod_level_resolution(mi::Uint32 lod_level) const =0
Returns the data resolution of the requested level-of-detail in 2d coordinates.
virtual mi::Uint32 get_dataset_number_of_lod_levels() const =0
Returns the number of levels-of-detail in the height-field dataset.
virtual mi::math::Vector_struct< mi::Uint32, 2 > get_subset_data_tile_dimensions() const =0
Returns the dimensions of the height-field data tiles.
virtual mi::math::Vector_struct< mi::Uint32, 2 > get_subset_lod_level_range() const =0
Returns the level-of-detail range used by the subset.
virtual const Data_tile_info get_subset_data_tile_info(mi::Uint32 tile_index) const =0
Returns the height-field data tile information for a selected data tile.
Distributed data storage class for height-field subsets.
Definition: iheight_field_subset.h:111
virtual const Data_tile_buffer_info access_tile_data_buffer(mi::Uint32 tile_subset_idx) const =0
Query the internal buffer information of the data-subset instance for a height-field data tile in otd...
virtual const Data_tile_buffer_info access_tile_data_buffer(mi::Uint32 tile_subset_idx)=0
Query the internal buffer information of the data-subset instance for a height-field data tile in otd...
virtual const IHeight_field_subset_data_descriptor * get_subset_data_descriptor() const =0
Returns the data descriptor of the subset.
virtual mi::neuraylib::IRDMA_buffer * access_tile_data_buffer_rdma(mi::neuraylib::IRDMA_context *rdma_ctx, mi::Uint32 tile_subset_idx)=0
Creates an RDMA buffer that is a wrapper for of the internal buffer.
virtual bool write_tile_data(mi::Uint32 tile_subset_idx, const void *src_values, mi::Sint32 gpu_device_id, Data_transformation tile_data_transform=DATA_TRANSFORMATION_NONE)=0
Write a height-field data tile to the subset from a memory block in main memory.
static bool is_hole(mi::Float32 height)
Returns whether the given height value represent a hole in the heightfield.
Definition: iheight_field_subset.h:270
virtual bool store_internal_data_representation(const char *output_filename) const =0
This method allows to write a compact cache file of successfully loaded subset data to the file syste...
Data_transformation
Transformation that should be applied on the written data.
Definition: iheight_field_subset.h:143
@ DATA_TRANSFORMATION_NONE
Pass through unchanged.
Definition: iheight_field_subset.h:144
static mi::Float32 get_hole_value()
Returns the height value that encodes a hole in the heightfield data.
Definition: iheight_field_subset.h:259
virtual bool load_internal_data_representation(const char *input_filename)=0
This method allows to load a compact cache file of successfully loaded subset data to the file system...
virtual bool write_tile_data_multiple(const mi::Uint32 *tile_subset_indices, mi::Uint32 nb_input_tiles, const mi::Size *src_rdma_buffer_offsets, const mi::neuraylib::IRDMA_buffer *src_rdma_buffer, Data_transformation tile_data_transform=DATA_TRANSFORMATION_NONE)=0
Write multiple height-field data tiles to the subset from a single IRDMA_buffer.
virtual bool write_tile_data(mi::Uint32 tile_subset_idx, const mi::neuraylib::IRDMA_buffer *src_rdma_buffer, Data_transformation tile_data_transform=DATA_TRANSFORMATION_NONE)=0
Write a height-field data tile to the subset from a IRDMA_buffer.
Distributed subset interaces for a large-scale distributed datasets.
Common namespace for all NVIDIA APIs.
Definition: iindex.h:349
Definition of internal buffer information.
Definition: iheight_field_subset.h:124
mi::Float32 * data
Raw memory pointer to internal elevation values.
Definition: iheight_field_subset.h:126
mi::Sint32 gpu_device_id
GPU device id if the buffer is located on a GPU device, -1 to indicate a host buffer.
Definition: iheight_field_subset.h:135
mi::math::Vector_struct< mi::Float32, 3 > * normals
Raw memory pointer to internal normals values.
Definition: iheight_field_subset.h:129
mi::Size size
Number of values in tile.
Definition: iheight_field_subset.h:132
Structual information regarding internal tile data representations.
Definition: iheight_field_subset.h:35
mi::math::Vector_struct< mi::Sint32, 2 > tile_position
Position in tile local space of the the particular tile (on its level-of-detail).
Definition: iheight_field_subset.h:36
mi::Uint32 tile_lod_level
Level-of-detail of the particular tile.
Definition: iheight_field_subset.h:38