cmdTraceRaysIndirect2KHR :: MonadIO io=> CommandBuffercommandBufferis the command buffer into which the command will be recorded.->"indirectDeviceAddress"
::: DeviceAddressindirectDeviceAddressis a buffer device address which is a pointer to a TraceRaysIndirectCommand2KHR structure containing the trace ray parameters.-> io ()
vkCmdTraceRaysIndirect2KHR - Initialize an indirect ray tracing dispatch with indirect shader binding tables
Description
cmdTraceRaysIndirect2KHR behaves similarly to
cmdTraceRaysIndirectKHR
except that shader binding table parameters as well as dispatch
dimensions are read by the device from indirectDeviceAddress during
execution.
Valid Usage
If a Sampler created with
magFilterorminFilterequal to FILTER_LINEAR,reductionModeequal to SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, andcompareEnableequal to FALSE is used to sample a ImageView as a result of this command, then the image view’s format features must contain FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
If a Sampler created with
magFilterorminFilterequal to FILTER_LINEAR andreductionModeequal to either SAMPLER_REDUCTION_MODE_MIN or SAMPLER_REDUCTION_MODE_MAX is used to sample a ImageView as a result of this command, then the image view’s format features must contain FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BITIf a Sampler created with
mipmapModeequal to SAMPLER_MIPMAP_MODE_LINEAR,reductionModeequal to SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, andcompareEnableequal to FALSE is used to sample a ImageView as a result of this command, then the image view’s format features must contain FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BITIf a Sampler created with
mipmapModeequal to SAMPLER_MIPMAP_MODE_LINEAR andreductionModeequal to either SAMPLER_REDUCTION_MODE_MIN or SAMPLER_REDUCTION_MODE_MAX is used to sample a ImageView as a result of this command, then the image view’s format features must contain FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BITIf a Sampler created with
unnormalizedCoordinatesequal to TRUE is used to sample a ImageView as a result of this command, then the image view’slevelCountandlayerCountmust be 1If a Sampler created with
unnormalizedCoordinatesequal to TRUE is used to sample a ImageView as a result of this command, then the image view’sviewTypemust be IMAGE_VIEW_TYPE_1D or IMAGE_VIEW_TYPE_2DIf a Sampler created with
unnormalizedCoordinatesequal to TRUE is used to sample a ImageView as a result of this command, then the sampler must not be used with any of the SPIR-VOpImageSample*orOpImageSparseSample*instructions withImplicitLod,DreforProjin their nameIf a Sampler created with
unnormalizedCoordinatesequal to TRUE is used to sample a ImageView as a result of this command, then the sampler must not be used with any of the SPIR-VOpImageSample*orOpImageSparseSample*instructions that includes a LOD bias or any offset valuesIf a ImageView is sampled with depth comparison, the image view’s format features must contain FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT
If a ImageView is accessed using atomic operations as a result of this command, then the image view’s format features must contain FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT
If a DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER descriptor is accessed using atomic operations as a result of this command, then the storage texel buffer’s format features must contain FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT
If a ImageView is sampled with FILTER_CUBIC_EXT as a result of this command, then the image view’s format features must contain FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT
If the VK_EXT_filter_cubic extension is not enabled and any ImageView is sampled with FILTER_CUBIC_EXT as a result of this command, it must not have a ImageViewType of IMAGE_VIEW_TYPE_3D, IMAGE_VIEW_TYPE_CUBE, or IMAGE_VIEW_TYPE_CUBE_ARRAY
Any ImageView being sampled with FILTER_CUBIC_EXT as a result of this command must have a ImageViewType and format that supports cubic filtering, as specified by FilterCubicImageViewImageFormatPropertiesEXT::
filterCubicreturned by getPhysicalDeviceImageFormatProperties2Any ImageView being sampled with FILTER_CUBIC_EXT with a reduction mode of either SAMPLER_REDUCTION_MODE_MIN or SAMPLER_REDUCTION_MODE_MAX as a result of this command must have a ImageViewType and format that supports cubic filtering together with minmax filtering, as specified by FilterCubicImageViewImageFormatPropertiesEXT::
filterCubicMinmaxreturned by getPhysicalDeviceImageFormatProperties2If the cubicRangeClamp feature is not enabled, then any ImageView being sampled with FILTER_CUBIC_EXT as a result of this command must not have a SamplerReductionModeCreateInfo::
reductionModeequal to SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOMAny ImageView being sampled with a SamplerReductionModeCreateInfo::
reductionModeequal to SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM as a result of this command must sample with FILTER_CUBIC_EXTIf the selectableCubicWeights feature is not enabled, then any ImageView being sampled with FILTER_CUBIC_EXT as a result of this command must have SamplerCubicWeightsCreateInfoQCOM::
cubicWeightsequal to CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOMAny Image created with a ImageCreateInfo::
flagscontaining IMAGE_CREATE_CORNER_SAMPLED_BIT_NV sampled as a result of this command must only be sampled using a SamplerAddressMode of SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGEFor any ImageView being written as a storage image where the image format field of the
OpTypeImageisUnknown, the view’s format features must contain FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BITFor any ImageView being read as a storage image where the image format field of the
OpTypeImageisUnknown, the view’s format features must contain FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BITFor any BufferView being written as a storage texel buffer where the image format field of the
OpTypeImageisUnknown, the view’s buffer features must contain FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BITAny BufferView being read as a storage texel buffer where the image format field of the
OpTypeImageisUnknownthen the view’s buffer features must contain FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BITIf a a bound shader was created with a pipeline layout and statically uses a set n, a descriptor set must have been bound to n at the same pipeline bind point, with layouts compatible for set n with the layout(s) used to create the shader, as described in ???
If a a bound shader was created with a pipeline layout or specified push constant ranges and statically uses a push constant value, that value must have been set for the same pipeline bind point, with push constant ranges that are compatible with the push constant range used to create the shader
For each array of resources that is used by a bound shader, the indices used to access members of the array must be less than the descriptor count for the identified binding in the descriptor sets used by this command
Descriptors in each bound descriptor set, specified via cmdBindDescriptorSets, must be valid if they are accessed as described by descriptor validity by the Pipeline bound to the pipeline bind point used by this command and the bound Pipeline was not created with PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
If an image descriptor is accessed by a shader, the ImageLayout must match the subresource accessible from the ImageView as defined by the image layout matching rules
If the descriptors used by the Pipeline bound to the pipeline bind point were specified via cmdBindDescriptorSets, the bound Pipeline must have been created without PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
Descriptors in bound descriptor buffers, specified via cmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by the Pipeline bound to the pipeline bind point used by this command and the bound Pipeline was created with PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
Descriptors in bound descriptor buffers, specified via cmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by any ShaderEXT bound to a stage corresponding to the pipeline bind point used by this command
If the descriptors used by the Pipeline bound to the pipeline bind point were specified via cmdSetDescriptorBufferOffsetsEXT, the bound Pipeline must have been created with PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
If a descriptor is dynamically used with a Pipeline created with PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident
If a descriptor is dynamically used with a ShaderEXT created with a DescriptorSetLayout that was created with DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident
If the shaderObject feature is not enabled, a valid pipeline must be bound to the pipeline bind point used by this command
If a pipeline is bound to the pipeline bind point used by this command, there must not have been any calls to dynamic state setting commands for any state specified statically in the Pipeline object bound to the pipeline bind point used by this command, since that pipeline was bound
If any stage of the Pipeline object bound to the pipeline bind point used by this command accesses a uniform buffer, and that stage was created without enabling either PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for
uniformBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind pointIf the robustBufferAccess feature is not enabled, and any ShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a uniform buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point
If any stage of the Pipeline object bound to the pipeline bind point used by this command accesses a storage buffer, and that stage was created without enabling either PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for
storageBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind pointIf the robustBufferAccess feature is not enabled, and any ShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a storage buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point
If
commandBufferis an unprotected command buffer and protectedNoFault is not supported, any resource accessed by bound shaders must not be a protected resourceIf a ImageView is accessed as a result of this command, then the image view’s
viewTypemust match theDimoperand of theOpTypeImageas described in ???If a ImageView or BufferView is accessed as a result of this command, then the numeric type of the view’s
formatand theSampledTypeoperand of theOpTypeImagemust matchIf a ImageView created with a format other than FORMAT_A8_UNORM is accessed using
OpImageWriteas a result of this command, then theTypeof theTexeloperand of that instruction must have at least as many components as the image view’s formatIf a ImageView created with the format FORMAT_A8_UNORM is accessed using
OpImageWriteas a result of this command, then theTypeof theTexeloperand of that instruction must have four componentsIf a BufferView is accessed using
OpImageWriteas a result of this command, then theTypeof theTexeloperand of that instruction must have at least as many components as the buffer view’s formatIf a ImageView with a Format that has a 64-bit component width is accessed as a result of this command, the
SampledTypeof theOpTypeImageoperand of that instruction must have aWidthof 64If a ImageView with a Format that has a component width less than 64-bit is accessed as a result of this command, the
SampledTypeof theOpTypeImageoperand of that instruction must have aWidthof 32If a BufferView with a Format that has a 64-bit component width is accessed as a result of this command, the
SampledTypeof theOpTypeImageoperand of that instruction must have aWidthof 64If a BufferView with a Format that has a component width less than 64-bit is accessed as a result of this command, the
SampledTypeof theOpTypeImageoperand of that instruction must have aWidthof 32If the sparseImageInt64Atomics feature is not enabled, Image objects created with the IMAGE_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an
OpTypeImagewith aSampledTypewith aWidthof 64 by this commandIf the sparseImageInt64Atomics feature is not enabled, Buffer objects created with the BUFFER_CREATE_SPARSE_RESIDENCY_BIT flag must not be accessed by atomic instructions through an
OpTypeImagewith aSampledTypewith aWidthof 64 by this commandIf
OpImageSampleWeightedQCOMis used to sample a ImageView as a result of this command, then the image view’s format features must contain FORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOMIf
OpImageSampleWeightedQCOMuses a ImageView as a sample weight image as a result of this command, then the image view’s format features must contain FORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOMIf
OpImageBoxFilterQCOMis used to sample a ImageView as a result of this command, then the image view’s format features must contain FORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOMIf
OpImageBlockMatchSSDQCOMis used to read from an ImageView as a result of this command, then the image view’s format features must contain FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM or FORMAT_FEATURE_2_BLOCK_MATCHING_SXD_BIT_QCOMIf
OpImageBlockMatchSADQCOMis used to read from an ImageView as a result of this command, then the image view’s format features must contain FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM or FORMAT_FEATURE_2_BLOCK_MATCHING_SXD_BIT_QCOMIf
OpImageBlockMatchSADQCOMor OpImageBlockMatchSSDQCOM is used to read from a reference image as result of this command, and the blockMatchExtendedClampToEdge feature is not enabled or the input sampler was not created with bothaddressModeUandaddressModeVequal to SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE then the specified reference coordinates must not fail integer texel coordinate validationIf
OpImageSampleWeightedQCOM,OpImageBoxFilterQCOM,OpImageBlockMatchWindowSSDQCOM,OpImageBlockMatchWindowSADQCOM,OpImageBlockMatchGatherSSDQCOM,OpImageBlockMatchGatherSADQCOM,OpImageBlockMatchSSDQCOM, orOpImageBlockMatchSADQCOMuses a Sampler as a result of this command, then the sampler must have been created with SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOMIf any command other than
OpImageSampleWeightedQCOM,OpImageBoxFilterQCOM,OpImageBlockMatchWindowSSDQCOM,OpImageBlockMatchWindowSADQCOM,OpImageBlockMatchGatherSSDQCOM,OpImageBlockMatchGatherSADQCOM,OpImageBlockMatchSSDQCOM, orOpImageBlockMatchSADQCOMuses a Sampler as a result of this command, then the sampler must not have been created with SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOMIf a
OpImageBlockMatchWindow*QCOMorOpImageBlockMatchGather*QCOMinstruction is used to read from an ImageView as a result of this command, then the image view’s format features must contain FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOMIf a
OpImageBlockMatchWindow*QCOMorOpImageBlockMatchGather*QCOMinstruction is used to read from an ImageView as a result of this command, then the image view’s format must be a single-component formatIf a
OpImageBlockMatchWindow*QCOMorOpImageBlockMatchGather*QCOMread from a reference image as result of this command, and the blockMatchExtendedClampToEdge feature is not enabled or the input sampler was not created with bothaddressModeUandaddressModeVequal to SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE then the specified reference coordinates must not fail integer texel coordinate validationIf a
OpImageBlockMatchWindow*QCOMorOpImageBlockMatchGather*QCOMinstruction uses a Sampler as a result of this command, and the blockMatchExtendedClampToEdge is not enabled, the input sampler must not have been created with eitheraddressModeUoraddressModeVequal to SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGEIf a
OpImageBlockMatchWindow*QCOMorOpImageBlockMatchGather*QCOMinstruction uses a Sampler as a result of this command, and the input sampler was created with eitheraddressModeUoraddressModeVequal to SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE, then the sampler must have been created with bothaddressModeUandaddressModeVequal to SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGEAny shader invocation executed by this command must terminate
If a descriptor with type equal to any of DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM, DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM, DESCRIPTOR_TYPE_SAMPLED_IMAGE, DESCRIPTOR_TYPE_STORAGE_IMAGE, or DESCRIPTOR_TYPE_INPUT_ATTACHMENT is accessed as a result of this command, all image subresources identified by that descriptor must be in the image layout identified when the descriptor was written
If a DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR descriptor is accessed as a result of this command through an
OpRayQueryProceedKHRoperation , theVK_EXT_opacity_micromapextension is not enabled, and the acceleration structure is built using geometry with a AccelerationStructureTrianglesOpacityMicromapKHR structure included in itspNextchain, the shader must have specified aOpacityMicromapIdKHRexecution mode with its specialization constant operand equal to TRUEIf a DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR descriptor is accessed as a result of this command and the acceleration structure was constructed through deserialization, all micromap arrays referenced by the acceleration structure that were not replaced by an acceleration structure update command must have been deserialized using the serialized data of the corresponding micromaps used to originally build the acceleration structure prior to the execution of this command on the device
If a DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR descriptor is accessed as a result of this command and the acceleration structure is built using geometry with an
indexBuffercontaining both OpacityMicromapSpecialIndexKHR values and indices into an associated micromap array, any Pipeline bound to the pipeline bind point used by this command must not have been created withflagsthat includes PIPELINE_CREATE_2_OPACITY_MICROMAP_DISALLOW_MIXED_SPECIAL_INDEX_BIT_KHRIf a DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR descriptor is accessed as a result of this command and the acceleration structure is built using geometry with an
indexBuffercontaining both OpacityMicromapSpecialIndexKHR values and indices into an associated micromap array, any ShaderEXT that accessed the descriptor must not have been created withflagsthat includes SHADER_CREATE_OPACITY_MICROMAP_DISALLOW_MIXED_SPECIAL_INDEX_BIT_EXTThe DeviceMemory object allocated from a MemoryHeap with the MEMORY_HEAP_TILE_MEMORY_BIT_QCOM property that is bound to a resource accessed as a result of this command must be the active bound tile memory object in
commandBufferIf this command is recorded inside a tile shading render pass instance, the stages corresponding to the pipeline bind point used by this command must only include SHADER_STAGE_VERTEX_BIT, SHADER_STAGE_FRAGMENT_BIT, and/or SHADER_STAGE_COMPUTE_BIT
If this command is recorded where per-tile execution model is enabled, there must be no access to any image while the image was be transitioned to the IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT layout
If a DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the underlying TensorARM object must have been created with the TENSOR_USAGE_SHADER_BIT_ARM usage flag set
If a DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the
Rankof theOpTypeTensorARMof the tensor resource variable must be equal to thedimensionCountprovided via TensorCreateInfoARM::pDescriptionwhen creating the underlying TensorARM objectIf a DESCRIPTOR_TYPE_TENSOR_ARM descriptor is accessed as a result of this command, then the element type of the
OpTypeTensorARMof the tensor resource variable must be compatible with the Format of the TensorViewARM used for the accessIf a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT, DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT, DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, or DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses a
OpTypeStructdecorated withBlockorBufferBlockusing that mapping, the calculated offset for the resource heap must be a multiple of bufferDescriptorAlignmentIf a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT, DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT, DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, or DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses an
OpTypeImageorOpTypeSampledImageusing that mapping, the calculated offset for the resource heap must be a multiple of imageDescriptorAlignmentIf a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT, DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT, DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, or DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses an
OpTypeSamplerorOpTypeSampledImageusing that mapping, the calculated offset for the sampler heap must be a multiple of samplerDescriptorAlignmentIf a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT, DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT, DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, or DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses an
OpTypeTensorARMusing that mapping, the calculated offset for the resource heap must be a multiple of tensorDescriptorAlignmentIf a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT or DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a multiple of 4
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT or DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a valid DeviceAddress backed by physical memory at every offset specified by each mapping
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a valid DeviceAddress
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a multiple of 8
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a valid DeviceAddress backed by physical memory at every offset specified by each mapping
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the value of the address pointed to by the address in push data must be a valid DeviceAddress
For each descriptor heap that is statically used by a bound shader, either directly or via a descriptor mapping, a valid descriptor heap must be bound
If a bound shader was created as a ShaderEXT with the SHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXT flag or as part of a pipeline with the PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT flag, execution of this command must not result in any descriptor read accessing data outside of the user range of the respective heap bound by
vkCmdBind*HeapEXTcommandsIf any stage of the Pipeline object bound to the pipeline bind point used by this command accesses a uniform buffer or uniform texel buffer through a descriptor in the bound resource heap, that stage was created without enabling either PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for
uniformBuffers, the robustBufferAccess2 feature is not enabled, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the descriptor specified via DeviceAddressRangeKHR when the descriptor was writtenIf any stage of the Pipeline object bound to the pipeline bind point used by this command accesses a storage buffer or storage texel buffer through a descriptor in the bound resource heap, that stage was created without enabling either PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 for
storageBuffers, the robustBufferAccess2 feature is not enabled, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the descriptor specified by DeviceAddressRangeKHR when the descriptor was writtenIf the robustBufferAccess2 feature is not enabled, the robustBufferAccess feature is not enabled, and any ShaderEXT bound to a stage corresponding to the pipeline bind point used by this command accesses a uniform buffer, uniform texel buffer, storage buffer, or storage texel buffer, that shader must not access values outside of the range of the buffer as specified by DeviceAddressRangeKHR when the descriptor was written
If any bound shader uses an embedded sampler via a descriptor mapping, the value of
pBindInfo->reservedRangeSizeset for cmdBindSamplerHeapEXT must be greater than or equal to minSamplerHeapReservedRangeWithEmbeddedIf a bound shader was created as a ShaderEXT with the SHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXT flag or as part of a pipeline with the PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT flag, and that shader statically uses a push constant value, that value must have been set by cmdPushDataEXT
If a bound shader was created with a descriptor mapping using DESCRIPTOR_MAPPING_SOURCE_PUSH_DATA_EXT, DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT, DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_DATA_EXT, DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, DESCRIPTOR_MAPPING_SOURCE_RESOURCE_HEAP_DATA_EXT, or DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the access must not be out of bounds
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, or DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the buffer from which the address in push data was queried must have been created with the BUFFER_USAGE_UNIFORM_BUFFER_BIT usage flag set
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT, DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, or DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a uniform buffer using that mapping, the address that the uniform buffer is mapped to must have been queried from a buffer created with the BUFFER_USAGE_UNIFORM_BUFFER_BIT usage flag set
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT, DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, or DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a uniform buffer using that mapping, the address that the uniform buffer is mapped to must be aligned to minUniformBufferOffsetAlignment
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT, DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, or DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a storage buffer using that mapping, the address that the storage buffer is mapped to must have been queried from a buffer created with the BUFFER_USAGE_STORAGE_BUFFER_BIT usage flag set
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT, DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, or DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a storage buffer using that mapping, the address that the storage buffer is mapped to must be aligned to minStorageBufferOffsetAlignment
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT, DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, or DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses an acceleration structure using that mapping, the address that the acceleration structure is mapped to must be an acceleration structure address retrieved from a AccelerationStructureKHR object via getAccelerationStructureDeviceAddressKHR or handle retrieved from a AccelerationStructureNV object via getAccelerationStructureHandleNV
If a shader uses a sampler descriptor to sample an image as a result of this command, and that sampler descriptor uses a custom border color with an index defined by SamplerCustomBorderColorIndexCreateInfoEXT, the value of SamplerCustomBorderColorIndexCreateInfoEXT::
indexmust have been registered before this command was recorded, and still be registered during the sampling operation, with an identically defined colorIf protectedNoFault is not supported, a pipeline is bound to the pipeline bind point used by this command, or a shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT, DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, or DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, the address that the resource is mapped to must have been queried from a buffer created without the BUFFER_CREATE_PROTECTED_BIT create flag set
If protectedNoFault is not supported, a pipeline is bound to the pipeline bind point used by this command, or a shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT or DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, the address of the indirect memory must have been queried from a buffer created without the BUFFER_CREATE_PROTECTED_BIT create flag set
Any shader group handle referenced by this call must have been queried from the bound ray tracing pipeline
If the bound ray tracing pipeline state was created with the DYNAMIC_STATE_RAY_TRACING_PIPELINE_STACK_SIZE_KHR dynamic state enabled then cmdSetRayTracingPipelineStackSizeKHR must have been called in the current command buffer prior to this trace command
If a pipeline is bound to the pipeline bind point used by this command, or shader is bound to a shader stage used by this command, and it was created with a descriptor mapping using DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, the value of the address at the expected location in shader record data must be a valid address
This command must not cause a shader call instruction to be executed from a shader invocation with a recursion depth greater than the value of
maxPipelineRayRecursionDepthused to create the bound ray tracing pipelinecommandBuffermust not be a protected command bufferIf a DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR descriptor is accessed as a result of this command, the access is not through an
OpRayQueryProceedKHRoperation, and the acceleration structure is built using geometry with a AccelerationStructureTrianglesOpacityMicromapKHR or AccelerationStructureTrianglesOpacityMicromapEXT structure included in itspNextchain, the Pipeline bound to the pipeline bind point used by this command must have been created withflagsthat includes PIPELINE_CREATE_RAY_TRACING_OPACITY_MICROMAP_BIT_KHRindirectDeviceAddressmust be a device address allocated to the application from a buffer created with the BUFFER_USAGE_INDIRECT_BUFFER_BIT usage flag setindirectDeviceAddressmust be a multiple of4All device addresses between
indirectDeviceAddressandindirectDeviceAddress+sizeof(TraceRaysIndirectCommand2KHR) - 1 must be in the buffer device address range of the same bufferThe rayTracingPipelineTraceRaysIndirect2 feature must be enabled
If the bound ray tracing pipeline was created with PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV PhysicalDeviceRayTracingMotionBlurFeaturesNV::
rayTracingMotionBlurPipelineTraceRaysIndirectfeature must be enabled
Valid Usage (Implicit)
commandBuffermust be a valid CommandBuffer handle
indirectDeviceAddressmust be a valid DeviceAddress valuecommandBuffermust be in the recording stateThe CommandPool that
commandBufferwas allocated from must support QUEUE_COMPUTE_BIT operationsThis command must only be called outside of a render pass instance
This command must not be called between suspended render pass instances
This command must only be called outside of a video coding scope
Host Synchronization
Host access to
commandBuffermust be externally synchronized
Host access to the CommandPool that
commandBufferwas allocated from must be externally synchronized
Command Properties
'
Primary Secondary | Outside | Outside | VK_QUEUE_COMPUTE_BIT | Action |
Conditional Rendering
vkCmdTraceRaysIndirect2KHR is not affected by conditional rendering
See Also
VK_KHR_ray_tracing_maintenance1, VK_KHR_ray_tracing_pipeline, CommandBuffer, DeviceAddress