| Safe Haskell | Safe-Inferred |
|---|---|
| Language | Haskell2010 |
Vulkan.Extensions.VK_EXT_device_generated_commands
Description
Name
VK_EXT_device_generated_commands - device extension
VK_EXT_device_generated_commands
- Name String
VK_EXT_device_generated_commands
- Extension Type
- Device extension
- Registered Extension Number
- 573
- Revision
- 1
- Ratification Status
- Ratified
- Extension and Version Dependencies
- VK_KHR_buffer_device_address and VK_KHR_maintenance5
- API Interactions
- Interacts with VK_EXT_shader_object
- Contact
- Extension Proposal
- VK_EXT_device_generated_commands
Other Extension Metadata
- Last Modified Date
- 2024-02-23
- Interactions and External Dependencies
- This extension requires Vulkan 1.1
- This extension requires
VK_EXT_buffer_device_addressorVK_KHR_buffer_device_addressor Vulkan 1.2 for the ability to bind vertex and index buffers on the device. - This extension requires
VK_KHR_maintenance5for the ability to use VkPipelineCreateFlags2KHR. - This extension interacts with
VK_NV_mesh_shader. If the latter extension is not supported, remove the command tokens to initiate NV mesh tasks drawing in this extension. - This extension interacts with
VK_EXT_mesh_shader. If the latter extension is not supported, remove the command tokens to initiate EXT mesh tasks drawing in this extension. - This extension interacts with
VK_KHR_ray_tracing_pipeline. If the latter extension is not supported, remove the command tokens to initiate ray tracing in this extension. - This extension interacts with
VK_EXT_shader_object. If the latter extension is not supported, remove references to shader objects in this extension.
- Contributors
- Mike Blumenkrantz, VALVE
- Hans-Kristian Arntzen, VALVE
- Jan-Harald Fredriksen, ARM
- Spencer Fricke, LunarG
- Ricardo Garcia, Igalia
- Tobias Hector, AMD
- Baldur Karlsson, VALVE
- Christoph Kubisch, NVIDIA
- Lionel Landwerlin, INTEL
- Jon Leech, Khronos
- Ting Wei, ARM
- Ken Shanyi Zhang, AMD
- Faith Ekstrand, Collabora
- Vikram Kushwaha, NVIDIA
- Connor Abbott, VALVE
- Samuel Pitoiset, VALVE
Description
This extension allows the device to generate a number of commands for
command buffers. It provides a subset of functionality from both
VK_NV_device_generated_commands and
VK_NV_device_generated_commands_compute as well as some new features.
When rendering a large number of objects, the device can be leveraged to implement a number of critical functions, like updating matrices, or implementing occlusion culling, frustum culling, front to back sorting, etc. Implementing those on the device does not require any special extension, since an application is free to define its own data structures, and just process them using shaders.
To render objects which have been processed on the device, Vulkan has
several ways to perform indirect rendering, from the most basic
cmdDrawIndirect with one indirect
draw to
cmdDrawIndirectCount
which supports multiple indirect draws batched together, with a way to
determine number of draws at device execution time.
However, if rendering state needs to change between the indirect draws, then unextended Vulkan forces the application to speculatively record a prohibitive number of redundant indirect commands covering all possible state combinations - which could end up processing nothing after culling - or read back the processed stream and issue graphics command from the host. For very large scenes, the synchronization overhead and cost to generate the command buffer can become the bottleneck. This extension allows an application to generate a device side stream of state changes and commands, and convert it efficiently into a command buffer without having to read it back to the host.
Furthermore, it allows incremental changes to such command buffers by manipulating only partial sections of a command stream — for example pipeline and shader object bindings. Unextended Vulkan requires re-creation of entire command buffers in such a scenario, or updates synchronized on the host.
The intended usage for this extension is for the application to:
- create
Bufferobjects and retrieve physical addresses from them viagetBufferDeviceAddress - create a
IndirectExecutionSetEXTfor the ability to change shaders on the device. - create a
IndirectCommandsLayoutEXT, which lists theIndirectCommandsTokenTypeEXTit wants to dynamically execute as an atomic command sequence. This step likely involves some internal device code compilation, since the intent is for the GPU to generate the command buffer based on the layout. - fill the input stream buffers with the data for each of the inputs it needs. Each input is an array that will be filled with token-dependent data.
- set up a preprocess
Bufferthat uses memory according to the information retrieved viagetGeneratedCommandsMemoryRequirementsEXT. - optionally preprocess the generated content using
cmdPreprocessGeneratedCommandsEXT, for example on an asynchronous compute queue, or for the purpose of re-using the data in multiple executions. - call
cmdExecuteGeneratedCommandsEXTto create and execute the actual device commands for all sequences based on the inputs provided.
For each draw in a sequence, the following can be specified:
- a number of vertex buffer bindings
- a different index buffer, with an optional dynamic offset and index type
- a number of different push constants
- updates to bound shader stages
For each dispatch in a sequence, the following can be specified:
- a number of different push constants
- updates to bound shader stages
For each trace rays in a sequence, the following can be specified:
- a number of different push constants
- updates to bound shader stages
While the GPU can be faster than a CPU to generate the commands, it will not happen asynchronously to the device, therefore the primary use case is generating “less” total work (occlusion culling, classification to use specialized shaders, etc.).
New Object Types
New Commands
cmdPreprocessGeneratedCommandsEXTcreateIndirectCommandsLayoutEXTcreateIndirectExecutionSetEXTdestroyIndirectCommandsLayoutEXTdestroyIndirectExecutionSetEXTgetGeneratedCommandsMemoryRequirementsEXTupdateIndirectExecutionSetPipelineEXTupdateIndirectExecutionSetShaderEXT
New Structures
BindVertexBufferIndirectCommandEXTDrawIndirectCountIndirectCommandEXTGeneratedCommandsInfoEXTGeneratedCommandsMemoryRequirementsInfoEXTIndirectCommandsExecutionSetTokenEXTIndirectCommandsIndexBufferTokenEXTIndirectCommandsLayoutCreateInfoEXTIndirectCommandsLayoutTokenEXTIndirectCommandsPushConstantTokenEXTIndirectCommandsVertexBufferTokenEXTIndirectExecutionSetCreateInfoEXTIndirectExecutionSetPipelineInfoEXTIndirectExecutionSetShaderInfoEXTIndirectExecutionSetShaderLayoutInfoEXTWriteIndirectExecutionSetPipelineEXTExtending
GeneratedCommandsInfoEXT,GeneratedCommandsMemoryRequirementsInfoEXT:Extending
PhysicalDeviceFeatures2,DeviceCreateInfo:Extending
PhysicalDeviceProperties2:
If VK_EXT_shader_object is supported:
New Unions
New Enums
New Bitmasks
New Enum Constants
EXT_DEVICE_GENERATED_COMMANDS_SPEC_VERSIONExtending
AccessFlagBits:Extending
BufferUsageFlagBits2KHR:Extending
ObjectType:Extending
PipelineCreateFlagBits2KHR:Extending
PipelineStageFlagBits:Extending
ShaderCreateFlagBitsEXT:Extending
StructureType:STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_EXTSTRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_EXTSTRUCTURE_TYPE_GENERATED_COMMANDS_PIPELINE_INFO_EXTSTRUCTURE_TYPE_GENERATED_COMMANDS_SHADER_INFO_EXTSTRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_EXTSTRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_EXTSTRUCTURE_TYPE_INDIRECT_EXECUTION_SET_CREATE_INFO_EXTSTRUCTURE_TYPE_INDIRECT_EXECUTION_SET_PIPELINE_INFO_EXTSTRUCTURE_TYPE_INDIRECT_EXECUTION_SET_SHADER_INFO_EXTSTRUCTURE_TYPE_INDIRECT_EXECUTION_SET_SHADER_LAYOUT_INFO_EXTSTRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_EXTSTRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_EXTSTRUCTURE_TYPE_WRITE_INDIRECT_EXECUTION_SET_PIPELINE_EXTSTRUCTURE_TYPE_WRITE_INDIRECT_EXECUTION_SET_SHADER_EXT
Example Code
TODO
Version History
Revision 1, 2024-02-23 (Mike Blumenkrantz)
- Initial version
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
- cmdExecuteGeneratedCommandsEXT :: forall a io. (Extendss GeneratedCommandsInfoEXT a, PokeChain a, MonadIO io) => CommandBuffer -> ("isPreprocessed" ::: Bool) -> GeneratedCommandsInfoEXT a -> io ()
- cmdPreprocessGeneratedCommandsEXT :: forall a io. (Extendss GeneratedCommandsInfoEXT a, PokeChain a, MonadIO io) => CommandBuffer -> GeneratedCommandsInfoEXT a -> ("stateCommandBuffer" ::: CommandBuffer) -> io ()
- getGeneratedCommandsMemoryRequirementsEXT :: forall a b io. (Extendss GeneratedCommandsMemoryRequirementsInfoEXT a, PokeChain a, Extendss MemoryRequirements2 b, PokeChain b, PeekChain b, MonadIO io) => Device -> GeneratedCommandsMemoryRequirementsInfoEXT a -> io (MemoryRequirements2 b)
- createIndirectCommandsLayoutEXT :: forall a io. (Extendss IndirectCommandsLayoutCreateInfoEXT a, PokeChain a, MonadIO io) => Device -> IndirectCommandsLayoutCreateInfoEXT a -> ("allocator" ::: Maybe AllocationCallbacks) -> io IndirectCommandsLayoutEXT
- withIndirectCommandsLayoutEXT :: forall a io r. (Extendss IndirectCommandsLayoutCreateInfoEXT a, PokeChain a, MonadIO io) => Device -> IndirectCommandsLayoutCreateInfoEXT a -> Maybe AllocationCallbacks -> (io IndirectCommandsLayoutEXT -> (IndirectCommandsLayoutEXT -> io ()) -> r) -> r
- destroyIndirectCommandsLayoutEXT :: forall io. MonadIO io => Device -> IndirectCommandsLayoutEXT -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
- createIndirectExecutionSetEXT :: forall io. MonadIO io => Device -> IndirectExecutionSetCreateInfoEXT -> ("allocator" ::: Maybe AllocationCallbacks) -> io IndirectExecutionSetEXT
- withIndirectExecutionSetEXT :: forall io r. MonadIO io => Device -> IndirectExecutionSetCreateInfoEXT -> Maybe AllocationCallbacks -> (io IndirectExecutionSetEXT -> (IndirectExecutionSetEXT -> io ()) -> r) -> r
- destroyIndirectExecutionSetEXT :: forall io. MonadIO io => Device -> IndirectExecutionSetEXT -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
- updateIndirectExecutionSetPipelineEXT :: forall io. MonadIO io => Device -> IndirectExecutionSetEXT -> ("executionSetWrites" ::: Vector WriteIndirectExecutionSetPipelineEXT) -> io ()
- updateIndirectExecutionSetShaderEXT :: forall io. MonadIO io => Device -> IndirectExecutionSetEXT -> ("executionSetWrites" ::: Vector WriteIndirectExecutionSetShaderEXT) -> io ()
- pattern PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_EXT :: PipelineStageFlagBits
- pattern ACCESS_COMMAND_PREPROCESS_READ_BIT_EXT :: AccessFlagBits
- pattern ACCESS_COMMAND_PREPROCESS_WRITE_BIT_EXT :: AccessFlagBits
- data PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT = PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT {}
- data PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT = PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT {
- maxIndirectPipelineCount :: Word32
- maxIndirectShaderObjectCount :: Word32
- maxIndirectSequenceCount :: Word32
- maxIndirectCommandsTokenCount :: Word32
- maxIndirectCommandsTokenOffset :: Word32
- maxIndirectCommandsIndirectStride :: Word32
- supportedIndirectCommandsInputModes :: IndirectCommandsInputModeFlagsEXT
- supportedIndirectCommandsShaderStages :: ShaderStageFlags
- supportedIndirectCommandsShaderStagesPipelineBinding :: ShaderStageFlags
- supportedIndirectCommandsShaderStagesShaderBinding :: ShaderStageFlags
- deviceGeneratedCommandsTransformFeedback :: Bool
- deviceGeneratedCommandsMultiDrawIndirectCount :: Bool
- data GeneratedCommandsPipelineInfoEXT = GeneratedCommandsPipelineInfoEXT {}
- data GeneratedCommandsShaderInfoEXT = GeneratedCommandsShaderInfoEXT {}
- data GeneratedCommandsMemoryRequirementsInfoEXT (es :: [Type]) = GeneratedCommandsMemoryRequirementsInfoEXT {}
- data IndirectExecutionSetPipelineInfoEXT = IndirectExecutionSetPipelineInfoEXT {}
- data IndirectExecutionSetShaderLayoutInfoEXT = IndirectExecutionSetShaderLayoutInfoEXT {}
- data IndirectExecutionSetShaderInfoEXT = IndirectExecutionSetShaderInfoEXT {}
- data IndirectExecutionSetCreateInfoEXT = IndirectExecutionSetCreateInfoEXT {}
- data GeneratedCommandsInfoEXT (es :: [Type]) = GeneratedCommandsInfoEXT {
- next :: Chain es
- shaderStages :: ShaderStageFlags
- indirectExecutionSet :: IndirectExecutionSetEXT
- indirectCommandsLayout :: IndirectCommandsLayoutEXT
- indirectAddress :: DeviceAddress
- indirectAddressSize :: DeviceSize
- preprocessAddress :: DeviceAddress
- preprocessSize :: DeviceSize
- maxSequenceCount :: Word32
- sequenceCountAddress :: DeviceAddress
- maxDrawCount :: Word32
- data WriteIndirectExecutionSetPipelineEXT = WriteIndirectExecutionSetPipelineEXT {}
- data WriteIndirectExecutionSetShaderEXT = WriteIndirectExecutionSetShaderEXT {}
- data IndirectCommandsLayoutCreateInfoEXT (es :: [Type]) = IndirectCommandsLayoutCreateInfoEXT {}
- data IndirectCommandsLayoutTokenEXT = IndirectCommandsLayoutTokenEXT {}
- data DrawIndirectCountIndirectCommandEXT = DrawIndirectCountIndirectCommandEXT {}
- data IndirectCommandsVertexBufferTokenEXT = IndirectCommandsVertexBufferTokenEXT {}
- data BindVertexBufferIndirectCommandEXT = BindVertexBufferIndirectCommandEXT {
- bufferAddress :: DeviceAddress
- size :: Word32
- stride :: Word32
- data IndirectCommandsIndexBufferTokenEXT = IndirectCommandsIndexBufferTokenEXT {}
- data BindIndexBufferIndirectCommandEXT = BindIndexBufferIndirectCommandEXT {}
- data IndirectCommandsPushConstantTokenEXT = IndirectCommandsPushConstantTokenEXT {}
- data IndirectCommandsExecutionSetTokenEXT = IndirectCommandsExecutionSetTokenEXT {}
- data IndirectExecutionSetInfoEXT
- data IndirectCommandsTokenDataEXT
- type IndirectCommandsLayoutUsageFlagsEXT = IndirectCommandsLayoutUsageFlagBitsEXT
- newtype IndirectCommandsLayoutUsageFlagBitsEXT where
- newtype IndirectExecutionSetInfoTypeEXT where
- type IndirectCommandsInputModeFlagsEXT = IndirectCommandsInputModeFlagBitsEXT
- newtype IndirectCommandsInputModeFlagBitsEXT where
- newtype IndirectCommandsTokenTypeEXT where
- IndirectCommandsTokenTypeEXT Int32
- pattern INDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT :: IndirectCommandsTokenTypeEXT
- pattern INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_EXT :: IndirectCommandsTokenTypeEXT
- pattern INDIRECT_COMMANDS_TOKEN_TYPE_SEQUENCE_INDEX_EXT :: IndirectCommandsTokenTypeEXT
- pattern INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_EXT :: IndirectCommandsTokenTypeEXT
- pattern INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_EXT :: IndirectCommandsTokenTypeEXT
- pattern INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_EXT :: IndirectCommandsTokenTypeEXT
- pattern INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_EXT :: IndirectCommandsTokenTypeEXT
- pattern INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_COUNT_EXT :: IndirectCommandsTokenTypeEXT
- pattern INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_COUNT_EXT :: IndirectCommandsTokenTypeEXT
- pattern INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_EXT :: IndirectCommandsTokenTypeEXT
- pattern INDIRECT_COMMANDS_TOKEN_TYPE_TRACE_RAYS2_EXT :: IndirectCommandsTokenTypeEXT
- pattern INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_COUNT_EXT :: IndirectCommandsTokenTypeEXT
- pattern INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_EXT :: IndirectCommandsTokenTypeEXT
- pattern INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_COUNT_NV_EXT :: IndirectCommandsTokenTypeEXT
- pattern INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_NV_EXT :: IndirectCommandsTokenTypeEXT
- type EXT_DEVICE_GENERATED_COMMANDS_SPEC_VERSION = 1
- pattern EXT_DEVICE_GENERATED_COMMANDS_SPEC_VERSION :: forall a. Integral a => a
- type EXT_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME = "VK_EXT_device_generated_commands"
- pattern EXT_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a
- newtype IndirectCommandsLayoutEXT = IndirectCommandsLayoutEXT Word64
- newtype IndirectExecutionSetEXT = IndirectExecutionSetEXT Word64
- newtype ShaderEXT = ShaderEXT Word64
- newtype BufferUsageFlagBits2KHR where
- BufferUsageFlagBits2KHR Flags64
- pattern BUFFER_USAGE_2_TRANSFER_SRC_BIT_KHR :: BufferUsageFlagBits2KHR
- pattern BUFFER_USAGE_2_TRANSFER_DST_BIT_KHR :: BufferUsageFlagBits2KHR
- pattern BUFFER_USAGE_2_UNIFORM_TEXEL_BUFFER_BIT_KHR :: BufferUsageFlagBits2KHR
- pattern BUFFER_USAGE_2_STORAGE_TEXEL_BUFFER_BIT_KHR :: BufferUsageFlagBits2KHR
- pattern BUFFER_USAGE_2_UNIFORM_BUFFER_BIT_KHR :: BufferUsageFlagBits2KHR
- pattern BUFFER_USAGE_2_STORAGE_BUFFER_BIT_KHR :: BufferUsageFlagBits2KHR
- pattern BUFFER_USAGE_2_INDEX_BUFFER_BIT_KHR :: BufferUsageFlagBits2KHR
- pattern BUFFER_USAGE_2_VERTEX_BUFFER_BIT_KHR :: BufferUsageFlagBits2KHR
- pattern BUFFER_USAGE_2_INDIRECT_BUFFER_BIT_KHR :: BufferUsageFlagBits2KHR
- pattern BUFFER_USAGE_2_PREPROCESS_BUFFER_BIT_EXT :: BufferUsageFlagBits2KHR
- pattern BUFFER_USAGE_2_MICROMAP_STORAGE_BIT_EXT :: BufferUsageFlagBits2KHR
- pattern BUFFER_USAGE_2_MICROMAP_BUILD_INPUT_READ_ONLY_BIT_EXT :: BufferUsageFlagBits2KHR
- pattern BUFFER_USAGE_2_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT :: BufferUsageFlagBits2KHR
- pattern BUFFER_USAGE_2_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT :: BufferUsageFlagBits2KHR
- pattern BUFFER_USAGE_2_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT :: BufferUsageFlagBits2KHR
- pattern BUFFER_USAGE_2_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR :: BufferUsageFlagBits2KHR
- pattern BUFFER_USAGE_2_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR :: BufferUsageFlagBits2KHR
- pattern BUFFER_USAGE_2_SHADER_DEVICE_ADDRESS_BIT_KHR :: BufferUsageFlagBits2KHR
- pattern BUFFER_USAGE_2_VIDEO_ENCODE_SRC_BIT_KHR :: BufferUsageFlagBits2KHR
- pattern BUFFER_USAGE_2_VIDEO_ENCODE_DST_BIT_KHR :: BufferUsageFlagBits2KHR
- pattern BUFFER_USAGE_2_VIDEO_DECODE_DST_BIT_KHR :: BufferUsageFlagBits2KHR
- pattern BUFFER_USAGE_2_VIDEO_DECODE_SRC_BIT_KHR :: BufferUsageFlagBits2KHR
- pattern BUFFER_USAGE_2_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT :: BufferUsageFlagBits2KHR
- pattern BUFFER_USAGE_2_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT :: BufferUsageFlagBits2KHR
- pattern BUFFER_USAGE_2_SHADER_BINDING_TABLE_BIT_KHR :: BufferUsageFlagBits2KHR
- pattern BUFFER_USAGE_2_CONDITIONAL_RENDERING_BIT_EXT :: BufferUsageFlagBits2KHR
- pattern BUFFER_USAGE_2_EXECUTION_GRAPH_SCRATCH_BIT_AMDX :: BufferUsageFlagBits2KHR
- type BufferUsageFlags2KHR = BufferUsageFlagBits2KHR
- newtype PipelineCreateFlagBits2KHR where
- PipelineCreateFlagBits2KHR Flags64
- pattern PIPELINE_CREATE_2_DISABLE_OPTIMIZATION_BIT_KHR :: PipelineCreateFlagBits2KHR
- pattern PIPELINE_CREATE_2_ALLOW_DERIVATIVES_BIT_KHR :: PipelineCreateFlagBits2KHR
- pattern PIPELINE_CREATE_2_DERIVATIVE_BIT_KHR :: PipelineCreateFlagBits2KHR
- pattern PIPELINE_CREATE_2_INDIRECT_BINDABLE_BIT_EXT :: PipelineCreateFlagBits2KHR
- pattern PIPELINE_CREATE_2_CAPTURE_DATA_BIT_KHR :: PipelineCreateFlagBits2KHR
- pattern PIPELINE_CREATE_2_DESCRIPTOR_BUFFER_BIT_EXT :: PipelineCreateFlagBits2KHR
- pattern PIPELINE_CREATE_2_RAY_TRACING_DISPLACEMENT_MICROMAP_BIT_NV :: PipelineCreateFlagBits2KHR
- pattern PIPELINE_CREATE_2_PROTECTED_ACCESS_ONLY_BIT_EXT :: PipelineCreateFlagBits2KHR
- pattern PIPELINE_CREATE_2_NO_PROTECTED_ACCESS_BIT_EXT :: PipelineCreateFlagBits2KHR
- pattern PIPELINE_CREATE_2_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT :: PipelineCreateFlagBits2KHR
- pattern PIPELINE_CREATE_2_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT :: PipelineCreateFlagBits2KHR
- pattern PIPELINE_CREATE_2_RAY_TRACING_OPACITY_MICROMAP_BIT_EXT :: PipelineCreateFlagBits2KHR
- pattern PIPELINE_CREATE_2_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT :: PipelineCreateFlagBits2KHR
- pattern PIPELINE_CREATE_2_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR :: PipelineCreateFlagBits2KHR
- pattern PIPELINE_CREATE_2_RAY_TRACING_ALLOW_MOTION_BIT_NV :: PipelineCreateFlagBits2KHR
- pattern PIPELINE_CREATE_2_INDIRECT_BINDABLE_BIT_NV :: PipelineCreateFlagBits2KHR
- pattern PIPELINE_CREATE_2_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR :: PipelineCreateFlagBits2KHR
- pattern PIPELINE_CREATE_2_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR :: PipelineCreateFlagBits2KHR
- pattern PIPELINE_CREATE_2_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR :: PipelineCreateFlagBits2KHR
- pattern PIPELINE_CREATE_2_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR :: PipelineCreateFlagBits2KHR
- pattern PIPELINE_CREATE_2_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR :: PipelineCreateFlagBits2KHR
- pattern PIPELINE_CREATE_2_RAY_TRACING_SKIP_AABBS_BIT_KHR :: PipelineCreateFlagBits2KHR
- pattern PIPELINE_CREATE_2_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR :: PipelineCreateFlagBits2KHR
- pattern PIPELINE_CREATE_2_LIBRARY_BIT_KHR :: PipelineCreateFlagBits2KHR
- pattern PIPELINE_CREATE_2_RETAIN_LINK_TIME_OPTIMIZATION_INFO_BIT_EXT :: PipelineCreateFlagBits2KHR
- pattern PIPELINE_CREATE_2_LINK_TIME_OPTIMIZATION_BIT_EXT :: PipelineCreateFlagBits2KHR
- pattern PIPELINE_CREATE_2_EARLY_RETURN_ON_FAILURE_BIT_KHR :: PipelineCreateFlagBits2KHR
- pattern PIPELINE_CREATE_2_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_KHR :: PipelineCreateFlagBits2KHR
- pattern PIPELINE_CREATE_2_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR :: PipelineCreateFlagBits2KHR
- pattern PIPELINE_CREATE_2_CAPTURE_STATISTICS_BIT_KHR :: PipelineCreateFlagBits2KHR
- pattern PIPELINE_CREATE_2_DEFER_COMPILE_BIT_NV :: PipelineCreateFlagBits2KHR
- pattern PIPELINE_CREATE_2_DISPATCH_BASE_BIT_KHR :: PipelineCreateFlagBits2KHR
- pattern PIPELINE_CREATE_2_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHR :: PipelineCreateFlagBits2KHR
- pattern PIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT :: PipelineCreateFlagBits2KHR
- pattern PIPELINE_CREATE_2_EXECUTION_GRAPH_BIT_AMDX :: PipelineCreateFlagBits2KHR
- type PipelineCreateFlags2KHR = PipelineCreateFlagBits2KHR
- newtype ShaderCreateFlagBitsEXT where
- ShaderCreateFlagBitsEXT Flags
- pattern SHADER_CREATE_LINK_STAGE_BIT_EXT :: ShaderCreateFlagBitsEXT
- pattern SHADER_CREATE_INDIRECT_BINDABLE_BIT_EXT :: ShaderCreateFlagBitsEXT
- pattern SHADER_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT :: ShaderCreateFlagBitsEXT
- pattern SHADER_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_EXT :: ShaderCreateFlagBitsEXT
- pattern SHADER_CREATE_DISPATCH_BASE_BIT_EXT :: ShaderCreateFlagBitsEXT
- pattern SHADER_CREATE_NO_TASK_SHADER_BIT_EXT :: ShaderCreateFlagBitsEXT
- pattern SHADER_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT :: ShaderCreateFlagBitsEXT
- pattern SHADER_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT :: ShaderCreateFlagBitsEXT
- type ShaderCreateFlagsEXT = ShaderCreateFlagBitsEXT
Documentation
cmdExecuteGeneratedCommandsEXT Source #
Arguments
| :: forall a io. (Extendss GeneratedCommandsInfoEXT a, PokeChain a, MonadIO io) | |
| => CommandBuffer |
|
| -> ("isPreprocessed" ::: Bool) |
|
| -> GeneratedCommandsInfoEXT a |
|
| -> io () |
vkCmdExecuteGeneratedCommandsEXT - Generate and execute commands on the device
Description
If the INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_EXT flag
was used to create the
GeneratedCommandsInfoEXT::indirectCommandsLayout then the execution
of sequences through this command may use implementation-defined
ordering which is not guaranteed to be coherent using the same input
data. It does not affect the order of token processing within a
sequence. This is the implied ordering with
INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_EXT.
After a call to cmdExecuteGeneratedCommandsEXT, command buffer state
will become undefined according to the tokens executed. This table
specifies the relationship between tokens used and state invalidation.
| Common Tokens | __States Invalidated__ |
|---|---|
INDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT
| Bound shaders and pipelines |
INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_EXT
| Push constant data |
INDIRECT_COMMANDS_TOKEN_TYPE_SEQUENCE_INDEX_EXT
| Push constant data |
INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_EXT | Index buffer |
INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_EXT | Vertex buffer |
Indirect Execution State Invalidation
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
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 - For each set n
that is statically used by
a bound shader,
a descriptor set must have been bound to n at the same pipeline
bind point, with a
PipelineLayoutthat is compatible for set n, with thePipelineLayoutused to create the currentPipelineor theDescriptorSetLayoutarray used to create the currentShaderEXT, as described in ??? - For each push
constant that is statically used by
a bound shader,
a push constant value must have been set for the same pipeline
bind point, with a
PipelineLayoutthat is compatible for push constants, with thePipelineLayoutused to create the currentPipelineor theDescriptorSetLayoutarray used to create the currentShaderEXT, as described in ??? - 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 the
maintenance4
feature is not enabled, then for each push constant that is
statically used by
a bound shader,
a push constant value must have been set for the same pipeline
bind point, with a
PipelineLayoutthat is compatible for push constants, with thePipelineLayoutused to create the currentPipelineor theDescriptorSetLayoutandPushConstantRangearrays used to create the currentShaderEXT, as described in ??? - Descriptors in
each bound descriptor set, specified via
cmdBindDescriptorSets, must be valid as described by descriptor validity if they are statically used by thePipelinebound to the pipeline bind point used by this command and the boundPipelinewas not created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT - 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 the
Pipelineobject bound to the pipeline bind point used by this command or anyShaderEXTbound to a stage corresponding to the pipeline bind point used by this command accesses aSamplerobject that uses unnormalized coordinates, that sampler must not be used to sample from anyImagewith aImageViewof 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
Pipelineobject bound to the pipeline bind point used by this command or anyShaderEXTbound to a stage corresponding to the pipeline bind point used by this command accesses aSamplerobject 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
Pipelineobject bound to the pipeline bind point used by this command or anyShaderEXTbound to a stage corresponding to the pipeline bind point used by this command accesses aSamplerobject 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
shaderObject
feature is enabled, either a valid pipeline must be bound to the
pipeline bind point used by this command, or a valid combination of
valid and
NULL_HANDLEshader objects must be bound to every supported shader stage corresponding to the pipeline bind point used by this command - 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_ACCESS_EXTorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXTforuniformBuffers, 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_ACCESS_EXTorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXTforstorageBuffers, 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 bound shader
accesses a
SamplerorImageViewobject that enables sampler Y′CBCR conversion, that object must only be used withOpImageSample*orOpImageSparseSample*instructions - If
a bound shader
accesses a
SamplerorImageViewobject that enables sampler Y′CBCR conversion, that object must not use theConstOffsetandOffsetoperands - If a
ImageViewis accessed as a result of this command, then the image view’sviewTypemust match theDimoperand of theOpTypeImageas described in ??? - If a
ImageViewis accessed as a result of this command, then the numeric type of the image view’sformatand theSampledTypeoperand of theOpTypeImagemust match - If a
ImageViewcreated with a format other thanFORMAT_A8_UNORM_KHRis 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_UNORM_KHRis 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
OpImageWeightedSampleQCOMis 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
OpImageWeightedSampleQCOMuses 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
OpImageWeightedSampleQCOM,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
OpImageWeightedSampleQCOM,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, the image subresource identified by that descriptor must be in the image layout identified when the descriptor was written - The current
render pass must be
compatible
with the
renderPassmember of theGraphicsPipelineCreateInfostructure specified when creating thePipelinebound toPIPELINE_BIND_POINT_GRAPHICS - The subpass
index of the current render pass must be equal to the
subpassmember of theGraphicsPipelineCreateInfostructure specified when creating thePipelinebound toPIPELINE_BIND_POINT_GRAPHICS - If any shader statically accesses an input attachment, a valid descriptor must be bound to the pipeline via a descriptor set
- If any
shader executed by this pipeline accesses an
OpTypeImagevariable with aDimoperand ofSubpassData, it must be decorated with anInputAttachmentIndexthat corresponds to a valid input attachment in the current subpass - Input attachment
views accessed in a subpass must be created with the same
Formatas the corresponding subpass definition, and be created with aImageViewthat is compatible with the attachment referenced by the subpass'pInputAttachments[InputAttachmentIndex] in the boundFramebufferas specified by Fragment Input Attachment Compatibility -
Input attachment views accessed in a dynamic render pass with a
InputAttachmentIndexreferenced byRenderingInputAttachmentIndexInfoKHR, or noInputAttachmentIndexifRenderingInputAttachmentIndexInfoKHR:pDepthInputAttachmentIndexorRenderingInputAttachmentIndexInfoKHR:pStencilInputAttachmentIndexareNULL, must be created with aImageViewthat is compatible with the corresponding color, depth, or stencil attachment inRenderingInfo -
Input attachment views accessed in a dynamic render pass via a
shader object must have an
InputAttachmentIndexif bothRenderingInputAttachmentIndexInfoKHR:pDepthInputAttachmentIndexandRenderingInputAttachmentIndexInfoKHR:pStencilInputAttachmentIndexare non-NULL -
If an input attachment view accessed in a dynamic render pass via a
shader object has an
InputAttachmentIndex, theInputAttachmentIndexmust match an index inRenderingInputAttachmentIndexInfoKHR - Memory backing image subresources used as attachments in the current render pass must not be written in any way other than as an attachment by this command
If a color attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, it is not in the
IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXTimage layout, and either:- the
PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXTis set on the bound pipeline or the last call to
cmdSetAttachmentFeedbackLoopEnableEXTincludedIMAGE_ASPECT_COLOR_BITand- there is no bound graphics pipeline or
- the bound graphics pipeline was created with
DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT
it must not be accessed in any way other than as an attachment by this command
- the
If a depth attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, it is not in the
IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXTimage layout, and either:- the
PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXTis set on the bound pipeline or the last call to
cmdSetAttachmentFeedbackLoopEnableEXTincludedIMAGE_ASPECT_DEPTH_BITand- there is no bound graphics pipeline or
- the bound graphics pipeline was created with
DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT
it must not be accessed in any way other than as an attachment by this command
- the
If a stencil attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, it is not in the
IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXTimage layout, and either:- the
PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXTis set on the bound pipeline or the last call to
cmdSetAttachmentFeedbackLoopEnableEXTincludedIMAGE_ASPECT_STENCIL_BITand- there is no bound graphics pipeline or
- the bound graphics pipeline was created with
DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT
it must not be accessed in any way other than as an attachment by this command
- the
- If an attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, it must not be accessed in any way other than as an attachment, storage image, or sampled image by this command
- If any previously recorded command in the current subpass accessed an image subresource used as an attachment in this subpass in any way other than as an attachment, this command must not write to that image subresource as an attachment
- If the current render pass instance uses a depth/stencil attachment with a read-only layout for the depth aspect, depth writes must be disabled
- If the current
render pass instance uses a depth/stencil attachment with a
read-only layout for the stencil aspect, both front and back
writeMaskare not zero, and stencil test is enabled, all stencil ops must beSTENCIL_OP_KEEP - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORTdynamic state enabled thencmdSetViewportmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_SCISSORdynamic state enabled thencmdSetScissormust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_LINE_WIDTHdynamic state enabled thencmdSetLineWidthmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader
object is bound to any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetPolygonModeEXTin the current command buffer setpolygonModetoPOLYGON_MODE_LINE,cmdSetLineWidthmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader
object is bound to any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetPrimitiveTopologyin the current command buffer setprimitiveTopologyto any line topology,cmdSetLineWidthmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader
object that outputs line primitives is bound to the
SHADER_STAGE_TESSELLATION_EVALUATION_BITorSHADER_STAGE_GEOMETRY_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE,cmdSetLineWidthmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader
object is bound to any graphics stage or a graphics pipeline is
bound which was created with the
DYNAMIC_STATE_DEPTH_BIASdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofdepthBiasEnableisTRUE, thencmdSetDepthBoundsorcmdSetDepthBias2EXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_BLEND_CONSTANTSdynamic state enabled thencmdSetBlendConstantsmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader
object is bound to the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetColorBlendEnableEXTin the current command buffer set any element ofpColorBlendEnablestoTRUE, and the most recent call tocmdSetColorBlendEquationEXTin the current command buffer set the same element ofpColorBlendEquationsto aColorBlendEquationEXTstructure with anyBlendFactormember with a value ofBLEND_FACTOR_CONSTANT_COLOR,BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR,BLEND_FACTOR_CONSTANT_ALPHA, orBLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA,cmdSetBlendConstantsmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader
object is bound to any graphics stage or a graphics pipeline is
bound which was created with the
DYNAMIC_STATE_DEPTH_BOUNDSdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofdepthBoundsTestEnableisTRUE, thencmdSetDepthBoundsmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader
object is bound to any graphics stage or a graphics pipeline is
bound which was created with the
DYNAMIC_STATE_STENCIL_COMPARE_MASKdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofstencilTestEnableisTRUE, thencmdSetStencilCompareMaskmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader
object is bound to any graphics stage or a graphics pipeline is
bound which was created with the
DYNAMIC_STATE_STENCIL_WRITE_MASKdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofstencilTestEnableisTRUE, thencmdSetStencilWriteMaskmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader
object is bound to any graphics stage or a graphics pipeline is
bound which was created with the
DYNAMIC_STATE_STENCIL_REFERENCEdynamic state enabled, the current value of andrasterizerDiscardEnableisFALSE, the current value ofstencilTestEnableisTRUE, thencmdSetStencilReferencemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command -
If the draw is recorded in a render pass instance with multiview
enabled, the maximum instance index must be less than or equal to
PhysicalDeviceMultiviewProperties::maxMultiviewInstanceIndex -
If the bound graphics pipeline was created with
PipelineSampleLocationsStateCreateInfoEXT::sampleLocationsEnableset toTRUEand the current subpass has a depth/stencil attachment, then that attachment must have been created with theIMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXTbit set - If the
VK_EXT_sample_locationsextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetSampleLocationsEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_EXT_sample_locationsextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_SAMPLE_LOCATIONS_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofsampleLocationsEnableisTRUE, thencmdSetSampleLocationsEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader
object is bound to any graphics stage or a graphics pipeline is
bound which was created with the
DYNAMIC_STATE_CULL_MODEdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetCullModemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader
object is bound to any graphics stage or a graphics pipeline is
bound which was created with the
DYNAMIC_STATE_FRONT_FACEdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetFrontFacemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader
object is bound to any graphics stage or a graphics pipeline is
bound which was created with the
DYNAMIC_STATE_DEPTH_TEST_ENABLEdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE,cmdSetDepthTestEnablemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader
object is bound to any graphics stage or a graphics pipeline is
bound which was created with the
DYNAMIC_STATE_DEPTH_WRITE_ENABLEdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetDepthWriteEnablemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader
object is bound to any graphics stage or a graphics pipeline is
bound which was created with the
DYNAMIC_STATE_DEPTH_COMPARE_OPdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofdepthTestEnableisTRUE, thencmdSetDepthCompareOpmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
depthBounds
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLEdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetDepthBoundsTestEnablemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader
object is bound to any graphics stage or a graphics pipeline is
bound which was created with the
DYNAMIC_STATE_STENCIL_TEST_ENABLEdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetStencilTestEnablemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader
object is bound to any graphics stage or a graphics pipeline is
bound which was created with the
DYNAMIC_STATE_STENCIL_OPdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, the current value ofstencilTestEnableisTRUE, thencmdSetStencilOpmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a
shader object is bound to any graphics stage or a graphics pipeline
is bound which was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled, and the state is not inherited, thencmdSetViewportWithCountmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a
shader object is bound to any graphics stage or a graphics pipeline
is bound which was created with the
DYNAMIC_STATE_SCISSOR_WITH_COUNTdynamic state enabled, and the state is not inherited, thencmdSetScissorWithCountmust have been called and not subsequently invalidated in the current command buffer prior to this drawing - If a
shader object is bound to any graphics stage or a graphics pipeline
is bound which was created with both the
DYNAMIC_STATE_SCISSOR_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic states enabled, and the state is not inherited, then theviewportCountparameter ofcmdSetViewportWithCountmust match thescissorCountparameter ofcmdSetScissorWithCount - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_W_SCALING_NVdynamic state enabled, then the bound graphics pipeline must have been created withPipelineViewportWScalingStateCreateInfoNV::viewportCountgreater or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the
VK_NV_clip_space_w_scalingextension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_VIEWPORT_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_W_SCALING_NVdynamic state enabled, the current value ofviewportWScalingEnableisTRUE, thencmdSetViewportWScalingNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_NV_clip_space_w_scalingextension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_VIEWPORT_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_W_SCALING_NVdynamic state enabled, the current value ofviewportWScalingEnableisTRUE, then theviewportCountparameter in the last call tocmdSetViewportWScalingNVmust be greater than or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NVdynamic state enabled, then the bound graphics pipeline must have been created withPipelineViewportShadingRateImageStateCreateInfoNV::viewportCountgreater or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If
the
shadingRateImage
feature is enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NVand the current value ofrasterizerDiscardEnableisFALSE, thencmdSetCoarseSampleOrderNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If
the
shadingRateImage
feature is enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NVdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofshadingRateImageEnableisTRUE, thencmdSetViewportShadingRatePaletteNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
shadingRateImage
feature is enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NVdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofshadingRateImageEnableisTRUE, then theviewportCountparameter in the last call tocmdSetViewportShadingRatePaletteNVmust be greater than or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount -
If the bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled and aPipelineViewportSwizzleStateCreateInfoNVstructure chained fromPipelineViewportStateCreateInfo, then the bound graphics pipeline must have been created withPipelineViewportSwizzleStateCreateInfoNV::viewportCountgreater or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount -
If the bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled and aPipelineViewportExclusiveScissorStateCreateInfoNVstructure chained fromPipelineViewportStateCreateInfo, then the bound graphics pipeline must have been created withPipelineViewportExclusiveScissorStateCreateInfoNV::exclusiveScissorCountgreater or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the
exclusiveScissor
feature is enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_EXCLUSIVE_SCISSOR_ENABLE_NVdynamic state enabled, thencmdSetExclusiveScissorEnableNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
exclusiveScissor
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NVdynamic state enabled, and the most recent call tocmdSetExclusiveScissorEnableNVin the current command buffer set any element ofpExclusiveScissorEnablestoTRUE, thencmdSetExclusiveScissorNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader
object is bound to any graphics stage or a graphics pipeline is
bound which was created with the
DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLEdynamic state enabled, thencmdSetRasterizerDiscardEnablemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader
object is bound to any graphics stage or a graphics pipeline is
bound which was created with the
DYNAMIC_STATE_DEPTH_BIAS_ENABLEdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetDepthBiasEnablemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader
object is bound to the
SHADER_STAGE_FRAGMENT_BITor a graphics pipeline is bound which was created with theDYNAMIC_STATE_LOGIC_OP_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value oflogicOpEnableisTRUE, thencmdSetLogicOpEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command -
If the
primitiveFragmentShadingRateWithMultipleViewports
limit is not supported, the bound graphics pipeline was created with
the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled, and any of the shader stages of the bound graphics pipeline write to thePrimitiveShadingRateKHRbuilt-in, thencmdSetViewportWithCountmust have been called in the current command buffer prior to this drawing command, and theviewportCountparameter ofcmdSetViewportWithCountmust be1 -
If the
primitiveFragmentShadingRateWithMultipleViewports
limit is not supported, and any shader object bound to a graphics
stage writes to the
PrimitiveShadingRateKHRbuilt-in, thencmdSetViewportWithCountmust have been called in the current command buffer prior to this drawing command, and theviewportCountparameter ofcmdSetViewportWithCountmust be1 - If
rasterization is not disabled in the bound graphics pipeline, then
for each color attachment in the subpass, if the corresponding image
view’s
format features
do not contain
FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT, then theblendEnablemember of the corresponding element of thepAttachmentsmember ofpColorBlendStatemust beFALSE - If a shader
object is bound to the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, then for each color attachment in the render pass, if the corresponding image view’s format features do not containFORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT, then the corresponding member ofpColorBlendEnablesin the most recent call tocmdSetColorBlendEnableEXTin the current command buffer that affected that attachment index must have beenFALSE If rasterization is not disabled in the bound graphics pipeline, and none of the following is enabled:
- the
VK_AMD_mixed_attachment_samplesextension - the
VK_NV_framebuffer_mixed_samplesextension - the multisampledRenderToSingleSampled feature
then
rasterizationSamplesfor the bound graphics pipeline must be the same as the current subpass color and/or depth/stencil attachments- the
If a shader object is bound to any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and none of the following is enabled:- the
VK_AMD_mixed_attachment_samplesextension - the
VK_NV_framebuffer_mixed_samplesextension - the multisampledRenderToSingleSampled feature
then the most recent call to
cmdSetRasterizationSamplesEXTin the current command buffer must have setrasterizationSamplesto be the same as the number of samples for the current render pass color and/or depth/stencil attachments- the
- If a shader
object is bound to any graphics stage, the current render pass
instance must have been begun with
cmdBeginRendering - If the
current render pass instance was begun with
cmdBeginRendering, theimageViewmember ofpDepthAttachmentis notNULL_HANDLE, and thelayoutmember ofpDepthAttachmentisIMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the depth attachment - If the
current render pass instance was begun with
cmdBeginRendering, theimageViewmember ofpStencilAttachmentis notNULL_HANDLE, and thelayoutmember ofpStencilAttachmentisIMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment - If the
current render pass instance was begun with
cmdBeginRendering, theimageViewmember ofpDepthAttachmentis notNULL_HANDLE, and thelayoutmember ofpDepthAttachmentisIMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL, this command must not write any values to the depth attachment - If the
current render pass instance was begun with
cmdBeginRendering, theimageViewmember ofpStencilAttachmentis notNULL_HANDLE, and thelayoutmember ofpStencilAttachmentisIMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment - If the
current render pass instance was begun with
cmdBeginRendering, theimageViewmember ofpDepthAttachmentis notNULL_HANDLE, and thelayoutmember ofpDepthAttachmentisIMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, this command must not write any values to the depth attachment - If the
current render pass instance was begun with
cmdBeginRendering, theimageViewmember ofpStencilAttachmentis notNULL_HANDLE, and thelayoutmember ofpStencilAttachmentisIMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment - If the
current render pass instance was begun with
cmdBeginRendering, the bound graphics pipeline must have been created with aPipelineRenderingCreateInfo::viewMaskequal toRenderingInfo::viewMask -
If the
dynamicRenderingUnusedAttachments
feature is not enabled and the current render pass instance was
begun with
cmdBeginRendering, the bound graphics pipeline must have been created with aPipelineRenderingCreateInfo::colorAttachmentCountequal toRenderingInfo::colorAttachmentCount -
If the
dynamicRenderingUnusedAttachments
feature is not enabled, and the current render pass instance was
begun with
cmdBeginRenderingandRenderingInfo::colorAttachmentCountgreater than0, then each element of theRenderingInfo::pColorAttachmentsarray with animageViewnot equal toNULL_HANDLEmust have been created with aFormatequal to the corresponding element ofPipelineRenderingCreateInfo::pColorAttachmentFormatsused to create the bound graphics pipeline -
If the
dynamicRenderingUnusedAttachments
feature is not enabled, and the current render pass instance was
begun with
cmdBeginRenderingandRenderingInfo::colorAttachmentCountgreater than0, then each element of theRenderingInfo::pColorAttachmentsarray with animageViewequal toNULL_HANDLEmust have the corresponding element ofPipelineRenderingCreateInfo::pColorAttachmentFormatsused to create the bound pipeline equal toFORMAT_UNDEFINED -
If the
dynamicRenderingUnusedAttachments
feature is enabled, and the current render pass instance was begun
with
cmdBeginRenderingandRenderingInfo::colorAttachmentCountgreater than0, then each element of theRenderingInfo::pColorAttachmentsarray with animageViewnot equal toNULL_HANDLEmust have been created with aFormatequal to the corresponding element ofPipelineRenderingCreateInfo::pColorAttachmentFormatsused to create the bound graphics pipeline, or the corresponding element ofPipelineRenderingCreateInfo::pColorAttachmentFormats, if it exists, must beFORMAT_UNDEFINED -
If the current render pass instance was begun with
cmdBeginRendering, with aRenderingInfo::colorAttachmentCountequal to1, there is no shader object bound to any graphics stage, and a color attachment with a resolve mode ofRESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID, each element of theRenderingInfo::pColorAttachmentsarray with aresolveImageViewnot equal toNULL_HANDLEmust have been created with an image created with aExternalFormatANDROID::externalFormatvalue equal to theExternalFormatANDROID::externalFormatvalue used to create the bound graphics pipeline - If there is no
shader object bound to any graphics stage, the current render pass
instance was begun with
cmdBeginRenderingand aRenderingInfo::colorAttachmentCountequal to1, and a color attachment with a resolve mode ofRESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID, each element of theRenderingInfo::pColorAttachmentsarray with aimageViewnot equal toNULL_HANDLEmust have been created with an image created with aExternalFormatANDROID::externalFormatvalue equal to theExternalFormatANDROID::externalFormatvalue used to create the bound graphics pipeline - If the current
render pass instance was begun with
cmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zeroExternalFormatANDROID::externalFormatvalue and with theDYNAMIC_STATE_COLOR_BLEND_ENABLE_EXTdynamic state enabled, thencmdSetColorBlendEnableEXTmust have set the blend enable toFALSEprior to this drawing command - If the current
render pass instance was begun with
cmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zeroExternalFormatANDROID::externalFormatvalue and with theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTdynamic state enabled, thencmdSetRasterizationSamplesEXTmust have setrasterizationSamplestoSAMPLE_COUNT_1_BITprior to this drawing command - If there is a
shader object bound to any graphics stage, and the current render
pass includes a color attachment that uses the
RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROIDresolve mode, thencmdSetColorBlendEnableEXTmust have set blend enable toFALSEprior to this drawing command -
If there is a shader object bound to any graphics stage, and the
current render pass includes a color attachment that uses the
RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROIDresolve mode, thencmdSetRasterizationSamplesEXTmust have setrasterizationSamplestoSAMPLE_COUNT_1_BITprior to this drawing command - If the current
render pass instance was begun with
cmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zeroExternalFormatANDROID::externalFormatvalue and with theDYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHRdynamic state enabled, thencmdSetFragmentShadingRateKHRmust have setpFragmentSize->widthto1prior to this drawing command - If the current
render pass instance was begun with
cmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zeroExternalFormatANDROID::externalFormatvalue and with theDYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHRdynamic state enabled, thencmdSetFragmentShadingRateKHRmust have setpFragmentSize->heightto1prior to this drawing command - If there
is a shader object bound to any graphics stage, and the current
render pass includes a color attachment that uses the
RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROIDresolve mode, thencmdSetFragmentShadingRateKHRmust have setpFragmentSize->widthto1prior to this drawing command - If there
is a shader object bound to any graphics stage, and the current
render pass includes a color attachment that uses the
RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROIDresolve mode, thencmdSetFragmentShadingRateKHRmust have setpFragmentSize->heightto1prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXTdynamic state enabled thencmdSetColorWriteEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
colorWriteEnable
feature is enabled, and a shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetColorWriteEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXTdynamic state enabled then theattachmentCountparameter ofcmdSetColorWriteEnableEXTmust be greater than or equal to thePipelineColorBlendStateCreateInfo::attachmentCountof the bound graphics pipeline - If the
colorWriteEnable
feature is enabled, and a shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, then theattachmentCountparameter of most recent call tocmdSetColorWriteEnableEXTin the current command buffer must be greater than or equal to the number of color attachments in the current render pass instance - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_DISCARD_RECTANGLE_EXTdynamic state enabled thencmdSetDiscardRectangleEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command for each discard rectangle inPipelineDiscardRectangleStateCreateInfoEXT::discardRectangleCount - If the
VK_EXT_discard_rectanglesextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, thencmdSetDiscardRectangleEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_EXT_discard_rectanglesextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_DISCARD_RECTANGLE_MODE_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofdiscardRectangleEnableisTRUE, thencmdSetDiscardRectangleModeEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command -
If the
VK_EXT_discard_rectanglesextension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetDiscardRectangleEnableEXTin the current command buffer setdiscardRectangleEnabletoTRUE, thencmdSetDiscardRectangleEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command -
If the current render pass instance was begun with
cmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, andRenderingInfo::pDepthAttachment->imageViewwasNULL_HANDLE, the value ofPipelineRenderingCreateInfo::depthAttachmentFormatused to create the bound graphics pipeline must be equal toFORMAT_UNDEFINED -
If current render pass instance was begun with
cmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, andRenderingInfo::pDepthAttachment->imageViewwas notNULL_HANDLE, the value ofPipelineRenderingCreateInfo::depthAttachmentFormatused to create the bound graphics pipeline must be equal to theFormatused to createRenderingInfo::pDepthAttachment->imageView -
If the current render pass instance was begun with
cmdBeginRendering, the dynamicRenderingUnusedAttachments feature is enabled,RenderingInfo::pDepthAttachment->imageViewwas notNULL_HANDLE, and the value ofPipelineRenderingCreateInfo::depthAttachmentFormatused to create the bound graphics pipeline was not equal to theFormatused to createRenderingInfo::pDepthAttachment->imageView, the value of the format must beFORMAT_UNDEFINED -
If the current render pass instance was begun with
cmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, andRenderingInfo::pStencilAttachment->imageViewwasNULL_HANDLE, the value ofPipelineRenderingCreateInfo::stencilAttachmentFormatused to create the bound graphics pipeline must be equal toFORMAT_UNDEFINED -
If current render pass instance was begun with
cmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, andRenderingInfo::pStencilAttachment->imageViewwas notNULL_HANDLE, the value ofPipelineRenderingCreateInfo::stencilAttachmentFormatused to create the bound graphics pipeline must be equal to theFormatused to createRenderingInfo::pStencilAttachment->imageView -
If the current render pass instance was begun with
cmdBeginRendering, the dynamicRenderingUnusedAttachments feature is enabled,RenderingInfo::pStencilAttachment->imageViewwas notNULL_HANDLE, and the value ofPipelineRenderingCreateInfo::stencilAttachmentFormatused to create the bound graphics pipeline was not equal to theFormatused to createRenderingInfo::pStencilAttachment->imageView, the value of the format must beFORMAT_UNDEFINED - If the
current render pass instance was begun with
cmdBeginRenderingandRenderingFragmentShadingRateAttachmentInfoKHR::imageViewwas notNULL_HANDLE, the bound graphics pipeline must have been created withPIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR - If the
current render pass instance was begun with
cmdBeginRenderingandRenderingFragmentDensityMapAttachmentInfoEXT::imageViewwas notNULL_HANDLE, the bound graphics pipeline must have been created withPIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT -
If the bound pipeline was created with a
AttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, and the current render pass instance was begun withcmdBeginRenderingwith aRenderingInfo::colorAttachmentCountparameter greater than0, then each element of theRenderingInfo::pColorAttachmentsarray with aimageViewnot equal toNULL_HANDLEmust have been created with a sample count equal to the corresponding element of thepColorAttachmentSamplesmember ofAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVused to create the bound graphics pipeline - If
the current render pass instance was begun with
cmdBeginRendering, the bound pipeline was created with aAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, andRenderingInfo::pDepthAttachment->imageViewwas notNULL_HANDLE, the value of thedepthStencilAttachmentSamplesmember ofAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVused to create the bound graphics pipeline must be equal to the sample count used to createRenderingInfo::pDepthAttachment->imageView - If
the current render pass instance was begun with
cmdBeginRendering, the bound pipeline was created with aAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, andRenderingInfo::pStencilAttachment->imageViewwas notNULL_HANDLE, the value of thedepthStencilAttachmentSamplesmember ofAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVused to create the bound graphics pipeline must be equal to the sample count used to createRenderingInfo::pStencilAttachment->imageView -
If the bound pipeline was created without a
AttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, and the multisampledRenderToSingleSampled feature is not enabled, and the current render pass instance was begun withcmdBeginRenderingwith aRenderingInfo::colorAttachmentCountparameter greater than0, then each element of theRenderingInfo::pColorAttachmentsarray with aimageViewnot equal toNULL_HANDLEmust have been created with a sample count equal to the value ofrasterizationSamplesfor the bound graphics pipeline -
If the bound pipeline was created without a
AttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, and the multisampledRenderToSingleSampled feature is not enabled, andRenderingInfo::pDepthAttachment->imageViewwas notNULL_HANDLE, the value ofrasterizationSamplesfor the bound graphics pipeline must be equal to the sample count used to createRenderingInfo::pDepthAttachment->imageView -
If the bound pipeline was created without a
AttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, and the multisampledRenderToSingleSampled feature is not enabled, andRenderingInfo::pStencilAttachment->imageViewwas notNULL_HANDLE, the value ofrasterizationSamplesfor the bound graphics pipeline must be equal to the sample count used to createRenderingInfo::pStencilAttachment->imageView - If this command
has been called inside a render pass instance started with
cmdBeginRendering, and thepNextchain ofRenderingInfoincludes aMultisampledRenderToSingleSampledInfoEXTstructure withmultisampledRenderToSingleSampledEnableequal toTRUE, then the value ofrasterizationSamplesfor the bound graphics pipeline must be equal toMultisampledRenderToSingleSampledInfoEXT::rasterizationSamples - If the
current render pass instance was begun with
cmdBeginRendering, the bound pipeline must have been created with aGraphicsPipelineCreateInfo::renderPassequal toNULL_HANDLE - If
the current render pass instance was begun with
cmdBeginRendering, there is a graphics pipeline bound with a fragment shader that statically writes to a color attachment, the color write mask is not zero, color writes are enabled, and the corresponding element of theRenderingInfo::pColorAttachments->imageViewwas notNULL_HANDLE, then the corresponding element ofPipelineRenderingCreateInfo::pColorAttachmentFormatsused to create the pipeline must not beFORMAT_UNDEFINED - If
the current render pass instance was begun with
cmdBeginRendering, there is a graphics pipeline bound, depth test is enabled, depth write is enabled, and theRenderingInfo::pDepthAttachment->imageViewwas notNULL_HANDLE, then thePipelineRenderingCreateInfo::depthAttachmentFormatused to create the pipeline must not beFORMAT_UNDEFINED - If
the current render pass instance was begun with
cmdBeginRendering, there is a graphics pipeline bound, stencil test is enabled and theRenderingInfo::pStencilAttachment->imageViewwas notNULL_HANDLE, then thePipelineRenderingCreateInfo::stencilAttachmentFormatused to create the pipeline must not beFORMAT_UNDEFINED -
If the
primitivesGeneratedQueryWithRasterizerDiscard
feature is not enabled and the
QUERY_TYPE_PRIMITIVES_GENERATED_EXTquery is active, rasterization discard must not be enabled -
If the
primitivesGeneratedQueryWithNonZeroStreams
feature is not enabled and the
QUERY_TYPE_PRIMITIVES_GENERATED_EXTquery is active, the bound graphics pipeline must not have been created with a non-zero value inPipelineRasterizationStateStreamCreateInfoEXT::rasterizationStream - If a shader
object is bound to the
SHADER_STAGE_TESSELLATION_EVALUATION_BITstage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_TESSELLATION_DOMAIN_ORIGIN_EXTdynamic state enabled, thencmdSetTessellationDomainOriginEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
depthClamp
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetDepthClampEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader
object is bound to any graphics stage or a graphics pipeline is
bound which was created with the
DYNAMIC_STATE_POLYGON_MODE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetPolygonModeEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader
object is bound to any graphics stage or a graphics pipeline is
bound which was created with the
DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetRasterizationSamplesEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader
object is bound to any graphics stage or a graphics pipeline is
bound which was created with the
DYNAMIC_STATE_SAMPLE_MASK_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetSampleMaskEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command -
If the bound graphics pipeline state was created with the
DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXTdynamic state enabled, andalphaToCoverageEnablewasTRUEin the last call tocmdSetAlphaToCoverageEnableEXT, then the Fragment Output Interface must contain a variable for the alphaComponentword inLocation0 atIndex0 -
If a shader object is bound to any graphics stage, and the most
recent call to
cmdSetAlphaToCoverageEnableEXTin the current command buffer setalphaToCoverageEnabletoTRUE, then the Fragment Output Interface must contain a variable for the alphaComponentword inLocation0 atIndex0 - If a shader
object is bound to any graphics stage or a graphics pipeline is
bound which was created with the
DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetAlphaToCoverageEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
alphaToOne
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetAlphaToOneEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
logicOp
feature is enabled, a shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_LOGIC_OP_ENABLE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetLogicOpEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXTdynamic state enabled thencmdSetColorBlendEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader
object is bound to the
SHADER_STAGE_FRAGMENT_BITstage, and both the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSEand there are color attachments bound, thencmdSetColorBlendEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXTdynamic state enabled thencmdSetColorBlendEquationEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader
object is bound to the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetColorBlendEnableEXTfor any attachment set that attachment’s value inpColorBlendEnablestoTRUE, thencmdSetColorBlendEquationEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_COLOR_WRITE_MASK_EXTdynamic state enabled thencmdSetColorWriteMaskEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader
object is bound to the
SHADER_STAGE_FRAGMENT_BITstage, and both the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSEand there are color attachments bound, thencmdSetColorWriteMaskEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
geometryStreams
feature is enabled, and a shader object is bound to the
SHADER_STAGE_GEOMETRY_BITstage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_RASTERIZATION_STREAM_EXTdynamic state enabled, thencmdSetRasterizationStreamEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_EXT_conservative_rasterizationextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetConservativeRasterizationModeEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_EXT_conservative_rasterizationextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofconservativeRasterizationModeisCONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT, thencmdSetExtraPrimitiveOverestimationSizeEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
depthClipEnable
feature is enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXTdynamic state, thencmdSetDepthClipEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXTdynamic state enabled thencmdSetColorBlendAdvancedEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command -
If the
VK_EXT_blend_operation_advancedextension is enabled, and a shader object is bound to theSHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, then at least one ofcmdSetColorBlendEquationEXTandcmdSetColorBlendAdvancedEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_EXT_provoking_vertexextension is enabled, a shader object is bound to theSHADER_STAGE_VERTEX_BITstage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_PROVOKING_VERTEX_MODE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetProvokingVertexModeEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXTdynamic state enabled thencmdSetLineRasterizationModeEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If any of the
stippledRectangularLines,
stippledBresenhamLines
or
stippledSmoothLines
features are enabled, and a shader object is bound to any graphics
stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetPolygonModeEXTin the current command buffer setpolygonModetoPOLYGON_MODE_LINE, thencmdSetLineRasterizationModeEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If any of the
stippledRectangularLines,
stippledBresenhamLines
or
stippledSmoothLines
features are enabled, and a shader object is bound to the
SHADER_STAGE_VERTEX_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetPrimitiveTopologyin the current command buffer setprimitiveTopologyto any line topology, thencmdSetLineRasterizationModeEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If any of the
stippledRectangularLines,
stippledBresenhamLines
or
stippledSmoothLines
features are enabled, and a shader object that outputs line
primitives is bound to the
SHADER_STAGE_TESSELLATION_EVALUATION_BITorSHADER_STAGE_GEOMETRY_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetLineRasterizationModeEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXTdynamic state enabled thencmdSetLineStippleEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If any of the
stippledRectangularLines,
stippledBresenhamLines
or
stippledSmoothLines
features are enabled, and a shader object is bound to any graphics
stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetPolygonModeEXTin the current command buffer setpolygonModetoPOLYGON_MODE_LINE, thencmdSetLineStippleEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If any of the
stippledRectangularLines,
stippledBresenhamLines
or
stippledSmoothLines
features are enabled, and a shader object is bound to the
SHADER_STAGE_VERTEX_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetPrimitiveTopologyin the current command buffer setprimitiveTopologyto any line topology, thencmdSetLineStippleEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If any of the
stippledRectangularLines,
stippledBresenhamLines
or
stippledSmoothLines
features are enabled, and a shader object that outputs line
primitives is bound to the
SHADER_STAGE_TESSELLATION_EVALUATION_BITorSHADER_STAGE_GEOMETRY_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetLineStippleEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If any of the
stippledRectangularLines,
stippledBresenhamLines
or
stippledSmoothLines
features are enabled and a shader object is bound to any graphics
stage, or a bound graphics pipeline state was created with the
DYNAMIC_STATE_LINE_STIPPLE_KHRdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofstippledLineEnableisTRUE, thencmdSetLineStippleKHRmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
depthClipControl
feature is enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXTdynamic state enabled, thencmdSetDepthClipNegativeOneToOneEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
depthClampControl
feature is enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_DEPTH_CLAMP_RANGE_EXTdynamic state enabled, and the current value ofdepthClampEnableisTRUE, thencmdSetDepthClampRangeEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_NV_clip_space_w_scalingextension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_VIEWPORT_W_SCALING_ENABLE_NVdynamic state enabled, thencmdSetViewportWScalingEnableNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_NV_viewport_swizzleextension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_VIEWPORT_SWIZZLE_NVdynamic state enabled, thencmdSetViewportSwizzleNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_NV_fragment_coverage_to_colorextension is enabled, a shader object is bound to theSHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NVdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetCoverageToColorEnableNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_NV_fragment_coverage_to_colorextension is enabled, a shader object is bound to theSHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_COVERAGE_TO_COLOR_LOCATION_NVdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofcoverageToColorEnableisTRUE, thencmdSetCoverageToColorLocationNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_NV_framebuffer_mixed_samplesextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_COVERAGE_MODULATION_MODE_NVdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetCoverageModulationModeNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_NV_framebuffer_mixed_samplesextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NVdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofcoverageModulationModeis any value other thanCOVERAGE_MODULATION_MODE_NONE_NV, thencmdSetCoverageModulationTableEnableNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_NV_framebuffer_mixed_samplesextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_COVERAGE_MODULATION_TABLE_NVdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofcoverageModulationTableEnableisTRUE, thencmdSetCoverageModulationTableNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
shadingRateImage
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_SHADING_RATE_IMAGE_ENABLE_NVdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetShadingRateImageEnableNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command -
If the
pipelineFragmentShadingRate
feature is enabled, a shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHRdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetFragmentShadingRateKHRmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
representativeFragmentTest
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NVdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetRepresentativeFragmentTestEnableNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
coverageReductionMode
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NVdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetCoverageReductionModeNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If
the bound graphics pipeline state was created with the
DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXTstate enabled and the last call tocmdSetColorBlendEnableEXTsetpColorBlendEnablesfor any attachment toTRUE, then for those attachments in the subpass the corresponding image view’s format features must containFORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT -
If the bound graphics pipeline state was created with the
DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate enabled, and the current subpass does not use any color and/or depth/stencil attachments, then therasterizationSamplesin the last call tocmdSetRasterizationSamplesEXTmust follow the rules for a zero-attachment subpass - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_SAMPLE_MASK_EXTstate enabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate disabled, then thesamplesparameter in the last call tocmdSetSampleMaskEXTmust be greater or equal to thePipelineMultisampleStateCreateInfo::rasterizationSamplesparameter used to create the bound graphics pipeline - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_SAMPLE_MASK_EXTstate andDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstates enabled, then thesamplesparameter in the last call tocmdSetSampleMaskEXTmust be greater or equal to therasterizationSamplesparameter in the last call tocmdSetRasterizationSamplesEXT -
If the bound graphics pipeline state was created with the
DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate enabled, and the multisampledRenderToSingleSampled feature is not enabled, and neither theVK_AMD_mixed_attachment_samplesnor theVK_NV_framebuffer_mixed_samplesextensions are enabled, then therasterizationSamplesin the last call tocmdSetRasterizationSamplesEXTmust be the same as the current subpass color and/or depth/stencil attachments - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate enabled, or a shader object is bound to any graphics stage, and the current render pass instance includes aMultisampledRenderToSingleSampledInfoEXTstructure withmultisampledRenderToSingleSampledEnableequal toTRUE, then therasterizationSamplesin the last call tocmdSetRasterizationSamplesEXTmust be the same as therasterizationSamplesmember of that structure - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXTdynamic state enabled thencmdSetColorBlendEnableEXTmust have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachmentandattachmentCountparameters ofcmdSetColorBlendEnableEXTcalls must specify an enable for all active color attachments in the current subpass -
If a shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetColorBlendEnableEXTmust have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachmentandattachmentCountparameters ofcmdSetColorBlendEnableEXTcalls must specify an enable for all active color attachments in the current subpass - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXTdynamic state enabled thencmdSetColorBlendEquationEXTmust have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachmentandattachmentCountparameters ofcmdSetColorBlendEquationEXTcalls must specify the blend equations for all active color attachments in the current subpass where blending is enabled -
If a shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage, and both the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSEand there are color attachments bound, thencmdSetColorBlendEquationEXTmust have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachmentandattachmentCountparameters ofcmdSetColorBlendEquationEXTcalls must specify the blend equations for all active color attachments in the current subpass where blending is enabled - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_COLOR_WRITE_MASK_EXTdynamic state enabled thencmdSetColorWriteMaskEXTmust have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachmentandattachmentCountparameters ofcmdSetColorWriteMaskEXTcalls must specify the color write mask for all active color attachments in the current subpass -
If a shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetColorWriteMaskEXTmust have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachmentandattachmentCountparameters ofcmdSetColorWriteMaskEXTcalls must specify the color write mask for all active color attachments in the current subpass - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXTdynamic state enabled thencmdSetColorBlendAdvancedEXTmust have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachmentandattachmentCountparameters ofcmdSetColorBlendAdvancedEXTcalls must specify the advanced blend equations for all active color attachments in the current subpass where blending is enabled -
If the bound graphics pipeline state was created with the
DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXTandDYNAMIC_STATE_COLOR_BLEND_ENABLE_EXTdynamic states enabled and the last calls tocmdSetColorBlendEnableEXTandcmdSetColorBlendAdvancedEXThave enabled advanced blending, then the number of active color attachments in the current subpass must not exceed advancedBlendMaxColorAttachments -
If the
primitivesGeneratedQueryWithNonZeroStreams
feature is not enabled and the
QUERY_TYPE_PRIMITIVES_GENERATED_EXTquery is active, and the bound graphics pipeline was created withDYNAMIC_STATE_RASTERIZATION_STREAM_EXTstate enabled, the last call tocmdSetRasterizationStreamEXTmust have set therasterizationStreamto zero -
If the bound graphics pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXTstate enabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate disabled, and the current value ofsampleLocationsEnableisTRUE, then thesampleLocationsPerPixelmember ofpSampleLocationsInfoin the last call tocmdSetSampleLocationsEXTmust equal therasterizationSamplesmember of thePipelineMultisampleStateCreateInfostructure the bound graphics pipeline has been created with -
If the bound graphics pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXTstate enabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate enabled, and the current value ofsampleLocationsEnableisTRUE, then thesampleLocationsPerPixelmember ofpSampleLocationsInfoin the last call tocmdSetSampleLocationsEXTmust equal therasterizationSamplesparameter of the last call tocmdSetRasterizationSamplesEXT -
If a shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage, or the bound graphics pipeline was created with theDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXTstate enabled, andsampleLocationsEnablewasTRUEin the last call tocmdSetSampleLocationsEnableEXT, and the current subpass has a depth/stencil attachment, then that attachment must have been created with theIMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXTbit set -
If a shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage, or the bound graphics pipeline state was created with theDYNAMIC_STATE_SAMPLE_LOCATIONS_EXTstate enabled and theDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXTstate enabled, and ifsampleLocationsEnablewasTRUEin the last call tocmdSetSampleLocationsEnableEXT, then thesampleLocationsInfo.sampleLocationGridSize.widthin the last call tocmdSetSampleLocationsEXTmust evenly divideMultisamplePropertiesEXT::sampleLocationGridSize.widthas returned bygetPhysicalDeviceMultisamplePropertiesEXTwith asamplesparameter equalingrasterizationSamples -
If a shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage, or the bound graphics pipeline state was created with theDYNAMIC_STATE_SAMPLE_LOCATIONS_EXTstate enabled and theDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXTstate enabled, and ifsampleLocationsEnablewasTRUEin the last call tocmdSetSampleLocationsEnableEXT, then thesampleLocationsInfo.sampleLocationGridSize.heightin the last call tocmdSetSampleLocationsEXTmust evenly divideMultisamplePropertiesEXT::sampleLocationGridSize.heightas returned bygetPhysicalDeviceMultisamplePropertiesEXTwith asamplesparameter equalingrasterizationSamples -
If a shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage, or the bound graphics pipeline state was created with theDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXTstate enabled, and ifsampleLocationsEnablewasTRUEin the last call tocmdSetSampleLocationsEnableEXT, the fragment shader code must not statically use the extended instructionInterpolateAtSample -
If the bound graphics pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXTstate disabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate enabled, and the current value ofsampleLocationsEnableisTRUE, thensampleLocationsInfo.sampleLocationGridSize.widthmust evenly divideMultisamplePropertiesEXT::sampleLocationGridSize.widthas returned bygetPhysicalDeviceMultisamplePropertiesEXTwith asamplesparameter equaling the value ofrasterizationSamplesin the last call tocmdSetRasterizationSamplesEXT -
If the bound graphics pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXTstate disabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate enabled, and the current value ofsampleLocationsEnableisTRUE, thensampleLocationsInfo.sampleLocationGridSize.heightmust evenly divideMultisamplePropertiesEXT::sampleLocationGridSize.heightas returned bygetPhysicalDeviceMultisamplePropertiesEXTwith asamplesparameter equaling the value ofrasterizationSamplesin the last call tocmdSetRasterizationSamplesEXT -
If the bound graphics pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXTstate disabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate enabled, and the current value ofsampleLocationsEnableisTRUE, thensampleLocationsInfo.sampleLocationsPerPixelmust equalrasterizationSamplesin the last call tocmdSetRasterizationSamplesEXT -
If a shader object is bound to any graphics stage or the bound
graphics pipeline state was created with the
DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NVstate enabled, and the last call tocmdSetCoverageModulationTableEnableNVsetcoverageModulationTableEnabletoTRUE, then thecoverageModulationTableCountparameter in the last call tocmdSetCoverageModulationTableNVmust equal the currentrasterizationSamplesdivided by the number of color samples in the current subpass -
If the
VK_NV_framebuffer_mixed_samplesextension is enabled, and if current subpass has a depth/stencil attachment and depth test, stencil test, or depth bounds test are enabled in the bound pipeline, then the currentrasterizationSamplesmust be the same as the sample count of the depth/stencil attachment -
If the bound graphics pipeline state was created with the
DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NVstate enabled and the last call tocmdSetCoverageToColorEnableNVset thecoverageToColorEnabletoTRUE, then the current subpass must have a color attachment at the location selected by the last call tocmdSetCoverageToColorLocationNVcoverageToColorLocation, with aFormatofFORMAT_R8_UINT,FORMAT_R8_SINT,FORMAT_R16_UINT,FORMAT_R16_SINT,FORMAT_R32_UINT, orFORMAT_R32_SINT -
If the
VK_NV_fragment_coverage_to_colorextension is enabled, and a shader object is bound to theSHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the last call tocmdSetCoverageToColorEnableNVset thecoverageToColorEnabletoTRUE, then the current subpass must have a color attachment at the location selected by the last call tocmdSetCoverageToColorLocationNVcoverageToColorLocation, with aFormatofFORMAT_R8_UINT,FORMAT_R8_SINT,FORMAT_R16_UINT,FORMAT_R16_SINT,FORMAT_R32_UINT, orFORMAT_R32_SINT -
If this
VK_NV_coverage_reduction_modeextension is enabled, the bound graphics pipeline state was created with theDYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NVandDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstates enabled, the current coverage reduction modecoverageReductionMode, then the currentrasterizationSamples, and the sample counts for the color and depth/stencil attachments (if the subpass has them) must be a valid combination returned bygetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_SWIZZLE_NVdynamic state enabled, then the bound graphics pipeline must have been created withPipelineViewportSwizzleStateCreateInfoNV::viewportCountgreater or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_SWIZZLE_NVdynamic states enabled then theviewportCountparameter in the last call tocmdSetViewportSwizzleNVmust be greater than or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the
VK_NV_viewport_swizzleextension is enabled, and a shader object is bound to any graphics stage, then theviewportCountparameter in the last call tocmdSetViewportSwizzleNVmust be greater than or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount -
If the
VK_NV_framebuffer_mixed_samplesextension is enabled, and if the current subpass has any color attachments andrasterizationSamplesof the last call tocmdSetRasterizationSamplesEXTis greater than the number of color samples, then the pipelinesampleShadingEnablemust beFALSE - If
the bound graphics pipeline state was created with the
DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXTorDYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXTdynamic states enabled, and if the currentstippledLineEnablestate isTRUEand the currentlineRasterizationModestate isLINE_RASTERIZATION_MODE_RECTANGULAR_KHR, then the stippledRectangularLines feature must be enabled - If
the bound graphics pipeline state was created with the
DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXTorDYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXTdynamic states enabled, and if the currentstippledLineEnablestate isTRUEand the currentlineRasterizationModestate isLINE_RASTERIZATION_MODE_BRESENHAM_KHR, then the stippledBresenhamLines feature must be enabled - If
the bound graphics pipeline state was created with the
DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXTorDYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXTdynamic states enabled, and if the currentstippledLineEnablestate isTRUEand the currentlineRasterizationModestate isLINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_KHR, then the stippledSmoothLines feature must be enabled - If
the bound graphics pipeline state was created with the
DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXTorDYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXTdynamic states enabled, and if the currentstippledLineEnablestate isTRUEand the currentlineRasterizationModestate isLINE_RASTERIZATION_MODE_DEFAULT_KHR, then the stippledRectangularLines feature must be enabled andPhysicalDeviceLimits::strictLinesmust beTRUE -
If the bound graphics pipeline state was created with the
DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXTdynamic state enabled, conservativePointAndLineRasterization is not supported, and the effective primitive topology output by the last pre-rasterization shader stage is a line or point, then theconservativeRasterizationModeset by the last call tocmdSetConservativeRasterizationModeEXTmust beCONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT - If the bound
pipeline was created with the
PipelineShaderStageCreateInfo::stagemember of an element ofGraphicsPipelineCreateInfo::pStagesset toSHADER_STAGE_VERTEX_BIT,SHADER_STAGE_TESSELLATION_CONTROL_BIT,SHADER_STAGE_TESSELLATION_EVALUATION_BITorSHADER_STAGE_GEOMETRY_BIT, then Mesh Shader Queries must not be active - If a shader
object is bound to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetAttachmentFeedbackLoopEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If dynamic state
was inherited from
CommandBufferInheritanceViewportScissorInfoNV, it must be set in the current command buffer prior to this drawing command - If there is no
bound graphics pipeline,
cmdBindShadersEXTmust have been called in the current command buffer withpStageswith an element ofSHADER_STAGE_VERTEX_BIT - If there is no
bound graphics pipeline, and the
tessellationShader
feature is enabled,
cmdBindShadersEXTmust have been called in the current command buffer withpStageswith an element ofSHADER_STAGE_TESSELLATION_CONTROL_BIT - If there is no
bound graphics pipeline, and the
tessellationShader
feature is enabled,
cmdBindShadersEXTmust have been called in the current command buffer withpStageswith an element ofSHADER_STAGE_TESSELLATION_EVALUATION_BIT - If there is no
bound graphics pipeline, and the
geometryShader
feature is enabled,
cmdBindShadersEXTmust have been called in the current command buffer withpStageswith an element ofSHADER_STAGE_GEOMETRY_BIT - If there is no
bound graphics pipeline,
cmdBindShadersEXTmust have been called in the current command buffer withpStageswith an element ofSHADER_STAGE_FRAGMENT_BIT - If there is no
bound graphics pipeline, and the
taskShader
feature is enabled,
cmdBindShadersEXTmust have been called in the current command buffer withpStageswith an element ofSHADER_STAGE_TASK_BIT_EXT - If there is no
bound graphics pipeline, and the
meshShader
feature is enabled,
cmdBindShadersEXTmust have been called in the current command buffer withpStageswith an element ofSHADER_STAGE_MESH_BIT_EXT - If there is no
bound graphics pipeline, and at least one of the
taskShader
and
meshShader
features is enabled, one of the
SHADER_STAGE_VERTEX_BITorSHADER_STAGE_MESH_BIT_EXTstages must have a validShaderEXTbound, and the other must have noShaderEXTbound - If there is no
bound graphics pipeline, and both the
taskShader
and
meshShader
features are enabled, and a valid
ShaderEXTis bound the to theSHADER_STAGE_MESH_BIT_EXTstage, and thatShaderEXTwas created without theSHADER_CREATE_NO_TASK_SHADER_BIT_EXTflag, a validShaderEXTmust be bound to theSHADER_STAGE_TASK_BIT_EXTstage - If there is no
bound graphics pipeline, and both the
taskShader
and
meshShader
features are enabled, and a valid
ShaderEXTis bound the to theSHADER_STAGE_MESH_BIT_EXTstage, and thatShaderEXTwas created with theSHADER_CREATE_NO_TASK_SHADER_BIT_EXTflag, there must be noShaderEXTbound to theSHADER_STAGE_TASK_BIT_EXTstage - If there is no
bound graphics pipeline, and a valid
ShaderEXTis bound to theSHADER_STAGE_VERTEX_BITstage, there must be noShaderEXTbound to either theSHADER_STAGE_TASK_BIT_EXTstage or theSHADER_STAGE_MESH_BIT_EXTstage - If any graphics
shader is bound which was created with the
SHADER_CREATE_LINK_STAGE_BIT_EXTflag, then all shaders created with theSHADER_CREATE_LINK_STAGE_BIT_EXTflag in the samecreateShadersEXTcall must also be bound - If any graphics
shader is bound which was created with the
SHADER_CREATE_LINK_STAGE_BIT_EXTflag, any stages in between stages whose shaders which did not create a shader with theSHADER_CREATE_LINK_STAGE_BIT_EXTflag as part of the samecreateShadersEXTcall must not have anyShaderEXTbound - All bound graphics shader objects must have been created with identical or identically defined push constant ranges
- All bound graphics shader objects must have been created with identical or identically defined arrays of descriptor set layouts
-
If the current render pass instance was begun with
cmdBeginRenderingand aRenderingInfo::colorAttachmentCountequal to1, a color attachment with a resolve mode ofRESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID, and a fragment shader is bound, it must not declare theDepthReplacingorStencilRefReplacingEXTexecution modes - If the
bound graphics pipeline state includes a fragment shader stage, was
created with
DYNAMIC_STATE_DEPTH_WRITE_ENABLEset inPipelineDynamicStateCreateInfo::pDynamicStates, and the fragment shader declares theEarlyFragmentTestsexecution mode and usesOpDepthAttachmentReadEXT, thedepthWriteEnableparameter in the last call tocmdSetDepthWriteEnablemust beFALSE - If the
bound graphics pipeline state includes a fragment shader stage, was
created with
DYNAMIC_STATE_STENCIL_WRITE_MASKset inPipelineDynamicStateCreateInfo::pDynamicStates, and the fragment shader declares theEarlyFragmentTestsexecution mode and usesOpStencilAttachmentReadEXT, thewriteMaskparameter in the last call tocmdSetStencilWriteMaskmust be0 - If a shader
object is bound to any graphics stage or the bound graphics pipeline
was created with
DYNAMIC_STATE_COLOR_WRITE_MASK_EXT, and the format of any color attachment isFORMAT_E5B9G9R9_UFLOAT_PACK32, the corresponding element of thepColorWriteMasksparameter ofcmdSetColorWriteMaskEXTmust either include all ofCOLOR_COMPONENT_R_BIT,COLOR_COMPONENT_G_BIT, andCOLOR_COMPONENT_B_BIT, or none of them -
If
blending
is enabled for any attachment where either the source or destination
blend factors for that attachment
use the secondary color input,
the maximum value of
Locationfor any output attachment statically used in theFragmentExecutionModelexecuted by this command must be less than maxFragmentDualSrcAttachments - If the current
render pass was begun with
cmdBeginRendering, and there is no shader object bound to any graphics stage, the value of each element ofRenderingAttachmentLocationInfoKHR::pColorAttachmentLocationsset bycmdSetRenderingAttachmentLocationsKHRmust match the value set for the corresponding element in the bound pipeline - If the current
render pass was begun with
cmdBeginRendering, and there is no shader object bound to any graphics stage, input attachment index mappings in the bound pipeline must match those set for the current render pass instance viaRenderingInputAttachmentIndexInfoKHR - If the current
render pass was begun with
cmdBeginRenderingwith theRENDERING_ENABLE_LEGACY_DITHERING_BIT_EXTflag, the bound graphics pipeline must have been created withPIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT - If the bound
graphics pipeline was created with
PIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT, the current render pass must have begun withcmdBeginRenderingwith theRENDERING_ENABLE_LEGACY_DITHERING_BIT_EXTflag -
commandBuffermust not be a protected command buffer - If
isPreprocessedisTRUEandgetGeneratedCommandsMemoryRequirementsEXTdid not return a required size of zero thencmdPreprocessGeneratedCommandsEXTmust have already been executed on the device before this command executes, and the preprocessing command must have used the samepGeneratedCommandsInfocontent as well as the content of the input buffers it references (all exceptGeneratedCommandsInfoEXT::preprocessBuffer) - If
isPreprocessedisTRUEthen theindirectCommandsLayoutmember ofpGeneratedCommandsInfomust have been created with theINDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_EXTbit set -
If the
indirectCommandsLayoutmember ofpGeneratedCommandsInfowas created with theINDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_EXTbit set, thenisPreprocessedmust beTRUE - The
contents of the
preprocessAddressmember ofpGeneratedCommandsInfomust not have been previously used to record anothercmdExecuteGeneratedCommandsEXT - If
isPreprocessedisTRUEthen the bound descriptor sets and push constants must match identically with those bound during recording of the corresponding call tocmdPreprocessGeneratedCommandsEXT - If
isPreprocessedisTRUEthen the conditional render state and its predicate value must match identically with the state and value set during execution of the corresponding call tocmdPreprocessGeneratedCommandsEXT - If
isPreprocessedisTRUEand theindirectCommandsLayoutmember ofpGeneratedCommandsInfocontains a draw token, then the graphics state bound oncommandBuffermust match identically with the graphics state bound on thestateCommandBufferpassed tocmdPreprocessGeneratedCommandsEXT - If
isPreprocessedisTRUE, then the queue family index ofcommandBuffermust be the same as the queue family index used to allocate thestateCommandBufferpassed tocmdPreprocessGeneratedCommandsEXT - If
isPreprocessedisTRUEand theindirectCommandsLayoutmember ofpGeneratedCommandsInfocontains a dispatch token, then the compute state bound oncommandBuffermust match identically with the compute state bound on thestateCommandBufferpassed tocmdPreprocessGeneratedCommandsEXT - If
isPreprocessedisTRUEand theindirectCommandsLayoutmember ofpGeneratedCommandsInfocontains a ray tracing token, then the ray tracing state bound oncommandBuffermust match identically with the ray tracing state bound on thestateCommandBufferpassed tocmdPreprocessGeneratedCommandsEXT - If
isPreprocessedisTRUEand theindirectCommandsLayoutmember ofpGeneratedCommandsInfocontains a ray tracing token, the queue family indexcommandBufferwas allocated from must be the same queue family index used to allocate thestateCommandBufferpassed tocmdPreprocessGeneratedCommandsEXT -
If the token sequence of the passed
GeneratedCommandsInfoEXT::indirectCommandsLayoutcontains aINDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXTtoken, the initial shader state ofGeneratedCommandsInfoEXT::indirectExecutionSetmust be bound oncommandBuffer -
If
indirectCommandsLayoutwas created with a token sequence that contained theINDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXTtoken andindirectExecutionSetwas created usingINDIRECT_EXECUTION_SET_INFO_TYPE_SHADER_OBJECTS_EXT, every executedINDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXTtoken must bind all the shader stages set in theIndirectCommandsExecutionSetTokenEXT::shaderStagesused to createindirectCommandsLayout - If
isPreprocessedisTRUEand the token sequence of the passedGeneratedCommandsInfoEXT::indirectCommandsLayoutcontains aINDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXTtoken, the members ofGeneratedCommandsInfoEXT::indirectExecutionSetaccessed by this command must not have been modified since the preprocess buffer was generated -
If the
indirectCommandsLayoutmember ofpGeneratedCommandsInfocontains a draw token, then the active render pass must not have a specified fragment density map - If deviceGeneratedCommandsTransformFeedback is not supported on device, transform feedback must not be active
-
If transform feedback is active,
GeneratedCommandsInfoEXT::indirectExecutionSetmust beNULL_HANDLE - The ::deviceGeneratedCommands feature must be enabled
- The bound shader stages must be supported by ::supportedIndirectCommandsShaderStages
-
Only stages specified in
::supportedIndirectCommandsShaderStages
can be set in
pGeneratedCommandsInfo->shaderStages - If a rendering
pass is currently active, the view mask must be
0 -
commandBuffermust not have been created withCOMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
pGeneratedCommandsInfomust be a valid pointer to a validGeneratedCommandsInfoEXTstructure -
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must support graphics, or compute operations - This command must only be called outside of a video coding scope
-
commandBuffermust be a primaryCommandBuffer
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 | Both | Outside | Graphics Compute | Action Indirection |
See Also
VK_EXT_device_generated_commands,
Bool32,
CommandBuffer, GeneratedCommandsInfoEXT
cmdPreprocessGeneratedCommandsEXT Source #
Arguments
| :: forall a io. (Extendss GeneratedCommandsInfoEXT a, PokeChain a, MonadIO io) | |
| => CommandBuffer |
|
| -> GeneratedCommandsInfoEXT a |
|
| -> ("stateCommandBuffer" ::: CommandBuffer) |
|
| -> io () |
vkCmdPreprocessGeneratedCommandsEXT - Performs preprocessing for generated commands
Description
Note
stateCommandBuffer access is not synchronized by the driver, meaning
that this command buffer must not be modified between threads in an
unsafe manner.
Valid Usage
-
pGeneratedCommandsInfo’sindirectCommandsLayoutmust have been created with theINDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_EXTbit set -
If the token sequence of the passed
GeneratedCommandsInfoEXT::indirectCommandsLayoutcontains aINDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXTtoken, the initial shader state ofGeneratedCommandsInfoEXT::indirectExecutionSetmust be bound onstateCommandBuffer -
stateCommandBuffermust be in the recording state - The ::deviceGeneratedCommands feature must be enabled
-
Only stages specified in
::supportedIndirectCommandsShaderStages
can be set in
pGeneratedCommandsInfo->shaderStages
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
pGeneratedCommandsInfomust be a valid pointer to a validGeneratedCommandsInfoEXTstructure -
stateCommandBuffermust be a validCommandBufferhandle -
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must support graphics, or compute operations - This command must only be called outside of a render pass instance
- This command must only be called outside of a video coding scope
-
commandBuffermust be a primaryCommandBuffer - Both of
commandBuffer, andstateCommandBuffermust have been created, allocated, or retrieved from the sameDevice
Host Synchronization
- Host access to
commandBuffermust be externally synchronized
- Host access to
stateCommandBuffermust 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 | Outside | Outside | Graphics Compute | Action |
See Also
VK_EXT_device_generated_commands,
CommandBuffer, GeneratedCommandsInfoEXT
getGeneratedCommandsMemoryRequirementsEXT Source #
Arguments
| :: forall a b io. (Extendss GeneratedCommandsMemoryRequirementsInfoEXT a, PokeChain a, Extendss MemoryRequirements2 b, PokeChain b, PeekChain b, MonadIO io) | |
| => Device |
|
| -> GeneratedCommandsMemoryRequirementsInfoEXT a |
|
| -> io (MemoryRequirements2 b) |
vkGetGeneratedCommandsMemoryRequirementsEXT - Retrieve the buffer allocation requirements for generated commands
Description
If the size returned is zero, the preprocessing step can be skipped for this layout.
Valid Usage (Implicit)
See Also
VK_EXT_device_generated_commands,
Device,
GeneratedCommandsMemoryRequirementsInfoEXT,
MemoryRequirements2
createIndirectCommandsLayoutEXT Source #
Arguments
| :: forall a io. (Extendss IndirectCommandsLayoutCreateInfoEXT a, PokeChain a, MonadIO io) | |
| => Device |
|
| -> IndirectCommandsLayoutCreateInfoEXT a |
|
| -> ("allocator" ::: Maybe AllocationCallbacks) |
|
| -> io IndirectCommandsLayoutEXT |
vkCreateIndirectCommandsLayoutEXT - Create an indirect command layout object
Valid Usage
- The ::deviceGeneratedCommands feature must be enabled
Valid Usage (Implicit)
-
devicemust be a validDevicehandle
-
pCreateInfomust be a valid pointer to a validIndirectCommandsLayoutCreateInfoEXTstructure - If
pAllocatoris notNULL,pAllocatormust be a valid pointer to a validAllocationCallbacksstructure -
pIndirectCommandsLayoutmust be a valid pointer to aIndirectCommandsLayoutEXThandle
Return Codes
See Also
VK_EXT_device_generated_commands,
AllocationCallbacks,
Device, IndirectCommandsLayoutCreateInfoEXT,
IndirectCommandsLayoutEXT
withIndirectCommandsLayoutEXT :: forall a io r. (Extendss IndirectCommandsLayoutCreateInfoEXT a, PokeChain a, MonadIO io) => Device -> IndirectCommandsLayoutCreateInfoEXT a -> Maybe AllocationCallbacks -> (io IndirectCommandsLayoutEXT -> (IndirectCommandsLayoutEXT -> io ()) -> r) -> r Source #
A convenience wrapper to make a compatible pair of calls to
createIndirectCommandsLayoutEXT and destroyIndirectCommandsLayoutEXT
To ensure that destroyIndirectCommandsLayoutEXT is always called: pass
bracket (or the allocate function from your
favourite resource management library) as the last argument.
To just extract the pair pass (,) as the last argument.
destroyIndirectCommandsLayoutEXT Source #
Arguments
| :: forall io. MonadIO io | |
| => Device |
|
| -> IndirectCommandsLayoutEXT |
|
| -> ("allocator" ::: Maybe AllocationCallbacks) |
|
| -> io () |
vkDestroyIndirectCommandsLayoutEXT - Destroy an indirect commands layout
Valid Usage
-
If
AllocationCallbackswere provided whenindirectCommandsLayoutwas created, a compatible set of callbacks must be provided here -
If no
AllocationCallbackswere provided whenindirectCommandsLayoutwas created,pAllocatormust beNULL
Valid Usage (Implicit)
-
devicemust be a validDevicehandle
-
If
indirectCommandsLayoutis notNULL_HANDLE,indirectCommandsLayoutmust be a validIndirectCommandsLayoutEXThandle - If
pAllocatoris notNULL,pAllocatormust be a valid pointer to a validAllocationCallbacksstructure -
If
indirectCommandsLayoutis a valid handle, it must have been created, allocated, or retrieved fromdevice
Host Synchronization
- Host access to
indirectCommandsLayoutmust be externally synchronized
See Also
VK_EXT_device_generated_commands,
AllocationCallbacks,
Device,
IndirectCommandsLayoutEXT
createIndirectExecutionSetEXT Source #
Arguments
| :: forall io. MonadIO io | |
| => Device |
|
| -> IndirectExecutionSetCreateInfoEXT |
|
| -> ("allocator" ::: Maybe AllocationCallbacks) |
|
| -> io IndirectExecutionSetEXT |
vkCreateIndirectExecutionSetEXT - Create an indirect execution set
Valid Usage
- The ::deviceGeneratedCommands feature must be enabled
Valid Usage (Implicit)
-
devicemust be a validDevicehandle
-
pCreateInfomust be a valid pointer to a validIndirectExecutionSetCreateInfoEXTstructure - If
pAllocatoris notNULL,pAllocatormust be a valid pointer to a validAllocationCallbacksstructure -
pIndirectExecutionSetmust be a valid pointer to aIndirectExecutionSetEXThandle
Return Codes
See Also
VK_EXT_device_generated_commands,
AllocationCallbacks,
Device, IndirectExecutionSetCreateInfoEXT,
IndirectExecutionSetEXT
withIndirectExecutionSetEXT :: forall io r. MonadIO io => Device -> IndirectExecutionSetCreateInfoEXT -> Maybe AllocationCallbacks -> (io IndirectExecutionSetEXT -> (IndirectExecutionSetEXT -> io ()) -> r) -> r Source #
A convenience wrapper to make a compatible pair of calls to
createIndirectExecutionSetEXT and destroyIndirectExecutionSetEXT
To ensure that destroyIndirectExecutionSetEXT is always called: pass
bracket (or the allocate function from your
favourite resource management library) as the last argument.
To just extract the pair pass (,) as the last argument.
destroyIndirectExecutionSetEXT Source #
Arguments
| :: forall io. MonadIO io | |
| => Device |
|
| -> IndirectExecutionSetEXT |
|
| -> ("allocator" ::: Maybe AllocationCallbacks) |
|
| -> io () |
vkDestroyIndirectExecutionSetEXT - Destroy an indirect execution set
Valid Usage
Valid Usage (Implicit)
-
devicemust be a validDevicehandle
-
If
indirectExecutionSetis notNULL_HANDLE,indirectExecutionSetmust be a validIndirectExecutionSetEXThandle - If
pAllocatoris notNULL,pAllocatormust be a valid pointer to a validAllocationCallbacksstructure -
If
indirectExecutionSetis a valid handle, it must have been created, allocated, or retrieved fromdevice
Host Synchronization
- Host access to
indirectExecutionSetmust be externally synchronized
See Also
VK_EXT_device_generated_commands,
AllocationCallbacks,
Device,
IndirectExecutionSetEXT
updateIndirectExecutionSetPipelineEXT Source #
Arguments
| :: forall io. MonadIO io | |
| => Device |
|
| -> IndirectExecutionSetEXT |
|
| -> ("executionSetWrites" ::: Vector WriteIndirectExecutionSetPipelineEXT) |
|
| -> io () |
vkUpdateIndirectExecutionSetPipelineEXT - Update the contents of an indirect execution set
Valid Usage
-
indirectExecutionSetmust have been created with typeINDIRECT_EXECUTION_SET_INFO_TYPE_PIPELINES_EXT
-
executionSetWriteCountmust be less than or equal toIndirectExecutionSetPipelineInfoEXT::maxPipelineCount -
Each element in the
pExecutionSetWritesarray must have a uniqueWriteIndirectExecutionSetPipelineEXT::index - Each member of the Indirect Execution Set referenced by the update command must not be in use by the device
- The layout
of each pipeline in
pExecutionSetWritesmust be compatible with theinitialPipelineused to create the Indirect Execution Set - Each
pipeline in the Indirect Execution Set must have identically
defined static and dynamic state values to the
initialPipelineused to create the Indirect Execution Set -
Each pipeline in the Indirect Execution Set must have identically
defined
fragment outputs interface
to the
initialPipelineused to create the Indirect Execution Set -
Each pipeline in the Indirect Execution Set must match the
initialPipelineused to create the Indirect Execution Set in its included shader stages -
Each pipeline in the Indirect Execution Set must match the
initialPipelineused to create the Indirect Execution Set in its use ofFragDepth -
Each pipeline in the Indirect Execution Set must match the
initialPipelineused to create the Indirect Execution Set in its use ofSampleMask -
Each pipeline in the Indirect Execution Set must match the
initialPipelineused to create the Indirect Execution Set in its use ofStencilExportEXT
Valid Usage (Implicit)
-
devicemust be a validDevicehandle
-
indirectExecutionSetmust be a validIndirectExecutionSetEXThandle -
pExecutionSetWritesmust be a valid pointer to an array ofexecutionSetWriteCountvalidWriteIndirectExecutionSetPipelineEXTstructures -
executionSetWriteCountmust be greater than0 -
indirectExecutionSetmust have been created, allocated, or retrieved fromdevice
Host Synchronization
- Host access to
indirectExecutionSetmust be externally synchronized
See Also
VK_EXT_device_generated_commands,
Device,
IndirectExecutionSetEXT,
WriteIndirectExecutionSetPipelineEXT
updateIndirectExecutionSetShaderEXT Source #
Arguments
| :: forall io. MonadIO io | |
| => Device |
|
| -> IndirectExecutionSetEXT |
|
| -> ("executionSetWrites" ::: Vector WriteIndirectExecutionSetShaderEXT) |
|
| -> io () |
vkUpdateIndirectExecutionSetShaderEXT - Update the contents of an indirect execution set
Valid Usage
-
indirectExecutionSetmust have been created with typeINDIRECT_EXECUTION_SET_INFO_TYPE_SHADER_OBJECTS_EXT
-
Each element in the
pExecutionSetWritesarray must have a uniqueWriteIndirectExecutionSetShaderEXT::index - Each member of the Indirect Execution Set referenced by the update command must not be in use by the device
-
The descriptor layout of each shader in
pExecutionSetWritesmust be compatible with the initial layout info used to create the Indirect Execution Set - Each fragment shader element in the Indirect Execution Set must have identically defined fragment outputs interface to the initial shader state used to create the Indirect Execution Set
- Each
fragment shader element in the Indirect Execution Set must match
the initial shader state used to create the Indirect Execution Set
in its use of
FragDepth - Each
fragment shader element in the Indirect Execution Set must match
the initial shader state used to create the Indirect Execution Set
in its use of
SampleMask -
Each fragment shader element in the Indirect Execution Set must
match the initial shader state used to create the Indirect Execution
Set in its use of
StencilExportEXT
Valid Usage (Implicit)
-
devicemust be a validDevicehandle
-
indirectExecutionSetmust be a validIndirectExecutionSetEXThandle -
pExecutionSetWritesmust be a valid pointer to an array ofexecutionSetWriteCountvalidWriteIndirectExecutionSetShaderEXTstructures -
executionSetWriteCountmust be greater than0 -
indirectExecutionSetmust have been created, allocated, or retrieved fromdevice
Host Synchronization
- Host access to
indirectExecutionSetmust be externally synchronized
See Also
VK_EXT_device_generated_commands,
Device,
IndirectExecutionSetEXT,
WriteIndirectExecutionSetShaderEXT
data PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT Source #
VkPhysicalDeviceDeviceGeneratedCommandsFeaturesEXT - Structure describing the device-generated compute features that can be supported by an implementation
Members
This structure describes the following features:
Description
If the PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT 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. PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT can also
be used in the pNext chain of DeviceCreateInfo
to selectively enable these features.
Valid Usage (Implicit)
See Also
Constructors
| PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT | |
Fields
| |
Instances
data PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT Source #
VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT - Structure describing push descriptor limits that can be supported by an implementation
Description
If the PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT 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
VK_EXT_device_generated_commands,
Bool32,
IndirectCommandsInputModeFlagsEXT,
ShaderStageFlags,
StructureType
Constructors
Instances
data GeneratedCommandsPipelineInfoEXT Source #
VkGeneratedCommandsPipelineInfoEXT - Structure specifying a pipeline for use with indirect command preprocessing
Valid Usage (Implicit)
See Also
Constructors
| GeneratedCommandsPipelineInfoEXT | |
Instances
data GeneratedCommandsShaderInfoEXT Source #
VkGeneratedCommandsShaderInfoEXT - Structure specifying shader objects for use with indirect command preprocessing
Valid Usage (Implicit)
See Also
Constructors
| GeneratedCommandsShaderInfoEXT | |
Fields
| |
Instances
| Show GeneratedCommandsShaderInfoEXT Source # | |
Defined in Vulkan.Extensions.VK_EXT_device_generated_commands Methods showsPrec :: Int -> GeneratedCommandsShaderInfoEXT -> ShowS # show :: GeneratedCommandsShaderInfoEXT -> String # showList :: [GeneratedCommandsShaderInfoEXT] -> ShowS # | |
| FromCStruct GeneratedCommandsShaderInfoEXT Source # | |
| ToCStruct GeneratedCommandsShaderInfoEXT Source # | |
Defined in Vulkan.Extensions.VK_EXT_device_generated_commands Methods withCStruct :: GeneratedCommandsShaderInfoEXT -> (Ptr GeneratedCommandsShaderInfoEXT -> IO b) -> IO b Source # pokeCStruct :: Ptr GeneratedCommandsShaderInfoEXT -> GeneratedCommandsShaderInfoEXT -> IO b -> IO b Source # withZeroCStruct :: (Ptr GeneratedCommandsShaderInfoEXT -> IO b) -> IO b Source # pokeZeroCStruct :: Ptr GeneratedCommandsShaderInfoEXT -> IO b -> IO b Source # cStructSize :: Int Source # | |
| Zero GeneratedCommandsShaderInfoEXT Source # | |
Defined in Vulkan.Extensions.VK_EXT_device_generated_commands Methods | |
data GeneratedCommandsMemoryRequirementsInfoEXT (es :: [Type]) Source #
VkGeneratedCommandsMemoryRequirementsInfoEXT - Structure specifying parameters for the reservation of preprocess buffer space
Description
If the action command token for the layout is not a COUNT-type
multi-draw indirect token, maxDrawCount is ignored.
Valid Usage
-
maxSequencesCountmust be less or equal toPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT::maxIndirectSequenceCount
-
If
indirectCommandsLayoutwas created with a token sequence that contained theINDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXTtoken,indirectExecutionSetmust not beNULL_HANDLE -
If
indirectCommandsLayoutwas created with a token sequence that contained theINDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXTtoken, the shader stages used to create the initial shader state ofindirectExecutionSetmust equal theIndirectCommandsExecutionSetTokenEXT::shaderStagesused to createindirectCommandsLayout -
If
indirectCommandsLayoutwas not created with a token sequence that contained theINDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXTtoken,indirectExecutionSetmust beNULL_HANDLE -
When not ignored,
maxDrawCount×maxSequenceCountmust be less than 2^24 -
If
indirectExecutionSetisNULL_HANDLE, either aGeneratedCommandsPipelineInfoEXTor aGeneratedCommandsShaderInfoEXTmust be included in thepNextchain
Valid Usage (Implicit)
- Each
pNextmember of any structure (including this one) in thepNextchain must be eitherNULLor a pointer to a valid instance ofGeneratedCommandsPipelineInfoEXTorGeneratedCommandsShaderInfoEXT - The
sTypevalue of each struct in thepNextchain must be unique -
If
indirectExecutionSetis notNULL_HANDLE,indirectExecutionSetmust be a validIndirectExecutionSetEXThandle -
indirectCommandsLayoutmust be a validIndirectCommandsLayoutEXThandle -
Both of
indirectCommandsLayout, andindirectExecutionSetthat are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the sameDevice
See Also
VK_EXT_device_generated_commands,
IndirectCommandsLayoutEXT,
IndirectExecutionSetEXT,
StructureType,
getGeneratedCommandsMemoryRequirementsEXT
Constructors
| GeneratedCommandsMemoryRequirementsInfoEXT | |
Fields
| |
Instances
data IndirectExecutionSetPipelineInfoEXT Source #
VkIndirectExecutionSetPipelineInfoEXT - Struct specifying parameters of a newly created indirect execution set containing only pipelines
Description
The characteristics of initialPipeline will be used to validate all
pipelines added to the set even if they are removed from the set or
destroyed.
When an Indirect Execution Set created with pipelines is used,
initialPipeline constitutes the initial shader state.
Valid Usage
-
If
::supportedIndirectCommandsShaderStagesPipelineBinding
does not contain
SHADER_STAGE_COMPUTE_BIT, thePipelineBindPointofinitialPipelinemust not bePIPELINE_BIND_POINT_COMPUTE
-
If
::supportedIndirectCommandsShaderStagesPipelineBinding
does not contain
SHADER_STAGE_FRAGMENT_BIT, thePipelineBindPointofinitialPipelinemust not bePIPELINE_BIND_POINT_GRAPHICS -
If
::supportedIndirectCommandsShaderStagesPipelineBinding
does not contain ray tracing stages, the
PipelineBindPointofinitialPipelinemust not bePIPELINE_BIND_POINT_RAY_TRACING_KHR -
maxPipelineCountmust be between1andPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT::maxIndirectPipelineCount -
initialPipelinemust not use descriptors of typeDESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMICorDESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC -
initialPipelinemust have been created withPIPELINE_CREATE_2_INDIRECT_BINDABLE_BIT_EXT
Valid Usage (Implicit)
-
sTypemust beSTRUCTURE_TYPE_INDIRECT_EXECUTION_SET_PIPELINE_INFO_EXT
-
initialPipelinemust be a validPipelinehandle
See Also
VK_EXT_device_generated_commands,
IndirectExecutionSetInfoEXT, Pipeline,
StructureType
Constructors
| IndirectExecutionSetPipelineInfoEXT | |
Fields
| |
Instances
data IndirectExecutionSetShaderLayoutInfoEXT Source #
VkIndirectExecutionSetShaderLayoutInfoEXT - Struct specifying descriptor layout parameters of a newly created indirect execution set containing only shader objects
Valid Usage
-
All members of
pSetLayoutsmust not contain descriptors of typeDESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMICorDESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC
Valid Usage (Implicit)
-
If
setLayoutCountis not0,pSetLayoutsmust be a valid pointer to an array ofsetLayoutCountvalid orNULL_HANDLEDescriptorSetLayouthandles
See Also
VK_EXT_device_generated_commands,
DescriptorSetLayout,
IndirectExecutionSetShaderInfoEXT,
StructureType
Constructors
| IndirectExecutionSetShaderLayoutInfoEXT | |
Fields
| |
Instances
data IndirectExecutionSetShaderInfoEXT Source #
VkIndirectExecutionSetShaderInfoEXT - Struct specifying parameters of a newly created indirect execution set containing only shader objects
Description
The characteristics of pInitialShaders will be used to validate all
shaders added to the set even if they are removed from the set or
destroyed.
When an Indirect Execution Set created with shader objects is used,
pInitialShaders constitutes the initial shader state.
Valid Usage
- All
members of
pInitialShadersmust have astagesupported by ::supportedIndirectCommandsShaderStagesShaderBinding
-
maxShaderCountmust not be zero -
maxShaderCountmust be less than or equal toPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT::maxIndirectShaderObjectCount -
maxShaderCountmust be greater than or equal toshaderCount - The
stageof each element in thepInitialShadersarray must be unique -
Each member of
pInitialShadersmust have been created withSHADER_CREATE_INDIRECT_BINDABLE_BIT_EXT
Valid Usage (Implicit)
-
sTypemust beSTRUCTURE_TYPE_INDIRECT_EXECUTION_SET_SHADER_INFO_EXT
-
pInitialShadersmust be a valid pointer to an array ofshaderCountvalidShaderEXThandles -
If
pSetLayoutInfosis notNULL,pSetLayoutInfosmust be a valid pointer to an array ofshaderCountvalidIndirectExecutionSetShaderLayoutInfoEXTstructures -
If
pushConstantRangeCountis not0,pPushConstantRangesmust be a valid pointer to an array ofpushConstantRangeCountvalidPushConstantRangestructures -
shaderCountmust be greater than0
See Also
VK_EXT_device_generated_commands,
IndirectExecutionSetInfoEXT,
IndirectExecutionSetShaderLayoutInfoEXT,
PushConstantRange,
ShaderEXT,
StructureType
Constructors
| IndirectExecutionSetShaderInfoEXT | |
Fields
| |
Instances
| Show IndirectExecutionSetShaderInfoEXT Source # | |
Defined in Vulkan.Extensions.VK_EXT_device_generated_commands Methods showsPrec :: Int -> IndirectExecutionSetShaderInfoEXT -> ShowS # | |
| FromCStruct IndirectExecutionSetShaderInfoEXT Source # | |
| ToCStruct IndirectExecutionSetShaderInfoEXT Source # | |
Defined in Vulkan.Extensions.VK_EXT_device_generated_commands Methods withCStruct :: IndirectExecutionSetShaderInfoEXT -> (Ptr IndirectExecutionSetShaderInfoEXT -> IO b) -> IO b Source # pokeCStruct :: Ptr IndirectExecutionSetShaderInfoEXT -> IndirectExecutionSetShaderInfoEXT -> IO b -> IO b Source # withZeroCStruct :: (Ptr IndirectExecutionSetShaderInfoEXT -> IO b) -> IO b Source # pokeZeroCStruct :: Ptr IndirectExecutionSetShaderInfoEXT -> IO b -> IO b Source # cStructSize :: Int Source # | |
| Zero IndirectExecutionSetShaderInfoEXT Source # | |
Defined in Vulkan.Extensions.VK_EXT_device_generated_commands Methods | |
data IndirectExecutionSetCreateInfoEXT Source #
VkIndirectExecutionSetCreateInfoEXT - Structure specifying parameters of a newly created indirect execution set
Valid Usage
-
If
PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT::maxIndirectShaderObjectCountis zero or the shaderObject feature is not enabledtypemust not beINDIRECT_EXECUTION_SET_INFO_TYPE_SHADER_OBJECTS_EXT
Valid Usage (Implicit)
-
sTypemust beSTRUCTURE_TYPE_INDIRECT_EXECUTION_SET_CREATE_INFO_EXT
-
typemust be a validIndirectExecutionSetInfoTypeEXTvalue -
If
typeisINDIRECT_EXECUTION_SET_INFO_TYPE_PIPELINES_EXT, thepPipelineInfomember ofinfomust be a valid pointer to a validIndirectExecutionSetPipelineInfoEXTstructure - If
typeisINDIRECT_EXECUTION_SET_INFO_TYPE_SHADER_OBJECTS_EXT, thepShaderInfomember ofinfomust be a valid pointer to a validIndirectExecutionSetShaderInfoEXTstructure
See Also
VK_EXT_device_generated_commands,
IndirectExecutionSetInfoEXT, IndirectExecutionSetInfoTypeEXT,
StructureType,
createIndirectExecutionSetEXT
Constructors
| IndirectExecutionSetCreateInfoEXT | |
Fields
| |
Instances
| Show IndirectExecutionSetCreateInfoEXT Source # | |
Defined in Vulkan.Extensions.VK_EXT_device_generated_commands Methods showsPrec :: Int -> IndirectExecutionSetCreateInfoEXT -> ShowS # | |
| ToCStruct IndirectExecutionSetCreateInfoEXT Source # | |
Defined in Vulkan.Extensions.VK_EXT_device_generated_commands Methods withCStruct :: IndirectExecutionSetCreateInfoEXT -> (Ptr IndirectExecutionSetCreateInfoEXT -> IO b) -> IO b Source # pokeCStruct :: Ptr IndirectExecutionSetCreateInfoEXT -> IndirectExecutionSetCreateInfoEXT -> IO b -> IO b Source # withZeroCStruct :: (Ptr IndirectExecutionSetCreateInfoEXT -> IO b) -> IO b Source # pokeZeroCStruct :: Ptr IndirectExecutionSetCreateInfoEXT -> IO b -> IO b Source # cStructSize :: Int Source # | |
| Zero IndirectExecutionSetCreateInfoEXT Source # | |
Defined in Vulkan.Extensions.VK_EXT_device_generated_commands Methods | |
data GeneratedCommandsInfoEXT (es :: [Type]) Source #
VkGeneratedCommandsInfoEXT - Structure specifying parameters for the generation of commands
Description
If sequenceCountAddress is not NULL, then maxSequenceCount is the
maximum number of sequences that can be executed. The actual number is
min(maxSequenceCount, *sequenceCountAddress). If
sequenceCountAddress is NULL, then maxSequenceCount is the exact
number of sequences to execute.
If the action command token for the layout is not a COUNT-type
multi-draw indirect token, maxDrawCount is ignored.
Valid Usage
- If
getGeneratedCommandsMemoryRequirementsEXTreturns a non-zero size,preprocessAddressmust not beNULL
-
DeviceMemoryobjects bound to the underlying buffer forpreprocessAddressmust have been allocated using one of the memory types allowed in thememoryTypeBitsmember of theMemoryRequirementsstructure returned bygetGeneratedCommandsMemoryRequirementsEXT - If
the
indirectCommandsLayoutuses a token ofINDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_EXT, then theindirectExecutionSet’s push constant layout must contain theupdateRangespecified inIndirectCommandsPushConstantTokenEXT - If
the
indirectCommandsLayoutuses a token ofINDIRECT_COMMANDS_TOKEN_TYPE_SEQUENCE_INDEX_EXT, then theindirectExecutionSet’s push constant layout must contain theupdateRangespecified inIndirectCommandsPushConstantTokenEXT -
maxSequenceCountmust be less or equal toPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT::maxIndirectSequenceCountandGeneratedCommandsMemoryRequirementsInfoEXT::maxSequencesCountthat was used to determine thepreprocessSize - If
sequenceCountAddressis notNULL, the value contained in the address must be less or equal toPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT::maxIndirectSequenceCountandGeneratedCommandsMemoryRequirementsInfoEXT::maxSequencesCountthat was used to determine thepreprocessSize -
maxSequenceCountmust not be zero - The
underlying buffer for
preprocessAddressmust have theBUFFER_USAGE_2_PREPROCESS_BUFFER_BIT_EXTbit set in its usage flag - If the
underlying buffer for
preprocessAddressis non-sparse then it must be bound completely and contiguously to a singleDeviceMemoryobject - If
the
indirectCommandsLayoutcontains aINDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXTtoken, then the descriptor and push constant layout info provided either bypipelineLayoutor through aPipelineLayoutCreateInfoinpNextof theIndirectCommandsLayoutCreateInfoEXTused to createindirectCommandsLayoutmust be compatible with the descriptor and push constant layout info used byindirectExecutionSet - If
indirectCommandsLayoutwas created with a token sequence that contained theINDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXTtoken, the shader stages used to create the initial shader state ofindirectExecutionSetmust equal theIndirectCommandsExecutionSetTokenEXT::shaderStagesused to createindirectCommandsLayout -
preprocessSizemust be greater than or equal to the memory requirement’s size returned bygetGeneratedCommandsMemoryRequirementsEXTusing the matching inputs (indirectCommandsLayout, …) as within this structure - The
underlying buffer for
sequenceCountAddressmust have theBUFFER_USAGE_2_INDIRECT_BUFFER_BIT_KHRbit set in its usage flag - If
sequenceCountAddressis notNULL,sequenceCountAddressmust be aligned to4 -
indirectAddressmust be aligned to4 - If the
underlying buffer for
sequenceCountAddressis non-sparse then it must be bound completely and contiguously to a singleDeviceMemoryobject -
indirectAddressmust not beNULL -
indirectAddressSizemust be greater than zero - When not
ignored,
maxDrawCount×maxSequenceCountmust be less than 2^24 - If
indirectCommandsLayoutwas created using aINDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_EXTtoken and shader objects are not bound then the bound graphics pipeline must have been created withDYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDEinpDynamicStates - If
the token sequence of the passed
indirectCommandsLayoutcontains aINDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXTtoken, theindirectExecutionSetmust not beNULL_HANDLE - If
the token sequence of the passed
indirectCommandsLayoutdoes not contains aINDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXTtoken, theindirectExecutionSetmust beNULL_HANDLE - If
indirectExecutionSetisNULL_HANDLE, aGeneratedCommandsPipelineInfoEXTorGeneratedCommandsShaderInfoEXTmust be included in thepNextchain
Valid Usage (Implicit)
-
sTypemust beSTRUCTURE_TYPE_GENERATED_COMMANDS_INFO_EXT
-
shaderStagesmust be a valid combination ofShaderStageFlagBitsvalues -
shaderStagesmust not be0 - If
indirectExecutionSetis notNULL_HANDLE,indirectExecutionSetmust be a validIndirectExecutionSetEXThandle -
indirectCommandsLayoutmust be a validIndirectCommandsLayoutEXThandle - Both of
indirectCommandsLayout, andindirectExecutionSetthat are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the sameDevice
See Also
VK_EXT_device_generated_commands,
DeviceAddress,
DeviceSize,
IndirectCommandsLayoutEXT,
IndirectExecutionSetEXT,
ShaderStageFlags,
StructureType,
cmdExecuteGeneratedCommandsEXT, cmdPreprocessGeneratedCommandsEXT
Constructors
| GeneratedCommandsInfoEXT | |
Fields
| |
Instances
data WriteIndirectExecutionSetPipelineEXT Source #
VkWriteIndirectExecutionSetPipelineEXT - Struct specifying pipeline update information for an indirect execution set
Valid Usage
-
indexmust be less than the value ofIndirectExecutionSetPipelineInfoEXT::maxPipelineCountused to create the set
-
pipelinemust have been created withPIPELINE_CREATE_2_INDIRECT_BINDABLE_BIT_EXT -
indexmust not be referenced by submitted command buffers - The
shader stages contained in
pipelinemust be supported by ::supportedIndirectCommandsShaderStagesPipelineBinding
Valid Usage (Implicit)
-
sTypemust beSTRUCTURE_TYPE_WRITE_INDIRECT_EXECUTION_SET_PIPELINE_EXT
-
pipelinemust be a validPipelinehandle
See Also
VK_EXT_device_generated_commands,
Pipeline,
StructureType,
updateIndirectExecutionSetPipelineEXT
Constructors
| WriteIndirectExecutionSetPipelineEXT | |
Instances
data WriteIndirectExecutionSetShaderEXT Source #
VkWriteIndirectExecutionSetShaderEXT - Struct specifying shader object update information for an indirect execution set
Description
Shaders need not be stored in the Indirect Execution Set according to their stage. The only restriction for shader indices within a set is that the value of the index must be less than the maximum number of shaders in the set.
Valid Usage
-
indexmust be less thanIndirectExecutionSetShaderInfoEXT::maxShaderCount
-
shadermust have been created withSHADER_CREATE_INDIRECT_BINDABLE_BIT_EXT - A
shader created with the same
ShaderStageFlagBitsmust have been passed in theIndirectExecutionSetShaderInfoEXT::pInitialShadersarray -
indexmust not be in use by submitted command buffers
Valid Usage (Implicit)
-
sTypemust beSTRUCTURE_TYPE_WRITE_INDIRECT_EXECUTION_SET_SHADER_EXT
-
shadermust be a validShaderEXThandle
See Also
VK_EXT_device_generated_commands,
VK_EXT_shader_object,
ShaderEXT,
StructureType,
updateIndirectExecutionSetShaderEXT
Constructors
| WriteIndirectExecutionSetShaderEXT | |
Instances
data IndirectCommandsLayoutCreateInfoEXT (es :: [Type]) Source #
VkIndirectCommandsLayoutCreateInfoEXT - Structure specifying the parameters of a newly created indirect commands layout object
Description
The following code illustrates some of the flags:
void cmdProcessAllSequences(cmd, indirectExecutionSet, indirectCommandsLayout, indirectAddress, sequencesCount)
{
for (s = 0; s < sequencesCount; s++)
{
sUsed = s;
if (indirectCommandsLayout.flags & VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_EXT) {
sUsed = incoherent_implementation_dependent_permutation[ sUsed ];
}
cmdProcessSequence( cmd, indirectExecutionSet, indirectCommandsLayout, indirectAddress, sUsed );
}
}When tokens are consumed, an offset is computed based on token offset
and stream stride. The resulting offset is required to be aligned. The
alignment for a specific token is equal to the scalar alignment of the
data type as defined in
Alignment Requirements,
or 4, whichever is lower.
Valid Usage
-
indirectStridemust be less than or equal toPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT::maxIndirectCommandsIndirectStride
-
shaderStagesmust only contain stages supported by ::supportedIndirectCommandsShaderStages -
tokenCountmust less than or equal toPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT::maxIndirectCommandsTokenCount - The
number of tokens in the
pTokensarray withtypeequal toINDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXTmust be less than or equal to1 - The
number of tokens in the
pTokensarray withtypeequal toINDIRECT_COMMANDS_TOKEN_TYPE_SEQUENCE_INDEX_EXTmust be less than or equal to1 - The
number of tokens in the
pTokensarray withtypeequal toINDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_EXTmust be less than or equal to1 - If the
action command token in the
pTokensarray is not an indexed draw token, thenpTokensmust not contain a member withtypeset toINDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_EXT - If the
action command token in the
pTokensarray is not a non-mesh draw token, thenpTokensmust not contain a member withtypeset toINDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_EXT - If the
pTokensarray contains multiple tokens withtypeequal toINDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_EXT, then there must be no duplicateIndirectCommandsVertexBufferTokenEXT::vertexBindingUnitvalues - For all
INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_EXTandINDIRECT_COMMANDS_TOKEN_TYPE_SEQUENCE_INDEX_EXTtype tokens inpTokens, there must be no overlapping ranges between any specified push constant ranges - The
action command token must be the last token in the
pTokensarray - If the
pTokensarray contains aINDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXTtoken, then this token must be the first token in the array - For any
element of
pTokens, iftypeisINDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_EXTorINDIRECT_COMMANDS_TOKEN_TYPE_SEQUENCE_INDEX_EXTand the dynamicGeneratedPipelineLayout feature is not enabled, then thepipelineLayoutmust not beNULL_HANDLE - For any
element of
pTokens, iftypeis eitherINDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_EXTorINDIRECT_COMMANDS_TOKEN_TYPE_SEQUENCE_INDEX_EXTandpipelineLayoutisNULL_HANDLE, then thepNextchain must include aPipelineLayoutCreateInfostruct - For any
element of
pTokens, theoffsetmust be greater than or equal to theoffsetmember of the previous tokens - For any
element of
pTokens, iftypeisINDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_EXT,INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_EXT,INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_EXT,INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_COUNT_EXT,INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_NV_EXT,INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_COUNT_NV_EXT,INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_COUNT_EXT,INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_EXT, orINDIRECT_COMMANDS_TOKEN_TYPE_DRAW_EXT, thenshaderStagesmust contain graphics stages - For any
element of
pTokens, iftypeisINDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_EXT, thenshaderStagesmust beSHADER_STAGE_COMPUTE_BIT - For any
element of
pTokens, iftypeisINDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_EXTorINDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_COUNT_EXT, thenshaderStagesmust containSHADER_STAGE_MESH_BIT_EXT - For any
element of
pTokens, iftypeisINDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_NV_EXTorINDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_COUNT_NV_EXT, then theshaderStagesmust containSHADER_STAGE_MESH_BIT_NV - For any
element of
pTokens, iftypeisINDIRECT_COMMANDS_TOKEN_TYPE_TRACE_RAYS2_EXT, thenshaderStagesmust contain ray tracing stages - If
shaderStagescontains graphics stages then the state tokens inpTokensmust not includeINDIRECT_COMMANDS_TOKEN_TYPE_TRACE_RAYS2_EXT,INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_EXT - If
shaderStagesisSHADER_STAGE_COMPUTE_BITthen the state tokens inpTokensmust only includeINDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_EXT,INDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT,INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_EXT, orINDIRECT_COMMANDS_TOKEN_TYPE_SEQUENCE_INDEX_EXT - If
shaderStagescontains ray tracing stages then the state tokens inpTokensmust only includeINDIRECT_COMMANDS_TOKEN_TYPE_TRACE_RAYS2_EXT,INDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT,INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_EXT, orINDIRECT_COMMANDS_TOKEN_TYPE_SEQUENCE_INDEX_EXT The
shaderStagesmust only contain stages from one of the following:- graphics stages
SHADER_STAGE_COMPUTE_BIT- mesh stages and
SHADER_STAGE_FRAGMENT_BIT - ray tracing stages
- If
shaderStagescontainsSHADER_STAGE_FRAGMENT_BIT, thenshaderStagesmust also containSHADER_STAGE_VERTEX_BITorSHADER_STAGE_MESH_BIT_EXT
Valid Usage (Implicit)
-
sTypemust beSTRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_EXT
-
pNextmust beNULLor a pointer to a valid instance ofPipelineLayoutCreateInfo - The
sTypevalue of each struct in thepNextchain must be unique -
flagsmust be a valid combination ofIndirectCommandsLayoutUsageFlagBitsEXTvalues -
shaderStagesmust be a valid combination ofShaderStageFlagBitsvalues -
shaderStagesmust not be0 -
If
pipelineLayoutis notNULL_HANDLE,pipelineLayoutmust be a validPipelineLayouthandle -
pTokensmust be a valid pointer to an array oftokenCountvalidIndirectCommandsLayoutTokenEXTstructures -
tokenCountmust be greater than0
See Also
VK_EXT_device_generated_commands,
IndirectCommandsLayoutTokenEXT, IndirectCommandsLayoutUsageFlagsEXT,
PipelineLayout,
ShaderStageFlags,
StructureType,
createIndirectCommandsLayoutEXT
Constructors
| IndirectCommandsLayoutCreateInfoEXT | |
Fields
| |
Instances
data IndirectCommandsLayoutTokenEXT Source #
VkIndirectCommandsLayoutTokenEXT - Struct specifying the details of an indirect command layout token
Valid Usage
-
offsetmust be less than or equal toPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT::maxIndirectCommandsTokenOffset
-
offsetmust be aligned to4 - If
meshShader
or
taskShader
are not enabled,
typemust not beINDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_EXTINDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_COUNT_EXT,INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_NV_EXTorINDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_COUNT_NV_EXT -
If the
rayTracingMaintenance1
feature is not enabled,
typemust not beINDIRECT_COMMANDS_TOKEN_TYPE_TRACE_RAYS2_EXT -
If
::deviceGeneratedCommandsMultiDrawIndirectCount
is not supported,
typemust not beINDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_COUNT_EXTorINDIRECT_COMMANDS_TOKEN_TYPE_DRAW_COUNT_EXT -
If
::deviceGeneratedCommandsMultiDrawIndirectCount
is not supported,
typemust not beINDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_COUNT_EXT -
If
::deviceGeneratedCommandsMultiDrawIndirectCount
is not supported,
typemust not beINDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_COUNT_NV_EXT
Valid Usage (Implicit)
-
sTypemust beSTRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_EXT
-
typemust be a validIndirectCommandsTokenTypeEXTvalue - If
typeisINDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_EXT,VK_INDIRECT_COMMANDS_TOKEN_TYPE_SEQUENCE_INDEX_EXT, thepPushConstantmember ofdatamust be a valid pointer to a validIndirectCommandsPushConstantTokenEXTstructure - If
typeisINDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_EXT, thepVertexBuffermember ofdatamust be a valid pointer to a validIndirectCommandsVertexBufferTokenEXTstructure - If
typeisINDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_EXT, thepIndexBuffermember ofdatamust be a valid pointer to a validIndirectCommandsIndexBufferTokenEXTstructure - If
typeisINDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT, thepExecutionSetmember ofdatamust be a valid pointer to a validIndirectCommandsExecutionSetTokenEXTstructure
See Also
VK_EXT_device_generated_commands,
IndirectCommandsLayoutCreateInfoEXT, IndirectCommandsTokenDataEXT,
IndirectCommandsTokenTypeEXT,
StructureType
Constructors
| IndirectCommandsLayoutTokenEXT | |
Fields
| |
Instances
| Show IndirectCommandsLayoutTokenEXT Source # | |
Defined in Vulkan.Extensions.VK_EXT_device_generated_commands Methods showsPrec :: Int -> IndirectCommandsLayoutTokenEXT -> ShowS # show :: IndirectCommandsLayoutTokenEXT -> String # showList :: [IndirectCommandsLayoutTokenEXT] -> ShowS # | |
| ToCStruct IndirectCommandsLayoutTokenEXT Source # | |
Defined in Vulkan.Extensions.VK_EXT_device_generated_commands Methods withCStruct :: IndirectCommandsLayoutTokenEXT -> (Ptr IndirectCommandsLayoutTokenEXT -> IO b) -> IO b Source # pokeCStruct :: Ptr IndirectCommandsLayoutTokenEXT -> IndirectCommandsLayoutTokenEXT -> IO b -> IO b Source # withZeroCStruct :: (Ptr IndirectCommandsLayoutTokenEXT -> IO b) -> IO b Source # pokeZeroCStruct :: Ptr IndirectCommandsLayoutTokenEXT -> IO b -> IO b Source # cStructSize :: Int Source # | |
| Zero IndirectCommandsLayoutTokenEXT Source # | |
Defined in Vulkan.Extensions.VK_EXT_device_generated_commands Methods | |
data DrawIndirectCountIndirectCommandEXT Source #
VkDrawIndirectCountIndirectCommandEXT - Structure specifying input data for a single draw-type command token
Description
The corresponding indirect draw struct data will be read from the buffer address.
Valid Usage
- The buffer’s
usage flag from which the address was acquired must have the
BUFFER_USAGE_INDIRECT_BUFFER_BITbit set
- Each element
of the buffer from which the address was acquired and that is
non-sparse must be bound completely and contiguously to a single
DeviceMemoryobject
See Also
Constructors
| DrawIndirectCountIndirectCommandEXT | |
Fields
| |
Instances
data IndirectCommandsVertexBufferTokenEXT Source #
VkIndirectCommandsVertexBufferTokenEXT - Structure specifying layout token info for a single index buffer command token
Valid Usage
See Also
VK_EXT_device_generated_commands,
IndirectCommandsTokenDataEXT
Constructors
| IndirectCommandsVertexBufferTokenEXT | |
Fields | |
Instances
data BindVertexBufferIndirectCommandEXT Source #
VkBindVertexBufferIndirectCommandEXT - Structure specifying input data for a single vertex buffer command token
Valid Usage
- The buffer’s
usage flag from which the address was acquired must have the
BUFFER_USAGE_VERTEX_BUFFER_BITbit set
- Each element
of the buffer from which the address was acquired and that is
non-sparse must be bound completely and contiguously to a single
DeviceMemoryobject
See Also
Constructors
| BindVertexBufferIndirectCommandEXT | |
Fields
| |
Instances
data IndirectCommandsIndexBufferTokenEXT Source #
VkIndirectCommandsIndexBufferTokenEXT - Structure specifying layout token info for a single index buffer command token
Description
This allows for easy layering of Vulkan atop other APIs. When
INDIRECT_COMMANDS_INPUT_MODE_DXGI_INDEX_BUFFER_EXT is specified, the
indirect buffer can contain a D3D12_INDEX_BUFFER_VIEW instead of
BindIndexBufferIndirectCommandEXT as D3D’s DXGI format value is mapped
to the IndexType. It works as both
structs are otherwise binary compatible.
Valid Usage (Implicit)
See Also
VK_EXT_device_generated_commands,
IndirectCommandsInputModeFlagBitsEXT, IndirectCommandsTokenDataEXT
Constructors
| IndirectCommandsIndexBufferTokenEXT | |
Fields
| |
Instances
data BindIndexBufferIndirectCommandEXT Source #
VkBindIndexBufferIndirectCommandEXT - Structure specifying input data for a single index buffer command token
Valid Usage
- The buffer’s
usage flags from which the address was acquired must have the
BUFFER_USAGE_INDEX_BUFFER_BITbit set
- The
bufferAddressmust be aligned to theIndexTypeof theindexTypeused - Each element
of the buffer from which the address was acquired and that is
non-sparse must be bound completely and contiguously to a single
DeviceMemoryobject
Valid Usage (Implicit)
-
indexTypemust be a validIndexTypevalue
See Also
Constructors
| BindIndexBufferIndirectCommandEXT | |
Fields
| |
Instances
data IndirectCommandsPushConstantTokenEXT Source #
VkIndirectCommandsPushConstantTokenEXT - Structure specifying layout token info for a single push constant command token
Description
The stageFlags member of updateRange is ignored.
Valid Usage
-
updateRangemust be contained within the push constant info used byIndirectCommandsLayoutCreateInfoEXT
- If the
token type is
INDIRECT_COMMANDS_TOKEN_TYPE_SEQUENCE_INDEX_EXT, thesizemember ofupdateRangemust be 4
Valid Usage (Implicit)
-
updateRangemust be a validPushConstantRangestructure
See Also
VK_EXT_device_generated_commands,
IndirectCommandsTokenDataEXT,
PushConstantRange
Constructors
| IndirectCommandsPushConstantTokenEXT | |
Fields
| |
Instances
data IndirectCommandsExecutionSetTokenEXT Source #
VkIndirectCommandsExecutionSetTokenEXT - Structure specifying input data for a single execution set command token
Valid Usage
-
Each bit in
shaderStagesmust be supported by ::supportedIndirectCommandsShaderStagesPipelineBinding or ::supportedIndirectCommandsShaderStagesShaderBinding
Valid Usage (Implicit)
-
typemust be a validIndirectExecutionSetInfoTypeEXTvalue
-
shaderStagesmust be a valid combination ofShaderStageFlagBitsvalues -
shaderStagesmust not be0
See Also
VK_EXT_device_generated_commands,
IndirectCommandsTokenDataEXT, IndirectExecutionSetInfoTypeEXT,
ShaderStageFlags
Constructors
| IndirectCommandsExecutionSetTokenEXT | |
Fields
| |
Instances
data IndirectExecutionSetInfoEXT Source #
Constructors
| PipelineInfo IndirectExecutionSetPipelineInfoEXT | |
| ShaderInfo IndirectExecutionSetShaderInfoEXT |
Instances
| Show IndirectExecutionSetInfoEXT Source # | |
Defined in Vulkan.Extensions.VK_EXT_device_generated_commands Methods showsPrec :: Int -> IndirectExecutionSetInfoEXT -> ShowS # show :: IndirectExecutionSetInfoEXT -> String # showList :: [IndirectExecutionSetInfoEXT] -> ShowS # | |
| ToCStruct IndirectExecutionSetInfoEXT Source # | |
Defined in Vulkan.Extensions.VK_EXT_device_generated_commands Methods withCStruct :: IndirectExecutionSetInfoEXT -> (Ptr IndirectExecutionSetInfoEXT -> IO b) -> IO b Source # pokeCStruct :: Ptr IndirectExecutionSetInfoEXT -> IndirectExecutionSetInfoEXT -> IO b -> IO b Source # withZeroCStruct :: (Ptr IndirectExecutionSetInfoEXT -> IO b) -> IO b Source # pokeZeroCStruct :: Ptr IndirectExecutionSetInfoEXT -> IO b -> IO b Source # cStructSize :: Int Source # | |
| Zero IndirectExecutionSetInfoEXT Source # | |
Defined in Vulkan.Extensions.VK_EXT_device_generated_commands Methods | |
data IndirectCommandsTokenDataEXT Source #
Constructors
| PushConstant IndirectCommandsPushConstantTokenEXT | |
| VertexBuffer IndirectCommandsVertexBufferTokenEXT | |
| IndexBuffer IndirectCommandsIndexBufferTokenEXT | |
| ExecutionSet IndirectCommandsExecutionSetTokenEXT |
Instances
| Show IndirectCommandsTokenDataEXT Source # | |
Defined in Vulkan.Extensions.VK_EXT_device_generated_commands Methods showsPrec :: Int -> IndirectCommandsTokenDataEXT -> ShowS # show :: IndirectCommandsTokenDataEXT -> String # showList :: [IndirectCommandsTokenDataEXT] -> ShowS # | |
| ToCStruct IndirectCommandsTokenDataEXT Source # | |
Defined in Vulkan.Extensions.VK_EXT_device_generated_commands Methods withCStruct :: IndirectCommandsTokenDataEXT -> (Ptr IndirectCommandsTokenDataEXT -> IO b) -> IO b Source # pokeCStruct :: Ptr IndirectCommandsTokenDataEXT -> IndirectCommandsTokenDataEXT -> IO b -> IO b Source # withZeroCStruct :: (Ptr IndirectCommandsTokenDataEXT -> IO b) -> IO b Source # pokeZeroCStruct :: Ptr IndirectCommandsTokenDataEXT -> IO b -> IO b Source # cStructSize :: Int Source # | |
| Zero IndirectCommandsTokenDataEXT Source # | |
Defined in Vulkan.Extensions.VK_EXT_device_generated_commands Methods | |
newtype IndirectCommandsLayoutUsageFlagBitsEXT Source #
VkIndirectCommandsLayoutUsageFlagBitsEXT - Bitmask specifying allowed usage of an indirect commands layout
See Also
VK_EXT_device_generated_commands,
IndirectCommandsLayoutUsageFlagsEXT
Constructors
| IndirectCommandsLayoutUsageFlagBitsEXT Flags |
Bundled Patterns
| pattern INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_EXT :: IndirectCommandsLayoutUsageFlagBitsEXT |
|
| pattern INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_EXT :: IndirectCommandsLayoutUsageFlagBitsEXT |
|
Instances
newtype IndirectExecutionSetInfoTypeEXT Source #
VkIndirectExecutionSetInfoTypeEXT - Enum specifying allowed usage of an indirect execution set
See Also
VK_EXT_device_generated_commands,
IndirectCommandsExecutionSetTokenEXT,
IndirectExecutionSetCreateInfoEXT
Constructors
| IndirectExecutionSetInfoTypeEXT Int32 |
Bundled Patterns
| pattern INDIRECT_EXECUTION_SET_INFO_TYPE_PIPELINES_EXT :: IndirectExecutionSetInfoTypeEXT |
|
| pattern INDIRECT_EXECUTION_SET_INFO_TYPE_SHADER_OBJECTS_EXT :: IndirectExecutionSetInfoTypeEXT |
|
Instances
newtype IndirectCommandsInputModeFlagBitsEXT Source #
VkIndirectCommandsInputModeFlagBitsEXT - Bitmask specifying allowed usage of an indirect commands layout
See Also
VK_EXT_device_generated_commands,
IndirectCommandsIndexBufferTokenEXT,
IndirectCommandsInputModeFlagsEXT
Constructors
| IndirectCommandsInputModeFlagBitsEXT Flags |
Bundled Patterns
| pattern INDIRECT_COMMANDS_INPUT_MODE_VULKAN_INDEX_BUFFER_EXT :: IndirectCommandsInputModeFlagBitsEXT |
|
| pattern INDIRECT_COMMANDS_INPUT_MODE_DXGI_INDEX_BUFFER_EXT :: IndirectCommandsInputModeFlagBitsEXT |
|
Instances
newtype IndirectCommandsTokenTypeEXT Source #
VkIndirectCommandsTokenTypeEXT - Enum specifying token commands
Description
'
Supported Indirect Command Tokens
See Also
VK_EXT_device_generated_commands,
IndirectCommandsLayoutTokenEXT
Constructors
| IndirectCommandsTokenTypeEXT Int32 |
Bundled Patterns
Instances
pattern EXT_DEVICE_GENERATED_COMMANDS_SPEC_VERSION :: forall a. Integral a => a Source #
type EXT_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME = "VK_EXT_device_generated_commands" Source #
pattern EXT_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a Source #
newtype IndirectCommandsLayoutEXT Source #
VkIndirectCommandsLayoutEXT - Opaque handle to an indirect commands layout object
See Also
VK_DEFINE_NON_DISPATCHABLE_HANDLE,
VK_EXT_device_generated_commands,
GeneratedCommandsInfoEXT,
GeneratedCommandsMemoryRequirementsInfoEXT,
createIndirectCommandsLayoutEXT,
destroyIndirectCommandsLayoutEXT
Constructors
| IndirectCommandsLayoutEXT Word64 |
Instances
newtype IndirectExecutionSetEXT Source #
VkIndirectExecutionSetEXT - Opaque handle to an indirect execution set object
Description
Indirect Execution Sets allow the device to bind different shaders and pipeline states using https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#device-generated-commands.
See Also
VK_DEFINE_NON_DISPATCHABLE_HANDLE,
VK_EXT_device_generated_commands,
GeneratedCommandsInfoEXT,
GeneratedCommandsMemoryRequirementsInfoEXT,
createIndirectExecutionSetEXT,
destroyIndirectExecutionSetEXT,
updateIndirectExecutionSetPipelineEXT,
updateIndirectExecutionSetShaderEXT
Constructors
| IndirectExecutionSetEXT Word64 |
Instances
VkShaderEXT - Opaque handle to a shader object
See Also
VK_DEFINE_NON_DISPATCHABLE_HANDLE,
VK_EXT_shader_object,
GeneratedCommandsShaderInfoEXT,
IndirectExecutionSetShaderInfoEXT,
WriteIndirectExecutionSetShaderEXT,
cmdBindShadersEXT,
createShadersEXT,
destroyShaderEXT,
getShaderBinaryDataEXT
Instances
| Storable ShaderEXT Source # | |
Defined in Vulkan.Extensions.Handles | |
| Show ShaderEXT Source # | |
| Eq ShaderEXT Source # | |
| Ord ShaderEXT Source # | |
| HasObjectType ShaderEXT Source # | |
Defined in Vulkan.Extensions.Handles Methods objectTypeAndHandle :: ShaderEXT -> (ObjectType, Word64) Source # | |
| IsHandle ShaderEXT Source # | |
Defined in Vulkan.Extensions.Handles | |
| Zero ShaderEXT Source # | |
Defined in Vulkan.Extensions.Handles | |
newtype BufferUsageFlagBits2KHR Source #
VkBufferUsageFlagBits2KHR - Bitmask controlling how a pipeline is created
See Also
Constructors
| BufferUsageFlagBits2KHR Flags64 |
Bundled Patterns
Instances
newtype PipelineCreateFlagBits2KHR Source #
VkPipelineCreateFlagBits2KHR - Bitmask controlling how a pipeline is created
Description
PIPELINE_CREATE_2_DISABLE_OPTIMIZATION_BIT_KHRspecifies that the created pipeline will not be optimized. Using this flag may reduce the time taken to create the pipeline.
PIPELINE_CREATE_2_ALLOW_DERIVATIVES_BIT_KHRspecifies that the pipeline to be created is allowed to be the parent of a pipeline that will be created in a subsequent pipeline creation call.PIPELINE_CREATE_2_DERIVATIVE_BIT_KHRspecifies that the pipeline to be created will be a child of a previously created parent pipeline.PIPELINE_CREATE_2_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHRspecifies that any shader input variables decorated asViewIndexwill be assigned values as if they were decorated asDeviceIndex.PIPELINE_CREATE_2_DISPATCH_BASE_BIT_KHRspecifies that a compute pipeline can be used withcmdDispatchBasewith a non-zero base workgroup.PIPELINE_CREATE_2_DEFER_COMPILE_BIT_NVspecifies that a pipeline is created with all shaders in the deferred state. Before using the pipeline the application must callcompileDeferredNVexactly once on each shader in the pipeline before using the pipeline.PIPELINE_CREATE_2_CAPTURE_STATISTICS_BIT_KHRspecifies that the shader compiler should capture statistics for the pipeline executables produced by the compile process which can later be retrieved by callinggetPipelineExecutableStatisticsKHR. Enabling this flag must not affect the final compiled pipeline but may disable pipeline caching or otherwise affect pipeline creation time.PIPELINE_CREATE_2_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHRspecifies that the shader compiler should capture the internal representations of pipeline executables produced by the compile process which can later be retrieved by callinggetPipelineExecutableInternalRepresentationsKHR. Enabling this flag must not affect the final compiled pipeline but may disable pipeline caching or otherwise affect pipeline creation time. When capturing IR from pipelines created with pipeline libraries, there is no guarantee that IR from libraries can be retrieved from the linked pipeline. Applications should retrieve IR from each library, and any linked pipelines, separately.PIPELINE_CREATE_2_LIBRARY_BIT_KHRspecifies that the pipeline cannot be used directly, and instead defines a pipeline library that can be combined with other pipelines using thePipelineLibraryCreateInfoKHRstructure. This is available in ray tracing and graphics pipelines.PIPELINE_CREATE_2_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHRspecifies that an any-hit shader will always be present when an any-hit shader would be executed. A NULL any-hit shader is an any-hit shader which is effectivelySHADER_UNUSED_KHR, such as from a shader group consisting entirely of zeros.PIPELINE_CREATE_2_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHRspecifies that a closest hit shader will always be present when a closest hit shader would be executed. A NULL closest hit shader is a closest hit shader which is effectivelySHADER_UNUSED_KHR, such as from a shader group consisting entirely of zeros.PIPELINE_CREATE_2_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHRspecifies that a miss shader will always be present when a miss shader would be executed. A NULL miss shader is a miss shader which is effectivelySHADER_UNUSED_KHR, such as from a shader group consisting entirely of zeros.PIPELINE_CREATE_2_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHRspecifies that an intersection shader will always be present when an intersection shader would be executed. A NULL intersection shader is an intersection shader which is effectivelySHADER_UNUSED_KHR, such as from a shader group consisting entirely of zeros.PIPELINE_CREATE_2_RAY_TRACING_SKIP_TRIANGLES_BIT_KHRspecifies that triangle primitives will be skipped during traversal using pipeline trace ray instructions.PIPELINE_CREATE_2_RAY_TRACING_SKIP_AABBS_BIT_KHRspecifies that AABB primitives will be skipped during traversal using pipeline trace ray instructions.PIPELINE_CREATE_2_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHRspecifies that the shader group handles can be saved and reused on a subsequent run (e.g. for trace capture and replay).PIPELINE_CREATE_2_INDIRECT_BINDABLE_BIT_NVspecifies that the pipeline can be used in combination with https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#device-generated-commands.PIPELINE_CREATE_2_INDIRECT_BINDABLE_BIT_EXTspecifies that the pipeline can be used in aIndirectExecutionSetEXT.PIPELINE_CREATE_2_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_KHRspecifies that pipeline creation will fail if a compile is required for creation of a validPipelineobject;PIPELINE_COMPILE_REQUIREDwill be returned by pipeline creation, and thePipelinewill beNULL_HANDLE.- When creating multiple pipelines,
PIPELINE_CREATE_2_EARLY_RETURN_ON_FAILURE_BIT_KHRspecifies that control will be returned to the application if any individual pipeline returns a result which is notSUCCESSrather than continuing to create additional pipelines. PIPELINE_CREATE_2_RAY_TRACING_ALLOW_MOTION_BIT_NVspecifies that the pipeline is allowed to useOpTraceRayMotionNV.PIPELINE_CREATE_2_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHRspecifies that the pipeline will be used with a fragment shading rate attachment.PIPELINE_CREATE_2_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXTspecifies that the pipeline will be used with a fragment density map attachment.PIPELINE_CREATE_2_LINK_TIME_OPTIMIZATION_BIT_EXTspecifies that pipeline libraries being linked into this library should have link time optimizations applied. If this bit is omitted, implementations should instead perform linking as rapidly as possible.PIPELINE_CREATE_2_RETAIN_LINK_TIME_OPTIMIZATION_INFO_BIT_EXTspecifies that pipeline libraries should retain any information necessary to later perform an optimal link withPIPELINE_CREATE_2_LINK_TIME_OPTIMIZATION_BIT_EXT.PIPELINE_CREATE_2_DESCRIPTOR_BUFFER_BIT_EXTspecifies that a pipeline will be used with descriptor buffers, rather than descriptor sets.PIPELINE_CREATE_2_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXTspecifies that the pipeline may be used with an attachment feedback loop including color attachments.PIPELINE_CREATE_2_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXTspecifies that the pipeline may be used with an attachment feedback loop including depth-stencil attachments.PIPELINE_CREATE_2_RAY_TRACING_OPACITY_MICROMAP_BIT_EXTspecifies that the ray tracing pipeline can be used with acceleration structures which reference an opacity micromap array.PIPELINE_CREATE_2_RAY_TRACING_DISPLACEMENT_MICROMAP_BIT_NVspecifies that the ray tracing pipeline can be used with acceleration structures which reference a displacement micromap array.PIPELINE_CREATE_2_NO_PROTECTED_ACCESS_BIT_EXTspecifies that the pipeline must not be bound to a protected command buffer.PIPELINE_CREATE_2_PROTECTED_ACCESS_ONLY_BIT_EXTspecifies that the pipeline must not be bound to an unprotected command buffer.PIPELINE_CREATE_2_CAPTURE_DATA_BIT_KHRspecifies thatPipelineBinaryKHRobjects can be created from the pipeline. IfPIPELINE_CREATE_2_CAPTURE_DATA_BIT_KHRis used, implementations should not store pipeline data to an internal cache, if such a cache exists as stated by pipelineBinaryInternalCache. If pipelineBinaryPrefersInternalCache isTRUE, applications should not usePIPELINE_CREATE_2_CAPTURE_DATA_BIT_KHR.PIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXTspecifies that the pipeline will be used in a render pass that is begun withRENDERING_ENABLE_LEGACY_DITHERING_BIT_EXT.PIPELINE_CREATE_2_EXECUTION_GRAPH_BIT_AMDXspecifies that the pipeline will be used in an execution graph
It is valid to set both PIPELINE_CREATE_2_ALLOW_DERIVATIVES_BIT_KHR
and PIPELINE_CREATE_2_DERIVATIVE_BIT_KHR. This allows a pipeline to be
both a parent and possibly a child in a pipeline hierarchy. See
Pipeline Derivatives
for more information.
When an implementation is looking up a pipeline in a
pipeline cache,
if that pipeline is being created using linked libraries,
implementations should always return an equivalent pipeline created
with PIPELINE_CREATE_2_LINK_TIME_OPTIMIZATION_BIT_EXT if available,
whether or not that bit was specified.
Using PIPELINE_CREATE_2_LINK_TIME_OPTIMIZATION_BIT_EXT (or not) when
linking pipeline libraries is intended as a performance tradeoff between
host and device. If the bit is omitted, linking should be faster and
produce a pipeline more rapidly, but performance of the pipeline on the
target device may be reduced. If the bit is included, linking may be
slower but should produce a pipeline with device performance comparable
to a monolithically created pipeline. Using both options can allow
latency-sensitive applications to generate a suboptimal but usable
pipeline quickly, and then perform an optimal link in the background,
substituting the result for the suboptimally linked pipeline as soon as
it is available.
See Also
Constructors
| PipelineCreateFlagBits2KHR Flags64 |
Bundled Patterns
Instances
newtype ShaderCreateFlagBitsEXT Source #
VkShaderCreateFlagBitsEXT - Bitmask controlling how a shader object is created
See Also
Constructors
| ShaderCreateFlagBitsEXT Flags |
Bundled Patterns