blob: 0ac89639beb818c250e5668667a5053f0a538dd4 [file] [log] [blame]
// Copyright 2019-2021 The Khronos Group Inc.
//
// SPDX-License-Identifier: CC-BY-4.0
// Common Valid Usage
// Common to acceleration structure build commands executed on the device
* [[VUID-{refpage}-pInfos-03707]]
For each element of pname:pInfos, the pname:buffer used to create its
pname:dstAccelerationStructure member must: be bound to device memory
* [[VUID-{refpage}-pInfos-03708]]
For each element of pname:pInfos, if its pname:mode member is
ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR the pname:buffer
used to create its pname:srcAccelerationStructure member must: be bound
to device memory
* [[VUID-{refpage}-pInfos-03709]]
For each element of pname:pInfos, the pname:buffer used to create each
acceleration structure referenced by the pname:geometry.instances.data
member of any element of pname:pGeometries or pname:ppGeometries with a
pname:geometryType of ename:VK_GEOMETRY_TYPE_INSTANCES_KHR must: be
bound to device memory
* [[VUID-{refpage}-pInfos-03671]]
If pname:pInfos[i].pname:mode is
ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR, all addresses
between pname:pInfos[i].pname:scratchData.deviceAddress and
pname:pInfos[i].pname:scratchData.deviceAddress {plus} N - 1 must: be in
the buffer device address range of the same buffer, where N is given by
the pname:buildScratchSize member of the
slink:VkAccelerationStructureBuildSizesInfoKHR structure returned from a
call to flink:vkGetAccelerationStructureBuildSizesKHR with an identical
slink:VkAccelerationStructureBuildGeometryInfoKHR structure and
primitive count
* [[VUID-{refpage}-pInfos-03672]]
If pname:pInfos[i].pname:mode is
ename:VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR, all addresses
between pname:pInfos[i].pname:scratchData.deviceAddress and
pname:pInfos[i].pname:scratchData.deviceAddress {plus} N - 1 must: be in
the buffer device address range of the same buffer, where N is given by
the pname:updateScratchSize member of the
slink:VkAccelerationStructureBuildSizesInfoKHR structure returned from a
call to flink:vkGetAccelerationStructureBuildSizesKHR with an identical
slink:VkAccelerationStructureBuildGeometryInfoKHR structure and
primitive count
* [[VUID-{refpage}-geometry-03673]]
The buffers from which the buffer device addresses for all of the
pname:geometry.triangles.vertexData, pname:geometry.triangles.indexData,
pname:geometry.triangles.transformData, pname:geometry.aabbs.data, and
pname:geometry.instances.data members of all
pname:pInfos[i].pname:pGeometries and pname:pInfos[i].pname:ppGeometries
are queried must: have been created with the
ename:VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR
usage flag
* [[VUID-{refpage}-pInfos-03674]]
The buffer from which the buffer device address
pname:pInfos[i].pname:scratchData.deviceAddress is queried must: have
been created with ename:VK_BUFFER_USAGE_STORAGE_BUFFER_BIT usage flag
* [[VUID-{refpage}-pInfos-03802]]
For each element of pname:pInfos, its pname:scratchData.deviceAddress
member must: be a valid device address obtained from
flink:vkGetBufferDeviceAddress
* [[VUID-{refpage}-pInfos-03803]]
For each element of pname:pInfos, if pname:scratchData.deviceAddress is
the address of a non-sparse buffer then it must: be bound completely and
contiguously to a single slink:VkDeviceMemory object
* [[VUID-{refpage}-pInfos-03710]]
For each element of pname:pInfos, its pname:scratchData.deviceAddress
member must: be a multiple of
slink:VkPhysicalDeviceAccelerationStructurePropertiesKHR::pname:minAccelerationStructureScratchOffsetAlignment
* [[VUID-{refpage}-pInfos-03804]]
For any element of pname:pInfos[i].pname:pGeometries or
pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR,
pname:geometry.triangles.vertexData.deviceAddress must: be a valid
device address obtained from flink:vkGetBufferDeviceAddress
* [[VUID-{refpage}-pInfos-03805]]
For any element of pname:pInfos[i].pname:pGeometries or
pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, if
pname:geometry.triangles.vertexData.deviceAddress is the address of a
non-sparse buffer then it must: be bound completely and contiguously to
a single slink:VkDeviceMemory object
* [[VUID-{refpage}-pInfos-03711]]
For any element of pname:pInfos[i].pname:pGeometries or
pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR,
pname:geometry.triangles.vertexData.deviceAddress must: be aligned to
the size in bytes of the smallest component of the format in
pname:vertexFormat
* [[VUID-{refpage}-pInfos-03806]]
For any element of pname:pInfos[i].pname:pGeometries or
pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, if
pname:geometry.triangles.indexType is not ename:VK_INDEX_TYPE_NONE_KHR,
pname:geometry.triangles.indexData.deviceAddress must: be a valid device
address obtained from flink:vkGetBufferDeviceAddress
* [[VUID-{refpage}-pInfos-03807]]
For any element of pname:pInfos[i].pname:pGeometries or
pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, if
pname:geometry.triangles.indexType is not ename:VK_INDEX_TYPE_NONE_KHR,
if pname:geometry.triangles.indexData.deviceAddress is the address of a
non-sparse buffer then it must: be bound completely and contiguously to
a single slink:VkDeviceMemory object
* [[VUID-{refpage}-pInfos-03712]]
For any element of pname:pInfos[i].pname:pGeometries or
pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, and with
pname:geometry.triangles.indexType not equal to
ename:VK_INDEX_TYPE_NONE_KHR,
pname:geometry.triangles.indexData.deviceAddress must: be aligned to the
size in bytes of the type in pname:indexType
* [[VUID-{refpage}-pInfos-03808]]
For any element of pname:pInfos[i].pname:pGeometries or
pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, if
pname:geometry.triangles.transformData.deviceAddress is not `0`, it
must: be a valid device address obtained from
flink:vkGetBufferDeviceAddress
* [[VUID-{refpage}-pInfos-03809]]
For any element of pname:pInfos[i].pname:pGeometries or
pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, if
pname:geometry.triangles.transformData.deviceAddress is the address of a
non-sparse buffer then it must: be bound completely and contiguously to
a single slink:VkDeviceMemory object
* [[VUID-{refpage}-pInfos-03810]]
For any element of pname:pInfos[i].pname:pGeometries or
pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
ename:VK_GEOMETRY_TYPE_TRIANGLES_KHR, if
pname:geometry.triangles.transformData.deviceAddress is not `0`, it
must: be aligned to `16` bytes
* [[VUID-{refpage}-pInfos-03811]]
For any element of pname:pInfos[i].pname:pGeometries or
pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
ename:VK_GEOMETRY_TYPE_AABBS_KHR,
pname:geometry.aabbs.data.deviceAddress must: be a valid device address
obtained from flink:vkGetBufferDeviceAddress
* [[VUID-{refpage}-pInfos-03812]]
For any element of pname:pInfos[i].pname:pGeometries or
pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
ename:VK_GEOMETRY_TYPE_AABBS_KHR, if
pname:geometry.aabbs.data.deviceAddress is the address of a non-sparse
buffer then it must: be bound completely and contiguously to a single
slink:VkDeviceMemory object
* [[VUID-{refpage}-pInfos-03714]]
For any element of pname:pInfos[i].pname:pGeometries or
pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
ename:VK_GEOMETRY_TYPE_AABBS_KHR,
pname:geometry.aabbs.data.deviceAddress must: be aligned to `8` bytes
* [[VUID-{refpage}-pInfos-03715]]
For any element of pname:pInfos[i].pname:pGeometries or
pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
ename:VK_GEOMETRY_TYPE_INSTANCES_KHR, if pname:geometry.arrayOfPointers
is ename:VK_FALSE, pname:geometry.instances.data.deviceAddress must: be
aligned to `16` bytes
* [[VUID-{refpage}-pInfos-03716]]
For any element of pname:pInfos[i].pname:pGeometries or
pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
ename:VK_GEOMETRY_TYPE_INSTANCES_KHR, if pname:geometry.arrayOfPointers
is ename:VK_TRUE, pname:geometry.instances.data.deviceAddress must: be
aligned to `8` bytes
* [[VUID-{refpage}-pInfos-03717]]
For any element of pname:pInfos[i].pname:pGeometries or
pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
ename:VK_GEOMETRY_TYPE_INSTANCES_KHR, if pname:geometry.arrayOfPointers
is ename:VK_TRUE, each element of
pname:geometry.instances.data.deviceAddress in device memory must: be
aligned to `16` bytes
* [[VUID-{refpage}-pInfos-03813]]
For any element of pname:pInfos[i].pname:pGeometries or
pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
ename:VK_GEOMETRY_TYPE_INSTANCES_KHR,
pname:geometry.instances.data.deviceAddress must: be a valid device
address obtained from flink:vkGetBufferDeviceAddress
* [[VUID-{refpage}-pInfos-03814]]
For any element of pname:pInfos[i].pname:pGeometries or
pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
ename:VK_GEOMETRY_TYPE_INSTANCES_KHR, if
pname:geometry.instances.data.deviceAddress is the address of a
non-sparse buffer then it must: be bound completely and contiguously to
a single slink:VkDeviceMemory object
* [[VUID-{refpage}-pInfos-03815]]
For any element of pname:pInfos[i].pname:pGeometries or
pname:pInfos[i].pname:ppGeometries with a pname:geometryType of
ename:VK_GEOMETRY_TYPE_INSTANCES_KHR, each
slink:VkAccelerationStructureInstanceKHR::pname:accelerationStructureReference
value in pname:geometry.instances.data.deviceAddress must: be a valid
device address containing a value obtained from
flink:vkGetAccelerationStructureDeviceAddressKHR
// Common Valid Usage