| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Vulkan.Extensions.VK_HUAWEI_subpass_shading
Description
Name
VK_HUAWEI_subpass_shading - device extension
VK_HUAWEI_subpass_shading
- Name String
VK_HUAWEI_subpass_shading
- Extension Type
- Device extension
- Registered Extension Number
- 370
- Revision
- 3
- Ratification Status
- Not ratified
- Extension and Version Dependencies
VK_KHR_synchronization2 or Vulkan Version 1.3
- SPIR-V Dependencies
- Contact
Other Extension Metadata
- Last Modified Date
- 2021-06-01
- Interactions and External Dependencies
- This extension provides API support for GL_HUAWEI_subpass_shading.
- Contributors
- Hueilong Wang
- Juntao Li, Huawei
- Renmiao Lu, Huawei
- Pan Gao, Huawei
Description
This extension allows applications to execute a subpass shading pipeline in a subpass of a render pass in order to save memory bandwidth for algorithms like tile-based deferred rendering and forward plus. A subpass shading pipeline is a pipeline with the compute pipeline ability, allowed to read values from input attachments, and only allowed to be dispatched inside a stand-alone subpass. Its work dimension is defined by the render pass’s render area size. Its workgroup size (width, height) shall be a power-of-two number in width or height, with minimum value from 8, and maximum value shall be decided from the render pass attachments and sample counts but depends on implementation.
The GlobalInvocationId.xy of a subpass shading pipeline is equal to
the FragCoord.xy of a graphic pipeline in the same render pass
subtracted the offset of the
RenderPassBeginInfo::renderArea.
GlobalInvocationId.z is mapped to the Layer if
VK_EXT_shader_viewport_index_layer is supported. The
GlobalInvocationId.xy is equal to the index of the local workgroup
multiplied by the size of the local workgroup plus the
LocalInvocationId and the offset of the
RenderPassBeginInfo::renderArea.
This extension allows a subpass’s pipeline bind point to be
PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI.
New Commands
New Structures
Extending
PhysicalDeviceFeatures2,DeviceCreateInfo:Extending
PhysicalDeviceProperties2:
New Enum Constants
HUAWEI_SUBPASS_SHADING_SPEC_VERSIONExtending
PipelineBindPoint:Extending
PipelineStageFlagBits2:Extending
ShaderStageFlagBits:Extending
StructureType:
Sample Code
Example of subpass shading in a GLSL shader
#extension GL_HUAWEI_subpass_shading: enable
#extension GL_KHR_shader_subgroup_arithmetic: enable
layout(constant_id = 0) const uint tileWidth = 8;
layout(constant_id = 1) const uint tileHeight = 8;
layout(local_size_x_id = 0, local_size_y_id = 1, local_size_z = 1) in;
layout(set=0, binding=0, input_attachment_index=0) uniform subpassInput depth;
void main()
{
float d = subpassLoad(depth).x;
float minD = subgroupMin(d);
float maxD = subgroupMax(d);
}Example of subpass shading dispatching in a subpass
vkCmdNextSubpass(commandBuffer, VK_SUBPASS_CONTENTS_INLINE); vkCmdBindPipeline(commandBuffer, VK_PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI, subpassShadingPipeline); vkCmdBindDescriptorSets(commandBuffer, VK_PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI, subpassShadingPipelineLayout, firstSet, descriptorSetCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets); vkCmdSubpassShadingHUAWEI(commandBuffer) vkCmdEndRenderPass(commandBuffer);
Example of subpass shading render pass creation
VkAttachmentDescription2 attachments[] = {
{
VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2, NULL,
0, VK_FORMAT_R8G8B8A8_UNORM, VK_SAMPLE_COUNT_1_BIT,
VK_ATTACHMENT_LOAD_OP_CLEAR, VK_ATTACHMENT_STORE_OP_DONT_CARE,
VK_ATTACHMENT_LOAD_OP_DONT_CARE, VK_ATTACHMENT_LOAD_OP_DONT_CARE,
VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
},
{
VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2, NULL,
0, VK_FORMAT_R8G8B8A8_UNORM, VK_SAMPLE_COUNT_1_BIT,
VK_ATTACHMENT_LOAD_OP_CLEAR, VK_ATTACHMENT_STORE_OP_DONT_CARE,
VK_ATTACHMENT_LOAD_OP_DONT_CARE, VK_ATTACHMENT_LOAD_OP_DONT_CARE,
VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
},
{
VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2, NULL,
0, VK_FORMAT_R8G8B8A8_UNORM, VK_SAMPLE_COUNT_1_BIT,
VK_ATTACHMENT_LOAD_OP_CLEAR, VK_ATTACHMENT_STORE_OP_DONT_CARE,
VK_ATTACHMENT_LOAD_OP_DONT_CARE, VK_ATTACHMENT_LOAD_OP_DONT_CARE,
VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
},
{
VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2, NULL,
0, VK_FORMAT_D24_UNORM_S8_UINT, VK_SAMPLE_COUNT_1_BIT,
VK_ATTACHMENT_LOAD_OP_CLEAR, VK_ATTACHMENT_STORE_OP_DONT_CARE,
VK_ATTACHMENT_LOAD_OP_CLEAR, VK_ATTACHMENT_LOAD_OP_DONT_CARE,
VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL
},
{
VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2, NULL,
0, VK_FORMAT_R8G8B8A8_UNORM, VK_SAMPLE_COUNT_1_BIT,
VK_ATTACHMENT_LOAD_OP_CLEAR, VK_ATTACHMENT_STORE_OP_STORE,
VK_ATTACHMENT_LOAD_OP_DONT_CARE, VK_ATTACHMENT_LOAD_OP_DONT_CARE,
VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
}
};
VkAttachmentReference2 gBufferAttachmentReferences[] = {
{ VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2, NULL, 0, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_ASPECT_COLOR_BIT },
{ VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2, NULL, 1, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_ASPECT_COLOR_BIT },
{ VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2, NULL, 2, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_ASPECT_COLOR_BIT }
};
VkAttachmentReference2 gBufferDepthStencilAttachmentReferences =
{ VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2, NULL, 3, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, VK_IMAGE_ASPECT_DEPTH_BIT|VK_IMAGE_ASPECT_STENCIL_BIT };
VkAttachmentReference2 depthInputAttachmentReferences[] = {
{ VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2, NULL, 3, VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, VK_IMAGE_ASPECT_DEPTH_BIT|VK_IMAGE_ASPECT_STENCIL_BIT };
};
VkAttachmentReference2 preserveAttachmentReferences[] = {
{ VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2, NULL, 0, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_ASPECT_COLOR_BIT },
{ VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2, NULL, 1, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_ASPECT_COLOR_BIT },
{ VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2, NULL, 2, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_ASPECT_COLOR_BIT },
{ VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2, NULL, 3, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, VK_IMAGE_ASPECT_DEPTH_BIT|VK_IMAGE_ASPECT_STENCIL_BIT }
}; // G buffer including depth/stencil
VkAttachmentReference2 colorAttachmentReferences[] = {
{ VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2, NULL, 4, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_ASPECT_COLOR_BIT }
};
VkAttachmentReference2 resolveAttachmentReference =
{ VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2, NULL, 4, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_ASPECT_COLOR_BIT };
VkSubpassDescription2 subpasses[] = {
{
VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2, NULL, 0, VK_PIPELINE_BIND_POINT_GRAPHICS, 0,
0, NULL, // input
sizeof(gBufferAttachmentReferences)/sizeof(gBufferAttachmentReferences[0]), gBufferAttachmentReferences, // color
NULL, &gBufferDepthStencilAttachmentReferences, // resolve & DS
0, NULL
},
{
VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2, NULL, 0, VK_PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI , 0,
sizeof(depthInputAttachmentReferences)/sizeof(depthInputAttachmentReferences[0]), depthInputAttachmentReferences, // input
0, NULL, // color
NULL, NULL, // resolve & DS
sizeof(preserveAttachmentReferences)/sizeof(preserveAttachmentReferences[0]), preserveAttachmentReferences,
},
{
VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2, NULL, 0, VK_PIPELINE_BIND_POINT_GRAPHICS, 0,
sizeof(gBufferAttachmentReferences)/sizeof(gBufferAttachmentReferences[0]), gBufferAttachmentReferences, // input
sizeof(colorAttachmentReferences)/sizeof(colorAttachmentReferences[0]), colorAttachmentReferences, // color
&resolveAttachmentReference, &gBufferDepthStencilAttachmentReferences, // resolve & DS
0, NULL
},
};
VkMemoryBarrier2KHR fragmentToSubpassShading = {
VK_STRUCTURE_TYPE_MEMORY_BARRIER_2_KHR, NULL,
VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT_KHR, VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT|VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT,
VK_PIPELINE_STAGE_2_SUBPASS_SHADER_BIT_HUAWEI, VK_ACCESS_INPUT_ATTACHMENT_READ_BIT
};
VkMemoryBarrier2KHR subpassShadingToFragment = {
VK_STRUCTURE_TYPE_MEMORY_BARRIER_2_KHR, NULL,
VK_PIPELINE_STAGE_2_SUBPASS_SHADER_BIT_HUAWEI, VK_ACCESS_SHADER_WRITE_BIT,
VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT_KHR, VK_ACCESS_SHADER_READ_BIT
};
VkSubpassDependency2 dependencies[] = {
{
VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2, &fragmentToSubpassShading,
0, 1,
0, 0, 0, 0,
0, 0
},
{
VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2, &subpassShadingToFragment,
1, 2,
0, 0, 0, 0,
0, 0
},
};
VkRenderPassCreateInfo2 renderPassCreateInfo = {
VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2, NULL, 0,
sizeof(attachments)/sizeof(attachments[0]), attachments,
sizeof(subpasses)/sizeof(subpasses[0]), subpasses,
sizeof(dependencies)/sizeof(dependencies[0]), dependencies,
0, NULL
};
VKRenderPass renderPass;
vkCreateRenderPass2(device, &renderPassCreateInfo, NULL, &renderPass);Example of subpass shading pipeline creation
VkExtent2D maxWorkgroupSize;
VkSpecializationMapEntry subpassShadingConstantMapEntries[] = {
{ 0, 0 * sizeof(uint32_t), sizeof(uint32_t) },
{ 1, 1 * sizeof(uint32_t), sizeof(uint32_t) }
};
VkSpecializationInfo subpassShadingConstants = {
2, subpassShadingConstantMapEntries,
sizeof(VkExtent2D), &maxWorkgroupSize
};
VkSubpassShadingPipelineCreateInfoHUAWEI subpassShadingPipelineCreateInfo {
VK_STRUCTURE_TYPE_SUBPASSS_SHADING_PIPELINE_CREATE_INFO_HUAWEI, NULL,
renderPass, 1
};
VkPipelineShaderStageCreateInfo subpassShadingPipelineStageCreateInfo {
VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, NULL,
0, VK_SHADER_STAGE_SUBPASS_SHADING_BIT_HUAWEI,
shaderModule, "main",
&subpassShadingConstants
};
VkComputePipelineCreateInfo subpassShadingComputePipelineCreateInfo = {
VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO, &subpassShadingPipelineCreateInfo,
0, &subpassShadingPipelineStageCreateInfo,
pipelineLayout, basePipelineHandle, basePipelineIndex
};
VKPipeline pipeline;
vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI(device, renderPass, &maxWorkgroupSize);
vkCreateComputePipelines(device, pipelineCache, 1, &subpassShadingComputePipelineCreateInfo, NULL, &pipeline);Version History
Revision 3, 2023-06-19 (Pan Gao)
- Rename
PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEItoPIPELINE_STAGE_2_SUBPASS_SHADER_BIT_HUAWEIto better aligned with naming of other pipeline stages
- Rename
Revision 2, 2021-06-28 (Hueilong Wang)
- Change vkGetSubpassShadingMaxWorkgroupSizeHUAWEI to vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI to resolve issue pub1564
Revision 1, 2020-12-15 (Hueilong Wang)
- Initial draft.
See Also
No cross-references are available
Document Notes
For more information, see the Vulkan Specification.
This page is a generated document. Fixes and changes should be made to the generator scripts, not directly.
Synopsis
- getDeviceSubpassShadingMaxWorkgroupSizeHUAWEI :: MonadIO io => Device -> RenderPass -> io ("maxWorkgroupSize" ::: Extent2D)
- cmdSubpassShadingHUAWEI :: MonadIO io => CommandBuffer -> io ()
- pattern PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI :: PipelineStageFlagBits2
- data SubpassShadingPipelineCreateInfoHUAWEI = SubpassShadingPipelineCreateInfoHUAWEI {}
- data PhysicalDeviceSubpassShadingPropertiesHUAWEI = PhysicalDeviceSubpassShadingPropertiesHUAWEI {}
- data PhysicalDeviceSubpassShadingFeaturesHUAWEI = PhysicalDeviceSubpassShadingFeaturesHUAWEI {}
- type HUAWEI_SUBPASS_SHADING_SPEC_VERSION = 3
- pattern HUAWEI_SUBPASS_SHADING_SPEC_VERSION :: Integral a => a
- type HUAWEI_SUBPASS_SHADING_EXTENSION_NAME = "VK_HUAWEI_subpass_shading"
- pattern HUAWEI_SUBPASS_SHADING_EXTENSION_NAME :: (Eq a, IsString a) => a
Documentation
getDeviceSubpassShadingMaxWorkgroupSizeHUAWEI Source #
Arguments
| :: MonadIO io | |
| => Device |
|
| -> RenderPass |
|
| -> io ("maxWorkgroupSize" ::: Extent2D) |
vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI - Query maximum supported subpass shading workgroup size for a give render pass
Return Codes
See Also
cmdSubpassShadingHUAWEI Source #
Arguments
| :: MonadIO io | |
| => CommandBuffer |
|
| -> io () |
vkCmdSubpassShadingHUAWEI - Dispatch compute work items
Description
When the command is executed, a global workgroup consisting of ceil (render area size / local workgroup size) local workgroups is assembled.
Valid Usage
- If a
Samplercreated withmagFilterorminFilterequal toFILTER_LINEAR,reductionModeequal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, andcompareEnableequal toFALSEis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
- If a
Samplercreated withmagFilterorminFilterequal toFILTER_LINEARandreductionModeequal to eitherSAMPLER_REDUCTION_MODE_MINorSAMPLER_REDUCTION_MODE_MAXis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT - If a
Samplercreated withmipmapModeequal toSAMPLER_MIPMAP_MODE_LINEAR,reductionModeequal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, andcompareEnableequal toFALSEis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT - If a
Samplercreated withmipmapModeequal toSAMPLER_MIPMAP_MODE_LINEARandreductionModeequal to eitherSAMPLER_REDUCTION_MODE_MINorSAMPLER_REDUCTION_MODE_MAXis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT - If a
Samplercreated withunnormalizedCoordinatesequal toTRUEis used to sample aImageViewas a result of this command, then the image view’slevelCountandlayerCountmust be 1 - If a
Samplercreated withunnormalizedCoordinatesequal toTRUEis used to sample aImageViewas a result of this command, then the image view’sviewTypemust beIMAGE_VIEW_TYPE_1DorIMAGE_VIEW_TYPE_2D - If a
Samplercreated withunnormalizedCoordinatesequal toTRUEis used to sample aImageViewas a result of this command, then the sampler must not be used with any of the SPIR-VOpImageSample*orOpImageSparseSample*instructions withImplicitLod,DreforProjin their name - If a
Samplercreated withunnormalizedCoordinatesequal toTRUEis used to sample aImageViewas 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 values - If a
ImageViewis sampled with depth comparison, the image view’s format features must containFORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT - If a
ImageViewis accessed using atomic operations as a result of this command, then the image view’s format features must containFORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT - If a
DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFERdescriptor is accessed using atomic operations as a result of this command, then the storage texel buffer’s format features must containFORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT - If a
ImageViewis sampled withFILTER_CUBIC_EXTas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT - If the
VK_EXT_filter_cubic
extension is not enabled and any
ImageViewis sampled withFILTER_CUBIC_EXTas a result of this command, it must not have aImageViewTypeofIMAGE_VIEW_TYPE_3D,IMAGE_VIEW_TYPE_CUBE, orIMAGE_VIEW_TYPE_CUBE_ARRAY - Any
ImageViewbeing sampled withFILTER_CUBIC_EXTas a result of this command must have aImageViewTypeand format that supports cubic filtering, as specified byFilterCubicImageViewImageFormatPropertiesEXT::filterCubicreturned bygetPhysicalDeviceImageFormatProperties2 - Any
ImageViewbeing sampled withFILTER_CUBIC_EXTwith a reduction mode of eitherSAMPLER_REDUCTION_MODE_MINorSAMPLER_REDUCTION_MODE_MAXas a result of this command must have aImageViewTypeand format that supports cubic filtering together with minmax filtering, as specified byFilterCubicImageViewImageFormatPropertiesEXT::filterCubicMinmaxreturned bygetPhysicalDeviceImageFormatProperties2 - If the
cubicRangeClamp
feature is not enabled, then any
ImageViewbeing sampled withFILTER_CUBIC_EXTas a result of this command must not have aSamplerReductionModeCreateInfo::reductionModeequal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM - Any
ImageViewbeing sampled with aSamplerReductionModeCreateInfo::reductionModeequal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOMas a result of this command must sample withFILTER_CUBIC_EXT - If the
selectableCubicWeights
feature is not enabled, then any
ImageViewbeing sampled withFILTER_CUBIC_EXTas a result of this command must haveSamplerCubicWeightsCreateInfoQCOM::cubicWeightsequal toCUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM - Any
Imagecreated with aImageCreateInfo::flagscontainingIMAGE_CREATE_CORNER_SAMPLED_BIT_NVsampled as a result of this command must only be sampled using aSamplerAddressModeofSAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE - For any
ImageViewbeing written as a storage image where the image format field of theOpTypeImageisUnknown, the view’s format features must containFORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT - For any
ImageViewbeing read as a storage image where the image format field of theOpTypeImageisUnknown, the view’s format features must containFORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT - For any
BufferViewbeing written as a storage texel buffer where the image format field of theOpTypeImageisUnknown, the view’s buffer features must containFORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT - Any
BufferViewbeing read as a storage texel buffer where the image format field of theOpTypeImageisUnknownthen the view’s buffer features must containFORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT - If a
a bound shader
was created as a
ShaderEXTwithout theSHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXTflag or as part of a pipeline without thePIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXTflag, and that shader statically uses a set n, a descriptor set must have been bound to n at the same pipeline bind point, with aPipelineLayoutthat is compatible for set n, with thePipelineLayoutused to create the currentPipelineor theDescriptorSetLayoutarray used to create the currentShaderEXT, as described in ??? - If a
a bound shader
was created as a
ShaderEXTwithout theSHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXTflag or as part of a pipeline without thePIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXTflag, and that shader statically uses a push constant value, that value must have been set for the same pipeline bind point, with aPipelineLayoutthat is compatible for push constants with thePipelineLayoutused to create the currentPipelineor theDescriptorSetLayoutarray used to create the currentShaderEXT - 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
- If a
a bound shader
was created as a
ShaderEXTwithout theSHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXTflag or as part of a pipeline without thePIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXTflag, and that shader statically uses a push constant value, that value must have been set for the same pipeline bind point, with aPipelineLayoutthat is compatible for push constants with thePipelineLayoutused to create the currentPipelineor theDescriptorSetLayoutandPushConstantRangearrays used to create the currentShaderEXT - Descriptors in each
bound descriptor set, specified via
cmdBindDescriptorSets, must be valid if they are accessed as described by descriptor validity by thePipelinebound to the pipeline bind point used by this command and the boundPipelinewas not created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT - If an image
descriptor is accessed by a shader, the
ImageLayoutmust match the subresource accessible from theImageViewas defined by the image layout matching rules - If the descriptors used
by the
Pipelinebound to the pipeline bind point were specified viacmdBindDescriptorSets, the boundPipelinemust have been created withoutPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT - Descriptors in bound
descriptor buffers, specified via
cmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by thePipelinebound to the pipeline bind point used by this command and the boundPipelinewas created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT - Descriptors in bound
descriptor buffers, specified via
cmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by anyShaderEXTbound to a stage corresponding to the pipeline bind point used by this command - If the descriptors used
by the
Pipelinebound to the pipeline bind point were specified viacmdSetDescriptorBufferOffsetsEXT, the boundPipelinemust have been created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT - If a descriptor is
dynamically used with a
Pipelinecreated withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident - If a descriptor is
dynamically used with a
ShaderEXTcreated with aDescriptorSetLayoutthat was created withDESCRIPTOR_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
Pipelineobject bound to the pipeline bind point used by this command, since that pipeline was bound - If any stage
of the
Pipelineobject bound to the pipeline bind point used by this command accesses a uniform buffer, and that stage was created without enabling eitherPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESSorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2foruniformBuffers, 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 point - If the
robustBufferAccess
feature is not enabled, and any
ShaderEXTbound 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
Pipelineobject bound to the pipeline bind point used by this command accesses a storage buffer, and that stage was created without enabling eitherPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESSorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2forstorageBuffers, 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 point - If the
robustBufferAccess
feature is not enabled, and any
ShaderEXTbound 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 resource - If a
ImageViewis accessed as a result of this command, then the image view’sviewTypemust match theDimoperand of theOpTypeImageas described in ??? - If a
ImageVieworBufferViewis accessed as a result of this command, then the numeric type of the view’sformatand theSampledTypeoperand of theOpTypeImagemust match - If a
ImageViewcreated with a format other thanFORMAT_A8_UNORMis accessed usingOpImageWriteas a result of this command, then theTypeof theTexeloperand of that instruction must have at least as many components as the image view’s format - If a
ImageViewcreated with the formatFORMAT_A8_UNORMis accessed usingOpImageWriteas a result of this command, then theTypeof theTexeloperand of that instruction must have four components - If a
BufferViewis accessed usingOpImageWriteas a result of this command, then theTypeof theTexeloperand of that instruction must have at least as many components as the buffer view’s format - If a
ImageViewwith aFormatthat has a 64-bit component width is accessed as a result of this command, theSampledTypeof theOpTypeImageoperand of that instruction must have aWidthof 64 - If a
ImageViewwith aFormatthat has a component width less than 64-bit is accessed as a result of this command, theSampledTypeof theOpTypeImageoperand of that instruction must have aWidthof 32 - If a
BufferViewwith aFormatthat has a 64-bit component width is accessed as a result of this command, theSampledTypeof theOpTypeImageoperand of that instruction must have aWidthof 64 - If a
BufferViewwith aFormatthat has a component width less than 64-bit is accessed as a result of this command, theSampledTypeof theOpTypeImageoperand of that instruction must have aWidthof 32 - If
the
sparseImageInt64Atomics
feature is not enabled,
Imageobjects created with theIMAGE_CREATE_SPARSE_RESIDENCY_BITflag must not be accessed by atomic instructions through anOpTypeImagewith aSampledTypewith aWidthof 64 by this command - If
the
sparseImageInt64Atomics
feature is not enabled,
Bufferobjects created with theBUFFER_CREATE_SPARSE_RESIDENCY_BITflag must not be accessed by atomic instructions through anOpTypeImagewith aSampledTypewith aWidthof 64 by this command - If
OpImageSampleWeightedQCOMis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM - If
OpImageSampleWeightedQCOMuses aImageViewas a sample weight image as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM - If
OpImageBoxFilterQCOMis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM - If
OpImageBlockMatchSSDQCOMis used to read from anImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM - If
OpImageBlockMatchSADQCOMis used to read from anImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM - If
OpImageBlockMatchSADQCOMor OpImageBlockMatchSSDQCOM is used to read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation - If
OpImageSampleWeightedQCOM,OpImageBoxFilterQCOM,OpImageBlockMatchWindowSSDQCOM,OpImageBlockMatchWindowSADQCOM,OpImageBlockMatchGatherSSDQCOM,OpImageBlockMatchGatherSADQCOM,OpImageBlockMatchSSDQCOM, orOpImageBlockMatchSADQCOMuses aSampleras a result of this command, then the sampler must have been created withSAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM - If
any command other than
OpImageSampleWeightedQCOM,OpImageBoxFilterQCOM,OpImageBlockMatchWindowSSDQCOM,OpImageBlockMatchWindowSADQCOM,OpImageBlockMatchGatherSSDQCOM,OpImageBlockMatchGatherSADQCOM,OpImageBlockMatchSSDQCOM, orOpImageBlockMatchSADQCOMuses aSampleras a result of this command, then the sampler must not have been created withSAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM - If a
OpImageBlockMatchWindow*QCOMorOpImageBlockMatchGather*QCOMinstruction is used to read from anImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM - If a
OpImageBlockMatchWindow*QCOMorOpImageBlockMatchGather*QCOMinstruction is used to read from anImageViewas a result of this command, then the image view’s format must be a single-component format - If a
OpImageBlockMatchWindow*QCOMorOpImageBlockMatchGather*QCOMread from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation - Any 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, orDESCRIPTOR_TYPE_INPUT_ATTACHMENTis 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 - The
DeviceMemoryobject allocated from aMemoryHeapwith theMEMORY_HEAP_TILE_MEMORY_BIT_QCOMproperty that is bound to a resource accessed as a result of this command must be the active bound bound tile memory object incommandBuffer - If 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/orSHADER_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_EXTlayout - If a
DESCRIPTOR_TYPE_TENSOR_ARMdescriptor is accessed as a result of this command, then the underlyingTensorARMobject must have been created with theTENSOR_USAGE_SHADER_BIT_ARMusage flag set - If a
DESCRIPTOR_TYPE_TENSOR_ARMdescriptor is accessed as a result of this command, then theRankof theOpTypeTensorARMof the tensor resource variable must be equal to thedimensionCountprovided viaTensorCreateInfoARM::pDescriptionwhen creating the underlyingTensorARMobject - If a
DESCRIPTOR_TYPE_TENSOR_ARMdescriptor is accessed as a result of this command, then the element type of theOpTypeTensorARMof the tensor resource variable must be compatible with theFormatof theTensorViewARMused for the access - 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_PUSH_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, orDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses aOpTypeStructdecorated withBlockorBufferBlockusing that mapping, the calculated offset for the resource heap must be a multiple of bufferDescriptorAlignment - 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_PUSH_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, orDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses anOpTypeImageorOpTypeSampledImageusing that mapping, the calculated offset for the resource heap must be a multiple of imageDescriptorAlignment - 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_PUSH_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, orDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses anOpTypeSamplerorOpTypeSampledImageusing that mapping, the calculated offset for the sampler heap must be a multiple of samplerDescriptorAlignment - 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_PUSH_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, orDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses anOpTypeTensorARMusing that mapping, the calculated offset for the resource heap must be a multiple of tensorDescriptorAlignment - 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_EXTorDESCRIPTOR_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_EXTorDESCRIPTOR_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 validDeviceAddressbacked 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 validDeviceAddress - 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 validDeviceAddressbacked 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 validDeviceAddress - 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
ShaderEXTwith theSHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXTflag or as part of a pipeline with thePIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXTflag, execution of this command must not result in any descriptor read accessing data outside of the user range of the respective heap bound byvkCmdBind*HeapEXTcommands - If any stage of the
Pipelineobject 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 eitherPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESSorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2foruniformBuffers, 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 viaDeviceAddressRangeEXTwhen the descriptor was written - If any stage of the
Pipelineobject 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 eitherPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESSorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2forstorageBuffers, 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 byDeviceAddressRangeEXTwhen the descriptor was written - If the
robustBufferAccess2
feature is not enabled, the
robustBufferAccess
feature is not enabled, and any
ShaderEXTbound 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 byDeviceAddressRangeEXTwhen the descriptor was written - If any
bound shader
uses an embedded sampler via a
descriptor mapping,
the value of
pBindInfo->reservedRangeSizeset forcmdBindSamplerHeapEXTmust be greater than or equal to minSamplerHeapReservedRangeWithEmbedded - If a
bound shader
was created as a
ShaderEXTwith theSHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXTflag or as part of a pipeline with thePIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXTflag, and that shader statically uses a push constant value, that value must have been set bycmdPushDataEXT - 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, orDESCRIPTOR_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, orDESCRIPTOR_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 theBUFFER_USAGE_UNIFORM_BUFFER_BITusage 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, orDESCRIPTOR_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 theBUFFER_USAGE_UNIFORM_BUFFER_BITusage 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, orDESCRIPTOR_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, orDESCRIPTOR_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 theBUFFER_USAGE_STORAGE_BUFFER_BITusage 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, orDESCRIPTOR_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, orDESCRIPTOR_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 aAccelerationStructureKHRobject viagetAccelerationStructureDeviceAddressKHRor handle retrieved from aAccelerationStructureNVobject viagetAccelerationStructureHandleNV - 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 ofSamplerCustomBorderColorIndexCreateInfoEXT::indexmust have been registered before this command was recorded, and still be registered during the sampling operation, with an identically defined color - 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_PUSH_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, the address that the resource is mapped to must have been queried from a buffer created without theBUFFER_CREATE_PROTECTED_BITcreate 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_EXTorDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, the address of the indirect memory must have been queried from a buffer created without theBUFFER_CREATE_PROTECTED_BITcreate flag set - This command must be
called in a subpass with bind point
PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI. No draw commands can be called in the same subpass. Only onecmdSubpassShadingHUAWEIcommand can be called in a subpass
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must supportQUEUE_GRAPHICS_BIToperations - This command must only be called inside 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
CommandPoolthatcommandBufferwas allocated from must be externally synchronized
Command Properties
'
| Command Buffer Levels | Render Pass Scope | Video Coding Scope | Supported Queue Types | Command Type |
|---|---|---|---|---|
| Primary Secondary | Inside | Outside | VK_QUEUE_GRAPHICS_BIT | Action |
Conditional Rendering
vkCmdSubpassShadingHUAWEI is not affected by conditional rendering
See Also
data SubpassShadingPipelineCreateInfoHUAWEI Source #
VkSubpassShadingPipelineCreateInfoHUAWEI - Structure specifying parameters of a newly created subpass shading pipeline
Valid Usage (Implicit)
See Also
Constructors
| SubpassShadingPipelineCreateInfoHUAWEI | |
Fields
| |
Instances
data PhysicalDeviceSubpassShadingPropertiesHUAWEI Source #
VkPhysicalDeviceSubpassShadingPropertiesHUAWEI - Structure describing subpass shading properties supported by an implementation
Description
If the PhysicalDeviceSubpassShadingPropertiesHUAWEI structure is
included in the pNext chain of the
PhysicalDeviceProperties2
structure passed to
getPhysicalDeviceProperties2,
it is filled in with each corresponding implementation-dependent
property.
Valid Usage (Implicit)
See Also
Constructors
| PhysicalDeviceSubpassShadingPropertiesHUAWEI | |
Fields
| |
Instances
data PhysicalDeviceSubpassShadingFeaturesHUAWEI Source #
VkPhysicalDeviceSubpassShadingFeaturesHUAWEI - Structure describing whether subpass shading is enabled
Members
This structure describes the following feature:
Description
If the PhysicalDeviceSubpassShadingFeaturesHUAWEI structure is
included in the pNext chain of the
PhysicalDeviceFeatures2
structure passed to
getPhysicalDeviceFeatures2,
it is filled in to indicate whether each corresponding feature is
supported. If the application wishes to use a
Device with any features described by
PhysicalDeviceSubpassShadingFeaturesHUAWEI, it must add an instance
of the structure, with the desired feature members set to
TRUE, to the pNext chain of
DeviceCreateInfo when creating the
Device.
Valid Usage (Implicit)
See Also
Constructors
| PhysicalDeviceSubpassShadingFeaturesHUAWEI | |
Fields | |
Instances
type HUAWEI_SUBPASS_SHADING_SPEC_VERSION = 3 Source #
pattern HUAWEI_SUBPASS_SHADING_SPEC_VERSION :: Integral a => a Source #
type HUAWEI_SUBPASS_SHADING_EXTENSION_NAME = "VK_HUAWEI_subpass_shading" Source #
pattern HUAWEI_SUBPASS_SHADING_EXTENSION_NAME :: (Eq a, IsString a) => a Source #