Function Prototype

vkCmdBuildPartitionedAccelerationStructuresNV

Command for building a PTLAS
primary / secondary
outside
compute
action

To build a partitioned top level acceleration structure, call:

void vkCmdBuildPartitionedAccelerationStructuresNV(
    VkCommandBuffer                     commandBuffer,
    const VkBuildPartitionedAccelerationStructureInfoNV*  pBuildInfo);

Accesses to the acceleration structure scratch memory as identified by the VkBuildPartitionedAccelerationStructureInfoNV::scratchData must be synchronized with the VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR

pipeline stage and an access type of (VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR | VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR).

Accesses to each VkBuildPartitionedAccelerationStructureInfoNV::srcAccelerationStructureData and VkBuildPartitionedAccelerationStructureInfoNV::dstAccelerationStructureDatamust be synchronized with the VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR

pipeline stage and an access type of VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR or VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR, as appropriate.

Accesses to memory with input data as identified by any used values of VkBuildPartitionedAccelerationStructureInfoNV::srcInfos and VkBuildPartitionedAccelerationStructureInfoNV::srcInfosCountmust be synchronized with the VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR

pipeline stage and an access type of VK_ACCESS_INDIRECT_COMMAND_READ_BIT.

Valid Usage

VUID-vkCmdBuildPartitionedAccelerationStructuresNV-pBuildInfo-10537

The count specified in pBuildInfo→input::instanceCount for the build operation must not exceed the value provided in pInfo→instanceCount when calling vkGetPartitionedAccelerationStructuresBuildSizesNV to determine the memory size

VUID-vkCmdBuildPartitionedAccelerationStructuresNV-pBuildInfo-10538

The count specified in pBuildInfo→input::maxInstancePerPartitionCount for the build operation must not exceed the value provided in pInfo→maxInstancePerPartitionCount when calling vkGetPartitionedAccelerationStructuresBuildSizesNV to determine the memory size

VUID-vkCmdBuildPartitionedAccelerationStructuresNV-pBuildInfo-10539

The count specified in pBuildInfo→input::partitionCount for the build operation must not exceed the value provided in pInfo→partitionCount when calling vkGetPartitionedAccelerationStructuresBuildSizesNV to determine the memory size

VUID-vkCmdBuildPartitionedAccelerationStructuresNV-pBuildInfo-10540

The count specified in pBuildInfo→input::maxInstanceInGlobalPartitionCount for the build operation must not exceed the value provided in pInfo→maxInstanceInGlobalPartitionCount when calling vkGetPartitionedAccelerationStructuresBuildSizesNV to determine the memory size

VUID-vkCmdBuildPartitionedAccelerationStructuresNV-pBuildInfo-10541

The scratch memory for the partitioned acceleration structure build specified in pBuildInfo→scratchData must be larger than or equal to the scratch size queried with vkGetPartitionedAccelerationStructuresBuildSizesNV

VUID-vkCmdBuildPartitionedAccelerationStructuresNV-pBuildInfo-10542

pBuildInfo→scratchData must be aligned to 256 bytes

VUID-vkCmdBuildPartitionedAccelerationStructuresNV-pBuildInfo-10543

The destination memory of the partitioned acceleration structure build specified in pBuildInfo→dstAccelerationStructureData must be larger than or equal to the size queried with vkGetPartitionedAccelerationStructuresBuildSizesNV

VUID-vkCmdBuildPartitionedAccelerationStructuresNV-pBuildInfo-10544

pBuildInfo→srcAccelerationStructureData must be aligned to 256 bytes

VUID-vkCmdBuildPartitionedAccelerationStructuresNV-pBuildInfo-10545

pBuildInfo→dstAccelerationStructureData must be aligned to 256 bytes

VUID-vkCmdBuildPartitionedAccelerationStructuresNV-pBuildInfo-10546

The number of inputs specified in pBuildInfo→srcInfos must be greater than or equal to pBuildInfo→srcInfosCount

VUID-vkCmdBuildPartitionedAccelerationStructuresNV-pBuildInfo-10547

The memory region containing the acceleration structure at address pBuildInfo→srcAccelerationStructureData must not overlap with scratch memory region at address pBuildInfo→scratchData

VUID-vkCmdBuildPartitionedAccelerationStructuresNV-pBuildInfo-10548

The memory region containing the acceleration structure at address pBuildInfo→dstAccelerationStructureData must not overlap with scratch memory region at address pBuildInfo→scratchData

VUID-vkCmdBuildPartitionedAccelerationStructuresNV-pBuildInfo-10549

The memory regions containing the acceleration structures at addresses pBuildInfo→srcAccelerationStructureData and pBuildInfo→dstAccelerationStructureData must not overlap with each other

VUID-vkCmdBuildPartitionedAccelerationStructuresNV-pBuildInfo-10550

The buffer from which the buffer device address for pBuildInfo→scratchData is queried must have been created with the VK_BUFFER_USAGE_STORAGE_BUFFER_BIT usage flag

VUID-vkCmdBuildPartitionedAccelerationStructuresNV-pBuildInfo-10551

The buffers from which the buffer device addresses for pBuildInfo→srcInfos and pBuildInfo→srcInfosCount are queried must have been created with the VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR usage flag

VUID-vkCmdBuildPartitionedAccelerationStructuresNV-pBuildInfo-10552

The buffers from which the buffer device addresses for pBuildInfo→srcAccelerationStructureData and pBuildInfo→dstAccelerationStructureData are queried must have been created with the VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR usage flag

VUID-vkCmdBuildPartitionedAccelerationStructuresNV-pBuildInfo-10553

If pBuildInfo→srcAccelerationStructureData is the address of a non-sparse buffer then it must be bound completely and contiguously to a single VkDeviceMemory object

VUID-vkCmdBuildPartitionedAccelerationStructuresNV-pBuildInfo-10554

If pBuildInfo→dstAccelerationStructureData is the address of a non-sparse buffer then it must be bound completely and contiguously to a single VkDeviceMemory object

VUID-vkCmdBuildPartitionedAccelerationStructuresNV-pBuildInfo-10555

If pBuildInfo→scratchData is the address of a non-sparse buffer then it must be bound completely and contiguously to a single VkDeviceMemory object

VUID-vkCmdBuildPartitionedAccelerationStructuresNV-pBuildInfo-10556

If pBuildInfo→srcInfos is the address of a non-sparse buffer then it must be bound completely and contiguously to a single VkDeviceMemory object

VUID-vkCmdBuildPartitionedAccelerationStructuresNV-pBuildInfo-10557

If pBuildInfo→srcInfosCount is the address of a non-sparse buffer then it must be bound completely and contiguously to a single VkDeviceMemory object

Valid Usage (Implicit)

VUID-vkCmdBuildPartitionedAccelerationStructuresNV-commandBuffer-cmdpool

The VkCommandPool that commandBuffer was allocated from must support compute operations

VUID-vkCmdBuildPartitionedAccelerationStructuresNV-renderpass

This command must only be called outside of a render pass instance

VUID-vkCmdBuildPartitionedAccelerationStructuresNV-videocoding

This command must only be called outside of a video coding scope

Host Synchronization

  • Host access to commandBuffer must be externally synchronized
  • Host access to the VkCommandPool that commandBuffer was allocated from must be externally synchronized ::