Structures

VkClusterAccelerationStructureBuildTriangleClusterInfoNV

Parameters describing build operation for a cluster acceleration structure

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;
  • 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 in indexBuffer.
  • opacityMicromapIndexType is a single VkClusterAccelerationStructureIndexFormatFlagBitsNV value specifying the index type in opacityMicromapIndexBuffer.
  • baseGeometryIndexAndGeometryFlags is a VkClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV value specifying the base geometry index and flags for all triangles in the cluster.
  • indexBufferStride is the stride in bytes in indexBuffer with 0 meaning the values are tightly-packed.
  • vertexBufferStride is the stride in bytes in vertexBuffer with 0 meaning the values are tightly-packed.
  • geometryIndexAndFlagsBufferStride is the stride in bytes in geometryIndexAndFlagsBuffer with 0 meaning the values are tightly-packed.
  • opacityMicromapIndexBufferStride is the stride in bytes in opacityMicromapIndexBuffer with 0 meaning the values are tightly-packed.
  • indexBuffer contains the indices of vertices in the cluster and is of type indexType.
  • vertexBuffer specifies the vertex data of the triangles in the cluster with format specified in VkClusterAccelerationStructureTriangleClusterInputNV::vertexFormat.
  • geometryIndexAndFlagsBuffer is either NULL or an address containing strided VkClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV values specifying the geometry index and flag for every triangle in the cluster.
  • opacityMicromapArray is either NULL or specifies the address of a valid opacity micromap array to reference from the cluster acceleration structure. If it is NULL, then opacity micromaps will be disabled for this cluster acceleration structure.
  • opacityMicromapIndexBuffer is either NULL or specifies the address of a strided array with size equal to the number of triangles or indices into the opacity micromap array.

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 and opacityMicromapIndexType occupy the same memory as if a single uint32_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.

Valid Usage

VUID-VkClusterAccelerationStructureBuildTriangleClusterInfoNV-positionTruncateBitCount-10493

positionTruncateBitCount must be greater than or equal to VkClusterAccelerationStructureTriangleClusterInputNV::minPositionTruncateBitCount and less than or equal to 32

VUID-VkClusterAccelerationStructureBuildTriangleClusterInfoNV-baseGeometryIndex-10496

The maximum geometry index after using the values in baseGeometryIndex and geometryIndexBuffer must be less than VkPhysicalDeviceClusterAccelerationStructurePropertiesNV::maxClusterGeometryIndex