OpenVDB 13.1.0
Loading...
Searching...
No Matches
VoxelBlockManager.h File Reference

VoxelBlockManager: acceleration structure for voxel-sequential, SIMT/SIMD-parallel access over the active voxels of an OnIndexGrid, independent of occupancy. More...

#include <nanovdb/NanoVDB.h>
#include <nanovdb/HostBuffer.h>
#include <nanovdb/util/MaskPrefixSum.h>
#include <nanovdb/util/ForEach.h>
#include <algorithm>
#include <cstring>

Go to the source code of this file.

Classes

class  VoxelBlockManagerHandle< BufferT >
 Move-only owner of the two raw metadata buffers that back a VoxelBlockManager: the per-block firstLeafID array (uint32_t[blockCount]) and the per-block jumpMap array (uint64_t[blockCount * JumpMapLength]). More...
struct  VoxelBlockManagerBase< Log2BlockWidth >
 Compile-time geometry parameters and output sentinels shared by the CPU and CUDA VoxelBlockManager decode structs. More...
struct  VoxelBlockManager< Log2BlockWidth >
 CPU counterpart of tools::cuda::VoxelBlockManager. Provides host-side decode of the inverse maps (sequential index -> leaf + voxel offset) for a single voxel block. The implementation is single-threaded per block and SIMD-accelerated (via util::shuffleDownMask and util::buildMaskPrefixSums); the caller is responsible for parallelism across blocks (e.g. OpenMP or nanovdb::util::forEach). More...

Namespaces

namespace  nanovdb
 Defines a simple memory pool used to call cub functions that use dynamic temporary storage.
namespace  nanovdb::util
namespace  nanovdb::tools

Functions

template<int N, int Shift, typename DataT, typename MaskT>
void shuffleDownMask (DataT *NANOVDB_RESTRICT data, const MaskT *NANOVDB_RESTRICT masks, MaskT maskBits)
 One pass of masked conditional shuffle-down on a stream of values.
template<int Log2BlockWidth, typename BufferT>
void buildVoxelBlockManager (const NanoGrid< ValueOnIndex > *grid, VoxelBlockManagerHandle< BufferT > &handle)
 Rebuild a VoxelBlockManager in-place using a pre-allocated handle. Zeros the jumpMap and recomputes both metadata arrays. No memory allocation.
template<int Log2BlockWidth, typename BufferT = HostBuffer>
VoxelBlockManagerHandle< BufferT > buildVoxelBlockManager (const NanoGrid< ValueOnIndex > *grid, uint64_t firstOffset=0, uint64_t lastOffset=0, uint64_t nBlocks=0, const BufferT *pool=nullptr)
 Allocate buffers and build a VoxelBlockManager on the host from a ValueOnIndex grid. Uses nanovdb::util::forEach to process lower internal nodes in parallel.

Detailed Description

VoxelBlockManager: acceleration structure for voxel-sequential, SIMT/SIMD-parallel access over the active voxels of an OnIndexGrid, independent of occupancy.

Author
Efty Sifakis
Date
July 24, 2025

Provides:

  • VoxelBlockManagerHandle: manages the raw metadata buffers (firstLeafID array and jumpMap) on host or device.
  • buildVoxelBlockManager: constructs the VBM metadata from a NanoGrid.
  • VoxelBlockManager: host-side decode of the inverse maps (sequential active-voxel index -> leaf ID + intra-leaf voxel offset) for a single voxel block, intended to be called once per block from a parallel loop.
  • nanovdb::util::shuffleDownMask: generic masked shuffle-down primitive used by the decode; a candidate for a future nanovdb/util/Algo.h.