The input buffers passed to this commands will be referenced by the
implementation for the duration of this command’s execution on the
device.
The required alignment of the device addresses passed in to parameters
below might not be provided by the base address of a
Buffer created with the correct usage flags and
must still be manually aligned by the application code.
Each element of ppBuildRangeInfos[i] must be a valid pointer to
an array of pInfos[i].geometryCount
AccelerationStructureBuildRangeInfoKHR structures if the
pInfos[i].type is not one of:
For each
element of pInfos[i] whose pGeometries or ppGeometries members
have a geometryType of
GEOMETRY_TYPE_DENSE_GEOMETRY_FORMAT_TRIANGLES_AMDX,
ppBuildRangeInfos[i] must be NULL
For each element of pInfos[i] whose pGeometries or
ppGeometries members have a geometryType of
GEOMETRY_TYPE_MICROMAP_KHR, ppBuildRangeInfos[i] must be
NULL
For each
element of pInfos, if its type member is
ACCELERATION_STRUCTURE_TYPE_OPACITY_MICROMAP_KHR, its mode
must equal BUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR
For each element of pInfos, if its type member is
ACCELERATION_STRUCTURE_TYPE_OPACITY_MICROMAP_KHR, its
srcAccelerationStructure must be
NULL_HANDLE
For each element of pInfos, if its type member is
ACCELERATION_STRUCTURE_TYPE_OPACITY_MICROMAP_KHR, its
dstAccelerationStructure member must have been created with a
value of AccelerationStructureCreateInfoKHR::type equal to
either ACCELERATION_STRUCTURE_TYPE_OPACITY_MICROMAP_KHR or
ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR
The dstAccelerationStructure member of any element of pInfos
must not be referenced by any
AccelerationStructureTrianglesOpacityMicromapKHR::micromap
member included in the pNext chain of any geometry.triangles
member of any element of pGeometries or ppGeometries in any
other element of pInfos
The range of memory backing the dstAccelerationStructure member of
any element of pInfos that is accessed by this command must not
overlap the memory backing any
AccelerationStructureTrianglesOpacityMicromapKHR::micromap
member included in the pNext chain of any geometry.triangles
member of any element of pGeometries or ppGeometries in any
other element of pInfos, which is accessed by this command
For each
element of pInfos[i].pGeometries or pInfos[i].ppGeometries,
if it includes a
AccelerationStructureGeometryMicromapDataKHR
structure in its pNext chain, its data and triangleArray
members must be a valid
DeviceAddress
For each
element of pInfos[i].pGeometries or pInfos[i].ppGeometries,
if it includes a
AccelerationStructureGeometryMicromapDataKHR
structure in its pNext chain, the buffers from which the buffer
device addresses for its data and triangleArray members are
queried must have been created with the
BUFFER_USAGE_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR
usage flag
For each
element of pInfos[i].pGeometries or pInfos[i].ppGeometries,
if it includes a
AccelerationStructureGeometryMicromapDataKHR
structure in its pNext chain, its data and triangleArray
members must be a multiple of 128
For each
element of pInfos[i].pGeometries or pInfos[i].ppGeometries,
if it includes a
AccelerationStructureGeometryMicromapDataKHR
structure in its pNext chain, each element of its triangleArray
member must specify an access within the range of the
Buffer that data was retrieved from, given
by [dataOffset, dataOffset
triangleSize] where triangleSize is calculated using its format
and subdivisionLevel members rounded up to the nearest byte
For each
element of pInfos[i].pGeometries or pInfos[i].ppGeometries,
if it includes a
AccelerationStructureGeometryMicromapDataKHR
structure in its pNext chain, the range of [triangleArray,
triangleArray + (triangleArrayStride * numTriangles)] must be
within the range of the Buffer from which
the triangleArray member was retrieved from, where numTriangles
is the sum of count of all elements of pUsageCounts or
ppUsageCounts
For each
element of pInfos[i].pGeometries or pInfos[i].ppGeometries,
if it includes a
AccelerationStructureGeometryMicromapDataKHR
structure in its pNext chain, each element of its
geometry.triangleArray member must have a format with a valid
value from
OpacityMicromapFormatKHR
For each
element of pInfos[i].pGeometries or pInfos[i].ppGeometries,
if it includes a
AccelerationStructureGeometryMicromapDataKHR
structure in its pNext chain, for each element of its
triangleArray member with a format equal to
OPACITY_MICROMAP_FORMAT_2_STATE_KHR,
subdivisionLevel must be less than or equal to
maxOpacity2StateSubdivisionLevel
For
each element of pInfos[i].pGeometries or
pInfos[i].ppGeometries with a geometryType equal to
GEOMETRY_TYPE_TRIANGLES_KHR, if its geometry.triangles member
includes a
AccelerationStructureTrianglesOpacityMicromapKHR
structure in its pNext chain, the micromap’s indexType member is
not INDEX_TYPE_NONE_KHR, and
micromap is not NULL_HANDLE, for each
index in indexBuffer[j] greater than zero where j is within
the range [0, numTrianglesInGeometry - 1] where
numTrianglesInGeometry is equal to
ppBuildRangeInfos[i]→primitiveCount, index plus baseTriangle
must be less than or equal to numTriangles, where numTriangles
is given by the sum of all count parameters in the pUsageCounts
or ppUsageCounts provided to the micromap’s build command
For
each element of pInfos[i].pGeometries or
pInfos[i].ppGeometries with a geometryType equal to
GEOMETRY_TYPE_TRIANGLES_KHR, if its geometry.triangles member
includes a
AccelerationStructureTrianglesOpacityMicromapKHR
structure in its pNext chain, and the micromap’s indexType
member is not INDEX_TYPE_NONE_KHR,
indexBuffer
(indexStride * numTrianglesInGeometry) must be within the range
of the Buffer from which the indexBuffer
device address was obtained from where numTrianglesInGeometry is
equal to ppBuildRangeInfos[i]→primitiveCount
For
each element of pInfos[i].pGeometries or
pInfos[i].ppGeometries with a geometryType equal to
GEOMETRY_TYPE_TRIANGLES_KHR, if its geometry.triangles member
includes a
AccelerationStructureTrianglesOpacityMicromapKHR
structure in its pNext chain, the micromap’s indexType member is
not INDEX_TYPE_NONE_KHR, and
micromap is NULL_HANDLE, for each
index in indexBuffer[j] where j is within the range from [0,
numTrianglesInGeometry - 1], index must be a valid
OpacityMicromapSpecialIndexKHR
value where numTrianglesInGeometry is equal to
ppBuildRangeInfos[i]→primitiveCount
The mode
member of each element of pInfos must be a valid
BuildAccelerationStructureModeKHR value
If the srcAccelerationStructure member of any element of pInfos
is not NULL_HANDLE, the
srcAccelerationStructure member must be a valid
AccelerationStructureKHR handle
For each
element of pInfos, if its mode member is
BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, its
srcAccelerationStructure member must not be
NULL_HANDLE
For each
element of pInfos, if its mode member is
BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR,
srcAccelerationStructure must be fully backed by physical memory
The
srcAccelerationStructure member of any element of pInfos must
not be the same acceleration structure as the
dstAccelerationStructure member of any other element of pInfos
The dstAccelerationStructure member of any element of pInfos
must not be the same acceleration structure as the
dstAccelerationStructure member of any other element of pInfos
The dstAccelerationStructure member of any element of pInfos
must be a valid
AccelerationStructureKHR handle
For each
element of pInfos, its dstAccelerationStructure member must be
fully backed by physical memory
For each
element of pInfos, if its type member is
ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR, its
dstAccelerationStructure member must have been created with a
value of AccelerationStructureCreateInfoKHR::type equal to
either ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR or
ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR
For each
element of pInfos, if its type member is
ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR, its
dstAccelerationStructure member must have been created with a
value of AccelerationStructureCreateInfoKHR::type equal to
either ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR or
ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR
For each
element of pInfos, if its mode member is
BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR,
inactive primitives
in its srcAccelerationStructure member must not be made active
For each
element of pInfos, if its mode member is
BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, active primitives in
its srcAccelerationStructure member must not be made
inactive
For each
element of pInfos, if an acceleration structure is referenced by
the geometry.instances.data member of any element of pGeometries
or ppGeometries with a geometryType of
GEOMETRY_TYPE_INSTANCES_KHR, it must be fully backed by physical
memory
The
dstAccelerationStructure member of any element of pInfos must
not be referenced by the geometry.instances.data member of any
element of pGeometries or ppGeometries with a geometryType of
GEOMETRY_TYPE_INSTANCES_KHR in any other element of pInfos
The range of memory backing the dstAccelerationStructure member of
any element of pInfos that is accessed by this command must not
overlap the memory backing the srcAccelerationStructure member of
any other element of pInfos with a mode equal to
BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, which is accessed by
this command
The range of memory backing the dstAccelerationStructure member of
any element of pInfos that is accessed by this command must not
overlap the memory backing the dstAccelerationStructure member of
any other element of pInfos, which is accessed by this command
The range of memory backing the dstAccelerationStructure member of
any element of pInfos that is accessed by this command must not
overlap the memory backing the scratchData member of any element
of pInfos (including the same element), which is accessed by this
command
The
range of memory backing the scratchData member of any element of
pInfos that is accessed by this command must not overlap the
memory backing the scratchData member of any other element of
pInfos, which is accessed by this command
The
range of memory backing the scratchData member of any element of
pInfos that is accessed by this command must not overlap the
memory backing the srcAccelerationStructure member of any element
of pInfos with a mode equal to
BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR (including the same
element), which is accessed by this command
The range of memory backing the dstAccelerationStructure member of
any element of pInfos that is accessed by this command must not
overlap the memory backing any acceleration structure referenced by
the geometry.instances.data member of any element of pGeometries
or ppGeometries with a geometryType of
GEOMETRY_TYPE_INSTANCES_KHR in any other element of pInfos,
which is accessed by this command
For each
element of pInfos, if its mode member is
BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, its
srcAccelerationStructure member must have previously been
constructed with BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR
set in AccelerationStructureBuildGeometryInfoKHR::flags in the
build
For each
element of pInfos, if its mode member is
BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, its
srcAccelerationStructure and dstAccelerationStructure members
must either be the same
AccelerationStructureKHR, or not have
any
memory aliasing
For each
element of pInfos, if its mode member is
BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, its geometryCount
member must have the same value which was specified when
srcAccelerationStructure was last built
For each
element of pInfos, if its mode member is
BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, its flags member
must have the same value which was specified when
srcAccelerationStructure was last built
For each
element of pInfos, if its mode member is
BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, its type member
must have the same value which was specified when
srcAccelerationStructure was last built
For each
element of pInfos, if its mode member is
BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each
AccelerationStructureGeometryKHR structure referred to by its
pGeometries or ppGeometries members, its geometryType member
must have the same value which was specified when
srcAccelerationStructure was last built
For each
element of pInfos, if its mode member is
BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each
AccelerationStructureGeometryKHR structure referred to by its
pGeometries or ppGeometries members, its flags member must
have the same value which was specified when
srcAccelerationStructure was last built
For each
element of pInfos, if its mode member is
BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each
AccelerationStructureGeometryKHR structure referred to by its
pGeometries or ppGeometries members, if geometryType is
GEOMETRY_TYPE_TRIANGLES_KHR, its geometry.triangles.vertexFormat
member must have the same value which was specified when
srcAccelerationStructure was last built
For each
element of pInfos, if its mode member is
BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each
AccelerationStructureGeometryKHR structure referred to by its
pGeometries or ppGeometries members, if geometryType is
GEOMETRY_TYPE_TRIANGLES_KHR, its geometry.triangles.maxVertex
member must have the same value which was specified when
srcAccelerationStructure was last built
For each
element of pInfos, if its mode member is
BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each
AccelerationStructureGeometryKHR structure referred to by its
pGeometries or ppGeometries members, if geometryType is
GEOMETRY_TYPE_TRIANGLES_KHR, its geometry.triangles.indexType
member must have the same value which was specified when
srcAccelerationStructure was last built
For each
element of pInfos, if its mode member is
BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each
AccelerationStructureGeometryKHR structure referred to by its
pGeometries or ppGeometries members, if geometryType is
GEOMETRY_TYPE_TRIANGLES_KHR, if its
geometry.triangles.transformData address was NULL when
srcAccelerationStructure was last built, then it must be NULL
For each
element of pInfos, if its mode member is
BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each
AccelerationStructureGeometryKHR structure referred to by its
pGeometries or ppGeometries members, if geometryType is
GEOMETRY_TYPE_TRIANGLES_KHR, if its
geometry.triangles.transformData address was not NULL when
srcAccelerationStructure was last built, then it must not be
NULL
For each
element of pInfos, if its mode member is
BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each
AccelerationStructureGeometryKHR structure referred to by its
pGeometries or ppGeometries members, if geometryType is
GEOMETRY_TYPE_DENSE_GEOMETRY_FORMAT_TRIANGLES_AMDX, the
numTriangles member of the
AccelerationStructureDenseGeometryFormatTrianglesDataAMDX
structure in the pNext chain must have the same value which was
specified when srcAccelerationStructure was last built
For each
element of pInfos, if its mode member is
BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each
AccelerationStructureGeometryKHR structure referred to by its
pGeometries or ppGeometries members, if geometryType is
GEOMETRY_TYPE_DENSE_GEOMETRY_FORMAT_TRIANGLES_AMDX, the
numVertices member of the
AccelerationStructureDenseGeometryFormatTrianglesDataAMDX
structure in the pNext chain must have the same value which was
specified when srcAccelerationStructure was last built
For each
element of pInfos, if its mode member is
BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each
AccelerationStructureGeometryKHR structure referred to by its
pGeometries or ppGeometries members, if geometryType is
GEOMETRY_TYPE_DENSE_GEOMETRY_FORMAT_TRIANGLES_AMDX, the
maxPrimitiveIndex member of the
AccelerationStructureDenseGeometryFormatTrianglesDataAMDX
structure in the pNext chain must have the same value which was
specified when srcAccelerationStructure was last built
For each
element of pInfos, if its mode member is
BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each
AccelerationStructureGeometryKHR structure referred to by its
pGeometries or ppGeometries members, if geometryType is
GEOMETRY_TYPE_DENSE_GEOMETRY_FORMAT_TRIANGLES_AMDX, the
maxGeometryIndex member of the
AccelerationStructureDenseGeometryFormatTrianglesDataAMDX
structure in the pNext chain must have the same value which was
specified when srcAccelerationStructure was last built
For each
element of pInfos, if its mode member is
BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each
AccelerationStructureGeometryKHR structure referred to by its
pGeometries or ppGeometries members, if geometryType is
GEOMETRY_TYPE_DENSE_GEOMETRY_FORMAT_TRIANGLES_AMDX, the format
member of the
AccelerationStructureDenseGeometryFormatTrianglesDataAMDX
structure in the pNext chain must have the same value which was
specified when srcAccelerationStructure was last built
For each
element of pInfos, if its mode member is
BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each
AccelerationStructureGeometryKHR structure referred to by its
pGeometries or ppGeometries members, if geometryType is
GEOMETRY_TYPE_DENSE_GEOMETRY_FORMAT_TRIANGLES_AMDX, the dataSize
member of the
AccelerationStructureDenseGeometryFormatTrianglesDataAMDX
structure in the pNext chain must have the same value which was
specified when srcAccelerationStructure was last built
For each
element of pInfos, if its mode member is
BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each
AccelerationStructureGeometryKHR structure referred to by its
pGeometries or ppGeometries members, if geometryType is
GEOMETRY_TYPE_TRIANGLES_KHR, and geometry.triangles.indexType is
not INDEX_TYPE_NONE_KHR, then the
value of each index referenced must be the same as the
corresponding index value when srcAccelerationStructure was last
built
For
each element of pInfos, if its mode member is
BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each
AccelerationStructureGeometryKHR structure referred to by its
pGeometries or ppGeometries members, the primitiveCount member
of its corresponding AccelerationStructureBuildRangeInfoKHR
structure must have the same value which was specified when
srcAccelerationStructure was last built
For each
element of pInfos[i].pGeometries or pInfos[i].ppGeometries
with a geometryType of GEOMETRY_TYPE_INSTANCES_KHR, the
corresponding ppBuildRangeInfos[i][j].primitiveCount must be
less than or equal to
PhysicalDeviceAccelerationStructurePropertiesKHR::maxInstanceCount
If
pInfos[i].mode is BUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR,
and N is not 0, all addresses between
pInfos[i].scratchData.deviceAddress and
pInfos[i].scratchData.deviceAddress + N - 1 must be in the
buffer device address range of the same buffer, where N is given by
the buildScratchSize member of the
AccelerationStructureBuildSizesInfoKHR structure returned from a
call to getAccelerationStructureBuildSizesKHR with an identical
AccelerationStructureBuildGeometryInfoKHR structure and primitive
count
If
pInfos[i].mode is
BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, and N is not 0,
all addresses between pInfos[i].scratchData.deviceAddress and
pInfos[i].scratchData.deviceAddress + N - 1 must be in the
buffer device address range of the same buffer, where N is given by
the updateScratchSize member of the
AccelerationStructureBuildSizesInfoKHR structure returned from a
call to getAccelerationStructureBuildSizesKHR with an identical
AccelerationStructureBuildGeometryInfoKHR structure and primitive
count
The
buffers from which the buffer device addresses for all of the
geometry.triangles.vertexData, geometry.triangles.indexData,
geometry.triangles.transformData, geometry.aabbs.data, and
geometry.instances.data members of all pInfos[i].pGeometries
and pInfos[i].ppGeometries are queried must have been created
with the
BUFFER_USAGE_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR
usage flag set
If
pInfos[i].mode is
BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, and the size
reported by updateScratchSize member of the
AccelerationStructureBuildSizesInfoKHR structure returned from a
call to getAccelerationStructureBuildSizesKHR with an identical
AccelerationStructureBuildGeometryInfoKHR structure and primitive
count is non-zero, pInfos[i].scratchData.deviceAddress must be
a device address allocated to the application from a buffer created
with the
BUFFER_USAGE_STORAGE_BUFFER_BIT
usage flag set
If
pInfos[i].mode is BUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR,
and the size reported by buildScratchSize member of the
AccelerationStructureBuildSizesInfoKHR structure returned from a
call to getAccelerationStructureBuildSizesKHR with an identical
AccelerationStructureBuildGeometryInfoKHR structure and primitive
count is non-zero, pInfos[i].scratchData.deviceAddress must be
a device address allocated to the application from a buffer created
with the
BUFFER_USAGE_STORAGE_BUFFER_BIT
usage flag set
For each
element of pInfos, its scratchData.deviceAddress member must
be a multiple of
PhysicalDeviceAccelerationStructurePropertiesKHR::minAccelerationStructureScratchOffsetAlignment
For each
element of pInfos[i].pGeometries or pInfos[i].ppGeometries
with a geometryType of GEOMETRY_TYPE_TRIANGLES_KHR,
geometry.triangles.vertexData.deviceAddress must be a valid
DeviceAddress
For each
element of pInfos[i].pGeometries or pInfos[i].ppGeometries
with a geometryType of GEOMETRY_TYPE_TRIANGLES_KHR,
geometry.triangles.vertexData.deviceAddress must be aligned to:
For each
element of pInfos[i].pGeometries or pInfos[i].ppGeometries
with a geometryType of GEOMETRY_TYPE_TRIANGLES_KHR, if
geometry.triangles.indexType is not
INDEX_TYPE_NONE_KHR,
geometry.triangles.indexData.deviceAddress must be a valid
DeviceAddress
For each
element of pInfos[i].pGeometries or pInfos[i].ppGeometries
with a geometryType of GEOMETRY_TYPE_TRIANGLES_KHR, and with
geometry.triangles.indexType not equal to
INDEX_TYPE_NONE_KHR,
geometry.triangles.indexData.deviceAddress must be aligned to
the size in bytes of the type in indexType
For each
element of pInfos[i].pGeometries or pInfos[i].ppGeometries
with a geometryType of GEOMETRY_TYPE_TRIANGLES_KHR, if
geometry.triangles.transformData.deviceAddress is not 0, it
must be a valid DeviceAddress
For each
element of pInfos[i].pGeometries or pInfos[i].ppGeometries
with a geometryType of GEOMETRY_TYPE_TRIANGLES_KHR, if
geometry.triangles.transformData.deviceAddress is not 0, it
must be aligned to 16 bytes
For each
element of pInfos[i].pGeometries or pInfos[i].ppGeometries
with a geometryType of GEOMETRY_TYPE_AABBS_KHR,
geometry.aabbs.data.deviceAddress must be a valid
DeviceAddress
For each
element of pInfos[i].pGeometries or pInfos[i].ppGeometries
with a geometryType of GEOMETRY_TYPE_AABBS_KHR,
geometry.aabbs.data.deviceAddress must be aligned to 8 bytes
For each
element of pInfos[i].pGeometries or pInfos[i].ppGeometries
with a geometryType of GEOMETRY_TYPE_INSTANCES_KHR, if
geometry.arrayOfPointers is
FALSE,
geometry.instances.data.deviceAddress must be aligned to 16
bytes
For each
element of pInfos[i].pGeometries or pInfos[i].ppGeometries
with a geometryType of GEOMETRY_TYPE_INSTANCES_KHR, if
geometry.arrayOfPointers is TRUE,
geometry.instances.data.deviceAddress must be aligned to 8
bytes
For each
element of pInfos[i].pGeometries or pInfos[i].ppGeometries
with a geometryType of GEOMETRY_TYPE_INSTANCES_KHR, if
geometry.arrayOfPointers is TRUE,
each element of geometry.instances.data.deviceAddress in device
memory must be aligned to 16 bytes
For each
element of pInfos[i].pGeometries or pInfos[i].ppGeometries
with a geometryType of GEOMETRY_TYPE_INSTANCES_KHR,
geometry.instances.data.deviceAddress must be a valid
DeviceAddress
For each
element of pInfos[i].pGeometries or pInfos[i].ppGeometries
with a geometryType of GEOMETRY_TYPE_INSTANCES_KHR, each
AccelerationStructureInstanceKHR::accelerationStructureReference
value in geometry.instances.data.deviceAddress must be 0 or a
value obtained from getAccelerationStructureDeviceAddressKHR for a
valid bottom level acceleration structure
For each
element of pInfos[i].pGeometries or pInfos[i].ppGeometries
with a geometryType of GEOMETRY_TYPE_INSTANCES_KHR, if
GEOMETRY_INSTANCE_DISABLE_OPACITY_MICROMAPS_BIT_KHR is set in
AccelerationStructureInstanceKHR::flags then
geometry.instances.data.deviceAddress must refer to an
acceleration structure that was built with
BUILD_ACCELERATION_STRUCTURE_ALLOW_DISABLE_OPACITY_MICROMAPS_BIT_KHR
set in AccelerationStructureBuildGeometryInfoKHR::flags
commandBuffer must not be a protected command buffer
For any
element of pInfos[i].pGeometries or pInfos[i].ppGeometries
with a geometryType of GEOMETRY_TYPE_TRIANGLES_KHR, if there is
an instance of
AccelerationStructureTrianglesOpacityMicromapKHR
in the geometry.triangles.pNext chain with a valid micromap
member, then the micromap member must have been constructed
prior to this command’s execution on the device
For any
element of pInfos[i].pGeometries or pInfos[i].ppGeometries
with a geometryType of GEOMETRY_TYPE_TRIANGLES_KHR, if there is
an instance of
AccelerationStructureTrianglesOpacityMicromapKHR
in the geometry.triangles.pNext chain with a valid micromap
member, then the micromap member must have been built with a
type of ACCELERATION_STRUCTURE_TYPE_OPACITY_MICROMAP_KHR
For each
element of pInfos, if its mode member is
BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each
AccelerationStructureGeometryKHR structure referred to by its
pGeometries or ppGeometries members, if geometryType is
GEOMETRY_TYPE_TRIANGLES_KHR, and the same geometry in the original
build of srcAccelerationStructure was built with an instance of
AccelerationStructureTrianglesOpacityMicromapKHR
in its geometry.triangles.pNext chain with a valid micromap
member, then an instance of
AccelerationStructureTrianglesOpacityMicromapKHR
must be included in the in the geometry.triangles.pNext chain
with a valid micromap member
For each
element of pInfos, if its mode member is
BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each
AccelerationStructureGeometryKHR structure referred to by its
pGeometries or ppGeometries members, if geometryType is
GEOMETRY_TYPE_TRIANGLES_KHR, and the same geometry in the original
build of srcAccelerationStructure was built with an instance of
AccelerationStructureTrianglesOpacityMicromapKHR
in its geometry.triangles.pNext chain with its micromap member
equal to NULL_HANDLE, then an instance
of
AccelerationStructureTrianglesOpacityMicromapKHR
must be included in the in the geometry.triangles.pNext chain
with its micromap member equal to
NULL_HANDLE
For each
element of pInfos, if its mode member is
BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, then for each
AccelerationStructureGeometryKHR structure referred to by its
pGeometries or ppGeometries members, if geometryType is
GEOMETRY_TYPE_TRIANGLES_KHR, and the same geometry in the original
build of srcAccelerationStructure was not built with an instance
of
AccelerationStructureTrianglesOpacityMicromapKHR
in its geometry.triangles.pNext chain, then an instance of
AccelerationStructureTrianglesOpacityMicromapKHR
must not be included in the in the geometry.triangles.pNext
chain
For each
element of pInfos, if its mode member is
BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, its
srcAccelerationStructure was originally built without the
BUILD_ACCELERATION_STRUCTURE_ALLOW_OPACITY_MICROMAP_UPDATE_BIT_KHR
flag, and srcAccelerationStructure was constructed by
deserialization with cmdCopyMemoryToAccelerationStructureKHR, then
for each AccelerationStructureGeometryKHR structure referred to by
its pGeometries or ppGeometries members, if geometryType is
GEOMETRY_TYPE_TRIANGLES_KHR, and the same geometry in the original
build of srcAccelerationStructure was built with an instance of
AccelerationStructureTrianglesOpacityMicromapKHR
in its geometry.triangles.pNext chain with a valid micromap
member, then an instance of
AccelerationStructureTrianglesOpacityMicromapKHR
must be included in the in the geometry.triangles.pNext chain
with a micromap that was deserialized from the serialized data of
the micromap in the original build of srcAccelerationStructure
For each
element of pInfos, if its mode member is
BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, its
srcAccelerationStructure was originally built without either the
BUILD_ACCELERATION_STRUCTURE_ALLOW_OPACITY_MICROMAP_DATA_UPDATE_BIT_EXT
or the
BUILD_ACCELERATION_STRUCTURE_ALLOW_OPACITY_MICROMAP_UPDATE_BIT_KHR
flags, and srcAccelerationStructure was not constructed by
deserialization with cmdCopyMemoryToAccelerationStructureKHR, then
for each AccelerationStructureGeometryKHR structure referred to by
its pGeometries or ppGeometries members, if geometryType is
GEOMETRY_TYPE_TRIANGLES_KHR, and the same geometry in the original
build of srcAccelerationStructure was built with an instance of
AccelerationStructureTrianglesOpacityMicromapKHR
in its geometry.triangles.pNext chain with a valid micromap
member, then an instance of
AccelerationStructureTrianglesOpacityMicromapKHR
must be included in the in the geometry.triangles.pNext chain
with the same micromap handle as the original build
For any
element of pInfos[i].pGeometries or pInfos[i].ppGeometries
with a geometryType of GEOMETRY_TYPE_TRIANGLES_KHR, if there is
an instance of
AccelerationStructureTrianglesOpacityMicromapEXT
in the geometry.triangles.pNext chain, then its micromap member
must have been constructed prior to this command’s execution on
the device
For each
element of pInfos[i].pGeometries or pInfos[i].ppGeometries
with a geometryType of GEOMETRY_TYPE_TRIANGLES_KHR, if there is
an instance of
AccelerationStructureTrianglesOpacityMicromapEXT
in the geometry.triangles.pNext chain, and its indexType is
INDEX_TYPE_NONE_KHR, then its
indexBuffer.deviceAddress must be 0
For each
element of pInfos[i].pGeometries or pInfos[i].ppGeometries
with a geometryType of GEOMETRY_TYPE_TRIANGLES_KHR, if there is
an instance of
AccelerationStructureTrianglesOpacityMicromapEXT
in the geometry.triangles.pNext chain, and its indexType is not
INDEX_TYPE_NONE_KHR, then its
indexBuffer.deviceAddress must be a valid
DeviceAddress
For each
element of pInfos[i].pGeometries or pInfos[i].ppGeometries
with a geometryType of GEOMETRY_TYPE_SPHERES_NV, if
AccelerationStructureGeometrySpheresDataNV::indexType
is INDEX_TYPE_NONE_KHR, then its
indexData.deviceAddress must be 0
For each
element of pInfos[i].pGeometries or pInfos[i].ppGeometries
with a geometryType of GEOMETRY_TYPE_SPHERES_NV, if
AccelerationStructureGeometrySpheresDataNV::indexType
is not INDEX_TYPE_NONE_KHR, then its
indexData.deviceAddress must be a valid
DeviceAddress
For each
element of pInfos[i].pGeometries or pInfos[i].ppGeometries
with a geometryType of GEOMETRY_TYPE_SPHERES_NV,
AccelerationStructureGeometrySpheresDataNV::vertexData.deviceAddress
must be a valid DeviceAddress
For each
element of pInfos[i].pGeometries or pInfos[i].ppGeometries
with a geometryType of GEOMETRY_TYPE_SPHERES_NV,
AccelerationStructureGeometrySpheresDataNV::radiusData.deviceAddress
must be a valid DeviceAddress
For each
element of pInfos[i].pGeometries or pInfos[i].ppGeometries
with a geometryType of GEOMETRY_TYPE_LINEAR_SWEPT_SPHERES_NV, if
AccelerationStructureGeometryLinearSweptSpheresDataNV::indexType
is INDEX_TYPE_NONE_KHR, then its
indexData.deviceAddress must be 0
For each
element of pInfos[i].pGeometries or pInfos[i].ppGeometries
with a geometryType of GEOMETRY_TYPE_LINEAR_SWEPT_SPHERES_NV, if
AccelerationStructureGeometryLinearSweptSpheresDataNV::indexType
is not INDEX_TYPE_NONE_KHR, then its
indexData.deviceAddress must be a valid
DeviceAddress
For each
element of pInfos[i].pGeometries or pInfos[i].ppGeometries
with a geometryType of GEOMETRY_TYPE_LINEAR_SWEPT_SPHERES_NV,
AccelerationStructureGeometryLinearSweptSpheresDataNV::vertexData.deviceAddress
must be a valid DeviceAddress
For each
element of pInfos[i].pGeometries or pInfos[i].ppGeometries
with a geometryType of GEOMETRY_TYPE_LINEAR_SWEPT_SPHERES_NV,
AccelerationStructureGeometryLinearSweptSpheresDataNV::radiusData.deviceAddress
must be a valid DeviceAddress
For each
pInfos[i], dstAccelerationStructure must have been created
with a value of AccelerationStructureCreateInfoKHR::size greater
than or equal to either:
the memory size required by the build operation, as returned by
getAccelerationStructureBuildSizesKHR with pBuildInfo =
pInfos[i] and with each element of the pMaxPrimitiveCounts
array greater than or equal to the equivalent
ppBuildRangeInfos[i][j].primitiveCount values for j in
[0,pInfos[i].geometryCount) or,
the result of querying the corresponding
QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR,
if updating a compacted acceleration structure
For each
element of pInfos[i].pGeometries or pInfos[i].ppGeometries
with a geometryType of GEOMETRY_TYPE_TRIANGLES_KHR, if there is
an instance of
AccelerationStructureGeometryMotionTrianglesDataNV
in the geometry.triangles.pNext chain, then its
vertexData.deviceAddress must be a valid
DeviceAddress