Structures
VkAccelerationStructureMatrixMotionInstanceNV
Structure specifying a single acceleration structure matrix motion instance for building into an acceleration structure geometry
An acceleration structure matrix motion instance is defined by the structure:
typedef struct VkAccelerationStructureMatrixMotionInstanceNV {
// The bitfields in this structure are non-normative since bitfield ordering is implementation-defined in C. The specification defines the normative layout.;
VkTransformMatrixKHR transformT0;
VkTransformMatrixKHR transformT1;
uint32_t instanceCustomIndex:24;
uint32_t mask:8;
uint32_t instanceShaderBindingTableRecordOffset:24;
VkGeometryInstanceFlagsKHR flags:8;
uint64_t accelerationStructureReference;
} VkAccelerationStructureMatrixMotionInstanceNV;
transformT0
is a VkTransformMatrixKHR structure describing a transformation to be applied to the acceleration structure at time 0.transformT1
is a VkTransformMatrixKHR structure describing a transformation to be applied to the acceleration structure at time 1.instanceCustomIndex
is a 24-bit application-specified index value accessible to ray shaders in theInstanceCustomIndexKHR
built-in.mask
is an 8-bit visibility mask for the geometry. The instance may only be hit ifCull Mask & instance.mask != 0
instanceShaderBindingTableRecordOffset
is a 24-bit offset used in calculating the hit shader binding table index.flags
is an 8-bit mask of VkGeometryInstanceFlagBitsKHR values to apply to this instance.accelerationStructureReference
is either:- a device address containing the value obtained from vkGetAccelerationStructureDeviceAddressKHR or vkGetAccelerationStructureHandleNV (used by device operations which reference acceleration structures) or,
- a VkAccelerationStructureKHR object (used by host operations which reference acceleration structures).
The C language specification does not define the ordering of bit-fields, but in practice, this struct produces the correct layout with existing compilers. The intended bit pattern is for the following:
instanceCustomIndex
andmask
occupy the same memory as if a singleuint32_t
was specified in their placeinstanceCustomIndex
occupies the 24 least significant bits of that memorymask
occupies the 8 most significant bits of that memory
instanceShaderBindingTableRecordOffset
andflags
occupy the same memory as if a singleuint32_t
was specified in their placeinstanceShaderBindingTableRecordOffset
occupies the 24 least significant bits of that memoryflags
occupies the 8 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.
The transform for a matrix motion instance at a point in time is derived by
component-wise linear interpolation of the two transforms.
That is, for a time
in [0,1] the resulting transform is
transformT0
× (1 -time
) +transformT1
×time
Valid Usage (Implicit)
VUID-VkAccelerationStructureMatrixMotionInstanceNV-flags-parameter
flags
must be a valid combination of VkGeometryInstanceFlagBitsKHR values