| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Vulkan.Extensions.VK_QCOM_tile_shading
Description
Name
VK_QCOM_tile_shading - device extension
VK_QCOM_tile_shading
- Name String
VK_QCOM_tile_shading
- Extension Type
- Device extension
- Registered Extension Number
- 310
- Revision
- 2
- Ratification Status
- Not ratified
- Extension and Version Dependencies
- VK_QCOM_tile_properties
- SPIR-V Dependencies
- Contact
- Extension Proposal
- VK_QCOM_tile_shading
Other Extension Metadata
- Last Modified Date
- 2025-8-13
- IP Status
- No known IP claims.
- Interactions and External Dependencies
- This extension interacts with
VK_KHR_dynamic_rendering - This extension interacts with
VK_EXT_transform_feedback - This extension interacts with
VK_EXT_debug_marker - This extension interacts with
VK_EXT_attachment_feedback_loop_layout - This extension interacts with
VK_KHR_dynamic_rendering_local_read - This extension interacts with
VK_QCOM_image_processing
- This extension interacts with
- Contributors
- Jeff Leger, Qualcomm
- Matt Netsch, Qualcomm
- Srihari Babu Alla, Qualcomm
- Matthew Smith, Qualcomm
- Kevin Matlage, Qualcomm
- Alex Bourd, Qualcomm
Description
This extension exposes tile shading in Vulkan. Many mobile GPUs utilize Tile-Based Deferred Rendering (TBDR) to optimize for power and performance. Conversely, most desktop GPUs use immediate-mode rendering (IM). Adreno ™ GPUs uniquely have the ability to operate in either mode, and when this extension is not enabled, the Adreno driver will select the most optimal mode (TBDR or IM) based on the workload; this feature is called FlexRender ™. When this extension is in use, FlexRender is disabled and the GPU operates exclusively in TBDR wherever possible.
The TBDR mode divides the color and depth/stencil buffer attachments into a regular grid of smaller regions called “tiles”. When a render pass instance is submitted for execution on an Adreno GPU, the rendering is split into two phases: a single “visibility pass” followed by multiple “rendering passes” where a separate render pass is issued for each tile in the framebuffer.
The “visibility pass” processes the geometry: identifies which tiles are covered by each primitive, eliminates occluded primitives and unneeded state changes, and performs other tile-specific optimizations. The primitive coverage information collected during the visibility pass is used in the subsequent “rendering pass” for each tile. During the rendering pass for each tile, any primitives that were determined not to cover the current tile are skipped.
This deferred rasterization additionally utilizes a specialized high-bandwidth on-die memory, “tile memory”. Tile memory is dramatically more efficient than other device memory. The tile memory temporarily stores the color and other attachments for each tile during rasterization. After each tile is fully rasterized, the resulting tile is typically copied to device memory backing the attachment as specified by the render pass STORE_OP. The per-tile rendering passes occur independently for each tile, with multiple tiles potentially being processed in parallel.
This extension enables applications to leverage the power and performance of tile memory in new ways:
- Adds a mechanism for recording dispatches or draws that are guaranteed to be executed per-tile.
- Such draws bypass the above-mentioned visibility-based skipping and are guaranteed to be executed for every tile in the rendering pass.
- Shaders can declare “tile attachments” variables, providing shader access to color, depth/stencil, and input attachment pixels.
- Fragment and compute shaders can read these render pass attachments at any location within the tile. Compute shaders can also write to color attachments at any location within the tile.
- Shaders can use new built-in variables that provide the location, size, and apron region of the tile.
- A new tile dispatch command automatically scales workgroup sizes and counts to the tile size, given a desired shading rate.
- Framebuffer-local dependencies are expanded to tile-sized regions, rather than a single pixel or sample.
- A tile shading render pass can also enable tiling “aprons”. This is a specialized rendering mode where the GPU renders overlapping tiles that enable specific use cases.
New Commands
New Structures
PerTileBeginInfoQCOMPerTileEndInfoQCOMExtending
PhysicalDeviceFeatures2,DeviceCreateInfo:Extending
PhysicalDeviceProperties2:Extending
RenderPassCreateInfo,RenderPassCreateInfo2,RenderingInfo,CommandBufferInheritanceInfo:
New Enums
New Bitmasks
New Enum Constants
QCOM_TILE_SHADING_SPEC_VERSIONExtending
AccessFlagBits2:Extending
StructureType:Extending
SubpassDescriptionFlagBits:
New or Modified Built-In Variables
New SPIR-V Capabilities
Issues
1) Some early Adreno drivers advertised support for version 1 of this
extension without supporting the required
tileShadingApron
feature. To cover all Adreno devices on the market, applications should
not assume any version of this extension supports the tileShadingApron
feature without performing a feature query.
Version History
Revision 2, 2025-08-13 (Matthew Netsch)
- Make the
tileShadingApronfeature optional
- Make the
- Revision 1, 2023-10-12 (Jeff Leger)
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
- cmdDispatchTileQCOM :: MonadIO io => CommandBuffer -> DispatchTileInfoQCOM -> io ()
- cmdBeginPerTileExecutionQCOM :: MonadIO io => CommandBuffer -> PerTileBeginInfoQCOM -> io ()
- cmdEndPerTileExecutionQCOM :: MonadIO io => CommandBuffer -> PerTileEndInfoQCOM -> io ()
- data PhysicalDeviceTileShadingFeaturesQCOM = PhysicalDeviceTileShadingFeaturesQCOM {
- tileShading :: Bool
- tileShadingFragmentStage :: Bool
- tileShadingColorAttachments :: Bool
- tileShadingDepthAttachments :: Bool
- tileShadingStencilAttachments :: Bool
- tileShadingInputAttachments :: Bool
- tileShadingSampledAttachments :: Bool
- tileShadingPerTileDraw :: Bool
- tileShadingPerTileDispatch :: Bool
- tileShadingDispatchTile :: Bool
- tileShadingApron :: Bool
- tileShadingAnisotropicApron :: Bool
- tileShadingAtomicOps :: Bool
- tileShadingImageProcessing :: Bool
- data PhysicalDeviceTileShadingPropertiesQCOM = PhysicalDeviceTileShadingPropertiesQCOM {}
- data RenderPassTileShadingCreateInfoQCOM = RenderPassTileShadingCreateInfoQCOM {}
- data PerTileBeginInfoQCOM = PerTileBeginInfoQCOM
- data PerTileEndInfoQCOM = PerTileEndInfoQCOM
- data DispatchTileInfoQCOM = DispatchTileInfoQCOM
- type TileShadingRenderPassFlagsQCOM = TileShadingRenderPassFlagBitsQCOM
- newtype TileShadingRenderPassFlagBitsQCOM where
- type QCOM_TILE_SHADING_SPEC_VERSION = 2
- pattern QCOM_TILE_SHADING_SPEC_VERSION :: Integral a => a
- type QCOM_TILE_SHADING_EXTENSION_NAME = "VK_QCOM_tile_shading"
- pattern QCOM_TILE_SHADING_EXTENSION_NAME :: (Eq a, IsString a) => a
Documentation
Arguments
| :: MonadIO io | |
| => CommandBuffer |
|
| -> DispatchTileInfoQCOM |
|
| -> io () |
vkCmdDispatchTileQCOM - Dispatch per-tile work items
Description
This command operates in the per-tile execution model, invoking a separate dispatch for each covered tile. The global workgroup count and local workgroup size of each dispatch are defined by the implementation to efficiently iterate over a uniform grid of pixel blocks within the area of its active tile.
Each shader invocation operates on a single pixel block and its size is
determined by the shader’s tiling rate, which must be defined by
shaders executed by this command. The TileShadingRateQCOM execution
mode operand defines the shader’s tiling rate. Its x and y must be
a power of two and less than or equal to the
maxTileShadingRate
limit. Its z must be less than or equal to the active tile’s depth
as reported by
VK_QCOM_tile_properties,
and
TilePropertiesQCOM.tileSize.z
% TileShadingRateQCOM::z must equal 0.
The start location of the shader invocation’s pixel block is
vec3(TileOffsetQCOM, 0) + (GlobalInvocationId *
TileShadingRateQCOM)
Shader invocations can perform tile attachment load/store operations at any location within the active tile, but the most efficient access may be limited to fragment locations within and local to the shader invocation’s pixel block.
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 - If the per-tile execution model is not enabled, this command must be called outside of a render pass instance
- If this command is
recorded where
per-tile execution model
is enabled, and if the
Pipelineobject bound to the pipeline bind point used by this command writes to a variable of storage classStorageClassTileAttachmentQCOM, the correspondingImageViewusing must not have been created with anaspectMaskthat containsIMAGE_ASPECT_DEPTH_BITorIMAGE_ASPECT_STENCIL_BIT - If the per-tile execution model is enabled, the tileShadingPerTileDispatch feature must be enabled
- Memory backing image subresources used as tile attachments in the current render pass must not be written in any way other than as a tile attachment by this command
- If any recorded command in the current subpass will write to an image subresource as a tile attachment, this command must not read from the memory backing that image subresource in any other way than as a tile attachment
- If there is no bound compute
pipeline, a valid
ShaderEXTmust be bound to theSHADER_STAGE_COMPUTE_BITstage - If
commandBufferis a protected command buffer and protectedNoFault is not supported, any resource written to by thePipelineobject bound to the pipeline bind point used by this command must not be an unprotected resource - If
commandBufferis a protected command buffer and protectedNoFault is not supported, pipeline stages other than the framebuffer-space and compute stages in thePipelineobject bound to the pipeline bind point used by this command must not write to any resource - If any of the
shader stages of the
Pipelinebound to the pipeline bind point used by this command uses the RayQueryKHR capability, thencommandBuffermust not be a protected command buffer - When this command is recorded per-tile execution model must be enabled
- The tileShadingDispatchTile must enabled
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
pDispatchTileInfomust be a valid pointer to a validDispatchTileInfoQCOMstructure -
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must supportQUEUE_COMPUTE_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 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_COMPUTE_BIT | Action |
Conditional Rendering
vkCmdDispatchTileQCOM is affected by conditional rendering
See Also
cmdBeginPerTileExecutionQCOM Source #
Arguments
| :: MonadIO io | |
| => CommandBuffer |
|
| -> PerTileBeginInfoQCOM |
|
| -> io () |
vkCmdBeginPerTileExecutionQCOM - Begin per-tile execution mode
Description
When per-tile execution model is enabled, recorded vkCmdDraw* or
vkCmdDispatch* commands are invoked per tile. That is, the recorded
draw or dispatch is invoked exactly once for each covered tile. The
set of covered tiles for a given render pass instance consists of the
set of render pass tiles, which can be queried with
VK_QCOM_tile_properties, that are completely or partially covered by
the renderArea for the render pass instance. The draw or dispatch
commands may be invoked for uncovered tiles.
Each per-tile command invocation is associated with a single tile, the active tile. These per-tile invocations are not specified to execute in any particular order, but the size and offset of the active tile is available via shader built-ins.
When per-tile execution model is enabled, the following restrictions apply:
- Transform feedback commands such as
cmdBeginTransformFeedbackEXT,cmdEndTransformFeedbackEXT,cmdBeginQueryIndexedEXT, andcmdEndQueryIndexedEXT, must not be recorded. - Query commands such as
cmdWriteTimestamp,cmdDebugMarkerBeginEXT,cmdDebugMarkerEndEXT,cmdDebugMarkerInsertEXT,cmdBeginQuery, andcmdEndQuery, must not be recorded. - Event commands such as
cmdWaitEvents2andcmdWaitEventsmust not be recorded. - Render pass clears like
cmdClearAttachmentsmust not be recorded - Access of an attachment with layout
IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXTas provided byVK_EXT_attachment_feedback_loop_layoutis disallowed Any commands that would cause a invocations of one of the following shader stages are not allowed
- tessellation
- geometry
- ray tracing
- mesh shading
Valid Usage
- The current render pass must be a tile shading render pass
- The tileShadingPerTileDispatch or tileShadingPerTileDraw feature must be enabled
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
pPerTileBeginInfomust be a valid pointer to a validPerTileBeginInfoQCOMstructure -
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must supportQUEUE_COMPUTE_BIT, orQUEUE_GRAPHICS_BIToperations - This command must only be called inside of a render pass instance
- This command must only be called outside of a video coding scope
Host Synchronization
- 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_COMPUTE_BIT VK_QUEUE_GRAPHICS_BIT | State |
Conditional Rendering
vkCmdBeginPerTileExecutionQCOM is not affected by conditional rendering
See Also
cmdEndPerTileExecutionQCOM Source #
Arguments
| :: MonadIO io | |
| => CommandBuffer |
|
| -> PerTileEndInfoQCOM |
|
| -> io () |
vkCmdEndPerTileExecutionQCOM - End per-tile execution mode
Description
This command disables per-tile execution model.
Valid Usage
- The current render pass must be a tile shading render pass
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
pPerTileEndInfomust be a valid pointer to a validPerTileEndInfoQCOMstructure -
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must supportQUEUE_COMPUTE_BIT, orQUEUE_GRAPHICS_BIToperations - This command must only be called inside of a render pass instance
- This command must only be called outside of a video coding scope
Host Synchronization
- 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_COMPUTE_BIT VK_QUEUE_GRAPHICS_BIT | State |
Conditional Rendering
vkCmdEndPerTileExecutionQCOM is not affected by conditional rendering
See Also
data PhysicalDeviceTileShadingFeaturesQCOM Source #
VkPhysicalDeviceTileShadingFeaturesQCOM - Structure describing tile shading features that can be supported by an implementation
Members
This structure describes the following features:
Description
If the PhysicalDeviceTileShadingFeaturesQCOM 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
PhysicalDeviceTileShadingFeaturesQCOM, 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
| PhysicalDeviceTileShadingFeaturesQCOM | |
Fields
| |
Instances
data PhysicalDeviceTileShadingPropertiesQCOM Source #
VkPhysicalDeviceTileShadingPropertiesQCOM - Structure describing properties supported by VK_QCOM_tile_shading
Description
If the PhysicalDeviceTileShadingPropertiesQCOM 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
| PhysicalDeviceTileShadingPropertiesQCOM | |
Fields
| |
Instances
data RenderPassTileShadingCreateInfoQCOM Source #
VkRenderPassTileShadingCreateInfoQCOM - Structure specifying, tile shading information for a render pass object.
Description
If this structure is not present, the render pass will have flags set
to 0 and tileApronSize is set to (0,0).
Valid Usage
- If
the
tileShading
feature is not enabled,
TILE_SHADING_RENDER_PASS_ENABLE_BIT_QCOMmust not be included inflags
- If
TILE_SHADING_RENDER_PASS_ENABLE_BIT_QCOMis not included inflagsor the tileShadingApron feature is not enabled,tileApronSizemust be(0,0) - If
TILE_SHADING_RENDER_PASS_ENABLE_BIT_QCOMis not included inflags, or neither the tileShadingPerTileDispatch and tileShadingPerTileDraw features are enabled,flagsmust not includeTILE_SHADING_RENDER_PASS_PER_TILE_EXECUTION_BIT_QCOM -
If the
tileShadingAnisotropicApron
feature is not enabled,
tileApronSize.xand must be equal totileApronSize.y -
tileApronSize.xmust be less than or equal to maxApronSize -
tileApronSize.ymust be less than or equal to maxApronSize
Valid Usage (Implicit)
-
sTypemust beSTRUCTURE_TYPE_RENDER_PASS_TILE_SHADING_CREATE_INFO_QCOM
-
flagsmust be a valid combination ofTileShadingRenderPassFlagBitsQCOMvalues
See Also
VK_QCOM_tile_shading,
Extent2D,
StructureType,
TileShadingRenderPassFlagsQCOM
Constructors
| RenderPassTileShadingCreateInfoQCOM | |
Fields
| |
Instances
data PerTileBeginInfoQCOM Source #
VkPerTileBeginInfoQCOM - Structure specifying per-tile begin information
Valid Usage (Implicit)
See Also
VK_QCOM_tile_shading,
StructureType,
cmdBeginPerTileExecutionQCOM
Constructors
| PerTileBeginInfoQCOM |
Instances
data PerTileEndInfoQCOM Source #
VkPerTileEndInfoQCOM - Structure specifying per-tile end information
Valid Usage (Implicit)
See Also
VK_QCOM_tile_shading,
StructureType,
cmdEndPerTileExecutionQCOM
Constructors
| PerTileEndInfoQCOM |
Instances
data DispatchTileInfoQCOM Source #
VkDispatchTileInfoQCOM - Structure specifying dispatch tile info
Valid Usage (Implicit)
See Also
Constructors
| DispatchTileInfoQCOM |
Instances
newtype TileShadingRenderPassFlagBitsQCOM Source #
VkTileShadingRenderPassFlagBitsQCOM - Bitmask specifying flags for tile shading
Description
TILE_SHADING_RENDER_PASS_ENABLE_BIT_QCOMspecifies that the render pass has tile shading enabled.
TILE_SHADING_RENDER_PASS_PER_TILE_EXECUTION_BIT_QCOMspecifies that the secondary command buffer will be executed within a per-tile execution block.
See Also
Constructors
| TileShadingRenderPassFlagBitsQCOM Flags |
Bundled Patterns
| pattern TILE_SHADING_RENDER_PASS_ENABLE_BIT_QCOM :: TileShadingRenderPassFlagBitsQCOM | |
| pattern TILE_SHADING_RENDER_PASS_PER_TILE_EXECUTION_BIT_QCOM :: TileShadingRenderPassFlagBitsQCOM |
Instances
type QCOM_TILE_SHADING_SPEC_VERSION = 2 Source #
pattern QCOM_TILE_SHADING_SPEC_VERSION :: Integral a => a Source #
type QCOM_TILE_SHADING_EXTENSION_NAME = "VK_QCOM_tile_shading" Source #
pattern QCOM_TILE_SHADING_EXTENSION_NAME :: (Eq a, IsString a) => a Source #