VkAccelerationStructureBuildRangeInfoKHR
VkAccelerationStructureBuildRangeInfoKHR is defined as:
typedef struct VkAccelerationStructureBuildRangeInfoKHR {
uint32_t primitiveCount;
uint32_t primitiveOffset;
uint32_t firstVertex;
uint32_t transformOffset;
} VkAccelerationStructureBuildRangeInfoKHR;
primitiveCountdefines the number of primitives for a corresponding acceleration structure geometry.primitiveOffsetdefines an offset in bytes into the memory where primitive data is defined.firstVertexis the index of the first vertex to build from for triangle geometry.transformOffsetdefines an offset in bytes into the memory where a transform matrix is defined.
The primitive count and primitive offset are interpreted differently depending on the VkGeometryTypeKHR used:
- For geometries of type
VK_GEOMETRY_TYPE_TRIANGLES_KHR,primitiveCountis the number of triangles to be built, where each triangle is treated as 3 vertices.- If the geometry uses indices,
primitiveCount× 3 indices are consumed from VkAccelerationStructureGeometryTrianglesDataKHR::indexData, starting at an offset ofprimitiveOffset. The value offirstVertexis added to the index values before fetching vertices. - If the geometry does not use indices,
primitiveCount× 3 vertices are consumed from VkAccelerationStructureGeometryTrianglesDataKHR::vertexData, starting at an offset ofprimitiveOffset+ VkAccelerationStructureGeometryTrianglesDataKHR::vertexStride×firstVertex. - If
VkAccelerationStructureGeometryTrianglesDataKHR::
transformDatais notNULL, a single VkTransformMatrixKHR structure is consumed from VkAccelerationStructureGeometryTrianglesDataKHR::transformData, at an offset oftransformOffset. This matrix describes a transformation from the space in which the vertices for all triangles in this geometry are described to the space in which the acceleration structure is defined.
- If the geometry uses indices,
- For geometries of type
VK_GEOMETRY_TYPE_AABBS_KHR,primitiveCountis the number of axis-aligned bounding boxes.primitiveCountVkAabbPositionsKHR structures are consumed from VkAccelerationStructureGeometryAabbsDataKHR::data, starting at an offset ofprimitiveOffset. - For geometries of type
VK_GEOMETRY_TYPE_SPHERES_NV,primitiveCountis the number of spheres to be built, where each sphere is treated as 1 vertex.- If the geometry uses indices,
primitiveCountindices are consumed from VkAccelerationStructureGeometrySpheresDataNV::indexData, starting at an offset ofprimitiveOffset. The value offirstVertexis added to the index values before fetching vertices and radii. - If the geometry does not use indices,
primitiveCountvertices and radii are consumed from VkAccelerationStructureGeometrySpheresDataNV::vertexData, starting at an offset ofprimitiveOffset+ VkAccelerationStructureGeometrySpheresDataNV::vertexStride×firstVertexand VkAccelerationStructureGeometrySpheresDataNV::radiusData, starting at an offset ofprimitiveOffset+ VkAccelerationStructureGeometrySpheresDataNV::radiusStride×firstVertexrespectively.
- If the geometry uses indices,
- For geometries of type
VK_GEOMETRY_TYPE_LINEAR_SWEPT_SPHERES_NV,primitiveCountis the number of LSS primitives to be built, where each LSS primitive is treated as 2 vertices.- If the geometry uses indices,
primitiveCount× 2 indices are consumed from VkAccelerationStructureGeometryLinearSweptSpheresDataNV::indexData, starting at an offset ofprimitiveOffset. The value offirstVertexis added to the index values before fetching vertices and radii. - If the geometry does not use indices,
primitiveCount× 2 vertices and radii are consumed from VkAccelerationStructureGeometryLinearSweptSpheresDataNV::vertexData, starting at an offset ofprimitiveOffset+ VkAccelerationStructureGeometryLinearSweptSpheresDataNV::vertexStride×firstVertexand VkAccelerationStructureGeometryLinearSweptSpheresDataNV::radiusData, starting at an offset ofprimitiveOffset+ VkAccelerationStructureGeometryLinearSweptSpheresDataNV::radiusStride×firstVertexrespectively.
- If the geometry uses indices,
- For geometries of type
VK_GEOMETRY_TYPE_INSTANCES_KHR,primitiveCountis the number of acceleration structures.primitiveCountVkAccelerationStructureInstanceKHR or VkAccelerationStructureMotionInstanceNV structures are consumed from VkAccelerationStructureGeometryInstancesDataKHR::data, starting at an offset ofprimitiveOffset.
Valid Usage
VUID-VkAccelerationStructureBuildRangeInfoKHR-vertexData-10418
The number of vertices consumed from
VkAccelerationStructureGeometryTrianglesDataKHR::vertexDatamust be less than or equal to
VkAccelerationStructureGeometryTrianglesDataKHR::maxVertex
+ 1
VUID-VkAccelerationStructureBuildRangeInfoKHR-primitiveOffset-03656
For geometries of type VK_GEOMETRY_TYPE_TRIANGLES_KHR, if the
geometry uses indices, the offset primitiveOffset from
VkAccelerationStructureGeometryTrianglesDataKHR::indexDatamust be a multiple of the element size of
VkAccelerationStructureGeometryTrianglesDataKHR::indexType
VUID-VkAccelerationStructureBuildRangeInfoKHR-primitiveOffset-03657
For geometries of type VK_GEOMETRY_TYPE_TRIANGLES_KHR, if the
geometry does not use indices, the offset primitiveOffset from
VkAccelerationStructureGeometryTrianglesDataKHR::vertexDatamust be a multiple of:
- the size of the format specified in
VkAccelerationStructureGeometryTrianglesDataKHR::
vertexFormat, if that format is a packed format - the component size of the
VkAccelerationStructureGeometryTrianglesDataKHR::
vertexFormat, if that format is not a packed format ::
VUID-VkAccelerationStructureBuildRangeInfoKHR-transformOffset-03658
For geometries of type VK_GEOMETRY_TYPE_TRIANGLES_KHR, the offset
transformOffset from
VkAccelerationStructureGeometryTrianglesDataKHR::transformDatamust be a multiple of 16
VUID-VkAccelerationStructureBuildRangeInfoKHR-primitiveOffset-03659
For geometries of type VK_GEOMETRY_TYPE_AABBS_KHR, the offset
primitiveOffset from
VkAccelerationStructureGeometryAabbsDataKHR::data must be a
multiple of 8
VUID-VkAccelerationStructureBuildRangeInfoKHR-primitiveOffset-03660
For geometries of type VK_GEOMETRY_TYPE_INSTANCES_KHR, the offset
primitiveOffset from
VkAccelerationStructureGeometryInstancesDataKHR::data must
be a multiple of 16
::