C Specification
The VkClusterAccelerationStructureBuildTriangleClusterInfoNV structure is defined as:
// Provided by VK_NV_cluster_acceleration_structure
typedef struct VkClusterAccelerationStructureBuildTriangleClusterInfoNV {
uint32_t clusterID;
VkClusterAccelerationStructureClusterFlagsNV clusterFlags;
uint32_t triangleCount:9;
uint32_t vertexCount:9;
uint32_t positionTruncateBitCount:6;
uint32_t indexType:4;
uint32_t opacityMicromapIndexType:4;
VkClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV baseGeometryIndexAndGeometryFlags;
uint16_t indexBufferStride;
uint16_t vertexBufferStride;
uint16_t geometryIndexAndFlagsBufferStride;
uint16_t opacityMicromapIndexBufferStride;
VkDeviceAddress indexBuffer;
VkDeviceAddress vertexBuffer;
VkDeviceAddress geometryIndexAndFlagsBuffer;
VkDeviceAddress opacityMicromapArray;
VkDeviceAddress opacityMicromapIndexBuffer;
} VkClusterAccelerationStructureBuildTriangleClusterInfoNV;
Members
-
clusterID
is a user specified identifier assigned to this cluster. -
clusterFlags
is a bitmask of VkClusterAccelerationStructureClusterFlagBitsNV values describing flags how the cluster should be built. -
triangleCount
is the number of triangles in this cluster. -
vertexCount
is the number of unique vertices in this cluster. -
positionTruncateBitCount
is the number of bits starting at the lowest bit (i.e. the LSBs of the mantissa), of each vertex position that will be truncated to zero to improve floating-point compression. -
indexType
is a single VkClusterAccelerationStructureIndexFormatFlagBitsNV value specifying the index type inindexBuffer
. -
opacityMicromapIndexType
is a single VkClusterAccelerationStructureIndexFormatFlagBitsNV value specifying the index type inopacityMicromapIndexBuffer
. -
baseGeometryIndexAndGeometryFlags
is a VkClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV value specifying the base geometry index and flags for all triangles in the cluster. -
indexBufferStride
is the stride in bytes inindexBuffer
with0
meaning the values are tightly-packed. -
vertexBufferStride
is the stride in bytes invertexBuffer
with0
meaning the values are tightly-packed. -
geometryIndexAndFlagsBufferStride
is the stride in bytes ingeometryIndexAndFlagsBuffer
with0
meaning the values are tightly-packed. -
opacityMicromapIndexBufferStride
is the stride in bytes inopacityMicromapIndexBuffer
with0
meaning the values are tightly-packed. -
indexBuffer
contains the indices of vertices in the cluster and is of typeindexType
. -
vertexBuffer
specifies the vertex data of the triangles in the cluster with format specified in VkClusterAccelerationStructureTriangleClusterInputNV::vertexFormat
. -
geometryIndexAndFlagsBuffer
is eitherNULL
or an address containing strided VkClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV values specifying the geometry index and flag for every triangle in the cluster. -
opacityMicromapArray
is eitherNULL
or specifies the address of a valid opacity micromap array to reference from the cluster acceleration structure. If it isNULL
, then opacity micromaps will be disabled for this cluster acceleration structure. -
opacityMicromapIndexBuffer
is eitherNULL
or specifies the address of a strided array with size equal to the number of triangles or indices into the opacity micromap array.
Description
The C language specification does not define the ordering of bit-fields, but in practice, this structure produces the correct layout with existing compilers. The intended bit pattern is the following:
-
triangleCount
,vertexCount
,positionTruncateBitCount
,indexType
andopacityMicromapIndexType
occupy the same memory as if a singleuint32_t
was specified in their place-
triangleCount
occupies the 9 least significant bits of that memory -
vertexCount
occupies the next 9 least significant bits of that memory -
positionTruncateBitCount
occupies the next 6 least significant bits of that memory -
indexType
occupies the next 4 least significant bits of that memory -
opacityMicromapIndexType
occupies the 4 most significant bits of that memory
-
If a compiler produces code that diverges from that pattern, applications must employ another method to set values according to the correct bit pattern.
Document Notes
For more information, see the Vulkan Specification
This page is extracted from the Vulkan Specification. Fixes and changes should be made to the Specification, not directly.