NVIDIA IndeX API nvidia_logo_transpbg.gif Up
iindex_direct.h
Go to the documentation of this file.
1/******************************************************************************
2 * Copyright 2023 NVIDIA Corporation. All rights reserved.
3 *****************************************************************************/
6
7#ifndef NVIDIA_INDEX_IINDEX_DIRECT_H
8#define NVIDIA_INDEX_IINDEX_DIRECT_H
9
12#include <nv/index/iindex_direct_vulkan.h>
13
14// CUDA forward declarations required for the interfaces below
15struct cudaArray;
16struct cudaChannelFormatDesc;
17
18namespace nv {
19namespace index {
20
22{
23 VOLUME_DIRECT_TYPE_INVALID = 0x00u,
24
27};
28
30struct Volume_direct_data;
31
33typedef const Volume_direct_data* Volume_direct_data_handle;
34
37 public mi::base::Interface_declare<0x99cd79a5,0x3ad,0x4a93,0x8c,0xca,0xd8,0x8e,0x2b,0xf1,0x19,0xc2,
38 mi::neuraylib::IElement>
39{
40public:
43 virtual mi::math::Bbox_struct<mi::Float32, 3> get_bounding_box() const = 0;
44
47 virtual mi::math::Matrix_struct<mi::Float32, 4, 4> get_transform() const = 0;
48
52
57
65};
66
67class IVolume_direct_resources_device :
68 public mi::base::Interface_declare<0x35b08e00,0xce92,0x41bb,0x9f,0xad,0x54,0x8,0x70,0x48,0x42,0x1d>
69{
70public:
71 struct Buffer
72 {
73 mi::Sint32 device_id; // = -1
74
75 void* device_data; // = nullptr;
76 mi::Size device_data_size; // = 0ull
77
78 const void* allocation_user_data; // = nullptr (optional, based on registered ICuda_memory_allocator implementation)
79 };
80
81 struct Array
82 {
83 mi::Sint32 device_id; // = -1
84
85 cudaArray* device_array; // = nullptr;
86 const cudaChannelFormatDesc* device_array_format;
87 mi::math::Vector_struct<mi::Uint32, 3> device_array_extent;
88
89 const void* allocation_user_data; // = nullptr (optional, based on registered ICuda_memory_allocator implementation)
90 };
91};
92
93class IVolume_direct_resources_device_sparse_volume :
94 public mi::base::Interface_declare<0x56677429,0xc0c6,0x4db7,0xb6,0x5c,0x40,0x8d,0xf8,0x38,0xd7,0x20,
95 IVolume_direct_resources_device>
96{
97public:
98 virtual Buffer get_octree_serialization_buffer() const = 0;
99 virtual Buffer get_octree_node_data_buffer() const = 0;
100 virtual Buffer get_uniform_buffer() const = 0;
101
102 virtual Array* get_brick_atlas_textures() const = 0;
103 virtual mi::Uint32 get_brick_atlas_textures_count() const = 0;
104};
105
106class IVolume_direct_resources_device_NanoVDB :
107 public mi::base::Interface_declare<0xbfc8514b,0xa153,0x48a5,0x97,0x19,0xe3,0xe9,0xfa,0x1b,0xa5,0x3e,
108 IVolume_direct_resources_device>
109{
110public:
111 virtual Buffer get_nanovdb_buffer() const = 0;
112};
113
116 public mi::base::Interface_declare<0xb12ed2be,0x80bf,0x4fc8,0xba,0xb9,0x46,0x37,0x81,0x48,0x88,0xc>
117{
118public:
121 virtual mi::math::Bbox_struct<mi::Float32, 3> get_bounding_box() const = 0;
122
125 virtual mi::math::Matrix_struct<mi::Float32, 4, 4> get_transform() const = 0;
126
130
133 virtual mi::Uint32 get_device_id() const = 0;
134
139
140 virtual Volume_direct_type get_volume_type() const = 0;
141 virtual IVolume_direct_resources_device* get_resources() const = 0;
142};
143
144class IIndex_direct_config :
145 public mi::base::Interface_declare<0x72acbf4a,0x9abc,0x4e6d,0x8c,0xd3,0xe1,0x8e,0xc0,0x66,0xc3,0x7e>
146{
147public:
155 {
156 mi::math::Vector_struct<mi::Uint32, 3> brick_size;
157 mi::Uint32 brick_border;
158 };
159
160 struct Vulkan_config
161 {
162 VkInstance vk_instance;
164 // ...
165 };
166
169 virtual Sparse_volume_config default_volume_config() const = 0;
170
173 virtual void set_sparse_volume_config(const Sparse_volume_config& vol_cfg) = 0;
174 virtual Sparse_volume_config get_sparse_volume_config() const = 0;
175
176 virtual void set_vulkan_config(const Vulkan_config& vk_cfg) = 0;
177 virtual Vulkan_config get_vulkan_config() const = 0;
178
179};
180
183 public mi::base::Interface_declare<0x62216bae,0xf97e,0x4dda,0xaa,0xfa,0xe5,0x70,0x14,0xec,0xc0,0x67>
184{
185public:
191 virtual bool initialize(
192 const IIndex_direct_config* idx_direct_config) = 0;
193
198 virtual const IIndex_direct_config* get_config() const = 0;
199
205 virtual const char* get_product_name() const = 0;
206
213 virtual const char* get_version() const = 0;
214
221 virtual const char* get_revision() const = 0;
222
231
238 virtual bool free_volume(
239 IVolume_direct_host* volume_direct_inst) = 0;
240
247 virtual bool free_volume(
248 IVolume_direct_cuda* volume_direct_inst) = 0;
249
257 const IVolume_direct_host* volume_direct,
258 mi::Uint32 cuda_device_id) = 0;
259
268 virtual IVolume_direct_vulkan* upload_volume_to_vulkan(
269 VkPhysicalDevice vk_phys_device,
270 VkDevice vk_device,
271 const IVolume_direct_host* volume_direct) = 0;
272
277 virtual mi::IString* get_memory_usage_info() const = 0;
278};
279
280} // namespace index
281} // namespace nv
282
283#endif // NVIDIA_INDEX_IINDEX_DIRECT_H
Import callback mechanism for implementing distributed and parallel data loading from arbitrary sourc...
Definition: idistributed_data_import_callback.h:82
A data subset represent the unique entity representing a distributed dataset inside a single subregio...
Definition: idistributed_data_subset.h:157
Simplified scene management for volumes with direct access to low-level data.
Definition: iindex_direct.h:184
virtual const IIndex_direct_config * get_config() const =0
The current configuration settings.
virtual bool initialize(const IIndex_direct_config *idx_direct_config)=0
Initializes the direct access functionality.
virtual const char * get_product_name() const =0
The NVIDIA IndeX Direct product name.
virtual IVolume_direct_host * load_volume(nv::index::IDistributed_data_import_callback *volume_importer)=0
Loads a volume using the given importer.
virtual bool free_volume(IVolume_direct_host *volume_direct_inst)=0
Frees up all resources of a particular host volume instance.
virtual mi::IString * get_memory_usage_info() const =0
Get an information string containing information about internal memory usage.
virtual bool free_volume(IVolume_direct_cuda *volume_direct_inst)=0
Frees up all resources of a particular device volume instance.
virtual IVolume_direct_cuda * upload_volume_to_device(const IVolume_direct_host *volume_direct, mi::Uint32 cuda_device_id)=0
Upload the volume data to a particular CUDA device.
virtual const char * get_revision() const =0
The NVIDIA IndeX Direct revision number indicates the build.
virtual IVolume_direct_vulkan * upload_volume_to_vulkan(VkPhysicalDevice vk_phys_device, VkDevice vk_device, const IVolume_direct_host *volume_direct)=0
Upload the volume data to a particular Vulkan device.
virtual const char * get_version() const =0
The product version of the NVIDIA IndeX Direct interface.
Provides direct access to volume data on a CUDA device.
Definition: iindex_direct.h:117
virtual mi::math::Matrix_struct< mi::Float32, 4, 4 > get_transform() const =0
Returns the volume transformation from voxel space to world space.
virtual mi::math::Bbox_struct< mi::Float32, 3 > get_bounding_box() const =0
Returns the axis-aligned bounding box of the volume in voxel space.
virtual Distributed_data_attribute_format get_voxel_format() const =0
Returns the voxel format of the volume.
virtual mi::Uint32 get_device_id() const =0
Returns the device id of the GPU the volume was uploaded to.
virtual Volume_direct_data_handle get_direct_handle() const =0
Returns the direct data-handle to the volume representation used by the NVIDIA IndeX_direct data acce...
Provides direct access to volume data.
Definition: iindex_direct.h:39
virtual Volume_direct_data_handle get_direct_handle() const =0
Returns the direct data-handle to the volume representation used by the NVIDIA IndeX_direct data acce...
virtual IDistributed_data_subset * get_data_subset() const =0
Returns the data subst associated with the IVolume_direct_host instance.
virtual Distributed_data_attribute_format get_voxel_format() const =0
Returns the voxel format of the volume.
virtual mi::math::Bbox_struct< mi::Float32, 3 > get_bounding_box() const =0
Returns the axis-aligned bounding box of the volume in voxel space.
virtual mi::math::Matrix_struct< mi::Float32, 4, 4 > get_transform() const =0
Returns the volume transformation from voxel space to world space.
Distributed_data_attribute_format
Attribute formats for distributed dataset types.
Definition: idistributed_data_subset.h:26
The interface class for implementing import callbacks used for distributed large-scale data chunk loa...
Distributed subset interaces for a large-scale distributed datasets.
const Volume_direct_data * Volume_direct_data_handle
Direct access to volume data structure.
Definition: iindex_direct.h:33
Volume_direct_type
Definition: iindex_direct.h:22
@ VOLUME_DIRECT_TYPE_NANOVDB
NanoVDB volume representation.
Definition: iindex_direct.h:26
@ VOLUME_DIRECT_TYPE_SPARSE_VOLUME
NVIDIA IndeX sparse volume-octree (SVO) representation.
Definition: iindex_direct.h:25
Common namespace for all NVIDIA APIs.
Definition: iindex.h:349
Configuration settings for internal volume representation.
Definition: iindex_direct.h:155
mi::Uint32 brick_border
! Shared border size between neighboring bricks.
Definition: iindex_direct.h:157
mi::math::Vector_struct< mi::Uint32, 3 > brick_size
! Volume brick size.
Definition: iindex_direct.h:156