VkClusterAccelerationStructureBuildTriangleClusterInfoNV
The VkClusterAccelerationStructureBuildTriangleClusterInfoNV structure is defined as:
typedef struct VkClusterAccelerationStructureBuildTriangleClusterInfoNV {
// The bitfields in this structure are non-normative since bitfield ordering is implementation-defined in C. The specification defines the normative layout.;
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;
pub struct ClusterAccelerationStructureBuildTriangleClusterInfoNV {
/// The bitfields in this structure are non-normative since bitfield ordering is implementation-defined in C. The specification defines the normative layout.
cluster_id: u32,
cluster_flags: vk::ClusterAccelerationStructureClusterFlagsNV,
triangle_count: u32,
vertex_count: u32,
position_truncate_bit_count: u32,
index_type: u32,
opacity_micromap_index_type: u32,
base_geometry_index_and_geometry_flags: vk::ClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV,
index_buffer_stride: u16,
vertex_buffer_stride: u16,
geometry_index_and_flags_buffer_stride: u16,
opacity_micromap_index_buffer_stride: u16,
index_buffer: vk::DeviceAddress,
vertex_buffer: vk::DeviceAddress,
geometry_index_and_flags_buffer: vk::DeviceAddress,
opacity_micromap_array: vk::DeviceAddress,
opacity_micromap_index_buffer: vk::DeviceAddress,
}
clusterIDis a user specified identifier assigned to this cluster.clusterFlagsis a bitmask of VkClusterAccelerationStructureClusterFlagBitsNV values describing flags how the cluster should be built.triangleCountis the number of triangles in this cluster.vertexCountis the number of unique vertices in this cluster.positionTruncateBitCountis 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.indexTypeis a single VkClusterAccelerationStructureIndexFormatFlagBitsNV value specifying the index type inindexBuffer.opacityMicromapIndexTypeis a single VkClusterAccelerationStructureIndexFormatFlagBitsNV value specifying the index type inopacityMicromapIndexBuffer.baseGeometryIndexAndGeometryFlagsis a VkClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV value specifying the base geometry index and flags for all triangles in the cluster.indexBufferStrideis the stride in bytes inindexBufferwith0meaning the values are tightly-packed.vertexBufferStrideis the stride in bytes invertexBufferwith0meaning the values are tightly-packed.geometryIndexAndFlagsBufferStrideis the stride in bytes ingeometryIndexAndFlagsBufferwith0meaning the values are tightly-packed.opacityMicromapIndexBufferStrideis the stride in bytes inopacityMicromapIndexBufferwith0meaning the values are tightly-packed.indexBufferis a device address containing the indices of the vertices in the cluster and are of typeindexType.vertexBufferis a device address containing the vertex data of the triangles in the cluster with format specified in VkClusterAccelerationStructureTriangleClusterInputNV::vertexFormat.geometryIndexAndFlagsBufferis either0or an address containing strided VkClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV values specifying the geometry index and flag for every triangle in the cluster.opacityMicromapArrayis either0or specifies the address of a valid opacity micromap array to reference from the cluster acceleration structure. If it is0, then opacity micromaps will be disabled for this cluster acceleration structure.opacityMicromapIndexBufferis either0or specifies the address of a strided array with size equal to the number of triangles or indices into the opacity micromap array. IfopacityMicromapIndexBufferis0then the index used is the index of the triangle in the geometry.
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,indexTypeandopacityMicromapIndexTypeoccupy the same memory as if a singleuint32_twas specified in their placetriangleCountoccupies the 9 least significant bits of that memoryvertexCountoccupies the next 9 least significant bits of that memorypositionTruncateBitCountoccupies the next 6 least significant bits of that memoryindexTypeoccupies the next 4 least significant bits of that memoryopacityMicromapIndexTypeoccupies 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.
Valid Usage
VUID-VkClusterAccelerationStructureBuildTriangleClusterInfoNV-clusterID-10488
clusterID must not be 0xFFFFFFFF
VUID-VkClusterAccelerationStructureBuildTriangleClusterInfoNV-triangleCount-10489
triangleCount must be less than or equal to
VkPhysicalDeviceClusterAccelerationStructurePropertiesNV::maxTrianglesPerCluster
VUID-VkClusterAccelerationStructureBuildTriangleClusterInfoNV-vertexCount-10490
vertexCount must be less than or equal to
VkPhysicalDeviceClusterAccelerationStructurePropertiesNV::maxVerticesPerCluster
VUID-VkClusterAccelerationStructureBuildTriangleClusterInfoNV-indexType-10491
indexType must only have a single bit set
VUID-VkClusterAccelerationStructureBuildTriangleClusterInfoNV-opacityMicromapIndexType-10492
opacityMicromapIndexType must only have a single bit set
VUID-VkClusterAccelerationStructureBuildTriangleClusterInfoNV-positionTruncateBitCount-10493
positionTruncateBitCount must be greater than or equal to
VkClusterAccelerationStructureTriangleClusterInputNV::minPositionTruncateBitCount
and less than or equal to 32
VUID-VkClusterAccelerationStructureBuildTriangleClusterInfoNV-indexBufferStride-10494
indexBufferStride must be 0 or a multiple of indexType
VUID-VkClusterAccelerationStructureBuildTriangleClusterInfoNV-vertexBufferStride-10495
vertexBufferStride must be 0 or a multiple of value specified
in
VkClusterAccelerationStructureTriangleClusterInputNV::vertexFormat
VUID-VkClusterAccelerationStructureBuildTriangleClusterInfoNV-baseGeometryIndex-10496
The maximum geometry index after using the values in
baseGeometryIndex and geometryIndexBuffer must be less than
VkPhysicalDeviceClusterAccelerationStructurePropertiesNV::maxClusterGeometryIndex
VUID-VkClusterAccelerationStructureBuildTriangleClusterInfoNV-opacityMicromapArray-10881
If opacityMicromapArray is not 0, then the cluster acceleration
structure must have been built with
VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_CLUSTER_OPACITY_MICROMAPS_BIT_NV
flag set in VkClusterAccelerationStructureInputInfoNV::flags
Valid Usage (Implicit)
VUID-VkClusterAccelerationStructureBuildTriangleClusterInfoNV-clusterFlags-parameter
clusterFlags must be a valid combination of VkClusterAccelerationStructureClusterFlagBitsNV values
VUID-VkClusterAccelerationStructureBuildTriangleClusterInfoNV-indexBuffer-parameter
indexBuffer must be a valid VkDeviceAddress value
VUID-VkClusterAccelerationStructureBuildTriangleClusterInfoNV-vertexBuffer-parameter
vertexBuffer must be a valid VkDeviceAddress value
VUID-VkClusterAccelerationStructureBuildTriangleClusterInfoNV-geometryIndexAndFlagsBuffer-parameter
If geometryIndexAndFlagsBuffer is not 0, geometryIndexAndFlagsBuffer must be a valid VkDeviceAddress value
VUID-VkClusterAccelerationStructureBuildTriangleClusterInfoNV-opacityMicromapArray-parameter
If opacityMicromapArray is not 0, opacityMicromapArray must be a valid VkDeviceAddress value
VUID-VkClusterAccelerationStructureBuildTriangleClusterInfoNV-opacityMicromapIndexBuffer-parameter
If opacityMicromapIndexBuffer is not 0, opacityMicromapIndexBuffer must be a valid VkDeviceAddress value