Class HUAWEISubpassShading
- java.lang.Object
-
- org.lwjgl.vulkan.HUAWEISubpassShading
-
public class HUAWEISubpassShading extends java.lang.ObjectThis 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.xyof a subpass shading pipeline is equal to theFragCoord.xyof a graphic pipeline in the same render pass subtracted theoffsetof theVkRenderPassBeginInfo::renderArea.GlobalInvocationId.zis mapped to the Layer ifVK_EXT_shader_viewport_index_layeris supported. TheGlobalInvocationId.xyis equal to the index of the local workgroup multiplied by the size of the local workgroup plus theLocalInvocationIdand theoffsetof theVkRenderPassBeginInfo::renderArea.This extension allows a subpass’s pipeline bind point to be
PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI.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_SHADING_BIT_HUAWEI, VK_ACCESS_INPUT_ATTACHMENT_READ_BIT }; VkMemoryBarrier2KHR subpassShadingToFragment = { VK_STRUCTURE_TYPE_MEMORY_BARRIER_2_KHR, NULL, VK_PIPELINE_STAGE_2_SUBPASS_SHADING_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);VK_HUAWEI_subpass_shading
- Name String
VK_HUAWEI_subpass_shading- Extension Type
- Device extension
- Registered Extension Number
- 370
- Revision
- 2
- Extension and Version Dependencies
- Requires Vulkan 1.0
- Requires
VK_KHR_create_renderpass2 - Requires
VK_KHR_synchronization2
- Contact
- Hueilong Wang wyvernathuawei
Other Extension Metadata
- Last Modified Date
- 2021-06-01
- Interactions and External Dependencies
- This extension requires
SPV_HUAWEI_subpass_shading. - This extension provides API support for
GL_HUAWEI_subpass_shading.
- This extension requires
- Contributors
- Hueilong Wang
-
-
Field Summary
Fields Modifier and Type Field Description static java.lang.StringVK_HUAWEI_SUBPASS_SHADING_EXTENSION_NAMEThe extension name.static intVK_HUAWEI_SUBPASS_SHADING_SPEC_VERSIONThe extension specification version.static intVK_PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEIExtendsVkPipelineBindPoint.static longVK_PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEIExtendsVkPipelineStageFlagBits2.static intVK_SHADER_STAGE_SUBPASS_SHADING_BIT_HUAWEIExtendsVkShaderStageFlagBits.static intVK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_SHADING_FEATURES_HUAWEI
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_SHADING_PROPERTIES_HUAWEI
VK_STRUCTURE_TYPE_SUBPASS_SHADING_PIPELINE_CREATE_INFO_HUAWEIExtendsVkStructureType.
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static intnvkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI(org.lwjgl.vulkan.VkDevice device, long renderpass, long pMaxWorkgroupSize)Unsafe version of:GetDeviceSubpassShadingMaxWorkgroupSizeHUAWEIstatic voidvkCmdSubpassShadingHUAWEI(org.lwjgl.vulkan.VkCommandBuffer commandBuffer)Dispatch compute work items.static intvkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI(org.lwjgl.vulkan.VkDevice device, long renderpass, VkExtent2D pMaxWorkgroupSize)Query maximum supported subpass shading workgroup size for a give render pass.
-
-
-
Field Detail
-
VK_HUAWEI_SUBPASS_SHADING_SPEC_VERSION
The extension specification version.
-
VK_HUAWEI_SUBPASS_SHADING_EXTENSION_NAME
The extension name.
-
VK_STRUCTURE_TYPE_SUBPASS_SHADING_PIPELINE_CREATE_INFO_HUAWEI, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_SHADING_FEATURES_HUAWEI, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_SHADING_PROPERTIES_HUAWEI
-
VK_PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI
ExtendsVkPipelineBindPoint.
-
VK_PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI
ExtendsVkPipelineStageFlagBits2.
-
VK_SHADER_STAGE_SUBPASS_SHADING_BIT_HUAWEI
ExtendsVkShaderStageFlagBits.
-
-
Method Detail
-
nvkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI
public static int nvkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI(org.lwjgl.vulkan.VkDevice device, long renderpass, long pMaxWorkgroupSize)Unsafe version of:GetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI
-
vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI
public static int vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI(org.lwjgl.vulkan.VkDevice device, long renderpass, VkExtent2D pMaxWorkgroupSize)Query maximum supported subpass shading workgroup size for a give render pass.C Specification
A subpass shading pipeline’s workgroup size is a 2D vector with number of power-of-two in width and height. The maximum number of width and height is implementation dependent, and may vary for different formats and sample counts of attachments in a render pass.
To query the maximum workgroup size, call:
VkResult vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI( VkDevice device, VkRenderPass renderpass, VkExtent2D* pMaxWorkgroupSize);Valid Usage (Implicit)
devicemust be a validVkDevicehandlerenderpassmust be a validVkRenderPasshandlepMaxWorkgroupSizemust be a valid pointer to aVkExtent2Dstructurerenderpassmust have been created, allocated, or retrieved fromdevice
Return Codes
- On success, this command returns
- On failure, this command returns
See Also
- Parameters:
device- a handle to a local device object that was used to create the given render pass.pMaxWorkgroupSize- a pointer to aVkExtent2Dstructure.
-
vkCmdSubpassShadingHUAWEI
public static void vkCmdSubpassShadingHUAWEI(org.lwjgl.vulkan.VkCommandBuffer commandBuffer)
Dispatch compute work items.C Specification
A subpass shading dispatches a compute pipeline work with the work dimension of render area of the calling subpass and work groups are partitioned by specified work group size. Subpass operations like subpassLoad and subpassLoadMS are allowed to be used.
To record a subpass shading, call:
void vkCmdSubpassShadingHUAWEI( VkCommandBuffer commandBuffer);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
VkSamplercreated withmagFilterorminFilterequal toFILTER_LINEARandcompareEnableequal toFALSEis used to sample aVkImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT - If a
VkSamplercreated withmipmapModeequal toSAMPLER_MIPMAP_MODE_LINEARandcompareEnableequal toFALSEis used to sample aVkImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT - If a
VkImageViewis sampled with depth comparison, the image view’s format features must containFORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT - If a
VkImageViewis 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
VkImageViewis 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 - Any
VkImageViewbeing sampled withFILTER_CUBIC_EXTas a result of this command must have aVkImageViewTypeand format that supports cubic filtering, as specified byVkFilterCubicImageViewImageFormatPropertiesEXT::filterCubicreturned byvkGetPhysicalDeviceImageFormatProperties2 - Any
VkImageViewbeing sampled withFILTER_CUBIC_EXTwith a reduction mode of eitherSAMPLER_REDUCTION_MODE_MINorSAMPLER_REDUCTION_MODE_MAXas a result of this command must have aVkImageViewTypeand format that supports cubic filtering together with minmax filtering, as specified byVkFilterCubicImageViewImageFormatPropertiesEXT::filterCubicMinmaxreturned byvkGetPhysicalDeviceImageFormatProperties2 - Any
VkImagecreated with aVkImageCreateInfo::flagscontainingIMAGE_CREATE_CORNER_SAMPLED_BIT_NVsampled as a result of this command must only be sampled using aVkSamplerAddressModeofSAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE - Any
VkImageVieworVkBufferViewbeing written as a storage image or storage texel buffer where the image format field of theOpTypeImageisUnknownthen the view’s format feature must containFORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT - Any
VkImageVieworVkBufferViewbeing read as a storage image or storage texel buffer where the image format field of theOpTypeImageisUnknownthen the view’s format feature must containFORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT - For each set n that is statically used by the
VkPipelinebound to the pipeline bind point used by this command, a descriptor set must have been bound to n at the same pipeline bind point, with aVkPipelineLayoutthat is compatible for set n, with theVkPipelineLayoutused to create the currentVkPipeline, as described in Pipeline Layout Compatibility - If the
maintenance4feature is not enabled, then for each push constant that is statically used by theVkPipelinebound to the pipeline bind point used by this command, a push constant value must have been set for the same pipeline bind point, with aVkPipelineLayoutthat is compatible for push constants, with theVkPipelineLayoutused to create the currentVkPipeline, as described in Pipeline Layout Compatibility - Descriptors in each bound descriptor set, specified via
vkCmdBindDescriptorSets, must be valid if they are statically used by theVkPipelinebound to the pipeline bind point used by this command - A valid pipeline must be bound to the pipeline bind point used by this command
- If the
VkPipelineobject bound to the pipeline bind point used by this command requires any dynamic state, that state must have been set or inherited (if theVK_NV_inherited_viewport_scissorextension is enabled) forcommandBuffer, and done so after any previously bound pipeline with the corresponding state not specified as dynamic - There must not have been any calls to dynamic state setting commands for any state not specified as dynamic in the
VkPipelineobject bound to the pipeline bind point used by this command, since that pipeline was bound - If the
VkPipelineobject bound to the pipeline bind point used by this command accesses aVkSamplerobject that uses unnormalized coordinates, that sampler must not be used to sample from anyVkImagewith aVkImageViewof the typeIMAGE_VIEW_TYPE_3D,IMAGE_VIEW_TYPE_CUBE,IMAGE_VIEW_TYPE_1D_ARRAY,IMAGE_VIEW_TYPE_2D_ARRAYorIMAGE_VIEW_TYPE_CUBE_ARRAY, in any shader stage - If the
VkPipelineobject bound to the pipeline bind point used by this command accesses aVkSamplerobject that uses unnormalized coordinates, that sampler must not be used with any of the SPIR-VOpImageSample*orOpImageSparseSample*instructions withImplicitLod,DreforProjin their name, in any shader stage - If the
VkPipelineobject bound to the pipeline bind point used by this command accesses aVkSamplerobject that uses unnormalized coordinates, that sampler must not be used with any of the SPIR-VOpImageSample*orOpImageSparseSample*instructions that includes a LOD bias or any offset values, in any shader stage - If the robust buffer access feature is not enabled, and if the
VkPipelineobject bound 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 the robust buffer access feature is not enabled, and if the
VkPipelineobject bound 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 andprotectedNoFaultis not supported, any resource accessed by theVkPipelineobject bound to the pipeline bind point used by this command must not be a protected resource - If the
VkPipelineobject bound to the pipeline bind point used by this command accesses aVkSamplerorVkImageViewobject that enables sampler Y′CBCR conversion, that object must only be used withOpImageSample*orOpImageSparseSample*instructions - If the
VkPipelineobject bound to the pipeline bind point used by this command accesses aVkSamplerorVkImageViewobject that enables sampler Y′CBCR conversion, that object must not use theConstOffsetandOffsetoperands - If a
VkImageViewis 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
VkBufferViewis 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
VkImageViewwith aVkFormatthat 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
VkImageViewwith aVkFormatthat 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
VkBufferViewwith aVkFormatthat 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
VkBufferViewwith aVkFormatthat 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
sparseImageInt64Atomicsfeature is not enabled,VkImageobjects created with theIMAGE_CREATE_SPARSE_RESIDENCY_BITflag must not be accessed by atomic instructions through anOpTypeImagewith aSampledTypewith aWidthof 64 by this command - If the
sparseImageInt64Atomicsfeature is not enabled,VkBufferobjects created with theBUFFER_CREATE_SPARSE_RESIDENCY_BITflag must not be accessed by atomic instructions through anOpTypeImagewith aSampledTypewith aWidthof 64 by this command - 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 validVkCommandBufferhandlecommandBuffermust be in the recording state- The
VkCommandPoolthatcommandBufferwas allocated from must support graphics operations - This command must only be called inside of a render pass instance
Host Synchronization
- Host access to
commandBuffermust be externally synchronized - Host access to the
VkCommandPoolthatcommandBufferwas allocated from must be externally synchronized
Command Properties
Command Buffer Levels Render Pass Scope Supported Queue Types Primary Secondary Inside Graphics - Parameters:
commandBuffer- the command buffer into which the command will be recorded.
- If a
-
-