Commit eb188845 authored by Eduardo Olivares's avatar Eduardo Olivares

NVIDIA-IndeX-plug-in-2.3 fixes Part 2

- Fixed several issues when interacting with multiple volumes in the same session.
- Added warning when using datasets with scalar values in double precision.
- Added option to enable pinned staging buffer.
- Disabled rasterized pre-allocated buffers.
parent 791fc94f
......@@ -82,8 +82,8 @@ public:
///
/// The application-domain is expected to generate 3D spatial regions. These regions
/// are supposed to be disjoint. In case of an hierarchical decomposition scheme, such as a
/// kd-tree based spatial decomposition, these regions typically represent the tress, leaf
/// nodes. The interface class shall provide the regions as 3D bounding boxes so that
/// kd-tree based spatial decomposition, these regions typically represent the leaf
/// nodes of the tree. The interface class shall provide the regions as 3D bounding boxes so that
/// NVIDIA IndeX can align its internal representation.
///
/// This interface class also extents the affinity class that is the application is
......@@ -122,6 +122,55 @@ public:
virtual mi::math::Bbox_struct<mi::Float32, 3> get_subregion(mi::Uint32 index) const = 0;
};
/// Domain specific subdivision with topology information.
///
/// This interface extends IDomain_specific_subdivision by providing topology information
/// for efficient subregion sorting.
///
/// @ingroup nv_index_data_storage
///
class IDomain_specific_subdivision_topology :
public mi::base::Interface_declare<0x25d72982,0x3cff,0x4f72,0x99,0x72,0x41,0x95,0xec,0x06,0x16,0x12,
nv::index::IDomain_specific_subdivision>
{
public:
enum Topology_type
{
TOPO_KD_TREE,
TOPO_OCTREE
};
/// Get type of topology, \see Topology_type. If not supported, topology will be ignored.
virtual mi::Uint32 get_topology_type() const = 0;
/// Get the total number of nodes of the topology.
/// It is assumed that the first node is the root node.
virtual mi::Uint32 get_nb_nodes() const = 0;
/// Get the bounding box of the node \c inode.
/// \param inode Index of node.
virtual mi::math::Bbox_struct<mi::Float32, 3> get_node_box(mi::Uint32 inode) const = 0;
/// Get the number of children of node \c inode.
/// Note that this expresses the number of available child slots,
/// but not the number of valid children.
/// This means for a Kd-tree, you can always return 2, and for an Octree 8.
/// \param inode Index of node.
virtual mi::Uint32 get_node_child_count(mi::Uint32 inode) const = 0;
/// Get a child index of the node \c inode. Return -1 if no child at given \c ichild slot.
/// \param inode Index of node.
/// \param ichild Index of child slot.
virtual mi::Sint32 get_node_child(mi::Uint32 inode, mi::Uint32 ichild) const = 0;
/// Get index of subregion associated with node \c inode (or -1, if no subregion).
/// The subregions are provided by the IDomain_specific_subdivision interface.
/// \param inode Index of node.
virtual mi::Sint32 get_node_subregion_index(mi::Uint32 inode) const = 0;
};
} // namespace index
} // namespace nv
......
......@@ -768,20 +768,48 @@ mi::Uint32 vtknvindex_instance::setup_nvindex()
m_nvindex_interface->get_api_component<nv::index::IIndex_debug_configuration>());
assert(idebug_configuration.is_valid_interface());
// Don't pre-allocate buffers for rasterizer
std::string rasterizer_memory_allocation = "rasterizer_memory_allocation=-1";
idebug_configuration->set_option(rasterizer_memory_allocation.c_str());
// Disable timeseries data prefetch.
std::string disable_timeseries_data_prefetch =
std::string("timeseries_data_prefetch_disable=1");
idebug_configuration->set_option(disable_timeseries_data_prefetch.c_str());
// Temporarily disabling parallel importer
// Temporarily disabling parallel importer.
std::string async_subset_load = std::string("async_subset_load=0");
idebug_configuration->set_option(async_subset_load.c_str());
// use strict domain subdivision only with multiples ranks.
// Use strict domain subdivision only with multiples ranks.
if (vtkMultiProcessController::GetGlobalController()->GetNumberOfProcesses() > 1)
{
std::string use_strict_domain_subdivision = std::string("use_strict_domain_subdivision=1");
idebug_configuration->set_option(use_strict_domain_subdivision.c_str());
}
// Use pinned memory for staging buffer (enabled by default).
if (use_config_file)
{
std::map<std::string, std::string> index_params;
if (xml_parser.get_section_settings(index_params, "index"))
{
std::map<std::string, std::string>::iterator it;
it = index_params.find("use_pinned_staging_buffer");
if (it != index_params.end())
{
std::string use_pinned_staging_buffer("svol_disable_pinned_staging_buffer=");
if (it->second == std::string("1") || it->second == std::string("yes"))
use_pinned_staging_buffer += std::string("1");
else
use_pinned_staging_buffer += std::string("0");
idebug_configuration->set_option(use_pinned_staging_buffer.c_str());
}
}
}
}
// Register serializable classes.
......
......@@ -212,6 +212,13 @@ void vtknvindex_scene::set_visibility(bool visibility)
// Update scene transformation
if (visibility)
{
// Reset the affinity information to IndeX in case it changed. Otherwise it will be ignored.
mi::base::Handle<vtknvindex_affinity> affinity = m_cluster_properties->get_affinity();
// NVIDIA IndeX session will take ownership of the affinity.
affinity->retain();
m_index_instance->m_iindex_session->set_affinity_information(affinity.get());
// Access the session instance from the database.
mi::base::Handle<const nv::index::ISession> session(
dice_transaction->access<const nv::index::ISession>(m_index_instance->m_session_tag));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment