{-# language CPP #-}
-- | = 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__]
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_buffer_device_address VK_KHR_buffer_device_address>
--     and
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_maintenance5 VK_KHR_maintenance5>
--
-- [__API Interactions__]
--
--     -   Interacts with VK_EXT_shader_object
--
-- [__Contact__]
--
--     -   Mike Blumenkrantz
--         <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?body=[VK_EXT_device_generated_commands] @zmike%0A*Here describe the issue or question you have about the VK_EXT_device_generated_commands extension* >
--
-- [__Extension Proposal__]
--     <https://github.com/KhronosGroup/Vulkan-Docs/tree/main/proposals/VK_EXT_device_generated_commands.adoc 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_address@ or
--         @VK_KHR_buffer_device_address@ or Vulkan 1.2 for the ability to
--         bind vertex and index buffers on the device.
--
--     -   This extension requires @VK_KHR_maintenance5@ for 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
-- 'Vulkan.Core10.CommandBufferBuilding.cmdDrawIndirect' with one indirect
-- draw to
-- 'Vulkan.Core12.Promoted_From_VK_KHR_draw_indirect_count.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 'Vulkan.Core10.Handles.Buffer' objects and retrieve physical
--     addresses from them via
--     'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.getBufferDeviceAddress'
--
-- -   create a 'Vulkan.Extensions.Handles.IndirectExecutionSetEXT' for the
--     ability to change shaders on the device.
--
-- -   create a 'Vulkan.Extensions.Handles.IndirectCommandsLayoutEXT',
--     which lists the 'IndirectCommandsTokenTypeEXT' it 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 'Vulkan.Core10.Handles.Buffer' that uses memory
--     according to the information retrieved via
--     'getGeneratedCommandsMemoryRequirementsEXT'.
--
-- -   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 'cmdExecuteGeneratedCommandsEXT' to 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
--
-- -   'Vulkan.Extensions.Handles.IndirectCommandsLayoutEXT'
--
-- -   'Vulkan.Extensions.Handles.IndirectExecutionSetEXT'
--
-- == New Commands
--
-- -   'cmdExecuteGeneratedCommandsEXT'
--
-- -   'cmdPreprocessGeneratedCommandsEXT'
--
-- -   'createIndirectCommandsLayoutEXT'
--
-- -   'createIndirectExecutionSetEXT'
--
-- -   'destroyIndirectCommandsLayoutEXT'
--
-- -   'destroyIndirectExecutionSetEXT'
--
-- -   'getGeneratedCommandsMemoryRequirementsEXT'
--
-- -   'updateIndirectExecutionSetPipelineEXT'
--
-- -   'updateIndirectExecutionSetShaderEXT'
--
-- == New Structures
--
-- -   'BindIndexBufferIndirectCommandEXT'
--
-- -   'BindVertexBufferIndirectCommandEXT'
--
-- -   'DrawIndirectCountIndirectCommandEXT'
--
-- -   'GeneratedCommandsInfoEXT'
--
-- -   'GeneratedCommandsMemoryRequirementsInfoEXT'
--
-- -   'IndirectCommandsExecutionSetTokenEXT'
--
-- -   'IndirectCommandsIndexBufferTokenEXT'
--
-- -   'IndirectCommandsLayoutCreateInfoEXT'
--
-- -   'IndirectCommandsLayoutTokenEXT'
--
-- -   'IndirectCommandsPushConstantTokenEXT'
--
-- -   'IndirectCommandsVertexBufferTokenEXT'
--
-- -   'IndirectExecutionSetCreateInfoEXT'
--
-- -   'IndirectExecutionSetPipelineInfoEXT'
--
-- -   'IndirectExecutionSetShaderInfoEXT'
--
-- -   'IndirectExecutionSetShaderLayoutInfoEXT'
--
-- -   'WriteIndirectExecutionSetPipelineEXT'
--
-- -   Extending 'GeneratedCommandsInfoEXT',
--     'GeneratedCommandsMemoryRequirementsInfoEXT':
--
--     -   'GeneratedCommandsPipelineInfoEXT'
--
--     -   'GeneratedCommandsShaderInfoEXT'
--
-- -   Extending
--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--     'Vulkan.Core10.Device.DeviceCreateInfo':
--
--     -   'PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT'
--
-- -   Extending
--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2':
--
--     -   'PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT'
--
-- If
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_shader_object VK_EXT_shader_object>
-- is supported:
--
-- -   'WriteIndirectExecutionSetShaderEXT'
--
-- == New Unions
--
-- -   'IndirectCommandsTokenDataEXT'
--
-- -   'IndirectExecutionSetInfoEXT'
--
-- == New Enums
--
-- -   'IndirectCommandsInputModeFlagBitsEXT'
--
-- -   'IndirectCommandsLayoutUsageFlagBitsEXT'
--
-- -   'IndirectCommandsTokenTypeEXT'
--
-- -   'IndirectExecutionSetInfoTypeEXT'
--
-- == New Bitmasks
--
-- -   'IndirectCommandsInputModeFlagsEXT'
--
-- -   'IndirectCommandsLayoutUsageFlagsEXT'
--
-- == New Enum Constants
--
-- -   'EXT_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME'
--
-- -   'EXT_DEVICE_GENERATED_COMMANDS_SPEC_VERSION'
--
-- -   Extending 'Vulkan.Core10.Enums.AccessFlagBits.AccessFlagBits':
--
--     -   'ACCESS_COMMAND_PREPROCESS_READ_BIT_EXT'
--
--     -   'ACCESS_COMMAND_PREPROCESS_WRITE_BIT_EXT'
--
-- -   Extending
--     'Vulkan.Extensions.VK_KHR_maintenance5.BufferUsageFlagBits2KHR':
--
--     -   'Vulkan.Extensions.VK_KHR_maintenance5.BUFFER_USAGE_2_PREPROCESS_BUFFER_BIT_EXT'
--
-- -   Extending 'Vulkan.Core10.Enums.ObjectType.ObjectType':
--
--     -   'Vulkan.Core10.Enums.ObjectType.OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_EXT'
--
--     -   'Vulkan.Core10.Enums.ObjectType.OBJECT_TYPE_INDIRECT_EXECUTION_SET_EXT'
--
-- -   Extending
--     'Vulkan.Extensions.VK_KHR_maintenance5.PipelineCreateFlagBits2KHR':
--
--     -   'Vulkan.Extensions.VK_KHR_maintenance5.PIPELINE_CREATE_2_INDIRECT_BINDABLE_BIT_EXT'
--
-- -   Extending
--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits':
--
--     -   'PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_EXT'
--
-- -   Extending
--     'Vulkan.Extensions.VK_EXT_shader_object.ShaderCreateFlagBitsEXT':
--
--     -   'Vulkan.Extensions.VK_EXT_shader_object.SHADER_CREATE_INDIRECT_BINDABLE_BIT_EXT'
--
-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_EXT'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_EXT'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_GENERATED_COMMANDS_PIPELINE_INFO_EXT'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_GENERATED_COMMANDS_SHADER_INFO_EXT'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_EXT'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_EXT'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_INDIRECT_EXECUTION_SET_CREATE_INFO_EXT'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_INDIRECT_EXECUTION_SET_PIPELINE_INFO_EXT'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_INDIRECT_EXECUTION_SET_SHADER_INFO_EXT'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_INDIRECT_EXECUTION_SET_SHADER_LAYOUT_INFO_EXT'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_EXT'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_EXT'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_WRITE_INDIRECT_EXECUTION_SET_PIPELINE_EXT'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_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
-- <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VK_EXT_device_generated_commands Vulkan Specification>
--
-- This page is a generated document. Fixes and changes should be made to
-- the generator scripts, not directly.
module Vulkan.Extensions.VK_EXT_device_generated_commands  ( cmdExecuteGeneratedCommandsEXT
                                                           , cmdPreprocessGeneratedCommandsEXT
                                                           , getGeneratedCommandsMemoryRequirementsEXT
                                                           , createIndirectCommandsLayoutEXT
                                                           , withIndirectCommandsLayoutEXT
                                                           , destroyIndirectCommandsLayoutEXT
                                                           , createIndirectExecutionSetEXT
                                                           , withIndirectExecutionSetEXT
                                                           , destroyIndirectExecutionSetEXT
                                                           , updateIndirectExecutionSetPipelineEXT
                                                           , updateIndirectExecutionSetShaderEXT
                                                           , pattern PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_EXT
                                                           , pattern ACCESS_COMMAND_PREPROCESS_READ_BIT_EXT
                                                           , pattern ACCESS_COMMAND_PREPROCESS_WRITE_BIT_EXT
                                                           , PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT(..)
                                                           , PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT(..)
                                                           , GeneratedCommandsPipelineInfoEXT(..)
                                                           , GeneratedCommandsShaderInfoEXT(..)
                                                           , GeneratedCommandsMemoryRequirementsInfoEXT(..)
                                                           , IndirectExecutionSetPipelineInfoEXT(..)
                                                           , IndirectExecutionSetShaderLayoutInfoEXT(..)
                                                           , IndirectExecutionSetShaderInfoEXT(..)
                                                           , IndirectExecutionSetCreateInfoEXT(..)
                                                           , GeneratedCommandsInfoEXT(..)
                                                           , WriteIndirectExecutionSetPipelineEXT(..)
                                                           , WriteIndirectExecutionSetShaderEXT(..)
                                                           , IndirectCommandsLayoutCreateInfoEXT(..)
                                                           , IndirectCommandsLayoutTokenEXT(..)
                                                           , DrawIndirectCountIndirectCommandEXT(..)
                                                           , IndirectCommandsVertexBufferTokenEXT(..)
                                                           , BindVertexBufferIndirectCommandEXT(..)
                                                           , IndirectCommandsIndexBufferTokenEXT(..)
                                                           , BindIndexBufferIndirectCommandEXT(..)
                                                           , IndirectCommandsPushConstantTokenEXT(..)
                                                           , IndirectCommandsExecutionSetTokenEXT(..)
                                                           , IndirectExecutionSetInfoEXT(..)
                                                           , IndirectCommandsTokenDataEXT(..)
                                                           , IndirectCommandsLayoutUsageFlagsEXT
                                                           , IndirectCommandsLayoutUsageFlagBitsEXT( INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_EXT
                                                                                                   , INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_EXT
                                                                                                   , ..
                                                                                                   )
                                                           , IndirectExecutionSetInfoTypeEXT( INDIRECT_EXECUTION_SET_INFO_TYPE_PIPELINES_EXT
                                                                                            , INDIRECT_EXECUTION_SET_INFO_TYPE_SHADER_OBJECTS_EXT
                                                                                            , ..
                                                                                            )
                                                           , IndirectCommandsInputModeFlagsEXT
                                                           , IndirectCommandsInputModeFlagBitsEXT( INDIRECT_COMMANDS_INPUT_MODE_VULKAN_INDEX_BUFFER_EXT
                                                                                                 , INDIRECT_COMMANDS_INPUT_MODE_DXGI_INDEX_BUFFER_EXT
                                                                                                 , ..
                                                                                                 )
                                                           , IndirectCommandsTokenTypeEXT( INDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT
                                                                                         , INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_EXT
                                                                                         , INDIRECT_COMMANDS_TOKEN_TYPE_SEQUENCE_INDEX_EXT
                                                                                         , INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_EXT
                                                                                         , INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_EXT
                                                                                         , INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_EXT
                                                                                         , INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_EXT
                                                                                         , INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_COUNT_EXT
                                                                                         , INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_COUNT_EXT
                                                                                         , INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_EXT
                                                                                         , INDIRECT_COMMANDS_TOKEN_TYPE_TRACE_RAYS2_EXT
                                                                                         , INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_COUNT_EXT
                                                                                         , INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_EXT
                                                                                         , INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_COUNT_NV_EXT
                                                                                         , INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_NV_EXT
                                                                                         , ..
                                                                                         )
                                                           , EXT_DEVICE_GENERATED_COMMANDS_SPEC_VERSION
                                                           , pattern EXT_DEVICE_GENERATED_COMMANDS_SPEC_VERSION
                                                           , EXT_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME
                                                           , pattern EXT_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME
                                                           , IndirectCommandsLayoutEXT(..)
                                                           , IndirectExecutionSetEXT(..)
                                                           , ShaderEXT(..)
                                                           , BufferUsageFlagBits2KHR(..)
                                                           , BufferUsageFlags2KHR
                                                           , PipelineCreateFlagBits2KHR(..)
                                                           , PipelineCreateFlags2KHR
                                                           , ShaderCreateFlagBitsEXT(..)
                                                           , ShaderCreateFlagsEXT
                                                           ) where

import Data.Bits (Bits)
import Data.Bits (FiniteBits)
import Vulkan.Internal.Utils (enumReadPrec)
import Vulkan.Internal.Utils (enumShowsPrec)
import Vulkan.Internal.Utils (traceAroundEvent)
import Control.Exception.Base (bracket)
import Control.Monad (unless)
import Control.Monad.IO.Class (liftIO)
import Data.Typeable (eqT)
import Foreign.Marshal.Alloc (allocaBytes)
import Foreign.Marshal.Alloc (callocBytes)
import Foreign.Marshal.Alloc (free)
import GHC.Base (when)
import GHC.IO (throwIO)
import GHC.Ptr (castPtr)
import GHC.Ptr (nullFunPtr)
import Foreign.Ptr (nullPtr)
import Foreign.Ptr (plusPtr)
import GHC.Show (showString)
import GHC.Show (showsPrec)
import Numeric (showHex)
import Control.Monad.Trans.Class (lift)
import Control.Monad.Trans.Cont (evalContT)
import Control.Monad.Trans.Cont (runContT)
import Data.Vector (generateM)
import qualified Data.Vector (imapM_)
import qualified Data.Vector (length)
import qualified Data.Vector (null)
import Vulkan.CStruct (FromCStruct)
import Vulkan.CStruct (FromCStruct(..))
import Vulkan.CStruct (ToCStruct)
import Vulkan.CStruct (ToCStruct(..))
import Vulkan.Zero (Zero)
import Vulkan.Zero (Zero(..))
import Control.Monad.IO.Class (MonadIO)
import Data.String (IsString)
import Data.Type.Equality ((:~:)(Refl))
import Data.Typeable (Typeable)
import Foreign.Storable (Storable)
import Foreign.Storable (Storable(peek))
import Foreign.Storable (Storable(poke))
import qualified Foreign.Storable (Storable(..))
import GHC.Generics (Generic)
import GHC.IO.Exception (IOErrorType(..))
import GHC.IO.Exception (IOException(..))
import Data.Int (Int32)
import Foreign.Ptr (FunPtr)
import Foreign.Ptr (Ptr)
import GHC.Read (Read(readPrec))
import GHC.Show (Show(showsPrec))
import Data.Word (Word32)
import Data.Kind (Type)
import Control.Monad.Trans.Cont (ContT(..))
import Data.Vector (Vector)
import Vulkan.CStruct.Utils (advancePtrBytes)
import Vulkan.Core10.FundamentalTypes (bool32ToBool)
import Vulkan.Core10.FundamentalTypes (boolToBool32)
import Vulkan.CStruct.Extends (forgetExtensions)
import Vulkan.NamedType ((:::))
import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
import Vulkan.Core10.FundamentalTypes (Bool32)
import Vulkan.Core10.FundamentalTypes (Bool32(..))
import Vulkan.CStruct.Extends (Chain)
import Vulkan.Core10.Handles (CommandBuffer)
import Vulkan.Core10.Handles (CommandBuffer(..))
import Vulkan.Core10.Handles (CommandBuffer(CommandBuffer))
import Vulkan.Core10.Handles (CommandBuffer_T)
import Vulkan.Core10.Handles (DescriptorSetLayout)
import Vulkan.Core10.Handles (Device)
import Vulkan.Core10.Handles (Device(..))
import Vulkan.Core10.Handles (Device(Device))
import Vulkan.Core10.FundamentalTypes (DeviceAddress)
import Vulkan.Dynamic (DeviceCmds(pVkCmdExecuteGeneratedCommandsEXT))
import Vulkan.Dynamic (DeviceCmds(pVkCmdPreprocessGeneratedCommandsEXT))
import Vulkan.Dynamic (DeviceCmds(pVkCreateIndirectCommandsLayoutEXT))
import Vulkan.Dynamic (DeviceCmds(pVkCreateIndirectExecutionSetEXT))
import Vulkan.Dynamic (DeviceCmds(pVkDestroyIndirectCommandsLayoutEXT))
import Vulkan.Dynamic (DeviceCmds(pVkDestroyIndirectExecutionSetEXT))
import Vulkan.Dynamic (DeviceCmds(pVkGetGeneratedCommandsMemoryRequirementsEXT))
import Vulkan.Dynamic (DeviceCmds(pVkUpdateIndirectExecutionSetPipelineEXT))
import Vulkan.Dynamic (DeviceCmds(pVkUpdateIndirectExecutionSetShaderEXT))
import Vulkan.Core10.FundamentalTypes (DeviceSize)
import Vulkan.Core10.Handles (Device_T)
import Vulkan.CStruct.Extends (Extends)
import Vulkan.CStruct.Extends (Extendss)
import Vulkan.CStruct.Extends (Extensible(..))
import Vulkan.Core10.FundamentalTypes (Flags)
import Vulkan.Core10.Enums.IndexType (IndexType)
import Vulkan.Extensions.Handles (IndirectCommandsLayoutEXT)
import Vulkan.Extensions.Handles (IndirectCommandsLayoutEXT(..))
import Vulkan.Extensions.Handles (IndirectExecutionSetEXT)
import Vulkan.Extensions.Handles (IndirectExecutionSetEXT(..))
import Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2 (MemoryRequirements2)
import Vulkan.CStruct.Extends (PeekChain)
import Vulkan.CStruct.Extends (PeekChain(..))
import Vulkan.Core10.Handles (Pipeline)
import Vulkan.Core10.Handles (PipelineLayout)
import {-# SOURCE #-} Vulkan.Core10.PipelineLayout (PipelineLayoutCreateInfo)
import Vulkan.CStruct.Extends (PokeChain)
import Vulkan.CStruct.Extends (PokeChain(..))
import Vulkan.Core10.PipelineLayout (PushConstantRange)
import Vulkan.Core10.Enums.Result (Result)
import Vulkan.Core10.Enums.Result (Result(..))
import Vulkan.Extensions.Handles (ShaderEXT)
import Vulkan.Core10.Enums.ShaderStageFlagBits (ShaderStageFlags)
import Vulkan.CStruct.Extends (SomeStruct)
import Vulkan.Core10.Enums.StructureType (StructureType)
import Vulkan.Exception (VulkanException(..))
import Vulkan.Core10.Enums.AccessFlagBits (AccessFlags)
import Vulkan.Core10.Enums.AccessFlagBits (AccessFlagBits(ACCESS_COMMAND_PREPROCESS_READ_BIT_NV))
import Vulkan.Core10.Enums.AccessFlagBits (AccessFlags)
import Vulkan.Core10.Enums.AccessFlagBits (AccessFlagBits(ACCESS_COMMAND_PREPROCESS_WRITE_BIT_NV))
import Vulkan.Core10.Enums.PipelineStageFlagBits (PipelineStageFlags)
import Vulkan.Core10.Enums.PipelineStageFlagBits (PipelineStageFlagBits(PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_EXT))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_EXT))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_GENERATED_COMMANDS_PIPELINE_INFO_EXT))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_GENERATED_COMMANDS_SHADER_INFO_EXT))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_EXT))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_EXT))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_INDIRECT_EXECUTION_SET_CREATE_INFO_EXT))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_INDIRECT_EXECUTION_SET_PIPELINE_INFO_EXT))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_INDIRECT_EXECUTION_SET_SHADER_INFO_EXT))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_INDIRECT_EXECUTION_SET_SHADER_LAYOUT_INFO_EXT))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_EXT))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_EXT))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_WRITE_INDIRECT_EXECUTION_SET_PIPELINE_EXT))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_WRITE_INDIRECT_EXECUTION_SET_SHADER_EXT))
import Vulkan.Core10.Enums.Result (Result(SUCCESS))
import Vulkan.Extensions.VK_KHR_maintenance5 (BufferUsageFlagBits2KHR(..))
import Vulkan.Extensions.VK_KHR_maintenance5 (BufferUsageFlags2KHR)
import Vulkan.Extensions.Handles (IndirectCommandsLayoutEXT(..))
import Vulkan.Extensions.Handles (IndirectExecutionSetEXT(..))
import Vulkan.Extensions.VK_KHR_maintenance5 (PipelineCreateFlagBits2KHR(..))
import Vulkan.Extensions.VK_KHR_maintenance5 (PipelineCreateFlags2KHR)
import Vulkan.Extensions.VK_EXT_shader_object (ShaderCreateFlagBitsEXT(..))
import Vulkan.Extensions.VK_EXT_shader_object (ShaderCreateFlagsEXT)
import Vulkan.Extensions.Handles (ShaderEXT(..))
foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkCmdExecuteGeneratedCommandsEXT
  :: FunPtr (Ptr CommandBuffer_T -> Bool32 -> Ptr (SomeStruct GeneratedCommandsInfoEXT) -> IO ()) -> Ptr CommandBuffer_T -> Bool32 -> Ptr (SomeStruct GeneratedCommandsInfoEXT) -> 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
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-magFilter-04553# If a
--     'Vulkan.Core10.Handles.Sampler' created with @magFilter@ or
--     @minFilter@ equal to 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR',
--     @reductionMode@ equal to
--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE',
--     and @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE'
--     is used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of
--     this command, then the image view’s
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
--     /must/ contain
--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-magFilter-09598# If a
--     'Vulkan.Core10.Handles.Sampler' created with @magFilter@ or
--     @minFilter@ equal to 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' and
--     @reductionMode@ equal to either
--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'
--     or
--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'
--     is used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of
--     this command, then the image view’s
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
--     /must/ contain
--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-mipmapMode-04770# If a
--     'Vulkan.Core10.Handles.Sampler' created with @mipmapMode@ equal to
--     'Vulkan.Core10.Enums.SamplerMipmapMode.SAMPLER_MIPMAP_MODE_LINEAR',
--     @reductionMode@ equal to
--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE',
--     and @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE'
--     is used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of
--     this command, then the image view’s
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
--     /must/ contain
--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-mipmapMode-09599# If a
--     'Vulkan.Core10.Handles.Sampler' created with @mipmapMode@ equal to
--     'Vulkan.Core10.Enums.SamplerMipmapMode.SAMPLER_MIPMAP_MODE_LINEAR'
--     and @reductionMode@ equal to either
--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'
--     or
--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'
--     is used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of
--     this command, then the image view’s
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
--     /must/ contain
--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-unnormalizedCoordinates-09635#
--     If a 'Vulkan.Core10.Handles.Sampler' created with
--     @unnormalizedCoordinates@ equal to
--     'Vulkan.Core10.FundamentalTypes.TRUE' is used to sample a
--     'Vulkan.Core10.Handles.ImageView' as a result of this command, then
--     the image view’s @levelCount@ and @layerCount@ /must/ be 1
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-unnormalizedCoordinates-09636#
--     If a 'Vulkan.Core10.Handles.Sampler' created with
--     @unnormalizedCoordinates@ equal to
--     'Vulkan.Core10.FundamentalTypes.TRUE' is used to sample a
--     'Vulkan.Core10.Handles.ImageView' as a result of this command, then
--     the image view’s @viewType@ /must/ be
--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D' or
--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-06479# If a
--     'Vulkan.Core10.Handles.ImageView' is sampled with
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-depth-compare-operation depth comparison>,
--     the image view’s
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
--     /must/ contain
--     'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-02691# If a
--     'Vulkan.Core10.Handles.ImageView' is accessed using atomic
--     operations as a result of this command, then the image view’s
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
--     /must/ contain
--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07888# If a
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER'
--     descriptor is accessed using atomic operations as a result of this
--     command, then the storage texel buffer’s
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-buffer-view-format-features format features>
--     /must/ contain
--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-02692# If a
--     'Vulkan.Core10.Handles.ImageView' is sampled with
--     'Vulkan.Core10.Enums.Filter.FILTER_CUBIC_EXT' as a result of this
--     command, then the image view’s
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
--     /must/ contain
--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-02693# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_filter_cubic VK_EXT_filter_cubic>
--     extension is not enabled and any 'Vulkan.Core10.Handles.ImageView'
--     is sampled with 'Vulkan.Core10.Enums.Filter.FILTER_CUBIC_EXT' as a
--     result of this command, it /must/ not have a
--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' of
--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',
--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE', or
--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-filterCubic-02694# Any
--     'Vulkan.Core10.Handles.ImageView' being sampled with
--     'Vulkan.Core10.Enums.Filter.FILTER_CUBIC_EXT' as a result of this
--     command /must/ have a
--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that
--     supports cubic filtering, as specified by
--     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubic@
--     returned by
--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-filterCubicMinmax-02695# Any
--     'Vulkan.Core10.Handles.ImageView' being sampled with
--     'Vulkan.Core10.Enums.Filter.FILTER_CUBIC_EXT' with a reduction mode
--     of either
--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN'
--     or
--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX'
--     as a result of this command /must/ have a
--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' and format that
--     supports cubic filtering together with minmax filtering, as
--     specified by
--     'Vulkan.Extensions.VK_EXT_filter_cubic.FilterCubicImageViewImageFormatPropertiesEXT'::@filterCubicMinmax@
--     returned by
--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-cubicRangeClamp-09212# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-cubicRangeClamp cubicRangeClamp>
--     feature is not enabled, then any 'Vulkan.Core10.Handles.ImageView'
--     being sampled with 'Vulkan.Core10.Enums.Filter.FILTER_CUBIC_EXT' as
--     a result of this command /must/ not have a
--     'Vulkan.Core12.Promoted_From_VK_EXT_sampler_filter_minmax.SamplerReductionModeCreateInfo'::@reductionMode@
--     equal to
--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-reductionMode-09213# Any
--     'Vulkan.Core10.Handles.ImageView' being sampled with a
--     'Vulkan.Core12.Promoted_From_VK_EXT_sampler_filter_minmax.SamplerReductionModeCreateInfo'::@reductionMode@
--     equal to
--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM'
--     as a result of this command /must/ sample with
--     'Vulkan.Core10.Enums.Filter.FILTER_CUBIC_EXT'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-selectableCubicWeights-09214#
--     If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-selectableCubicWeights selectableCubicWeights>
--     feature is not enabled, then any 'Vulkan.Core10.Handles.ImageView'
--     being sampled with 'Vulkan.Core10.Enums.Filter.FILTER_CUBIC_EXT' as
--     a result of this command /must/ have
--     'Vulkan.Extensions.VK_QCOM_filter_cubic_weights.SamplerCubicWeightsCreateInfoQCOM'::@cubicWeights@
--     equal to
--     'Vulkan.Extensions.VK_QCOM_filter_cubic_weights.CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-flags-02696# Any
--     'Vulkan.Core10.Handles.Image' created with a
--     'Vulkan.Core10.Image.ImageCreateInfo'::@flags@ containing
--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_CORNER_SAMPLED_BIT_NV'
--     sampled as a result of this command /must/ only be sampled using a
--     'Vulkan.Core10.Enums.SamplerAddressMode.SamplerAddressMode' of
--     'Vulkan.Core10.Enums.SamplerAddressMode.SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-OpTypeImage-07027# For any
--     'Vulkan.Core10.Handles.ImageView' being written as a storage image
--     where the image format field of the @OpTypeImage@ is @Unknown@, the
--     view’s
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
--     /must/ contain
--     'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-OpTypeImage-07028# For any
--     'Vulkan.Core10.Handles.ImageView' being read as a storage image
--     where the image format field of the @OpTypeImage@ is @Unknown@, the
--     view’s
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
--     /must/ contain
--     'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-OpTypeImage-07029# For any
--     'Vulkan.Core10.Handles.BufferView' being written as a storage texel
--     buffer where the image format field of the @OpTypeImage@ is
--     @Unknown@, the view’s
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkFormatProperties3 buffer features>
--     /must/ contain
--     'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-OpTypeImage-07030# Any
--     'Vulkan.Core10.Handles.BufferView' being read as a storage texel
--     buffer where the image format field of the @OpTypeImage@ is
--     @Unknown@ then the view’s
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkFormatProperties3 buffer features>
--     /must/ contain
--     'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-08600# For each set /n/
--     that is statically used by
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding a bound shader>,
--     a descriptor set /must/ have been bound to /n/ at the same pipeline
--     bind point, with a 'Vulkan.Core10.Handles.PipelineLayout' that is
--     compatible for set /n/, with the
--     'Vulkan.Core10.Handles.PipelineLayout' used to create the current
--     'Vulkan.Core10.Handles.Pipeline' or the
--     'Vulkan.Core10.Handles.DescriptorSetLayout' array used to create the
--     current 'Vulkan.Extensions.Handles.ShaderEXT' , as described in
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-08601# For each push
--     constant that is statically used by
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding a bound shader>,
--     a push constant value /must/ have been set for the same pipeline
--     bind point, with a 'Vulkan.Core10.Handles.PipelineLayout' that is
--     compatible for push constants, with the
--     'Vulkan.Core10.Handles.PipelineLayout' used to create the current
--     'Vulkan.Core10.Handles.Pipeline' or the
--     'Vulkan.Core10.Handles.DescriptorSetLayout' array used to create the
--     current 'Vulkan.Extensions.Handles.ShaderEXT' , as described in
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-10068# For each array of
--     resources that is used by
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding 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
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-maintenance4-08602# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-maintenance4 maintenance4>
--     feature is not enabled, then for each push constant that is
--     statically used by
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding a bound shader>,
--     a push constant value /must/ have been set for the same pipeline
--     bind point, with a 'Vulkan.Core10.Handles.PipelineLayout' that is
--     compatible for push constants, with the
--     'Vulkan.Core10.Handles.PipelineLayout' used to create the current
--     'Vulkan.Core10.Handles.Pipeline' or the
--     'Vulkan.Core10.Handles.DescriptorSetLayout' and
--     'Vulkan.Core10.PipelineLayout.PushConstantRange' arrays used to
--     create the current 'Vulkan.Extensions.Handles.ShaderEXT' , as
--     described in
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-08114# Descriptors in
--     each bound descriptor set, specified via
--     'Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets', /must/
--     be valid as described by
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptor-validity descriptor validity>
--     if they are statically used by the 'Vulkan.Core10.Handles.Pipeline'
--     bound to the pipeline bind point used by this command and the bound
--     'Vulkan.Core10.Handles.Pipeline' was not created with
--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-08115# If the
--     descriptors used by the 'Vulkan.Core10.Handles.Pipeline' bound to
--     the pipeline bind point were specified via
--     'Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets', the
--     bound 'Vulkan.Core10.Handles.Pipeline' /must/ have been created
--     without
--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-08116# Descriptors in
--     bound descriptor buffers, specified via
--     'Vulkan.Extensions.VK_EXT_descriptor_buffer.cmdSetDescriptorBufferOffsetsEXT',
--     /must/ be valid if they are dynamically used by the
--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point
--     used by this command and the bound 'Vulkan.Core10.Handles.Pipeline'
--     was created with
--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-08604# Descriptors in
--     bound descriptor buffers, specified via
--     'Vulkan.Extensions.VK_EXT_descriptor_buffer.cmdSetDescriptorBufferOffsetsEXT',
--     /must/ be valid if they are dynamically used by any
--     'Vulkan.Extensions.Handles.ShaderEXT' bound to a stage corresponding
--     to the pipeline bind point used by this command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-08117# If the
--     descriptors used by the 'Vulkan.Core10.Handles.Pipeline' bound to
--     the pipeline bind point were specified via
--     'Vulkan.Extensions.VK_EXT_descriptor_buffer.cmdSetDescriptorBufferOffsetsEXT',
--     the bound 'Vulkan.Core10.Handles.Pipeline' /must/ have been created
--     with
--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-08119# If a descriptor
--     is dynamically used with a 'Vulkan.Core10.Handles.Pipeline' created
--     with
--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT',
--     the descriptor memory /must/ be resident
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-08605# If a descriptor
--     is dynamically used with a 'Vulkan.Extensions.Handles.ShaderEXT'
--     created with a 'Vulkan.Core10.Handles.DescriptorSetLayout' that was
--     created with
--     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT',
--     the descriptor memory /must/ be resident
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-08606# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shaderObject shaderObject>
--     feature is not enabled, a valid pipeline /must/ be bound to the
--     pipeline bind point used by this command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-08608# 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 'Vulkan.Core10.Handles.Pipeline'
--     object bound to the pipeline bind point used by this command, since
--     that pipeline was bound
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-08609# If the
--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
--     point used by this command or any
--     'Vulkan.Extensions.Handles.ShaderEXT' bound to a stage corresponding
--     to the pipeline bind point used by this command accesses a
--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
--     coordinates, that sampler /must/ not be used to sample from any
--     'Vulkan.Core10.Handles.Image' with a
--     'Vulkan.Core10.Handles.ImageView' of the type
--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',
--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',
--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',
--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' or
--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in
--     any shader stage
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-08610# If the
--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
--     point used by this command or any
--     'Vulkan.Extensions.Handles.ShaderEXT' bound to a stage corresponding
--     to the pipeline bind point used by this command accesses a
--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
--     coordinates, that sampler /must/ not be used with any of the SPIR-V
--     @OpImageSample*@ or @OpImageSparseSample*@ instructions with
--     @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-08611# If the
--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
--     point used by this command or any
--     'Vulkan.Extensions.Handles.ShaderEXT' bound to a stage corresponding
--     to the pipeline bind point used by this command accesses a
--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
--     coordinates, that sampler /must/ not be used with any of the SPIR-V
--     @OpImageSample*@ or @OpImageSparseSample*@ instructions that
--     includes a LOD bias or any offset values, in any shader stage
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-08607# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shaderObject 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 'Vulkan.Core10.APIConstants.NULL_HANDLE' shader objects
--     /must/ be bound to every supported shader stage corresponding to the
--     pipeline bind point used by this command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-uniformBuffers-06935# If any
--     stage of the 'Vulkan.Core10.Handles.Pipeline' object bound to the
--     pipeline bind point used by this command accesses a uniform buffer,
--     and that stage was created without enabling either
--     'Vulkan.Extensions.VK_EXT_pipeline_robustness.PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_EXT'
--     or
--     'Vulkan.Extensions.VK_EXT_pipeline_robustness.PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT'
--     for @uniformBuffers@, and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess 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
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-08612# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robustBufferAccess>
--     feature is not enabled, and any
--     'Vulkan.Extensions.Handles.ShaderEXT' bound to a stage corresponding
--     to the pipeline bind point used by this command accesses a uniform
--     buffer, it /must/ not access values outside of the range of the
--     buffer as specified in the descriptor set bound to the same pipeline
--     bind point
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-storageBuffers-06936# If any
--     stage of the 'Vulkan.Core10.Handles.Pipeline' object bound to the
--     pipeline bind point used by this command accesses a storage buffer,
--     and that stage was created without enabling either
--     'Vulkan.Extensions.VK_EXT_pipeline_robustness.PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_EXT'
--     or
--     'Vulkan.Extensions.VK_EXT_pipeline_robustness.PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT'
--     for @storageBuffers@, and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess 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
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-08613# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robustBufferAccess>
--     feature is not enabled, and any
--     'Vulkan.Extensions.Handles.ShaderEXT' bound to a stage corresponding
--     to the pipeline bind point used by this command accesses a storage
--     buffer, it /must/ not access values outside of the range of the
--     buffer as specified in the descriptor set bound to the same pipeline
--     bind point
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-commandBuffer-02707# If
--     @commandBuffer@ is an unprotected command buffer and
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-protectedNoFault protectedNoFault>
--     is not supported, any resource accessed by
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding bound shaders>
--     /must/ not be a protected resource
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-06550# If
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding a bound shader>
--     accesses a 'Vulkan.Core10.Handles.Sampler' or
--     'Vulkan.Core10.Handles.ImageView' object that enables
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>,
--     that object /must/ only be used with @OpImageSample*@ or
--     @OpImageSparseSample*@ instructions
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-ConstOffset-06551# If
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding a bound shader>
--     accesses a 'Vulkan.Core10.Handles.Sampler' or
--     'Vulkan.Core10.Handles.ImageView' object that enables
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>,
--     that object /must/ not use the @ConstOffset@ and @Offset@ operands
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-viewType-07752# If a
--     'Vulkan.Core10.Handles.ImageView' is accessed as a result of this
--     command, then the image view’s @viewType@ /must/ match the @Dim@
--     operand of the @OpTypeImage@ as described in
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#spirvenv-image-dimensions ???>
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-format-07753# If a
--     'Vulkan.Core10.Handles.ImageView' is accessed as a result of this
--     command, then the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-numericformat numeric type>
--     of the image view’s @format@ and the @Sampled@ @Type@ operand of the
--     @OpTypeImage@ /must/ match
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-OpImageWrite-08795# If a
--     'Vulkan.Core10.Handles.ImageView' created with a format other than
--     'Vulkan.Core10.Enums.Format.FORMAT_A8_UNORM_KHR' is accessed using
--     @OpImageWrite@ as a result of this command, then the @Type@ of the
--     @Texel@ operand of that instruction /must/ have at least as many
--     components as the image view’s format
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-OpImageWrite-08796# If a
--     'Vulkan.Core10.Handles.ImageView' created with the format
--     'Vulkan.Core10.Enums.Format.FORMAT_A8_UNORM_KHR' is accessed using
--     @OpImageWrite@ as a result of this command, then the @Type@ of the
--     @Texel@ operand of that instruction /must/ have four components
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-OpImageWrite-04469# If a
--     'Vulkan.Core10.Handles.BufferView' is accessed using @OpImageWrite@
--     as a result of this command, then the @Type@ of the @Texel@ operand
--     of that instruction /must/ have at least as many components as the
--     buffer view’s format
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-SampledType-04470# If a
--     'Vulkan.Core10.Handles.ImageView' with a
--     'Vulkan.Core10.Enums.Format.Format' that has a 64-bit component
--     width is accessed as a result of this command, the @SampledType@ of
--     the @OpTypeImage@ operand of that instruction /must/ have a @Width@
--     of 64
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-SampledType-04471# If a
--     'Vulkan.Core10.Handles.ImageView' with a
--     'Vulkan.Core10.Enums.Format.Format' that has a component width less
--     than 64-bit is accessed as a result of this command, the
--     @SampledType@ of the @OpTypeImage@ operand of that instruction
--     /must/ have a @Width@ of 32
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-SampledType-04472# If a
--     'Vulkan.Core10.Handles.BufferView' with a
--     'Vulkan.Core10.Enums.Format.Format' that has a 64-bit component
--     width is accessed as a result of this command, the @SampledType@ of
--     the @OpTypeImage@ operand of that instruction /must/ have a @Width@
--     of 64
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-SampledType-04473# If a
--     'Vulkan.Core10.Handles.BufferView' with a
--     'Vulkan.Core10.Enums.Format.Format' that has a component width less
--     than 64-bit is accessed as a result of this command, the
--     @SampledType@ of the @OpTypeImage@ operand of that instruction
--     /must/ have a @Width@ of 32
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-sparseImageInt64Atomics-04474#
--     If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>
--     feature is not enabled, 'Vulkan.Core10.Handles.Image' objects
--     created with the
--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SPARSE_RESIDENCY_BIT'
--     flag /must/ not be accessed by atomic instructions through an
--     @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this
--     command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-sparseImageInt64Atomics-04475#
--     If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>
--     feature is not enabled, 'Vulkan.Core10.Handles.Buffer' objects
--     created with the
--     'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_SPARSE_RESIDENCY_BIT'
--     flag /must/ not be accessed by atomic instructions through an
--     @OpTypeImage@ with a @SampledType@ with a @Width@ of 64 by this
--     command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-OpImageWeightedSampleQCOM-06971#
--     If @OpImageWeightedSampleQCOM@ is used to sample a
--     'Vulkan.Core10.Handles.ImageView' as a result of this command, then
--     the image view’s
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
--     /must/ contain
--     'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-OpImageWeightedSampleQCOM-06972#
--     If @OpImageWeightedSampleQCOM@ uses a
--     'Vulkan.Core10.Handles.ImageView' as a sample weight image as a
--     result of this command, then the image view’s
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
--     /must/ contain
--     'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-OpImageBoxFilterQCOM-06973#
--     If @OpImageBoxFilterQCOM@ is used to sample a
--     'Vulkan.Core10.Handles.ImageView' as a result of this command, then
--     the image view’s
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
--     /must/ contain
--     'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-OpImageBlockMatchSSDQCOM-06974#
--     If @OpImageBlockMatchSSDQCOM@ is used to read from an
--     'Vulkan.Core10.Handles.ImageView' as a result of this command, then
--     the image view’s
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
--     /must/ contain
--     'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-OpImageBlockMatchSADQCOM-06975#
--     If @OpImageBlockMatchSADQCOM@ is used to read from an
--     'Vulkan.Core10.Handles.ImageView' as a result of this command, then
--     the image view’s
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
--     /must/ contain
--     'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-OpImageBlockMatchSADQCOM-06976#
--     If @OpImageBlockMatchSADQCOM@ or OpImageBlockMatchSSDQCOM is used to
--     read from a reference image as result of this command, then the
--     specified reference coordinates /must/ not fail
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-integer-coordinate-validation integer texel coordinate validation>
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-OpImageWeightedSampleQCOM-06977#
--     If @OpImageWeightedSampleQCOM@, @OpImageBoxFilterQCOM@,
--     @OpImageBlockMatchWindowSSDQCOM@, @OpImageBlockMatchWindowSADQCOM@,
--     @OpImageBlockMatchGatherSSDQCOM@, @OpImageBlockMatchGatherSADQCOM@,
--     @OpImageBlockMatchSSDQCOM@, or @OpImageBlockMatchSADQCOM@ uses a
--     'Vulkan.Core10.Handles.Sampler' as a result of this command, then
--     the sampler /must/ have been created with
--     'Vulkan.Core10.Enums.SamplerCreateFlagBits.SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-OpImageWeightedSampleQCOM-06978#
--     If any command other than @OpImageWeightedSampleQCOM@,
--     @OpImageBoxFilterQCOM@, @OpImageBlockMatchWindowSSDQCOM@,
--     @OpImageBlockMatchWindowSADQCOM@, @OpImageBlockMatchGatherSSDQCOM@,
--     @OpImageBlockMatchGatherSADQCOM@, @OpImageBlockMatchSSDQCOM@, or
--     @OpImageBlockMatchSADQCOM@ uses a 'Vulkan.Core10.Handles.Sampler' as
--     a result of this command, then the sampler /must/ not have been
--     created with
--     'Vulkan.Core10.Enums.SamplerCreateFlagBits.SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-OpImageBlockMatchWindow-09215#
--     If a @OpImageBlockMatchWindow*QCOM@ or
--     @OpImageBlockMatchGather*QCOM@ instruction is used to read from an
--     'Vulkan.Core10.Handles.ImageView' as a result of this command, then
--     the image view’s
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
--     /must/ contain
--     'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-OpImageBlockMatchWindow-09216#
--     If a @OpImageBlockMatchWindow*QCOM@ or
--     @OpImageBlockMatchGather*QCOM@ instruction is used to read from an
--     'Vulkan.Core10.Handles.ImageView' as a result of this command, then
--     the image view’s format /must/ be a single-component format
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-OpImageBlockMatchWindow-09217#
--     If a @OpImageBlockMatchWindow*QCOM@ or
--     @OpImageBlockMatchGather*QCOM@ read from a reference image as result
--     of this command, then the specified reference coordinates /must/ not
--     fail
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-integer-coordinate-validation integer texel coordinate validation>
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07288# Any shader
--     invocation executed by this command /must/
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-termination terminate>
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-09600# If a descriptor
--     with type equal to any of
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM',
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM',
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE',
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE',
--     or
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT'
--     is 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
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-renderPass-02684# The current
--     render pass /must/ be
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-compatibility compatible>
--     with the @renderPass@ member of the
--     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' structure
--     specified when creating the 'Vulkan.Core10.Handles.Pipeline' bound
--     to
--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-subpass-02685# The subpass
--     index of the current render pass /must/ be equal to the @subpass@
--     member of the 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'
--     structure specified when creating the
--     'Vulkan.Core10.Handles.Pipeline' bound to
--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07748# If any shader
--     statically accesses an input attachment, a valid descriptor /must/
--     be bound to the pipeline via a descriptor set
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-OpTypeImage-07468# If any
--     shader executed by this pipeline accesses an @OpTypeImage@ variable
--     with a @Dim@ operand of @SubpassData@, it /must/ be decorated with
--     an @InputAttachmentIndex@ that corresponds to a valid input
--     attachment in the current subpass
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07469# Input attachment
--     views accessed in a subpass /must/ be created with the same
--     'Vulkan.Core10.Enums.Format.Format' as the corresponding subpass
--     definition, and be created with a 'Vulkan.Core10.Handles.ImageView'
--     that is compatible with the attachment referenced by the subpass\'
--     @pInputAttachments@[@InputAttachmentIndex@] in the bound
--     'Vulkan.Core10.Handles.Framebuffer' as specified by
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#compatibility-inputattachment Fragment Input Attachment Compatibility>
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-pDepthInputAttachmentIndex-09595#
--     Input attachment views accessed in a dynamic render pass with a
--     @InputAttachmentIndex@ referenced by
--     'Vulkan.Extensions.VK_KHR_dynamic_rendering_local_read.RenderingInputAttachmentIndexInfoKHR',
--     or no @InputAttachmentIndex@ if
--     'Vulkan.Extensions.VK_KHR_dynamic_rendering_local_read.RenderingInputAttachmentIndexInfoKHR':@pDepthInputAttachmentIndex@
--     or
--     'Vulkan.Extensions.VK_KHR_dynamic_rendering_local_read.RenderingInputAttachmentIndexInfoKHR':@pStencilInputAttachmentIndex@
--     are @NULL@, /must/ be created with a
--     'Vulkan.Core10.Handles.ImageView' that is compatible with the
--     corresponding color, depth, or stencil attachment in
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.RenderingInfo'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-pDepthInputAttachmentIndex-09596#
--     Input attachment views accessed in a dynamic render pass via a
--     shader object /must/ have an @InputAttachmentIndex@ if both
--     'Vulkan.Extensions.VK_KHR_dynamic_rendering_local_read.RenderingInputAttachmentIndexInfoKHR':@pDepthInputAttachmentIndex@
--     and
--     'Vulkan.Extensions.VK_KHR_dynamic_rendering_local_read.RenderingInputAttachmentIndexInfoKHR':@pStencilInputAttachmentIndex@
--     are non-@NULL@
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-InputAttachmentIndex-09597#
--     If an input attachment view accessed in a dynamic render pass via a
--     shader object has an @InputAttachmentIndex@, the
--     @InputAttachmentIndex@ /must/ match an index in
--     'Vulkan.Extensions.VK_KHR_dynamic_rendering_local_read.RenderingInputAttachmentIndexInfoKHR'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-06537# 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
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-09000# 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
--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT'
--     image layout, and either:
--
--     -   the
--         'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT'
--         is set on the bound pipeline or
--
--     -   the last call to
--         'Vulkan.Extensions.VK_EXT_attachment_feedback_loop_dynamic_state.cmdSetAttachmentFeedbackLoopEnableEXT'
--         included
--         'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT'
--         and
--
--         -   there is no bound graphics pipeline or
--
--         -   the bound graphics pipeline was created with
--             'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT'
--
--     it /must/ not be accessed in any way other than as an attachment by
--     this command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-09001# 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
--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT'
--     image layout, and either:
--
--     -   the
--         'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT'
--         is set on the bound pipeline or
--
--     -   the last call to
--         'Vulkan.Extensions.VK_EXT_attachment_feedback_loop_dynamic_state.cmdSetAttachmentFeedbackLoopEnableEXT'
--         included
--         'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT'
--         and
--
--         -   there is no bound graphics pipeline or
--
--         -   the bound graphics pipeline was created with
--             'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT'
--
--     it /must/ not be accessed in any way other than as an attachment by
--     this command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-09002# 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
--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT'
--     image layout, and either:
--
--     -   the
--         'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT'
--         is set on the bound pipeline or
--
--     -   the last call to
--         'Vulkan.Extensions.VK_EXT_attachment_feedback_loop_dynamic_state.cmdSetAttachmentFeedbackLoopEnableEXT'
--         included
--         'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT'
--         and
--
--         -   there is no bound graphics pipeline or
--
--         -   the bound graphics pipeline was created with
--             'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT'
--
--     it /must/ not be accessed in any way other than as an attachment by
--     this command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-09003# 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
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-06539# 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
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-06886# If the current
--     render pass instance uses a depth\/stencil attachment with a
--     read-only layout for the depth aspect,
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-depth-write depth writes>
--     /must/ be disabled
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-06887# If the current
--     render pass instance uses a depth\/stencil attachment with a
--     read-only layout for the stencil aspect, both front and back
--     @writeMask@ are not zero, and stencil test is enabled,
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fragops-stencil all stencil ops>
--     /must/ be 'Vulkan.Core10.Enums.StencilOp.STENCIL_OP_KEEP'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07831# If the bound
--     graphics pipeline state was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT' dynamic
--     state enabled then
--     'Vulkan.Core10.CommandBufferBuilding.cmdSetViewport' /must/ have
--     been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07832# If the bound
--     graphics pipeline state was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR' dynamic
--     state enabled then
--     'Vulkan.Core10.CommandBufferBuilding.cmdSetScissor' /must/ have been
--     called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07833# If the bound
--     graphics pipeline state was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_LINE_WIDTH' dynamic
--     state enabled then
--     'Vulkan.Core10.CommandBufferBuilding.cmdSetLineWidth' /must/ have
--     been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-08617# If a shader
--     object is bound to any graphics stage, and the most recent call to
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state2.cmdSetRasterizerDiscardEnable'
--     in the current command buffer set @rasterizerDiscardEnable@ to
--     'Vulkan.Core10.FundamentalTypes.FALSE', and the most recent call to
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetPolygonModeEXT'
--     in the current command buffer set @polygonMode@ to
--     'Vulkan.Core10.Enums.PolygonMode.POLYGON_MODE_LINE',
--     'Vulkan.Core10.CommandBufferBuilding.cmdSetLineWidth' /must/ have
--     been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-08618# If a shader
--     object is bound to any graphics stage, and the most recent call to
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state2.cmdSetRasterizerDiscardEnable'
--     in the current command buffer set @rasterizerDiscardEnable@ to
--     'Vulkan.Core10.FundamentalTypes.FALSE', and the most recent call to
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state.cmdSetPrimitiveTopology'
--     in the current command buffer set @primitiveTopology@ to any line
--     topology, 'Vulkan.Core10.CommandBufferBuilding.cmdSetLineWidth'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-08619# If a shader
--     object that outputs line primitives is bound to the
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TESSELLATION_EVALUATION_BIT'
--     or
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_GEOMETRY_BIT'
--     stage, and the most recent call to
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state2.cmdSetRasterizerDiscardEnable'
--     in the current command buffer set @rasterizerDiscardEnable@ to
--     'Vulkan.Core10.FundamentalTypes.FALSE',
--     'Vulkan.Core10.CommandBufferBuilding.cmdSetLineWidth' /must/ have
--     been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07834# If a shader
--     object is bound to any graphics stage or a graphics pipeline is
--     bound which was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_BIAS' dynamic
--     state enabled, the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @rasterizerDiscardEnable@ is
--     'Vulkan.Core10.FundamentalTypes.FALSE', and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @depthBiasEnable@ is 'Vulkan.Core10.FundamentalTypes.TRUE', then
--     'Vulkan.Core10.CommandBufferBuilding.cmdSetDepthBounds' or
--     'Vulkan.Extensions.VK_EXT_depth_bias_control.cmdSetDepthBias2EXT'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07835# If the bound
--     graphics pipeline state was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_BLEND_CONSTANTS'
--     dynamic state enabled then
--     'Vulkan.Core10.CommandBufferBuilding.cmdSetBlendConstants' /must/
--     have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-08621# If a shader
--     object is bound to the
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_FRAGMENT_BIT'
--     stage, and the most recent call to
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state2.cmdSetRasterizerDiscardEnable'
--     in the current command buffer set @rasterizerDiscardEnable@ to
--     'Vulkan.Core10.FundamentalTypes.FALSE', and the most recent call to
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetColorBlendEnableEXT'
--     in the current command buffer set any element of
--     @pColorBlendEnables@ to 'Vulkan.Core10.FundamentalTypes.TRUE', and
--     the most recent call to
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetColorBlendEquationEXT'
--     in the current command buffer set the same element of
--     @pColorBlendEquations@ to a
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.ColorBlendEquationEXT'
--     structure with any 'Vulkan.Core10.Enums.BlendFactor.BlendFactor'
--     member with a value of
--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_CONSTANT_COLOR',
--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR',
--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_CONSTANT_ALPHA', or
--     'Vulkan.Core10.Enums.BlendFactor.BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA',
--     'Vulkan.Core10.CommandBufferBuilding.cmdSetBlendConstants' /must/
--     have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07836# If a shader
--     object is bound to any graphics stage or a graphics pipeline is
--     bound which was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_BOUNDS'
--     dynamic state enabled, the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @rasterizerDiscardEnable@ is
--     'Vulkan.Core10.FundamentalTypes.FALSE', and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @depthBoundsTestEnable@ is 'Vulkan.Core10.FundamentalTypes.TRUE',
--     then 'Vulkan.Core10.CommandBufferBuilding.cmdSetDepthBounds' /must/
--     have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07837# If a shader
--     object is bound to any graphics stage or a graphics pipeline is
--     bound which was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_STENCIL_COMPARE_MASK'
--     dynamic state enabled, the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @rasterizerDiscardEnable@ is
--     'Vulkan.Core10.FundamentalTypes.FALSE', and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @stencilTestEnable@ is 'Vulkan.Core10.FundamentalTypes.TRUE',
--     then 'Vulkan.Core10.CommandBufferBuilding.cmdSetStencilCompareMask'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07838# If a shader
--     object is bound to any graphics stage or a graphics pipeline is
--     bound which was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_STENCIL_WRITE_MASK'
--     dynamic state enabled, the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @rasterizerDiscardEnable@ is
--     'Vulkan.Core10.FundamentalTypes.FALSE', and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @stencilTestEnable@ is 'Vulkan.Core10.FundamentalTypes.TRUE',
--     then 'Vulkan.Core10.CommandBufferBuilding.cmdSetStencilWriteMask'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07839# If a shader
--     object is bound to any graphics stage or a graphics pipeline is
--     bound which was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_STENCIL_REFERENCE'
--     dynamic state enabled, the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of and @rasterizerDiscardEnable@ is
--     'Vulkan.Core10.FundamentalTypes.FALSE', the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @stencilTestEnable@ is 'Vulkan.Core10.FundamentalTypes.TRUE',
--     then 'Vulkan.Core10.CommandBufferBuilding.cmdSetStencilReference'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-maxMultiviewInstanceIndex-02688#
--     If the draw is recorded in a render pass instance with multiview
--     enabled, the maximum instance index /must/ be less than or equal to
--     'Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewProperties'::@maxMultiviewInstanceIndex@
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-sampleLocationsEnable-02689#
--     If the bound graphics pipeline was created with
--     'Vulkan.Extensions.VK_EXT_sample_locations.PipelineSampleLocationsStateCreateInfoEXT'::@sampleLocationsEnable@
--     set to 'Vulkan.Core10.FundamentalTypes.TRUE' and the current subpass
--     has a depth\/stencil attachment, then that attachment /must/ have
--     been created with the
--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'
--     bit set
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07634# If the
--     @VK_EXT_sample_locations@ extension is enabled, a shader object is
--     bound to any graphics stage or a graphics pipeline is bound which
--     was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT'
--     dynamic state enabled, and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @rasterizerDiscardEnable@ is
--     'Vulkan.Core10.FundamentalTypes.FALSE', then
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetSampleLocationsEnableEXT'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-06666# If the
--     @VK_EXT_sample_locations@ extension is enabled, a shader object is
--     bound to any graphics stage or a graphics pipeline is bound which
--     was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT'
--     dynamic state enabled, the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @rasterizerDiscardEnable@ is
--     'Vulkan.Core10.FundamentalTypes.FALSE', and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @sampleLocationsEnable@ is 'Vulkan.Core10.FundamentalTypes.TRUE',
--     then
--     'Vulkan.Extensions.VK_EXT_sample_locations.cmdSetSampleLocationsEXT'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07840# If a shader
--     object is bound to any graphics stage or a graphics pipeline is
--     bound which was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_CULL_MODE' dynamic
--     state enabled, and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @rasterizerDiscardEnable@ is
--     'Vulkan.Core10.FundamentalTypes.FALSE', then
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state.cmdSetCullMode'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07841# If a shader
--     object is bound to any graphics stage or a graphics pipeline is
--     bound which was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRONT_FACE' dynamic
--     state enabled, and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @rasterizerDiscardEnable@ is
--     'Vulkan.Core10.FundamentalTypes.FALSE', then
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state.cmdSetFrontFace'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07843# If a shader
--     object is bound to any graphics stage or a graphics pipeline is
--     bound which was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_TEST_ENABLE'
--     dynamic state enabled, and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @rasterizerDiscardEnable@ is
--     'Vulkan.Core10.FundamentalTypes.FALSE',
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state.cmdSetDepthTestEnable'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07844# If a shader
--     object is bound to any graphics stage or a graphics pipeline is
--     bound which was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_WRITE_ENABLE'
--     dynamic state enabled, and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @rasterizerDiscardEnable@ is
--     'Vulkan.Core10.FundamentalTypes.FALSE', then
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state.cmdSetDepthWriteEnable'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07845# If a shader
--     object is bound to any graphics stage or a graphics pipeline is
--     bound which was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_COMPARE_OP'
--     dynamic state enabled, the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @rasterizerDiscardEnable@ is
--     'Vulkan.Core10.FundamentalTypes.FALSE', and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @depthTestEnable@ is 'Vulkan.Core10.FundamentalTypes.TRUE', then
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state.cmdSetDepthCompareOp'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07846# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-depthBounds depthBounds>
--     feature is enabled, a shader object is bound to any graphics stage
--     or a graphics pipeline is bound which was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE'
--     dynamic state enabled, and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @rasterizerDiscardEnable@ is
--     'Vulkan.Core10.FundamentalTypes.FALSE', then
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state.cmdSetDepthBoundsTestEnable'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07847# If a shader
--     object is bound to any graphics stage or a graphics pipeline is
--     bound which was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_STENCIL_TEST_ENABLE'
--     dynamic state enabled, and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @rasterizerDiscardEnable@ is
--     'Vulkan.Core10.FundamentalTypes.FALSE', then
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state.cmdSetStencilTestEnable'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07848# If a shader
--     object is bound to any graphics stage or a graphics pipeline is
--     bound which was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_STENCIL_OP' dynamic
--     state enabled, the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @rasterizerDiscardEnable@ is
--     'Vulkan.Core10.FundamentalTypes.FALSE', the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @stencilTestEnable@ is 'Vulkan.Core10.FundamentalTypes.TRUE',
--     then
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state.cmdSetStencilOp'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-viewportCount-03417# If a
--     shader object is bound to any graphics stage or a graphics pipeline
--     is bound which was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT'
--     dynamic state enabled, and the state is not inherited, then
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state.cmdSetViewportWithCount'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-scissorCount-03418# If a
--     shader object is bound to any graphics stage or a graphics pipeline
--     is bound which was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT'
--     dynamic state enabled, and the state is not inherited, then
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state.cmdSetScissorWithCount'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-viewportCount-03419# If a
--     shader object is bound to any graphics stage or a graphics pipeline
--     is bound which was created with both the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT'
--     and
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT'
--     dynamic states enabled, and the state is not inherited, then the
--     @viewportCount@ parameter of
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state.cmdSetViewportWithCount'
--     /must/ match the @scissorCount@ parameter of
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state.cmdSetScissorWithCount'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-viewportCount-04137# If the
--     bound graphics pipeline state was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT'
--     dynamic state enabled, but not the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV'
--     dynamic state enabled, then the bound graphics pipeline /must/ have
--     been created with
--     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.PipelineViewportWScalingStateCreateInfoNV'::@viewportCount@
--     greater or equal to the @viewportCount@ parameter in the last call
--     to
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state.cmdSetViewportWithCount'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-viewportCount-04138# If the
--     @VK_NV_clip_space_w_scaling@ extension is enabled, and a shader
--     object is bound to any graphics stage or a graphics pipeline is
--     bound which was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT'
--     and
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV'
--     dynamic state enabled, the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @viewportWScalingEnable@ is
--     'Vulkan.Core10.FundamentalTypes.TRUE', then
--     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.cmdSetViewportWScalingNV'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-08636# If the
--     @VK_NV_clip_space_w_scaling@ extension is enabled, and a shader
--     object is bound to any graphics stage or a graphics pipeline is
--     bound which was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT'
--     and
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_NV'
--     dynamic state enabled, the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @viewportWScalingEnable@ is
--     'Vulkan.Core10.FundamentalTypes.TRUE', then the @viewportCount@
--     parameter in the last call to
--     'Vulkan.Extensions.VK_NV_clip_space_w_scaling.cmdSetViewportWScalingNV'
--     /must/ be greater than or equal to the @viewportCount@ parameter in
--     the last call to
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state.cmdSetViewportWithCount'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-viewportCount-04139# If the
--     bound graphics pipeline state was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT'
--     dynamic state enabled, but not the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV'
--     dynamic state enabled, then the bound graphics pipeline /must/ have
--     been created with
--     'Vulkan.Extensions.VK_NV_shading_rate_image.PipelineViewportShadingRateImageStateCreateInfoNV'::@viewportCount@
--     greater or equal to the @viewportCount@ parameter in the last call
--     to
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state.cmdSetViewportWithCount'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-shadingRateImage-09233# If
--     the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shadingRateImage 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
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV'
--     and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @rasterizerDiscardEnable@ is
--     'Vulkan.Core10.FundamentalTypes.FALSE', then
--     'Vulkan.Extensions.VK_NV_shading_rate_image.cmdSetCoarseSampleOrderNV'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-shadingRateImage-09234# If
--     the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shadingRateImage 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
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT'
--     and
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV'
--     dynamic state enabled, the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @rasterizerDiscardEnable@ is
--     'Vulkan.Core10.FundamentalTypes.FALSE', and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @shadingRateImageEnable@ is
--     'Vulkan.Core10.FundamentalTypes.TRUE', then
--     'Vulkan.Extensions.VK_NV_shading_rate_image.cmdSetViewportShadingRatePaletteNV'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-08637# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shadingRateImage 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
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT'
--     and
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV'
--     dynamic state enabled, the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @rasterizerDiscardEnable@ is
--     'Vulkan.Core10.FundamentalTypes.FALSE', and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @shadingRateImageEnable@ is
--     'Vulkan.Core10.FundamentalTypes.TRUE', then the @viewportCount@
--     parameter in the last call to
--     'Vulkan.Extensions.VK_NV_shading_rate_image.cmdSetViewportShadingRatePaletteNV'
--     /must/ be greater than or equal to the @viewportCount@ parameter in
--     the last call to
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state.cmdSetViewportWithCount'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-VkPipelineVieportCreateInfo-04141#
--     If the bound graphics pipeline state was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT'
--     dynamic state enabled and a
--     'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'
--     structure chained from
--     'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo', then the
--     bound graphics pipeline /must/ have been created with
--     'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'::@viewportCount@
--     greater or equal to the @viewportCount@ parameter in the last call
--     to
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state.cmdSetViewportWithCount'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-VkPipelineVieportCreateInfo-04142#
--     If the bound graphics pipeline state was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT'
--     dynamic state enabled and a
--     'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'
--     structure chained from
--     'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo', then the
--     bound graphics pipeline /must/ have been created with
--     'Vulkan.Extensions.VK_NV_scissor_exclusive.PipelineViewportExclusiveScissorStateCreateInfoNV'::@exclusiveScissorCount@
--     greater or equal to the @viewportCount@ parameter in the last call
--     to
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state.cmdSetViewportWithCount'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07878# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-exclusiveScissor 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
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_EXCLUSIVE_SCISSOR_ENABLE_NV'
--     dynamic state enabled, then
--     'Vulkan.Extensions.VK_NV_scissor_exclusive.cmdSetExclusiveScissorEnableNV'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07879# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-exclusiveScissor exclusiveScissor>
--     feature is enabled, a shader object is bound to any graphics stage
--     or a graphics pipeline is bound which was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV'
--     dynamic state enabled, and the most recent call to
--     'Vulkan.Extensions.VK_NV_scissor_exclusive.cmdSetExclusiveScissorEnableNV'
--     in the current command buffer set any element of
--     @pExclusiveScissorEnables@ to 'Vulkan.Core10.FundamentalTypes.TRUE',
--     then
--     'Vulkan.Extensions.VK_NV_scissor_exclusive.cmdSetExclusiveScissorNV'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-04876# If a shader
--     object is bound to any graphics stage or a graphics pipeline is
--     bound which was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE'
--     dynamic state enabled, then
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state2.cmdSetRasterizerDiscardEnable'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-04877# If a shader
--     object is bound to any graphics stage or a graphics pipeline is
--     bound which was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_BIAS_ENABLE'
--     dynamic state enabled, and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @rasterizerDiscardEnable@ is
--     'Vulkan.Core10.FundamentalTypes.FALSE', then
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state2.cmdSetDepthBiasEnable'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-logicOp-04878# If a shader
--     object is bound to the
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_FRAGMENT_BIT'
--     or a graphics pipeline is bound which was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_LOGIC_OP_EXT'
--     dynamic state enabled, the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @rasterizerDiscardEnable@ is
--     'Vulkan.Core10.FundamentalTypes.FALSE', and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @logicOpEnable@ is 'Vulkan.Core10.FundamentalTypes.TRUE', then
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetLogicOpEXT'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-primitiveFragmentShadingRateWithMultipleViewports-04552#
--     If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-primitiveFragmentShadingRateWithMultipleViewports primitiveFragmentShadingRateWithMultipleViewports>
--     limit is not supported, the bound graphics pipeline was created with
--     the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT'
--     dynamic state enabled, and any of the shader stages of the bound
--     graphics pipeline write to the @PrimitiveShadingRateKHR@ built-in,
--     then
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state.cmdSetViewportWithCount'
--     /must/ have been called in the current command buffer prior to this
--     drawing command, and the @viewportCount@ parameter of
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state.cmdSetViewportWithCount'
--     /must/ be @1@
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-primitiveFragmentShadingRateWithMultipleViewports-08642#
--     If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-primitiveFragmentShadingRateWithMultipleViewports primitiveFragmentShadingRateWithMultipleViewports>
--     limit is not supported, and any shader object bound to a graphics
--     stage writes to the @PrimitiveShadingRateKHR@ built-in, then
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state.cmdSetViewportWithCount'
--     /must/ have been called in the current command buffer prior to this
--     drawing command, and the @viewportCount@ parameter of
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state.cmdSetViewportWithCount'
--     /must/ be @1@
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-blendEnable-04727# If
--     rasterization is not disabled in the bound graphics pipeline, then
--     for each color attachment in the subpass, if the corresponding image
--     view’s
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
--     do not contain
--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT',
--     then the @blendEnable@ member of the corresponding element of the
--     @pAttachments@ member of @pColorBlendState@ /must/ be
--     'Vulkan.Core10.FundamentalTypes.FALSE'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-08643# If a shader
--     object is bound to the
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_FRAGMENT_BIT'
--     stage, and the most recent call to
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state2.cmdSetRasterizerDiscardEnable'
--     in the current command buffer set @rasterizerDiscardEnable@ to
--     'Vulkan.Core10.FundamentalTypes.FALSE', then for each color
--     attachment in the render pass, if the corresponding image view’s
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
--     do not contain
--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT',
--     then the corresponding member of @pColorBlendEnables@ in the most
--     recent call to
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetColorBlendEnableEXT'
--     in the current command buffer that affected that attachment index
--     /must/ have been 'Vulkan.Core10.FundamentalTypes.FALSE'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-multisampledRenderToSingleSampled-07284#
--     If rasterization is not disabled in the bound graphics pipeline, and
--     none of the following is enabled:
--
--     -   the @VK_AMD_mixed_attachment_samples@ extension
--
--     -   the @VK_NV_framebuffer_mixed_samples@ extension
--
--     -   the
--         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multisampledRenderToSingleSampled multisampledRenderToSingleSampled>
--         feature
--
--     then @rasterizationSamples@ for the bound graphics pipeline /must/
--     be the same as the current subpass color and\/or depth\/stencil
--     attachments
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-08644# If a shader
--     object is bound to any graphics stage, and the most recent call to
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state2.cmdSetRasterizerDiscardEnable'
--     in the current command buffer set @rasterizerDiscardEnable@ to
--     'Vulkan.Core10.FundamentalTypes.FALSE', and none of the following is
--     enabled:
--
--     -   the @VK_AMD_mixed_attachment_samples@ extension
--
--     -   the @VK_NV_framebuffer_mixed_samples@ extension
--
--     -   the
--         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multisampledRenderToSingleSampled multisampledRenderToSingleSampled>
--         feature
--
--     then the most recent call to
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetRasterizationSamplesEXT'
--     in the current command buffer /must/ have set @rasterizationSamples@
--     to be the same as the number of samples for the current render pass
--     color and\/or depth\/stencil attachments
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-08876# If a shader
--     object is bound to any graphics stage, the current render pass
--     instance /must/ have been begun with
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-imageView-06172# If the
--     current render pass instance was begun with
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering',
--     the @imageView@ member of @pDepthAttachment@ is not
--     'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of
--     @pDepthAttachment@ is
--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL',
--     this command /must/ not write any values to the depth attachment
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-imageView-06173# If the
--     current render pass instance was begun with
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering',
--     the @imageView@ member of @pStencilAttachment@ is not
--     'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of
--     @pStencilAttachment@ is
--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL',
--     this command /must/ not write any values to the stencil attachment
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-imageView-06174# If the
--     current render pass instance was begun with
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering',
--     the @imageView@ member of @pDepthAttachment@ is not
--     'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of
--     @pDepthAttachment@ is
--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL',
--     this command /must/ not write any values to the depth attachment
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-imageView-06175# If the
--     current render pass instance was begun with
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering',
--     the @imageView@ member of @pStencilAttachment@ is not
--     'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of
--     @pStencilAttachment@ is
--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL',
--     this command /must/ not write any values to the stencil attachment
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-imageView-06176# If the
--     current render pass instance was begun with
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering',
--     the @imageView@ member of @pDepthAttachment@ is not
--     'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of
--     @pDepthAttachment@ is
--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL',
--     this command /must/ not write any values to the depth attachment
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-imageView-06177# If the
--     current render pass instance was begun with
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering',
--     the @imageView@ member of @pStencilAttachment@ is not
--     'Vulkan.Core10.APIConstants.NULL_HANDLE', and the @layout@ member of
--     @pStencilAttachment@ is
--     'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL',
--     this command /must/ not write any values to the stencil attachment
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-viewMask-06178# If the
--     current render pass instance was begun with
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering',
--     the bound graphics pipeline /must/ have been created with a
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'::@viewMask@
--     equal to
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.RenderingInfo'::@viewMask@
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-colorAttachmentCount-06179#
--     If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-dynamicRenderingUnusedAttachments dynamicRenderingUnusedAttachments>
--     feature is not enabled and the current render pass instance was
--     begun with
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering',
--     the bound graphics pipeline /must/ have been created with a
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'::@colorAttachmentCount@
--     equal to
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.RenderingInfo'::@colorAttachmentCount@
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-dynamicRenderingUnusedAttachments-08910#
--     If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-dynamicRenderingUnusedAttachments dynamicRenderingUnusedAttachments>
--     feature is not enabled, and the current render pass instance was
--     begun with
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering'
--     and
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.RenderingInfo'::@colorAttachmentCount@
--     greater than @0@, then each element of the
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.RenderingInfo'::@pColorAttachments@
--     array with an @imageView@ not equal to
--     'Vulkan.Core10.APIConstants.NULL_HANDLE' /must/ have been created
--     with a 'Vulkan.Core10.Enums.Format.Format' equal to the
--     corresponding element of
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'::@pColorAttachmentFormats@
--     used to create the bound graphics pipeline
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-dynamicRenderingUnusedAttachments-08912#
--     If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-dynamicRenderingUnusedAttachments dynamicRenderingUnusedAttachments>
--     feature is not enabled, and the current render pass instance was
--     begun with
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering'
--     and
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.RenderingInfo'::@colorAttachmentCount@
--     greater than @0@, then each element of the
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.RenderingInfo'::@pColorAttachments@
--     array with an @imageView@ equal to
--     'Vulkan.Core10.APIConstants.NULL_HANDLE' /must/ have the
--     corresponding element of
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'::@pColorAttachmentFormats@
--     used to create the bound pipeline equal to
--     'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-dynamicRenderingUnusedAttachments-08911#
--     If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-dynamicRenderingUnusedAttachments dynamicRenderingUnusedAttachments>
--     feature is enabled, and the current render pass instance was begun
--     with
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering'
--     and
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.RenderingInfo'::@colorAttachmentCount@
--     greater than @0@, then each element of the
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.RenderingInfo'::@pColorAttachments@
--     array with an @imageView@ not equal to
--     'Vulkan.Core10.APIConstants.NULL_HANDLE' /must/ have been created
--     with a 'Vulkan.Core10.Enums.Format.Format' equal to the
--     corresponding element of
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'::@pColorAttachmentFormats@
--     used to create the bound graphics pipeline, or the corresponding
--     element of
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'::@pColorAttachmentFormats@,
--     if it exists, /must/ be
--     'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-colorAttachmentCount-09362#
--     If the current render pass instance was begun with
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering',
--     with a
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.RenderingInfo'::@colorAttachmentCount@
--     equal to @1@, there is no shader object bound to any graphics stage,
--     and a color attachment with a resolve mode of
--     'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID',
--     each element of the
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.RenderingInfo'::@pColorAttachments@
--     array with a @resolveImageView@ not equal to
--     'Vulkan.Core10.APIConstants.NULL_HANDLE' /must/ have been created
--     with an image created with a
--     'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ExternalFormatANDROID'::@externalFormat@
--     value equal to the
--     'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ExternalFormatANDROID'::@externalFormat@
--     value used to create the bound graphics pipeline
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-09363# If there is no
--     shader object bound to any graphics stage, the current render pass
--     instance was begun with
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering'
--     and a
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.RenderingInfo'::@colorAttachmentCount@
--     equal to @1@, and a color attachment with a resolve mode of
--     'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID',
--     each element of the
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.RenderingInfo'::@pColorAttachments@
--     array with a @imageView@ not equal to
--     'Vulkan.Core10.APIConstants.NULL_HANDLE' /must/ have been created
--     with an image created with a
--     'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ExternalFormatANDROID'::@externalFormat@
--     value equal to the
--     'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ExternalFormatANDROID'::@externalFormat@
--     value used to create the bound graphics pipeline
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-09364# If the current
--     render pass instance was begun with
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering',
--     there is no shader object bound to any graphics stage, and the bound
--     graphics pipeline was created with a non-zero
--     'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ExternalFormatANDROID'::@externalFormat@
--     value and with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT'
--     dynamic state enabled, then
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetColorBlendEnableEXT'
--     /must/ have set the blend enable to
--     'Vulkan.Core10.FundamentalTypes.FALSE' prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-09365# If the current
--     render pass instance was begun with
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering',
--     there is no shader object bound to any graphics stage, and the bound
--     graphics pipeline was created with a non-zero
--     'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ExternalFormatANDROID'::@externalFormat@
--     value and with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT'
--     dynamic state enabled, then
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetRasterizationSamplesEXT'
--     /must/ have set @rasterizationSamples@ to
--     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT' prior
--     to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-09366# If there is a
--     shader object bound to any graphics stage, and the current render
--     pass includes a color attachment that uses the
--     'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID'
--     resolve mode, then
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetColorBlendEnableEXT'
--     /must/ have set blend enable to
--     'Vulkan.Core10.FundamentalTypes.FALSE' prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-rasterizationSamples-09367#
--     If there is a shader object bound to any graphics stage, and the
--     current render pass includes a color attachment that uses the
--     'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID'
--     resolve mode, then
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetRasterizationSamplesEXT'
--     /must/ have set @rasterizationSamples@ to
--     'Vulkan.Core10.Enums.SampleCountFlagBits.SAMPLE_COUNT_1_BIT' prior
--     to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-09368# If the current
--     render pass instance was begun with
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering',
--     there is no shader object bound to any graphics stage, and the bound
--     graphics pipeline was created with a non-zero
--     'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ExternalFormatANDROID'::@externalFormat@
--     value and with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'
--     dynamic state enabled, then
--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.cmdSetFragmentShadingRateKHR'
--     /must/ have set @pFragmentSize->width@ to @1@ prior to this drawing
--     command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-09369# If the current
--     render pass instance was begun with
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering',
--     there is no shader object bound to any graphics stage, and the bound
--     graphics pipeline was created with a non-zero
--     'Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.ExternalFormatANDROID'::@externalFormat@
--     value and with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'
--     dynamic state enabled, then
--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.cmdSetFragmentShadingRateKHR'
--     /must/ have set @pFragmentSize->height@ to @1@ prior to this drawing
--     command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-pFragmentSize-09370# If there
--     is a shader object bound to any graphics stage, and the current
--     render pass includes a color attachment that uses the
--     'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID'
--     resolve mode, then
--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.cmdSetFragmentShadingRateKHR'
--     /must/ have set @pFragmentSize->width@ to @1@ prior to this drawing
--     command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-pFragmentSize-09371# If there
--     is a shader object bound to any graphics stage, and the current
--     render pass includes a color attachment that uses the
--     'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID'
--     resolve mode, then
--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.cmdSetFragmentShadingRateKHR'
--     /must/ have set @pFragmentSize->height@ to @1@ prior to this drawing
--     command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07749# If the bound
--     graphics pipeline state was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT'
--     dynamic state enabled then
--     'Vulkan.Extensions.VK_EXT_color_write_enable.cmdSetColorWriteEnableEXT'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-08646# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-colorWriteEnable colorWriteEnable>
--     feature is enabled, and a shader object is bound to the
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_FRAGMENT_BIT'
--     stage, and the most recent call to
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state2.cmdSetRasterizerDiscardEnable'
--     in the current command buffer set @rasterizerDiscardEnable@ to
--     'Vulkan.Core10.FundamentalTypes.FALSE', then
--     'Vulkan.Extensions.VK_EXT_color_write_enable.cmdSetColorWriteEnableEXT'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-attachmentCount-07750# If the
--     bound graphics pipeline state was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT'
--     dynamic state enabled then the @attachmentCount@ parameter of
--     'Vulkan.Extensions.VK_EXT_color_write_enable.cmdSetColorWriteEnableEXT'
--     /must/ be greater than or equal to the
--     'Vulkan.Core10.Pipeline.PipelineColorBlendStateCreateInfo'::@attachmentCount@
--     of the bound graphics pipeline
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-08647# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-colorWriteEnable colorWriteEnable>
--     feature is enabled, and a shader object is bound to the
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_FRAGMENT_BIT'
--     stage, and the most recent call to
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state2.cmdSetRasterizerDiscardEnable'
--     in the current command buffer set @rasterizerDiscardEnable@ to
--     'Vulkan.Core10.FundamentalTypes.FALSE', then the @attachmentCount@
--     parameter of most recent call to
--     'Vulkan.Extensions.VK_EXT_color_write_enable.cmdSetColorWriteEnableEXT'
--     in the current command buffer /must/ be greater than or equal to the
--     number of color attachments in the current render pass instance
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07751# If the bound
--     graphics pipeline state was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DISCARD_RECTANGLE_EXT'
--     dynamic state enabled then
--     'Vulkan.Extensions.VK_EXT_discard_rectangles.cmdSetDiscardRectangleEXT'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command for each
--     discard rectangle in
--     'Vulkan.Extensions.VK_EXT_discard_rectangles.PipelineDiscardRectangleStateCreateInfoEXT'::@discardRectangleCount@
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07880# If the
--     @VK_EXT_discard_rectangles@ extension is enabled, a shader object is
--     bound to any graphics stage or a graphics pipeline is bound which
--     was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXT'
--     dynamic state enabled, the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @rasterizerDiscardEnable@ is
--     'Vulkan.Core10.FundamentalTypes.FALSE', then
--     'Vulkan.Extensions.VK_EXT_discard_rectangles.cmdSetDiscardRectangleEnableEXT'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07881# If the
--     @VK_EXT_discard_rectangles@ extension is enabled, a shader object is
--     bound to any graphics stage or a graphics pipeline is bound which
--     was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DISCARD_RECTANGLE_MODE_EXT'
--     dynamic state enabled, the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @rasterizerDiscardEnable@ is
--     'Vulkan.Core10.FundamentalTypes.FALSE', and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @discardRectangleEnable@ is
--     'Vulkan.Core10.FundamentalTypes.TRUE', then
--     'Vulkan.Extensions.VK_EXT_discard_rectangles.cmdSetDiscardRectangleModeEXT'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-rasterizerDiscardEnable-09236#
--     If the @VK_EXT_discard_rectangles@ extension is enabled, and a
--     shader object is bound to any graphics stage, and the most recent
--     call to
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state2.cmdSetRasterizerDiscardEnable'
--     in the current command buffer set @rasterizerDiscardEnable@ to
--     'Vulkan.Core10.FundamentalTypes.FALSE', and the most recent call to
--     'Vulkan.Extensions.VK_EXT_discard_rectangles.cmdSetDiscardRectangleEnableEXT'
--     in the current command buffer set @discardRectangleEnable@ to
--     'Vulkan.Core10.FundamentalTypes.TRUE', then
--     'Vulkan.Extensions.VK_EXT_discard_rectangles.cmdSetDiscardRectangleEXT'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-dynamicRenderingUnusedAttachments-08913#
--     If the current render pass instance was begun with
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering',
--     the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-dynamicRenderingUnusedAttachments dynamicRenderingUnusedAttachments>
--     feature is not enabled, and
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.RenderingInfo'::@pDepthAttachment->imageView@
--     was 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'::@depthAttachmentFormat@
--     used to create the bound graphics pipeline /must/ be equal to
--     'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-dynamicRenderingUnusedAttachments-08914#
--     If current render pass instance was begun with
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering',
--     the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-dynamicRenderingUnusedAttachments dynamicRenderingUnusedAttachments>
--     feature is not enabled, and
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.RenderingInfo'::@pDepthAttachment->imageView@
--     was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'::@depthAttachmentFormat@
--     used to create the bound graphics pipeline /must/ be equal to the
--     'Vulkan.Core10.Enums.Format.Format' used to create
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.RenderingInfo'::@pDepthAttachment->imageView@
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-dynamicRenderingUnusedAttachments-08915#
--     If the current render pass instance was begun with
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering',
--     the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-dynamicRenderingUnusedAttachments dynamicRenderingUnusedAttachments>
--     feature is enabled,
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.RenderingInfo'::@pDepthAttachment->imageView@
--     was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the value of
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'::@depthAttachmentFormat@
--     used to create the bound graphics pipeline was not equal to the
--     'Vulkan.Core10.Enums.Format.Format' used to create
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.RenderingInfo'::@pDepthAttachment->imageView@,
--     the value of the format /must/ be
--     'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-dynamicRenderingUnusedAttachments-08916#
--     If the current render pass instance was begun with
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering',
--     the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-dynamicRenderingUnusedAttachments dynamicRenderingUnusedAttachments>
--     feature is not enabled, and
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.RenderingInfo'::@pStencilAttachment->imageView@
--     was 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'::@stencilAttachmentFormat@
--     used to create the bound graphics pipeline /must/ be equal to
--     'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-dynamicRenderingUnusedAttachments-08917#
--     If current render pass instance was begun with
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering',
--     the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-dynamicRenderingUnusedAttachments dynamicRenderingUnusedAttachments>
--     feature is not enabled, and
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.RenderingInfo'::@pStencilAttachment->imageView@
--     was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'::@stencilAttachmentFormat@
--     used to create the bound graphics pipeline /must/ be equal to the
--     'Vulkan.Core10.Enums.Format.Format' used to create
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.RenderingInfo'::@pStencilAttachment->imageView@
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-dynamicRenderingUnusedAttachments-08918#
--     If the current render pass instance was begun with
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering',
--     the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-dynamicRenderingUnusedAttachments dynamicRenderingUnusedAttachments>
--     feature is enabled,
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.RenderingInfo'::@pStencilAttachment->imageView@
--     was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the value of
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'::@stencilAttachmentFormat@
--     used to create the bound graphics pipeline was not equal to the
--     'Vulkan.Core10.Enums.Format.Format' used to create
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.RenderingInfo'::@pStencilAttachment->imageView@,
--     the value of the format /must/ be
--     'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-imageView-06183# If the
--     current render pass instance was begun with
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering'
--     and
--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.RenderingFragmentShadingRateAttachmentInfoKHR'::@imageView@
--     was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the bound graphics
--     pipeline /must/ have been created with
--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-imageView-06184# If the
--     current render pass instance was begun with
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering'
--     and
--     'Vulkan.Extensions.VK_EXT_fragment_density_map.RenderingFragmentDensityMapAttachmentInfoEXT'::@imageView@
--     was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the bound graphics
--     pipeline /must/ have been created with
--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-colorAttachmentCount-06185#
--     If the bound pipeline was created with a
--     'Vulkan.Extensions.VK_AMD_mixed_attachment_samples.AttachmentSampleCountInfoAMD'
--     or
--     'Vulkan.Extensions.VK_NV_framebuffer_mixed_samples.AttachmentSampleCountInfoNV'
--     structure, and the current render pass instance was begun with
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering'
--     with a
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.RenderingInfo'::@colorAttachmentCount@
--     parameter greater than @0@, then each element of the
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.RenderingInfo'::@pColorAttachments@
--     array with a @imageView@ not equal to
--     'Vulkan.Core10.APIConstants.NULL_HANDLE' /must/ have been created
--     with a sample count equal to the corresponding element of the
--     @pColorAttachmentSamples@ member of
--     'Vulkan.Extensions.VK_AMD_mixed_attachment_samples.AttachmentSampleCountInfoAMD'
--     or
--     'Vulkan.Extensions.VK_NV_framebuffer_mixed_samples.AttachmentSampleCountInfoNV'
--     used to create the bound graphics pipeline
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-pDepthAttachment-06186# If
--     the current render pass instance was begun with
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering',
--     the bound pipeline was created with a
--     'Vulkan.Extensions.VK_AMD_mixed_attachment_samples.AttachmentSampleCountInfoAMD'
--     or
--     'Vulkan.Extensions.VK_NV_framebuffer_mixed_samples.AttachmentSampleCountInfoNV'
--     structure, and
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.RenderingInfo'::@pDepthAttachment->imageView@
--     was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of the
--     @depthStencilAttachmentSamples@ member of
--     'Vulkan.Extensions.VK_AMD_mixed_attachment_samples.AttachmentSampleCountInfoAMD'
--     or
--     'Vulkan.Extensions.VK_NV_framebuffer_mixed_samples.AttachmentSampleCountInfoNV'
--     used to create the bound graphics pipeline /must/ be equal to the
--     sample count used to create
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.RenderingInfo'::@pDepthAttachment->imageView@
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-pStencilAttachment-06187# If
--     the current render pass instance was begun with
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering',
--     the bound pipeline was created with a
--     'Vulkan.Extensions.VK_AMD_mixed_attachment_samples.AttachmentSampleCountInfoAMD'
--     or
--     'Vulkan.Extensions.VK_NV_framebuffer_mixed_samples.AttachmentSampleCountInfoNV'
--     structure, and
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.RenderingInfo'::@pStencilAttachment->imageView@
--     was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of the
--     @depthStencilAttachmentSamples@ member of
--     'Vulkan.Extensions.VK_AMD_mixed_attachment_samples.AttachmentSampleCountInfoAMD'
--     or
--     'Vulkan.Extensions.VK_NV_framebuffer_mixed_samples.AttachmentSampleCountInfoNV'
--     used to create the bound graphics pipeline /must/ be equal to the
--     sample count used to create
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.RenderingInfo'::@pStencilAttachment->imageView@
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-multisampledRenderToSingleSampled-07285#
--     If the bound pipeline was created without a
--     'Vulkan.Extensions.VK_AMD_mixed_attachment_samples.AttachmentSampleCountInfoAMD'
--     or
--     'Vulkan.Extensions.VK_NV_framebuffer_mixed_samples.AttachmentSampleCountInfoNV'
--     structure, and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multisampledRenderToSingleSampled multisampledRenderToSingleSampled>
--     feature is not enabled, and the current render pass instance was
--     begun with
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering'
--     with a
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.RenderingInfo'::@colorAttachmentCount@
--     parameter greater than @0@, then each element of the
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.RenderingInfo'::@pColorAttachments@
--     array with a @imageView@ not equal to
--     'Vulkan.Core10.APIConstants.NULL_HANDLE' /must/ have been created
--     with a sample count equal to the value of @rasterizationSamples@ for
--     the bound graphics pipeline
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-multisampledRenderToSingleSampled-07286#
--     If the bound pipeline was created without a
--     'Vulkan.Extensions.VK_AMD_mixed_attachment_samples.AttachmentSampleCountInfoAMD'
--     or
--     'Vulkan.Extensions.VK_NV_framebuffer_mixed_samples.AttachmentSampleCountInfoNV'
--     structure, and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multisampledRenderToSingleSampled multisampledRenderToSingleSampled>
--     feature is not enabled, and
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.RenderingInfo'::@pDepthAttachment->imageView@
--     was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of
--     @rasterizationSamples@ for the bound graphics pipeline /must/ be
--     equal to the sample count used to create
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.RenderingInfo'::@pDepthAttachment->imageView@
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-multisampledRenderToSingleSampled-07287#
--     If the bound pipeline was created without a
--     'Vulkan.Extensions.VK_AMD_mixed_attachment_samples.AttachmentSampleCountInfoAMD'
--     or
--     'Vulkan.Extensions.VK_NV_framebuffer_mixed_samples.AttachmentSampleCountInfoNV'
--     structure, and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multisampledRenderToSingleSampled multisampledRenderToSingleSampled>
--     feature is not enabled, and
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.RenderingInfo'::@pStencilAttachment->imageView@
--     was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the value of
--     @rasterizationSamples@ for the bound graphics pipeline /must/ be
--     equal to the sample count used to create
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.RenderingInfo'::@pStencilAttachment->imageView@
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-pNext-07935# If this command
--     has been called inside a render pass instance started with
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering',
--     and the @pNext@ chain of
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.RenderingInfo'
--     includes a
--     'Vulkan.Extensions.VK_EXT_multisampled_render_to_single_sampled.MultisampledRenderToSingleSampledInfoEXT'
--     structure with @multisampledRenderToSingleSampledEnable@ equal to
--     'Vulkan.Core10.FundamentalTypes.TRUE', then the value of
--     @rasterizationSamples@ for the bound graphics pipeline /must/ be
--     equal to
--     'Vulkan.Extensions.VK_EXT_multisampled_render_to_single_sampled.MultisampledRenderToSingleSampledInfoEXT'::@rasterizationSamples@
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-renderPass-06198# If the
--     current render pass instance was begun with
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering',
--     the bound pipeline /must/ have been created with a
--     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@renderPass@
--     equal to 'Vulkan.Core10.APIConstants.NULL_HANDLE'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-pColorAttachments-08963# If
--     the current render pass instance was begun with
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.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 the
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.RenderingInfo'::@pColorAttachments->imageView@
--     was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', then the
--     corresponding element of
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'::@pColorAttachmentFormats@
--     used to create the pipeline /must/ not be
--     'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-pDepthAttachment-08964# If
--     the current render pass instance was begun with
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering',
--     there is a graphics pipeline bound, depth test is enabled, depth
--     write is enabled, and the
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.RenderingInfo'::@pDepthAttachment->imageView@
--     was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', then the
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'::@depthAttachmentFormat@
--     used to create the pipeline /must/ not be
--     'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-pStencilAttachment-08965# If
--     the current render pass instance was begun with
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering',
--     there is a graphics pipeline bound, stencil test is enabled and the
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.RenderingInfo'::@pStencilAttachment->imageView@
--     was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', then the
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PipelineRenderingCreateInfo'::@stencilAttachmentFormat@
--     used to create the pipeline /must/ not be
--     'Vulkan.Core10.Enums.Format.FORMAT_UNDEFINED'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-primitivesGeneratedQueryWithRasterizerDiscard-06708#
--     If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-primitivesGeneratedQueryWithRasterizerDiscard primitivesGeneratedQueryWithRasterizerDiscard>
--     feature is not enabled and the
--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PRIMITIVES_GENERATED_EXT'
--     query is active,
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-discard rasterization discard>
--     /must/ not be enabled
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-primitivesGeneratedQueryWithNonZeroStreams-06709#
--     If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-primitivesGeneratedQueryWithNonZeroStreams primitivesGeneratedQueryWithNonZeroStreams>
--     feature is not enabled and the
--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PRIMITIVES_GENERATED_EXT'
--     query is active, the bound graphics pipeline /must/ not have been
--     created with a non-zero value in
--     'Vulkan.Extensions.VK_EXT_transform_feedback.PipelineRasterizationStateStreamCreateInfoEXT'::@rasterizationStream@
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07619# If a shader
--     object is bound to the
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TESSELLATION_EVALUATION_BIT'
--     stage or a graphics pipeline is bound which was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_TESSELLATION_DOMAIN_ORIGIN_EXT'
--     dynamic state enabled, then
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetTessellationDomainOriginEXT'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07620# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-depthClamp depthClamp>
--     feature is enabled, a shader object is bound to any graphics stage
--     or a graphics pipeline is bound which was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXT'
--     dynamic state enabled, and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @rasterizerDiscardEnable@ is
--     'Vulkan.Core10.FundamentalTypes.FALSE', then
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetDepthClampEnableEXT'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07621# If a shader
--     object is bound to any graphics stage or a graphics pipeline is
--     bound which was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_POLYGON_MODE_EXT'
--     dynamic state enabled, and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @rasterizerDiscardEnable@ is
--     'Vulkan.Core10.FundamentalTypes.FALSE', then
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetPolygonModeEXT'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07622# If a shader
--     object is bound to any graphics stage or a graphics pipeline is
--     bound which was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT'
--     dynamic state enabled, and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @rasterizerDiscardEnable@ is
--     'Vulkan.Core10.FundamentalTypes.FALSE', then
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetRasterizationSamplesEXT'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07623# If a shader
--     object is bound to any graphics stage or a graphics pipeline is
--     bound which was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SAMPLE_MASK_EXT'
--     dynamic state enabled, and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @rasterizerDiscardEnable@ is
--     'Vulkan.Core10.FundamentalTypes.FALSE', then
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetSampleMaskEXT'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-alphaToCoverageEnable-08919#
--     If the bound graphics pipeline state was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT'
--     dynamic state enabled, and @alphaToCoverageEnable@ was
--     'Vulkan.Core10.FundamentalTypes.TRUE' in the last call to
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetAlphaToCoverageEnableEXT',
--     then the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces-fragmentoutput Fragment Output Interface>
--     /must/ contain a variable for the alpha @Component@ word in
--     @Location@ 0 at @Index@ 0
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-alphaToCoverageEnable-08920#
--     If a shader object is bound to any graphics stage, and the most
--     recent call to
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetAlphaToCoverageEnableEXT'
--     in the current command buffer set @alphaToCoverageEnable@ to
--     'Vulkan.Core10.FundamentalTypes.TRUE', then the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces-fragmentoutput Fragment Output Interface>
--     /must/ contain a variable for the alpha @Component@ word in
--     @Location@ 0 at @Index@ 0
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07624# If a shader
--     object is bound to any graphics stage or a graphics pipeline is
--     bound which was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT'
--     dynamic state enabled, and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @rasterizerDiscardEnable@ is
--     'Vulkan.Core10.FundamentalTypes.FALSE', then
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetAlphaToCoverageEnableEXT'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07625# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-alphaToOne alphaToOne>
--     feature is enabled, a shader object is bound to any graphics stage
--     or a graphics pipeline is bound which was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT'
--     dynamic state enabled, and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @rasterizerDiscardEnable@ is
--     'Vulkan.Core10.FundamentalTypes.FALSE', then
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetAlphaToOneEnableEXT'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07626# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-logicOp logicOp>
--     feature is enabled, a shader object is bound to the
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_FRAGMENT_BIT'
--     stage or a graphics pipeline is bound which was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_LOGIC_OP_ENABLE_EXT'
--     dynamic state enabled, and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @rasterizerDiscardEnable@ is
--     'Vulkan.Core10.FundamentalTypes.FALSE', then
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetLogicOpEnableEXT'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07627# If the bound
--     graphics pipeline state was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT'
--     dynamic state enabled then
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetColorBlendEnableEXT'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-08657# If a shader
--     object is bound to the
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_FRAGMENT_BIT'
--     stage, and both the most recent call to
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state2.cmdSetRasterizerDiscardEnable'
--     in the current command buffer set @rasterizerDiscardEnable@ to
--     'Vulkan.Core10.FundamentalTypes.FALSE' and there are color
--     attachments bound, then
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetColorBlendEnableEXT'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07628# If the bound
--     graphics pipeline state was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT'
--     dynamic state enabled then
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetColorBlendEquationEXT'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-08658# If a shader
--     object is bound to the
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_FRAGMENT_BIT'
--     stage, and the most recent call to
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state2.cmdSetRasterizerDiscardEnable'
--     in the current command buffer set @rasterizerDiscardEnable@ to
--     'Vulkan.Core10.FundamentalTypes.FALSE', and the most recent call to
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetColorBlendEnableEXT'
--     for any attachment set that attachment’s value in
--     @pColorBlendEnables@ to 'Vulkan.Core10.FundamentalTypes.TRUE', then
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetColorBlendEquationEXT'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07629# If the bound
--     graphics pipeline state was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_COLOR_WRITE_MASK_EXT'
--     dynamic state enabled then
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetColorWriteMaskEXT'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-08659# If a shader
--     object is bound to the
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_FRAGMENT_BIT'
--     stage, and both the most recent call to
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state2.cmdSetRasterizerDiscardEnable'
--     in the current command buffer set @rasterizerDiscardEnable@ to
--     'Vulkan.Core10.FundamentalTypes.FALSE' and there are color
--     attachments bound, then
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetColorWriteMaskEXT'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07630# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryStreams geometryStreams>
--     feature is enabled, and a shader object is bound to the
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_GEOMETRY_BIT'
--     stage or a graphics pipeline is bound which was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_RASTERIZATION_STREAM_EXT'
--     dynamic state enabled, then
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetRasterizationStreamEXT'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07631# If the
--     @VK_EXT_conservative_rasterization@ extension is enabled, a shader
--     object is bound to any graphics stage or a graphics pipeline is
--     bound which was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT'
--     dynamic state enabled, and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @rasterizerDiscardEnable@ is
--     'Vulkan.Core10.FundamentalTypes.FALSE', then
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetConservativeRasterizationModeEXT'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07632# If the
--     @VK_EXT_conservative_rasterization@ extension is enabled, a shader
--     object is bound to any graphics stage or a graphics pipeline is
--     bound which was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXT'
--     dynamic state enabled, the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @rasterizerDiscardEnable@ is
--     'Vulkan.Core10.FundamentalTypes.FALSE', and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @conservativeRasterizationMode@ is
--     'Vulkan.Extensions.VK_EXT_conservative_rasterization.CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT',
--     then
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetExtraPrimitiveOverestimationSizeEXT'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07633# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-depthClipEnable 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
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXT'
--     dynamic state, then
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetDepthClipEnableEXT'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07635# If the bound
--     graphics pipeline state was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT'
--     dynamic state enabled then
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetColorBlendAdvancedEXT'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-rasterizerDiscardEnable-09416#
--     If the @VK_EXT_blend_operation_advanced@ extension is enabled, and a
--     shader object is bound to the
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_FRAGMENT_BIT'
--     stage, and the most recent call to
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state2.cmdSetRasterizerDiscardEnable'
--     in the current command buffer set @rasterizerDiscardEnable@ to
--     'Vulkan.Core10.FundamentalTypes.FALSE', then at least one of
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetColorBlendEquationEXT'
--     and
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetColorBlendAdvancedEXT'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07636# If the
--     @VK_EXT_provoking_vertex@ extension is enabled, a shader object is
--     bound to the
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_VERTEX_BIT'
--     stage or a graphics pipeline is bound which was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_PROVOKING_VERTEX_MODE_EXT'
--     dynamic state enabled, and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @rasterizerDiscardEnable@ is
--     'Vulkan.Core10.FundamentalTypes.FALSE', then
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetProvokingVertexModeEXT'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07637# If the bound
--     graphics pipeline state was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT'
--     dynamic state enabled then
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetLineRasterizationModeEXT'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-08666# If any of the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-stippledRectangularLines stippledRectangularLines>,
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-stippledBresenhamLines stippledBresenhamLines>
--     or
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-stippledSmoothLines stippledSmoothLines>
--     features are enabled, and a shader object is bound to any graphics
--     stage, and the most recent call to
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state2.cmdSetRasterizerDiscardEnable'
--     in the current command buffer set @rasterizerDiscardEnable@ to
--     'Vulkan.Core10.FundamentalTypes.FALSE', and the most recent call to
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetPolygonModeEXT'
--     in the current command buffer set @polygonMode@ to
--     'Vulkan.Core10.Enums.PolygonMode.POLYGON_MODE_LINE', then
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetLineRasterizationModeEXT'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-08667# If any of the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-stippledRectangularLines stippledRectangularLines>,
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-stippledBresenhamLines stippledBresenhamLines>
--     or
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-stippledSmoothLines stippledSmoothLines>
--     features are enabled, and a shader object is bound to the
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_VERTEX_BIT'
--     stage, and the most recent call to
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state2.cmdSetRasterizerDiscardEnable'
--     in the current command buffer set @rasterizerDiscardEnable@ to
--     'Vulkan.Core10.FundamentalTypes.FALSE', and the most recent call to
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state.cmdSetPrimitiveTopology'
--     in the current command buffer set @primitiveTopology@ to any line
--     topology, then
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetLineRasterizationModeEXT'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-08668# If any of the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-stippledRectangularLines stippledRectangularLines>,
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-stippledBresenhamLines stippledBresenhamLines>
--     or
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-stippledSmoothLines stippledSmoothLines>
--     features are enabled, and a shader object that outputs line
--     primitives is bound to the
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TESSELLATION_EVALUATION_BIT'
--     or
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_GEOMETRY_BIT'
--     stage, and the most recent call to
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state2.cmdSetRasterizerDiscardEnable'
--     in the current command buffer set @rasterizerDiscardEnable@ to
--     'Vulkan.Core10.FundamentalTypes.FALSE', then
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetLineRasterizationModeEXT'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07638# If the bound
--     graphics pipeline state was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT'
--     dynamic state enabled then
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetLineStippleEnableEXT'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-08669# If any of the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-stippledRectangularLines stippledRectangularLines>,
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-stippledBresenhamLines stippledBresenhamLines>
--     or
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-stippledSmoothLines stippledSmoothLines>
--     features are enabled, and a shader object is bound to any graphics
--     stage, and the most recent call to
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state2.cmdSetRasterizerDiscardEnable'
--     in the current command buffer set @rasterizerDiscardEnable@ to
--     'Vulkan.Core10.FundamentalTypes.FALSE', and the most recent call to
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetPolygonModeEXT'
--     in the current command buffer set @polygonMode@ to
--     'Vulkan.Core10.Enums.PolygonMode.POLYGON_MODE_LINE', then
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetLineStippleEnableEXT'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-08670# If any of the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-stippledRectangularLines stippledRectangularLines>,
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-stippledBresenhamLines stippledBresenhamLines>
--     or
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-stippledSmoothLines stippledSmoothLines>
--     features are enabled, and a shader object is bound to the
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_VERTEX_BIT'
--     stage, and the most recent call to
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state2.cmdSetRasterizerDiscardEnable'
--     in the current command buffer set @rasterizerDiscardEnable@ to
--     'Vulkan.Core10.FundamentalTypes.FALSE', and the most recent call to
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state.cmdSetPrimitiveTopology'
--     in the current command buffer set @primitiveTopology@ to any line
--     topology, then
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetLineStippleEnableEXT'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-08671# If any of the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-stippledRectangularLines stippledRectangularLines>,
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-stippledBresenhamLines stippledBresenhamLines>
--     or
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-stippledSmoothLines stippledSmoothLines>
--     features are enabled, and a shader object that outputs line
--     primitives is bound to the
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TESSELLATION_EVALUATION_BIT'
--     or
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_GEOMETRY_BIT'
--     stage, and the most recent call to
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state2.cmdSetRasterizerDiscardEnable'
--     in the current command buffer set @rasterizerDiscardEnable@ to
--     'Vulkan.Core10.FundamentalTypes.FALSE', then
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetLineStippleEnableEXT'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07849# If any of the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-stippledRectangularLines stippledRectangularLines>,
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-stippledBresenhamLines stippledBresenhamLines>
--     or
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-stippledSmoothLines stippledSmoothLines>
--     features are enabled and a shader object is bound to any graphics
--     stage, or a bound graphics pipeline state was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_LINE_STIPPLE_KHR'
--     dynamic state enabled, the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @rasterizerDiscardEnable@ is
--     'Vulkan.Core10.FundamentalTypes.FALSE', and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @stippledLineEnable@ is 'Vulkan.Core10.FundamentalTypes.TRUE',
--     then
--     'Vulkan.Extensions.VK_KHR_line_rasterization.cmdSetLineStippleKHR'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07639# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-depthClipControl 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
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXT'
--     dynamic state enabled, then
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetDepthClipNegativeOneToOneEXT'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-09650# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-depthClampControl 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
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_CLAMP_RANGE_EXT'
--     dynamic state enabled, and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @depthClampEnable@ is 'Vulkan.Core10.FundamentalTypes.TRUE', then
--     'Vulkan.Extensions.VK_EXT_depth_clamp_control.cmdSetDepthClampRangeEXT'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07640# If the
--     @VK_NV_clip_space_w_scaling@ extension is enabled, and a shader
--     object is bound to any graphics stage or a graphics pipeline is
--     bound which was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_W_SCALING_ENABLE_NV'
--     dynamic state enabled, then
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetViewportWScalingEnableNV'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07641# If the
--     @VK_NV_viewport_swizzle@ extension is enabled, and a shader object
--     is bound to any graphics stage or a graphics pipeline is bound which
--     was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV'
--     dynamic state enabled, then
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetViewportSwizzleNV'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07642# If the
--     @VK_NV_fragment_coverage_to_color@ extension is enabled, a shader
--     object is bound to the
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_FRAGMENT_BIT'
--     stage or a graphics pipeline is bound which was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV'
--     dynamic state enabled, and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @rasterizerDiscardEnable@ is
--     'Vulkan.Core10.FundamentalTypes.FALSE', then
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetCoverageToColorEnableNV'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07643# If the
--     @VK_NV_fragment_coverage_to_color@ extension is enabled, a shader
--     object is bound to the
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_FRAGMENT_BIT'
--     stage or a graphics pipeline is bound which was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_COVERAGE_TO_COLOR_LOCATION_NV'
--     dynamic state enabled, the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @rasterizerDiscardEnable@ is
--     'Vulkan.Core10.FundamentalTypes.FALSE', and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @coverageToColorEnable@ is 'Vulkan.Core10.FundamentalTypes.TRUE',
--     then
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetCoverageToColorLocationNV'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07644# If the
--     @VK_NV_framebuffer_mixed_samples@ extension is enabled, a shader
--     object is bound to any graphics stage or a graphics pipeline is
--     bound which was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_COVERAGE_MODULATION_MODE_NV'
--     dynamic state enabled, and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @rasterizerDiscardEnable@ is
--     'Vulkan.Core10.FundamentalTypes.FALSE', then
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetCoverageModulationModeNV'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07645# If the
--     @VK_NV_framebuffer_mixed_samples@ extension is enabled, a shader
--     object is bound to any graphics stage or a graphics pipeline is
--     bound which was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV'
--     dynamic state enabled, the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @rasterizerDiscardEnable@ is
--     'Vulkan.Core10.FundamentalTypes.FALSE', and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @coverageModulationMode@ is any value other than
--     'Vulkan.Extensions.VK_NV_framebuffer_mixed_samples.COVERAGE_MODULATION_MODE_NONE_NV',
--     then
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetCoverageModulationTableEnableNV'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07646# If the
--     @VK_NV_framebuffer_mixed_samples@ extension is enabled, a shader
--     object is bound to any graphics stage or a graphics pipeline is
--     bound which was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_NV'
--     dynamic state enabled, the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @rasterizerDiscardEnable@ is
--     'Vulkan.Core10.FundamentalTypes.FALSE', and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @coverageModulationTableEnable@ is
--     'Vulkan.Core10.FundamentalTypes.TRUE', then
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetCoverageModulationTableNV'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07647# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shadingRateImage shadingRateImage>
--     feature is enabled, a shader object is bound to any graphics stage
--     or a graphics pipeline is bound which was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SHADING_RATE_IMAGE_ENABLE_NV'
--     dynamic state enabled, and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @rasterizerDiscardEnable@ is
--     'Vulkan.Core10.FundamentalTypes.FALSE', then
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetShadingRateImageEnableNV'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-pipelineFragmentShadingRate-09238#
--     If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-pipelineFragmentShadingRate pipelineFragmentShadingRate>
--     feature is enabled, a shader object is bound to the
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_FRAGMENT_BIT'
--     stage or a graphics pipeline is bound which was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR'
--     dynamic state enabled, and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @rasterizerDiscardEnable@ is
--     'Vulkan.Core10.FundamentalTypes.FALSE', then
--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.cmdSetFragmentShadingRateKHR'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07648# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-representativeFragmentTest representativeFragmentTest>
--     feature is enabled, a shader object is bound to any graphics stage
--     or a graphics pipeline is bound which was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NV'
--     dynamic state enabled, and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @rasterizerDiscardEnable@ is
--     'Vulkan.Core10.FundamentalTypes.FALSE', then
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetRepresentativeFragmentTestEnableNV'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07649# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-coverageReductionMode coverageReductionMode>
--     feature is enabled, a shader object is bound to any graphics stage
--     or a graphics pipeline is bound which was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV'
--     dynamic state enabled, and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @rasterizerDiscardEnable@ is
--     'Vulkan.Core10.FundamentalTypes.FALSE', then
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetCoverageReductionModeNV'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-pColorBlendEnables-07470# If
--     the bound graphics pipeline state was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT'
--     state enabled and the last call to
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetColorBlendEnableEXT'
--     set @pColorBlendEnables@ for any attachment to
--     'Vulkan.Core10.FundamentalTypes.TRUE', then for those attachments in
--     the subpass the corresponding image view’s
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
--     /must/ contain
--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-rasterizationSamples-07471#
--     If the bound graphics pipeline state was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT'
--     state enabled, and the current subpass does not use any color
--     and\/or depth\/stencil attachments, then the @rasterizationSamples@
--     in the last call to
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetRasterizationSamplesEXT'
--     /must/ follow the rules for a
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-noattachments zero-attachment subpass>
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-samples-07472# If the bound
--     graphics pipeline state was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SAMPLE_MASK_EXT'
--     state enabled and the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT'
--     state disabled, then the @samples@ parameter in the last call to
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetSampleMaskEXT'
--     /must/ be greater or equal to the
--     'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@
--     parameter used to create the bound graphics pipeline
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-samples-07473# If the bound
--     graphics pipeline state was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SAMPLE_MASK_EXT'
--     state and
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT'
--     states enabled, then the @samples@ parameter in the last call to
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetSampleMaskEXT'
--     /must/ be greater or equal to the @rasterizationSamples@ parameter
--     in the last call to
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetRasterizationSamplesEXT'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-rasterizationSamples-07474#
--     If the bound graphics pipeline state was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT'
--     state enabled, and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multisampledRenderToSingleSampled multisampledRenderToSingleSampled>
--     feature is not enabled, and neither the
--     @VK_AMD_mixed_attachment_samples@ nor the
--     @VK_NV_framebuffer_mixed_samples@ extensions are enabled, then the
--     @rasterizationSamples@ in the last call to
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetRasterizationSamplesEXT'
--     /must/ be the same as the current subpass color and\/or
--     depth\/stencil attachments
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-09211# If the bound
--     graphics pipeline state was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT'
--     state enabled, or a shader object is bound to any graphics stage,
--     and the current render pass instance includes a
--     'Vulkan.Extensions.VK_EXT_multisampled_render_to_single_sampled.MultisampledRenderToSingleSampledInfoEXT'
--     structure with @multisampledRenderToSingleSampledEnable@ equal to
--     'Vulkan.Core10.FundamentalTypes.TRUE', then the
--     @rasterizationSamples@ in the last call to
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetRasterizationSamplesEXT'
--     /must/ be the same as the @rasterizationSamples@ member of that
--     structure
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-firstAttachment-07476# If the
--     bound graphics pipeline state was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT'
--     dynamic state enabled then
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetColorBlendEnableEXT'
--     /must/ have been called in the current command buffer prior to this
--     drawing command, and the attachments specified by the
--     @firstAttachment@ and @attachmentCount@ parameters of
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetColorBlendEnableEXT'
--     calls /must/ specify an enable for all active color attachments in
--     the current subpass
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-rasterizerDiscardEnable-09417#
--     If a shader object is bound to the
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_FRAGMENT_BIT'
--     stage, and the most recent call to
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state2.cmdSetRasterizerDiscardEnable'
--     in the current command buffer set @rasterizerDiscardEnable@ to
--     'Vulkan.Core10.FundamentalTypes.FALSE', then
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetColorBlendEnableEXT'
--     /must/ have been called in the current command buffer prior to this
--     drawing command, and the attachments specified by the
--     @firstAttachment@ and @attachmentCount@ parameters of
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetColorBlendEnableEXT'
--     calls /must/ specify an enable for all active color attachments in
--     the current subpass
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-firstAttachment-07477# If the
--     bound graphics pipeline state was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT'
--     dynamic state enabled then
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetColorBlendEquationEXT'
--     /must/ have been called in the current command buffer prior to this
--     drawing command, and the attachments specified by the
--     @firstAttachment@ and @attachmentCount@ parameters of
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetColorBlendEquationEXT'
--     calls /must/ specify the blend equations for all active color
--     attachments in the current subpass where blending is enabled
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-rasterizerDiscardEnable-09418#
--     If a shader object is bound to the
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_FRAGMENT_BIT'
--     stage, and both the most recent call to
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state2.cmdSetRasterizerDiscardEnable'
--     in the current command buffer set @rasterizerDiscardEnable@ to
--     'Vulkan.Core10.FundamentalTypes.FALSE' and there are color
--     attachments bound, then
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetColorBlendEquationEXT'
--     /must/ have been called in the current command buffer prior to this
--     drawing command, and the attachments specified by the
--     @firstAttachment@ and @attachmentCount@ parameters of
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetColorBlendEquationEXT'
--     calls /must/ specify the blend equations for all active color
--     attachments in the current subpass where blending is enabled
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-firstAttachment-07478# If the
--     bound graphics pipeline state was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_COLOR_WRITE_MASK_EXT'
--     dynamic state enabled then
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetColorWriteMaskEXT'
--     /must/ have been called in the current command buffer prior to this
--     drawing command, and the attachments specified by the
--     @firstAttachment@ and @attachmentCount@ parameters of
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetColorWriteMaskEXT'
--     calls /must/ specify the color write mask for all active color
--     attachments in the current subpass
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-rasterizerDiscardEnable-09419#
--     If a shader object is bound to the
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_FRAGMENT_BIT'
--     stage, and the most recent call to
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state2.cmdSetRasterizerDiscardEnable'
--     in the current command buffer set @rasterizerDiscardEnable@ to
--     'Vulkan.Core10.FundamentalTypes.FALSE', then
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetColorWriteMaskEXT'
--     /must/ have been called in the current command buffer prior to this
--     drawing command, and the attachments specified by the
--     @firstAttachment@ and @attachmentCount@ parameters of
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetColorWriteMaskEXT'
--     calls /must/ specify the color write mask for all active color
--     attachments in the current subpass
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-firstAttachment-07479# If the
--     bound graphics pipeline state was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT'
--     dynamic state enabled then
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetColorBlendAdvancedEXT'
--     /must/ have been called in the current command buffer prior to this
--     drawing command, and the attachments specified by the
--     @firstAttachment@ and @attachmentCount@ parameters of
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetColorBlendAdvancedEXT'
--     calls /must/ specify the advanced blend equations for all active
--     color attachments in the current subpass where blending is enabled
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-advancedBlendMaxColorAttachments-07480#
--     If the bound graphics pipeline state was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT'
--     and
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT'
--     dynamic states enabled and the last calls to
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetColorBlendEnableEXT'
--     and
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetColorBlendAdvancedEXT'
--     have enabled advanced blending, then the number of active color
--     attachments in the current subpass /must/ not exceed
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-advancedBlendMaxColorAttachments advancedBlendMaxColorAttachments>
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-primitivesGeneratedQueryWithNonZeroStreams-07481#
--     If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-primitivesGeneratedQueryWithNonZeroStreams primitivesGeneratedQueryWithNonZeroStreams>
--     feature is not enabled and the
--     'Vulkan.Core10.Enums.QueryType.QUERY_TYPE_PRIMITIVES_GENERATED_EXT'
--     query is active, and the bound graphics pipeline was created with
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_RASTERIZATION_STREAM_EXT'
--     state enabled, the last call to
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetRasterizationStreamEXT'
--     /must/ have set the @rasterizationStream@ to zero
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-sampleLocationsPerPixel-07482#
--     If the bound graphics pipeline state was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT'
--     state enabled and the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT'
--     state disabled, and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @sampleLocationsEnable@ is 'Vulkan.Core10.FundamentalTypes.TRUE',
--     then the @sampleLocationsPerPixel@ member of @pSampleLocationsInfo@
--     in the last call to
--     'Vulkan.Extensions.VK_EXT_sample_locations.cmdSetSampleLocationsEXT'
--     /must/ equal the @rasterizationSamples@ member of the
--     'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'
--     structure the bound graphics pipeline has been created with
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-sampleLocationsPerPixel-07483#
--     If the bound graphics pipeline state was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT'
--     state enabled and the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT'
--     state enabled, and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @sampleLocationsEnable@ is 'Vulkan.Core10.FundamentalTypes.TRUE',
--     then the @sampleLocationsPerPixel@ member of @pSampleLocationsInfo@
--     in the last call to
--     'Vulkan.Extensions.VK_EXT_sample_locations.cmdSetSampleLocationsEXT'
--     /must/ equal the @rasterizationSamples@ parameter of the last call
--     to
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetRasterizationSamplesEXT'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-sampleLocationsEnable-07484#
--     If a shader object is bound to the
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_FRAGMENT_BIT'
--     stage, or the bound graphics pipeline was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT'
--     state enabled, and @sampleLocationsEnable@ was
--     'Vulkan.Core10.FundamentalTypes.TRUE' in the last call to
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetSampleLocationsEnableEXT',
--     and the current subpass has a depth\/stencil attachment, then that
--     attachment /must/ have been created with the
--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT'
--     bit set
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-sampleLocationsEnable-07485#
--     If a shader object is bound to the
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_FRAGMENT_BIT'
--     stage, or the bound graphics pipeline state was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT'
--     state enabled and the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT'
--     state enabled, and if @sampleLocationsEnable@ was
--     'Vulkan.Core10.FundamentalTypes.TRUE' in the last call to
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetSampleLocationsEnableEXT',
--     then the @sampleLocationsInfo.sampleLocationGridSize.width@ in the
--     last call to
--     'Vulkan.Extensions.VK_EXT_sample_locations.cmdSetSampleLocationsEXT'
--     /must/ evenly divide
--     'Vulkan.Extensions.VK_EXT_sample_locations.MultisamplePropertiesEXT'::@sampleLocationGridSize.width@
--     as returned by
--     'Vulkan.Extensions.VK_EXT_sample_locations.getPhysicalDeviceMultisamplePropertiesEXT'
--     with a @samples@ parameter equaling @rasterizationSamples@
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-sampleLocationsEnable-07486#
--     If a shader object is bound to the
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_FRAGMENT_BIT'
--     stage, or the bound graphics pipeline state was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT'
--     state enabled and the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT'
--     state enabled, and if @sampleLocationsEnable@ was
--     'Vulkan.Core10.FundamentalTypes.TRUE' in the last call to
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetSampleLocationsEnableEXT',
--     then the @sampleLocationsInfo.sampleLocationGridSize.height@ in the
--     last call to
--     'Vulkan.Extensions.VK_EXT_sample_locations.cmdSetSampleLocationsEXT'
--     /must/ evenly divide
--     'Vulkan.Extensions.VK_EXT_sample_locations.MultisamplePropertiesEXT'::@sampleLocationGridSize.height@
--     as returned by
--     'Vulkan.Extensions.VK_EXT_sample_locations.getPhysicalDeviceMultisamplePropertiesEXT'
--     with a @samples@ parameter equaling @rasterizationSamples@
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-sampleLocationsEnable-07487#
--     If a shader object is bound to the
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_FRAGMENT_BIT'
--     stage, or the bound graphics pipeline state was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT'
--     state enabled, and if @sampleLocationsEnable@ was
--     'Vulkan.Core10.FundamentalTypes.TRUE' in the last call to
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetSampleLocationsEnableEXT',
--     the fragment shader code /must/ not statically use the extended
--     instruction @InterpolateAtSample@
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-sampleLocationsEnable-07936#
--     If the bound graphics pipeline state was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT'
--     state disabled and the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT'
--     state enabled, and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @sampleLocationsEnable@ is 'Vulkan.Core10.FundamentalTypes.TRUE',
--     then @sampleLocationsInfo.sampleLocationGridSize.width@ /must/
--     evenly divide
--     'Vulkan.Extensions.VK_EXT_sample_locations.MultisamplePropertiesEXT'::@sampleLocationGridSize.width@
--     as returned by
--     'Vulkan.Extensions.VK_EXT_sample_locations.getPhysicalDeviceMultisamplePropertiesEXT'
--     with a @samples@ parameter equaling the value of
--     @rasterizationSamples@ in the last call to
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetRasterizationSamplesEXT'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-sampleLocationsEnable-07937#
--     If the bound graphics pipeline state was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT'
--     state disabled and the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT'
--     state enabled, and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @sampleLocationsEnable@ is 'Vulkan.Core10.FundamentalTypes.TRUE',
--     then @sampleLocationsInfo.sampleLocationGridSize.height@ /must/
--     evenly divide
--     'Vulkan.Extensions.VK_EXT_sample_locations.MultisamplePropertiesEXT'::@sampleLocationGridSize.height@
--     as returned by
--     'Vulkan.Extensions.VK_EXT_sample_locations.getPhysicalDeviceMultisamplePropertiesEXT'
--     with a @samples@ parameter equaling the value of
--     @rasterizationSamples@ in the last call to
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetRasterizationSamplesEXT'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-sampleLocationsEnable-07938#
--     If the bound graphics pipeline state was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT'
--     state disabled and the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT'
--     state enabled, and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @sampleLocationsEnable@ is 'Vulkan.Core10.FundamentalTypes.TRUE',
--     then @sampleLocationsInfo.sampleLocationsPerPixel@ /must/ equal
--     @rasterizationSamples@ in the last call to
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetRasterizationSamplesEXT'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-coverageModulationTableEnable-07488#
--     If a shader object is bound to any graphics stage or the bound
--     graphics pipeline state was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV'
--     state enabled, and the last call to
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetCoverageModulationTableEnableNV'
--     set @coverageModulationTableEnable@ to
--     'Vulkan.Core10.FundamentalTypes.TRUE', then the
--     @coverageModulationTableCount@ parameter in the last call to
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetCoverageModulationTableNV'
--     /must/ equal the current @rasterizationSamples@ divided by the
--     number of color samples in the current subpass
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-rasterizationSamples-07489#
--     If the @VK_NV_framebuffer_mixed_samples@ extension 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 current @rasterizationSamples@ /must/ be the same
--     as the sample count of the depth\/stencil attachment
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-coverageToColorEnable-07490#
--     If the bound graphics pipeline state was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV'
--     state enabled and the last call to
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetCoverageToColorEnableNV'
--     set the @coverageToColorEnable@ to
--     'Vulkan.Core10.FundamentalTypes.TRUE', then the current subpass
--     /must/ have a color attachment at the location selected by the last
--     call to
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetCoverageToColorLocationNV'
--     @coverageToColorLocation@, with a
--     'Vulkan.Core10.Enums.Format.Format' of
--     'Vulkan.Core10.Enums.Format.FORMAT_R8_UINT',
--     'Vulkan.Core10.Enums.Format.FORMAT_R8_SINT',
--     'Vulkan.Core10.Enums.Format.FORMAT_R16_UINT',
--     'Vulkan.Core10.Enums.Format.FORMAT_R16_SINT',
--     'Vulkan.Core10.Enums.Format.FORMAT_R32_UINT', or
--     'Vulkan.Core10.Enums.Format.FORMAT_R32_SINT'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-rasterizerDiscardEnable-09420#
--     If the @VK_NV_fragment_coverage_to_color@ extension is enabled, and
--     a shader object is bound to the
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_FRAGMENT_BIT'
--     stage, and the most recent call to
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state2.cmdSetRasterizerDiscardEnable'
--     in the current command buffer set @rasterizerDiscardEnable@ to
--     'Vulkan.Core10.FundamentalTypes.FALSE', and the last call to
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetCoverageToColorEnableNV'
--     set the @coverageToColorEnable@ to
--     'Vulkan.Core10.FundamentalTypes.TRUE', then the current subpass
--     /must/ have a color attachment at the location selected by the last
--     call to
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetCoverageToColorLocationNV'
--     @coverageToColorLocation@, with a
--     'Vulkan.Core10.Enums.Format.Format' of
--     'Vulkan.Core10.Enums.Format.FORMAT_R8_UINT',
--     'Vulkan.Core10.Enums.Format.FORMAT_R8_SINT',
--     'Vulkan.Core10.Enums.Format.FORMAT_R16_UINT',
--     'Vulkan.Core10.Enums.Format.FORMAT_R16_SINT',
--     'Vulkan.Core10.Enums.Format.FORMAT_R32_UINT', or
--     'Vulkan.Core10.Enums.Format.FORMAT_R32_SINT'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-coverageReductionMode-07491#
--     If this @VK_NV_coverage_reduction_mode@ extension is enabled, the
--     bound graphics pipeline state was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV'
--     and
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT'
--     states enabled, the current coverage reduction mode
--     @coverageReductionMode@, then the current @rasterizationSamples@,
--     and the sample counts for the color and depth\/stencil attachments
--     (if the subpass has them) /must/ be a valid combination returned by
--     'Vulkan.Extensions.VK_NV_coverage_reduction_mode.getPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-viewportCount-07492# If the
--     bound graphics pipeline state was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT'
--     dynamic state enabled, but not the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV'
--     dynamic state enabled, then the bound graphics pipeline /must/ have
--     been created with
--     'Vulkan.Extensions.VK_NV_viewport_swizzle.PipelineViewportSwizzleStateCreateInfoNV'::@viewportCount@
--     greater or equal to the @viewportCount@ parameter in the last call
--     to
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state.cmdSetViewportWithCount'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-viewportCount-07493# If the
--     bound graphics pipeline state was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT'
--     and
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV'
--     dynamic states enabled then the @viewportCount@ parameter in the
--     last call to
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetViewportSwizzleNV'
--     /must/ be greater than or equal to the @viewportCount@ parameter in
--     the last call to
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state.cmdSetViewportWithCount'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-viewportCount-09421# If the
--     @VK_NV_viewport_swizzle@ extension is enabled, and a shader object
--     is bound to any graphics stage, then the @viewportCount@ parameter
--     in the last call to
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetViewportSwizzleNV'
--     /must/ be greater than or equal to the @viewportCount@ parameter in
--     the last call to
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state.cmdSetViewportWithCount'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-rasterizationSamples-07494#
--     If the @VK_NV_framebuffer_mixed_samples@ extension is enabled, and
--     if the current subpass has any color attachments and
--     @rasterizationSamples@ of the last call to
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetRasterizationSamplesEXT'
--     is greater than the number of color samples, then the pipeline
--     @sampleShadingEnable@ /must/ be
--     'Vulkan.Core10.FundamentalTypes.FALSE'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-stippledLineEnable-07495# If
--     the bound graphics pipeline state was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT'
--     or
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT'
--     dynamic states enabled, and if the current @stippledLineEnable@
--     state is 'Vulkan.Core10.FundamentalTypes.TRUE' and the current
--     @lineRasterizationMode@ state is
--     'Vulkan.Extensions.VK_KHR_line_rasterization.LINE_RASTERIZATION_MODE_RECTANGULAR_KHR',
--     then the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-stippledRectangularLines stippledRectangularLines>
--     feature /must/ be enabled
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-stippledLineEnable-07496# If
--     the bound graphics pipeline state was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT'
--     or
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT'
--     dynamic states enabled, and if the current @stippledLineEnable@
--     state is 'Vulkan.Core10.FundamentalTypes.TRUE' and the current
--     @lineRasterizationMode@ state is
--     'Vulkan.Extensions.VK_KHR_line_rasterization.LINE_RASTERIZATION_MODE_BRESENHAM_KHR',
--     then the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-stippledBresenhamLines stippledBresenhamLines>
--     feature /must/ be enabled
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-stippledLineEnable-07497# If
--     the bound graphics pipeline state was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT'
--     or
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT'
--     dynamic states enabled, and if the current @stippledLineEnable@
--     state is 'Vulkan.Core10.FundamentalTypes.TRUE' and the current
--     @lineRasterizationMode@ state is
--     'Vulkan.Extensions.VK_KHR_line_rasterization.LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_KHR',
--     then the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-stippledSmoothLines stippledSmoothLines>
--     feature /must/ be enabled
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-stippledLineEnable-07498# If
--     the bound graphics pipeline state was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT'
--     or
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT'
--     dynamic states enabled, and if the current @stippledLineEnable@
--     state is 'Vulkan.Core10.FundamentalTypes.TRUE' and the current
--     @lineRasterizationMode@ state is
--     'Vulkan.Extensions.VK_KHR_line_rasterization.LINE_RASTERIZATION_MODE_DEFAULT_KHR',
--     then the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-stippledRectangularLines stippledRectangularLines>
--     feature /must/ be enabled and
--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@strictLines@
--     /must/ be 'Vulkan.Core10.FundamentalTypes.TRUE'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-conservativePointAndLineRasterization-07499#
--     If the bound graphics pipeline state was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT'
--     dynamic state enabled,
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-conservativePointAndLineRasterization conservativePointAndLineRasterization>
--     is not supported, and the effective primitive topology output by the
--     last pre-rasterization shader stage is a line or point, then the
--     @conservativeRasterizationMode@ set by the last call to
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetConservativeRasterizationModeEXT'
--     /must/ be
--     'Vulkan.Extensions.VK_EXT_conservative_rasterization.CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-stage-07073# If the bound
--     pipeline was created with the
--     'Vulkan.Core10.Pipeline.PipelineShaderStageCreateInfo'::@stage@
--     member of an element of
--     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@pStages@ set
--     to
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_VERTEX_BIT',
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TESSELLATION_CONTROL_BIT',
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TESSELLATION_EVALUATION_BIT'
--     or
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_GEOMETRY_BIT',
--     then
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-mesh-shader Mesh Shader Queries>
--     /must/ not be active
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-08877# If a shader
--     object is bound to the
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_FRAGMENT_BIT'
--     stage or a graphics pipeline is bound which was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT'
--     dynamic state enabled, and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-current-value current value>
--     of @rasterizerDiscardEnable@ is
--     'Vulkan.Core10.FundamentalTypes.FALSE', then
--     'Vulkan.Extensions.VK_EXT_attachment_feedback_loop_dynamic_state.cmdSetAttachmentFeedbackLoopEnableEXT'
--     /must/ have been called and not subsequently
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#dynamic-state-lifetime invalidated>
--     in the current command buffer prior to this drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-07850# If dynamic state
--     was inherited from
--     'Vulkan.Extensions.VK_NV_inherited_viewport_scissor.CommandBufferInheritanceViewportScissorInfoNV',
--     it /must/ be set in the current command buffer prior to this drawing
--     command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-08684# If there is no
--     bound graphics pipeline,
--     'Vulkan.Extensions.VK_EXT_shader_object.cmdBindShadersEXT' /must/
--     have been called in the current command buffer with @pStages@ with
--     an element of
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_VERTEX_BIT'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-08685# If there is no
--     bound graphics pipeline, and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellationShader>
--     feature is enabled,
--     'Vulkan.Extensions.VK_EXT_shader_object.cmdBindShadersEXT' /must/
--     have been called in the current command buffer with @pStages@ with
--     an element of
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TESSELLATION_CONTROL_BIT'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-08686# If there is no
--     bound graphics pipeline, and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-tessellationShader tessellationShader>
--     feature is enabled,
--     'Vulkan.Extensions.VK_EXT_shader_object.cmdBindShadersEXT' /must/
--     have been called in the current command buffer with @pStages@ with
--     an element of
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TESSELLATION_EVALUATION_BIT'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-08687# If there is no
--     bound graphics pipeline, and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-geometryShader geometryShader>
--     feature is enabled,
--     'Vulkan.Extensions.VK_EXT_shader_object.cmdBindShadersEXT' /must/
--     have been called in the current command buffer with @pStages@ with
--     an element of
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_GEOMETRY_BIT'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-08688# If there is no
--     bound graphics pipeline,
--     'Vulkan.Extensions.VK_EXT_shader_object.cmdBindShadersEXT' /must/
--     have been called in the current command buffer with @pStages@ with
--     an element of
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_FRAGMENT_BIT'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-08689# If there is no
--     bound graphics pipeline, and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-taskShader taskShader>
--     feature is enabled,
--     'Vulkan.Extensions.VK_EXT_shader_object.cmdBindShadersEXT' /must/
--     have been called in the current command buffer with @pStages@ with
--     an element of
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TASK_BIT_EXT'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-08690# If there is no
--     bound graphics pipeline, and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader meshShader>
--     feature is enabled,
--     'Vulkan.Extensions.VK_EXT_shader_object.cmdBindShadersEXT' /must/
--     have been called in the current command buffer with @pStages@ with
--     an element of
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_MESH_BIT_EXT'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-08693# If there is no
--     bound graphics pipeline, and at least one of the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-taskShader taskShader>
--     and
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader meshShader>
--     features is enabled, one of the
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_VERTEX_BIT' or
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_MESH_BIT_EXT'
--     stages /must/ have a valid 'Vulkan.Extensions.Handles.ShaderEXT'
--     bound, and the other /must/ have no
--     'Vulkan.Extensions.Handles.ShaderEXT' bound
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-08694# If there is no
--     bound graphics pipeline, and both the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-taskShader taskShader>
--     and
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader meshShader>
--     features are enabled, and a valid
--     'Vulkan.Extensions.Handles.ShaderEXT' is bound the to the
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_MESH_BIT_EXT'
--     stage, and that 'Vulkan.Extensions.Handles.ShaderEXT' was created
--     without the
--     'Vulkan.Extensions.VK_EXT_shader_object.SHADER_CREATE_NO_TASK_SHADER_BIT_EXT'
--     flag, a valid 'Vulkan.Extensions.Handles.ShaderEXT' /must/ be bound
--     to the
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TASK_BIT_EXT'
--     stage
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-08695# If there is no
--     bound graphics pipeline, and both the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-taskShader taskShader>
--     and
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-meshShader meshShader>
--     features are enabled, and a valid
--     'Vulkan.Extensions.Handles.ShaderEXT' is bound the to the
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_MESH_BIT_EXT'
--     stage, and that 'Vulkan.Extensions.Handles.ShaderEXT' was created
--     with the
--     'Vulkan.Extensions.VK_EXT_shader_object.SHADER_CREATE_NO_TASK_SHADER_BIT_EXT'
--     flag, there /must/ be no 'Vulkan.Extensions.Handles.ShaderEXT' bound
--     to the
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TASK_BIT_EXT'
--     stage
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-08696# If there is no
--     bound graphics pipeline, and a valid
--     'Vulkan.Extensions.Handles.ShaderEXT' is bound to the
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_VERTEX_BIT'
--     stage, there /must/ be no 'Vulkan.Extensions.Handles.ShaderEXT'
--     bound to either the
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_TASK_BIT_EXT'
--     stage or the
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_MESH_BIT_EXT'
--     stage
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-08698# If any graphics
--     shader is bound which was created with the
--     'Vulkan.Extensions.VK_EXT_shader_object.SHADER_CREATE_LINK_STAGE_BIT_EXT'
--     flag, then all shaders created with the
--     'Vulkan.Extensions.VK_EXT_shader_object.SHADER_CREATE_LINK_STAGE_BIT_EXT'
--     flag in the same
--     'Vulkan.Extensions.VK_EXT_shader_object.createShadersEXT' call
--     /must/ also be bound
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-08699# If any graphics
--     shader is bound which was created with the
--     'Vulkan.Extensions.VK_EXT_shader_object.SHADER_CREATE_LINK_STAGE_BIT_EXT'
--     flag, any stages in between stages whose shaders which did not
--     create a shader with the
--     'Vulkan.Extensions.VK_EXT_shader_object.SHADER_CREATE_LINK_STAGE_BIT_EXT'
--     flag as part of the same
--     'Vulkan.Extensions.VK_EXT_shader_object.createShadersEXT' call
--     /must/ not have any 'Vulkan.Extensions.Handles.ShaderEXT' bound
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-08878# All bound
--     graphics shader objects /must/ have been created with identical or
--     identically defined push constant ranges
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-08879# All bound
--     graphics shader objects /must/ have been created with identical or
--     identically defined arrays of descriptor set layouts
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-colorAttachmentCount-09372#
--     If the current render pass instance was begun with
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering'
--     and a
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.RenderingInfo'::@colorAttachmentCount@
--     equal to @1@, a color attachment with a resolve mode of
--     'Vulkan.Core12.Enums.ResolveModeFlagBits.RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID',
--     and a fragment shader is bound, it /must/ not declare the
--     @DepthReplacing@ or @StencilRefReplacingEXT@ execution modes
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-pDynamicStates-08715# If the
--     bound graphics pipeline state includes a fragment shader stage, was
--     created with
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_WRITE_ENABLE'
--     set in
--     'Vulkan.Core10.Pipeline.PipelineDynamicStateCreateInfo'::@pDynamicStates@,
--     and the fragment shader declares the @EarlyFragmentTests@ execution
--     mode and uses @OpDepthAttachmentReadEXT@, the @depthWriteEnable@
--     parameter in the last call to
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state.cmdSetDepthWriteEnable'
--     /must/ be 'Vulkan.Core10.FundamentalTypes.FALSE'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-pDynamicStates-08716# If the
--     bound graphics pipeline state includes a fragment shader stage, was
--     created with
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_STENCIL_WRITE_MASK'
--     set in
--     'Vulkan.Core10.Pipeline.PipelineDynamicStateCreateInfo'::@pDynamicStates@,
--     and the fragment shader declares the @EarlyFragmentTests@ execution
--     mode and uses @OpStencilAttachmentReadEXT@, the @writeMask@
--     parameter in the last call to
--     'Vulkan.Core10.CommandBufferBuilding.cmdSetStencilWriteMask' /must/
--     be @0@
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-09116# If a shader
--     object is bound to any graphics stage or the bound graphics pipeline
--     was created with
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_COLOR_WRITE_MASK_EXT',
--     and the format of any color attachment is
--     'Vulkan.Core10.Enums.Format.FORMAT_E5B9G9R9_UFLOAT_PACK32', the
--     corresponding element of the @pColorWriteMasks@ parameter of
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetColorWriteMaskEXT'
--     /must/ either include all of
--     'Vulkan.Core10.Enums.ColorComponentFlagBits.COLOR_COMPONENT_R_BIT',
--     'Vulkan.Core10.Enums.ColorComponentFlagBits.COLOR_COMPONENT_G_BIT',
--     and
--     'Vulkan.Core10.Enums.ColorComponentFlagBits.COLOR_COMPONENT_B_BIT',
--     or none of them
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-maxFragmentDualSrcAttachments-09239#
--     If
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-blending blending>
--     is enabled for any attachment where either the source or destination
--     blend factors for that attachment
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#framebuffer-dsb use the secondary color input>,
--     the maximum value of @Location@ for any output attachment
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-staticuse statically used>
--     in the @Fragment@ @Execution@ @Model@ executed by this command
--     /must/ be less than
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxFragmentDualSrcAttachments maxFragmentDualSrcAttachments>
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-09548# If the current
--     render pass was begun with
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering',
--     and there is no shader object bound to any graphics stage, the value
--     of each element of
--     'Vulkan.Extensions.VK_KHR_dynamic_rendering_local_read.RenderingAttachmentLocationInfoKHR'::@pColorAttachmentLocations@
--     set by
--     'Vulkan.Extensions.VK_KHR_dynamic_rendering_local_read.cmdSetRenderingAttachmentLocationsKHR'
--     /must/ match the value set for the corresponding element in the
--     bound pipeline
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-09549# If the current
--     render pass was begun with
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.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 via
--     'Vulkan.Extensions.VK_KHR_dynamic_rendering_local_read.RenderingInputAttachmentIndexInfoKHR'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-09642# If the current
--     render pass was begun with
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering'
--     with the
--     'Vulkan.Core13.Enums.RenderingFlagBits.RENDERING_ENABLE_LEGACY_DITHERING_BIT_EXT'
--     flag, the bound graphics pipeline /must/ have been created with
--     'Vulkan.Extensions.VK_KHR_maintenance5.PIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-09643# If the bound
--     graphics pipeline was created with
--     'Vulkan.Extensions.VK_KHR_maintenance5.PIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT',
--     the current render pass /must/ have begun with
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering'
--     with the
--     'Vulkan.Core13.Enums.RenderingFlagBits.RENDERING_ENABLE_LEGACY_DITHERING_BIT_EXT'
--     flag
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-commandBuffer-11045#
--     @commandBuffer@ /must/ not be a protected command buffer
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-isPreprocessed-11046# If
--     @isPreprocessed@ is 'Vulkan.Core10.FundamentalTypes.TRUE' and
--     'getGeneratedCommandsMemoryRequirementsEXT' did not return a
--     required size of zero then 'cmdPreprocessGeneratedCommandsEXT'
--     /must/ have already been executed on the device before this command
--     executes, and the preprocessing command /must/ have used the same
--     @pGeneratedCommandsInfo@ content as well as the content of the input
--     buffers it references (all except
--     'GeneratedCommandsInfoEXT'::@preprocessBuffer@)
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-isPreprocessed-11047# If
--     @isPreprocessed@ is 'Vulkan.Core10.FundamentalTypes.TRUE' then the
--     @indirectCommandsLayout@ member of @pGeneratedCommandsInfo@ /must/
--     have been created with the
--     'INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_EXT' bit set
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-indirectCommandsLayout-11141#
--     If the @indirectCommandsLayout@ member of @pGeneratedCommandsInfo@
--     was created with the
--     'INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_EXT' bit
--     set, then @isPreprocessed@ /must/ be
--     'Vulkan.Core10.FundamentalTypes.TRUE'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-preprocessAddress-11142# The
--     contents of the @preprocessAddress@ member of
--     @pGeneratedCommandsInfo@ /must/ not have been previously used to
--     record another 'cmdExecuteGeneratedCommandsEXT'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-isPreprocessed-11048# If
--     @isPreprocessed@ is 'Vulkan.Core10.FundamentalTypes.TRUE' then the
--     bound descriptor sets and push constants /must/ match identically
--     with those bound during recording of the corresponding call to
--     'cmdPreprocessGeneratedCommandsEXT'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-isPreprocessed-10198# If
--     @isPreprocessed@ is 'Vulkan.Core10.FundamentalTypes.TRUE' then the
--     conditional render state and its predicate value /must/ match
--     identically with the state and value set during execution of the
--     corresponding call to 'cmdPreprocessGeneratedCommandsEXT'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-isPreprocessed-11049# If
--     @isPreprocessed@ is 'Vulkan.Core10.FundamentalTypes.TRUE' and the
--     @indirectCommandsLayout@ member of @pGeneratedCommandsInfo@ contains
--     a draw token, then the graphics state bound on @commandBuffer@
--     /must/ match identically with the graphics state bound on the
--     @stateCommandBuffer@ passed to 'cmdPreprocessGeneratedCommandsEXT'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-isPreprocessed-11149# If
--     @isPreprocessed@ is 'Vulkan.Core10.FundamentalTypes.TRUE', then the
--     queue family index of @commandBuffer@ /must/ be the same as the
--     queue family index used to allocate the @stateCommandBuffer@ passed
--     to 'cmdPreprocessGeneratedCommandsEXT'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-isPreprocessed-11051# If
--     @isPreprocessed@ is 'Vulkan.Core10.FundamentalTypes.TRUE' and the
--     @indirectCommandsLayout@ member of @pGeneratedCommandsInfo@ contains
--     a dispatch token, then the compute state bound on @commandBuffer@
--     /must/ match identically with the compute state bound on the
--     @stateCommandBuffer@ passed to 'cmdPreprocessGeneratedCommandsEXT'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-isPreprocessed-11052# If
--     @isPreprocessed@ is 'Vulkan.Core10.FundamentalTypes.TRUE' and the
--     @indirectCommandsLayout@ member of @pGeneratedCommandsInfo@ contains
--     a ray tracing token, then the ray tracing state bound on
--     @commandBuffer@ /must/ match identically with the ray tracing state
--     bound on the @stateCommandBuffer@ passed to
--     'cmdPreprocessGeneratedCommandsEXT'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-isPreprocessed-11150# If
--     @isPreprocessed@ is 'Vulkan.Core10.FundamentalTypes.TRUE' and the
--     @indirectCommandsLayout@ member of @pGeneratedCommandsInfo@ contains
--     a ray tracing token, the queue family index @commandBuffer@ was
--     allocated from /must/ be the same queue family index used to
--     allocate the @stateCommandBuffer@ passed to
--     'cmdPreprocessGeneratedCommandsEXT'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-indirectCommandsLayout-11053#
--     If the token sequence of the passed
--     'GeneratedCommandsInfoEXT'::@indirectCommandsLayout@ contains a
--     'INDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT' token, the initial
--     shader state of 'GeneratedCommandsInfoEXT'::@indirectExecutionSet@
--     /must/ be bound on @commandBuffer@
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-indirectCommandsLayout-11004#
--     If @indirectCommandsLayout@ was created with a token sequence that
--     contained the 'INDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT' token
--     and @indirectExecutionSet@ was created using
--     'INDIRECT_EXECUTION_SET_INFO_TYPE_SHADER_OBJECTS_EXT', every
--     executed 'INDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT' token
--     /must/ bind all the shader stages set in the
--     'IndirectCommandsExecutionSetTokenEXT'::@shaderStages@ used to
--     create @indirectCommandsLayout@
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-isPreprocessed-11055# If
--     @isPreprocessed@ is 'Vulkan.Core10.FundamentalTypes.TRUE' and the
--     token sequence of the passed
--     'GeneratedCommandsInfoEXT'::@indirectCommandsLayout@ contains a
--     'INDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT' token, the members
--     of 'GeneratedCommandsInfoEXT'::@indirectExecutionSet@ accessed by
--     this command /must/ not have been modified since the preprocess
--     buffer was generated
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-indirectCommandsLayout-11056#
--     If the @indirectCommandsLayout@ member of @pGeneratedCommandsInfo@
--     contains a draw token, then the active render pass /must/ not have a
--     specified fragment density map
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-deviceGeneratedCommandsTransformFeedback-11057#
--     If
--     <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#limits-deviceGeneratedCommandsTransformFeedback deviceGeneratedCommandsTransformFeedback>
--     is not supported on device, transform feedback /must/ not be active
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-indirectExecutionSet-11058#
--     If transform feedback is active,
--     'GeneratedCommandsInfoEXT'::@indirectExecutionSet@ /must/ be
--     'Vulkan.Core10.APIConstants.NULL_HANDLE'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-deviceGeneratedCommands-11059#
--     The
--     <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#features-deviceGeneratedCommands ::deviceGeneratedCommands>
--     feature /must/ be enabled
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-supportedIndirectCommandsShaderStages-11060#
--     The bound shader stages /must/ be supported by
--     <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#limits-supportedIndirectCommandsShaderStages ::supportedIndirectCommandsShaderStages>
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-supportedIndirectCommandsShaderStages-11061#
--     Only stages specified in
--     <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#limits-supportedIndirectCommandsShaderStages ::supportedIndirectCommandsShaderStages>
--     /can/ be set in @pGeneratedCommandsInfo->shaderStages@
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-None-11062# If a rendering
--     pass is currently active, the view mask /must/ be @0@
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-commandBuffer-11143#
--     @commandBuffer@ /must/ not have been created with
--     'Vulkan.Core10.Enums.CommandBufferUsageFlagBits.COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT'
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-commandBuffer-parameter#
--     @commandBuffer@ /must/ be a valid
--     'Vulkan.Core10.Handles.CommandBuffer' handle
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-pGeneratedCommandsInfo-parameter#
--     @pGeneratedCommandsInfo@ /must/ be a valid pointer to a valid
--     'GeneratedCommandsInfoEXT' structure
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-commandBuffer-recording#
--     @commandBuffer@ /must/ be in the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-commandBuffer-cmdpool# The
--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
--     allocated from /must/ support graphics, or compute operations
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-videocoding# This command
--     /must/ only be called outside of a video coding scope
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsEXT-bufferlevel# @commandBuffer@
--     /must/ be a primary 'Vulkan.Core10.Handles.CommandBuffer'
--
-- == Host Synchronization
--
-- -   Host access to @commandBuffer@ /must/ be externally synchronized
--
-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
--     @commandBuffer@ was allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- \'
--
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------+
-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginVideoCodingKHR Video Coding Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-queueoperation-command-types Command Type> |
-- +============================================================================================================================+========================================================================================================================+=============================================================================================================================+=======================================================================================================================+========================================================================================================================================+
-- | Primary                                                                                                                    | Both                                                                                                                   | Outside                                                                                                                     | Graphics                                                                                                              | Action                                                                                                                                 |
-- |                                                                                                                            |                                                                                                                        |                                                                                                                             | Compute                                                                                                               | Indirection                                                                                                                            |
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------+
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_device_generated_commands VK_EXT_device_generated_commands>,
-- 'Vulkan.Core10.FundamentalTypes.Bool32',
-- 'Vulkan.Core10.Handles.CommandBuffer', 'GeneratedCommandsInfoEXT'
cmdExecuteGeneratedCommandsEXT :: forall a io
                                . ( Extendss GeneratedCommandsInfoEXT a
                                  , PokeChain a
                                  , MonadIO io )
                               => -- | @commandBuffer@ is the command buffer into which the command is
                                  -- recorded.
                                  CommandBuffer
                               -> -- | @isPreprocessed@ represents whether the input data has already been
                                  -- preprocessed on the device. If it is
                                  -- 'Vulkan.Core10.FundamentalTypes.FALSE' this command will implicitly
                                  -- trigger the preprocessing step, otherwise not.
                                  ("isPreprocessed" ::: Bool)
                               -> -- | @pGeneratedCommandsInfo@ is a pointer to a 'GeneratedCommandsInfoEXT'
                                  -- structure containing parameters affecting the generation of commands.
                                  (GeneratedCommandsInfoEXT a)
                               -> io ()
cmdExecuteGeneratedCommandsEXT :: forall (a :: [*]) (io :: * -> *).
(Extendss GeneratedCommandsInfoEXT a, PokeChain a, MonadIO io) =>
CommandBuffer
-> ("isPreprocessed" ::: Bool)
-> GeneratedCommandsInfoEXT a
-> io ()
cmdExecuteGeneratedCommandsEXT CommandBuffer
commandBuffer
                                 "isPreprocessed" ::: Bool
isPreprocessed
                                 GeneratedCommandsInfoEXT a
generatedCommandsInfo = IO () -> io ()
forall a. IO a -> io a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> io ())
-> (ContT () IO () -> IO ()) -> ContT () IO () -> io ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> io ()) -> ContT () IO () -> io ()
forall a b. (a -> b) -> a -> b
$ do
  let vkCmdExecuteGeneratedCommandsEXTPtr :: FunPtr
  (Ptr CommandBuffer_T
   -> Bool32 -> Ptr (SomeStruct GeneratedCommandsInfoEXT) -> IO ())
vkCmdExecuteGeneratedCommandsEXTPtr = DeviceCmds
-> FunPtr
     (Ptr CommandBuffer_T
      -> Bool32 -> Ptr (SomeStruct GeneratedCommandsInfoEXT) -> IO ())
pVkCmdExecuteGeneratedCommandsEXT (case CommandBuffer
commandBuffer of CommandBuffer{DeviceCmds
deviceCmds :: DeviceCmds
$sel:deviceCmds:CommandBuffer :: CommandBuffer -> DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO () -> ContT () IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT () m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ ("isPreprocessed" ::: Bool) -> IO () -> IO ()
forall (f :: * -> *).
Applicative f =>
("isPreprocessed" ::: Bool) -> f () -> f ()
unless (FunPtr
  (Ptr CommandBuffer_T
   -> Bool32 -> Ptr (SomeStruct GeneratedCommandsInfoEXT) -> IO ())
vkCmdExecuteGeneratedCommandsEXTPtr FunPtr
  (Ptr CommandBuffer_T
   -> Bool32 -> Ptr (SomeStruct GeneratedCommandsInfoEXT) -> IO ())
-> FunPtr
     (Ptr CommandBuffer_T
      -> Bool32 -> Ptr (SomeStruct GeneratedCommandsInfoEXT) -> IO ())
-> "isPreprocessed" ::: Bool
forall a. Eq a => a -> a -> "isPreprocessed" ::: Bool
/= FunPtr
  (Ptr CommandBuffer_T
   -> Bool32 -> Ptr (SomeStruct GeneratedCommandsInfoEXT) -> IO ())
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
    IOException -> IO ()
forall e a. Exception e => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"The function pointer for vkCmdExecuteGeneratedCommandsEXT is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkCmdExecuteGeneratedCommandsEXT' :: Ptr CommandBuffer_T
-> Bool32 -> Ptr (SomeStruct GeneratedCommandsInfoEXT) -> IO ()
vkCmdExecuteGeneratedCommandsEXT' = FunPtr
  (Ptr CommandBuffer_T
   -> Bool32 -> Ptr (SomeStruct GeneratedCommandsInfoEXT) -> IO ())
-> Ptr CommandBuffer_T
-> Bool32
-> Ptr (SomeStruct GeneratedCommandsInfoEXT)
-> IO ()
mkVkCmdExecuteGeneratedCommandsEXT FunPtr
  (Ptr CommandBuffer_T
   -> Bool32 -> Ptr (SomeStruct GeneratedCommandsInfoEXT) -> IO ())
vkCmdExecuteGeneratedCommandsEXTPtr
  Ptr (GeneratedCommandsInfoEXT a)
pGeneratedCommandsInfo <- ((Ptr (GeneratedCommandsInfoEXT a) -> IO ()) -> IO ())
-> ContT () IO (Ptr (GeneratedCommandsInfoEXT a))
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr (GeneratedCommandsInfoEXT a) -> IO ()) -> IO ())
 -> ContT () IO (Ptr (GeneratedCommandsInfoEXT a)))
-> ((Ptr (GeneratedCommandsInfoEXT a) -> IO ()) -> IO ())
-> ContT () IO (Ptr (GeneratedCommandsInfoEXT a))
forall a b. (a -> b) -> a -> b
$ GeneratedCommandsInfoEXT a
-> (Ptr (GeneratedCommandsInfoEXT a) -> IO ()) -> IO ()
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
forall b.
GeneratedCommandsInfoEXT a
-> (Ptr (GeneratedCommandsInfoEXT a) -> IO b) -> IO b
withCStruct (GeneratedCommandsInfoEXT a
generatedCommandsInfo)
  IO () -> ContT () IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT () m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ String -> IO () -> IO ()
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkCmdExecuteGeneratedCommandsEXT" (Ptr CommandBuffer_T
-> Bool32 -> Ptr (SomeStruct GeneratedCommandsInfoEXT) -> IO ()
vkCmdExecuteGeneratedCommandsEXT'
                                                                (CommandBuffer -> Ptr CommandBuffer_T
commandBufferHandle (CommandBuffer
commandBuffer))
                                                                (("isPreprocessed" ::: Bool) -> Bool32
boolToBool32 ("isPreprocessed" ::: Bool
isPreprocessed))
                                                                (Ptr (GeneratedCommandsInfoEXT a)
-> Ptr (SomeStruct GeneratedCommandsInfoEXT)
forall (a :: [*] -> *) (es :: [*]).
Ptr (a es) -> Ptr (SomeStruct a)
forgetExtensions Ptr (GeneratedCommandsInfoEXT a)
pGeneratedCommandsInfo))
  () -> ContT () IO ()
forall a. a -> ContT () IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (() -> ContT () IO ()) -> () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ ()


foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkCmdPreprocessGeneratedCommandsEXT
  :: FunPtr (Ptr CommandBuffer_T -> Ptr (SomeStruct GeneratedCommandsInfoEXT) -> Ptr CommandBuffer_T -> IO ()) -> Ptr CommandBuffer_T -> Ptr (SomeStruct GeneratedCommandsInfoEXT) -> Ptr CommandBuffer_T -> 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
--
-- -   #VUID-vkCmdPreprocessGeneratedCommandsEXT-commandBuffer-11081#
--     @commandBuffer@ /must/ not be a protected command buffer
--
-- -   #VUID-vkCmdPreprocessGeneratedCommandsEXT-pGeneratedCommandsInfo-11082#
--     @pGeneratedCommandsInfo@’s @indirectCommandsLayout@ /must/ have been
--     created with the
--     'INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_EXT' bit set
--
-- -   #VUID-vkCmdPreprocessGeneratedCommandsEXT-indirectCommandsLayout-11084#
--     If the token sequence of the passed
--     'GeneratedCommandsInfoEXT'::@indirectCommandsLayout@ contains a
--     'INDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT' token, the initial
--     shader state of 'GeneratedCommandsInfoEXT'::@indirectExecutionSet@
--     /must/ be bound on @stateCommandBuffer@
--
-- -   #VUID-vkCmdPreprocessGeneratedCommandsEXT-stateCommandBuffer-11138#
--     @stateCommandBuffer@ /must/ be in the recording state
--
-- -   #VUID-vkCmdPreprocessGeneratedCommandsEXT-deviceGeneratedCommands-11087#
--     The
--     <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#features-deviceGeneratedCommands ::deviceGeneratedCommands>
--     feature /must/ be enabled
--
-- -   #VUID-vkCmdPreprocessGeneratedCommandsEXT-supportedIndirectCommandsShaderStages-11088#
--     Only stages specified in
--     <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#limits-supportedIndirectCommandsShaderStages ::supportedIndirectCommandsShaderStages>
--     /can/ be set in @pGeneratedCommandsInfo->shaderStages@
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkCmdPreprocessGeneratedCommandsEXT-commandBuffer-parameter#
--     @commandBuffer@ /must/ be a valid
--     'Vulkan.Core10.Handles.CommandBuffer' handle
--
-- -   #VUID-vkCmdPreprocessGeneratedCommandsEXT-pGeneratedCommandsInfo-parameter#
--     @pGeneratedCommandsInfo@ /must/ be a valid pointer to a valid
--     'GeneratedCommandsInfoEXT' structure
--
-- -   #VUID-vkCmdPreprocessGeneratedCommandsEXT-stateCommandBuffer-parameter#
--     @stateCommandBuffer@ /must/ be a valid
--     'Vulkan.Core10.Handles.CommandBuffer' handle
--
-- -   #VUID-vkCmdPreprocessGeneratedCommandsEXT-commandBuffer-recording#
--     @commandBuffer@ /must/ be in the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
--
-- -   #VUID-vkCmdPreprocessGeneratedCommandsEXT-commandBuffer-cmdpool# The
--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
--     allocated from /must/ support graphics, or compute operations
--
-- -   #VUID-vkCmdPreprocessGeneratedCommandsEXT-renderpass# This command
--     /must/ only be called outside of a render pass instance
--
-- -   #VUID-vkCmdPreprocessGeneratedCommandsEXT-videocoding# This command
--     /must/ only be called outside of a video coding scope
--
-- -   #VUID-vkCmdPreprocessGeneratedCommandsEXT-bufferlevel#
--     @commandBuffer@ /must/ be a primary
--     'Vulkan.Core10.Handles.CommandBuffer'
--
-- -   #VUID-vkCmdPreprocessGeneratedCommandsEXT-commonparent# Both of
--     @commandBuffer@, and @stateCommandBuffer@ /must/ have been created,
--     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'
--
-- == Host Synchronization
--
-- -   Host access to @commandBuffer@ /must/ be externally synchronized
--
-- -   Host access to @stateCommandBuffer@ /must/ be externally
--     synchronized
--
-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
--     @commandBuffer@ was allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- \'
--
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------+
-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginVideoCodingKHR Video Coding Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-queueoperation-command-types Command Type> |
-- +============================================================================================================================+========================================================================================================================+=============================================================================================================================+=======================================================================================================================+========================================================================================================================================+
-- | Primary                                                                                                                    | Outside                                                                                                                | Outside                                                                                                                     | Graphics                                                                                                              | Action                                                                                                                                 |
-- |                                                                                                                            |                                                                                                                        |                                                                                                                             | Compute                                                                                                               |                                                                                                                                        |
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------+
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_device_generated_commands VK_EXT_device_generated_commands>,
-- 'Vulkan.Core10.Handles.CommandBuffer', 'GeneratedCommandsInfoEXT'
cmdPreprocessGeneratedCommandsEXT :: forall a io
                                   . ( Extendss GeneratedCommandsInfoEXT a
                                     , PokeChain a
                                     , MonadIO io )
                                  => -- | @commandBuffer@ is the command buffer which does the preprocessing.
                                     CommandBuffer
                                  -> -- | @pGeneratedCommandsInfo@ is a pointer to a 'GeneratedCommandsInfoEXT'
                                     -- structure containing parameters affecting the preprocessing step.
                                     (GeneratedCommandsInfoEXT a)
                                  -> -- | @stateCommandBuffer@ is a command buffer from which to snapshot current
                                     -- states affecting the preprocessing step. When a graphics command action
                                     -- token is used, graphics state is snapshotted. When a compute action
                                     -- command token is used, compute state is snapshotted. When a ray tracing
                                     -- action command token is used, ray tracing state is snapshotted. It can
                                     -- be deleted at any time after this command has been recorded.
                                     ("stateCommandBuffer" ::: CommandBuffer)
                                  -> io ()
cmdPreprocessGeneratedCommandsEXT :: forall (a :: [*]) (io :: * -> *).
(Extendss GeneratedCommandsInfoEXT a, PokeChain a, MonadIO io) =>
CommandBuffer
-> GeneratedCommandsInfoEXT a -> CommandBuffer -> io ()
cmdPreprocessGeneratedCommandsEXT CommandBuffer
commandBuffer
                                    GeneratedCommandsInfoEXT a
generatedCommandsInfo
                                    CommandBuffer
stateCommandBuffer = IO () -> io ()
forall a. IO a -> io a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> io ())
-> (ContT () IO () -> IO ()) -> ContT () IO () -> io ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> io ()) -> ContT () IO () -> io ()
forall a b. (a -> b) -> a -> b
$ do
  let vkCmdPreprocessGeneratedCommandsEXTPtr :: FunPtr
  (Ptr CommandBuffer_T
   -> Ptr (SomeStruct GeneratedCommandsInfoEXT)
   -> Ptr CommandBuffer_T
   -> IO ())
vkCmdPreprocessGeneratedCommandsEXTPtr = DeviceCmds
-> FunPtr
     (Ptr CommandBuffer_T
      -> Ptr (SomeStruct GeneratedCommandsInfoEXT)
      -> Ptr CommandBuffer_T
      -> IO ())
pVkCmdPreprocessGeneratedCommandsEXT (case CommandBuffer
commandBuffer of CommandBuffer{DeviceCmds
$sel:deviceCmds:CommandBuffer :: CommandBuffer -> DeviceCmds
deviceCmds :: DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO () -> ContT () IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT () m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ ("isPreprocessed" ::: Bool) -> IO () -> IO ()
forall (f :: * -> *).
Applicative f =>
("isPreprocessed" ::: Bool) -> f () -> f ()
unless (FunPtr
  (Ptr CommandBuffer_T
   -> Ptr (SomeStruct GeneratedCommandsInfoEXT)
   -> Ptr CommandBuffer_T
   -> IO ())
vkCmdPreprocessGeneratedCommandsEXTPtr FunPtr
  (Ptr CommandBuffer_T
   -> Ptr (SomeStruct GeneratedCommandsInfoEXT)
   -> Ptr CommandBuffer_T
   -> IO ())
-> FunPtr
     (Ptr CommandBuffer_T
      -> Ptr (SomeStruct GeneratedCommandsInfoEXT)
      -> Ptr CommandBuffer_T
      -> IO ())
-> "isPreprocessed" ::: Bool
forall a. Eq a => a -> a -> "isPreprocessed" ::: Bool
/= FunPtr
  (Ptr CommandBuffer_T
   -> Ptr (SomeStruct GeneratedCommandsInfoEXT)
   -> Ptr CommandBuffer_T
   -> IO ())
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
    IOException -> IO ()
forall e a. Exception e => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"The function pointer for vkCmdPreprocessGeneratedCommandsEXT is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkCmdPreprocessGeneratedCommandsEXT' :: Ptr CommandBuffer_T
-> Ptr (SomeStruct GeneratedCommandsInfoEXT)
-> Ptr CommandBuffer_T
-> IO ()
vkCmdPreprocessGeneratedCommandsEXT' = FunPtr
  (Ptr CommandBuffer_T
   -> Ptr (SomeStruct GeneratedCommandsInfoEXT)
   -> Ptr CommandBuffer_T
   -> IO ())
-> Ptr CommandBuffer_T
-> Ptr (SomeStruct GeneratedCommandsInfoEXT)
-> Ptr CommandBuffer_T
-> IO ()
mkVkCmdPreprocessGeneratedCommandsEXT FunPtr
  (Ptr CommandBuffer_T
   -> Ptr (SomeStruct GeneratedCommandsInfoEXT)
   -> Ptr CommandBuffer_T
   -> IO ())
vkCmdPreprocessGeneratedCommandsEXTPtr
  Ptr (GeneratedCommandsInfoEXT a)
pGeneratedCommandsInfo <- ((Ptr (GeneratedCommandsInfoEXT a) -> IO ()) -> IO ())
-> ContT () IO (Ptr (GeneratedCommandsInfoEXT a))
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr (GeneratedCommandsInfoEXT a) -> IO ()) -> IO ())
 -> ContT () IO (Ptr (GeneratedCommandsInfoEXT a)))
-> ((Ptr (GeneratedCommandsInfoEXT a) -> IO ()) -> IO ())
-> ContT () IO (Ptr (GeneratedCommandsInfoEXT a))
forall a b. (a -> b) -> a -> b
$ GeneratedCommandsInfoEXT a
-> (Ptr (GeneratedCommandsInfoEXT a) -> IO ()) -> IO ()
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
forall b.
GeneratedCommandsInfoEXT a
-> (Ptr (GeneratedCommandsInfoEXT a) -> IO b) -> IO b
withCStruct (GeneratedCommandsInfoEXT a
generatedCommandsInfo)
  IO () -> ContT () IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT () m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ String -> IO () -> IO ()
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkCmdPreprocessGeneratedCommandsEXT" (Ptr CommandBuffer_T
-> Ptr (SomeStruct GeneratedCommandsInfoEXT)
-> Ptr CommandBuffer_T
-> IO ()
vkCmdPreprocessGeneratedCommandsEXT'
                                                                   (CommandBuffer -> Ptr CommandBuffer_T
commandBufferHandle (CommandBuffer
commandBuffer))
                                                                   (Ptr (GeneratedCommandsInfoEXT a)
-> Ptr (SomeStruct GeneratedCommandsInfoEXT)
forall (a :: [*] -> *) (es :: [*]).
Ptr (a es) -> Ptr (SomeStruct a)
forgetExtensions Ptr (GeneratedCommandsInfoEXT a)
pGeneratedCommandsInfo)
                                                                   (CommandBuffer -> Ptr CommandBuffer_T
commandBufferHandle (CommandBuffer
stateCommandBuffer)))
  () -> ContT () IO ()
forall a. a -> ContT () IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (() -> ContT () IO ()) -> () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ ()


foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkGetGeneratedCommandsMemoryRequirementsEXT
  :: FunPtr (Ptr Device_T -> Ptr (SomeStruct GeneratedCommandsMemoryRequirementsInfoEXT) -> Ptr (SomeStruct MemoryRequirements2) -> IO ()) -> Ptr Device_T -> Ptr (SomeStruct GeneratedCommandsMemoryRequirementsInfoEXT) -> Ptr (SomeStruct MemoryRequirements2) -> IO ()

-- | 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
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_device_generated_commands VK_EXT_device_generated_commands>,
-- 'Vulkan.Core10.Handles.Device',
-- 'GeneratedCommandsMemoryRequirementsInfoEXT',
-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.MemoryRequirements2'
getGeneratedCommandsMemoryRequirementsEXT :: forall a b io
                                           . ( Extendss GeneratedCommandsMemoryRequirementsInfoEXT a
                                             , PokeChain a
                                             , Extendss MemoryRequirements2 b
                                             , PokeChain b
                                             , PeekChain b
                                             , MonadIO io )
                                          => -- | @device@ is the logical device that owns the buffer.
                                             --
                                             -- #VUID-vkGetGeneratedCommandsMemoryRequirementsEXT-device-parameter#
                                             -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
                                             Device
                                          -> -- | @pInfo@ is a pointer to a 'GeneratedCommandsMemoryRequirementsInfoEXT'
                                             -- structure containing parameters required for the memory requirements
                                             -- query.
                                             --
                                             -- #VUID-vkGetGeneratedCommandsMemoryRequirementsEXT-pInfo-parameter#
                                             -- @pInfo@ /must/ be a valid pointer to a valid
                                             -- 'GeneratedCommandsMemoryRequirementsInfoEXT' structure
                                             (GeneratedCommandsMemoryRequirementsInfoEXT a)
                                          -> io (MemoryRequirements2 b)
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)
getGeneratedCommandsMemoryRequirementsEXT Device
device GeneratedCommandsMemoryRequirementsInfoEXT a
info = IO (MemoryRequirements2 b) -> io (MemoryRequirements2 b)
forall a. IO a -> io a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (MemoryRequirements2 b) -> io (MemoryRequirements2 b))
-> (ContT (MemoryRequirements2 b) IO (MemoryRequirements2 b)
    -> IO (MemoryRequirements2 b))
-> ContT (MemoryRequirements2 b) IO (MemoryRequirements2 b)
-> io (MemoryRequirements2 b)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT (MemoryRequirements2 b) IO (MemoryRequirements2 b)
-> IO (MemoryRequirements2 b)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (MemoryRequirements2 b) IO (MemoryRequirements2 b)
 -> io (MemoryRequirements2 b))
-> ContT (MemoryRequirements2 b) IO (MemoryRequirements2 b)
-> io (MemoryRequirements2 b)
forall a b. (a -> b) -> a -> b
$ do
  let vkGetGeneratedCommandsMemoryRequirementsEXTPtr :: FunPtr
  (Ptr Device_T
   -> Ptr (SomeStruct GeneratedCommandsMemoryRequirementsInfoEXT)
   -> Ptr (SomeStruct MemoryRequirements2)
   -> IO ())
vkGetGeneratedCommandsMemoryRequirementsEXTPtr = DeviceCmds
-> FunPtr
     (Ptr Device_T
      -> Ptr (SomeStruct GeneratedCommandsMemoryRequirementsInfoEXT)
      -> Ptr (SomeStruct MemoryRequirements2)
      -> IO ())
pVkGetGeneratedCommandsMemoryRequirementsEXT (case Device
device of Device{DeviceCmds
deviceCmds :: DeviceCmds
$sel:deviceCmds:Device :: Device -> DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO () -> ContT (MemoryRequirements2 b) IO ()
forall (m :: * -> *) a.
Monad m =>
m a -> ContT (MemoryRequirements2 b) m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT (MemoryRequirements2 b) IO ())
-> IO () -> ContT (MemoryRequirements2 b) IO ()
forall a b. (a -> b) -> a -> b
$ ("isPreprocessed" ::: Bool) -> IO () -> IO ()
forall (f :: * -> *).
Applicative f =>
("isPreprocessed" ::: Bool) -> f () -> f ()
unless (FunPtr
  (Ptr Device_T
   -> Ptr (SomeStruct GeneratedCommandsMemoryRequirementsInfoEXT)
   -> Ptr (SomeStruct MemoryRequirements2)
   -> IO ())
vkGetGeneratedCommandsMemoryRequirementsEXTPtr FunPtr
  (Ptr Device_T
   -> Ptr (SomeStruct GeneratedCommandsMemoryRequirementsInfoEXT)
   -> Ptr (SomeStruct MemoryRequirements2)
   -> IO ())
-> FunPtr
     (Ptr Device_T
      -> Ptr (SomeStruct GeneratedCommandsMemoryRequirementsInfoEXT)
      -> Ptr (SomeStruct MemoryRequirements2)
      -> IO ())
-> "isPreprocessed" ::: Bool
forall a. Eq a => a -> a -> "isPreprocessed" ::: Bool
/= FunPtr
  (Ptr Device_T
   -> Ptr (SomeStruct GeneratedCommandsMemoryRequirementsInfoEXT)
   -> Ptr (SomeStruct MemoryRequirements2)
   -> IO ())
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
    IOException -> IO ()
forall e a. Exception e => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"The function pointer for vkGetGeneratedCommandsMemoryRequirementsEXT is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkGetGeneratedCommandsMemoryRequirementsEXT' :: Ptr Device_T
-> Ptr (SomeStruct GeneratedCommandsMemoryRequirementsInfoEXT)
-> Ptr (SomeStruct MemoryRequirements2)
-> IO ()
vkGetGeneratedCommandsMemoryRequirementsEXT' = FunPtr
  (Ptr Device_T
   -> Ptr (SomeStruct GeneratedCommandsMemoryRequirementsInfoEXT)
   -> Ptr (SomeStruct MemoryRequirements2)
   -> IO ())
-> Ptr Device_T
-> Ptr (SomeStruct GeneratedCommandsMemoryRequirementsInfoEXT)
-> Ptr (SomeStruct MemoryRequirements2)
-> IO ()
mkVkGetGeneratedCommandsMemoryRequirementsEXT FunPtr
  (Ptr Device_T
   -> Ptr (SomeStruct GeneratedCommandsMemoryRequirementsInfoEXT)
   -> Ptr (SomeStruct MemoryRequirements2)
   -> IO ())
vkGetGeneratedCommandsMemoryRequirementsEXTPtr
  Ptr (GeneratedCommandsMemoryRequirementsInfoEXT a)
pInfo <- ((Ptr (GeneratedCommandsMemoryRequirementsInfoEXT a)
  -> IO (MemoryRequirements2 b))
 -> IO (MemoryRequirements2 b))
-> ContT
     (MemoryRequirements2 b)
     IO
     (Ptr (GeneratedCommandsMemoryRequirementsInfoEXT a))
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr (GeneratedCommandsMemoryRequirementsInfoEXT a)
   -> IO (MemoryRequirements2 b))
  -> IO (MemoryRequirements2 b))
 -> ContT
      (MemoryRequirements2 b)
      IO
      (Ptr (GeneratedCommandsMemoryRequirementsInfoEXT a)))
-> ((Ptr (GeneratedCommandsMemoryRequirementsInfoEXT a)
     -> IO (MemoryRequirements2 b))
    -> IO (MemoryRequirements2 b))
-> ContT
     (MemoryRequirements2 b)
     IO
     (Ptr (GeneratedCommandsMemoryRequirementsInfoEXT a))
forall a b. (a -> b) -> a -> b
$ GeneratedCommandsMemoryRequirementsInfoEXT a
-> (Ptr (GeneratedCommandsMemoryRequirementsInfoEXT a)
    -> IO (MemoryRequirements2 b))
-> IO (MemoryRequirements2 b)
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
forall b.
GeneratedCommandsMemoryRequirementsInfoEXT a
-> (Ptr (GeneratedCommandsMemoryRequirementsInfoEXT a) -> IO b)
-> IO b
withCStruct (GeneratedCommandsMemoryRequirementsInfoEXT a
info)
  Ptr (MemoryRequirements2 b)
pPMemoryRequirements <- ((Ptr (MemoryRequirements2 b) -> IO (MemoryRequirements2 b))
 -> IO (MemoryRequirements2 b))
-> ContT (MemoryRequirements2 b) IO (Ptr (MemoryRequirements2 b))
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (forall a b. ToCStruct a => (Ptr a -> IO b) -> IO b
withZeroCStruct @(MemoryRequirements2 _))
  IO () -> ContT (MemoryRequirements2 b) IO ()
forall (m :: * -> *) a.
Monad m =>
m a -> ContT (MemoryRequirements2 b) m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT (MemoryRequirements2 b) IO ())
-> IO () -> ContT (MemoryRequirements2 b) IO ()
forall a b. (a -> b) -> a -> b
$ String -> IO () -> IO ()
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkGetGeneratedCommandsMemoryRequirementsEXT" (Ptr Device_T
-> Ptr (SomeStruct GeneratedCommandsMemoryRequirementsInfoEXT)
-> Ptr (SomeStruct MemoryRequirements2)
-> IO ()
vkGetGeneratedCommandsMemoryRequirementsEXT'
                                                                           (Device -> Ptr Device_T
deviceHandle (Device
device))
                                                                           (Ptr (GeneratedCommandsMemoryRequirementsInfoEXT a)
-> Ptr (SomeStruct GeneratedCommandsMemoryRequirementsInfoEXT)
forall (a :: [*] -> *) (es :: [*]).
Ptr (a es) -> Ptr (SomeStruct a)
forgetExtensions Ptr (GeneratedCommandsMemoryRequirementsInfoEXT a)
pInfo)
                                                                           (Ptr (MemoryRequirements2 b) -> Ptr (SomeStruct MemoryRequirements2)
forall (a :: [*] -> *) (es :: [*]).
Ptr (a es) -> Ptr (SomeStruct a)
forgetExtensions (Ptr (MemoryRequirements2 b)
pPMemoryRequirements)))
  MemoryRequirements2 b
pMemoryRequirements <- IO (MemoryRequirements2 b)
-> ContT (MemoryRequirements2 b) IO (MemoryRequirements2 b)
forall (m :: * -> *) a.
Monad m =>
m a -> ContT (MemoryRequirements2 b) m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO (MemoryRequirements2 b)
 -> ContT (MemoryRequirements2 b) IO (MemoryRequirements2 b))
-> IO (MemoryRequirements2 b)
-> ContT (MemoryRequirements2 b) IO (MemoryRequirements2 b)
forall a b. (a -> b) -> a -> b
$ forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @(MemoryRequirements2 _) Ptr (MemoryRequirements2 b)
pPMemoryRequirements
  MemoryRequirements2 b
-> ContT (MemoryRequirements2 b) IO (MemoryRequirements2 b)
forall a. a -> ContT (MemoryRequirements2 b) IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (MemoryRequirements2 b
 -> ContT (MemoryRequirements2 b) IO (MemoryRequirements2 b))
-> MemoryRequirements2 b
-> ContT (MemoryRequirements2 b) IO (MemoryRequirements2 b)
forall a b. (a -> b) -> a -> b
$ (MemoryRequirements2 b
pMemoryRequirements)


foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkCreateIndirectCommandsLayoutEXT
  :: FunPtr (Ptr Device_T -> Ptr (SomeStruct IndirectCommandsLayoutCreateInfoEXT) -> Ptr AllocationCallbacks -> Ptr IndirectCommandsLayoutEXT -> IO Result) -> Ptr Device_T -> Ptr (SomeStruct IndirectCommandsLayoutCreateInfoEXT) -> Ptr AllocationCallbacks -> Ptr IndirectCommandsLayoutEXT -> IO Result

-- | vkCreateIndirectCommandsLayoutEXT - Create an indirect command layout
-- object
--
-- == Valid Usage
--
-- -   #VUID-vkCreateIndirectCommandsLayoutEXT-deviceGeneratedCommands-11089#
--     The
--     <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#features-deviceGeneratedCommands ::deviceGeneratedCommands>
--     feature /must/ be enabled
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkCreateIndirectCommandsLayoutEXT-device-parameter# @device@
--     /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
--
-- -   #VUID-vkCreateIndirectCommandsLayoutEXT-pCreateInfo-parameter#
--     @pCreateInfo@ /must/ be a valid pointer to a valid
--     'IndirectCommandsLayoutCreateInfoEXT' structure
--
-- -   #VUID-vkCreateIndirectCommandsLayoutEXT-pAllocator-parameter# If
--     @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid pointer
--     to a valid 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
--     structure
--
-- -   #VUID-vkCreateIndirectCommandsLayoutEXT-pIndirectCommandsLayout-parameter#
--     @pIndirectCommandsLayout@ /must/ be a valid pointer to a
--     'Vulkan.Extensions.Handles.IndirectCommandsLayoutEXT' handle
--
-- == Return Codes
--
-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
--
--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
--
-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_device_generated_commands VK_EXT_device_generated_commands>,
-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
-- 'Vulkan.Core10.Handles.Device', 'IndirectCommandsLayoutCreateInfoEXT',
-- 'Vulkan.Extensions.Handles.IndirectCommandsLayoutEXT'
createIndirectCommandsLayoutEXT :: forall a io
                                 . ( Extendss IndirectCommandsLayoutCreateInfoEXT a
                                   , PokeChain a
                                   , MonadIO io )
                                => -- | @device@ is the logical device that creates the indirect command layout.
                                   Device
                                -> -- | @pCreateInfo@ is a pointer to a 'IndirectCommandsLayoutCreateInfoEXT'
                                   -- structure containing parameters affecting creation of the indirect
                                   -- command layout.
                                   (IndirectCommandsLayoutCreateInfoEXT a)
                                -> -- | @pAllocator@ controls host memory allocation as described in the
                                   -- <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#memory-allocation Memory Allocation>
                                   -- chapter.
                                   ("allocator" ::: Maybe AllocationCallbacks)
                                -> io (IndirectCommandsLayoutEXT)
createIndirectCommandsLayoutEXT :: forall (a :: [*]) (io :: * -> *).
(Extendss IndirectCommandsLayoutCreateInfoEXT a, PokeChain a,
 MonadIO io) =>
Device
-> IndirectCommandsLayoutCreateInfoEXT a
-> ("allocator" ::: Maybe AllocationCallbacks)
-> io IndirectCommandsLayoutEXT
createIndirectCommandsLayoutEXT Device
device
                                  IndirectCommandsLayoutCreateInfoEXT a
createInfo
                                  "allocator" ::: Maybe AllocationCallbacks
allocator = IO IndirectCommandsLayoutEXT -> io IndirectCommandsLayoutEXT
forall a. IO a -> io a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO IndirectCommandsLayoutEXT -> io IndirectCommandsLayoutEXT)
-> (ContT IndirectCommandsLayoutEXT IO IndirectCommandsLayoutEXT
    -> IO IndirectCommandsLayoutEXT)
-> ContT IndirectCommandsLayoutEXT IO IndirectCommandsLayoutEXT
-> io IndirectCommandsLayoutEXT
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT IndirectCommandsLayoutEXT IO IndirectCommandsLayoutEXT
-> IO IndirectCommandsLayoutEXT
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT IndirectCommandsLayoutEXT IO IndirectCommandsLayoutEXT
 -> io IndirectCommandsLayoutEXT)
-> ContT IndirectCommandsLayoutEXT IO IndirectCommandsLayoutEXT
-> io IndirectCommandsLayoutEXT
forall a b. (a -> b) -> a -> b
$ do
  let vkCreateIndirectCommandsLayoutEXTPtr :: FunPtr
  (Ptr Device_T
   -> Ptr (SomeStruct IndirectCommandsLayoutCreateInfoEXT)
   -> Ptr AllocationCallbacks
   -> Ptr IndirectCommandsLayoutEXT
   -> IO Result)
vkCreateIndirectCommandsLayoutEXTPtr = DeviceCmds
-> FunPtr
     (Ptr Device_T
      -> Ptr (SomeStruct IndirectCommandsLayoutCreateInfoEXT)
      -> Ptr AllocationCallbacks
      -> Ptr IndirectCommandsLayoutEXT
      -> IO Result)
pVkCreateIndirectCommandsLayoutEXT (case Device
device of Device{DeviceCmds
$sel:deviceCmds:Device :: Device -> DeviceCmds
deviceCmds :: DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO () -> ContT IndirectCommandsLayoutEXT IO ()
forall (m :: * -> *) a.
Monad m =>
m a -> ContT IndirectCommandsLayoutEXT m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT IndirectCommandsLayoutEXT IO ())
-> IO () -> ContT IndirectCommandsLayoutEXT IO ()
forall a b. (a -> b) -> a -> b
$ ("isPreprocessed" ::: Bool) -> IO () -> IO ()
forall (f :: * -> *).
Applicative f =>
("isPreprocessed" ::: Bool) -> f () -> f ()
unless (FunPtr
  (Ptr Device_T
   -> Ptr (SomeStruct IndirectCommandsLayoutCreateInfoEXT)
   -> Ptr AllocationCallbacks
   -> Ptr IndirectCommandsLayoutEXT
   -> IO Result)
vkCreateIndirectCommandsLayoutEXTPtr FunPtr
  (Ptr Device_T
   -> Ptr (SomeStruct IndirectCommandsLayoutCreateInfoEXT)
   -> Ptr AllocationCallbacks
   -> Ptr IndirectCommandsLayoutEXT
   -> IO Result)
-> FunPtr
     (Ptr Device_T
      -> Ptr (SomeStruct IndirectCommandsLayoutCreateInfoEXT)
      -> Ptr AllocationCallbacks
      -> Ptr IndirectCommandsLayoutEXT
      -> IO Result)
-> "isPreprocessed" ::: Bool
forall a. Eq a => a -> a -> "isPreprocessed" ::: Bool
/= FunPtr
  (Ptr Device_T
   -> Ptr (SomeStruct IndirectCommandsLayoutCreateInfoEXT)
   -> Ptr AllocationCallbacks
   -> Ptr IndirectCommandsLayoutEXT
   -> IO Result)
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
    IOException -> IO ()
forall e a. Exception e => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"The function pointer for vkCreateIndirectCommandsLayoutEXT is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkCreateIndirectCommandsLayoutEXT' :: Ptr Device_T
-> Ptr (SomeStruct IndirectCommandsLayoutCreateInfoEXT)
-> Ptr AllocationCallbacks
-> Ptr IndirectCommandsLayoutEXT
-> IO Result
vkCreateIndirectCommandsLayoutEXT' = FunPtr
  (Ptr Device_T
   -> Ptr (SomeStruct IndirectCommandsLayoutCreateInfoEXT)
   -> Ptr AllocationCallbacks
   -> Ptr IndirectCommandsLayoutEXT
   -> IO Result)
-> Ptr Device_T
-> Ptr (SomeStruct IndirectCommandsLayoutCreateInfoEXT)
-> Ptr AllocationCallbacks
-> Ptr IndirectCommandsLayoutEXT
-> IO Result
mkVkCreateIndirectCommandsLayoutEXT FunPtr
  (Ptr Device_T
   -> Ptr (SomeStruct IndirectCommandsLayoutCreateInfoEXT)
   -> Ptr AllocationCallbacks
   -> Ptr IndirectCommandsLayoutEXT
   -> IO Result)
vkCreateIndirectCommandsLayoutEXTPtr
  Ptr (IndirectCommandsLayoutCreateInfoEXT a)
pCreateInfo <- ((Ptr (IndirectCommandsLayoutCreateInfoEXT a)
  -> IO IndirectCommandsLayoutEXT)
 -> IO IndirectCommandsLayoutEXT)
-> ContT
     IndirectCommandsLayoutEXT
     IO
     (Ptr (IndirectCommandsLayoutCreateInfoEXT a))
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr (IndirectCommandsLayoutCreateInfoEXT a)
   -> IO IndirectCommandsLayoutEXT)
  -> IO IndirectCommandsLayoutEXT)
 -> ContT
      IndirectCommandsLayoutEXT
      IO
      (Ptr (IndirectCommandsLayoutCreateInfoEXT a)))
-> ((Ptr (IndirectCommandsLayoutCreateInfoEXT a)
     -> IO IndirectCommandsLayoutEXT)
    -> IO IndirectCommandsLayoutEXT)
-> ContT
     IndirectCommandsLayoutEXT
     IO
     (Ptr (IndirectCommandsLayoutCreateInfoEXT a))
forall a b. (a -> b) -> a -> b
$ IndirectCommandsLayoutCreateInfoEXT a
-> (Ptr (IndirectCommandsLayoutCreateInfoEXT a)
    -> IO IndirectCommandsLayoutEXT)
-> IO IndirectCommandsLayoutEXT
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
forall b.
IndirectCommandsLayoutCreateInfoEXT a
-> (Ptr (IndirectCommandsLayoutCreateInfoEXT a) -> IO b) -> IO b
withCStruct (IndirectCommandsLayoutCreateInfoEXT a
createInfo)
  Ptr AllocationCallbacks
pAllocator <- case ("allocator" ::: Maybe AllocationCallbacks
allocator) of
    "allocator" ::: Maybe AllocationCallbacks
Nothing -> Ptr AllocationCallbacks
-> ContT IndirectCommandsLayoutEXT IO (Ptr AllocationCallbacks)
forall a. a -> ContT IndirectCommandsLayoutEXT IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Ptr AllocationCallbacks
forall a. Ptr a
nullPtr
    Just AllocationCallbacks
j -> ((Ptr AllocationCallbacks -> IO IndirectCommandsLayoutEXT)
 -> IO IndirectCommandsLayoutEXT)
-> ContT IndirectCommandsLayoutEXT IO (Ptr AllocationCallbacks)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr AllocationCallbacks -> IO IndirectCommandsLayoutEXT)
  -> IO IndirectCommandsLayoutEXT)
 -> ContT IndirectCommandsLayoutEXT IO (Ptr AllocationCallbacks))
-> ((Ptr AllocationCallbacks -> IO IndirectCommandsLayoutEXT)
    -> IO IndirectCommandsLayoutEXT)
-> ContT IndirectCommandsLayoutEXT IO (Ptr AllocationCallbacks)
forall a b. (a -> b) -> a -> b
$ AllocationCallbacks
-> (Ptr AllocationCallbacks -> IO IndirectCommandsLayoutEXT)
-> IO IndirectCommandsLayoutEXT
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
forall b.
AllocationCallbacks -> (Ptr AllocationCallbacks -> IO b) -> IO b
withCStruct (AllocationCallbacks
j)
  Ptr IndirectCommandsLayoutEXT
pPIndirectCommandsLayout <- ((Ptr IndirectCommandsLayoutEXT -> IO IndirectCommandsLayoutEXT)
 -> IO IndirectCommandsLayoutEXT)
-> ContT
     IndirectCommandsLayoutEXT IO (Ptr IndirectCommandsLayoutEXT)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr IndirectCommandsLayoutEXT -> IO IndirectCommandsLayoutEXT)
  -> IO IndirectCommandsLayoutEXT)
 -> ContT
      IndirectCommandsLayoutEXT IO (Ptr IndirectCommandsLayoutEXT))
-> ((Ptr IndirectCommandsLayoutEXT -> IO IndirectCommandsLayoutEXT)
    -> IO IndirectCommandsLayoutEXT)
-> ContT
     IndirectCommandsLayoutEXT IO (Ptr IndirectCommandsLayoutEXT)
forall a b. (a -> b) -> a -> b
$ IO (Ptr IndirectCommandsLayoutEXT)
-> (Ptr IndirectCommandsLayoutEXT -> IO ())
-> (Ptr IndirectCommandsLayoutEXT -> IO IndirectCommandsLayoutEXT)
-> IO IndirectCommandsLayoutEXT
forall a b c. IO a -> (a -> IO b) -> (a -> IO c) -> IO c
bracket (forall a. Int -> IO (Ptr a)
callocBytes @IndirectCommandsLayoutEXT Int
8) Ptr IndirectCommandsLayoutEXT -> IO ()
forall a. Ptr a -> IO ()
free
  Result
r <- IO Result -> ContT IndirectCommandsLayoutEXT IO Result
forall (m :: * -> *) a.
Monad m =>
m a -> ContT IndirectCommandsLayoutEXT m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO Result -> ContT IndirectCommandsLayoutEXT IO Result)
-> IO Result -> ContT IndirectCommandsLayoutEXT IO Result
forall a b. (a -> b) -> a -> b
$ String -> IO Result -> IO Result
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkCreateIndirectCommandsLayoutEXT" (Ptr Device_T
-> Ptr (SomeStruct IndirectCommandsLayoutCreateInfoEXT)
-> Ptr AllocationCallbacks
-> Ptr IndirectCommandsLayoutEXT
-> IO Result
vkCreateIndirectCommandsLayoutEXT'
                                                                      (Device -> Ptr Device_T
deviceHandle (Device
device))
                                                                      (Ptr (IndirectCommandsLayoutCreateInfoEXT a)
-> Ptr (SomeStruct IndirectCommandsLayoutCreateInfoEXT)
forall (a :: [*] -> *) (es :: [*]).
Ptr (a es) -> Ptr (SomeStruct a)
forgetExtensions Ptr (IndirectCommandsLayoutCreateInfoEXT a)
pCreateInfo)
                                                                      Ptr AllocationCallbacks
pAllocator
                                                                      (Ptr IndirectCommandsLayoutEXT
pPIndirectCommandsLayout))
  IO () -> ContT IndirectCommandsLayoutEXT IO ()
forall (m :: * -> *) a.
Monad m =>
m a -> ContT IndirectCommandsLayoutEXT m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT IndirectCommandsLayoutEXT IO ())
-> IO () -> ContT IndirectCommandsLayoutEXT IO ()
forall a b. (a -> b) -> a -> b
$ ("isPreprocessed" ::: Bool) -> IO () -> IO ()
forall (f :: * -> *).
Applicative f =>
("isPreprocessed" ::: Bool) -> f () -> f ()
when (Result
r Result -> Result -> "isPreprocessed" ::: Bool
forall a. Ord a => a -> a -> "isPreprocessed" ::: Bool
< Result
SUCCESS) (VulkanException -> IO ()
forall e a. Exception e => e -> IO a
throwIO (Result -> VulkanException
VulkanException Result
r))
  IndirectCommandsLayoutEXT
pIndirectCommandsLayout <- IO IndirectCommandsLayoutEXT
-> ContT IndirectCommandsLayoutEXT IO IndirectCommandsLayoutEXT
forall (m :: * -> *) a.
Monad m =>
m a -> ContT IndirectCommandsLayoutEXT m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO IndirectCommandsLayoutEXT
 -> ContT IndirectCommandsLayoutEXT IO IndirectCommandsLayoutEXT)
-> IO IndirectCommandsLayoutEXT
-> ContT IndirectCommandsLayoutEXT IO IndirectCommandsLayoutEXT
forall a b. (a -> b) -> a -> b
$ forall a. Storable a => Ptr a -> IO a
peek @IndirectCommandsLayoutEXT Ptr IndirectCommandsLayoutEXT
pPIndirectCommandsLayout
  IndirectCommandsLayoutEXT
-> ContT IndirectCommandsLayoutEXT IO IndirectCommandsLayoutEXT
forall a. a -> ContT IndirectCommandsLayoutEXT IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (IndirectCommandsLayoutEXT
 -> ContT IndirectCommandsLayoutEXT IO IndirectCommandsLayoutEXT)
-> IndirectCommandsLayoutEXT
-> ContT IndirectCommandsLayoutEXT IO IndirectCommandsLayoutEXT
forall a b. (a -> b) -> a -> b
$ (IndirectCommandsLayoutEXT
pIndirectCommandsLayout)

-- | A convenience wrapper to make a compatible pair of calls to
-- 'createIndirectCommandsLayoutEXT' and 'destroyIndirectCommandsLayoutEXT'
--
-- To ensure that 'destroyIndirectCommandsLayoutEXT' is always called: pass
-- 'Control.Exception.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.
--
withIndirectCommandsLayoutEXT :: forall a io r . (Extendss IndirectCommandsLayoutCreateInfoEXT a, PokeChain a, MonadIO io) => Device -> IndirectCommandsLayoutCreateInfoEXT a -> Maybe AllocationCallbacks -> (io IndirectCommandsLayoutEXT -> (IndirectCommandsLayoutEXT -> io ()) -> r) -> r
withIndirectCommandsLayoutEXT :: forall (a :: [*]) (io :: * -> *) r.
(Extendss IndirectCommandsLayoutCreateInfoEXT a, PokeChain a,
 MonadIO io) =>
Device
-> IndirectCommandsLayoutCreateInfoEXT a
-> ("allocator" ::: Maybe AllocationCallbacks)
-> (io IndirectCommandsLayoutEXT
    -> (IndirectCommandsLayoutEXT -> io ()) -> r)
-> r
withIndirectCommandsLayoutEXT Device
device IndirectCommandsLayoutCreateInfoEXT a
pCreateInfo "allocator" ::: Maybe AllocationCallbacks
pAllocator io IndirectCommandsLayoutEXT
-> (IndirectCommandsLayoutEXT -> io ()) -> r
b =
  io IndirectCommandsLayoutEXT
-> (IndirectCommandsLayoutEXT -> io ()) -> r
b (Device
-> IndirectCommandsLayoutCreateInfoEXT a
-> ("allocator" ::: Maybe AllocationCallbacks)
-> io IndirectCommandsLayoutEXT
forall (a :: [*]) (io :: * -> *).
(Extendss IndirectCommandsLayoutCreateInfoEXT a, PokeChain a,
 MonadIO io) =>
Device
-> IndirectCommandsLayoutCreateInfoEXT a
-> ("allocator" ::: Maybe AllocationCallbacks)
-> io IndirectCommandsLayoutEXT
createIndirectCommandsLayoutEXT Device
device IndirectCommandsLayoutCreateInfoEXT a
pCreateInfo "allocator" ::: Maybe AllocationCallbacks
pAllocator)
    (\(IndirectCommandsLayoutEXT
o0) -> Device
-> IndirectCommandsLayoutEXT
-> ("allocator" ::: Maybe AllocationCallbacks)
-> io ()
forall (io :: * -> *).
MonadIO io =>
Device
-> IndirectCommandsLayoutEXT
-> ("allocator" ::: Maybe AllocationCallbacks)
-> io ()
destroyIndirectCommandsLayoutEXT Device
device IndirectCommandsLayoutEXT
o0 "allocator" ::: Maybe AllocationCallbacks
pAllocator)


foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkDestroyIndirectCommandsLayoutEXT
  :: FunPtr (Ptr Device_T -> IndirectCommandsLayoutEXT -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> IndirectCommandsLayoutEXT -> Ptr AllocationCallbacks -> IO ()

-- | vkDestroyIndirectCommandsLayoutEXT - Destroy an indirect commands layout
--
-- == Valid Usage
--
-- -   #VUID-vkDestroyIndirectCommandsLayoutEXT-indirectCommandsLayout-11114#
--     All submitted commands that refer to @indirectCommandsLayout@ /must/
--     have completed execution
--
-- -   #VUID-vkDestroyIndirectCommandsLayoutEXT-indirectCommandsLayout-11115#
--     If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
--     provided when @indirectCommandsLayout@ was created, a compatible set
--     of callbacks /must/ be provided here
--
-- -   #VUID-vkDestroyIndirectCommandsLayoutEXT-indirectCommandsLayout-11116#
--     If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
--     provided when @indirectCommandsLayout@ was created, @pAllocator@
--     /must/ be @NULL@
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkDestroyIndirectCommandsLayoutEXT-device-parameter# @device@
--     /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
--
-- -   #VUID-vkDestroyIndirectCommandsLayoutEXT-indirectCommandsLayout-parameter#
--     If @indirectCommandsLayout@ is not
--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @indirectCommandsLayout@
--     /must/ be a valid
--     'Vulkan.Extensions.Handles.IndirectCommandsLayoutEXT' handle
--
-- -   #VUID-vkDestroyIndirectCommandsLayoutEXT-pAllocator-parameter# If
--     @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid pointer
--     to a valid 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
--     structure
--
-- -   #VUID-vkDestroyIndirectCommandsLayoutEXT-indirectCommandsLayout-parent#
--     If @indirectCommandsLayout@ is a valid handle, it /must/ have been
--     created, allocated, or retrieved from @device@
--
-- == Host Synchronization
--
-- -   Host access to @indirectCommandsLayout@ /must/ be externally
--     synchronized
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_device_generated_commands VK_EXT_device_generated_commands>,
-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
-- 'Vulkan.Core10.Handles.Device',
-- 'Vulkan.Extensions.Handles.IndirectCommandsLayoutEXT'
destroyIndirectCommandsLayoutEXT :: forall io
                                  . (MonadIO io)
                                 => -- | @device@ is the logical device that destroys the layout.
                                    Device
                                 -> -- | @indirectCommandsLayout@ is the layout to destroy.
                                    IndirectCommandsLayoutEXT
                                 -> -- | @pAllocator@ controls host memory allocation as described in the
                                    -- <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#memory-allocation Memory Allocation>
                                    -- chapter.
                                    ("allocator" ::: Maybe AllocationCallbacks)
                                 -> io ()
destroyIndirectCommandsLayoutEXT :: forall (io :: * -> *).
MonadIO io =>
Device
-> IndirectCommandsLayoutEXT
-> ("allocator" ::: Maybe AllocationCallbacks)
-> io ()
destroyIndirectCommandsLayoutEXT Device
device
                                   IndirectCommandsLayoutEXT
indirectCommandsLayout
                                   "allocator" ::: Maybe AllocationCallbacks
allocator = IO () -> io ()
forall a. IO a -> io a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> io ())
-> (ContT () IO () -> IO ()) -> ContT () IO () -> io ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> io ()) -> ContT () IO () -> io ()
forall a b. (a -> b) -> a -> b
$ do
  let vkDestroyIndirectCommandsLayoutEXTPtr :: FunPtr
  (Ptr Device_T
   -> IndirectCommandsLayoutEXT -> Ptr AllocationCallbacks -> IO ())
vkDestroyIndirectCommandsLayoutEXTPtr = DeviceCmds
-> FunPtr
     (Ptr Device_T
      -> IndirectCommandsLayoutEXT -> Ptr AllocationCallbacks -> IO ())
pVkDestroyIndirectCommandsLayoutEXT (case Device
device of Device{DeviceCmds
$sel:deviceCmds:Device :: Device -> DeviceCmds
deviceCmds :: DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO () -> ContT () IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT () m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ ("isPreprocessed" ::: Bool) -> IO () -> IO ()
forall (f :: * -> *).
Applicative f =>
("isPreprocessed" ::: Bool) -> f () -> f ()
unless (FunPtr
  (Ptr Device_T
   -> IndirectCommandsLayoutEXT -> Ptr AllocationCallbacks -> IO ())
vkDestroyIndirectCommandsLayoutEXTPtr FunPtr
  (Ptr Device_T
   -> IndirectCommandsLayoutEXT -> Ptr AllocationCallbacks -> IO ())
-> FunPtr
     (Ptr Device_T
      -> IndirectCommandsLayoutEXT -> Ptr AllocationCallbacks -> IO ())
-> "isPreprocessed" ::: Bool
forall a. Eq a => a -> a -> "isPreprocessed" ::: Bool
/= FunPtr
  (Ptr Device_T
   -> IndirectCommandsLayoutEXT -> Ptr AllocationCallbacks -> IO ())
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
    IOException -> IO ()
forall e a. Exception e => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"The function pointer for vkDestroyIndirectCommandsLayoutEXT is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkDestroyIndirectCommandsLayoutEXT' :: Ptr Device_T
-> IndirectCommandsLayoutEXT -> Ptr AllocationCallbacks -> IO ()
vkDestroyIndirectCommandsLayoutEXT' = FunPtr
  (Ptr Device_T
   -> IndirectCommandsLayoutEXT -> Ptr AllocationCallbacks -> IO ())
-> Ptr Device_T
-> IndirectCommandsLayoutEXT
-> Ptr AllocationCallbacks
-> IO ()
mkVkDestroyIndirectCommandsLayoutEXT FunPtr
  (Ptr Device_T
   -> IndirectCommandsLayoutEXT -> Ptr AllocationCallbacks -> IO ())
vkDestroyIndirectCommandsLayoutEXTPtr
  Ptr AllocationCallbacks
pAllocator <- case ("allocator" ::: Maybe AllocationCallbacks
allocator) of
    "allocator" ::: Maybe AllocationCallbacks
Nothing -> Ptr AllocationCallbacks -> ContT () IO (Ptr AllocationCallbacks)
forall a. a -> ContT () IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Ptr AllocationCallbacks
forall a. Ptr a
nullPtr
    Just AllocationCallbacks
j -> ((Ptr AllocationCallbacks -> IO ()) -> IO ())
-> ContT () IO (Ptr AllocationCallbacks)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr AllocationCallbacks -> IO ()) -> IO ())
 -> ContT () IO (Ptr AllocationCallbacks))
-> ((Ptr AllocationCallbacks -> IO ()) -> IO ())
-> ContT () IO (Ptr AllocationCallbacks)
forall a b. (a -> b) -> a -> b
$ AllocationCallbacks -> (Ptr AllocationCallbacks -> IO ()) -> IO ()
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
forall b.
AllocationCallbacks -> (Ptr AllocationCallbacks -> IO b) -> IO b
withCStruct (AllocationCallbacks
j)
  IO () -> ContT () IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT () m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ String -> IO () -> IO ()
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkDestroyIndirectCommandsLayoutEXT" (Ptr Device_T
-> IndirectCommandsLayoutEXT -> Ptr AllocationCallbacks -> IO ()
vkDestroyIndirectCommandsLayoutEXT'
                                                                  (Device -> Ptr Device_T
deviceHandle (Device
device))
                                                                  (IndirectCommandsLayoutEXT
indirectCommandsLayout)
                                                                  Ptr AllocationCallbacks
pAllocator)
  () -> ContT () IO ()
forall a. a -> ContT () IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (() -> ContT () IO ()) -> () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ ()


foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkCreateIndirectExecutionSetEXT
  :: FunPtr (Ptr Device_T -> Ptr IndirectExecutionSetCreateInfoEXT -> Ptr AllocationCallbacks -> Ptr IndirectExecutionSetEXT -> IO Result) -> Ptr Device_T -> Ptr IndirectExecutionSetCreateInfoEXT -> Ptr AllocationCallbacks -> Ptr IndirectExecutionSetEXT -> IO Result

-- | vkCreateIndirectExecutionSetEXT - Create an indirect execution set
--
-- == Valid Usage
--
-- -   #VUID-vkCreateIndirectExecutionSetEXT-deviceGeneratedCommands-11013#
--     The
--     <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#features-deviceGeneratedCommands ::deviceGeneratedCommands>
--     feature /must/ be enabled
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkCreateIndirectExecutionSetEXT-device-parameter# @device@
--     /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
--
-- -   #VUID-vkCreateIndirectExecutionSetEXT-pCreateInfo-parameter#
--     @pCreateInfo@ /must/ be a valid pointer to a valid
--     'IndirectExecutionSetCreateInfoEXT' structure
--
-- -   #VUID-vkCreateIndirectExecutionSetEXT-pAllocator-parameter# If
--     @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid pointer
--     to a valid 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
--     structure
--
-- -   #VUID-vkCreateIndirectExecutionSetEXT-pIndirectExecutionSet-parameter#
--     @pIndirectExecutionSet@ /must/ be a valid pointer to a
--     'Vulkan.Extensions.Handles.IndirectExecutionSetEXT' handle
--
-- == Return Codes
--
-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
--
--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
--
-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_device_generated_commands VK_EXT_device_generated_commands>,
-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
-- 'Vulkan.Core10.Handles.Device', 'IndirectExecutionSetCreateInfoEXT',
-- 'Vulkan.Extensions.Handles.IndirectExecutionSetEXT'
createIndirectExecutionSetEXT :: forall io
                               . (MonadIO io)
                              => -- | @device@ is the logical device that creates the indirect execution set.
                                 Device
                              -> -- | @pCreateInfo@ is a pointer to a 'IndirectExecutionSetCreateInfoEXT'
                                 -- structure containing parameters affecting creation of the indirect
                                 -- execution set.
                                 IndirectExecutionSetCreateInfoEXT
                              -> -- | @pAllocator@ controls host memory allocation as described in the
                                 -- <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#memory-allocation Memory Allocation>
                                 -- chapter.
                                 ("allocator" ::: Maybe AllocationCallbacks)
                              -> io (IndirectExecutionSetEXT)
createIndirectExecutionSetEXT :: forall (io :: * -> *).
MonadIO io =>
Device
-> IndirectExecutionSetCreateInfoEXT
-> ("allocator" ::: Maybe AllocationCallbacks)
-> io IndirectExecutionSetEXT
createIndirectExecutionSetEXT Device
device
                                IndirectExecutionSetCreateInfoEXT
createInfo
                                "allocator" ::: Maybe AllocationCallbacks
allocator = IO IndirectExecutionSetEXT -> io IndirectExecutionSetEXT
forall a. IO a -> io a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO IndirectExecutionSetEXT -> io IndirectExecutionSetEXT)
-> (ContT IndirectExecutionSetEXT IO IndirectExecutionSetEXT
    -> IO IndirectExecutionSetEXT)
-> ContT IndirectExecutionSetEXT IO IndirectExecutionSetEXT
-> io IndirectExecutionSetEXT
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT IndirectExecutionSetEXT IO IndirectExecutionSetEXT
-> IO IndirectExecutionSetEXT
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT IndirectExecutionSetEXT IO IndirectExecutionSetEXT
 -> io IndirectExecutionSetEXT)
-> ContT IndirectExecutionSetEXT IO IndirectExecutionSetEXT
-> io IndirectExecutionSetEXT
forall a b. (a -> b) -> a -> b
$ do
  let vkCreateIndirectExecutionSetEXTPtr :: FunPtr
  (Ptr Device_T
   -> Ptr IndirectExecutionSetCreateInfoEXT
   -> Ptr AllocationCallbacks
   -> Ptr IndirectExecutionSetEXT
   -> IO Result)
vkCreateIndirectExecutionSetEXTPtr = DeviceCmds
-> FunPtr
     (Ptr Device_T
      -> Ptr IndirectExecutionSetCreateInfoEXT
      -> Ptr AllocationCallbacks
      -> Ptr IndirectExecutionSetEXT
      -> IO Result)
pVkCreateIndirectExecutionSetEXT (case Device
device of Device{DeviceCmds
$sel:deviceCmds:Device :: Device -> DeviceCmds
deviceCmds :: DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO () -> ContT IndirectExecutionSetEXT IO ()
forall (m :: * -> *) a.
Monad m =>
m a -> ContT IndirectExecutionSetEXT m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT IndirectExecutionSetEXT IO ())
-> IO () -> ContT IndirectExecutionSetEXT IO ()
forall a b. (a -> b) -> a -> b
$ ("isPreprocessed" ::: Bool) -> IO () -> IO ()
forall (f :: * -> *).
Applicative f =>
("isPreprocessed" ::: Bool) -> f () -> f ()
unless (FunPtr
  (Ptr Device_T
   -> Ptr IndirectExecutionSetCreateInfoEXT
   -> Ptr AllocationCallbacks
   -> Ptr IndirectExecutionSetEXT
   -> IO Result)
vkCreateIndirectExecutionSetEXTPtr FunPtr
  (Ptr Device_T
   -> Ptr IndirectExecutionSetCreateInfoEXT
   -> Ptr AllocationCallbacks
   -> Ptr IndirectExecutionSetEXT
   -> IO Result)
-> FunPtr
     (Ptr Device_T
      -> Ptr IndirectExecutionSetCreateInfoEXT
      -> Ptr AllocationCallbacks
      -> Ptr IndirectExecutionSetEXT
      -> IO Result)
-> "isPreprocessed" ::: Bool
forall a. Eq a => a -> a -> "isPreprocessed" ::: Bool
/= FunPtr
  (Ptr Device_T
   -> Ptr IndirectExecutionSetCreateInfoEXT
   -> Ptr AllocationCallbacks
   -> Ptr IndirectExecutionSetEXT
   -> IO Result)
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
    IOException -> IO ()
forall e a. Exception e => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"The function pointer for vkCreateIndirectExecutionSetEXT is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkCreateIndirectExecutionSetEXT' :: Ptr Device_T
-> Ptr IndirectExecutionSetCreateInfoEXT
-> Ptr AllocationCallbacks
-> Ptr IndirectExecutionSetEXT
-> IO Result
vkCreateIndirectExecutionSetEXT' = FunPtr
  (Ptr Device_T
   -> Ptr IndirectExecutionSetCreateInfoEXT
   -> Ptr AllocationCallbacks
   -> Ptr IndirectExecutionSetEXT
   -> IO Result)
-> Ptr Device_T
-> Ptr IndirectExecutionSetCreateInfoEXT
-> Ptr AllocationCallbacks
-> Ptr IndirectExecutionSetEXT
-> IO Result
mkVkCreateIndirectExecutionSetEXT FunPtr
  (Ptr Device_T
   -> Ptr IndirectExecutionSetCreateInfoEXT
   -> Ptr AllocationCallbacks
   -> Ptr IndirectExecutionSetEXT
   -> IO Result)
vkCreateIndirectExecutionSetEXTPtr
  Ptr IndirectExecutionSetCreateInfoEXT
pCreateInfo <- ((Ptr IndirectExecutionSetCreateInfoEXT
  -> IO IndirectExecutionSetEXT)
 -> IO IndirectExecutionSetEXT)
-> ContT
     IndirectExecutionSetEXT IO (Ptr IndirectExecutionSetCreateInfoEXT)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr IndirectExecutionSetCreateInfoEXT
   -> IO IndirectExecutionSetEXT)
  -> IO IndirectExecutionSetEXT)
 -> ContT
      IndirectExecutionSetEXT IO (Ptr IndirectExecutionSetCreateInfoEXT))
-> ((Ptr IndirectExecutionSetCreateInfoEXT
     -> IO IndirectExecutionSetEXT)
    -> IO IndirectExecutionSetEXT)
-> ContT
     IndirectExecutionSetEXT IO (Ptr IndirectExecutionSetCreateInfoEXT)
forall a b. (a -> b) -> a -> b
$ IndirectExecutionSetCreateInfoEXT
-> (Ptr IndirectExecutionSetCreateInfoEXT
    -> IO IndirectExecutionSetEXT)
-> IO IndirectExecutionSetEXT
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
forall b.
IndirectExecutionSetCreateInfoEXT
-> (Ptr IndirectExecutionSetCreateInfoEXT -> IO b) -> IO b
withCStruct (IndirectExecutionSetCreateInfoEXT
createInfo)
  Ptr AllocationCallbacks
pAllocator <- case ("allocator" ::: Maybe AllocationCallbacks
allocator) of
    "allocator" ::: Maybe AllocationCallbacks
Nothing -> Ptr AllocationCallbacks
-> ContT IndirectExecutionSetEXT IO (Ptr AllocationCallbacks)
forall a. a -> ContT IndirectExecutionSetEXT IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Ptr AllocationCallbacks
forall a. Ptr a
nullPtr
    Just AllocationCallbacks
j -> ((Ptr AllocationCallbacks -> IO IndirectExecutionSetEXT)
 -> IO IndirectExecutionSetEXT)
-> ContT IndirectExecutionSetEXT IO (Ptr AllocationCallbacks)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr AllocationCallbacks -> IO IndirectExecutionSetEXT)
  -> IO IndirectExecutionSetEXT)
 -> ContT IndirectExecutionSetEXT IO (Ptr AllocationCallbacks))
-> ((Ptr AllocationCallbacks -> IO IndirectExecutionSetEXT)
    -> IO IndirectExecutionSetEXT)
-> ContT IndirectExecutionSetEXT IO (Ptr AllocationCallbacks)
forall a b. (a -> b) -> a -> b
$ AllocationCallbacks
-> (Ptr AllocationCallbacks -> IO IndirectExecutionSetEXT)
-> IO IndirectExecutionSetEXT
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
forall b.
AllocationCallbacks -> (Ptr AllocationCallbacks -> IO b) -> IO b
withCStruct (AllocationCallbacks
j)
  Ptr IndirectExecutionSetEXT
pPIndirectExecutionSet <- ((Ptr IndirectExecutionSetEXT -> IO IndirectExecutionSetEXT)
 -> IO IndirectExecutionSetEXT)
-> ContT IndirectExecutionSetEXT IO (Ptr IndirectExecutionSetEXT)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr IndirectExecutionSetEXT -> IO IndirectExecutionSetEXT)
  -> IO IndirectExecutionSetEXT)
 -> ContT IndirectExecutionSetEXT IO (Ptr IndirectExecutionSetEXT))
-> ((Ptr IndirectExecutionSetEXT -> IO IndirectExecutionSetEXT)
    -> IO IndirectExecutionSetEXT)
-> ContT IndirectExecutionSetEXT IO (Ptr IndirectExecutionSetEXT)
forall a b. (a -> b) -> a -> b
$ IO (Ptr IndirectExecutionSetEXT)
-> (Ptr IndirectExecutionSetEXT -> IO ())
-> (Ptr IndirectExecutionSetEXT -> IO IndirectExecutionSetEXT)
-> IO IndirectExecutionSetEXT
forall a b c. IO a -> (a -> IO b) -> (a -> IO c) -> IO c
bracket (forall a. Int -> IO (Ptr a)
callocBytes @IndirectExecutionSetEXT Int
8) Ptr IndirectExecutionSetEXT -> IO ()
forall a. Ptr a -> IO ()
free
  Result
r <- IO Result -> ContT IndirectExecutionSetEXT IO Result
forall (m :: * -> *) a.
Monad m =>
m a -> ContT IndirectExecutionSetEXT m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO Result -> ContT IndirectExecutionSetEXT IO Result)
-> IO Result -> ContT IndirectExecutionSetEXT IO Result
forall a b. (a -> b) -> a -> b
$ String -> IO Result -> IO Result
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkCreateIndirectExecutionSetEXT" (Ptr Device_T
-> Ptr IndirectExecutionSetCreateInfoEXT
-> Ptr AllocationCallbacks
-> Ptr IndirectExecutionSetEXT
-> IO Result
vkCreateIndirectExecutionSetEXT'
                                                                    (Device -> Ptr Device_T
deviceHandle (Device
device))
                                                                    Ptr IndirectExecutionSetCreateInfoEXT
pCreateInfo
                                                                    Ptr AllocationCallbacks
pAllocator
                                                                    (Ptr IndirectExecutionSetEXT
pPIndirectExecutionSet))
  IO () -> ContT IndirectExecutionSetEXT IO ()
forall (m :: * -> *) a.
Monad m =>
m a -> ContT IndirectExecutionSetEXT m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT IndirectExecutionSetEXT IO ())
-> IO () -> ContT IndirectExecutionSetEXT IO ()
forall a b. (a -> b) -> a -> b
$ ("isPreprocessed" ::: Bool) -> IO () -> IO ()
forall (f :: * -> *).
Applicative f =>
("isPreprocessed" ::: Bool) -> f () -> f ()
when (Result
r Result -> Result -> "isPreprocessed" ::: Bool
forall a. Ord a => a -> a -> "isPreprocessed" ::: Bool
< Result
SUCCESS) (VulkanException -> IO ()
forall e a. Exception e => e -> IO a
throwIO (Result -> VulkanException
VulkanException Result
r))
  IndirectExecutionSetEXT
pIndirectExecutionSet <- IO IndirectExecutionSetEXT
-> ContT IndirectExecutionSetEXT IO IndirectExecutionSetEXT
forall (m :: * -> *) a.
Monad m =>
m a -> ContT IndirectExecutionSetEXT m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO IndirectExecutionSetEXT
 -> ContT IndirectExecutionSetEXT IO IndirectExecutionSetEXT)
-> IO IndirectExecutionSetEXT
-> ContT IndirectExecutionSetEXT IO IndirectExecutionSetEXT
forall a b. (a -> b) -> a -> b
$ forall a. Storable a => Ptr a -> IO a
peek @IndirectExecutionSetEXT Ptr IndirectExecutionSetEXT
pPIndirectExecutionSet
  IndirectExecutionSetEXT
-> ContT IndirectExecutionSetEXT IO IndirectExecutionSetEXT
forall a. a -> ContT IndirectExecutionSetEXT IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (IndirectExecutionSetEXT
 -> ContT IndirectExecutionSetEXT IO IndirectExecutionSetEXT)
-> IndirectExecutionSetEXT
-> ContT IndirectExecutionSetEXT IO IndirectExecutionSetEXT
forall a b. (a -> b) -> a -> b
$ (IndirectExecutionSetEXT
pIndirectExecutionSet)

-- | A convenience wrapper to make a compatible pair of calls to
-- 'createIndirectExecutionSetEXT' and 'destroyIndirectExecutionSetEXT'
--
-- To ensure that 'destroyIndirectExecutionSetEXT' is always called: pass
-- 'Control.Exception.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.
--
withIndirectExecutionSetEXT :: forall io r . MonadIO io => Device -> IndirectExecutionSetCreateInfoEXT -> Maybe AllocationCallbacks -> (io IndirectExecutionSetEXT -> (IndirectExecutionSetEXT -> io ()) -> r) -> r
withIndirectExecutionSetEXT :: forall (io :: * -> *) r.
MonadIO io =>
Device
-> IndirectExecutionSetCreateInfoEXT
-> ("allocator" ::: Maybe AllocationCallbacks)
-> (io IndirectExecutionSetEXT
    -> (IndirectExecutionSetEXT -> io ()) -> r)
-> r
withIndirectExecutionSetEXT Device
device IndirectExecutionSetCreateInfoEXT
pCreateInfo "allocator" ::: Maybe AllocationCallbacks
pAllocator io IndirectExecutionSetEXT
-> (IndirectExecutionSetEXT -> io ()) -> r
b =
  io IndirectExecutionSetEXT
-> (IndirectExecutionSetEXT -> io ()) -> r
b (Device
-> IndirectExecutionSetCreateInfoEXT
-> ("allocator" ::: Maybe AllocationCallbacks)
-> io IndirectExecutionSetEXT
forall (io :: * -> *).
MonadIO io =>
Device
-> IndirectExecutionSetCreateInfoEXT
-> ("allocator" ::: Maybe AllocationCallbacks)
-> io IndirectExecutionSetEXT
createIndirectExecutionSetEXT Device
device IndirectExecutionSetCreateInfoEXT
pCreateInfo "allocator" ::: Maybe AllocationCallbacks
pAllocator)
    (\(IndirectExecutionSetEXT
o0) -> Device
-> IndirectExecutionSetEXT
-> ("allocator" ::: Maybe AllocationCallbacks)
-> io ()
forall (io :: * -> *).
MonadIO io =>
Device
-> IndirectExecutionSetEXT
-> ("allocator" ::: Maybe AllocationCallbacks)
-> io ()
destroyIndirectExecutionSetEXT Device
device IndirectExecutionSetEXT
o0 "allocator" ::: Maybe AllocationCallbacks
pAllocator)


foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkDestroyIndirectExecutionSetEXT
  :: FunPtr (Ptr Device_T -> IndirectExecutionSetEXT -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> IndirectExecutionSetEXT -> Ptr AllocationCallbacks -> IO ()

-- | vkDestroyIndirectExecutionSetEXT - Destroy an indirect execution set
--
-- == Valid Usage
--
-- -   #VUID-vkDestroyIndirectExecutionSetEXT-indirectExecutionSet-11025#
--     All submitted commands that refer to @indirectExecutionSet@ /must/
--     have completed execution
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkDestroyIndirectExecutionSetEXT-device-parameter# @device@
--     /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
--
-- -   #VUID-vkDestroyIndirectExecutionSetEXT-indirectExecutionSet-parameter#
--     If @indirectExecutionSet@ is not
--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @indirectExecutionSet@
--     /must/ be a valid
--     'Vulkan.Extensions.Handles.IndirectExecutionSetEXT' handle
--
-- -   #VUID-vkDestroyIndirectExecutionSetEXT-pAllocator-parameter# If
--     @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid pointer
--     to a valid 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
--     structure
--
-- -   #VUID-vkDestroyIndirectExecutionSetEXT-indirectExecutionSet-parent#
--     If @indirectExecutionSet@ is a valid handle, it /must/ have been
--     created, allocated, or retrieved from @device@
--
-- == Host Synchronization
--
-- -   Host access to @indirectExecutionSet@ /must/ be externally
--     synchronized
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_device_generated_commands VK_EXT_device_generated_commands>,
-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
-- 'Vulkan.Core10.Handles.Device',
-- 'Vulkan.Extensions.Handles.IndirectExecutionSetEXT'
destroyIndirectExecutionSetEXT :: forall io
                                . (MonadIO io)
                               => -- | @device@ is the logical device that owns the indirect execution set.
                                  Device
                               -> -- | @indirectExecutionSet@ is the indirect execution set to destroy.
                                  IndirectExecutionSetEXT
                               -> -- | @pAllocator@ controls host memory allocation as described in the
                                  -- <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#memory-allocation Memory Allocation>
                                  -- chapter.
                                  ("allocator" ::: Maybe AllocationCallbacks)
                               -> io ()
destroyIndirectExecutionSetEXT :: forall (io :: * -> *).
MonadIO io =>
Device
-> IndirectExecutionSetEXT
-> ("allocator" ::: Maybe AllocationCallbacks)
-> io ()
destroyIndirectExecutionSetEXT Device
device
                                 IndirectExecutionSetEXT
indirectExecutionSet
                                 "allocator" ::: Maybe AllocationCallbacks
allocator = IO () -> io ()
forall a. IO a -> io a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> io ())
-> (ContT () IO () -> IO ()) -> ContT () IO () -> io ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> io ()) -> ContT () IO () -> io ()
forall a b. (a -> b) -> a -> b
$ do
  let vkDestroyIndirectExecutionSetEXTPtr :: FunPtr
  (Ptr Device_T
   -> IndirectExecutionSetEXT -> Ptr AllocationCallbacks -> IO ())
vkDestroyIndirectExecutionSetEXTPtr = DeviceCmds
-> FunPtr
     (Ptr Device_T
      -> IndirectExecutionSetEXT -> Ptr AllocationCallbacks -> IO ())
pVkDestroyIndirectExecutionSetEXT (case Device
device of Device{DeviceCmds
$sel:deviceCmds:Device :: Device -> DeviceCmds
deviceCmds :: DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO () -> ContT () IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT () m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ ("isPreprocessed" ::: Bool) -> IO () -> IO ()
forall (f :: * -> *).
Applicative f =>
("isPreprocessed" ::: Bool) -> f () -> f ()
unless (FunPtr
  (Ptr Device_T
   -> IndirectExecutionSetEXT -> Ptr AllocationCallbacks -> IO ())
vkDestroyIndirectExecutionSetEXTPtr FunPtr
  (Ptr Device_T
   -> IndirectExecutionSetEXT -> Ptr AllocationCallbacks -> IO ())
-> FunPtr
     (Ptr Device_T
      -> IndirectExecutionSetEXT -> Ptr AllocationCallbacks -> IO ())
-> "isPreprocessed" ::: Bool
forall a. Eq a => a -> a -> "isPreprocessed" ::: Bool
/= FunPtr
  (Ptr Device_T
   -> IndirectExecutionSetEXT -> Ptr AllocationCallbacks -> IO ())
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
    IOException -> IO ()
forall e a. Exception e => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"The function pointer for vkDestroyIndirectExecutionSetEXT is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkDestroyIndirectExecutionSetEXT' :: Ptr Device_T
-> IndirectExecutionSetEXT -> Ptr AllocationCallbacks -> IO ()
vkDestroyIndirectExecutionSetEXT' = FunPtr
  (Ptr Device_T
   -> IndirectExecutionSetEXT -> Ptr AllocationCallbacks -> IO ())
-> Ptr Device_T
-> IndirectExecutionSetEXT
-> Ptr AllocationCallbacks
-> IO ()
mkVkDestroyIndirectExecutionSetEXT FunPtr
  (Ptr Device_T
   -> IndirectExecutionSetEXT -> Ptr AllocationCallbacks -> IO ())
vkDestroyIndirectExecutionSetEXTPtr
  Ptr AllocationCallbacks
pAllocator <- case ("allocator" ::: Maybe AllocationCallbacks
allocator) of
    "allocator" ::: Maybe AllocationCallbacks
Nothing -> Ptr AllocationCallbacks -> ContT () IO (Ptr AllocationCallbacks)
forall a. a -> ContT () IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Ptr AllocationCallbacks
forall a. Ptr a
nullPtr
    Just AllocationCallbacks
j -> ((Ptr AllocationCallbacks -> IO ()) -> IO ())
-> ContT () IO (Ptr AllocationCallbacks)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr AllocationCallbacks -> IO ()) -> IO ())
 -> ContT () IO (Ptr AllocationCallbacks))
-> ((Ptr AllocationCallbacks -> IO ()) -> IO ())
-> ContT () IO (Ptr AllocationCallbacks)
forall a b. (a -> b) -> a -> b
$ AllocationCallbacks -> (Ptr AllocationCallbacks -> IO ()) -> IO ()
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
forall b.
AllocationCallbacks -> (Ptr AllocationCallbacks -> IO b) -> IO b
withCStruct (AllocationCallbacks
j)
  IO () -> ContT () IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT () m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ String -> IO () -> IO ()
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkDestroyIndirectExecutionSetEXT" (Ptr Device_T
-> IndirectExecutionSetEXT -> Ptr AllocationCallbacks -> IO ()
vkDestroyIndirectExecutionSetEXT'
                                                                (Device -> Ptr Device_T
deviceHandle (Device
device))
                                                                (IndirectExecutionSetEXT
indirectExecutionSet)
                                                                Ptr AllocationCallbacks
pAllocator)
  () -> ContT () IO ()
forall a. a -> ContT () IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (() -> ContT () IO ()) -> () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ ()


foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkUpdateIndirectExecutionSetPipelineEXT
  :: FunPtr (Ptr Device_T -> IndirectExecutionSetEXT -> Word32 -> Ptr WriteIndirectExecutionSetPipelineEXT -> IO ()) -> Ptr Device_T -> IndirectExecutionSetEXT -> Word32 -> Ptr WriteIndirectExecutionSetPipelineEXT -> IO ()

-- | vkUpdateIndirectExecutionSetPipelineEXT - Update the contents of an
-- indirect execution set
--
-- == Valid Usage
--
-- -   #VUID-vkUpdateIndirectExecutionSetPipelineEXT-indirectExecutionSet-11035#
--     @indirectExecutionSet@ /must/ have been created with type
--     'INDIRECT_EXECUTION_SET_INFO_TYPE_PIPELINES_EXT'
--
-- -   #VUID-vkUpdateIndirectExecutionSetPipelineEXT-executionSetWriteCount-11037#
--     @executionSetWriteCount@ /must/ be less than or equal to
--     'IndirectExecutionSetPipelineInfoEXT'::@maxPipelineCount@
--
-- -   #VUID-vkUpdateIndirectExecutionSetPipelineEXT-pExecutionSetWrites-11042#
--     Each element in the @pExecutionSetWrites@ array must have a unique
--     'WriteIndirectExecutionSetPipelineEXT'::@index@
--
-- -   #VUID-vkUpdateIndirectExecutionSetPipelineEXT-None-11038# Each
--     member of the Indirect Execution Set referenced by the update
--     command /must/ not be in use by the device
--
-- -   #VUID-vkUpdateIndirectExecutionSetPipelineEXT-None-11039# The layout
--     of each pipeline in @pExecutionSetWrites@ /must/ be
--     <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#descriptorsets-compatibility compatible>
--     with the @initialPipeline@ used to create the Indirect Execution Set
--
-- -   #VUID-vkUpdateIndirectExecutionSetPipelineEXT-None-11040# Each
--     pipeline in the Indirect Execution Set /must/ have identically
--     defined static and dynamic state values to the @initialPipeline@
--     used to create the Indirect Execution Set
--
-- -   #VUID-vkUpdateIndirectExecutionSetPipelineEXT-initialPipeline-11147#
--     Each pipeline in the Indirect Execution Set /must/ have identically
--     defined
--     <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#interfaces-fragmentoutput fragment outputs interface>
--     to the @initialPipeline@ used to create the Indirect Execution Set
--
-- -   #VUID-vkUpdateIndirectExecutionSetPipelineEXT-initialPipeline-11152#
--     Each pipeline in the Indirect Execution Set /must/ match the
--     @initialPipeline@ used to create the Indirect Execution Set in its
--     included shader stages
--
-- -   #VUID-vkUpdateIndirectExecutionSetPipelineEXT-initialPipeline-11098#
--     Each pipeline in the Indirect Execution Set /must/ match the
--     @initialPipeline@ used to create the Indirect Execution Set in its
--     use of @FragDepth@
--
-- -   #VUID-vkUpdateIndirectExecutionSetPipelineEXT-initialPipeline-11086#
--     Each pipeline in the Indirect Execution Set /must/ match the
--     @initialPipeline@ used to create the Indirect Execution Set in its
--     use of 'Vulkan.Core10.FundamentalTypes.SampleMask'
--
-- -   #VUID-vkUpdateIndirectExecutionSetPipelineEXT-initialPipeline-11085#
--     Each pipeline in the Indirect Execution Set /must/ match the
--     @initialPipeline@ used to create the Indirect Execution Set in its
--     use of @StencilExportEXT@
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkUpdateIndirectExecutionSetPipelineEXT-device-parameter#
--     @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
--
-- -   #VUID-vkUpdateIndirectExecutionSetPipelineEXT-indirectExecutionSet-parameter#
--     @indirectExecutionSet@ /must/ be a valid
--     'Vulkan.Extensions.Handles.IndirectExecutionSetEXT' handle
--
-- -   #VUID-vkUpdateIndirectExecutionSetPipelineEXT-pExecutionSetWrites-parameter#
--     @pExecutionSetWrites@ /must/ be a valid pointer to an array of
--     @executionSetWriteCount@ valid
--     'WriteIndirectExecutionSetPipelineEXT' structures
--
-- -   #VUID-vkUpdateIndirectExecutionSetPipelineEXT-executionSetWriteCount-arraylength#
--     @executionSetWriteCount@ /must/ be greater than @0@
--
-- -   #VUID-vkUpdateIndirectExecutionSetPipelineEXT-indirectExecutionSet-parent#
--     @indirectExecutionSet@ /must/ have been created, allocated, or
--     retrieved from @device@
--
-- == Host Synchronization
--
-- -   Host access to @indirectExecutionSet@ /must/ be externally
--     synchronized
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_device_generated_commands VK_EXT_device_generated_commands>,
-- 'Vulkan.Core10.Handles.Device',
-- 'Vulkan.Extensions.Handles.IndirectExecutionSetEXT',
-- 'WriteIndirectExecutionSetPipelineEXT'
updateIndirectExecutionSetPipelineEXT :: forall io
                                       . (MonadIO io)
                                      => -- | @device@ is the logical device that owns the indirect execution set.
                                         Device
                                      -> -- | @indirectExecutionSet@ is the indirect execution set being updated.
                                         IndirectExecutionSetEXT
                                      -> -- | @pExecutionSetWrites@ is a pointer to an array of
                                         -- 'WriteIndirectExecutionSetPipelineEXT' structures describing the
                                         -- elements to update.
                                         ("executionSetWrites" ::: Vector WriteIndirectExecutionSetPipelineEXT)
                                      -> io ()
updateIndirectExecutionSetPipelineEXT :: forall (io :: * -> *).
MonadIO io =>
Device
-> IndirectExecutionSetEXT
-> ("executionSetWrites"
    ::: Vector WriteIndirectExecutionSetPipelineEXT)
-> io ()
updateIndirectExecutionSetPipelineEXT Device
device
                                        IndirectExecutionSetEXT
indirectExecutionSet
                                        "executionSetWrites"
::: Vector WriteIndirectExecutionSetPipelineEXT
executionSetWrites = IO () -> io ()
forall a. IO a -> io a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> io ())
-> (ContT () IO () -> IO ()) -> ContT () IO () -> io ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> io ()) -> ContT () IO () -> io ()
forall a b. (a -> b) -> a -> b
$ do
  let vkUpdateIndirectExecutionSetPipelineEXTPtr :: FunPtr
  (Ptr Device_T
   -> IndirectExecutionSetEXT
   -> Flags
   -> Ptr WriteIndirectExecutionSetPipelineEXT
   -> IO ())
vkUpdateIndirectExecutionSetPipelineEXTPtr = DeviceCmds
-> FunPtr
     (Ptr Device_T
      -> IndirectExecutionSetEXT
      -> Flags
      -> Ptr WriteIndirectExecutionSetPipelineEXT
      -> IO ())
pVkUpdateIndirectExecutionSetPipelineEXT (case Device
device of Device{DeviceCmds
$sel:deviceCmds:Device :: Device -> DeviceCmds
deviceCmds :: DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO () -> ContT () IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT () m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ ("isPreprocessed" ::: Bool) -> IO () -> IO ()
forall (f :: * -> *).
Applicative f =>
("isPreprocessed" ::: Bool) -> f () -> f ()
unless (FunPtr
  (Ptr Device_T
   -> IndirectExecutionSetEXT
   -> Flags
   -> Ptr WriteIndirectExecutionSetPipelineEXT
   -> IO ())
vkUpdateIndirectExecutionSetPipelineEXTPtr FunPtr
  (Ptr Device_T
   -> IndirectExecutionSetEXT
   -> Flags
   -> Ptr WriteIndirectExecutionSetPipelineEXT
   -> IO ())
-> FunPtr
     (Ptr Device_T
      -> IndirectExecutionSetEXT
      -> Flags
      -> Ptr WriteIndirectExecutionSetPipelineEXT
      -> IO ())
-> "isPreprocessed" ::: Bool
forall a. Eq a => a -> a -> "isPreprocessed" ::: Bool
/= FunPtr
  (Ptr Device_T
   -> IndirectExecutionSetEXT
   -> Flags
   -> Ptr WriteIndirectExecutionSetPipelineEXT
   -> IO ())
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
    IOException -> IO ()
forall e a. Exception e => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"The function pointer for vkUpdateIndirectExecutionSetPipelineEXT is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkUpdateIndirectExecutionSetPipelineEXT' :: Ptr Device_T
-> IndirectExecutionSetEXT
-> Flags
-> Ptr WriteIndirectExecutionSetPipelineEXT
-> IO ()
vkUpdateIndirectExecutionSetPipelineEXT' = FunPtr
  (Ptr Device_T
   -> IndirectExecutionSetEXT
   -> Flags
   -> Ptr WriteIndirectExecutionSetPipelineEXT
   -> IO ())
-> Ptr Device_T
-> IndirectExecutionSetEXT
-> Flags
-> Ptr WriteIndirectExecutionSetPipelineEXT
-> IO ()
mkVkUpdateIndirectExecutionSetPipelineEXT FunPtr
  (Ptr Device_T
   -> IndirectExecutionSetEXT
   -> Flags
   -> Ptr WriteIndirectExecutionSetPipelineEXT
   -> IO ())
vkUpdateIndirectExecutionSetPipelineEXTPtr
  Ptr WriteIndirectExecutionSetPipelineEXT
pPExecutionSetWrites <- ((Ptr WriteIndirectExecutionSetPipelineEXT -> IO ()) -> IO ())
-> ContT () IO (Ptr WriteIndirectExecutionSetPipelineEXT)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr WriteIndirectExecutionSetPipelineEXT -> IO ()) -> IO ())
 -> ContT () IO (Ptr WriteIndirectExecutionSetPipelineEXT))
-> ((Ptr WriteIndirectExecutionSetPipelineEXT -> IO ()) -> IO ())
-> ContT () IO (Ptr WriteIndirectExecutionSetPipelineEXT)
forall a b. (a -> b) -> a -> b
$ forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @WriteIndirectExecutionSetPipelineEXT ((("executionSetWrites"
 ::: Vector WriteIndirectExecutionSetPipelineEXT)
-> Int
forall a. Vector a -> Int
Data.Vector.length ("executionSetWrites"
::: Vector WriteIndirectExecutionSetPipelineEXT
executionSetWrites)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
32)
  IO () -> ContT () IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT () m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ (Int -> WriteIndirectExecutionSetPipelineEXT -> IO ())
-> ("executionSetWrites"
    ::: Vector WriteIndirectExecutionSetPipelineEXT)
-> IO ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i WriteIndirectExecutionSetPipelineEXT
e -> Ptr WriteIndirectExecutionSetPipelineEXT
-> WriteIndirectExecutionSetPipelineEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr WriteIndirectExecutionSetPipelineEXT
pPExecutionSetWrites Ptr WriteIndirectExecutionSetPipelineEXT
-> Int -> Ptr WriteIndirectExecutionSetPipelineEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
32 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr WriteIndirectExecutionSetPipelineEXT) (WriteIndirectExecutionSetPipelineEXT
e)) ("executionSetWrites"
::: Vector WriteIndirectExecutionSetPipelineEXT
executionSetWrites)
  IO () -> ContT () IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT () m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ String -> IO () -> IO ()
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkUpdateIndirectExecutionSetPipelineEXT" (Ptr Device_T
-> IndirectExecutionSetEXT
-> Flags
-> Ptr WriteIndirectExecutionSetPipelineEXT
-> IO ()
vkUpdateIndirectExecutionSetPipelineEXT'
                                                                       (Device -> Ptr Device_T
deviceHandle (Device
device))
                                                                       (IndirectExecutionSetEXT
indirectExecutionSet)
                                                                       ((Int -> Flags
forall a b. (Integral a, Num b) => a -> b
fromIntegral (("executionSetWrites"
 ::: Vector WriteIndirectExecutionSetPipelineEXT)
-> Int
forall a. Vector a -> Int
Data.Vector.length (("executionSetWrites"
  ::: Vector WriteIndirectExecutionSetPipelineEXT)
 -> Int)
-> ("executionSetWrites"
    ::: Vector WriteIndirectExecutionSetPipelineEXT)
-> Int
forall a b. (a -> b) -> a -> b
$ ("executionSetWrites"
::: Vector WriteIndirectExecutionSetPipelineEXT
executionSetWrites)) :: Word32))
                                                                       (Ptr WriteIndirectExecutionSetPipelineEXT
pPExecutionSetWrites))
  () -> ContT () IO ()
forall a. a -> ContT () IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (() -> ContT () IO ()) -> () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ ()


foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkUpdateIndirectExecutionSetShaderEXT
  :: FunPtr (Ptr Device_T -> IndirectExecutionSetEXT -> Word32 -> Ptr WriteIndirectExecutionSetShaderEXT -> IO ()) -> Ptr Device_T -> IndirectExecutionSetEXT -> Word32 -> Ptr WriteIndirectExecutionSetShaderEXT -> IO ()

-- | vkUpdateIndirectExecutionSetShaderEXT - Update the contents of an
-- indirect execution set
--
-- == Valid Usage
--
-- -   #VUID-vkUpdateIndirectExecutionSetShaderEXT-indirectExecutionSet-11041#
--     @indirectExecutionSet@ /must/ have been created with type
--     'INDIRECT_EXECUTION_SET_INFO_TYPE_SHADER_OBJECTS_EXT'
--
-- -   #VUID-vkUpdateIndirectExecutionSetShaderEXT-pExecutionSetWrites-11043#
--     Each element in the @pExecutionSetWrites@ array must have a unique
--     'WriteIndirectExecutionSetShaderEXT'::@index@
--
-- -   #VUID-vkUpdateIndirectExecutionSetShaderEXT-None-11044# Each member
--     of the Indirect Execution Set referenced by the update command
--     /must/ not be in use by the device
--
-- -   #VUID-vkUpdateIndirectExecutionSetShaderEXT-pExecutionSetWrites-11140#
--     The descriptor layout of each shader in @pExecutionSetWrites@ /must/
--     be
--     <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#descriptorsets-compatibility compatible>
--     with the initial layout info used to create the Indirect Execution
--     Set
--
-- -   #VUID-vkUpdateIndirectExecutionSetShaderEXT-None-11148# Each
--     fragment shader element in the Indirect Execution Set /must/ have
--     identically defined
--     <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#interfaces-fragmentoutput fragment outputs interface>
--     to the initial shader state used to create the Indirect Execution
--     Set
--
-- -   #VUID-vkUpdateIndirectExecutionSetShaderEXT-FragDepth-11054# 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@
--
-- -   #VUID-vkUpdateIndirectExecutionSetShaderEXT-SampleMask-11050# 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 'Vulkan.Core10.FundamentalTypes.SampleMask'
--
-- -   #VUID-vkUpdateIndirectExecutionSetShaderEXT-StencilExportEXT-11003#
--     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)
--
-- -   #VUID-vkUpdateIndirectExecutionSetShaderEXT-device-parameter#
--     @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
--
-- -   #VUID-vkUpdateIndirectExecutionSetShaderEXT-indirectExecutionSet-parameter#
--     @indirectExecutionSet@ /must/ be a valid
--     'Vulkan.Extensions.Handles.IndirectExecutionSetEXT' handle
--
-- -   #VUID-vkUpdateIndirectExecutionSetShaderEXT-pExecutionSetWrites-parameter#
--     @pExecutionSetWrites@ /must/ be a valid pointer to an array of
--     @executionSetWriteCount@ valid 'WriteIndirectExecutionSetShaderEXT'
--     structures
--
-- -   #VUID-vkUpdateIndirectExecutionSetShaderEXT-executionSetWriteCount-arraylength#
--     @executionSetWriteCount@ /must/ be greater than @0@
--
-- -   #VUID-vkUpdateIndirectExecutionSetShaderEXT-indirectExecutionSet-parent#
--     @indirectExecutionSet@ /must/ have been created, allocated, or
--     retrieved from @device@
--
-- == Host Synchronization
--
-- -   Host access to @indirectExecutionSet@ /must/ be externally
--     synchronized
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_device_generated_commands VK_EXT_device_generated_commands>,
-- 'Vulkan.Core10.Handles.Device',
-- 'Vulkan.Extensions.Handles.IndirectExecutionSetEXT',
-- 'WriteIndirectExecutionSetShaderEXT'
updateIndirectExecutionSetShaderEXT :: forall io
                                     . (MonadIO io)
                                    => -- | @device@ is the logical device that owns the indirect execution set.
                                       Device
                                    -> -- | @indirectExecutionSet@ is the indirect execution set being updated.
                                       IndirectExecutionSetEXT
                                    -> -- | @pExecutionSetWrites@ is a pointer to an array of
                                       -- 'WriteIndirectExecutionSetShaderEXT' structures describing the elements
                                       -- to update.
                                       ("executionSetWrites" ::: Vector WriteIndirectExecutionSetShaderEXT)
                                    -> io ()
updateIndirectExecutionSetShaderEXT :: forall (io :: * -> *).
MonadIO io =>
Device
-> IndirectExecutionSetEXT
-> ("executionSetWrites"
    ::: Vector WriteIndirectExecutionSetShaderEXT)
-> io ()
updateIndirectExecutionSetShaderEXT Device
device
                                      IndirectExecutionSetEXT
indirectExecutionSet
                                      "executionSetWrites" ::: Vector WriteIndirectExecutionSetShaderEXT
executionSetWrites = IO () -> io ()
forall a. IO a -> io a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> io ())
-> (ContT () IO () -> IO ()) -> ContT () IO () -> io ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> io ()) -> ContT () IO () -> io ()
forall a b. (a -> b) -> a -> b
$ do
  let vkUpdateIndirectExecutionSetShaderEXTPtr :: FunPtr
  (Ptr Device_T
   -> IndirectExecutionSetEXT
   -> Flags
   -> Ptr WriteIndirectExecutionSetShaderEXT
   -> IO ())
vkUpdateIndirectExecutionSetShaderEXTPtr = DeviceCmds
-> FunPtr
     (Ptr Device_T
      -> IndirectExecutionSetEXT
      -> Flags
      -> Ptr WriteIndirectExecutionSetShaderEXT
      -> IO ())
pVkUpdateIndirectExecutionSetShaderEXT (case Device
device of Device{DeviceCmds
$sel:deviceCmds:Device :: Device -> DeviceCmds
deviceCmds :: DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO () -> ContT () IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT () m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ ("isPreprocessed" ::: Bool) -> IO () -> IO ()
forall (f :: * -> *).
Applicative f =>
("isPreprocessed" ::: Bool) -> f () -> f ()
unless (FunPtr
  (Ptr Device_T
   -> IndirectExecutionSetEXT
   -> Flags
   -> Ptr WriteIndirectExecutionSetShaderEXT
   -> IO ())
vkUpdateIndirectExecutionSetShaderEXTPtr FunPtr
  (Ptr Device_T
   -> IndirectExecutionSetEXT
   -> Flags
   -> Ptr WriteIndirectExecutionSetShaderEXT
   -> IO ())
-> FunPtr
     (Ptr Device_T
      -> IndirectExecutionSetEXT
      -> Flags
      -> Ptr WriteIndirectExecutionSetShaderEXT
      -> IO ())
-> "isPreprocessed" ::: Bool
forall a. Eq a => a -> a -> "isPreprocessed" ::: Bool
/= FunPtr
  (Ptr Device_T
   -> IndirectExecutionSetEXT
   -> Flags
   -> Ptr WriteIndirectExecutionSetShaderEXT
   -> IO ())
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
    IOException -> IO ()
forall e a. Exception e => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"The function pointer for vkUpdateIndirectExecutionSetShaderEXT is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkUpdateIndirectExecutionSetShaderEXT' :: Ptr Device_T
-> IndirectExecutionSetEXT
-> Flags
-> Ptr WriteIndirectExecutionSetShaderEXT
-> IO ()
vkUpdateIndirectExecutionSetShaderEXT' = FunPtr
  (Ptr Device_T
   -> IndirectExecutionSetEXT
   -> Flags
   -> Ptr WriteIndirectExecutionSetShaderEXT
   -> IO ())
-> Ptr Device_T
-> IndirectExecutionSetEXT
-> Flags
-> Ptr WriteIndirectExecutionSetShaderEXT
-> IO ()
mkVkUpdateIndirectExecutionSetShaderEXT FunPtr
  (Ptr Device_T
   -> IndirectExecutionSetEXT
   -> Flags
   -> Ptr WriteIndirectExecutionSetShaderEXT
   -> IO ())
vkUpdateIndirectExecutionSetShaderEXTPtr
  Ptr WriteIndirectExecutionSetShaderEXT
pPExecutionSetWrites <- ((Ptr WriteIndirectExecutionSetShaderEXT -> IO ()) -> IO ())
-> ContT () IO (Ptr WriteIndirectExecutionSetShaderEXT)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr WriteIndirectExecutionSetShaderEXT -> IO ()) -> IO ())
 -> ContT () IO (Ptr WriteIndirectExecutionSetShaderEXT))
-> ((Ptr WriteIndirectExecutionSetShaderEXT -> IO ()) -> IO ())
-> ContT () IO (Ptr WriteIndirectExecutionSetShaderEXT)
forall a b. (a -> b) -> a -> b
$ forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @WriteIndirectExecutionSetShaderEXT ((("executionSetWrites"
 ::: Vector WriteIndirectExecutionSetShaderEXT)
-> Int
forall a. Vector a -> Int
Data.Vector.length ("executionSetWrites" ::: Vector WriteIndirectExecutionSetShaderEXT
executionSetWrites)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
32)
  IO () -> ContT () IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT () m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ (Int -> WriteIndirectExecutionSetShaderEXT -> IO ())
-> ("executionSetWrites"
    ::: Vector WriteIndirectExecutionSetShaderEXT)
-> IO ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i WriteIndirectExecutionSetShaderEXT
e -> Ptr WriteIndirectExecutionSetShaderEXT
-> WriteIndirectExecutionSetShaderEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr WriteIndirectExecutionSetShaderEXT
pPExecutionSetWrites Ptr WriteIndirectExecutionSetShaderEXT
-> Int -> Ptr WriteIndirectExecutionSetShaderEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
32 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr WriteIndirectExecutionSetShaderEXT) (WriteIndirectExecutionSetShaderEXT
e)) ("executionSetWrites" ::: Vector WriteIndirectExecutionSetShaderEXT
executionSetWrites)
  IO () -> ContT () IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT () m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ String -> IO () -> IO ()
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkUpdateIndirectExecutionSetShaderEXT" (Ptr Device_T
-> IndirectExecutionSetEXT
-> Flags
-> Ptr WriteIndirectExecutionSetShaderEXT
-> IO ()
vkUpdateIndirectExecutionSetShaderEXT'
                                                                     (Device -> Ptr Device_T
deviceHandle (Device
device))
                                                                     (IndirectExecutionSetEXT
indirectExecutionSet)
                                                                     ((Int -> Flags
forall a b. (Integral a, Num b) => a -> b
fromIntegral (("executionSetWrites"
 ::: Vector WriteIndirectExecutionSetShaderEXT)
-> Int
forall a. Vector a -> Int
Data.Vector.length (("executionSetWrites"
  ::: Vector WriteIndirectExecutionSetShaderEXT)
 -> Int)
-> ("executionSetWrites"
    ::: Vector WriteIndirectExecutionSetShaderEXT)
-> Int
forall a b. (a -> b) -> a -> b
$ ("executionSetWrites" ::: Vector WriteIndirectExecutionSetShaderEXT
executionSetWrites)) :: Word32))
                                                                     (Ptr WriteIndirectExecutionSetShaderEXT
pPExecutionSetWrites))
  () -> ContT () IO ()
forall a. a -> ContT () IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (() -> ContT () IO ()) -> () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ ()


-- No documentation found for TopLevel "VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_EXT"
pattern $mPIPELINE_STAGE_COMMAND_PREPROCESS_BIT_EXT :: forall {r}.
PipelineStageFlagBits -> ((# #) -> r) -> ((# #) -> r) -> r
$bPIPELINE_STAGE_COMMAND_PREPROCESS_BIT_EXT :: PipelineStageFlagBits
PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_EXT = PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV


-- No documentation found for TopLevel "VK_ACCESS_COMMAND_PREPROCESS_READ_BIT_EXT"
pattern $mACCESS_COMMAND_PREPROCESS_READ_BIT_EXT :: forall {r}. AccessFlagBits -> ((# #) -> r) -> ((# #) -> r) -> r
$bACCESS_COMMAND_PREPROCESS_READ_BIT_EXT :: AccessFlagBits
ACCESS_COMMAND_PREPROCESS_READ_BIT_EXT = ACCESS_COMMAND_PREPROCESS_READ_BIT_NV


-- No documentation found for TopLevel "VK_ACCESS_COMMAND_PREPROCESS_WRITE_BIT_EXT"
pattern $mACCESS_COMMAND_PREPROCESS_WRITE_BIT_EXT :: forall {r}. AccessFlagBits -> ((# #) -> r) -> ((# #) -> r) -> r
$bACCESS_COMMAND_PREPROCESS_WRITE_BIT_EXT :: AccessFlagBits
ACCESS_COMMAND_PREPROCESS_WRITE_BIT_EXT = ACCESS_COMMAND_PREPROCESS_WRITE_BIT_NV


-- | 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
-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2'
-- structure passed to
-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceFeatures2',
-- it is filled in to indicate whether each corresponding feature is
-- supported. 'PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT' /can/ also
-- be used in the @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo'
-- to selectively enable these features.
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_device_generated_commands VK_EXT_device_generated_commands>,
-- 'Vulkan.Core10.FundamentalTypes.Bool32',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT = PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
  { -- | #features-deviceGeneratedCommands# @deviceGeneratedCommands@ indicates
    -- whether the implementation supports functionality to generate commands
    -- on the device.
    PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
-> "isPreprocessed" ::: Bool
deviceGeneratedCommands :: Bool
  , -- | #features-dynamicGeneratedPipelineLayout#
    -- @dynamicGeneratedPipelineLayout@ indicates the implementation allows the
    -- @pipelineLayout@ member of 'IndirectCommandsLayoutCreateInfoEXT' to be
    -- 'Vulkan.Core10.APIConstants.NULL_HANDLE' and
    -- 'Vulkan.Core10.PipelineLayout.PipelineLayoutCreateInfo' /can/ be chained
    -- off those structures\' @pNext@ instead.
    PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
-> "isPreprocessed" ::: Bool
dynamicGeneratedPipelineLayout :: Bool
  }
  deriving (Typeable, PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
-> PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
-> "isPreprocessed" ::: Bool
(PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
 -> PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
 -> "isPreprocessed" ::: Bool)
-> (PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
    -> PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
    -> "isPreprocessed" ::: Bool)
-> Eq PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
forall a.
(a -> a -> "isPreprocessed" ::: Bool)
-> (a -> a -> "isPreprocessed" ::: Bool) -> Eq a
$c== :: PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
-> PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
-> "isPreprocessed" ::: Bool
== :: PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
-> PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
-> "isPreprocessed" ::: Bool
$c/= :: PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
-> PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
-> "isPreprocessed" ::: Bool
/= :: PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
-> PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
-> "isPreprocessed" ::: Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT)
#endif
deriving instance Show PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT

instance ToCStruct PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT where
  withCStruct :: forall b.
PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
-> (Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT -> IO b)
-> IO b
withCStruct PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
x Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT -> IO b
f = Int
-> (Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT -> IO b)
-> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
24 ((Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT -> IO b)
 -> IO b)
-> (Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT -> IO b)
-> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
p -> Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
-> PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT -> IO b -> IO b
forall b.
Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
-> PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
p PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
x (Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT -> IO b
f Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
p)
  pokeCStruct :: forall b.
Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
-> PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT -> IO b -> IO b
pokeCStruct Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
p PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT{"isPreprocessed" ::: Bool
$sel:deviceGeneratedCommands:PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT :: PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
-> "isPreprocessed" ::: Bool
$sel:dynamicGeneratedPipelineLayout:PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT :: PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
-> "isPreprocessed" ::: Bool
deviceGeneratedCommands :: "isPreprocessed" ::: Bool
dynamicGeneratedPipelineLayout :: "isPreprocessed" ::: Bool
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
p Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_EXT)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
p Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
p Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
-> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Bool32)) (("isPreprocessed" ::: Bool) -> Bool32
boolToBool32 ("isPreprocessed" ::: Bool
deviceGeneratedCommands))
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
p Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
-> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr Bool32)) (("isPreprocessed" ::: Bool) -> Bool32
boolToBool32 ("isPreprocessed" ::: Bool
dynamicGeneratedPipelineLayout))
    IO b
f
  cStructSize :: Int
cStructSize = Int
24
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b.
Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
-> IO b -> IO b
pokeZeroCStruct Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
p Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_EXT)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
p Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
p Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
-> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Bool32)) (("isPreprocessed" ::: Bool) -> Bool32
boolToBool32 ("isPreprocessed" ::: Bool
forall a. Zero a => a
zero))
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
p Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
-> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr Bool32)) (("isPreprocessed" ::: Bool) -> Bool32
boolToBool32 ("isPreprocessed" ::: Bool
forall a. Zero a => a
zero))
    IO b
f

instance FromCStruct PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT where
  peekCStruct :: Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
-> IO PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
peekCStruct Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
p = do
    Bool32
deviceGeneratedCommands <- forall a. Storable a => Ptr a -> IO a
peek @Bool32 ((Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
p Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
-> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Bool32))
    Bool32
dynamicGeneratedPipelineLayout <- forall a. Storable a => Ptr a -> IO a
peek @Bool32 ((Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
p Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
-> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr Bool32))
    PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
-> IO PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
 -> IO PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT)
-> PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
-> IO PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
forall a b. (a -> b) -> a -> b
$ ("isPreprocessed" ::: Bool)
-> ("isPreprocessed" ::: Bool)
-> PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
             (Bool32 -> "isPreprocessed" ::: Bool
bool32ToBool Bool32
deviceGeneratedCommands)
             (Bool32 -> "isPreprocessed" ::: Bool
bool32ToBool Bool32
dynamicGeneratedPipelineLayout)

instance Storable PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT where
  sizeOf :: PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT -> Int
sizeOf ~PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
_ = Int
24
  alignment :: PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT -> Int
alignment ~PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
_ = Int
8
  peek :: Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
-> IO PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
peek = Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
-> IO PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct
  poke :: Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
-> PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT -> IO ()
poke Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
poked = Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
-> PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
-> IO ()
-> IO ()
forall b.
Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
-> PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
poked (() -> IO ()
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ())

instance Zero PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT where
  zero :: PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
zero = ("isPreprocessed" ::: Bool)
-> ("isPreprocessed" ::: Bool)
-> PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
           "isPreprocessed" ::: Bool
forall a. Zero a => a
zero
           "isPreprocessed" ::: Bool
forall a. Zero a => a
zero


-- | 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
-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2'
-- structure passed to
-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceProperties2',
-- it is filled in with each corresponding implementation-dependent
-- property.
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_device_generated_commands VK_EXT_device_generated_commands>,
-- 'Vulkan.Core10.FundamentalTypes.Bool32',
-- 'IndirectCommandsInputModeFlagsEXT',
-- 'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlags',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT = PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
  { -- | #limits-maxIndirectPipelineCount# @maxIndirectPipelineCount@ is the
    -- maximum number of pipelines passed to 'createIndirectExecutionSetEXT'.
    PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT -> Flags
maxIndirectPipelineCount :: Word32
  , -- | #limits-maxIndirectShaderObjectCount# @maxIndirectShaderObjectCount@ is
    -- the maximum number of shader objects passed to
    -- 'createIndirectExecutionSetEXT'. If this value is zero, binding shader
    -- objects indirectly is not supported.
    PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT -> Flags
maxIndirectShaderObjectCount :: Word32
  , -- | #limits-maxIndirectSequenceCount# @maxIndirectSequenceCount@ is the
    -- maximum number of sequences in 'GeneratedCommandsInfoEXT' and in
    -- 'GeneratedCommandsMemoryRequirementsInfoEXT'.
    PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT -> Flags
maxIndirectSequenceCount :: Word32
  , -- | #limits-maxIndirectCommandsTokenCount# @maxIndirectCommandsTokenCount@
    -- is the maximum number of tokens in
    -- 'IndirectCommandsLayoutCreateInfoEXT'.
    PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT -> Flags
maxIndirectCommandsTokenCount :: Word32
  , -- | #limits-maxIndirectCommandsTokenOffset# @maxIndirectCommandsTokenOffset@
    -- is the maximum offset in 'IndirectCommandsLayoutTokenEXT'.
    PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT -> Flags
maxIndirectCommandsTokenOffset :: Word32
  , -- | #limits-maxIndirectCommandsIndirectStride#
    -- @maxIndirectCommandsIndirectStride@ is the maximum stream stride in
    -- 'IndirectCommandsLayoutCreateInfoEXT'.
    PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT -> Flags
maxIndirectCommandsIndirectStride :: Word32
  , -- | #limits-supportedIndirectCommandsInputModes#
    -- @supportedIndirectCommandsInputModes@ indicates the supported input
    -- modes.
    PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> IndirectCommandsInputModeFlagsEXT
supportedIndirectCommandsInputModes :: IndirectCommandsInputModeFlagsEXT
  , -- | #limits-supportedIndirectCommandsShaderStages#
    -- @supportedIndirectCommandsShaderStages@ indicates the stages which /can/
    -- be used to generate indirect commands. Implementations are required to
    -- support, at minimum:
    -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_VERTEX_BIT',
    -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_FRAGMENT_BIT',
    -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_COMPUTE_BIT'.
    PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> ShaderStageFlags
supportedIndirectCommandsShaderStages :: ShaderStageFlags
  , -- | #limits-supportedIndirectCommandsShaderStagesPipelineBinding#
    -- @supportedIndirectCommandsShaderStagesPipelineBinding@ indicates the
    -- stages which /can/ be used within indirect execution sets for indirectly
    -- binding shader stages using pipelines.
    PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> ShaderStageFlags
supportedIndirectCommandsShaderStagesPipelineBinding :: ShaderStageFlags
  , -- | #limits-supportedIndirectCommandsShaderStagesShaderBinding#
    -- @supportedIndirectCommandsShaderStagesShaderBinding@ indicates the
    -- stages which /can/ be used within indirect execution sets for indirectly
    -- binding shader stages using shader objects.
    PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> ShaderStageFlags
supportedIndirectCommandsShaderStagesShaderBinding :: ShaderStageFlags
  , -- | #limits-deviceGeneratedCommandsTransformFeedback#
    -- @deviceGeneratedCommandsTransformFeedback@ indicates whether the
    -- implementation supports interactions with @VK_EXT_transform_feedback@
    -- for pipelines not created with
    -- 'Vulkan.Extensions.VK_KHR_maintenance5.PIPELINE_CREATE_2_INDIRECT_BINDABLE_BIT_EXT'.
    PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> "isPreprocessed" ::: Bool
deviceGeneratedCommandsTransformFeedback :: Bool
  , -- | #limits-deviceGeneratedCommandsMultiDrawIndirectCount#
    -- @deviceGeneratedCommandsMultiDrawIndirectCount@ indicates whether the
    -- implementation supports COUNT variants of multi-draw indirect tokens.
    PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> "isPreprocessed" ::: Bool
deviceGeneratedCommandsMultiDrawIndirectCount :: Bool
  }
  deriving (Typeable, PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> "isPreprocessed" ::: Bool
(PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
 -> PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
 -> "isPreprocessed" ::: Bool)
-> (PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
    -> PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
    -> "isPreprocessed" ::: Bool)
-> Eq PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
forall a.
(a -> a -> "isPreprocessed" ::: Bool)
-> (a -> a -> "isPreprocessed" ::: Bool) -> Eq a
$c== :: PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> "isPreprocessed" ::: Bool
== :: PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> "isPreprocessed" ::: Bool
$c/= :: PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> "isPreprocessed" ::: Bool
/= :: PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> "isPreprocessed" ::: Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT)
#endif
deriving instance Show PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT

instance ToCStruct PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT where
  withCStruct :: forall b.
PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> (Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT -> IO b)
-> IO b
withCStruct PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
x Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT -> IO b
f = Int
-> (Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT -> IO b)
-> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
64 ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT -> IO b)
 -> IO b)
-> (Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT -> IO b)
-> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
p -> Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> IO b
-> IO b
forall b.
Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> IO b
-> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
p PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
x (Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT -> IO b
f Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
p)
  pokeCStruct :: forall b.
Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> IO b
-> IO b
pokeCStruct Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
p PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT{"isPreprocessed" ::: Bool
Flags
ShaderStageFlags
IndirectCommandsInputModeFlagsEXT
$sel:maxIndirectPipelineCount:PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT :: PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT -> Flags
$sel:maxIndirectShaderObjectCount:PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT :: PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT -> Flags
$sel:maxIndirectSequenceCount:PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT :: PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT -> Flags
$sel:maxIndirectCommandsTokenCount:PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT :: PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT -> Flags
$sel:maxIndirectCommandsTokenOffset:PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT :: PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT -> Flags
$sel:maxIndirectCommandsIndirectStride:PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT :: PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT -> Flags
$sel:supportedIndirectCommandsInputModes:PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT :: PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> IndirectCommandsInputModeFlagsEXT
$sel:supportedIndirectCommandsShaderStages:PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT :: PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> ShaderStageFlags
$sel:supportedIndirectCommandsShaderStagesPipelineBinding:PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT :: PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> ShaderStageFlags
$sel:supportedIndirectCommandsShaderStagesShaderBinding:PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT :: PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> ShaderStageFlags
$sel:deviceGeneratedCommandsTransformFeedback:PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT :: PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> "isPreprocessed" ::: Bool
$sel:deviceGeneratedCommandsMultiDrawIndirectCount:PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT :: PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> "isPreprocessed" ::: Bool
maxIndirectPipelineCount :: Flags
maxIndirectShaderObjectCount :: Flags
maxIndirectSequenceCount :: Flags
maxIndirectCommandsTokenCount :: Flags
maxIndirectCommandsTokenOffset :: Flags
maxIndirectCommandsIndirectStride :: Flags
supportedIndirectCommandsInputModes :: IndirectCommandsInputModeFlagsEXT
supportedIndirectCommandsShaderStages :: ShaderStageFlags
supportedIndirectCommandsShaderStagesPipelineBinding :: ShaderStageFlags
supportedIndirectCommandsShaderStagesShaderBinding :: ShaderStageFlags
deviceGeneratedCommandsTransformFeedback :: "isPreprocessed" ::: Bool
deviceGeneratedCommandsMultiDrawIndirectCount :: "isPreprocessed" ::: Bool
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_EXT)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32)) (Flags
maxIndirectPipelineCount)
    Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr Word32)) (Flags
maxIndirectShaderObjectCount)
    Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Word32)) (Flags
maxIndirectSequenceCount)
    Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
28 :: Ptr Word32)) (Flags
maxIndirectCommandsTokenCount)
    Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr Word32)) (Flags
maxIndirectCommandsTokenOffset)
    Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
36 :: Ptr Word32)) (Flags
maxIndirectCommandsIndirectStride)
    Ptr IndirectCommandsInputModeFlagsEXT
-> IndirectCommandsInputModeFlagsEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> Int -> Ptr IndirectCommandsInputModeFlagsEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr IndirectCommandsInputModeFlagsEXT)) (IndirectCommandsInputModeFlagsEXT
supportedIndirectCommandsInputModes)
    Ptr ShaderStageFlags -> ShaderStageFlags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> Int -> Ptr ShaderStageFlags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
44 :: Ptr ShaderStageFlags)) (ShaderStageFlags
supportedIndirectCommandsShaderStages)
    Ptr ShaderStageFlags -> ShaderStageFlags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> Int -> Ptr ShaderStageFlags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr ShaderStageFlags)) (ShaderStageFlags
supportedIndirectCommandsShaderStagesPipelineBinding)
    Ptr ShaderStageFlags -> ShaderStageFlags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> Int -> Ptr ShaderStageFlags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
52 :: Ptr ShaderStageFlags)) (ShaderStageFlags
supportedIndirectCommandsShaderStagesShaderBinding)
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
56 :: Ptr Bool32)) (("isPreprocessed" ::: Bool) -> Bool32
boolToBool32 ("isPreprocessed" ::: Bool
deviceGeneratedCommandsTransformFeedback))
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
60 :: Ptr Bool32)) (("isPreprocessed" ::: Bool) -> Bool32
boolToBool32 ("isPreprocessed" ::: Bool
deviceGeneratedCommandsMultiDrawIndirectCount))
    IO b
f
  cStructSize :: Int
cStructSize = Int
64
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b.
Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> IO b -> IO b
pokeZeroCStruct Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_EXT)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32)) (Flags
forall a. Zero a => a
zero)
    Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr Word32)) (Flags
forall a. Zero a => a
zero)
    Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Word32)) (Flags
forall a. Zero a => a
zero)
    Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
28 :: Ptr Word32)) (Flags
forall a. Zero a => a
zero)
    Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr Word32)) (Flags
forall a. Zero a => a
zero)
    Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
36 :: Ptr Word32)) (Flags
forall a. Zero a => a
zero)
    Ptr IndirectCommandsInputModeFlagsEXT
-> IndirectCommandsInputModeFlagsEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> Int -> Ptr IndirectCommandsInputModeFlagsEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr IndirectCommandsInputModeFlagsEXT)) (IndirectCommandsInputModeFlagsEXT
forall a. Zero a => a
zero)
    Ptr ShaderStageFlags -> ShaderStageFlags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> Int -> Ptr ShaderStageFlags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
44 :: Ptr ShaderStageFlags)) (ShaderStageFlags
forall a. Zero a => a
zero)
    Ptr ShaderStageFlags -> ShaderStageFlags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> Int -> Ptr ShaderStageFlags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr ShaderStageFlags)) (ShaderStageFlags
forall a. Zero a => a
zero)
    Ptr ShaderStageFlags -> ShaderStageFlags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> Int -> Ptr ShaderStageFlags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
52 :: Ptr ShaderStageFlags)) (ShaderStageFlags
forall a. Zero a => a
zero)
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
56 :: Ptr Bool32)) (("isPreprocessed" ::: Bool) -> Bool32
boolToBool32 ("isPreprocessed" ::: Bool
forall a. Zero a => a
zero))
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
60 :: Ptr Bool32)) (("isPreprocessed" ::: Bool) -> Bool32
boolToBool32 ("isPreprocessed" ::: Bool
forall a. Zero a => a
zero))
    IO b
f

instance FromCStruct PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT where
  peekCStruct :: Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> IO PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
peekCStruct Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
p = do
    Flags
maxIndirectPipelineCount <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32))
    Flags
maxIndirectShaderObjectCount <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr Word32))
    Flags
maxIndirectSequenceCount <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Word32))
    Flags
maxIndirectCommandsTokenCount <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
28 :: Ptr Word32))
    Flags
maxIndirectCommandsTokenOffset <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr Word32))
    Flags
maxIndirectCommandsIndirectStride <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
36 :: Ptr Word32))
    IndirectCommandsInputModeFlagsEXT
supportedIndirectCommandsInputModes <- forall a. Storable a => Ptr a -> IO a
peek @IndirectCommandsInputModeFlagsEXT ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> Int -> Ptr IndirectCommandsInputModeFlagsEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr IndirectCommandsInputModeFlagsEXT))
    ShaderStageFlags
supportedIndirectCommandsShaderStages <- forall a. Storable a => Ptr a -> IO a
peek @ShaderStageFlags ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> Int -> Ptr ShaderStageFlags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
44 :: Ptr ShaderStageFlags))
    ShaderStageFlags
supportedIndirectCommandsShaderStagesPipelineBinding <- forall a. Storable a => Ptr a -> IO a
peek @ShaderStageFlags ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> Int -> Ptr ShaderStageFlags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr ShaderStageFlags))
    ShaderStageFlags
supportedIndirectCommandsShaderStagesShaderBinding <- forall a. Storable a => Ptr a -> IO a
peek @ShaderStageFlags ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> Int -> Ptr ShaderStageFlags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
52 :: Ptr ShaderStageFlags))
    Bool32
deviceGeneratedCommandsTransformFeedback <- forall a. Storable a => Ptr a -> IO a
peek @Bool32 ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
56 :: Ptr Bool32))
    Bool32
deviceGeneratedCommandsMultiDrawIndirectCount <- forall a. Storable a => Ptr a -> IO a
peek @Bool32 ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
60 :: Ptr Bool32))
    PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> IO PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
 -> IO PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT)
-> PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> IO PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
forall a b. (a -> b) -> a -> b
$ Flags
-> Flags
-> Flags
-> Flags
-> Flags
-> Flags
-> IndirectCommandsInputModeFlagsEXT
-> ShaderStageFlags
-> ShaderStageFlags
-> ShaderStageFlags
-> ("isPreprocessed" ::: Bool)
-> ("isPreprocessed" ::: Bool)
-> PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
             Flags
maxIndirectPipelineCount
             Flags
maxIndirectShaderObjectCount
             Flags
maxIndirectSequenceCount
             Flags
maxIndirectCommandsTokenCount
             Flags
maxIndirectCommandsTokenOffset
             Flags
maxIndirectCommandsIndirectStride
             IndirectCommandsInputModeFlagsEXT
supportedIndirectCommandsInputModes
             ShaderStageFlags
supportedIndirectCommandsShaderStages
             ShaderStageFlags
supportedIndirectCommandsShaderStagesPipelineBinding
             ShaderStageFlags
supportedIndirectCommandsShaderStagesShaderBinding
             (Bool32 -> "isPreprocessed" ::: Bool
bool32ToBool Bool32
deviceGeneratedCommandsTransformFeedback)
             (Bool32 -> "isPreprocessed" ::: Bool
bool32ToBool Bool32
deviceGeneratedCommandsMultiDrawIndirectCount)

instance Storable PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT where
  sizeOf :: PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT -> Int
sizeOf ~PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
_ = Int
64
  alignment :: PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT -> Int
alignment ~PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
_ = Int
8
  peek :: Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> IO PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
peek = Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> IO PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct
  poke :: Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT -> IO ()
poke Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
poked = Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> IO ()
-> IO ()
forall b.
Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
-> IO b
-> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
poked (() -> IO ()
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ())

instance Zero PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT where
  zero :: PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
zero = Flags
-> Flags
-> Flags
-> Flags
-> Flags
-> Flags
-> IndirectCommandsInputModeFlagsEXT
-> ShaderStageFlags
-> ShaderStageFlags
-> ShaderStageFlags
-> ("isPreprocessed" ::: Bool)
-> ("isPreprocessed" ::: Bool)
-> PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
           Flags
forall a. Zero a => a
zero
           Flags
forall a. Zero a => a
zero
           Flags
forall a. Zero a => a
zero
           Flags
forall a. Zero a => a
zero
           Flags
forall a. Zero a => a
zero
           Flags
forall a. Zero a => a
zero
           IndirectCommandsInputModeFlagsEXT
forall a. Zero a => a
zero
           ShaderStageFlags
forall a. Zero a => a
zero
           ShaderStageFlags
forall a. Zero a => a
zero
           ShaderStageFlags
forall a. Zero a => a
zero
           "isPreprocessed" ::: Bool
forall a. Zero a => a
zero
           "isPreprocessed" ::: Bool
forall a. Zero a => a
zero


-- | VkGeneratedCommandsPipelineInfoEXT - Structure specifying a pipeline for
-- use with indirect command preprocessing
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_device_generated_commands VK_EXT_device_generated_commands>,
-- 'Vulkan.Core10.Handles.Pipeline',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data GeneratedCommandsPipelineInfoEXT = GeneratedCommandsPipelineInfoEXT
  { -- | @pipeline@ is a valid pipeline object.
    --
    -- #VUID-VkGeneratedCommandsPipelineInfoEXT-pipeline-parameter# @pipeline@
    -- /must/ be a valid 'Vulkan.Core10.Handles.Pipeline' handle
    GeneratedCommandsPipelineInfoEXT -> Pipeline
pipeline :: Pipeline }
  deriving (Typeable, GeneratedCommandsPipelineInfoEXT
-> GeneratedCommandsPipelineInfoEXT -> "isPreprocessed" ::: Bool
(GeneratedCommandsPipelineInfoEXT
 -> GeneratedCommandsPipelineInfoEXT -> "isPreprocessed" ::: Bool)
-> (GeneratedCommandsPipelineInfoEXT
    -> GeneratedCommandsPipelineInfoEXT -> "isPreprocessed" ::: Bool)
-> Eq GeneratedCommandsPipelineInfoEXT
forall a.
(a -> a -> "isPreprocessed" ::: Bool)
-> (a -> a -> "isPreprocessed" ::: Bool) -> Eq a
$c== :: GeneratedCommandsPipelineInfoEXT
-> GeneratedCommandsPipelineInfoEXT -> "isPreprocessed" ::: Bool
== :: GeneratedCommandsPipelineInfoEXT
-> GeneratedCommandsPipelineInfoEXT -> "isPreprocessed" ::: Bool
$c/= :: GeneratedCommandsPipelineInfoEXT
-> GeneratedCommandsPipelineInfoEXT -> "isPreprocessed" ::: Bool
/= :: GeneratedCommandsPipelineInfoEXT
-> GeneratedCommandsPipelineInfoEXT -> "isPreprocessed" ::: Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (GeneratedCommandsPipelineInfoEXT)
#endif
deriving instance Show GeneratedCommandsPipelineInfoEXT

instance ToCStruct GeneratedCommandsPipelineInfoEXT where
  withCStruct :: forall b.
GeneratedCommandsPipelineInfoEXT
-> (Ptr GeneratedCommandsPipelineInfoEXT -> IO b) -> IO b
withCStruct GeneratedCommandsPipelineInfoEXT
x Ptr GeneratedCommandsPipelineInfoEXT -> IO b
f = Int -> (Ptr GeneratedCommandsPipelineInfoEXT -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
24 ((Ptr GeneratedCommandsPipelineInfoEXT -> IO b) -> IO b)
-> (Ptr GeneratedCommandsPipelineInfoEXT -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr GeneratedCommandsPipelineInfoEXT
p -> Ptr GeneratedCommandsPipelineInfoEXT
-> GeneratedCommandsPipelineInfoEXT -> IO b -> IO b
forall b.
Ptr GeneratedCommandsPipelineInfoEXT
-> GeneratedCommandsPipelineInfoEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr GeneratedCommandsPipelineInfoEXT
p GeneratedCommandsPipelineInfoEXT
x (Ptr GeneratedCommandsPipelineInfoEXT -> IO b
f Ptr GeneratedCommandsPipelineInfoEXT
p)
  pokeCStruct :: forall b.
Ptr GeneratedCommandsPipelineInfoEXT
-> GeneratedCommandsPipelineInfoEXT -> IO b -> IO b
pokeCStruct Ptr GeneratedCommandsPipelineInfoEXT
p GeneratedCommandsPipelineInfoEXT{Pipeline
$sel:pipeline:GeneratedCommandsPipelineInfoEXT :: GeneratedCommandsPipelineInfoEXT -> Pipeline
pipeline :: Pipeline
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr GeneratedCommandsPipelineInfoEXT
p Ptr GeneratedCommandsPipelineInfoEXT -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_GENERATED_COMMANDS_PIPELINE_INFO_EXT)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr GeneratedCommandsPipelineInfoEXT
p Ptr GeneratedCommandsPipelineInfoEXT -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr Pipeline -> Pipeline -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr GeneratedCommandsPipelineInfoEXT
p Ptr GeneratedCommandsPipelineInfoEXT -> Int -> Ptr Pipeline
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Pipeline)) (Pipeline
pipeline)
    IO b
f
  cStructSize :: Int
cStructSize = Int
24
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b. Ptr GeneratedCommandsPipelineInfoEXT -> IO b -> IO b
pokeZeroCStruct Ptr GeneratedCommandsPipelineInfoEXT
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr GeneratedCommandsPipelineInfoEXT
p Ptr GeneratedCommandsPipelineInfoEXT -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_GENERATED_COMMANDS_PIPELINE_INFO_EXT)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr GeneratedCommandsPipelineInfoEXT
p Ptr GeneratedCommandsPipelineInfoEXT -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr Pipeline -> Pipeline -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr GeneratedCommandsPipelineInfoEXT
p Ptr GeneratedCommandsPipelineInfoEXT -> Int -> Ptr Pipeline
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Pipeline)) (Pipeline
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct GeneratedCommandsPipelineInfoEXT where
  peekCStruct :: Ptr GeneratedCommandsPipelineInfoEXT
-> IO GeneratedCommandsPipelineInfoEXT
peekCStruct Ptr GeneratedCommandsPipelineInfoEXT
p = do
    Pipeline
pipeline <- forall a. Storable a => Ptr a -> IO a
peek @Pipeline ((Ptr GeneratedCommandsPipelineInfoEXT
p Ptr GeneratedCommandsPipelineInfoEXT -> Int -> Ptr Pipeline
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Pipeline))
    GeneratedCommandsPipelineInfoEXT
-> IO GeneratedCommandsPipelineInfoEXT
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (GeneratedCommandsPipelineInfoEXT
 -> IO GeneratedCommandsPipelineInfoEXT)
-> GeneratedCommandsPipelineInfoEXT
-> IO GeneratedCommandsPipelineInfoEXT
forall a b. (a -> b) -> a -> b
$ Pipeline -> GeneratedCommandsPipelineInfoEXT
GeneratedCommandsPipelineInfoEXT
             Pipeline
pipeline

instance Storable GeneratedCommandsPipelineInfoEXT where
  sizeOf :: GeneratedCommandsPipelineInfoEXT -> Int
sizeOf ~GeneratedCommandsPipelineInfoEXT
_ = Int
24
  alignment :: GeneratedCommandsPipelineInfoEXT -> Int
alignment ~GeneratedCommandsPipelineInfoEXT
_ = Int
8
  peek :: Ptr GeneratedCommandsPipelineInfoEXT
-> IO GeneratedCommandsPipelineInfoEXT
peek = Ptr GeneratedCommandsPipelineInfoEXT
-> IO GeneratedCommandsPipelineInfoEXT
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct
  poke :: Ptr GeneratedCommandsPipelineInfoEXT
-> GeneratedCommandsPipelineInfoEXT -> IO ()
poke Ptr GeneratedCommandsPipelineInfoEXT
ptr GeneratedCommandsPipelineInfoEXT
poked = Ptr GeneratedCommandsPipelineInfoEXT
-> GeneratedCommandsPipelineInfoEXT -> IO () -> IO ()
forall b.
Ptr GeneratedCommandsPipelineInfoEXT
-> GeneratedCommandsPipelineInfoEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr GeneratedCommandsPipelineInfoEXT
ptr GeneratedCommandsPipelineInfoEXT
poked (() -> IO ()
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ())

instance Zero GeneratedCommandsPipelineInfoEXT where
  zero :: GeneratedCommandsPipelineInfoEXT
zero = Pipeline -> GeneratedCommandsPipelineInfoEXT
GeneratedCommandsPipelineInfoEXT
           Pipeline
forall a. Zero a => a
zero


-- | VkGeneratedCommandsShaderInfoEXT - Structure specifying shader objects
-- for use with indirect command preprocessing
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_device_generated_commands VK_EXT_device_generated_commands>,
-- 'Vulkan.Extensions.Handles.ShaderEXT',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data GeneratedCommandsShaderInfoEXT = GeneratedCommandsShaderInfoEXT
  { -- | @pShaders@ is a pointer to an array of shader objects.
    --
    -- #VUID-VkGeneratedCommandsShaderInfoEXT-pShaders-11127# @pShaders@ /must/
    -- not contain more than one shader object for a given
    -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits' stage
    --
    -- #VUID-VkGeneratedCommandsShaderInfoEXT-pShaders-parameter# @pShaders@
    -- /must/ be a valid pointer to an array of @shaderCount@ valid
    -- 'Vulkan.Extensions.Handles.ShaderEXT' handles
    GeneratedCommandsShaderInfoEXT -> Vector ShaderEXT
shaders :: Vector ShaderEXT }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (GeneratedCommandsShaderInfoEXT)
#endif
deriving instance Show GeneratedCommandsShaderInfoEXT

instance ToCStruct GeneratedCommandsShaderInfoEXT where
  withCStruct :: forall b.
GeneratedCommandsShaderInfoEXT
-> (Ptr GeneratedCommandsShaderInfoEXT -> IO b) -> IO b
withCStruct GeneratedCommandsShaderInfoEXT
x Ptr GeneratedCommandsShaderInfoEXT -> IO b
f = Int -> (Ptr GeneratedCommandsShaderInfoEXT -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
32 ((Ptr GeneratedCommandsShaderInfoEXT -> IO b) -> IO b)
-> (Ptr GeneratedCommandsShaderInfoEXT -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr GeneratedCommandsShaderInfoEXT
p -> Ptr GeneratedCommandsShaderInfoEXT
-> GeneratedCommandsShaderInfoEXT -> IO b -> IO b
forall b.
Ptr GeneratedCommandsShaderInfoEXT
-> GeneratedCommandsShaderInfoEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr GeneratedCommandsShaderInfoEXT
p GeneratedCommandsShaderInfoEXT
x (Ptr GeneratedCommandsShaderInfoEXT -> IO b
f Ptr GeneratedCommandsShaderInfoEXT
p)
  pokeCStruct :: forall b.
Ptr GeneratedCommandsShaderInfoEXT
-> GeneratedCommandsShaderInfoEXT -> IO b -> IO b
pokeCStruct Ptr GeneratedCommandsShaderInfoEXT
p GeneratedCommandsShaderInfoEXT{Vector ShaderEXT
$sel:shaders:GeneratedCommandsShaderInfoEXT :: GeneratedCommandsShaderInfoEXT -> Vector ShaderEXT
shaders :: Vector ShaderEXT
..} IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr GeneratedCommandsShaderInfoEXT
p Ptr GeneratedCommandsShaderInfoEXT -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_GENERATED_COMMANDS_SHADER_INFO_EXT)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr GeneratedCommandsShaderInfoEXT
p Ptr GeneratedCommandsShaderInfoEXT -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr GeneratedCommandsShaderInfoEXT
p Ptr GeneratedCommandsShaderInfoEXT -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32)) ((Int -> Flags
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Vector ShaderEXT -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector ShaderEXT -> Int) -> Vector ShaderEXT -> Int
forall a b. (a -> b) -> a -> b
$ (Vector ShaderEXT
shaders)) :: Word32))
    Ptr ShaderEXT
pPShaders' <- ((Ptr ShaderEXT -> IO b) -> IO b) -> ContT b IO (Ptr ShaderEXT)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr ShaderEXT -> IO b) -> IO b) -> ContT b IO (Ptr ShaderEXT))
-> ((Ptr ShaderEXT -> IO b) -> IO b) -> ContT b IO (Ptr ShaderEXT)
forall a b. (a -> b) -> a -> b
$ forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @ShaderEXT ((Vector ShaderEXT -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector ShaderEXT
shaders)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
8)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ (Int -> ShaderEXT -> IO ()) -> Vector ShaderEXT -> IO ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i ShaderEXT
e -> Ptr ShaderEXT -> ShaderEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr ShaderEXT
pPShaders' Ptr ShaderEXT -> Int -> Ptr ShaderEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
8 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr ShaderEXT) (ShaderEXT
e)) (Vector ShaderEXT
shaders)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr ShaderEXT) -> Ptr ShaderEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr GeneratedCommandsShaderInfoEXT
p Ptr GeneratedCommandsShaderInfoEXT -> Int -> Ptr (Ptr ShaderEXT)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr (Ptr ShaderEXT))) (Ptr ShaderEXT
pPShaders')
    IO b -> ContT b IO b
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO b -> ContT b IO b) -> IO b -> ContT b IO b
forall a b. (a -> b) -> a -> b
$ IO b
f
  cStructSize :: Int
cStructSize = Int
32
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b. Ptr GeneratedCommandsShaderInfoEXT -> IO b -> IO b
pokeZeroCStruct Ptr GeneratedCommandsShaderInfoEXT
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr GeneratedCommandsShaderInfoEXT
p Ptr GeneratedCommandsShaderInfoEXT -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_GENERATED_COMMANDS_SHADER_INFO_EXT)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr GeneratedCommandsShaderInfoEXT
p Ptr GeneratedCommandsShaderInfoEXT -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    IO b
f

instance FromCStruct GeneratedCommandsShaderInfoEXT where
  peekCStruct :: Ptr GeneratedCommandsShaderInfoEXT
-> IO GeneratedCommandsShaderInfoEXT
peekCStruct Ptr GeneratedCommandsShaderInfoEXT
p = do
    Flags
shaderCount <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr GeneratedCommandsShaderInfoEXT
p Ptr GeneratedCommandsShaderInfoEXT -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32))
    Ptr ShaderEXT
pShaders <- forall a. Storable a => Ptr a -> IO a
peek @(Ptr ShaderEXT) ((Ptr GeneratedCommandsShaderInfoEXT
p Ptr GeneratedCommandsShaderInfoEXT -> Int -> Ptr (Ptr ShaderEXT)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr (Ptr ShaderEXT)))
    Vector ShaderEXT
pShaders' <- Int -> (Int -> IO ShaderEXT) -> IO (Vector ShaderEXT)
forall (m :: * -> *) a.
Monad m =>
Int -> (Int -> m a) -> m (Vector a)
generateM (Flags -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral Flags
shaderCount) (\Int
i -> forall a. Storable a => Ptr a -> IO a
peek @ShaderEXT ((Ptr ShaderEXT
pShaders Ptr ShaderEXT -> Int -> Ptr ShaderEXT
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
8 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr ShaderEXT)))
    GeneratedCommandsShaderInfoEXT -> IO GeneratedCommandsShaderInfoEXT
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (GeneratedCommandsShaderInfoEXT
 -> IO GeneratedCommandsShaderInfoEXT)
-> GeneratedCommandsShaderInfoEXT
-> IO GeneratedCommandsShaderInfoEXT
forall a b. (a -> b) -> a -> b
$ Vector ShaderEXT -> GeneratedCommandsShaderInfoEXT
GeneratedCommandsShaderInfoEXT
             Vector ShaderEXT
pShaders'

instance Zero GeneratedCommandsShaderInfoEXT where
  zero :: GeneratedCommandsShaderInfoEXT
zero = Vector ShaderEXT -> GeneratedCommandsShaderInfoEXT
GeneratedCommandsShaderInfoEXT
           Vector ShaderEXT
forall a. Monoid a => a
mempty


-- | 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
--
-- -   #VUID-VkGeneratedCommandsMemoryRequirementsInfoEXT-maxSequencesCount-11009#
--     @maxSequencesCount@ /must/ be less or equal to
--     'PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT'::@maxIndirectSequenceCount@
--
-- -   #VUID-VkGeneratedCommandsMemoryRequirementsInfoEXT-indirectCommandsLayout-11010#
--     If @indirectCommandsLayout@ was created with a token sequence that
--     contained the 'INDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT'
--     token, @indirectExecutionSet@ /must/ not be
--     'Vulkan.Core10.APIConstants.NULL_HANDLE'
--
-- -   #VUID-VkGeneratedCommandsMemoryRequirementsInfoEXT-indirectCommandsLayout-11151#
--     If @indirectCommandsLayout@ was created with a token sequence that
--     contained the 'INDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT'
--     token, the shader stages used to create the initial shader state of
--     @indirectExecutionSet@ /must/ equal the
--     'IndirectCommandsExecutionSetTokenEXT'::@shaderStages@ used to
--     create @indirectCommandsLayout@
--
-- -   #VUID-VkGeneratedCommandsMemoryRequirementsInfoEXT-indirectCommandsLayout-11011#
--     If @indirectCommandsLayout@ was not created with a token sequence
--     that contained the 'INDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT'
--     token, @indirectExecutionSet@ /must/ be
--     'Vulkan.Core10.APIConstants.NULL_HANDLE'
--
-- -   #VUID-VkGeneratedCommandsMemoryRequirementsInfoEXT-maxDrawCount-11146#
--     When not ignored, @maxDrawCount@ × @maxSequenceCount@ /must/ be less
--     than 2^24
--
-- -   #VUID-VkGeneratedCommandsMemoryRequirementsInfoEXT-indirectExecutionSet-11012#
--     If @indirectExecutionSet@ is
--     'Vulkan.Core10.APIConstants.NULL_HANDLE', either a
--     'GeneratedCommandsPipelineInfoEXT' or a
--     'GeneratedCommandsShaderInfoEXT' /must/ be included in the @pNext@
--     chain
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkGeneratedCommandsMemoryRequirementsInfoEXT-sType-sType#
--     @sType@ /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_EXT'
--
-- -   #VUID-VkGeneratedCommandsMemoryRequirementsInfoEXT-pNext-pNext# Each
--     @pNext@ member of any structure (including this one) in the @pNext@
--     chain /must/ be either @NULL@ or a pointer to a valid instance of
--     'GeneratedCommandsPipelineInfoEXT' or
--     'GeneratedCommandsShaderInfoEXT'
--
-- -   #VUID-VkGeneratedCommandsMemoryRequirementsInfoEXT-sType-unique# The
--     @sType@ value of each struct in the @pNext@ chain /must/ be unique
--
-- -   #VUID-VkGeneratedCommandsMemoryRequirementsInfoEXT-indirectExecutionSet-parameter#
--     If @indirectExecutionSet@ is not
--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @indirectExecutionSet@
--     /must/ be a valid
--     'Vulkan.Extensions.Handles.IndirectExecutionSetEXT' handle
--
-- -   #VUID-VkGeneratedCommandsMemoryRequirementsInfoEXT-indirectCommandsLayout-parameter#
--     @indirectCommandsLayout@ /must/ be a valid
--     'Vulkan.Extensions.Handles.IndirectCommandsLayoutEXT' handle
--
-- -   #VUID-VkGeneratedCommandsMemoryRequirementsInfoEXT-commonparent#
--     Both of @indirectCommandsLayout@, and @indirectExecutionSet@ that
--     are valid handles of non-ignored parameters /must/ have been
--     created, allocated, or retrieved from the same
--     'Vulkan.Core10.Handles.Device'
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_device_generated_commands VK_EXT_device_generated_commands>,
-- 'Vulkan.Extensions.Handles.IndirectCommandsLayoutEXT',
-- 'Vulkan.Extensions.Handles.IndirectExecutionSetEXT',
-- 'Vulkan.Core10.Enums.StructureType.StructureType',
-- 'getGeneratedCommandsMemoryRequirementsEXT'
data GeneratedCommandsMemoryRequirementsInfoEXT (es :: [Type]) = GeneratedCommandsMemoryRequirementsInfoEXT
  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.
    forall (es :: [*]).
GeneratedCommandsMemoryRequirementsInfoEXT es -> Chain es
next :: Chain es
  , -- | @indirectExecutionSet@ is the indirect execution set to be used for
    -- binding shaders.
    forall (es :: [*]).
GeneratedCommandsMemoryRequirementsInfoEXT es
-> IndirectExecutionSetEXT
indirectExecutionSet :: IndirectExecutionSetEXT
  , -- | @indirectCommandsLayout@ is the
    -- 'Vulkan.Extensions.Handles.IndirectCommandsLayoutEXT' that this buffer
    -- memory is intended to be used with.
    forall (es :: [*]).
GeneratedCommandsMemoryRequirementsInfoEXT es
-> IndirectCommandsLayoutEXT
indirectCommandsLayout :: IndirectCommandsLayoutEXT
  , -- | @maxSequenceCount@ is the maximum number of sequences that this buffer
    -- memory can be used with.
    forall (es :: [*]).
GeneratedCommandsMemoryRequirementsInfoEXT es -> Flags
maxSequenceCount :: Word32
  , -- | @maxDrawCount@ is the maximum number of indirect draws that can be
    -- executed by any COUNT-type multi-draw indirect tokens. The draw count in
    -- the indirect buffer is clamped to this value for these token types.
    forall (es :: [*]).
GeneratedCommandsMemoryRequirementsInfoEXT es -> Flags
maxDrawCount :: Word32
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (GeneratedCommandsMemoryRequirementsInfoEXT (es :: [Type]))
#endif
deriving instance Show (Chain es) => Show (GeneratedCommandsMemoryRequirementsInfoEXT es)

instance Extensible GeneratedCommandsMemoryRequirementsInfoEXT where
  extensibleTypeName :: String
extensibleTypeName = String
"GeneratedCommandsMemoryRequirementsInfoEXT"
  setNext :: forall (ds :: [*]) (es :: [*]).
GeneratedCommandsMemoryRequirementsInfoEXT ds
-> Chain es -> GeneratedCommandsMemoryRequirementsInfoEXT es
setNext GeneratedCommandsMemoryRequirementsInfoEXT{Flags
IndirectExecutionSetEXT
IndirectCommandsLayoutEXT
Chain ds
$sel:next:GeneratedCommandsMemoryRequirementsInfoEXT :: forall (es :: [*]).
GeneratedCommandsMemoryRequirementsInfoEXT es -> Chain es
$sel:indirectExecutionSet:GeneratedCommandsMemoryRequirementsInfoEXT :: forall (es :: [*]).
GeneratedCommandsMemoryRequirementsInfoEXT es
-> IndirectExecutionSetEXT
$sel:indirectCommandsLayout:GeneratedCommandsMemoryRequirementsInfoEXT :: forall (es :: [*]).
GeneratedCommandsMemoryRequirementsInfoEXT es
-> IndirectCommandsLayoutEXT
$sel:maxSequenceCount:GeneratedCommandsMemoryRequirementsInfoEXT :: forall (es :: [*]).
GeneratedCommandsMemoryRequirementsInfoEXT es -> Flags
$sel:maxDrawCount:GeneratedCommandsMemoryRequirementsInfoEXT :: forall (es :: [*]).
GeneratedCommandsMemoryRequirementsInfoEXT es -> Flags
next :: Chain ds
indirectExecutionSet :: IndirectExecutionSetEXT
indirectCommandsLayout :: IndirectCommandsLayoutEXT
maxSequenceCount :: Flags
maxDrawCount :: Flags
..} Chain es
next' = GeneratedCommandsMemoryRequirementsInfoEXT{$sel:next:GeneratedCommandsMemoryRequirementsInfoEXT :: Chain es
next = Chain es
next', Flags
IndirectExecutionSetEXT
IndirectCommandsLayoutEXT
$sel:indirectExecutionSet:GeneratedCommandsMemoryRequirementsInfoEXT :: IndirectExecutionSetEXT
$sel:indirectCommandsLayout:GeneratedCommandsMemoryRequirementsInfoEXT :: IndirectCommandsLayoutEXT
$sel:maxSequenceCount:GeneratedCommandsMemoryRequirementsInfoEXT :: Flags
$sel:maxDrawCount:GeneratedCommandsMemoryRequirementsInfoEXT :: Flags
indirectExecutionSet :: IndirectExecutionSetEXT
indirectCommandsLayout :: IndirectCommandsLayoutEXT
maxSequenceCount :: Flags
maxDrawCount :: Flags
..}
  getNext :: forall (es :: [*]).
GeneratedCommandsMemoryRequirementsInfoEXT es -> Chain es
getNext GeneratedCommandsMemoryRequirementsInfoEXT{Flags
IndirectExecutionSetEXT
IndirectCommandsLayoutEXT
Chain es
$sel:next:GeneratedCommandsMemoryRequirementsInfoEXT :: forall (es :: [*]).
GeneratedCommandsMemoryRequirementsInfoEXT es -> Chain es
$sel:indirectExecutionSet:GeneratedCommandsMemoryRequirementsInfoEXT :: forall (es :: [*]).
GeneratedCommandsMemoryRequirementsInfoEXT es
-> IndirectExecutionSetEXT
$sel:indirectCommandsLayout:GeneratedCommandsMemoryRequirementsInfoEXT :: forall (es :: [*]).
GeneratedCommandsMemoryRequirementsInfoEXT es
-> IndirectCommandsLayoutEXT
$sel:maxSequenceCount:GeneratedCommandsMemoryRequirementsInfoEXT :: forall (es :: [*]).
GeneratedCommandsMemoryRequirementsInfoEXT es -> Flags
$sel:maxDrawCount:GeneratedCommandsMemoryRequirementsInfoEXT :: forall (es :: [*]).
GeneratedCommandsMemoryRequirementsInfoEXT es -> Flags
next :: Chain es
indirectExecutionSet :: IndirectExecutionSetEXT
indirectCommandsLayout :: IndirectCommandsLayoutEXT
maxSequenceCount :: Flags
maxDrawCount :: Flags
..} = Chain es
next
  extends :: forall e b proxy. Typeable e => proxy e -> (Extends GeneratedCommandsMemoryRequirementsInfoEXT e => b) -> Maybe b
  extends :: forall e b (proxy :: * -> *).
Typeable e =>
proxy e
-> (Extends GeneratedCommandsMemoryRequirementsInfoEXT e => b)
-> Maybe b
extends proxy e
_ Extends GeneratedCommandsMemoryRequirementsInfoEXT e => b
f
    | Just e :~: GeneratedCommandsShaderInfoEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @GeneratedCommandsShaderInfoEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends GeneratedCommandsMemoryRequirementsInfoEXT e => b
f
    | Just e :~: GeneratedCommandsPipelineInfoEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @GeneratedCommandsPipelineInfoEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends GeneratedCommandsMemoryRequirementsInfoEXT e => b
f
    | "isPreprocessed" ::: Bool
otherwise = Maybe b
forall a. Maybe a
Nothing

instance ( Extendss GeneratedCommandsMemoryRequirementsInfoEXT es
         , PokeChain es ) => ToCStruct (GeneratedCommandsMemoryRequirementsInfoEXT es) where
  withCStruct :: forall b.
GeneratedCommandsMemoryRequirementsInfoEXT es
-> (Ptr (GeneratedCommandsMemoryRequirementsInfoEXT es) -> IO b)
-> IO b
withCStruct GeneratedCommandsMemoryRequirementsInfoEXT es
x Ptr (GeneratedCommandsMemoryRequirementsInfoEXT es) -> IO b
f = Int
-> (Ptr (GeneratedCommandsMemoryRequirementsInfoEXT es) -> IO b)
-> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
40 ((Ptr (GeneratedCommandsMemoryRequirementsInfoEXT es) -> IO b)
 -> IO b)
-> (Ptr (GeneratedCommandsMemoryRequirementsInfoEXT es) -> IO b)
-> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr (GeneratedCommandsMemoryRequirementsInfoEXT es)
p -> Ptr (GeneratedCommandsMemoryRequirementsInfoEXT es)
-> GeneratedCommandsMemoryRequirementsInfoEXT es -> IO b -> IO b
forall b.
Ptr (GeneratedCommandsMemoryRequirementsInfoEXT es)
-> GeneratedCommandsMemoryRequirementsInfoEXT es -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr (GeneratedCommandsMemoryRequirementsInfoEXT es)
p GeneratedCommandsMemoryRequirementsInfoEXT es
x (Ptr (GeneratedCommandsMemoryRequirementsInfoEXT es) -> IO b
f Ptr (GeneratedCommandsMemoryRequirementsInfoEXT es)
p)
  pokeCStruct :: forall b.
Ptr (GeneratedCommandsMemoryRequirementsInfoEXT es)
-> GeneratedCommandsMemoryRequirementsInfoEXT es -> IO b -> IO b
pokeCStruct Ptr (GeneratedCommandsMemoryRequirementsInfoEXT es)
p GeneratedCommandsMemoryRequirementsInfoEXT{Flags
IndirectExecutionSetEXT
IndirectCommandsLayoutEXT
Chain es
$sel:next:GeneratedCommandsMemoryRequirementsInfoEXT :: forall (es :: [*]).
GeneratedCommandsMemoryRequirementsInfoEXT es -> Chain es
$sel:indirectExecutionSet:GeneratedCommandsMemoryRequirementsInfoEXT :: forall (es :: [*]).
GeneratedCommandsMemoryRequirementsInfoEXT es
-> IndirectExecutionSetEXT
$sel:indirectCommandsLayout:GeneratedCommandsMemoryRequirementsInfoEXT :: forall (es :: [*]).
GeneratedCommandsMemoryRequirementsInfoEXT es
-> IndirectCommandsLayoutEXT
$sel:maxSequenceCount:GeneratedCommandsMemoryRequirementsInfoEXT :: forall (es :: [*]).
GeneratedCommandsMemoryRequirementsInfoEXT es -> Flags
$sel:maxDrawCount:GeneratedCommandsMemoryRequirementsInfoEXT :: forall (es :: [*]).
GeneratedCommandsMemoryRequirementsInfoEXT es -> Flags
next :: Chain es
indirectExecutionSet :: IndirectExecutionSetEXT
indirectCommandsLayout :: IndirectCommandsLayoutEXT
maxSequenceCount :: Flags
maxDrawCount :: Flags
..} IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (GeneratedCommandsMemoryRequirementsInfoEXT es)
p Ptr (GeneratedCommandsMemoryRequirementsInfoEXT es)
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_EXT)
    Ptr ()
pNext'' <- (Ptr (Chain es) -> Ptr ())
-> ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ())
forall a b. (a -> b) -> ContT b IO a -> ContT b IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Ptr (Chain es) -> Ptr ()
forall a b. Ptr a -> Ptr b
castPtr (ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ()))
-> (((Ptr (Chain es) -> IO b) -> IO b)
    -> ContT b IO (Ptr (Chain es)))
-> ((Ptr (Chain es) -> IO b) -> IO b)
-> ContT b IO (Ptr ())
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr (Chain es))
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr ()))
-> ((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr ())
forall a b. (a -> b) -> a -> b
$ Chain es -> (Ptr (Chain es) -> IO b) -> IO b
forall (es :: [*]) a.
PokeChain es =>
Chain es -> (Ptr (Chain es) -> IO a) -> IO a
forall a. Chain es -> (Ptr (Chain es) -> IO a) -> IO a
withChain (Chain es
next)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (GeneratedCommandsMemoryRequirementsInfoEXT es)
p Ptr (GeneratedCommandsMemoryRequirementsInfoEXT es)
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) Ptr ()
pNext''
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr IndirectExecutionSetEXT -> IndirectExecutionSetEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (GeneratedCommandsMemoryRequirementsInfoEXT es)
p Ptr (GeneratedCommandsMemoryRequirementsInfoEXT es)
-> Int -> Ptr IndirectExecutionSetEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr IndirectExecutionSetEXT)) (IndirectExecutionSetEXT
indirectExecutionSet)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr IndirectCommandsLayoutEXT -> IndirectCommandsLayoutEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (GeneratedCommandsMemoryRequirementsInfoEXT es)
p Ptr (GeneratedCommandsMemoryRequirementsInfoEXT es)
-> Int -> Ptr IndirectCommandsLayoutEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr IndirectCommandsLayoutEXT)) (IndirectCommandsLayoutEXT
indirectCommandsLayout)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (GeneratedCommandsMemoryRequirementsInfoEXT es)
p Ptr (GeneratedCommandsMemoryRequirementsInfoEXT es)
-> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr Word32)) (Flags
maxSequenceCount)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (GeneratedCommandsMemoryRequirementsInfoEXT es)
p Ptr (GeneratedCommandsMemoryRequirementsInfoEXT es)
-> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
36 :: Ptr Word32)) (Flags
maxDrawCount)
    IO b -> ContT b IO b
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO b -> ContT b IO b) -> IO b -> ContT b IO b
forall a b. (a -> b) -> a -> b
$ IO b
f
  cStructSize :: Int
cStructSize = Int
40
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b.
Ptr (GeneratedCommandsMemoryRequirementsInfoEXT es) -> IO b -> IO b
pokeZeroCStruct Ptr (GeneratedCommandsMemoryRequirementsInfoEXT es)
p IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (GeneratedCommandsMemoryRequirementsInfoEXT es)
p Ptr (GeneratedCommandsMemoryRequirementsInfoEXT es)
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_EXT)
    Ptr ()
pNext' <- (Ptr (Chain es) -> Ptr ())
-> ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ())
forall a b. (a -> b) -> ContT b IO a -> ContT b IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Ptr (Chain es) -> Ptr ()
forall a b. Ptr a -> Ptr b
castPtr (ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ()))
-> (((Ptr (Chain es) -> IO b) -> IO b)
    -> ContT b IO (Ptr (Chain es)))
-> ((Ptr (Chain es) -> IO b) -> IO b)
-> ContT b IO (Ptr ())
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr (Chain es))
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr ()))
-> ((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr ())
forall a b. (a -> b) -> a -> b
$ forall (es :: [*]) a.
PokeChain es =>
(Ptr (Chain es) -> IO a) -> IO a
withZeroChain @es
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (GeneratedCommandsMemoryRequirementsInfoEXT es)
p Ptr (GeneratedCommandsMemoryRequirementsInfoEXT es)
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) Ptr ()
pNext'
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr IndirectCommandsLayoutEXT -> IndirectCommandsLayoutEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (GeneratedCommandsMemoryRequirementsInfoEXT es)
p Ptr (GeneratedCommandsMemoryRequirementsInfoEXT es)
-> Int -> Ptr IndirectCommandsLayoutEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr IndirectCommandsLayoutEXT)) (IndirectCommandsLayoutEXT
forall a. Zero a => a
zero)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (GeneratedCommandsMemoryRequirementsInfoEXT es)
p Ptr (GeneratedCommandsMemoryRequirementsInfoEXT es)
-> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr Word32)) (Flags
forall a. Zero a => a
zero)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (GeneratedCommandsMemoryRequirementsInfoEXT es)
p Ptr (GeneratedCommandsMemoryRequirementsInfoEXT es)
-> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
36 :: Ptr Word32)) (Flags
forall a. Zero a => a
zero)
    IO b -> ContT b IO b
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO b -> ContT b IO b) -> IO b -> ContT b IO b
forall a b. (a -> b) -> a -> b
$ IO b
f

instance ( Extendss GeneratedCommandsMemoryRequirementsInfoEXT es
         , PeekChain es ) => FromCStruct (GeneratedCommandsMemoryRequirementsInfoEXT es) where
  peekCStruct :: Ptr (GeneratedCommandsMemoryRequirementsInfoEXT es)
-> IO (GeneratedCommandsMemoryRequirementsInfoEXT es)
peekCStruct Ptr (GeneratedCommandsMemoryRequirementsInfoEXT es)
p = do
    Ptr ()
pNext <- forall a. Storable a => Ptr a -> IO a
peek @(Ptr ()) ((Ptr (GeneratedCommandsMemoryRequirementsInfoEXT es)
p Ptr (GeneratedCommandsMemoryRequirementsInfoEXT es)
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ())))
    Chain es
next <- Ptr (Chain es) -> IO (Chain es)
forall (es :: [*]). PeekChain es => Ptr (Chain es) -> IO (Chain es)
peekChain (Ptr () -> Ptr (Chain es)
forall a b. Ptr a -> Ptr b
castPtr Ptr ()
pNext)
    IndirectExecutionSetEXT
indirectExecutionSet <- forall a. Storable a => Ptr a -> IO a
peek @IndirectExecutionSetEXT ((Ptr (GeneratedCommandsMemoryRequirementsInfoEXT es)
p Ptr (GeneratedCommandsMemoryRequirementsInfoEXT es)
-> Int -> Ptr IndirectExecutionSetEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr IndirectExecutionSetEXT))
    IndirectCommandsLayoutEXT
indirectCommandsLayout <- forall a. Storable a => Ptr a -> IO a
peek @IndirectCommandsLayoutEXT ((Ptr (GeneratedCommandsMemoryRequirementsInfoEXT es)
p Ptr (GeneratedCommandsMemoryRequirementsInfoEXT es)
-> Int -> Ptr IndirectCommandsLayoutEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr IndirectCommandsLayoutEXT))
    Flags
maxSequenceCount <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr (GeneratedCommandsMemoryRequirementsInfoEXT es)
p Ptr (GeneratedCommandsMemoryRequirementsInfoEXT es)
-> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr Word32))
    Flags
maxDrawCount <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr (GeneratedCommandsMemoryRequirementsInfoEXT es)
p Ptr (GeneratedCommandsMemoryRequirementsInfoEXT es)
-> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
36 :: Ptr Word32))
    GeneratedCommandsMemoryRequirementsInfoEXT es
-> IO (GeneratedCommandsMemoryRequirementsInfoEXT es)
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (GeneratedCommandsMemoryRequirementsInfoEXT es
 -> IO (GeneratedCommandsMemoryRequirementsInfoEXT es))
-> GeneratedCommandsMemoryRequirementsInfoEXT es
-> IO (GeneratedCommandsMemoryRequirementsInfoEXT es)
forall a b. (a -> b) -> a -> b
$ Chain es
-> IndirectExecutionSetEXT
-> IndirectCommandsLayoutEXT
-> Flags
-> Flags
-> GeneratedCommandsMemoryRequirementsInfoEXT es
forall (es :: [*]).
Chain es
-> IndirectExecutionSetEXT
-> IndirectCommandsLayoutEXT
-> Flags
-> Flags
-> GeneratedCommandsMemoryRequirementsInfoEXT es
GeneratedCommandsMemoryRequirementsInfoEXT
             Chain es
next
             IndirectExecutionSetEXT
indirectExecutionSet
             IndirectCommandsLayoutEXT
indirectCommandsLayout
             Flags
maxSequenceCount
             Flags
maxDrawCount

instance es ~ '[] => Zero (GeneratedCommandsMemoryRequirementsInfoEXT es) where
  zero :: GeneratedCommandsMemoryRequirementsInfoEXT es
zero = Chain es
-> IndirectExecutionSetEXT
-> IndirectCommandsLayoutEXT
-> Flags
-> Flags
-> GeneratedCommandsMemoryRequirementsInfoEXT es
forall (es :: [*]).
Chain es
-> IndirectExecutionSetEXT
-> IndirectCommandsLayoutEXT
-> Flags
-> Flags
-> GeneratedCommandsMemoryRequirementsInfoEXT es
GeneratedCommandsMemoryRequirementsInfoEXT
           ()
           IndirectExecutionSetEXT
forall a. Zero a => a
zero
           IndirectCommandsLayoutEXT
forall a. Zero a => a
zero
           Flags
forall a. Zero a => a
zero
           Flags
forall a. Zero a => a
zero


-- | 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
--
-- -   #VUID-VkIndirectExecutionSetPipelineInfoEXT-supportedIndirectCommandsShaderStagesPipelineBinding-11015#
--     If
--     <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#limits-supportedIndirectCommandsShaderStagesPipelineBinding ::supportedIndirectCommandsShaderStagesPipelineBinding>
--     does not contain
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_COMPUTE_BIT',
--     the 'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' of
--     @initialPipeline@ /must/ not be
--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_COMPUTE'
--
-- -   #VUID-VkIndirectExecutionSetPipelineInfoEXT-supportedIndirectCommandsShaderStagesPipelineBinding-11016#
--     If
--     <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#limits-supportedIndirectCommandsShaderStagesPipelineBinding ::supportedIndirectCommandsShaderStagesPipelineBinding>
--     does not contain
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_FRAGMENT_BIT',
--     the 'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' of
--     @initialPipeline@ /must/ not be
--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
--
-- -   #VUID-VkIndirectExecutionSetPipelineInfoEXT-supportedIndirectCommandsShaderStagesPipelineBinding-11017#
--     If
--     <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#limits-supportedIndirectCommandsShaderStagesPipelineBinding ::supportedIndirectCommandsShaderStagesPipelineBinding>
--     does not contain ray tracing stages, the
--     'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' of
--     @initialPipeline@ /must/ not be
--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_RAY_TRACING_KHR'
--
-- -   #VUID-VkIndirectExecutionSetPipelineInfoEXT-maxPipelineCount-11018#
--     @maxPipelineCount@ /must/ be between @1@ and
--     'PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT'::@maxIndirectPipelineCount@
--
-- -   #VUID-VkIndirectExecutionSetPipelineInfoEXT-initialPipeline-11019#
--     @initialPipeline@ /must/ not use descriptors of type
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC'
--     or
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC'
--
-- -   #VUID-VkIndirectExecutionSetPipelineInfoEXT-initialPipeline-11153#
--     @initialPipeline@ /must/ have been created with
--     'Vulkan.Extensions.VK_KHR_maintenance5.PIPELINE_CREATE_2_INDIRECT_BINDABLE_BIT_EXT'
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkIndirectExecutionSetPipelineInfoEXT-sType-sType# @sType@
--     /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_INDIRECT_EXECUTION_SET_PIPELINE_INFO_EXT'
--
-- -   #VUID-VkIndirectExecutionSetPipelineInfoEXT-initialPipeline-parameter#
--     @initialPipeline@ /must/ be a valid 'Vulkan.Core10.Handles.Pipeline'
--     handle
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_device_generated_commands VK_EXT_device_generated_commands>,
-- 'IndirectExecutionSetInfoEXT', 'Vulkan.Core10.Handles.Pipeline',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data IndirectExecutionSetPipelineInfoEXT = IndirectExecutionSetPipelineInfoEXT
  { -- | @initialPipeline@ is the initial pipeline for the set. This pipeline
    -- will be automatically added to the set at index @0@.
    IndirectExecutionSetPipelineInfoEXT -> Pipeline
initialPipeline :: Pipeline
  , -- | @maxPipelineCount@ is the maximum number of pipelines stored in the set.
    IndirectExecutionSetPipelineInfoEXT -> Flags
maxPipelineCount :: Word32
  }
  deriving (Typeable, IndirectExecutionSetPipelineInfoEXT
-> IndirectExecutionSetPipelineInfoEXT -> "isPreprocessed" ::: Bool
(IndirectExecutionSetPipelineInfoEXT
 -> IndirectExecutionSetPipelineInfoEXT
 -> "isPreprocessed" ::: Bool)
-> (IndirectExecutionSetPipelineInfoEXT
    -> IndirectExecutionSetPipelineInfoEXT
    -> "isPreprocessed" ::: Bool)
-> Eq IndirectExecutionSetPipelineInfoEXT
forall a.
(a -> a -> "isPreprocessed" ::: Bool)
-> (a -> a -> "isPreprocessed" ::: Bool) -> Eq a
$c== :: IndirectExecutionSetPipelineInfoEXT
-> IndirectExecutionSetPipelineInfoEXT -> "isPreprocessed" ::: Bool
== :: IndirectExecutionSetPipelineInfoEXT
-> IndirectExecutionSetPipelineInfoEXT -> "isPreprocessed" ::: Bool
$c/= :: IndirectExecutionSetPipelineInfoEXT
-> IndirectExecutionSetPipelineInfoEXT -> "isPreprocessed" ::: Bool
/= :: IndirectExecutionSetPipelineInfoEXT
-> IndirectExecutionSetPipelineInfoEXT -> "isPreprocessed" ::: Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (IndirectExecutionSetPipelineInfoEXT)
#endif
deriving instance Show IndirectExecutionSetPipelineInfoEXT

instance ToCStruct IndirectExecutionSetPipelineInfoEXT where
  withCStruct :: forall b.
IndirectExecutionSetPipelineInfoEXT
-> (Ptr IndirectExecutionSetPipelineInfoEXT -> IO b) -> IO b
withCStruct IndirectExecutionSetPipelineInfoEXT
x Ptr IndirectExecutionSetPipelineInfoEXT -> IO b
f = Int -> (Ptr IndirectExecutionSetPipelineInfoEXT -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
32 ((Ptr IndirectExecutionSetPipelineInfoEXT -> IO b) -> IO b)
-> (Ptr IndirectExecutionSetPipelineInfoEXT -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr IndirectExecutionSetPipelineInfoEXT
p -> Ptr IndirectExecutionSetPipelineInfoEXT
-> IndirectExecutionSetPipelineInfoEXT -> IO b -> IO b
forall b.
Ptr IndirectExecutionSetPipelineInfoEXT
-> IndirectExecutionSetPipelineInfoEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr IndirectExecutionSetPipelineInfoEXT
p IndirectExecutionSetPipelineInfoEXT
x (Ptr IndirectExecutionSetPipelineInfoEXT -> IO b
f Ptr IndirectExecutionSetPipelineInfoEXT
p)
  pokeCStruct :: forall b.
Ptr IndirectExecutionSetPipelineInfoEXT
-> IndirectExecutionSetPipelineInfoEXT -> IO b -> IO b
pokeCStruct Ptr IndirectExecutionSetPipelineInfoEXT
p IndirectExecutionSetPipelineInfoEXT{Flags
Pipeline
$sel:initialPipeline:IndirectExecutionSetPipelineInfoEXT :: IndirectExecutionSetPipelineInfoEXT -> Pipeline
$sel:maxPipelineCount:IndirectExecutionSetPipelineInfoEXT :: IndirectExecutionSetPipelineInfoEXT -> Flags
initialPipeline :: Pipeline
maxPipelineCount :: Flags
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectExecutionSetPipelineInfoEXT
p Ptr IndirectExecutionSetPipelineInfoEXT -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_INDIRECT_EXECUTION_SET_PIPELINE_INFO_EXT)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectExecutionSetPipelineInfoEXT
p Ptr IndirectExecutionSetPipelineInfoEXT -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr Pipeline -> Pipeline -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectExecutionSetPipelineInfoEXT
p Ptr IndirectExecutionSetPipelineInfoEXT -> Int -> Ptr Pipeline
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Pipeline)) (Pipeline
initialPipeline)
    Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectExecutionSetPipelineInfoEXT
p Ptr IndirectExecutionSetPipelineInfoEXT -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Word32)) (Flags
maxPipelineCount)
    IO b
f
  cStructSize :: Int
cStructSize = Int
32
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b. Ptr IndirectExecutionSetPipelineInfoEXT -> IO b -> IO b
pokeZeroCStruct Ptr IndirectExecutionSetPipelineInfoEXT
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectExecutionSetPipelineInfoEXT
p Ptr IndirectExecutionSetPipelineInfoEXT -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_INDIRECT_EXECUTION_SET_PIPELINE_INFO_EXT)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectExecutionSetPipelineInfoEXT
p Ptr IndirectExecutionSetPipelineInfoEXT -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr Pipeline -> Pipeline -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectExecutionSetPipelineInfoEXT
p Ptr IndirectExecutionSetPipelineInfoEXT -> Int -> Ptr Pipeline
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Pipeline)) (Pipeline
forall a. Zero a => a
zero)
    Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectExecutionSetPipelineInfoEXT
p Ptr IndirectExecutionSetPipelineInfoEXT -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Word32)) (Flags
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct IndirectExecutionSetPipelineInfoEXT where
  peekCStruct :: Ptr IndirectExecutionSetPipelineInfoEXT
-> IO IndirectExecutionSetPipelineInfoEXT
peekCStruct Ptr IndirectExecutionSetPipelineInfoEXT
p = do
    Pipeline
initialPipeline <- forall a. Storable a => Ptr a -> IO a
peek @Pipeline ((Ptr IndirectExecutionSetPipelineInfoEXT
p Ptr IndirectExecutionSetPipelineInfoEXT -> Int -> Ptr Pipeline
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Pipeline))
    Flags
maxPipelineCount <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr IndirectExecutionSetPipelineInfoEXT
p Ptr IndirectExecutionSetPipelineInfoEXT -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Word32))
    IndirectExecutionSetPipelineInfoEXT
-> IO IndirectExecutionSetPipelineInfoEXT
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (IndirectExecutionSetPipelineInfoEXT
 -> IO IndirectExecutionSetPipelineInfoEXT)
-> IndirectExecutionSetPipelineInfoEXT
-> IO IndirectExecutionSetPipelineInfoEXT
forall a b. (a -> b) -> a -> b
$ Pipeline -> Flags -> IndirectExecutionSetPipelineInfoEXT
IndirectExecutionSetPipelineInfoEXT
             Pipeline
initialPipeline Flags
maxPipelineCount

instance Storable IndirectExecutionSetPipelineInfoEXT where
  sizeOf :: IndirectExecutionSetPipelineInfoEXT -> Int
sizeOf ~IndirectExecutionSetPipelineInfoEXT
_ = Int
32
  alignment :: IndirectExecutionSetPipelineInfoEXT -> Int
alignment ~IndirectExecutionSetPipelineInfoEXT
_ = Int
8
  peek :: Ptr IndirectExecutionSetPipelineInfoEXT
-> IO IndirectExecutionSetPipelineInfoEXT
peek = Ptr IndirectExecutionSetPipelineInfoEXT
-> IO IndirectExecutionSetPipelineInfoEXT
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct
  poke :: Ptr IndirectExecutionSetPipelineInfoEXT
-> IndirectExecutionSetPipelineInfoEXT -> IO ()
poke Ptr IndirectExecutionSetPipelineInfoEXT
ptr IndirectExecutionSetPipelineInfoEXT
poked = Ptr IndirectExecutionSetPipelineInfoEXT
-> IndirectExecutionSetPipelineInfoEXT -> IO () -> IO ()
forall b.
Ptr IndirectExecutionSetPipelineInfoEXT
-> IndirectExecutionSetPipelineInfoEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr IndirectExecutionSetPipelineInfoEXT
ptr IndirectExecutionSetPipelineInfoEXT
poked (() -> IO ()
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ())

instance Zero IndirectExecutionSetPipelineInfoEXT where
  zero :: IndirectExecutionSetPipelineInfoEXT
zero = Pipeline -> Flags -> IndirectExecutionSetPipelineInfoEXT
IndirectExecutionSetPipelineInfoEXT
           Pipeline
forall a. Zero a => a
zero
           Flags
forall a. Zero a => a
zero


-- | VkIndirectExecutionSetShaderLayoutInfoEXT - Struct specifying descriptor
-- layout parameters of a newly created indirect execution set containing
-- only shader objects
--
-- == Valid Usage
--
-- -   #VUID-VkIndirectExecutionSetShaderLayoutInfoEXT-pSetLayouts-11024#
--     All members of @pSetLayouts@ /must/ not contain descriptors of type
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC'
--     or
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC'
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkIndirectExecutionSetShaderLayoutInfoEXT-sType-sType# @sType@
--     /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_INDIRECT_EXECUTION_SET_SHADER_LAYOUT_INFO_EXT'
--
-- -   #VUID-VkIndirectExecutionSetShaderLayoutInfoEXT-pSetLayouts-parameter#
--     If @setLayoutCount@ is not @0@, @pSetLayouts@ /must/ be a valid
--     pointer to an array of @setLayoutCount@ valid or
--     'Vulkan.Core10.APIConstants.NULL_HANDLE'
--     'Vulkan.Core10.Handles.DescriptorSetLayout' handles
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_device_generated_commands VK_EXT_device_generated_commands>,
-- 'Vulkan.Core10.Handles.DescriptorSetLayout',
-- 'IndirectExecutionSetShaderInfoEXT',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data IndirectExecutionSetShaderLayoutInfoEXT = IndirectExecutionSetShaderLayoutInfoEXT
  { -- | @pSetLayouts@ is a pointer to an array containing
    -- 'Vulkan.Core10.Handles.DescriptorSetLayout' objects used by the shader
    -- stage.
    IndirectExecutionSetShaderLayoutInfoEXT
-> Vector DescriptorSetLayout
setLayouts :: Vector DescriptorSetLayout }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (IndirectExecutionSetShaderLayoutInfoEXT)
#endif
deriving instance Show IndirectExecutionSetShaderLayoutInfoEXT

instance ToCStruct IndirectExecutionSetShaderLayoutInfoEXT where
  withCStruct :: forall b.
IndirectExecutionSetShaderLayoutInfoEXT
-> (Ptr IndirectExecutionSetShaderLayoutInfoEXT -> IO b) -> IO b
withCStruct IndirectExecutionSetShaderLayoutInfoEXT
x Ptr IndirectExecutionSetShaderLayoutInfoEXT -> IO b
f = Int
-> (Ptr IndirectExecutionSetShaderLayoutInfoEXT -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
32 ((Ptr IndirectExecutionSetShaderLayoutInfoEXT -> IO b) -> IO b)
-> (Ptr IndirectExecutionSetShaderLayoutInfoEXT -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr IndirectExecutionSetShaderLayoutInfoEXT
p -> Ptr IndirectExecutionSetShaderLayoutInfoEXT
-> IndirectExecutionSetShaderLayoutInfoEXT -> IO b -> IO b
forall b.
Ptr IndirectExecutionSetShaderLayoutInfoEXT
-> IndirectExecutionSetShaderLayoutInfoEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr IndirectExecutionSetShaderLayoutInfoEXT
p IndirectExecutionSetShaderLayoutInfoEXT
x (Ptr IndirectExecutionSetShaderLayoutInfoEXT -> IO b
f Ptr IndirectExecutionSetShaderLayoutInfoEXT
p)
  pokeCStruct :: forall b.
Ptr IndirectExecutionSetShaderLayoutInfoEXT
-> IndirectExecutionSetShaderLayoutInfoEXT -> IO b -> IO b
pokeCStruct Ptr IndirectExecutionSetShaderLayoutInfoEXT
p IndirectExecutionSetShaderLayoutInfoEXT{Vector DescriptorSetLayout
$sel:setLayouts:IndirectExecutionSetShaderLayoutInfoEXT :: IndirectExecutionSetShaderLayoutInfoEXT
-> Vector DescriptorSetLayout
setLayouts :: Vector DescriptorSetLayout
..} IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectExecutionSetShaderLayoutInfoEXT
p Ptr IndirectExecutionSetShaderLayoutInfoEXT
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_INDIRECT_EXECUTION_SET_SHADER_LAYOUT_INFO_EXT)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectExecutionSetShaderLayoutInfoEXT
p Ptr IndirectExecutionSetShaderLayoutInfoEXT -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectExecutionSetShaderLayoutInfoEXT
p Ptr IndirectExecutionSetShaderLayoutInfoEXT -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32)) ((Int -> Flags
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Vector DescriptorSetLayout -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector DescriptorSetLayout -> Int)
-> Vector DescriptorSetLayout -> Int
forall a b. (a -> b) -> a -> b
$ (Vector DescriptorSetLayout
setLayouts)) :: Word32))
    Ptr DescriptorSetLayout
pPSetLayouts' <- ((Ptr DescriptorSetLayout -> IO b) -> IO b)
-> ContT b IO (Ptr DescriptorSetLayout)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr DescriptorSetLayout -> IO b) -> IO b)
 -> ContT b IO (Ptr DescriptorSetLayout))
-> ((Ptr DescriptorSetLayout -> IO b) -> IO b)
-> ContT b IO (Ptr DescriptorSetLayout)
forall a b. (a -> b) -> a -> b
$ forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @DescriptorSetLayout ((Vector DescriptorSetLayout -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector DescriptorSetLayout
setLayouts)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
8)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ (Int -> DescriptorSetLayout -> IO ())
-> Vector DescriptorSetLayout -> IO ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i DescriptorSetLayout
e -> Ptr DescriptorSetLayout -> DescriptorSetLayout -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr DescriptorSetLayout
pPSetLayouts' Ptr DescriptorSetLayout -> Int -> Ptr DescriptorSetLayout
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
8 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr DescriptorSetLayout) (DescriptorSetLayout
e)) (Vector DescriptorSetLayout
setLayouts)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr DescriptorSetLayout) -> Ptr DescriptorSetLayout -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectExecutionSetShaderLayoutInfoEXT
p Ptr IndirectExecutionSetShaderLayoutInfoEXT
-> Int -> Ptr (Ptr DescriptorSetLayout)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr (Ptr DescriptorSetLayout))) (Ptr DescriptorSetLayout
pPSetLayouts')
    IO b -> ContT b IO b
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO b -> ContT b IO b) -> IO b -> ContT b IO b
forall a b. (a -> b) -> a -> b
$ IO b
f
  cStructSize :: Int
cStructSize = Int
32
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b.
Ptr IndirectExecutionSetShaderLayoutInfoEXT -> IO b -> IO b
pokeZeroCStruct Ptr IndirectExecutionSetShaderLayoutInfoEXT
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectExecutionSetShaderLayoutInfoEXT
p Ptr IndirectExecutionSetShaderLayoutInfoEXT
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_INDIRECT_EXECUTION_SET_SHADER_LAYOUT_INFO_EXT)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectExecutionSetShaderLayoutInfoEXT
p Ptr IndirectExecutionSetShaderLayoutInfoEXT -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    IO b
f

instance FromCStruct IndirectExecutionSetShaderLayoutInfoEXT where
  peekCStruct :: Ptr IndirectExecutionSetShaderLayoutInfoEXT
-> IO IndirectExecutionSetShaderLayoutInfoEXT
peekCStruct Ptr IndirectExecutionSetShaderLayoutInfoEXT
p = do
    Flags
setLayoutCount <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr IndirectExecutionSetShaderLayoutInfoEXT
p Ptr IndirectExecutionSetShaderLayoutInfoEXT -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32))
    Ptr DescriptorSetLayout
pSetLayouts <- forall a. Storable a => Ptr a -> IO a
peek @(Ptr DescriptorSetLayout) ((Ptr IndirectExecutionSetShaderLayoutInfoEXT
p Ptr IndirectExecutionSetShaderLayoutInfoEXT
-> Int -> Ptr (Ptr DescriptorSetLayout)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr (Ptr DescriptorSetLayout)))
    Vector DescriptorSetLayout
pSetLayouts' <- Int
-> (Int -> IO DescriptorSetLayout)
-> IO (Vector DescriptorSetLayout)
forall (m :: * -> *) a.
Monad m =>
Int -> (Int -> m a) -> m (Vector a)
generateM (Flags -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral Flags
setLayoutCount) (\Int
i -> forall a. Storable a => Ptr a -> IO a
peek @DescriptorSetLayout ((Ptr DescriptorSetLayout
pSetLayouts Ptr DescriptorSetLayout -> Int -> Ptr DescriptorSetLayout
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
8 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr DescriptorSetLayout)))
    IndirectExecutionSetShaderLayoutInfoEXT
-> IO IndirectExecutionSetShaderLayoutInfoEXT
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (IndirectExecutionSetShaderLayoutInfoEXT
 -> IO IndirectExecutionSetShaderLayoutInfoEXT)
-> IndirectExecutionSetShaderLayoutInfoEXT
-> IO IndirectExecutionSetShaderLayoutInfoEXT
forall a b. (a -> b) -> a -> b
$ Vector DescriptorSetLayout
-> IndirectExecutionSetShaderLayoutInfoEXT
IndirectExecutionSetShaderLayoutInfoEXT
             Vector DescriptorSetLayout
pSetLayouts'

instance Zero IndirectExecutionSetShaderLayoutInfoEXT where
  zero :: IndirectExecutionSetShaderLayoutInfoEXT
zero = Vector DescriptorSetLayout
-> IndirectExecutionSetShaderLayoutInfoEXT
IndirectExecutionSetShaderLayoutInfoEXT
           Vector DescriptorSetLayout
forall a. Monoid a => a
mempty


-- | 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
--
-- -   #VUID-VkIndirectExecutionSetShaderInfoEXT-pInitialShaders-11020# All
--     members of @pInitialShaders@ /must/ have a @stage@ supported by
--     <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#limits-supportedIndirectCommandsShaderStagesShaderBinding ::supportedIndirectCommandsShaderStagesShaderBinding>
--
-- -   #VUID-VkIndirectExecutionSetShaderInfoEXT-maxShaderCount-11021#
--     @maxShaderCount@ /must/ not be zero
--
-- -   #VUID-VkIndirectExecutionSetShaderInfoEXT-maxShaderCount-11022#
--     @maxShaderCount@ /must/ be less than or equal to
--     'PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT'::@maxIndirectShaderObjectCount@
--
-- -   #VUID-VkIndirectExecutionSetShaderInfoEXT-maxShaderCount-11036#
--     @maxShaderCount@ /must/ be greater than or equal to @shaderCount@
--
-- -   #VUID-VkIndirectExecutionSetShaderInfoEXT-stage-11023# The @stage@
--     of each element in the @pInitialShaders@ array /must/ be unique
--
-- -   #VUID-VkIndirectExecutionSetShaderInfoEXT-pInitialShaders-11154#
--     Each member of @pInitialShaders@ /must/ have been created with
--     'Vulkan.Extensions.VK_EXT_shader_object.SHADER_CREATE_INDIRECT_BINDABLE_BIT_EXT'
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkIndirectExecutionSetShaderInfoEXT-sType-sType# @sType@
--     /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_INDIRECT_EXECUTION_SET_SHADER_INFO_EXT'
--
-- -   #VUID-VkIndirectExecutionSetShaderInfoEXT-pInitialShaders-parameter#
--     @pInitialShaders@ /must/ be a valid pointer to an array of
--     @shaderCount@ valid 'Vulkan.Extensions.Handles.ShaderEXT' handles
--
-- -   #VUID-VkIndirectExecutionSetShaderInfoEXT-pSetLayoutInfos-parameter#
--     If @pSetLayoutInfos@ is not @NULL@, @pSetLayoutInfos@ /must/ be a
--     valid pointer to an array of @shaderCount@ valid
--     'IndirectExecutionSetShaderLayoutInfoEXT' structures
--
-- -   #VUID-VkIndirectExecutionSetShaderInfoEXT-pPushConstantRanges-parameter#
--     If @pushConstantRangeCount@ is not @0@, @pPushConstantRanges@ /must/
--     be a valid pointer to an array of @pushConstantRangeCount@ valid
--     'Vulkan.Core10.PipelineLayout.PushConstantRange' structures
--
-- -   #VUID-VkIndirectExecutionSetShaderInfoEXT-shaderCount-arraylength#
--     @shaderCount@ /must/ be greater than @0@
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_device_generated_commands VK_EXT_device_generated_commands>,
-- 'IndirectExecutionSetInfoEXT',
-- 'IndirectExecutionSetShaderLayoutInfoEXT',
-- 'Vulkan.Core10.PipelineLayout.PushConstantRange',
-- 'Vulkan.Extensions.Handles.ShaderEXT',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data IndirectExecutionSetShaderInfoEXT = IndirectExecutionSetShaderInfoEXT
  { -- | @pInitialShaders@ is a pointer to an array containing a
    -- 'Vulkan.Extensions.Handles.ShaderEXT' object for each shader stage that
    -- will be used in the set. These shaders will be automatically added to
    -- the set beginning at index @0@.
    IndirectExecutionSetShaderInfoEXT -> Vector ShaderEXT
initialShaders :: Vector ShaderEXT
  , -- | @pSetLayoutInfos@ is a pointer to an array containing a
    -- 'IndirectExecutionSetShaderLayoutInfoEXT' used by each corresponding
    -- @pInitialShaders@ shader stage in the set.
    IndirectExecutionSetShaderInfoEXT
-> Vector IndirectExecutionSetShaderLayoutInfoEXT
setLayoutInfos :: Vector IndirectExecutionSetShaderLayoutInfoEXT
  , -- | @maxShaderCount@ is the maximum number of shader objects stored in the
    -- set.
    IndirectExecutionSetShaderInfoEXT -> Flags
maxShaderCount :: Word32
  , -- | @pPushConstantRanges@ is a pointer to the array of
    -- 'Vulkan.Core10.PipelineLayout.PushConstantRange' ranges used by all
    -- shaders in the set.
    IndirectExecutionSetShaderInfoEXT -> Vector PushConstantRange
pushConstantRanges :: Vector PushConstantRange
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (IndirectExecutionSetShaderInfoEXT)
#endif
deriving instance Show IndirectExecutionSetShaderInfoEXT

instance ToCStruct IndirectExecutionSetShaderInfoEXT where
  withCStruct :: forall b.
IndirectExecutionSetShaderInfoEXT
-> (Ptr IndirectExecutionSetShaderInfoEXT -> IO b) -> IO b
withCStruct IndirectExecutionSetShaderInfoEXT
x Ptr IndirectExecutionSetShaderInfoEXT -> IO b
f = Int -> (Ptr IndirectExecutionSetShaderInfoEXT -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
56 ((Ptr IndirectExecutionSetShaderInfoEXT -> IO b) -> IO b)
-> (Ptr IndirectExecutionSetShaderInfoEXT -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr IndirectExecutionSetShaderInfoEXT
p -> Ptr IndirectExecutionSetShaderInfoEXT
-> IndirectExecutionSetShaderInfoEXT -> IO b -> IO b
forall b.
Ptr IndirectExecutionSetShaderInfoEXT
-> IndirectExecutionSetShaderInfoEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr IndirectExecutionSetShaderInfoEXT
p IndirectExecutionSetShaderInfoEXT
x (Ptr IndirectExecutionSetShaderInfoEXT -> IO b
f Ptr IndirectExecutionSetShaderInfoEXT
p)
  pokeCStruct :: forall b.
Ptr IndirectExecutionSetShaderInfoEXT
-> IndirectExecutionSetShaderInfoEXT -> IO b -> IO b
pokeCStruct Ptr IndirectExecutionSetShaderInfoEXT
p IndirectExecutionSetShaderInfoEXT{Flags
Vector PushConstantRange
Vector ShaderEXT
Vector IndirectExecutionSetShaderLayoutInfoEXT
$sel:initialShaders:IndirectExecutionSetShaderInfoEXT :: IndirectExecutionSetShaderInfoEXT -> Vector ShaderEXT
$sel:setLayoutInfos:IndirectExecutionSetShaderInfoEXT :: IndirectExecutionSetShaderInfoEXT
-> Vector IndirectExecutionSetShaderLayoutInfoEXT
$sel:maxShaderCount:IndirectExecutionSetShaderInfoEXT :: IndirectExecutionSetShaderInfoEXT -> Flags
$sel:pushConstantRanges:IndirectExecutionSetShaderInfoEXT :: IndirectExecutionSetShaderInfoEXT -> Vector PushConstantRange
initialShaders :: Vector ShaderEXT
setLayoutInfos :: Vector IndirectExecutionSetShaderLayoutInfoEXT
maxShaderCount :: Flags
pushConstantRanges :: Vector PushConstantRange
..} IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectExecutionSetShaderInfoEXT
p Ptr IndirectExecutionSetShaderInfoEXT -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_INDIRECT_EXECUTION_SET_SHADER_INFO_EXT)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectExecutionSetShaderInfoEXT
p Ptr IndirectExecutionSetShaderInfoEXT -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    let pInitialShadersLength :: Int
pInitialShadersLength = Vector ShaderEXT -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector ShaderEXT -> Int) -> Vector ShaderEXT -> Int
forall a b. (a -> b) -> a -> b
$ (Vector ShaderEXT
initialShaders)
    let pSetLayoutInfosLength :: Int
pSetLayoutInfosLength = Vector IndirectExecutionSetShaderLayoutInfoEXT -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector IndirectExecutionSetShaderLayoutInfoEXT -> Int)
-> Vector IndirectExecutionSetShaderLayoutInfoEXT -> Int
forall a b. (a -> b) -> a -> b
$ (Vector IndirectExecutionSetShaderLayoutInfoEXT
setLayoutInfos)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ ("isPreprocessed" ::: Bool) -> IO () -> IO ()
forall (f :: * -> *).
Applicative f =>
("isPreprocessed" ::: Bool) -> f () -> f ()
unless (Int -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
pSetLayoutInfosLength Int -> Int -> "isPreprocessed" ::: Bool
forall a. Eq a => a -> a -> "isPreprocessed" ::: Bool
== Int
pInitialShadersLength ("isPreprocessed" ::: Bool)
-> ("isPreprocessed" ::: Bool) -> "isPreprocessed" ::: Bool
|| Int
pSetLayoutInfosLength Int -> Int -> "isPreprocessed" ::: Bool
forall a. Eq a => a -> a -> "isPreprocessed" ::: Bool
== Int
0) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
      IOException -> IO ()
forall e a. Exception e => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"pSetLayoutInfos and pInitialShaders must have the same length" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectExecutionSetShaderInfoEXT
p Ptr IndirectExecutionSetShaderInfoEXT -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32)) ((Int -> Flags
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
pInitialShadersLength :: Word32))
    Ptr ShaderEXT
pPInitialShaders' <- ((Ptr ShaderEXT -> IO b) -> IO b) -> ContT b IO (Ptr ShaderEXT)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr ShaderEXT -> IO b) -> IO b) -> ContT b IO (Ptr ShaderEXT))
-> ((Ptr ShaderEXT -> IO b) -> IO b) -> ContT b IO (Ptr ShaderEXT)
forall a b. (a -> b) -> a -> b
$ forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @ShaderEXT ((Vector ShaderEXT -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector ShaderEXT
initialShaders)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
8)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ (Int -> ShaderEXT -> IO ()) -> Vector ShaderEXT -> IO ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i ShaderEXT
e -> Ptr ShaderEXT -> ShaderEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr ShaderEXT
pPInitialShaders' Ptr ShaderEXT -> Int -> Ptr ShaderEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
8 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr ShaderEXT) (ShaderEXT
e)) (Vector ShaderEXT
initialShaders)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr ShaderEXT) -> Ptr ShaderEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectExecutionSetShaderInfoEXT
p Ptr IndirectExecutionSetShaderInfoEXT -> Int -> Ptr (Ptr ShaderEXT)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr (Ptr ShaderEXT))) (Ptr ShaderEXT
pPInitialShaders')
    Ptr IndirectExecutionSetShaderLayoutInfoEXT
pSetLayoutInfos'' <- if Vector IndirectExecutionSetShaderLayoutInfoEXT
-> "isPreprocessed" ::: Bool
forall a. Vector a -> "isPreprocessed" ::: Bool
Data.Vector.null (Vector IndirectExecutionSetShaderLayoutInfoEXT
setLayoutInfos)
      then Ptr IndirectExecutionSetShaderLayoutInfoEXT
-> ContT b IO (Ptr IndirectExecutionSetShaderLayoutInfoEXT)
forall a. a -> ContT b IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Ptr IndirectExecutionSetShaderLayoutInfoEXT
forall a. Ptr a
nullPtr
      else do
        Ptr IndirectExecutionSetShaderLayoutInfoEXT
pPSetLayoutInfos <- ((Ptr IndirectExecutionSetShaderLayoutInfoEXT -> IO b) -> IO b)
-> ContT b IO (Ptr IndirectExecutionSetShaderLayoutInfoEXT)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr IndirectExecutionSetShaderLayoutInfoEXT -> IO b) -> IO b)
 -> ContT b IO (Ptr IndirectExecutionSetShaderLayoutInfoEXT))
-> ((Ptr IndirectExecutionSetShaderLayoutInfoEXT -> IO b) -> IO b)
-> ContT b IO (Ptr IndirectExecutionSetShaderLayoutInfoEXT)
forall a b. (a -> b) -> a -> b
$ forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @IndirectExecutionSetShaderLayoutInfoEXT (((Vector IndirectExecutionSetShaderLayoutInfoEXT -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector IndirectExecutionSetShaderLayoutInfoEXT
setLayoutInfos))) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
32)
        (Int -> IndirectExecutionSetShaderLayoutInfoEXT -> ContT b IO ())
-> Vector IndirectExecutionSetShaderLayoutInfoEXT -> ContT b IO ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i IndirectExecutionSetShaderLayoutInfoEXT
e -> ((() -> IO b) -> IO b) -> ContT b IO ()
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((() -> IO b) -> IO b) -> ContT b IO ())
-> ((() -> IO b) -> IO b) -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr IndirectExecutionSetShaderLayoutInfoEXT
-> IndirectExecutionSetShaderLayoutInfoEXT -> IO b -> IO b
forall b.
Ptr IndirectExecutionSetShaderLayoutInfoEXT
-> IndirectExecutionSetShaderLayoutInfoEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct (Ptr IndirectExecutionSetShaderLayoutInfoEXT
pPSetLayoutInfos Ptr IndirectExecutionSetShaderLayoutInfoEXT
-> Int -> Ptr IndirectExecutionSetShaderLayoutInfoEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
32 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr IndirectExecutionSetShaderLayoutInfoEXT) (IndirectExecutionSetShaderLayoutInfoEXT
e) (IO b -> IO b) -> ((() -> IO b) -> IO b) -> (() -> IO b) -> IO b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((() -> IO b) -> () -> IO b
forall a b. (a -> b) -> a -> b
$ ())) ((Vector IndirectExecutionSetShaderLayoutInfoEXT
setLayoutInfos))
        Ptr IndirectExecutionSetShaderLayoutInfoEXT
-> ContT b IO (Ptr IndirectExecutionSetShaderLayoutInfoEXT)
forall a. a -> ContT b IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Ptr IndirectExecutionSetShaderLayoutInfoEXT
 -> ContT b IO (Ptr IndirectExecutionSetShaderLayoutInfoEXT))
-> Ptr IndirectExecutionSetShaderLayoutInfoEXT
-> ContT b IO (Ptr IndirectExecutionSetShaderLayoutInfoEXT)
forall a b. (a -> b) -> a -> b
$ Ptr IndirectExecutionSetShaderLayoutInfoEXT
pPSetLayoutInfos
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr IndirectExecutionSetShaderLayoutInfoEXT)
-> Ptr IndirectExecutionSetShaderLayoutInfoEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectExecutionSetShaderInfoEXT
p Ptr IndirectExecutionSetShaderInfoEXT
-> Int -> Ptr (Ptr IndirectExecutionSetShaderLayoutInfoEXT)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr (Ptr IndirectExecutionSetShaderLayoutInfoEXT))) Ptr IndirectExecutionSetShaderLayoutInfoEXT
pSetLayoutInfos''
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectExecutionSetShaderInfoEXT
p Ptr IndirectExecutionSetShaderInfoEXT -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr Word32)) (Flags
maxShaderCount)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectExecutionSetShaderInfoEXT
p Ptr IndirectExecutionSetShaderInfoEXT -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
44 :: Ptr Word32)) ((Int -> Flags
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Vector PushConstantRange -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector PushConstantRange -> Int)
-> Vector PushConstantRange -> Int
forall a b. (a -> b) -> a -> b
$ (Vector PushConstantRange
pushConstantRanges)) :: Word32))
    Ptr PushConstantRange
pPPushConstantRanges' <- ((Ptr PushConstantRange -> IO b) -> IO b)
-> ContT b IO (Ptr PushConstantRange)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr PushConstantRange -> IO b) -> IO b)
 -> ContT b IO (Ptr PushConstantRange))
-> ((Ptr PushConstantRange -> IO b) -> IO b)
-> ContT b IO (Ptr PushConstantRange)
forall a b. (a -> b) -> a -> b
$ forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @PushConstantRange ((Vector PushConstantRange -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector PushConstantRange
pushConstantRanges)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
12)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ (Int -> PushConstantRange -> IO ())
-> Vector PushConstantRange -> IO ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i PushConstantRange
e -> Ptr PushConstantRange -> PushConstantRange -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr PushConstantRange
pPPushConstantRanges' Ptr PushConstantRange -> Int -> Ptr PushConstantRange
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
12 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr PushConstantRange) (PushConstantRange
e)) (Vector PushConstantRange
pushConstantRanges)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr PushConstantRange) -> Ptr PushConstantRange -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectExecutionSetShaderInfoEXT
p Ptr IndirectExecutionSetShaderInfoEXT
-> Int -> Ptr (Ptr PushConstantRange)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr (Ptr PushConstantRange))) (Ptr PushConstantRange
pPPushConstantRanges')
    IO b -> ContT b IO b
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO b -> ContT b IO b) -> IO b -> ContT b IO b
forall a b. (a -> b) -> a -> b
$ IO b
f
  cStructSize :: Int
cStructSize = Int
56
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b. Ptr IndirectExecutionSetShaderInfoEXT -> IO b -> IO b
pokeZeroCStruct Ptr IndirectExecutionSetShaderInfoEXT
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectExecutionSetShaderInfoEXT
p Ptr IndirectExecutionSetShaderInfoEXT -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_INDIRECT_EXECUTION_SET_SHADER_INFO_EXT)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectExecutionSetShaderInfoEXT
p Ptr IndirectExecutionSetShaderInfoEXT -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectExecutionSetShaderInfoEXT
p Ptr IndirectExecutionSetShaderInfoEXT -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr Word32)) (Flags
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct IndirectExecutionSetShaderInfoEXT where
  peekCStruct :: Ptr IndirectExecutionSetShaderInfoEXT
-> IO IndirectExecutionSetShaderInfoEXT
peekCStruct Ptr IndirectExecutionSetShaderInfoEXT
p = do
    Flags
shaderCount <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr IndirectExecutionSetShaderInfoEXT
p Ptr IndirectExecutionSetShaderInfoEXT -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32))
    Ptr ShaderEXT
pInitialShaders <- forall a. Storable a => Ptr a -> IO a
peek @(Ptr ShaderEXT) ((Ptr IndirectExecutionSetShaderInfoEXT
p Ptr IndirectExecutionSetShaderInfoEXT -> Int -> Ptr (Ptr ShaderEXT)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr (Ptr ShaderEXT)))
    Vector ShaderEXT
pInitialShaders' <- Int -> (Int -> IO ShaderEXT) -> IO (Vector ShaderEXT)
forall (m :: * -> *) a.
Monad m =>
Int -> (Int -> m a) -> m (Vector a)
generateM (Flags -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral Flags
shaderCount) (\Int
i -> forall a. Storable a => Ptr a -> IO a
peek @ShaderEXT ((Ptr ShaderEXT
pInitialShaders Ptr ShaderEXT -> Int -> Ptr ShaderEXT
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
8 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr ShaderEXT)))
    Ptr IndirectExecutionSetShaderLayoutInfoEXT
pSetLayoutInfos <- forall a. Storable a => Ptr a -> IO a
peek @(Ptr IndirectExecutionSetShaderLayoutInfoEXT) ((Ptr IndirectExecutionSetShaderInfoEXT
p Ptr IndirectExecutionSetShaderInfoEXT
-> Int -> Ptr (Ptr IndirectExecutionSetShaderLayoutInfoEXT)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr (Ptr IndirectExecutionSetShaderLayoutInfoEXT)))
    let pSetLayoutInfosLength :: Int
pSetLayoutInfosLength = if Ptr IndirectExecutionSetShaderLayoutInfoEXT
pSetLayoutInfos Ptr IndirectExecutionSetShaderLayoutInfoEXT
-> Ptr IndirectExecutionSetShaderLayoutInfoEXT
-> "isPreprocessed" ::: Bool
forall a. Eq a => a -> a -> "isPreprocessed" ::: Bool
== Ptr IndirectExecutionSetShaderLayoutInfoEXT
forall a. Ptr a
nullPtr then Int
0 else (Flags -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral Flags
shaderCount)
    Vector IndirectExecutionSetShaderLayoutInfoEXT
pSetLayoutInfos' <- Int
-> (Int -> IO IndirectExecutionSetShaderLayoutInfoEXT)
-> IO (Vector IndirectExecutionSetShaderLayoutInfoEXT)
forall (m :: * -> *) a.
Monad m =>
Int -> (Int -> m a) -> m (Vector a)
generateM Int
pSetLayoutInfosLength (\Int
i -> forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @IndirectExecutionSetShaderLayoutInfoEXT ((Ptr IndirectExecutionSetShaderLayoutInfoEXT
pSetLayoutInfos Ptr IndirectExecutionSetShaderLayoutInfoEXT
-> Int -> Ptr IndirectExecutionSetShaderLayoutInfoEXT
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
32 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr IndirectExecutionSetShaderLayoutInfoEXT)))
    Flags
maxShaderCount <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr IndirectExecutionSetShaderInfoEXT
p Ptr IndirectExecutionSetShaderInfoEXT -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr Word32))
    Flags
pushConstantRangeCount <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr IndirectExecutionSetShaderInfoEXT
p Ptr IndirectExecutionSetShaderInfoEXT -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
44 :: Ptr Word32))
    Ptr PushConstantRange
pPushConstantRanges <- forall a. Storable a => Ptr a -> IO a
peek @(Ptr PushConstantRange) ((Ptr IndirectExecutionSetShaderInfoEXT
p Ptr IndirectExecutionSetShaderInfoEXT
-> Int -> Ptr (Ptr PushConstantRange)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr (Ptr PushConstantRange)))
    Vector PushConstantRange
pPushConstantRanges' <- Int
-> (Int -> IO PushConstantRange) -> IO (Vector PushConstantRange)
forall (m :: * -> *) a.
Monad m =>
Int -> (Int -> m a) -> m (Vector a)
generateM (Flags -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral Flags
pushConstantRangeCount) (\Int
i -> forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @PushConstantRange ((Ptr PushConstantRange
pPushConstantRanges Ptr PushConstantRange -> Int -> Ptr PushConstantRange
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
12 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr PushConstantRange)))
    IndirectExecutionSetShaderInfoEXT
-> IO IndirectExecutionSetShaderInfoEXT
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (IndirectExecutionSetShaderInfoEXT
 -> IO IndirectExecutionSetShaderInfoEXT)
-> IndirectExecutionSetShaderInfoEXT
-> IO IndirectExecutionSetShaderInfoEXT
forall a b. (a -> b) -> a -> b
$ Vector ShaderEXT
-> Vector IndirectExecutionSetShaderLayoutInfoEXT
-> Flags
-> Vector PushConstantRange
-> IndirectExecutionSetShaderInfoEXT
IndirectExecutionSetShaderInfoEXT
             Vector ShaderEXT
pInitialShaders'
             Vector IndirectExecutionSetShaderLayoutInfoEXT
pSetLayoutInfos'
             Flags
maxShaderCount
             Vector PushConstantRange
pPushConstantRanges'

instance Zero IndirectExecutionSetShaderInfoEXT where
  zero :: IndirectExecutionSetShaderInfoEXT
zero = Vector ShaderEXT
-> Vector IndirectExecutionSetShaderLayoutInfoEXT
-> Flags
-> Vector PushConstantRange
-> IndirectExecutionSetShaderInfoEXT
IndirectExecutionSetShaderInfoEXT
           Vector ShaderEXT
forall a. Monoid a => a
mempty
           Vector IndirectExecutionSetShaderLayoutInfoEXT
forall a. Monoid a => a
mempty
           Flags
forall a. Zero a => a
zero
           Vector PushConstantRange
forall a. Monoid a => a
mempty


-- | VkIndirectExecutionSetCreateInfoEXT - Structure specifying parameters of
-- a newly created indirect execution set
--
-- == Valid Usage
--
-- -   #VUID-VkIndirectExecutionSetCreateInfoEXT-maxIndirectShaderObjectCount-11014#
--     If
--     'PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT'::@maxIndirectShaderObjectCount@
--     is zero or the
--     <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#features-shaderObject shaderObject>
--     feature is not enabled @type@ /must/ not be
--     'INDIRECT_EXECUTION_SET_INFO_TYPE_SHADER_OBJECTS_EXT'
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkIndirectExecutionSetCreateInfoEXT-sType-sType# @sType@
--     /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_INDIRECT_EXECUTION_SET_CREATE_INFO_EXT'
--
-- -   #VUID-VkIndirectExecutionSetCreateInfoEXT-type-parameter# @type@
--     /must/ be a valid 'IndirectExecutionSetInfoTypeEXT' value
--
-- -   #VUID-VkIndirectExecutionSetCreateInfoEXT-pPipelineInfo-parameter#
--     If @type@ is 'INDIRECT_EXECUTION_SET_INFO_TYPE_PIPELINES_EXT', the
--     @pPipelineInfo@ member of @info@ /must/ be a valid pointer to a
--     valid 'IndirectExecutionSetPipelineInfoEXT' structure
--
-- -   #VUID-VkIndirectExecutionSetCreateInfoEXT-pShaderInfo-parameter# If
--     @type@ is 'INDIRECT_EXECUTION_SET_INFO_TYPE_SHADER_OBJECTS_EXT', the
--     @pShaderInfo@ member of @info@ /must/ be a valid pointer to a valid
--     'IndirectExecutionSetShaderInfoEXT' structure
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_device_generated_commands VK_EXT_device_generated_commands>,
-- 'IndirectExecutionSetInfoEXT', 'IndirectExecutionSetInfoTypeEXT',
-- 'Vulkan.Core10.Enums.StructureType.StructureType',
-- 'createIndirectExecutionSetEXT'
data IndirectExecutionSetCreateInfoEXT = IndirectExecutionSetCreateInfoEXT
  { -- | @type@ is a 'IndirectExecutionSetInfoTypeEXT' describing the type of set
    -- being created and determining which field of the @info@ union will be
    -- used.
    IndirectExecutionSetCreateInfoEXT
-> IndirectExecutionSetInfoTypeEXT
type' :: IndirectExecutionSetInfoTypeEXT
  , -- | @info@ is a 'IndirectExecutionSetInfoEXT' union containing layout
    -- information for the set.
    IndirectExecutionSetCreateInfoEXT -> IndirectExecutionSetInfoEXT
info :: IndirectExecutionSetInfoEXT
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (IndirectExecutionSetCreateInfoEXT)
#endif
deriving instance Show IndirectExecutionSetCreateInfoEXT

instance ToCStruct IndirectExecutionSetCreateInfoEXT where
  withCStruct :: forall b.
IndirectExecutionSetCreateInfoEXT
-> (Ptr IndirectExecutionSetCreateInfoEXT -> IO b) -> IO b
withCStruct IndirectExecutionSetCreateInfoEXT
x Ptr IndirectExecutionSetCreateInfoEXT -> IO b
f = Int -> (Ptr IndirectExecutionSetCreateInfoEXT -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
32 ((Ptr IndirectExecutionSetCreateInfoEXT -> IO b) -> IO b)
-> (Ptr IndirectExecutionSetCreateInfoEXT -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr IndirectExecutionSetCreateInfoEXT
p -> Ptr IndirectExecutionSetCreateInfoEXT
-> IndirectExecutionSetCreateInfoEXT -> IO b -> IO b
forall b.
Ptr IndirectExecutionSetCreateInfoEXT
-> IndirectExecutionSetCreateInfoEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr IndirectExecutionSetCreateInfoEXT
p IndirectExecutionSetCreateInfoEXT
x (Ptr IndirectExecutionSetCreateInfoEXT -> IO b
f Ptr IndirectExecutionSetCreateInfoEXT
p)
  pokeCStruct :: forall b.
Ptr IndirectExecutionSetCreateInfoEXT
-> IndirectExecutionSetCreateInfoEXT -> IO b -> IO b
pokeCStruct Ptr IndirectExecutionSetCreateInfoEXT
p IndirectExecutionSetCreateInfoEXT{IndirectExecutionSetInfoTypeEXT
IndirectExecutionSetInfoEXT
$sel:type':IndirectExecutionSetCreateInfoEXT :: IndirectExecutionSetCreateInfoEXT
-> IndirectExecutionSetInfoTypeEXT
$sel:info:IndirectExecutionSetCreateInfoEXT :: IndirectExecutionSetCreateInfoEXT -> IndirectExecutionSetInfoEXT
type' :: IndirectExecutionSetInfoTypeEXT
info :: IndirectExecutionSetInfoEXT
..} IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectExecutionSetCreateInfoEXT
p Ptr IndirectExecutionSetCreateInfoEXT -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_INDIRECT_EXECUTION_SET_CREATE_INFO_EXT)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectExecutionSetCreateInfoEXT
p Ptr IndirectExecutionSetCreateInfoEXT -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr IndirectExecutionSetInfoTypeEXT
-> IndirectExecutionSetInfoTypeEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectExecutionSetCreateInfoEXT
p Ptr IndirectExecutionSetCreateInfoEXT
-> Int -> Ptr IndirectExecutionSetInfoTypeEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr IndirectExecutionSetInfoTypeEXT)) (IndirectExecutionSetInfoTypeEXT
type')
    ((() -> IO b) -> IO b) -> ContT b IO ()
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((() -> IO b) -> IO b) -> ContT b IO ())
-> ((() -> IO b) -> IO b) -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr IndirectExecutionSetInfoEXT
-> IndirectExecutionSetInfoEXT -> IO b -> IO b
forall b.
Ptr IndirectExecutionSetInfoEXT
-> IndirectExecutionSetInfoEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct ((Ptr IndirectExecutionSetCreateInfoEXT
p Ptr IndirectExecutionSetCreateInfoEXT
-> Int -> Ptr IndirectExecutionSetInfoEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr IndirectExecutionSetInfoEXT)) (IndirectExecutionSetInfoEXT
info) (IO b -> IO b) -> ((() -> IO b) -> IO b) -> (() -> IO b) -> IO b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((() -> IO b) -> () -> IO b
forall a b. (a -> b) -> a -> b
$ ())
    IO b -> ContT b IO b
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO b -> ContT b IO b) -> IO b -> ContT b IO b
forall a b. (a -> b) -> a -> b
$ IO b
f
  cStructSize :: Int
cStructSize = Int
32
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b. Ptr IndirectExecutionSetCreateInfoEXT -> IO b -> IO b
pokeZeroCStruct Ptr IndirectExecutionSetCreateInfoEXT
p IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectExecutionSetCreateInfoEXT
p Ptr IndirectExecutionSetCreateInfoEXT -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_INDIRECT_EXECUTION_SET_CREATE_INFO_EXT)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectExecutionSetCreateInfoEXT
p Ptr IndirectExecutionSetCreateInfoEXT -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr IndirectExecutionSetInfoTypeEXT
-> IndirectExecutionSetInfoTypeEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectExecutionSetCreateInfoEXT
p Ptr IndirectExecutionSetCreateInfoEXT
-> Int -> Ptr IndirectExecutionSetInfoTypeEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr IndirectExecutionSetInfoTypeEXT)) (IndirectExecutionSetInfoTypeEXT
forall a. Zero a => a
zero)
    ((() -> IO b) -> IO b) -> ContT b IO ()
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((() -> IO b) -> IO b) -> ContT b IO ())
-> ((() -> IO b) -> IO b) -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr IndirectExecutionSetInfoEXT
-> IndirectExecutionSetInfoEXT -> IO b -> IO b
forall b.
Ptr IndirectExecutionSetInfoEXT
-> IndirectExecutionSetInfoEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct ((Ptr IndirectExecutionSetCreateInfoEXT
p Ptr IndirectExecutionSetCreateInfoEXT
-> Int -> Ptr IndirectExecutionSetInfoEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr IndirectExecutionSetInfoEXT)) (IndirectExecutionSetInfoEXT
forall a. Zero a => a
zero) (IO b -> IO b) -> ((() -> IO b) -> IO b) -> (() -> IO b) -> IO b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((() -> IO b) -> () -> IO b
forall a b. (a -> b) -> a -> b
$ ())
    IO b -> ContT b IO b
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO b -> ContT b IO b) -> IO b -> ContT b IO b
forall a b. (a -> b) -> a -> b
$ IO b
f

instance Zero IndirectExecutionSetCreateInfoEXT where
  zero :: IndirectExecutionSetCreateInfoEXT
zero = IndirectExecutionSetInfoTypeEXT
-> IndirectExecutionSetInfoEXT -> IndirectExecutionSetCreateInfoEXT
IndirectExecutionSetCreateInfoEXT
           IndirectExecutionSetInfoTypeEXT
forall a. Zero a => a
zero
           IndirectExecutionSetInfoEXT
forall a. Zero a => a
zero


-- | 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
--
-- -   #VUID-VkGeneratedCommandsInfoEXT-preprocessAddress-11063# If
--     'getGeneratedCommandsMemoryRequirementsEXT' returns a non-zero size,
--     @preprocessAddress@ /must/ not be @NULL@
--
-- -   #VUID-VkGeneratedCommandsInfoEXT-preprocessAddress-11064#
--     'Vulkan.Core10.Handles.DeviceMemory' objects bound to the underlying
--     buffer for @preprocessAddress@ /must/ have been allocated using one
--     of the memory types allowed in the @memoryTypeBits@ member of the
--     'Vulkan.Core10.MemoryManagement.MemoryRequirements' structure
--     returned by 'getGeneratedCommandsMemoryRequirementsEXT'
--
-- -   #VUID-VkGeneratedCommandsInfoEXT-indirectCommandsLayout-11065# If
--     the @indirectCommandsLayout@ uses a token of
--     'INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_EXT', then the
--     @indirectExecutionSet@’s push constant layout /must/ contain the
--     @updateRange@ specified in 'IndirectCommandsPushConstantTokenEXT'
--
-- -   #VUID-VkGeneratedCommandsInfoEXT-indirectCommandsLayout-11066# If
--     the @indirectCommandsLayout@ uses a token of
--     'INDIRECT_COMMANDS_TOKEN_TYPE_SEQUENCE_INDEX_EXT', then the
--     @indirectExecutionSet@’s push constant layout /must/ contain the
--     @updateRange@ specified in 'IndirectCommandsPushConstantTokenEXT'
--
-- -   #VUID-VkGeneratedCommandsInfoEXT-maxSequenceCount-11067#
--     @maxSequenceCount@ /must/ be less or equal to
--     'PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT'::@maxIndirectSequenceCount@
--     and
--     'GeneratedCommandsMemoryRequirementsInfoEXT'::@maxSequencesCount@
--     that was used to determine the @preprocessSize@
--
-- -   #VUID-VkGeneratedCommandsInfoEXT-sequenceCountAddress-11068# If
--     @sequenceCountAddress@ is not @NULL@, the value contained in the
--     address /must/ be less or equal to
--     'PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT'::@maxIndirectSequenceCount@
--     and
--     'GeneratedCommandsMemoryRequirementsInfoEXT'::@maxSequencesCount@
--     that was used to determine the @preprocessSize@
--
-- -   #VUID-VkGeneratedCommandsInfoEXT-maxSequenceCount-10246#
--     @maxSequenceCount@ /must/ not be zero
--
-- -   #VUID-VkGeneratedCommandsInfoEXT-preprocessAddress-11069# The
--     underlying buffer for @preprocessAddress@ /must/ have the
--     'Vulkan.Extensions.VK_KHR_maintenance5.BUFFER_USAGE_2_PREPROCESS_BUFFER_BIT_EXT'
--     bit set in its usage flag
--
-- -   #VUID-VkGeneratedCommandsInfoEXT-preprocessAddress-11070# If the
--     underlying buffer for @preprocessAddress@ is non-sparse then it
--     /must/ be bound completely and contiguously to a single
--     'Vulkan.Core10.Handles.DeviceMemory' object
--
-- -   #VUID-VkGeneratedCommandsInfoEXT-indirectCommandsLayout-11144# If
--     the @indirectCommandsLayout@ contains a
--     'INDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT' token, then the
--     descriptor and push constant layout info provided either by
--     @pipelineLayout@ or through a
--     'Vulkan.Core10.PipelineLayout.PipelineLayoutCreateInfo' in @pNext@
--     of the 'IndirectCommandsLayoutCreateInfoEXT' used to create
--     @indirectCommandsLayout@ /must/ be
--     <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#descriptorsets-compatibility compatible>
--     with the descriptor and push constant layout info used by
--     @indirectExecutionSet@
--
-- -   #VUID-VkGeneratedCommandsInfoEXT-indirectCommandsLayout-11002# If
--     @indirectCommandsLayout@ was created with a token sequence that
--     contained the 'INDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT'
--     token, the shader stages used to create the initial shader state of
--     @indirectExecutionSet@ /must/ equal the
--     'IndirectCommandsExecutionSetTokenEXT'::@shaderStages@ used to
--     create @indirectCommandsLayout@
--
-- -   #VUID-VkGeneratedCommandsInfoEXT-preprocessSize-11071#
--     @preprocessSize@ /must/ be greater than or equal to the memory
--     requirement’s size returned by
--     'getGeneratedCommandsMemoryRequirementsEXT' using the matching
--     inputs (@indirectCommandsLayout@, …​) as within this structure
--
-- -   #VUID-VkGeneratedCommandsInfoEXT-sequenceCountAddress-11072# The
--     underlying buffer for @sequenceCountAddress@ /must/ have the
--     'Vulkan.Extensions.VK_KHR_maintenance5.BUFFER_USAGE_2_INDIRECT_BUFFER_BIT_KHR'
--     bit set in its usage flag
--
-- -   #VUID-VkGeneratedCommandsInfoEXT-sequenceCountAddress-11073# If
--     @sequenceCountAddress@ is not @NULL@, @sequenceCountAddress@ /must/
--     be aligned to @4@
--
-- -   #VUID-VkGeneratedCommandsInfoEXT-indirectAddress-11074#
--     @indirectAddress@ /must/ be aligned to @4@
--
-- -   #VUID-VkGeneratedCommandsInfoEXT-sequenceCountAddress-11075# If the
--     underlying buffer for @sequenceCountAddress@ is non-sparse then it
--     /must/ be bound completely and contiguously to a single
--     'Vulkan.Core10.Handles.DeviceMemory' object
--
-- -   #VUID-VkGeneratedCommandsInfoEXT-indirectAddress-11076#
--     @indirectAddress@ /must/ not be @NULL@
--
-- -   #VUID-VkGeneratedCommandsInfoEXT-indirectAddressSize-11077#
--     @indirectAddressSize@ /must/ be greater than zero
--
-- -   #VUID-VkGeneratedCommandsInfoEXT-maxDrawCount-11078# When not
--     ignored, @maxDrawCount@ × @maxSequenceCount@ /must/ be less than
--     2^24
--
-- -   #VUID-VkGeneratedCommandsInfoEXT-indirectCommandsLayout-11079# If
--     @indirectCommandsLayout@ was created using a
--     'INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_EXT' token and shader
--     objects are not bound then the bound graphics pipeline /must/ have
--     been created with
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE'
--     in @pDynamicStates@
--
-- -   #VUID-VkGeneratedCommandsInfoEXT-indirectCommandsLayout-11083# If
--     the token sequence of the passed @indirectCommandsLayout@ contains a
--     'INDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT' token, the
--     @indirectExecutionSet@ /must/ not be
--     'Vulkan.Core10.APIConstants.NULL_HANDLE'
--
-- -   #VUID-VkGeneratedCommandsInfoEXT-indirectCommandsLayout-10241# If
--     the token sequence of the passed @indirectCommandsLayout@ does not
--     contains a 'INDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT' token,
--     the @indirectExecutionSet@ /must/ be
--     'Vulkan.Core10.APIConstants.NULL_HANDLE'
--
-- -   #VUID-VkGeneratedCommandsInfoEXT-indirectExecutionSet-11080# If
--     @indirectExecutionSet@ is 'Vulkan.Core10.APIConstants.NULL_HANDLE',
--     a 'GeneratedCommandsPipelineInfoEXT' or
--     'GeneratedCommandsShaderInfoEXT' /must/ be included in the @pNext@
--     chain
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkGeneratedCommandsInfoEXT-sType-sType# @sType@ /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_EXT'
--
-- -   #VUID-VkGeneratedCommandsInfoEXT-shaderStages-parameter#
--     @shaderStages@ /must/ be a valid combination of
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits' values
--
-- -   #VUID-VkGeneratedCommandsInfoEXT-shaderStages-requiredbitmask#
--     @shaderStages@ /must/ not be @0@
--
-- -   #VUID-VkGeneratedCommandsInfoEXT-indirectExecutionSet-parameter# If
--     @indirectExecutionSet@ is not
--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @indirectExecutionSet@
--     /must/ be a valid
--     'Vulkan.Extensions.Handles.IndirectExecutionSetEXT' handle
--
-- -   #VUID-VkGeneratedCommandsInfoEXT-indirectCommandsLayout-parameter#
--     @indirectCommandsLayout@ /must/ be a valid
--     'Vulkan.Extensions.Handles.IndirectCommandsLayoutEXT' handle
--
-- -   #VUID-VkGeneratedCommandsInfoEXT-commonparent# Both of
--     @indirectCommandsLayout@, and @indirectExecutionSet@ that are valid
--     handles of non-ignored parameters /must/ have been created,
--     allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device'
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_device_generated_commands VK_EXT_device_generated_commands>,
-- 'Vulkan.Core10.FundamentalTypes.DeviceAddress',
-- 'Vulkan.Core10.FundamentalTypes.DeviceSize',
-- 'Vulkan.Extensions.Handles.IndirectCommandsLayoutEXT',
-- 'Vulkan.Extensions.Handles.IndirectExecutionSetEXT',
-- 'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlags',
-- 'Vulkan.Core10.Enums.StructureType.StructureType',
-- 'cmdExecuteGeneratedCommandsEXT', 'cmdPreprocessGeneratedCommandsEXT'
data GeneratedCommandsInfoEXT (es :: [Type]) = GeneratedCommandsInfoEXT
  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.
    forall (es :: [*]). GeneratedCommandsInfoEXT es -> Chain es
next :: Chain es
  , -- | @shaderStages@ is the mask of shader stages used by the commands.
    forall (es :: [*]). GeneratedCommandsInfoEXT es -> ShaderStageFlags
shaderStages :: ShaderStageFlags
  , -- | @indirectExecutionSet@ is the indirect execution set to be used for
    -- binding shaders.
    forall (es :: [*]).
GeneratedCommandsInfoEXT es -> IndirectExecutionSetEXT
indirectExecutionSet :: IndirectExecutionSetEXT
  , -- | @indirectCommandsLayout@ is the
    -- 'Vulkan.Extensions.Handles.IndirectCommandsLayoutEXT' that specifies the
    -- command sequence data.
    forall (es :: [*]).
GeneratedCommandsInfoEXT es -> IndirectCommandsLayoutEXT
indirectCommandsLayout :: IndirectCommandsLayoutEXT
  , -- | @indirectAddress@ is an address that holds the indirect buffer data.
    forall (es :: [*]). GeneratedCommandsInfoEXT es -> DeviceAddress
indirectAddress :: DeviceAddress
  , -- | @indirectAddressSize@ is the size in bytes of indirect buffer data
    -- starting at @indirectAddress@.
    forall (es :: [*]). GeneratedCommandsInfoEXT es -> DeviceAddress
indirectAddressSize :: DeviceSize
  , -- | @preprocessAddress@ specifies a physical address of the
    -- 'Vulkan.Core10.Handles.Buffer' used for preprocessing the input data for
    -- execution. If this structure is used with
    -- 'cmdExecuteGeneratedCommandsEXT' with its @isPreprocessed@ set to
    -- 'Vulkan.Core10.FundamentalTypes.TRUE', then the preprocessing step is
    -- skipped but data in this address /may/ still be modified. The contents
    -- and the layout of this address are opaque to applications and /must/ not
    -- be modified outside functions related to device-generated commands or
    -- copied to another buffer for reuse.
    forall (es :: [*]). GeneratedCommandsInfoEXT es -> DeviceAddress
preprocessAddress :: DeviceAddress
  , -- | @preprocessSize@ is the maximum byte size within @preprocessAddress@
    -- that is available for preprocessing.
    forall (es :: [*]). GeneratedCommandsInfoEXT es -> DeviceAddress
preprocessSize :: DeviceSize
  , -- | @maxSequenceCount@ is used to determine the number of sequences to
    -- execute.
    forall (es :: [*]). GeneratedCommandsInfoEXT es -> Flags
maxSequenceCount :: Word32
  , -- | @sequenceCountAddress@ specifies an optional physical address of a
    -- single @uint32_t@ value containing the requested number of sequences to
    -- execute.
    forall (es :: [*]). GeneratedCommandsInfoEXT es -> DeviceAddress
sequenceCountAddress :: DeviceAddress
  , -- | @maxDrawCount@ is the maximum number of indirect draws that can be
    -- executed by any COUNT-type multi-draw indirect tokens. The draw count in
    -- the indirect buffer is clamped to this value for these token types.
    forall (es :: [*]). GeneratedCommandsInfoEXT es -> Flags
maxDrawCount :: Word32
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (GeneratedCommandsInfoEXT (es :: [Type]))
#endif
deriving instance Show (Chain es) => Show (GeneratedCommandsInfoEXT es)

instance Extensible GeneratedCommandsInfoEXT where
  extensibleTypeName :: String
extensibleTypeName = String
"GeneratedCommandsInfoEXT"
  setNext :: forall (ds :: [*]) (es :: [*]).
GeneratedCommandsInfoEXT ds
-> Chain es -> GeneratedCommandsInfoEXT es
setNext GeneratedCommandsInfoEXT{Flags
DeviceAddress
ShaderStageFlags
IndirectExecutionSetEXT
IndirectCommandsLayoutEXT
Chain ds
$sel:next:GeneratedCommandsInfoEXT :: forall (es :: [*]). GeneratedCommandsInfoEXT es -> Chain es
$sel:shaderStages:GeneratedCommandsInfoEXT :: forall (es :: [*]). GeneratedCommandsInfoEXT es -> ShaderStageFlags
$sel:indirectExecutionSet:GeneratedCommandsInfoEXT :: forall (es :: [*]).
GeneratedCommandsInfoEXT es -> IndirectExecutionSetEXT
$sel:indirectCommandsLayout:GeneratedCommandsInfoEXT :: forall (es :: [*]).
GeneratedCommandsInfoEXT es -> IndirectCommandsLayoutEXT
$sel:indirectAddress:GeneratedCommandsInfoEXT :: forall (es :: [*]). GeneratedCommandsInfoEXT es -> DeviceAddress
$sel:indirectAddressSize:GeneratedCommandsInfoEXT :: forall (es :: [*]). GeneratedCommandsInfoEXT es -> DeviceAddress
$sel:preprocessAddress:GeneratedCommandsInfoEXT :: forall (es :: [*]). GeneratedCommandsInfoEXT es -> DeviceAddress
$sel:preprocessSize:GeneratedCommandsInfoEXT :: forall (es :: [*]). GeneratedCommandsInfoEXT es -> DeviceAddress
$sel:maxSequenceCount:GeneratedCommandsInfoEXT :: forall (es :: [*]). GeneratedCommandsInfoEXT es -> Flags
$sel:sequenceCountAddress:GeneratedCommandsInfoEXT :: forall (es :: [*]). GeneratedCommandsInfoEXT es -> DeviceAddress
$sel:maxDrawCount:GeneratedCommandsInfoEXT :: forall (es :: [*]). GeneratedCommandsInfoEXT es -> Flags
next :: Chain ds
shaderStages :: ShaderStageFlags
indirectExecutionSet :: IndirectExecutionSetEXT
indirectCommandsLayout :: IndirectCommandsLayoutEXT
indirectAddress :: DeviceAddress
indirectAddressSize :: DeviceAddress
preprocessAddress :: DeviceAddress
preprocessSize :: DeviceAddress
maxSequenceCount :: Flags
sequenceCountAddress :: DeviceAddress
maxDrawCount :: Flags
..} Chain es
next' = GeneratedCommandsInfoEXT{$sel:next:GeneratedCommandsInfoEXT :: Chain es
next = Chain es
next', Flags
DeviceAddress
ShaderStageFlags
IndirectExecutionSetEXT
IndirectCommandsLayoutEXT
$sel:shaderStages:GeneratedCommandsInfoEXT :: ShaderStageFlags
$sel:indirectExecutionSet:GeneratedCommandsInfoEXT :: IndirectExecutionSetEXT
$sel:indirectCommandsLayout:GeneratedCommandsInfoEXT :: IndirectCommandsLayoutEXT
$sel:indirectAddress:GeneratedCommandsInfoEXT :: DeviceAddress
$sel:indirectAddressSize:GeneratedCommandsInfoEXT :: DeviceAddress
$sel:preprocessAddress:GeneratedCommandsInfoEXT :: DeviceAddress
$sel:preprocessSize:GeneratedCommandsInfoEXT :: DeviceAddress
$sel:maxSequenceCount:GeneratedCommandsInfoEXT :: Flags
$sel:sequenceCountAddress:GeneratedCommandsInfoEXT :: DeviceAddress
$sel:maxDrawCount:GeneratedCommandsInfoEXT :: Flags
shaderStages :: ShaderStageFlags
indirectExecutionSet :: IndirectExecutionSetEXT
indirectCommandsLayout :: IndirectCommandsLayoutEXT
indirectAddress :: DeviceAddress
indirectAddressSize :: DeviceAddress
preprocessAddress :: DeviceAddress
preprocessSize :: DeviceAddress
maxSequenceCount :: Flags
sequenceCountAddress :: DeviceAddress
maxDrawCount :: Flags
..}
  getNext :: forall (es :: [*]). GeneratedCommandsInfoEXT es -> Chain es
getNext GeneratedCommandsInfoEXT{Flags
DeviceAddress
ShaderStageFlags
IndirectExecutionSetEXT
IndirectCommandsLayoutEXT
Chain es
$sel:next:GeneratedCommandsInfoEXT :: forall (es :: [*]). GeneratedCommandsInfoEXT es -> Chain es
$sel:shaderStages:GeneratedCommandsInfoEXT :: forall (es :: [*]). GeneratedCommandsInfoEXT es -> ShaderStageFlags
$sel:indirectExecutionSet:GeneratedCommandsInfoEXT :: forall (es :: [*]).
GeneratedCommandsInfoEXT es -> IndirectExecutionSetEXT
$sel:indirectCommandsLayout:GeneratedCommandsInfoEXT :: forall (es :: [*]).
GeneratedCommandsInfoEXT es -> IndirectCommandsLayoutEXT
$sel:indirectAddress:GeneratedCommandsInfoEXT :: forall (es :: [*]). GeneratedCommandsInfoEXT es -> DeviceAddress
$sel:indirectAddressSize:GeneratedCommandsInfoEXT :: forall (es :: [*]). GeneratedCommandsInfoEXT es -> DeviceAddress
$sel:preprocessAddress:GeneratedCommandsInfoEXT :: forall (es :: [*]). GeneratedCommandsInfoEXT es -> DeviceAddress
$sel:preprocessSize:GeneratedCommandsInfoEXT :: forall (es :: [*]). GeneratedCommandsInfoEXT es -> DeviceAddress
$sel:maxSequenceCount:GeneratedCommandsInfoEXT :: forall (es :: [*]). GeneratedCommandsInfoEXT es -> Flags
$sel:sequenceCountAddress:GeneratedCommandsInfoEXT :: forall (es :: [*]). GeneratedCommandsInfoEXT es -> DeviceAddress
$sel:maxDrawCount:GeneratedCommandsInfoEXT :: forall (es :: [*]). GeneratedCommandsInfoEXT es -> Flags
next :: Chain es
shaderStages :: ShaderStageFlags
indirectExecutionSet :: IndirectExecutionSetEXT
indirectCommandsLayout :: IndirectCommandsLayoutEXT
indirectAddress :: DeviceAddress
indirectAddressSize :: DeviceAddress
preprocessAddress :: DeviceAddress
preprocessSize :: DeviceAddress
maxSequenceCount :: Flags
sequenceCountAddress :: DeviceAddress
maxDrawCount :: Flags
..} = Chain es
next
  extends :: forall e b proxy. Typeable e => proxy e -> (Extends GeneratedCommandsInfoEXT e => b) -> Maybe b
  extends :: forall e b (proxy :: * -> *).
Typeable e =>
proxy e -> (Extends GeneratedCommandsInfoEXT e => b) -> Maybe b
extends proxy e
_ Extends GeneratedCommandsInfoEXT e => b
f
    | Just e :~: GeneratedCommandsShaderInfoEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @GeneratedCommandsShaderInfoEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends GeneratedCommandsInfoEXT e => b
f
    | Just e :~: GeneratedCommandsPipelineInfoEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @GeneratedCommandsPipelineInfoEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends GeneratedCommandsInfoEXT e => b
f
    | "isPreprocessed" ::: Bool
otherwise = Maybe b
forall a. Maybe a
Nothing

instance ( Extendss GeneratedCommandsInfoEXT es
         , PokeChain es ) => ToCStruct (GeneratedCommandsInfoEXT es) where
  withCStruct :: forall b.
GeneratedCommandsInfoEXT es
-> (Ptr (GeneratedCommandsInfoEXT es) -> IO b) -> IO b
withCStruct GeneratedCommandsInfoEXT es
x Ptr (GeneratedCommandsInfoEXT es) -> IO b
f = Int -> (Ptr (GeneratedCommandsInfoEXT es) -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
96 ((Ptr (GeneratedCommandsInfoEXT es) -> IO b) -> IO b)
-> (Ptr (GeneratedCommandsInfoEXT es) -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr (GeneratedCommandsInfoEXT es)
p -> Ptr (GeneratedCommandsInfoEXT es)
-> GeneratedCommandsInfoEXT es -> IO b -> IO b
forall b.
Ptr (GeneratedCommandsInfoEXT es)
-> GeneratedCommandsInfoEXT es -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr (GeneratedCommandsInfoEXT es)
p GeneratedCommandsInfoEXT es
x (Ptr (GeneratedCommandsInfoEXT es) -> IO b
f Ptr (GeneratedCommandsInfoEXT es)
p)
  pokeCStruct :: forall b.
Ptr (GeneratedCommandsInfoEXT es)
-> GeneratedCommandsInfoEXT es -> IO b -> IO b
pokeCStruct Ptr (GeneratedCommandsInfoEXT es)
p GeneratedCommandsInfoEXT{Flags
DeviceAddress
ShaderStageFlags
IndirectExecutionSetEXT
IndirectCommandsLayoutEXT
Chain es
$sel:next:GeneratedCommandsInfoEXT :: forall (es :: [*]). GeneratedCommandsInfoEXT es -> Chain es
$sel:shaderStages:GeneratedCommandsInfoEXT :: forall (es :: [*]). GeneratedCommandsInfoEXT es -> ShaderStageFlags
$sel:indirectExecutionSet:GeneratedCommandsInfoEXT :: forall (es :: [*]).
GeneratedCommandsInfoEXT es -> IndirectExecutionSetEXT
$sel:indirectCommandsLayout:GeneratedCommandsInfoEXT :: forall (es :: [*]).
GeneratedCommandsInfoEXT es -> IndirectCommandsLayoutEXT
$sel:indirectAddress:GeneratedCommandsInfoEXT :: forall (es :: [*]). GeneratedCommandsInfoEXT es -> DeviceAddress
$sel:indirectAddressSize:GeneratedCommandsInfoEXT :: forall (es :: [*]). GeneratedCommandsInfoEXT es -> DeviceAddress
$sel:preprocessAddress:GeneratedCommandsInfoEXT :: forall (es :: [*]). GeneratedCommandsInfoEXT es -> DeviceAddress
$sel:preprocessSize:GeneratedCommandsInfoEXT :: forall (es :: [*]). GeneratedCommandsInfoEXT es -> DeviceAddress
$sel:maxSequenceCount:GeneratedCommandsInfoEXT :: forall (es :: [*]). GeneratedCommandsInfoEXT es -> Flags
$sel:sequenceCountAddress:GeneratedCommandsInfoEXT :: forall (es :: [*]). GeneratedCommandsInfoEXT es -> DeviceAddress
$sel:maxDrawCount:GeneratedCommandsInfoEXT :: forall (es :: [*]). GeneratedCommandsInfoEXT es -> Flags
next :: Chain es
shaderStages :: ShaderStageFlags
indirectExecutionSet :: IndirectExecutionSetEXT
indirectCommandsLayout :: IndirectCommandsLayoutEXT
indirectAddress :: DeviceAddress
indirectAddressSize :: DeviceAddress
preprocessAddress :: DeviceAddress
preprocessSize :: DeviceAddress
maxSequenceCount :: Flags
sequenceCountAddress :: DeviceAddress
maxDrawCount :: Flags
..} IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (GeneratedCommandsInfoEXT es)
p Ptr (GeneratedCommandsInfoEXT es) -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_EXT)
    Ptr ()
pNext'' <- (Ptr (Chain es) -> Ptr ())
-> ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ())
forall a b. (a -> b) -> ContT b IO a -> ContT b IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Ptr (Chain es) -> Ptr ()
forall a b. Ptr a -> Ptr b
castPtr (ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ()))
-> (((Ptr (Chain es) -> IO b) -> IO b)
    -> ContT b IO (Ptr (Chain es)))
-> ((Ptr (Chain es) -> IO b) -> IO b)
-> ContT b IO (Ptr ())
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr (Chain es))
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr ()))
-> ((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr ())
forall a b. (a -> b) -> a -> b
$ Chain es -> (Ptr (Chain es) -> IO b) -> IO b
forall (es :: [*]) a.
PokeChain es =>
Chain es -> (Ptr (Chain es) -> IO a) -> IO a
forall a. Chain es -> (Ptr (Chain es) -> IO a) -> IO a
withChain (Chain es
next)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (GeneratedCommandsInfoEXT es)
p Ptr (GeneratedCommandsInfoEXT es) -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) Ptr ()
pNext''
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr ShaderStageFlags -> ShaderStageFlags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (GeneratedCommandsInfoEXT es)
p Ptr (GeneratedCommandsInfoEXT es) -> Int -> Ptr ShaderStageFlags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr ShaderStageFlags)) (ShaderStageFlags
shaderStages)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr IndirectExecutionSetEXT -> IndirectExecutionSetEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (GeneratedCommandsInfoEXT es)
p Ptr (GeneratedCommandsInfoEXT es)
-> Int -> Ptr IndirectExecutionSetEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr IndirectExecutionSetEXT)) (IndirectExecutionSetEXT
indirectExecutionSet)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr IndirectCommandsLayoutEXT -> IndirectCommandsLayoutEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (GeneratedCommandsInfoEXT es)
p Ptr (GeneratedCommandsInfoEXT es)
-> Int -> Ptr IndirectCommandsLayoutEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr IndirectCommandsLayoutEXT)) (IndirectCommandsLayoutEXT
indirectCommandsLayout)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr DeviceAddress -> DeviceAddress -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (GeneratedCommandsInfoEXT es)
p Ptr (GeneratedCommandsInfoEXT es) -> Int -> Ptr DeviceAddress
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr DeviceAddress)) (DeviceAddress
indirectAddress)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr DeviceAddress -> DeviceAddress -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (GeneratedCommandsInfoEXT es)
p Ptr (GeneratedCommandsInfoEXT es) -> Int -> Ptr DeviceAddress
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr DeviceSize)) (DeviceAddress
indirectAddressSize)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr DeviceAddress -> DeviceAddress -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (GeneratedCommandsInfoEXT es)
p Ptr (GeneratedCommandsInfoEXT es) -> Int -> Ptr DeviceAddress
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
56 :: Ptr DeviceAddress)) (DeviceAddress
preprocessAddress)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr DeviceAddress -> DeviceAddress -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (GeneratedCommandsInfoEXT es)
p Ptr (GeneratedCommandsInfoEXT es) -> Int -> Ptr DeviceAddress
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
64 :: Ptr DeviceSize)) (DeviceAddress
preprocessSize)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (GeneratedCommandsInfoEXT es)
p Ptr (GeneratedCommandsInfoEXT es) -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
72 :: Ptr Word32)) (Flags
maxSequenceCount)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr DeviceAddress -> DeviceAddress -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (GeneratedCommandsInfoEXT es)
p Ptr (GeneratedCommandsInfoEXT es) -> Int -> Ptr DeviceAddress
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
80 :: Ptr DeviceAddress)) (DeviceAddress
sequenceCountAddress)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (GeneratedCommandsInfoEXT es)
p Ptr (GeneratedCommandsInfoEXT es) -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
88 :: Ptr Word32)) (Flags
maxDrawCount)
    IO b -> ContT b IO b
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO b -> ContT b IO b) -> IO b -> ContT b IO b
forall a b. (a -> b) -> a -> b
$ IO b
f
  cStructSize :: Int
cStructSize = Int
96
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b. Ptr (GeneratedCommandsInfoEXT es) -> IO b -> IO b
pokeZeroCStruct Ptr (GeneratedCommandsInfoEXT es)
p IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (GeneratedCommandsInfoEXT es)
p Ptr (GeneratedCommandsInfoEXT es) -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_EXT)
    Ptr ()
pNext' <- (Ptr (Chain es) -> Ptr ())
-> ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ())
forall a b. (a -> b) -> ContT b IO a -> ContT b IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Ptr (Chain es) -> Ptr ()
forall a b. Ptr a -> Ptr b
castPtr (ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ()))
-> (((Ptr (Chain es) -> IO b) -> IO b)
    -> ContT b IO (Ptr (Chain es)))
-> ((Ptr (Chain es) -> IO b) -> IO b)
-> ContT b IO (Ptr ())
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr (Chain es))
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr ()))
-> ((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr ())
forall a b. (a -> b) -> a -> b
$ forall (es :: [*]) a.
PokeChain es =>
(Ptr (Chain es) -> IO a) -> IO a
withZeroChain @es
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (GeneratedCommandsInfoEXT es)
p Ptr (GeneratedCommandsInfoEXT es) -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) Ptr ()
pNext'
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr ShaderStageFlags -> ShaderStageFlags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (GeneratedCommandsInfoEXT es)
p Ptr (GeneratedCommandsInfoEXT es) -> Int -> Ptr ShaderStageFlags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr ShaderStageFlags)) (ShaderStageFlags
forall a. Zero a => a
zero)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr IndirectCommandsLayoutEXT -> IndirectCommandsLayoutEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (GeneratedCommandsInfoEXT es)
p Ptr (GeneratedCommandsInfoEXT es)
-> Int -> Ptr IndirectCommandsLayoutEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr IndirectCommandsLayoutEXT)) (IndirectCommandsLayoutEXT
forall a. Zero a => a
zero)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr DeviceAddress -> DeviceAddress -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (GeneratedCommandsInfoEXT es)
p Ptr (GeneratedCommandsInfoEXT es) -> Int -> Ptr DeviceAddress
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr DeviceAddress)) (DeviceAddress
forall a. Zero a => a
zero)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr DeviceAddress -> DeviceAddress -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (GeneratedCommandsInfoEXT es)
p Ptr (GeneratedCommandsInfoEXT es) -> Int -> Ptr DeviceAddress
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr DeviceSize)) (DeviceAddress
forall a. Zero a => a
zero)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr DeviceAddress -> DeviceAddress -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (GeneratedCommandsInfoEXT es)
p Ptr (GeneratedCommandsInfoEXT es) -> Int -> Ptr DeviceAddress
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
64 :: Ptr DeviceSize)) (DeviceAddress
forall a. Zero a => a
zero)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (GeneratedCommandsInfoEXT es)
p Ptr (GeneratedCommandsInfoEXT es) -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
72 :: Ptr Word32)) (Flags
forall a. Zero a => a
zero)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (GeneratedCommandsInfoEXT es)
p Ptr (GeneratedCommandsInfoEXT es) -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
88 :: Ptr Word32)) (Flags
forall a. Zero a => a
zero)
    IO b -> ContT b IO b
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO b -> ContT b IO b) -> IO b -> ContT b IO b
forall a b. (a -> b) -> a -> b
$ IO b
f

instance ( Extendss GeneratedCommandsInfoEXT es
         , PeekChain es ) => FromCStruct (GeneratedCommandsInfoEXT es) where
  peekCStruct :: Ptr (GeneratedCommandsInfoEXT es)
-> IO (GeneratedCommandsInfoEXT es)
peekCStruct Ptr (GeneratedCommandsInfoEXT es)
p = do
    Ptr ()
pNext <- forall a. Storable a => Ptr a -> IO a
peek @(Ptr ()) ((Ptr (GeneratedCommandsInfoEXT es)
p Ptr (GeneratedCommandsInfoEXT es) -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ())))
    Chain es
next <- Ptr (Chain es) -> IO (Chain es)
forall (es :: [*]). PeekChain es => Ptr (Chain es) -> IO (Chain es)
peekChain (Ptr () -> Ptr (Chain es)
forall a b. Ptr a -> Ptr b
castPtr Ptr ()
pNext)
    ShaderStageFlags
shaderStages <- forall a. Storable a => Ptr a -> IO a
peek @ShaderStageFlags ((Ptr (GeneratedCommandsInfoEXT es)
p Ptr (GeneratedCommandsInfoEXT es) -> Int -> Ptr ShaderStageFlags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr ShaderStageFlags))
    IndirectExecutionSetEXT
indirectExecutionSet <- forall a. Storable a => Ptr a -> IO a
peek @IndirectExecutionSetEXT ((Ptr (GeneratedCommandsInfoEXT es)
p Ptr (GeneratedCommandsInfoEXT es)
-> Int -> Ptr IndirectExecutionSetEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr IndirectExecutionSetEXT))
    IndirectCommandsLayoutEXT
indirectCommandsLayout <- forall a. Storable a => Ptr a -> IO a
peek @IndirectCommandsLayoutEXT ((Ptr (GeneratedCommandsInfoEXT es)
p Ptr (GeneratedCommandsInfoEXT es)
-> Int -> Ptr IndirectCommandsLayoutEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr IndirectCommandsLayoutEXT))
    DeviceAddress
indirectAddress <- forall a. Storable a => Ptr a -> IO a
peek @DeviceAddress ((Ptr (GeneratedCommandsInfoEXT es)
p Ptr (GeneratedCommandsInfoEXT es) -> Int -> Ptr DeviceAddress
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr DeviceAddress))
    DeviceAddress
indirectAddressSize <- forall a. Storable a => Ptr a -> IO a
peek @DeviceSize ((Ptr (GeneratedCommandsInfoEXT es)
p Ptr (GeneratedCommandsInfoEXT es) -> Int -> Ptr DeviceAddress
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr DeviceSize))
    DeviceAddress
preprocessAddress <- forall a. Storable a => Ptr a -> IO a
peek @DeviceAddress ((Ptr (GeneratedCommandsInfoEXT es)
p Ptr (GeneratedCommandsInfoEXT es) -> Int -> Ptr DeviceAddress
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
56 :: Ptr DeviceAddress))
    DeviceAddress
preprocessSize <- forall a. Storable a => Ptr a -> IO a
peek @DeviceSize ((Ptr (GeneratedCommandsInfoEXT es)
p Ptr (GeneratedCommandsInfoEXT es) -> Int -> Ptr DeviceAddress
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
64 :: Ptr DeviceSize))
    Flags
maxSequenceCount <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr (GeneratedCommandsInfoEXT es)
p Ptr (GeneratedCommandsInfoEXT es) -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
72 :: Ptr Word32))
    DeviceAddress
sequenceCountAddress <- forall a. Storable a => Ptr a -> IO a
peek @DeviceAddress ((Ptr (GeneratedCommandsInfoEXT es)
p Ptr (GeneratedCommandsInfoEXT es) -> Int -> Ptr DeviceAddress
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
80 :: Ptr DeviceAddress))
    Flags
maxDrawCount <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr (GeneratedCommandsInfoEXT es)
p Ptr (GeneratedCommandsInfoEXT es) -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
88 :: Ptr Word32))
    GeneratedCommandsInfoEXT es -> IO (GeneratedCommandsInfoEXT es)
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (GeneratedCommandsInfoEXT es -> IO (GeneratedCommandsInfoEXT es))
-> GeneratedCommandsInfoEXT es -> IO (GeneratedCommandsInfoEXT es)
forall a b. (a -> b) -> a -> b
$ Chain es
-> ShaderStageFlags
-> IndirectExecutionSetEXT
-> IndirectCommandsLayoutEXT
-> DeviceAddress
-> DeviceAddress
-> DeviceAddress
-> DeviceAddress
-> Flags
-> DeviceAddress
-> Flags
-> GeneratedCommandsInfoEXT es
forall (es :: [*]).
Chain es
-> ShaderStageFlags
-> IndirectExecutionSetEXT
-> IndirectCommandsLayoutEXT
-> DeviceAddress
-> DeviceAddress
-> DeviceAddress
-> DeviceAddress
-> Flags
-> DeviceAddress
-> Flags
-> GeneratedCommandsInfoEXT es
GeneratedCommandsInfoEXT
             Chain es
next
             ShaderStageFlags
shaderStages
             IndirectExecutionSetEXT
indirectExecutionSet
             IndirectCommandsLayoutEXT
indirectCommandsLayout
             DeviceAddress
indirectAddress
             DeviceAddress
indirectAddressSize
             DeviceAddress
preprocessAddress
             DeviceAddress
preprocessSize
             Flags
maxSequenceCount
             DeviceAddress
sequenceCountAddress
             Flags
maxDrawCount

instance es ~ '[] => Zero (GeneratedCommandsInfoEXT es) where
  zero :: GeneratedCommandsInfoEXT es
zero = Chain es
-> ShaderStageFlags
-> IndirectExecutionSetEXT
-> IndirectCommandsLayoutEXT
-> DeviceAddress
-> DeviceAddress
-> DeviceAddress
-> DeviceAddress
-> Flags
-> DeviceAddress
-> Flags
-> GeneratedCommandsInfoEXT es
forall (es :: [*]).
Chain es
-> ShaderStageFlags
-> IndirectExecutionSetEXT
-> IndirectCommandsLayoutEXT
-> DeviceAddress
-> DeviceAddress
-> DeviceAddress
-> DeviceAddress
-> Flags
-> DeviceAddress
-> Flags
-> GeneratedCommandsInfoEXT es
GeneratedCommandsInfoEXT
           ()
           ShaderStageFlags
forall a. Zero a => a
zero
           IndirectExecutionSetEXT
forall a. Zero a => a
zero
           IndirectCommandsLayoutEXT
forall a. Zero a => a
zero
           DeviceAddress
forall a. Zero a => a
zero
           DeviceAddress
forall a. Zero a => a
zero
           DeviceAddress
forall a. Zero a => a
zero
           DeviceAddress
forall a. Zero a => a
zero
           Flags
forall a. Zero a => a
zero
           DeviceAddress
forall a. Zero a => a
zero
           Flags
forall a. Zero a => a
zero


-- | VkWriteIndirectExecutionSetPipelineEXT - Struct specifying pipeline
-- update information for an indirect execution set
--
-- == Valid Usage
--
-- -   #VUID-VkWriteIndirectExecutionSetPipelineEXT-index-11026# @index@
--     /must/ be less than the value of
--     'IndirectExecutionSetPipelineInfoEXT'::@maxPipelineCount@ used to
--     create the set
--
-- -   #VUID-VkWriteIndirectExecutionSetPipelineEXT-pipeline-11027#
--     @pipeline@ /must/ have been created with
--     'Vulkan.Extensions.VK_KHR_maintenance5.PIPELINE_CREATE_2_INDIRECT_BINDABLE_BIT_EXT'
--
-- -   #VUID-VkWriteIndirectExecutionSetPipelineEXT-index-11029# @index@
--     /must/ not be referenced by submitted command buffers
--
-- -   #VUID-VkWriteIndirectExecutionSetPipelineEXT-pipeline-11030# The
--     shader stages contained in @pipeline@ /must/ be supported by
--     <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#limits-supportedIndirectCommandsShaderStagesPipelineBinding ::supportedIndirectCommandsShaderStagesPipelineBinding>
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkWriteIndirectExecutionSetPipelineEXT-sType-sType# @sType@
--     /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_WRITE_INDIRECT_EXECUTION_SET_PIPELINE_EXT'
--
-- -   #VUID-VkWriteIndirectExecutionSetPipelineEXT-pipeline-parameter#
--     @pipeline@ /must/ be a valid 'Vulkan.Core10.Handles.Pipeline' handle
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_device_generated_commands VK_EXT_device_generated_commands>,
-- 'Vulkan.Core10.Handles.Pipeline',
-- 'Vulkan.Core10.Enums.StructureType.StructureType',
-- 'updateIndirectExecutionSetPipelineEXT'
data WriteIndirectExecutionSetPipelineEXT = WriteIndirectExecutionSetPipelineEXT
  { -- | @index@ is the element of the set to update
    WriteIndirectExecutionSetPipelineEXT -> Flags
index :: Word32
  , -- | @pipeline@ is the pipeline to store in the indirect execution set
    WriteIndirectExecutionSetPipelineEXT -> Pipeline
pipeline :: Pipeline
  }
  deriving (Typeable, WriteIndirectExecutionSetPipelineEXT
-> WriteIndirectExecutionSetPipelineEXT
-> "isPreprocessed" ::: Bool
(WriteIndirectExecutionSetPipelineEXT
 -> WriteIndirectExecutionSetPipelineEXT
 -> "isPreprocessed" ::: Bool)
-> (WriteIndirectExecutionSetPipelineEXT
    -> WriteIndirectExecutionSetPipelineEXT
    -> "isPreprocessed" ::: Bool)
-> Eq WriteIndirectExecutionSetPipelineEXT
forall a.
(a -> a -> "isPreprocessed" ::: Bool)
-> (a -> a -> "isPreprocessed" ::: Bool) -> Eq a
$c== :: WriteIndirectExecutionSetPipelineEXT
-> WriteIndirectExecutionSetPipelineEXT
-> "isPreprocessed" ::: Bool
== :: WriteIndirectExecutionSetPipelineEXT
-> WriteIndirectExecutionSetPipelineEXT
-> "isPreprocessed" ::: Bool
$c/= :: WriteIndirectExecutionSetPipelineEXT
-> WriteIndirectExecutionSetPipelineEXT
-> "isPreprocessed" ::: Bool
/= :: WriteIndirectExecutionSetPipelineEXT
-> WriteIndirectExecutionSetPipelineEXT
-> "isPreprocessed" ::: Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (WriteIndirectExecutionSetPipelineEXT)
#endif
deriving instance Show WriteIndirectExecutionSetPipelineEXT

instance ToCStruct WriteIndirectExecutionSetPipelineEXT where
  withCStruct :: forall b.
WriteIndirectExecutionSetPipelineEXT
-> (Ptr WriteIndirectExecutionSetPipelineEXT -> IO b) -> IO b
withCStruct WriteIndirectExecutionSetPipelineEXT
x Ptr WriteIndirectExecutionSetPipelineEXT -> IO b
f = Int -> (Ptr WriteIndirectExecutionSetPipelineEXT -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
32 ((Ptr WriteIndirectExecutionSetPipelineEXT -> IO b) -> IO b)
-> (Ptr WriteIndirectExecutionSetPipelineEXT -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr WriteIndirectExecutionSetPipelineEXT
p -> Ptr WriteIndirectExecutionSetPipelineEXT
-> WriteIndirectExecutionSetPipelineEXT -> IO b -> IO b
forall b.
Ptr WriteIndirectExecutionSetPipelineEXT
-> WriteIndirectExecutionSetPipelineEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr WriteIndirectExecutionSetPipelineEXT
p WriteIndirectExecutionSetPipelineEXT
x (Ptr WriteIndirectExecutionSetPipelineEXT -> IO b
f Ptr WriteIndirectExecutionSetPipelineEXT
p)
  pokeCStruct :: forall b.
Ptr WriteIndirectExecutionSetPipelineEXT
-> WriteIndirectExecutionSetPipelineEXT -> IO b -> IO b
pokeCStruct Ptr WriteIndirectExecutionSetPipelineEXT
p WriteIndirectExecutionSetPipelineEXT{Flags
Pipeline
$sel:index:WriteIndirectExecutionSetPipelineEXT :: WriteIndirectExecutionSetPipelineEXT -> Flags
$sel:pipeline:WriteIndirectExecutionSetPipelineEXT :: WriteIndirectExecutionSetPipelineEXT -> Pipeline
index :: Flags
pipeline :: Pipeline
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr WriteIndirectExecutionSetPipelineEXT
p Ptr WriteIndirectExecutionSetPipelineEXT
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_WRITE_INDIRECT_EXECUTION_SET_PIPELINE_EXT)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr WriteIndirectExecutionSetPipelineEXT
p Ptr WriteIndirectExecutionSetPipelineEXT -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr WriteIndirectExecutionSetPipelineEXT
p Ptr WriteIndirectExecutionSetPipelineEXT -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32)) (Flags
index)
    Ptr Pipeline -> Pipeline -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr WriteIndirectExecutionSetPipelineEXT
p Ptr WriteIndirectExecutionSetPipelineEXT -> Int -> Ptr Pipeline
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Pipeline)) (Pipeline
pipeline)
    IO b
f
  cStructSize :: Int
cStructSize = Int
32
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b. Ptr WriteIndirectExecutionSetPipelineEXT -> IO b -> IO b
pokeZeroCStruct Ptr WriteIndirectExecutionSetPipelineEXT
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr WriteIndirectExecutionSetPipelineEXT
p Ptr WriteIndirectExecutionSetPipelineEXT
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_WRITE_INDIRECT_EXECUTION_SET_PIPELINE_EXT)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr WriteIndirectExecutionSetPipelineEXT
p Ptr WriteIndirectExecutionSetPipelineEXT -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr WriteIndirectExecutionSetPipelineEXT
p Ptr WriteIndirectExecutionSetPipelineEXT -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32)) (Flags
forall a. Zero a => a
zero)
    Ptr Pipeline -> Pipeline -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr WriteIndirectExecutionSetPipelineEXT
p Ptr WriteIndirectExecutionSetPipelineEXT -> Int -> Ptr Pipeline
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Pipeline)) (Pipeline
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct WriteIndirectExecutionSetPipelineEXT where
  peekCStruct :: Ptr WriteIndirectExecutionSetPipelineEXT
-> IO WriteIndirectExecutionSetPipelineEXT
peekCStruct Ptr WriteIndirectExecutionSetPipelineEXT
p = do
    Flags
index <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr WriteIndirectExecutionSetPipelineEXT
p Ptr WriteIndirectExecutionSetPipelineEXT -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32))
    Pipeline
pipeline <- forall a. Storable a => Ptr a -> IO a
peek @Pipeline ((Ptr WriteIndirectExecutionSetPipelineEXT
p Ptr WriteIndirectExecutionSetPipelineEXT -> Int -> Ptr Pipeline
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Pipeline))
    WriteIndirectExecutionSetPipelineEXT
-> IO WriteIndirectExecutionSetPipelineEXT
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (WriteIndirectExecutionSetPipelineEXT
 -> IO WriteIndirectExecutionSetPipelineEXT)
-> WriteIndirectExecutionSetPipelineEXT
-> IO WriteIndirectExecutionSetPipelineEXT
forall a b. (a -> b) -> a -> b
$ Flags -> Pipeline -> WriteIndirectExecutionSetPipelineEXT
WriteIndirectExecutionSetPipelineEXT
             Flags
index Pipeline
pipeline

instance Storable WriteIndirectExecutionSetPipelineEXT where
  sizeOf :: WriteIndirectExecutionSetPipelineEXT -> Int
sizeOf ~WriteIndirectExecutionSetPipelineEXT
_ = Int
32
  alignment :: WriteIndirectExecutionSetPipelineEXT -> Int
alignment ~WriteIndirectExecutionSetPipelineEXT
_ = Int
8
  peek :: Ptr WriteIndirectExecutionSetPipelineEXT
-> IO WriteIndirectExecutionSetPipelineEXT
peek = Ptr WriteIndirectExecutionSetPipelineEXT
-> IO WriteIndirectExecutionSetPipelineEXT
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct
  poke :: Ptr WriteIndirectExecutionSetPipelineEXT
-> WriteIndirectExecutionSetPipelineEXT -> IO ()
poke Ptr WriteIndirectExecutionSetPipelineEXT
ptr WriteIndirectExecutionSetPipelineEXT
poked = Ptr WriteIndirectExecutionSetPipelineEXT
-> WriteIndirectExecutionSetPipelineEXT -> IO () -> IO ()
forall b.
Ptr WriteIndirectExecutionSetPipelineEXT
-> WriteIndirectExecutionSetPipelineEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr WriteIndirectExecutionSetPipelineEXT
ptr WriteIndirectExecutionSetPipelineEXT
poked (() -> IO ()
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ())

instance Zero WriteIndirectExecutionSetPipelineEXT where
  zero :: WriteIndirectExecutionSetPipelineEXT
zero = Flags -> Pipeline -> WriteIndirectExecutionSetPipelineEXT
WriteIndirectExecutionSetPipelineEXT
           Flags
forall a. Zero a => a
zero
           Pipeline
forall a. Zero a => a
zero


-- | 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
--
-- -   #VUID-VkWriteIndirectExecutionSetShaderEXT-index-11031# @index@
--     /must/ be less than
--     'IndirectExecutionSetShaderInfoEXT'::@maxShaderCount@
--
-- -   #VUID-VkWriteIndirectExecutionSetShaderEXT-shader-11032# @shader@
--     /must/ have been created with
--     'Vulkan.Extensions.VK_EXT_shader_object.SHADER_CREATE_INDIRECT_BINDABLE_BIT_EXT'
--
-- -   #VUID-VkWriteIndirectExecutionSetShaderEXT-pInitialShaders-11033# A
--     shader created with the same
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits' /must/
--     have been passed in the
--     'IndirectExecutionSetShaderInfoEXT'::@pInitialShaders@ array
--
-- -   #VUID-VkWriteIndirectExecutionSetShaderEXT-index-11034# @index@
--     /must/ not be in use by submitted command buffers
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkWriteIndirectExecutionSetShaderEXT-sType-sType# @sType@
--     /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_WRITE_INDIRECT_EXECUTION_SET_SHADER_EXT'
--
-- -   #VUID-VkWriteIndirectExecutionSetShaderEXT-shader-parameter#
--     @shader@ /must/ be a valid 'Vulkan.Extensions.Handles.ShaderEXT'
--     handle
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_device_generated_commands VK_EXT_device_generated_commands>,
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_shader_object VK_EXT_shader_object>,
-- 'Vulkan.Extensions.Handles.ShaderEXT',
-- 'Vulkan.Core10.Enums.StructureType.StructureType',
-- 'updateIndirectExecutionSetShaderEXT'
data WriteIndirectExecutionSetShaderEXT = WriteIndirectExecutionSetShaderEXT
  { -- | @index@ is the element of the set to update
    WriteIndirectExecutionSetShaderEXT -> Flags
index :: Word32
  , -- | @shader@ is the shader to store in the indirect execution set
    WriteIndirectExecutionSetShaderEXT -> ShaderEXT
shader :: ShaderEXT
  }
  deriving (Typeable, WriteIndirectExecutionSetShaderEXT
-> WriteIndirectExecutionSetShaderEXT -> "isPreprocessed" ::: Bool
(WriteIndirectExecutionSetShaderEXT
 -> WriteIndirectExecutionSetShaderEXT -> "isPreprocessed" ::: Bool)
-> (WriteIndirectExecutionSetShaderEXT
    -> WriteIndirectExecutionSetShaderEXT -> "isPreprocessed" ::: Bool)
-> Eq WriteIndirectExecutionSetShaderEXT
forall a.
(a -> a -> "isPreprocessed" ::: Bool)
-> (a -> a -> "isPreprocessed" ::: Bool) -> Eq a
$c== :: WriteIndirectExecutionSetShaderEXT
-> WriteIndirectExecutionSetShaderEXT -> "isPreprocessed" ::: Bool
== :: WriteIndirectExecutionSetShaderEXT
-> WriteIndirectExecutionSetShaderEXT -> "isPreprocessed" ::: Bool
$c/= :: WriteIndirectExecutionSetShaderEXT
-> WriteIndirectExecutionSetShaderEXT -> "isPreprocessed" ::: Bool
/= :: WriteIndirectExecutionSetShaderEXT
-> WriteIndirectExecutionSetShaderEXT -> "isPreprocessed" ::: Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (WriteIndirectExecutionSetShaderEXT)
#endif
deriving instance Show WriteIndirectExecutionSetShaderEXT

instance ToCStruct WriteIndirectExecutionSetShaderEXT where
  withCStruct :: forall b.
WriteIndirectExecutionSetShaderEXT
-> (Ptr WriteIndirectExecutionSetShaderEXT -> IO b) -> IO b
withCStruct WriteIndirectExecutionSetShaderEXT
x Ptr WriteIndirectExecutionSetShaderEXT -> IO b
f = Int -> (Ptr WriteIndirectExecutionSetShaderEXT -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
32 ((Ptr WriteIndirectExecutionSetShaderEXT -> IO b) -> IO b)
-> (Ptr WriteIndirectExecutionSetShaderEXT -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr WriteIndirectExecutionSetShaderEXT
p -> Ptr WriteIndirectExecutionSetShaderEXT
-> WriteIndirectExecutionSetShaderEXT -> IO b -> IO b
forall b.
Ptr WriteIndirectExecutionSetShaderEXT
-> WriteIndirectExecutionSetShaderEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr WriteIndirectExecutionSetShaderEXT
p WriteIndirectExecutionSetShaderEXT
x (Ptr WriteIndirectExecutionSetShaderEXT -> IO b
f Ptr WriteIndirectExecutionSetShaderEXT
p)
  pokeCStruct :: forall b.
Ptr WriteIndirectExecutionSetShaderEXT
-> WriteIndirectExecutionSetShaderEXT -> IO b -> IO b
pokeCStruct Ptr WriteIndirectExecutionSetShaderEXT
p WriteIndirectExecutionSetShaderEXT{Flags
ShaderEXT
$sel:index:WriteIndirectExecutionSetShaderEXT :: WriteIndirectExecutionSetShaderEXT -> Flags
$sel:shader:WriteIndirectExecutionSetShaderEXT :: WriteIndirectExecutionSetShaderEXT -> ShaderEXT
index :: Flags
shader :: ShaderEXT
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr WriteIndirectExecutionSetShaderEXT
p Ptr WriteIndirectExecutionSetShaderEXT -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_WRITE_INDIRECT_EXECUTION_SET_SHADER_EXT)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr WriteIndirectExecutionSetShaderEXT
p Ptr WriteIndirectExecutionSetShaderEXT -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr WriteIndirectExecutionSetShaderEXT
p Ptr WriteIndirectExecutionSetShaderEXT -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32)) (Flags
index)
    Ptr ShaderEXT -> ShaderEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr WriteIndirectExecutionSetShaderEXT
p Ptr WriteIndirectExecutionSetShaderEXT -> Int -> Ptr ShaderEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr ShaderEXT)) (ShaderEXT
shader)
    IO b
f
  cStructSize :: Int
cStructSize = Int
32
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b. Ptr WriteIndirectExecutionSetShaderEXT -> IO b -> IO b
pokeZeroCStruct Ptr WriteIndirectExecutionSetShaderEXT
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr WriteIndirectExecutionSetShaderEXT
p Ptr WriteIndirectExecutionSetShaderEXT -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_WRITE_INDIRECT_EXECUTION_SET_SHADER_EXT)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr WriteIndirectExecutionSetShaderEXT
p Ptr WriteIndirectExecutionSetShaderEXT -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr WriteIndirectExecutionSetShaderEXT
p Ptr WriteIndirectExecutionSetShaderEXT -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32)) (Flags
forall a. Zero a => a
zero)
    Ptr ShaderEXT -> ShaderEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr WriteIndirectExecutionSetShaderEXT
p Ptr WriteIndirectExecutionSetShaderEXT -> Int -> Ptr ShaderEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr ShaderEXT)) (ShaderEXT
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct WriteIndirectExecutionSetShaderEXT where
  peekCStruct :: Ptr WriteIndirectExecutionSetShaderEXT
-> IO WriteIndirectExecutionSetShaderEXT
peekCStruct Ptr WriteIndirectExecutionSetShaderEXT
p = do
    Flags
index <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr WriteIndirectExecutionSetShaderEXT
p Ptr WriteIndirectExecutionSetShaderEXT -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32))
    ShaderEXT
shader <- forall a. Storable a => Ptr a -> IO a
peek @ShaderEXT ((Ptr WriteIndirectExecutionSetShaderEXT
p Ptr WriteIndirectExecutionSetShaderEXT -> Int -> Ptr ShaderEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr ShaderEXT))
    WriteIndirectExecutionSetShaderEXT
-> IO WriteIndirectExecutionSetShaderEXT
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (WriteIndirectExecutionSetShaderEXT
 -> IO WriteIndirectExecutionSetShaderEXT)
-> WriteIndirectExecutionSetShaderEXT
-> IO WriteIndirectExecutionSetShaderEXT
forall a b. (a -> b) -> a -> b
$ Flags -> ShaderEXT -> WriteIndirectExecutionSetShaderEXT
WriteIndirectExecutionSetShaderEXT
             Flags
index ShaderEXT
shader

instance Storable WriteIndirectExecutionSetShaderEXT where
  sizeOf :: WriteIndirectExecutionSetShaderEXT -> Int
sizeOf ~WriteIndirectExecutionSetShaderEXT
_ = Int
32
  alignment :: WriteIndirectExecutionSetShaderEXT -> Int
alignment ~WriteIndirectExecutionSetShaderEXT
_ = Int
8
  peek :: Ptr WriteIndirectExecutionSetShaderEXT
-> IO WriteIndirectExecutionSetShaderEXT
peek = Ptr WriteIndirectExecutionSetShaderEXT
-> IO WriteIndirectExecutionSetShaderEXT
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct
  poke :: Ptr WriteIndirectExecutionSetShaderEXT
-> WriteIndirectExecutionSetShaderEXT -> IO ()
poke Ptr WriteIndirectExecutionSetShaderEXT
ptr WriteIndirectExecutionSetShaderEXT
poked = Ptr WriteIndirectExecutionSetShaderEXT
-> WriteIndirectExecutionSetShaderEXT -> IO () -> IO ()
forall b.
Ptr WriteIndirectExecutionSetShaderEXT
-> WriteIndirectExecutionSetShaderEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr WriteIndirectExecutionSetShaderEXT
ptr WriteIndirectExecutionSetShaderEXT
poked (() -> IO ()
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ())

instance Zero WriteIndirectExecutionSetShaderEXT where
  zero :: WriteIndirectExecutionSetShaderEXT
zero = Flags -> ShaderEXT -> WriteIndirectExecutionSetShaderEXT
WriteIndirectExecutionSetShaderEXT
           Flags
forall a. Zero a => a
zero
           ShaderEXT
forall a. Zero a => a
zero


-- | 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
-- <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#interfaces-alignment-requirements Alignment Requirements>,
-- or @4@, whichever is lower.
--
-- == Valid Usage
--
-- -   #VUID-VkIndirectCommandsLayoutCreateInfoEXT-indirectStride-11090#
--     @indirectStride@ /must/ be less than or equal to
--     'PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT'::@maxIndirectCommandsIndirectStride@
--
-- -   #VUID-VkIndirectCommandsLayoutCreateInfoEXT-shaderStages-11091#
--     @shaderStages@ /must/ only contain stages supported by
--     <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#limits-supportedIndirectCommandsShaderStages ::supportedIndirectCommandsShaderStages>
--
-- -   #VUID-VkIndirectCommandsLayoutCreateInfoEXT-tokenCount-11092#
--     @tokenCount@ /must/ less than or equal to
--     'PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT'::@maxIndirectCommandsTokenCount@
--
-- -   #VUID-VkIndirectCommandsLayoutCreateInfoEXT-pTokens-11093# The
--     number of tokens in the @pTokens@ array with @type@ equal to
--     'INDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT' /must/ be less than
--     or equal to @1@
--
-- -   #VUID-VkIndirectCommandsLayoutCreateInfoEXT-pTokens-11145# The
--     number of tokens in the @pTokens@ array with @type@ equal to
--     'INDIRECT_COMMANDS_TOKEN_TYPE_SEQUENCE_INDEX_EXT' /must/ be less
--     than or equal to @1@
--
-- -   #VUID-VkIndirectCommandsLayoutCreateInfoEXT-pTokens-11094# The
--     number of tokens in the @pTokens@ array with @type@ equal to
--     'INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_EXT' /must/ be less than
--     or equal to @1@
--
-- -   #VUID-VkIndirectCommandsLayoutCreateInfoEXT-pTokens-11095# If the
--     action command token in the @pTokens@ array is not an indexed draw
--     token, then @pTokens@ /must/ not contain a member with @type@ set to
--     'INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_EXT'
--
-- -   #VUID-VkIndirectCommandsLayoutCreateInfoEXT-pTokens-11096# If the
--     action command token in the @pTokens@ array is not a non-mesh draw
--     token, then @pTokens@ /must/ not contain a member with @type@ set to
--     'INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_EXT'
--
-- -   #VUID-VkIndirectCommandsLayoutCreateInfoEXT-pTokens-11097# If the
--     @pTokens@ array contains multiple tokens with @type@ equal to
--     'INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_EXT', then there /must/
--     be no duplicate
--     'IndirectCommandsVertexBufferTokenEXT'::@vertexBindingUnit@ values
--
-- -   #VUID-VkIndirectCommandsLayoutCreateInfoEXT-pTokens-11099# For all
--     'INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_EXT' and
--     'INDIRECT_COMMANDS_TOKEN_TYPE_SEQUENCE_INDEX_EXT' type tokens in
--     @pTokens@, there /must/ be no overlapping ranges between any
--     specified push constant ranges
--
-- -   #VUID-VkIndirectCommandsLayoutCreateInfoEXT-pTokens-11100# The
--     action command token /must/ be the last token in the @pTokens@ array
--
-- -   #VUID-VkIndirectCommandsLayoutCreateInfoEXT-pTokens-11139# If the
--     @pTokens@ array contains a
--     'INDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT' token, then this
--     token /must/ be the first token in the array
--
-- -   #VUID-VkIndirectCommandsLayoutCreateInfoEXT-pTokens-11101# For any
--     element of @pTokens@, if @type@ is
--     'INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_EXT' or
--     'INDIRECT_COMMANDS_TOKEN_TYPE_SEQUENCE_INDEX_EXT' and the
--     <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#features-dynamicGeneratedPipelineLayout dynamicGeneratedPipelineLayout>
--     feature is not enabled, then the @pipelineLayout@ /must/ not be
--     'Vulkan.Core10.APIConstants.NULL_HANDLE'
--
-- -   #VUID-VkIndirectCommandsLayoutCreateInfoEXT-pTokens-11102# For any
--     element of @pTokens@, if @type@ is either
--     'INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_EXT' or
--     'INDIRECT_COMMANDS_TOKEN_TYPE_SEQUENCE_INDEX_EXT' and
--     @pipelineLayout@ is 'Vulkan.Core10.APIConstants.NULL_HANDLE', then
--     the @pNext@ chain /must/ include a
--     'Vulkan.Core10.PipelineLayout.PipelineLayoutCreateInfo' struct
--
-- -   #VUID-VkIndirectCommandsLayoutCreateInfoEXT-pTokens-11103# For any
--     element of @pTokens@, the @offset@ /must/ be greater than or equal
--     to the @offset@ member of the previous tokens
--
-- -   #VUID-VkIndirectCommandsLayoutCreateInfoEXT-pTokens-11104# For any
--     element of @pTokens@, if @type@ is
--     'INDIRECT_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', or
--     'INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_EXT', then @shaderStages@ /must/
--     contain graphics stages
--
-- -   #VUID-VkIndirectCommandsLayoutCreateInfoEXT-pTokens-11105# For any
--     element of @pTokens@, if @type@ is
--     'INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_EXT', then @shaderStages@
--     /must/ be
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_COMPUTE_BIT'
--
-- -   #VUID-VkIndirectCommandsLayoutCreateInfoEXT-pTokens-11106# For any
--     element of @pTokens@, if @type@ is
--     'INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_EXT' or
--     'INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_COUNT_EXT', then
--     @shaderStages@ /must/ contain
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_MESH_BIT_EXT'
--
-- -   #VUID-VkIndirectCommandsLayoutCreateInfoEXT-pTokens-11107# For any
--     element of @pTokens@, if @type@ is
--     'INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_NV_EXT' or
--     'INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_COUNT_NV_EXT', then
--     the @shaderStages@ /must/ contain
--     'Vulkan.Extensions.VK_NV_mesh_shader.SHADER_STAGE_MESH_BIT_NV'
--
-- -   #VUID-VkIndirectCommandsLayoutCreateInfoEXT-pTokens-11108# For any
--     element of @pTokens@, if @type@ is
--     'INDIRECT_COMMANDS_TOKEN_TYPE_TRACE_RAYS2_EXT', then @shaderStages@
--     /must/ contain ray tracing stages
--
-- -   #VUID-VkIndirectCommandsLayoutCreateInfoEXT-shaderStages-11109# If
--     @shaderStages@ contains graphics stages then the state tokens in
--     @pTokens@ /must/ not include
--     'INDIRECT_COMMANDS_TOKEN_TYPE_TRACE_RAYS2_EXT',
--     'INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_EXT'
--
-- -   #VUID-VkIndirectCommandsLayoutCreateInfoEXT-shaderStages-11110# If
--     @shaderStages@ is
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_COMPUTE_BIT'
--     then the state tokens in @pTokens@ /must/ only include
--     'INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_EXT',
--     'INDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT',
--     'INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_EXT', or
--     'INDIRECT_COMMANDS_TOKEN_TYPE_SEQUENCE_INDEX_EXT'
--
-- -   #VUID-VkIndirectCommandsLayoutCreateInfoEXT-shaderStages-11111# If
--     @shaderStages@ contains ray tracing stages then the state tokens in
--     @pTokens@ /must/ only include
--     'INDIRECT_COMMANDS_TOKEN_TYPE_TRACE_RAYS2_EXT',
--     'INDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT',
--     'INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_EXT', or
--     'INDIRECT_COMMANDS_TOKEN_TYPE_SEQUENCE_INDEX_EXT'
--
-- -   #VUID-VkIndirectCommandsLayoutCreateInfoEXT-shaderStages-11112# The
--     @shaderStages@ /must/ only contain stages from one of the following:
--
--     -   graphics stages
--
--     -   'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_COMPUTE_BIT'
--
--     -   mesh stages and
--         'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_FRAGMENT_BIT'
--
--     -   ray tracing stages
--
-- -   #VUID-VkIndirectCommandsLayoutCreateInfoEXT-shaderStages-11113# If
--     @shaderStages@ contains
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_FRAGMENT_BIT',
--     then @shaderStages@ /must/ also contain
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_VERTEX_BIT' or
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_MESH_BIT_EXT'
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkIndirectCommandsLayoutCreateInfoEXT-sType-sType# @sType@
--     /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_EXT'
--
-- -   #VUID-VkIndirectCommandsLayoutCreateInfoEXT-pNext-pNext# @pNext@
--     /must/ be @NULL@ or a pointer to a valid instance of
--     'Vulkan.Core10.PipelineLayout.PipelineLayoutCreateInfo'
--
-- -   #VUID-VkIndirectCommandsLayoutCreateInfoEXT-sType-unique# The
--     @sType@ value of each struct in the @pNext@ chain /must/ be unique
--
-- -   #VUID-VkIndirectCommandsLayoutCreateInfoEXT-flags-parameter# @flags@
--     /must/ be a valid combination of
--     'IndirectCommandsLayoutUsageFlagBitsEXT' values
--
-- -   #VUID-VkIndirectCommandsLayoutCreateInfoEXT-shaderStages-parameter#
--     @shaderStages@ /must/ be a valid combination of
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits' values
--
-- -   #VUID-VkIndirectCommandsLayoutCreateInfoEXT-shaderStages-requiredbitmask#
--     @shaderStages@ /must/ not be @0@
--
-- -   #VUID-VkIndirectCommandsLayoutCreateInfoEXT-pipelineLayout-parameter#
--     If @pipelineLayout@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
--     @pipelineLayout@ /must/ be a valid
--     'Vulkan.Core10.Handles.PipelineLayout' handle
--
-- -   #VUID-VkIndirectCommandsLayoutCreateInfoEXT-pTokens-parameter#
--     @pTokens@ /must/ be a valid pointer to an array of @tokenCount@
--     valid 'IndirectCommandsLayoutTokenEXT' structures
--
-- -   #VUID-VkIndirectCommandsLayoutCreateInfoEXT-tokenCount-arraylength#
--     @tokenCount@ /must/ be greater than @0@
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_device_generated_commands VK_EXT_device_generated_commands>,
-- 'IndirectCommandsLayoutTokenEXT', 'IndirectCommandsLayoutUsageFlagsEXT',
-- 'Vulkan.Core10.Handles.PipelineLayout',
-- 'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlags',
-- 'Vulkan.Core10.Enums.StructureType.StructureType',
-- 'createIndirectCommandsLayoutEXT'
data IndirectCommandsLayoutCreateInfoEXT (es :: [Type]) = IndirectCommandsLayoutCreateInfoEXT
  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.
    forall (es :: [*]).
IndirectCommandsLayoutCreateInfoEXT es -> Chain es
next :: Chain es
  , -- | @flags@ is a bitmask of 'IndirectCommandsLayoutUsageFlagBitsEXT'
    -- specifying usage rules for this layout.
    forall (es :: [*]).
IndirectCommandsLayoutCreateInfoEXT es
-> IndirectCommandsLayoutUsageFlagsEXT
flags :: IndirectCommandsLayoutUsageFlagsEXT
  , -- | @shaderStages@ is the
    -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlags' that this
    -- layout supports.
    forall (es :: [*]).
IndirectCommandsLayoutCreateInfoEXT es -> ShaderStageFlags
shaderStages :: ShaderStageFlags
  , -- | @indirectStride@ is the distance in bytes between sequences in the
    -- indirect buffer
    forall (es :: [*]). IndirectCommandsLayoutCreateInfoEXT es -> Flags
indirectStride :: Word32
  , -- | @pipelineLayout@ is the optional 'Vulkan.Core10.Handles.PipelineLayout'
    -- that tokens in this layout use. If the
    -- <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#features-dynamicGeneratedPipelineLayout dynamicGeneratedPipelineLayout>
    -- feature is enabled, @pipelineLayout@ /can/ be
    -- 'Vulkan.Core10.APIConstants.NULL_HANDLE' and the layout /must/ be
    -- specified by chaining the
    -- 'Vulkan.Core10.PipelineLayout.PipelineLayoutCreateInfo' structure off
    -- the @pNext@
    forall (es :: [*]).
IndirectCommandsLayoutCreateInfoEXT es -> PipelineLayout
pipelineLayout :: PipelineLayout
  , -- | @pTokens@ is a pointer to an array of 'IndirectCommandsLayoutTokenEXT'
    -- describing each command token in detail.
    forall (es :: [*]).
IndirectCommandsLayoutCreateInfoEXT es
-> Vector IndirectCommandsLayoutTokenEXT
tokens :: Vector IndirectCommandsLayoutTokenEXT
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (IndirectCommandsLayoutCreateInfoEXT (es :: [Type]))
#endif
deriving instance Show (Chain es) => Show (IndirectCommandsLayoutCreateInfoEXT es)

instance Extensible IndirectCommandsLayoutCreateInfoEXT where
  extensibleTypeName :: String
extensibleTypeName = String
"IndirectCommandsLayoutCreateInfoEXT"
  setNext :: forall (ds :: [*]) (es :: [*]).
IndirectCommandsLayoutCreateInfoEXT ds
-> Chain es -> IndirectCommandsLayoutCreateInfoEXT es
setNext IndirectCommandsLayoutCreateInfoEXT{Flags
Vector IndirectCommandsLayoutTokenEXT
ShaderStageFlags
PipelineLayout
Chain ds
IndirectCommandsLayoutUsageFlagsEXT
$sel:next:IndirectCommandsLayoutCreateInfoEXT :: forall (es :: [*]).
IndirectCommandsLayoutCreateInfoEXT es -> Chain es
$sel:flags:IndirectCommandsLayoutCreateInfoEXT :: forall (es :: [*]).
IndirectCommandsLayoutCreateInfoEXT es
-> IndirectCommandsLayoutUsageFlagsEXT
$sel:shaderStages:IndirectCommandsLayoutCreateInfoEXT :: forall (es :: [*]).
IndirectCommandsLayoutCreateInfoEXT es -> ShaderStageFlags
$sel:indirectStride:IndirectCommandsLayoutCreateInfoEXT :: forall (es :: [*]). IndirectCommandsLayoutCreateInfoEXT es -> Flags
$sel:pipelineLayout:IndirectCommandsLayoutCreateInfoEXT :: forall (es :: [*]).
IndirectCommandsLayoutCreateInfoEXT es -> PipelineLayout
$sel:tokens:IndirectCommandsLayoutCreateInfoEXT :: forall (es :: [*]).
IndirectCommandsLayoutCreateInfoEXT es
-> Vector IndirectCommandsLayoutTokenEXT
next :: Chain ds
flags :: IndirectCommandsLayoutUsageFlagsEXT
shaderStages :: ShaderStageFlags
indirectStride :: Flags
pipelineLayout :: PipelineLayout
tokens :: Vector IndirectCommandsLayoutTokenEXT
..} Chain es
next' = IndirectCommandsLayoutCreateInfoEXT{$sel:next:IndirectCommandsLayoutCreateInfoEXT :: Chain es
next = Chain es
next', Flags
Vector IndirectCommandsLayoutTokenEXT
ShaderStageFlags
PipelineLayout
IndirectCommandsLayoutUsageFlagsEXT
$sel:flags:IndirectCommandsLayoutCreateInfoEXT :: IndirectCommandsLayoutUsageFlagsEXT
$sel:shaderStages:IndirectCommandsLayoutCreateInfoEXT :: ShaderStageFlags
$sel:indirectStride:IndirectCommandsLayoutCreateInfoEXT :: Flags
$sel:pipelineLayout:IndirectCommandsLayoutCreateInfoEXT :: PipelineLayout
$sel:tokens:IndirectCommandsLayoutCreateInfoEXT :: Vector IndirectCommandsLayoutTokenEXT
flags :: IndirectCommandsLayoutUsageFlagsEXT
shaderStages :: ShaderStageFlags
indirectStride :: Flags
pipelineLayout :: PipelineLayout
tokens :: Vector IndirectCommandsLayoutTokenEXT
..}
  getNext :: forall (es :: [*]).
IndirectCommandsLayoutCreateInfoEXT es -> Chain es
getNext IndirectCommandsLayoutCreateInfoEXT{Flags
Vector IndirectCommandsLayoutTokenEXT
ShaderStageFlags
PipelineLayout
Chain es
IndirectCommandsLayoutUsageFlagsEXT
$sel:next:IndirectCommandsLayoutCreateInfoEXT :: forall (es :: [*]).
IndirectCommandsLayoutCreateInfoEXT es -> Chain es
$sel:flags:IndirectCommandsLayoutCreateInfoEXT :: forall (es :: [*]).
IndirectCommandsLayoutCreateInfoEXT es
-> IndirectCommandsLayoutUsageFlagsEXT
$sel:shaderStages:IndirectCommandsLayoutCreateInfoEXT :: forall (es :: [*]).
IndirectCommandsLayoutCreateInfoEXT es -> ShaderStageFlags
$sel:indirectStride:IndirectCommandsLayoutCreateInfoEXT :: forall (es :: [*]). IndirectCommandsLayoutCreateInfoEXT es -> Flags
$sel:pipelineLayout:IndirectCommandsLayoutCreateInfoEXT :: forall (es :: [*]).
IndirectCommandsLayoutCreateInfoEXT es -> PipelineLayout
$sel:tokens:IndirectCommandsLayoutCreateInfoEXT :: forall (es :: [*]).
IndirectCommandsLayoutCreateInfoEXT es
-> Vector IndirectCommandsLayoutTokenEXT
next :: Chain es
flags :: IndirectCommandsLayoutUsageFlagsEXT
shaderStages :: ShaderStageFlags
indirectStride :: Flags
pipelineLayout :: PipelineLayout
tokens :: Vector IndirectCommandsLayoutTokenEXT
..} = Chain es
next
  extends :: forall e b proxy. Typeable e => proxy e -> (Extends IndirectCommandsLayoutCreateInfoEXT e => b) -> Maybe b
  extends :: forall e b (proxy :: * -> *).
Typeable e =>
proxy e
-> (Extends IndirectCommandsLayoutCreateInfoEXT e => b) -> Maybe b
extends proxy e
_ Extends IndirectCommandsLayoutCreateInfoEXT e => b
f
    | Just e :~: PipelineLayoutCreateInfo
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PipelineLayoutCreateInfo = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends IndirectCommandsLayoutCreateInfoEXT e => b
f
    | "isPreprocessed" ::: Bool
otherwise = Maybe b
forall a. Maybe a
Nothing

instance ( Extendss IndirectCommandsLayoutCreateInfoEXT es
         , PokeChain es ) => ToCStruct (IndirectCommandsLayoutCreateInfoEXT es) where
  withCStruct :: forall b.
IndirectCommandsLayoutCreateInfoEXT es
-> (Ptr (IndirectCommandsLayoutCreateInfoEXT es) -> IO b) -> IO b
withCStruct IndirectCommandsLayoutCreateInfoEXT es
x Ptr (IndirectCommandsLayoutCreateInfoEXT es) -> IO b
f = Int
-> (Ptr (IndirectCommandsLayoutCreateInfoEXT es) -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
56 ((Ptr (IndirectCommandsLayoutCreateInfoEXT es) -> IO b) -> IO b)
-> (Ptr (IndirectCommandsLayoutCreateInfoEXT es) -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr (IndirectCommandsLayoutCreateInfoEXT es)
p -> Ptr (IndirectCommandsLayoutCreateInfoEXT es)
-> IndirectCommandsLayoutCreateInfoEXT es -> IO b -> IO b
forall b.
Ptr (IndirectCommandsLayoutCreateInfoEXT es)
-> IndirectCommandsLayoutCreateInfoEXT es -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr (IndirectCommandsLayoutCreateInfoEXT es)
p IndirectCommandsLayoutCreateInfoEXT es
x (Ptr (IndirectCommandsLayoutCreateInfoEXT es) -> IO b
f Ptr (IndirectCommandsLayoutCreateInfoEXT es)
p)
  pokeCStruct :: forall b.
Ptr (IndirectCommandsLayoutCreateInfoEXT es)
-> IndirectCommandsLayoutCreateInfoEXT es -> IO b -> IO b
pokeCStruct Ptr (IndirectCommandsLayoutCreateInfoEXT es)
p IndirectCommandsLayoutCreateInfoEXT{Flags
Vector IndirectCommandsLayoutTokenEXT
ShaderStageFlags
PipelineLayout
Chain es
IndirectCommandsLayoutUsageFlagsEXT
$sel:next:IndirectCommandsLayoutCreateInfoEXT :: forall (es :: [*]).
IndirectCommandsLayoutCreateInfoEXT es -> Chain es
$sel:flags:IndirectCommandsLayoutCreateInfoEXT :: forall (es :: [*]).
IndirectCommandsLayoutCreateInfoEXT es
-> IndirectCommandsLayoutUsageFlagsEXT
$sel:shaderStages:IndirectCommandsLayoutCreateInfoEXT :: forall (es :: [*]).
IndirectCommandsLayoutCreateInfoEXT es -> ShaderStageFlags
$sel:indirectStride:IndirectCommandsLayoutCreateInfoEXT :: forall (es :: [*]). IndirectCommandsLayoutCreateInfoEXT es -> Flags
$sel:pipelineLayout:IndirectCommandsLayoutCreateInfoEXT :: forall (es :: [*]).
IndirectCommandsLayoutCreateInfoEXT es -> PipelineLayout
$sel:tokens:IndirectCommandsLayoutCreateInfoEXT :: forall (es :: [*]).
IndirectCommandsLayoutCreateInfoEXT es
-> Vector IndirectCommandsLayoutTokenEXT
next :: Chain es
flags :: IndirectCommandsLayoutUsageFlagsEXT
shaderStages :: ShaderStageFlags
indirectStride :: Flags
pipelineLayout :: PipelineLayout
tokens :: Vector IndirectCommandsLayoutTokenEXT
..} IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (IndirectCommandsLayoutCreateInfoEXT es)
p Ptr (IndirectCommandsLayoutCreateInfoEXT es)
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_EXT)
    Ptr ()
pNext'' <- (Ptr (Chain es) -> Ptr ())
-> ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ())
forall a b. (a -> b) -> ContT b IO a -> ContT b IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Ptr (Chain es) -> Ptr ()
forall a b. Ptr a -> Ptr b
castPtr (ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ()))
-> (((Ptr (Chain es) -> IO b) -> IO b)
    -> ContT b IO (Ptr (Chain es)))
-> ((Ptr (Chain es) -> IO b) -> IO b)
-> ContT b IO (Ptr ())
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr (Chain es))
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr ()))
-> ((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr ())
forall a b. (a -> b) -> a -> b
$ Chain es -> (Ptr (Chain es) -> IO b) -> IO b
forall (es :: [*]) a.
PokeChain es =>
Chain es -> (Ptr (Chain es) -> IO a) -> IO a
forall a. Chain es -> (Ptr (Chain es) -> IO a) -> IO a
withChain (Chain es
next)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (IndirectCommandsLayoutCreateInfoEXT es)
p Ptr (IndirectCommandsLayoutCreateInfoEXT es) -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) Ptr ()
pNext''
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr IndirectCommandsLayoutUsageFlagsEXT
-> IndirectCommandsLayoutUsageFlagsEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (IndirectCommandsLayoutCreateInfoEXT es)
p Ptr (IndirectCommandsLayoutCreateInfoEXT es)
-> Int -> Ptr IndirectCommandsLayoutUsageFlagsEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr IndirectCommandsLayoutUsageFlagsEXT)) (IndirectCommandsLayoutUsageFlagsEXT
flags)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr ShaderStageFlags -> ShaderStageFlags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (IndirectCommandsLayoutCreateInfoEXT es)
p Ptr (IndirectCommandsLayoutCreateInfoEXT es)
-> Int -> Ptr ShaderStageFlags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr ShaderStageFlags)) (ShaderStageFlags
shaderStages)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (IndirectCommandsLayoutCreateInfoEXT es)
p Ptr (IndirectCommandsLayoutCreateInfoEXT es) -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Word32)) (Flags
indirectStride)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr PipelineLayout -> PipelineLayout -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (IndirectCommandsLayoutCreateInfoEXT es)
p Ptr (IndirectCommandsLayoutCreateInfoEXT es)
-> Int -> Ptr PipelineLayout
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr PipelineLayout)) (PipelineLayout
pipelineLayout)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (IndirectCommandsLayoutCreateInfoEXT es)
p Ptr (IndirectCommandsLayoutCreateInfoEXT es) -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr Word32)) ((Int -> Flags
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Vector IndirectCommandsLayoutTokenEXT -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector IndirectCommandsLayoutTokenEXT -> Int)
-> Vector IndirectCommandsLayoutTokenEXT -> Int
forall a b. (a -> b) -> a -> b
$ (Vector IndirectCommandsLayoutTokenEXT
tokens)) :: Word32))
    Ptr IndirectCommandsLayoutTokenEXT
pPTokens' <- ((Ptr IndirectCommandsLayoutTokenEXT -> IO b) -> IO b)
-> ContT b IO (Ptr IndirectCommandsLayoutTokenEXT)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr IndirectCommandsLayoutTokenEXT -> IO b) -> IO b)
 -> ContT b IO (Ptr IndirectCommandsLayoutTokenEXT))
-> ((Ptr IndirectCommandsLayoutTokenEXT -> IO b) -> IO b)
-> ContT b IO (Ptr IndirectCommandsLayoutTokenEXT)
forall a b. (a -> b) -> a -> b
$ forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @IndirectCommandsLayoutTokenEXT ((Vector IndirectCommandsLayoutTokenEXT -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector IndirectCommandsLayoutTokenEXT
tokens)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
40)
    (Int -> IndirectCommandsLayoutTokenEXT -> ContT b IO ())
-> Vector IndirectCommandsLayoutTokenEXT -> ContT b IO ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i IndirectCommandsLayoutTokenEXT
e -> ((() -> IO b) -> IO b) -> ContT b IO ()
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((() -> IO b) -> IO b) -> ContT b IO ())
-> ((() -> IO b) -> IO b) -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr IndirectCommandsLayoutTokenEXT
-> IndirectCommandsLayoutTokenEXT -> IO b -> IO b
forall b.
Ptr IndirectCommandsLayoutTokenEXT
-> IndirectCommandsLayoutTokenEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct (Ptr IndirectCommandsLayoutTokenEXT
pPTokens' Ptr IndirectCommandsLayoutTokenEXT
-> Int -> Ptr IndirectCommandsLayoutTokenEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
40 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr IndirectCommandsLayoutTokenEXT) (IndirectCommandsLayoutTokenEXT
e) (IO b -> IO b) -> ((() -> IO b) -> IO b) -> (() -> IO b) -> IO b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((() -> IO b) -> () -> IO b
forall a b. (a -> b) -> a -> b
$ ())) (Vector IndirectCommandsLayoutTokenEXT
tokens)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr IndirectCommandsLayoutTokenEXT)
-> Ptr IndirectCommandsLayoutTokenEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (IndirectCommandsLayoutCreateInfoEXT es)
p Ptr (IndirectCommandsLayoutCreateInfoEXT es)
-> Int -> Ptr (Ptr IndirectCommandsLayoutTokenEXT)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr (Ptr IndirectCommandsLayoutTokenEXT))) (Ptr IndirectCommandsLayoutTokenEXT
pPTokens')
    IO b -> ContT b IO b
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO b -> ContT b IO b) -> IO b -> ContT b IO b
forall a b. (a -> b) -> a -> b
$ IO b
f
  cStructSize :: Int
cStructSize = Int
56
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b.
Ptr (IndirectCommandsLayoutCreateInfoEXT es) -> IO b -> IO b
pokeZeroCStruct Ptr (IndirectCommandsLayoutCreateInfoEXT es)
p IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (IndirectCommandsLayoutCreateInfoEXT es)
p Ptr (IndirectCommandsLayoutCreateInfoEXT es)
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_EXT)
    Ptr ()
pNext' <- (Ptr (Chain es) -> Ptr ())
-> ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ())
forall a b. (a -> b) -> ContT b IO a -> ContT b IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Ptr (Chain es) -> Ptr ()
forall a b. Ptr a -> Ptr b
castPtr (ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ()))
-> (((Ptr (Chain es) -> IO b) -> IO b)
    -> ContT b IO (Ptr (Chain es)))
-> ((Ptr (Chain es) -> IO b) -> IO b)
-> ContT b IO (Ptr ())
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr (Chain es))
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr ()))
-> ((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr ())
forall a b. (a -> b) -> a -> b
$ forall (es :: [*]) a.
PokeChain es =>
(Ptr (Chain es) -> IO a) -> IO a
withZeroChain @es
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (IndirectCommandsLayoutCreateInfoEXT es)
p Ptr (IndirectCommandsLayoutCreateInfoEXT es) -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) Ptr ()
pNext'
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr ShaderStageFlags -> ShaderStageFlags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (IndirectCommandsLayoutCreateInfoEXT es)
p Ptr (IndirectCommandsLayoutCreateInfoEXT es)
-> Int -> Ptr ShaderStageFlags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr ShaderStageFlags)) (ShaderStageFlags
forall a. Zero a => a
zero)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (IndirectCommandsLayoutCreateInfoEXT es)
p Ptr (IndirectCommandsLayoutCreateInfoEXT es) -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Word32)) (Flags
forall a. Zero a => a
zero)
    IO b -> ContT b IO b
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO b -> ContT b IO b) -> IO b -> ContT b IO b
forall a b. (a -> b) -> a -> b
$ IO b
f

instance es ~ '[] => Zero (IndirectCommandsLayoutCreateInfoEXT es) where
  zero :: IndirectCommandsLayoutCreateInfoEXT es
zero = Chain es
-> IndirectCommandsLayoutUsageFlagsEXT
-> ShaderStageFlags
-> Flags
-> PipelineLayout
-> Vector IndirectCommandsLayoutTokenEXT
-> IndirectCommandsLayoutCreateInfoEXT es
forall (es :: [*]).
Chain es
-> IndirectCommandsLayoutUsageFlagsEXT
-> ShaderStageFlags
-> Flags
-> PipelineLayout
-> Vector IndirectCommandsLayoutTokenEXT
-> IndirectCommandsLayoutCreateInfoEXT es
IndirectCommandsLayoutCreateInfoEXT
           ()
           IndirectCommandsLayoutUsageFlagsEXT
forall a. Zero a => a
zero
           ShaderStageFlags
forall a. Zero a => a
zero
           Flags
forall a. Zero a => a
zero
           PipelineLayout
forall a. Zero a => a
zero
           Vector IndirectCommandsLayoutTokenEXT
forall a. Monoid a => a
mempty


-- | VkIndirectCommandsLayoutTokenEXT - Struct specifying the details of an
-- indirect command layout token
--
-- == Valid Usage
--
-- -   #VUID-VkIndirectCommandsLayoutTokenEXT-offset-11124# @offset@ /must/
--     be less than or equal to
--     'PhysicalDeviceDeviceGeneratedCommandsPropertiesEXT'::@maxIndirectCommandsTokenOffset@
--
-- -   #VUID-VkIndirectCommandsLayoutTokenEXT-offset-11125# @offset@ /must/
--     be aligned to @4@
--
-- -   #VUID-VkIndirectCommandsLayoutTokenEXT-meshShader-11126# If
--     <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#features-meshShader meshShader>
--     or
--     <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#features-taskShader taskShader>
--     are not enabled, @type@ /must/ not be
--     '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' or
--     'INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_COUNT_NV_EXT'
--
-- -   #VUID-VkIndirectCommandsLayoutTokenEXT-rayTracingMaintenance1-11128#
--     If the
--     <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#features-rayTracingMaintenance1 rayTracingMaintenance1>
--     feature is not enabled, @type@ /must/ not be
--     'INDIRECT_COMMANDS_TOKEN_TYPE_TRACE_RAYS2_EXT'
--
-- -   #VUID-VkIndirectCommandsLayoutTokenEXT-deviceGeneratedCommandsMultiDrawIndirectCount-11129#
--     If
--     <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#limits-deviceGeneratedCommandsMultiDrawIndirectCount ::deviceGeneratedCommandsMultiDrawIndirectCount>
--     is not supported, @type@ /must/ not be
--     'INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_COUNT_EXT' or
--     'INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_COUNT_EXT'
--
-- -   #VUID-VkIndirectCommandsLayoutTokenEXT-deviceGeneratedCommandsMultiDrawIndirectCount-11130#
--     If
--     <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#limits-deviceGeneratedCommandsMultiDrawIndirectCount ::deviceGeneratedCommandsMultiDrawIndirectCount>
--     is not supported, @type@ /must/ not be
--     'INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_COUNT_EXT'
--
-- -   #VUID-VkIndirectCommandsLayoutTokenEXT-deviceGeneratedCommandsMultiDrawIndirectCount-11131#
--     If
--     <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#limits-deviceGeneratedCommandsMultiDrawIndirectCount ::deviceGeneratedCommandsMultiDrawIndirectCount>
--     is not supported, @type@ /must/ not be
--     'INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_COUNT_NV_EXT'
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkIndirectCommandsLayoutTokenEXT-sType-sType# @sType@ /must/
--     be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_EXT'
--
-- -   #VUID-VkIndirectCommandsLayoutTokenEXT-type-parameter# @type@ /must/
--     be a valid 'IndirectCommandsTokenTypeEXT' value
--
-- -   #VUID-VkIndirectCommandsLayoutTokenEXT-pPushConstant-parameter# If
--     @type@ is
--     'INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_EXT',VK_INDIRECT_COMMANDS_TOKEN_TYPE_SEQUENCE_INDEX_EXT,
--     the @pPushConstant@ member of @data@ /must/ be a valid pointer to a
--     valid 'IndirectCommandsPushConstantTokenEXT' structure
--
-- -   #VUID-VkIndirectCommandsLayoutTokenEXT-pVertexBuffer-parameter# If
--     @type@ is 'INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_EXT', the
--     @pVertexBuffer@ member of @data@ /must/ be a valid pointer to a
--     valid 'IndirectCommandsVertexBufferTokenEXT' structure
--
-- -   #VUID-VkIndirectCommandsLayoutTokenEXT-pIndexBuffer-parameter# If
--     @type@ is 'INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_EXT', the
--     @pIndexBuffer@ member of @data@ /must/ be a valid pointer to a valid
--     'IndirectCommandsIndexBufferTokenEXT' structure
--
-- -   #VUID-VkIndirectCommandsLayoutTokenEXT-pExecutionSet-parameter# If
--     @type@ is 'INDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT', the
--     @pExecutionSet@ member of @data@ /must/ be a valid pointer to a
--     valid 'IndirectCommandsExecutionSetTokenEXT' structure
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_device_generated_commands VK_EXT_device_generated_commands>,
-- 'IndirectCommandsLayoutCreateInfoEXT', 'IndirectCommandsTokenDataEXT',
-- 'IndirectCommandsTokenTypeEXT',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data IndirectCommandsLayoutTokenEXT = IndirectCommandsLayoutTokenEXT
  { -- | @type@ specifies the 'IndirectCommandsTokenTypeEXT' for @data@.
    IndirectCommandsLayoutTokenEXT -> IndirectCommandsTokenTypeEXT
type' :: IndirectCommandsTokenTypeEXT
  , -- | @data@ specifies a 'IndirectCommandsTokenDataEXT' containing
    -- token-specific details for command execution. It is ignored if @type@
    -- does not match any member of the 'IndirectCommandsTokenDataEXT' union.
    IndirectCommandsLayoutTokenEXT -> IndirectCommandsTokenDataEXT
data' :: IndirectCommandsTokenDataEXT
  , -- | @offset@ is the relative byte offset for the token within one sequence
    -- of the indirect buffer. The data stored at that offset is the command
    -- data for the token, e.g.
    -- 'Vulkan.Core10.OtherTypes.DispatchIndirectCommand'.
    IndirectCommandsLayoutTokenEXT -> Flags
offset :: Word32
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (IndirectCommandsLayoutTokenEXT)
#endif
deriving instance Show IndirectCommandsLayoutTokenEXT

instance ToCStruct IndirectCommandsLayoutTokenEXT where
  withCStruct :: forall b.
IndirectCommandsLayoutTokenEXT
-> (Ptr IndirectCommandsLayoutTokenEXT -> IO b) -> IO b
withCStruct IndirectCommandsLayoutTokenEXT
x Ptr IndirectCommandsLayoutTokenEXT -> IO b
f = Int -> (Ptr IndirectCommandsLayoutTokenEXT -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
40 ((Ptr IndirectCommandsLayoutTokenEXT -> IO b) -> IO b)
-> (Ptr IndirectCommandsLayoutTokenEXT -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr IndirectCommandsLayoutTokenEXT
p -> Ptr IndirectCommandsLayoutTokenEXT
-> IndirectCommandsLayoutTokenEXT -> IO b -> IO b
forall b.
Ptr IndirectCommandsLayoutTokenEXT
-> IndirectCommandsLayoutTokenEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr IndirectCommandsLayoutTokenEXT
p IndirectCommandsLayoutTokenEXT
x (Ptr IndirectCommandsLayoutTokenEXT -> IO b
f Ptr IndirectCommandsLayoutTokenEXT
p)
  pokeCStruct :: forall b.
Ptr IndirectCommandsLayoutTokenEXT
-> IndirectCommandsLayoutTokenEXT -> IO b -> IO b
pokeCStruct Ptr IndirectCommandsLayoutTokenEXT
p IndirectCommandsLayoutTokenEXT{Flags
IndirectCommandsTokenTypeEXT
IndirectCommandsTokenDataEXT
$sel:type':IndirectCommandsLayoutTokenEXT :: IndirectCommandsLayoutTokenEXT -> IndirectCommandsTokenTypeEXT
$sel:data':IndirectCommandsLayoutTokenEXT :: IndirectCommandsLayoutTokenEXT -> IndirectCommandsTokenDataEXT
$sel:offset:IndirectCommandsLayoutTokenEXT :: IndirectCommandsLayoutTokenEXT -> Flags
type' :: IndirectCommandsTokenTypeEXT
data' :: IndirectCommandsTokenDataEXT
offset :: Flags
..} IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectCommandsLayoutTokenEXT
p Ptr IndirectCommandsLayoutTokenEXT -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_EXT)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectCommandsLayoutTokenEXT
p Ptr IndirectCommandsLayoutTokenEXT -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr IndirectCommandsTokenTypeEXT
-> IndirectCommandsTokenTypeEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectCommandsLayoutTokenEXT
p Ptr IndirectCommandsLayoutTokenEXT
-> Int -> Ptr IndirectCommandsTokenTypeEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr IndirectCommandsTokenTypeEXT)) (IndirectCommandsTokenTypeEXT
type')
    ((() -> IO b) -> IO b) -> ContT b IO ()
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((() -> IO b) -> IO b) -> ContT b IO ())
-> ((() -> IO b) -> IO b) -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr IndirectCommandsTokenDataEXT
-> IndirectCommandsTokenDataEXT -> IO b -> IO b
forall b.
Ptr IndirectCommandsTokenDataEXT
-> IndirectCommandsTokenDataEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct ((Ptr IndirectCommandsLayoutTokenEXT
p Ptr IndirectCommandsLayoutTokenEXT
-> Int -> Ptr IndirectCommandsTokenDataEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr IndirectCommandsTokenDataEXT)) (IndirectCommandsTokenDataEXT
data') (IO b -> IO b) -> ((() -> IO b) -> IO b) -> (() -> IO b) -> IO b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((() -> IO b) -> () -> IO b
forall a b. (a -> b) -> a -> b
$ ())
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectCommandsLayoutTokenEXT
p Ptr IndirectCommandsLayoutTokenEXT -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr Word32)) (Flags
offset)
    IO b -> ContT b IO b
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO b -> ContT b IO b) -> IO b -> ContT b IO b
forall a b. (a -> b) -> a -> b
$ IO b
f
  cStructSize :: Int
cStructSize = Int
40
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b. Ptr IndirectCommandsLayoutTokenEXT -> IO b -> IO b
pokeZeroCStruct Ptr IndirectCommandsLayoutTokenEXT
p IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectCommandsLayoutTokenEXT
p Ptr IndirectCommandsLayoutTokenEXT -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_EXT)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectCommandsLayoutTokenEXT
p Ptr IndirectCommandsLayoutTokenEXT -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr IndirectCommandsTokenTypeEXT
-> IndirectCommandsTokenTypeEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectCommandsLayoutTokenEXT
p Ptr IndirectCommandsLayoutTokenEXT
-> Int -> Ptr IndirectCommandsTokenTypeEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr IndirectCommandsTokenTypeEXT)) (IndirectCommandsTokenTypeEXT
forall a. Zero a => a
zero)
    ((() -> IO b) -> IO b) -> ContT b IO ()
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((() -> IO b) -> IO b) -> ContT b IO ())
-> ((() -> IO b) -> IO b) -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr IndirectCommandsTokenDataEXT
-> IndirectCommandsTokenDataEXT -> IO b -> IO b
forall b.
Ptr IndirectCommandsTokenDataEXT
-> IndirectCommandsTokenDataEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct ((Ptr IndirectCommandsLayoutTokenEXT
p Ptr IndirectCommandsLayoutTokenEXT
-> Int -> Ptr IndirectCommandsTokenDataEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr IndirectCommandsTokenDataEXT)) (IndirectCommandsTokenDataEXT
forall a. Zero a => a
zero) (IO b -> IO b) -> ((() -> IO b) -> IO b) -> (() -> IO b) -> IO b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((() -> IO b) -> () -> IO b
forall a b. (a -> b) -> a -> b
$ ())
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectCommandsLayoutTokenEXT
p Ptr IndirectCommandsLayoutTokenEXT -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr Word32)) (Flags
forall a. Zero a => a
zero)
    IO b -> ContT b IO b
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO b -> ContT b IO b) -> IO b -> ContT b IO b
forall a b. (a -> b) -> a -> b
$ IO b
f

instance Zero IndirectCommandsLayoutTokenEXT where
  zero :: IndirectCommandsLayoutTokenEXT
zero = IndirectCommandsTokenTypeEXT
-> IndirectCommandsTokenDataEXT
-> Flags
-> IndirectCommandsLayoutTokenEXT
IndirectCommandsLayoutTokenEXT
           IndirectCommandsTokenTypeEXT
forall a. Zero a => a
zero
           IndirectCommandsTokenDataEXT
forall a. Zero a => a
zero
           Flags
forall a. Zero a => a
zero


-- | 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
--
-- -   #VUID-VkDrawIndirectCountIndirectCommandEXT-None-11122# The buffer’s
--     usage flag from which the address was acquired /must/ have the
--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'
--     bit set
--
-- -   #VUID-VkDrawIndirectCountIndirectCommandEXT-None-11123# 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
--     'Vulkan.Core10.Handles.DeviceMemory' object
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_device_generated_commands VK_EXT_device_generated_commands>,
-- 'Vulkan.Core10.FundamentalTypes.DeviceAddress'
data DrawIndirectCountIndirectCommandEXT = DrawIndirectCountIndirectCommandEXT
  { -- | @bufferAddress@ specifies a physical address of the
    -- 'Vulkan.Core10.Handles.Buffer' used for draw commands.
    DrawIndirectCountIndirectCommandEXT -> DeviceAddress
bufferAddress :: DeviceAddress
  , -- | @stride@ is the byte size stride for the command arguments
    DrawIndirectCountIndirectCommandEXT -> Flags
stride :: Word32
  , -- | @commandCount@ is the number of commands to execute
    DrawIndirectCountIndirectCommandEXT -> Flags
commandCount :: Word32
  }
  deriving (Typeable, DrawIndirectCountIndirectCommandEXT
-> DrawIndirectCountIndirectCommandEXT -> "isPreprocessed" ::: Bool
(DrawIndirectCountIndirectCommandEXT
 -> DrawIndirectCountIndirectCommandEXT
 -> "isPreprocessed" ::: Bool)
-> (DrawIndirectCountIndirectCommandEXT
    -> DrawIndirectCountIndirectCommandEXT
    -> "isPreprocessed" ::: Bool)
-> Eq DrawIndirectCountIndirectCommandEXT
forall a.
(a -> a -> "isPreprocessed" ::: Bool)
-> (a -> a -> "isPreprocessed" ::: Bool) -> Eq a
$c== :: DrawIndirectCountIndirectCommandEXT
-> DrawIndirectCountIndirectCommandEXT -> "isPreprocessed" ::: Bool
== :: DrawIndirectCountIndirectCommandEXT
-> DrawIndirectCountIndirectCommandEXT -> "isPreprocessed" ::: Bool
$c/= :: DrawIndirectCountIndirectCommandEXT
-> DrawIndirectCountIndirectCommandEXT -> "isPreprocessed" ::: Bool
/= :: DrawIndirectCountIndirectCommandEXT
-> DrawIndirectCountIndirectCommandEXT -> "isPreprocessed" ::: Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DrawIndirectCountIndirectCommandEXT)
#endif
deriving instance Show DrawIndirectCountIndirectCommandEXT

instance ToCStruct DrawIndirectCountIndirectCommandEXT where
  withCStruct :: forall b.
DrawIndirectCountIndirectCommandEXT
-> (Ptr DrawIndirectCountIndirectCommandEXT -> IO b) -> IO b
withCStruct DrawIndirectCountIndirectCommandEXT
x Ptr DrawIndirectCountIndirectCommandEXT -> IO b
f = Int -> (Ptr DrawIndirectCountIndirectCommandEXT -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
16 ((Ptr DrawIndirectCountIndirectCommandEXT -> IO b) -> IO b)
-> (Ptr DrawIndirectCountIndirectCommandEXT -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr DrawIndirectCountIndirectCommandEXT
p -> Ptr DrawIndirectCountIndirectCommandEXT
-> DrawIndirectCountIndirectCommandEXT -> IO b -> IO b
forall b.
Ptr DrawIndirectCountIndirectCommandEXT
-> DrawIndirectCountIndirectCommandEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr DrawIndirectCountIndirectCommandEXT
p DrawIndirectCountIndirectCommandEXT
x (Ptr DrawIndirectCountIndirectCommandEXT -> IO b
f Ptr DrawIndirectCountIndirectCommandEXT
p)
  pokeCStruct :: forall b.
Ptr DrawIndirectCountIndirectCommandEXT
-> DrawIndirectCountIndirectCommandEXT -> IO b -> IO b
pokeCStruct Ptr DrawIndirectCountIndirectCommandEXT
p DrawIndirectCountIndirectCommandEXT{Flags
DeviceAddress
$sel:bufferAddress:DrawIndirectCountIndirectCommandEXT :: DrawIndirectCountIndirectCommandEXT -> DeviceAddress
$sel:stride:DrawIndirectCountIndirectCommandEXT :: DrawIndirectCountIndirectCommandEXT -> Flags
$sel:commandCount:DrawIndirectCountIndirectCommandEXT :: DrawIndirectCountIndirectCommandEXT -> Flags
bufferAddress :: DeviceAddress
stride :: Flags
commandCount :: Flags
..} IO b
f = do
    Ptr DeviceAddress -> DeviceAddress -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DrawIndirectCountIndirectCommandEXT
p Ptr DrawIndirectCountIndirectCommandEXT -> Int -> Ptr DeviceAddress
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr DeviceAddress)) (DeviceAddress
bufferAddress)
    Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DrawIndirectCountIndirectCommandEXT
p Ptr DrawIndirectCountIndirectCommandEXT -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr Word32)) (Flags
stride)
    Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DrawIndirectCountIndirectCommandEXT
p Ptr DrawIndirectCountIndirectCommandEXT -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
12 :: Ptr Word32)) (Flags
commandCount)
    IO b
f
  cStructSize :: Int
cStructSize = Int
16
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b. Ptr DrawIndirectCountIndirectCommandEXT -> IO b -> IO b
pokeZeroCStruct Ptr DrawIndirectCountIndirectCommandEXT
p IO b
f = do
    Ptr DeviceAddress -> DeviceAddress -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DrawIndirectCountIndirectCommandEXT
p Ptr DrawIndirectCountIndirectCommandEXT -> Int -> Ptr DeviceAddress
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr DeviceAddress)) (DeviceAddress
forall a. Zero a => a
zero)
    Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DrawIndirectCountIndirectCommandEXT
p Ptr DrawIndirectCountIndirectCommandEXT -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr Word32)) (Flags
forall a. Zero a => a
zero)
    Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DrawIndirectCountIndirectCommandEXT
p Ptr DrawIndirectCountIndirectCommandEXT -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
12 :: Ptr Word32)) (Flags
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct DrawIndirectCountIndirectCommandEXT where
  peekCStruct :: Ptr DrawIndirectCountIndirectCommandEXT
-> IO DrawIndirectCountIndirectCommandEXT
peekCStruct Ptr DrawIndirectCountIndirectCommandEXT
p = do
    DeviceAddress
bufferAddress <- forall a. Storable a => Ptr a -> IO a
peek @DeviceAddress ((Ptr DrawIndirectCountIndirectCommandEXT
p Ptr DrawIndirectCountIndirectCommandEXT -> Int -> Ptr DeviceAddress
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr DeviceAddress))
    Flags
stride <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr DrawIndirectCountIndirectCommandEXT
p Ptr DrawIndirectCountIndirectCommandEXT -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr Word32))
    Flags
commandCount <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr DrawIndirectCountIndirectCommandEXT
p Ptr DrawIndirectCountIndirectCommandEXT -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
12 :: Ptr Word32))
    DrawIndirectCountIndirectCommandEXT
-> IO DrawIndirectCountIndirectCommandEXT
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (DrawIndirectCountIndirectCommandEXT
 -> IO DrawIndirectCountIndirectCommandEXT)
-> DrawIndirectCountIndirectCommandEXT
-> IO DrawIndirectCountIndirectCommandEXT
forall a b. (a -> b) -> a -> b
$ DeviceAddress
-> Flags -> Flags -> DrawIndirectCountIndirectCommandEXT
DrawIndirectCountIndirectCommandEXT
             DeviceAddress
bufferAddress Flags
stride Flags
commandCount

instance Storable DrawIndirectCountIndirectCommandEXT where
  sizeOf :: DrawIndirectCountIndirectCommandEXT -> Int
sizeOf ~DrawIndirectCountIndirectCommandEXT
_ = Int
16
  alignment :: DrawIndirectCountIndirectCommandEXT -> Int
alignment ~DrawIndirectCountIndirectCommandEXT
_ = Int
8
  peek :: Ptr DrawIndirectCountIndirectCommandEXT
-> IO DrawIndirectCountIndirectCommandEXT
peek = Ptr DrawIndirectCountIndirectCommandEXT
-> IO DrawIndirectCountIndirectCommandEXT
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct
  poke :: Ptr DrawIndirectCountIndirectCommandEXT
-> DrawIndirectCountIndirectCommandEXT -> IO ()
poke Ptr DrawIndirectCountIndirectCommandEXT
ptr DrawIndirectCountIndirectCommandEXT
poked = Ptr DrawIndirectCountIndirectCommandEXT
-> DrawIndirectCountIndirectCommandEXT -> IO () -> IO ()
forall b.
Ptr DrawIndirectCountIndirectCommandEXT
-> DrawIndirectCountIndirectCommandEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr DrawIndirectCountIndirectCommandEXT
ptr DrawIndirectCountIndirectCommandEXT
poked (() -> IO ()
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ())

instance Zero DrawIndirectCountIndirectCommandEXT where
  zero :: DrawIndirectCountIndirectCommandEXT
zero = DeviceAddress
-> Flags -> Flags -> DrawIndirectCountIndirectCommandEXT
DrawIndirectCountIndirectCommandEXT
           DeviceAddress
forall a. Zero a => a
zero
           Flags
forall a. Zero a => a
zero
           Flags
forall a. Zero a => a
zero


-- | VkIndirectCommandsVertexBufferTokenEXT - Structure specifying layout
-- token info for a single index buffer command token
--
-- == Valid Usage
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_device_generated_commands VK_EXT_device_generated_commands>,
-- 'IndirectCommandsTokenDataEXT'
data IndirectCommandsVertexBufferTokenEXT = IndirectCommandsVertexBufferTokenEXT
  { -- | @vertexBindingUnit@ is the vertex input binding number to be bound.
    --
    -- #VUID-VkIndirectCommandsVertexBufferTokenEXT-vertexBindingUnit-11134#
    -- @vertexBindingUnit@ /must/ be less than the total number of vertex input
    -- bindings in use by the current graphics state
    IndirectCommandsVertexBufferTokenEXT -> Flags
vertexBindingUnit :: Word32 }
  deriving (Typeable, IndirectCommandsVertexBufferTokenEXT
-> IndirectCommandsVertexBufferTokenEXT
-> "isPreprocessed" ::: Bool
(IndirectCommandsVertexBufferTokenEXT
 -> IndirectCommandsVertexBufferTokenEXT
 -> "isPreprocessed" ::: Bool)
-> (IndirectCommandsVertexBufferTokenEXT
    -> IndirectCommandsVertexBufferTokenEXT
    -> "isPreprocessed" ::: Bool)
-> Eq IndirectCommandsVertexBufferTokenEXT
forall a.
(a -> a -> "isPreprocessed" ::: Bool)
-> (a -> a -> "isPreprocessed" ::: Bool) -> Eq a
$c== :: IndirectCommandsVertexBufferTokenEXT
-> IndirectCommandsVertexBufferTokenEXT
-> "isPreprocessed" ::: Bool
== :: IndirectCommandsVertexBufferTokenEXT
-> IndirectCommandsVertexBufferTokenEXT
-> "isPreprocessed" ::: Bool
$c/= :: IndirectCommandsVertexBufferTokenEXT
-> IndirectCommandsVertexBufferTokenEXT
-> "isPreprocessed" ::: Bool
/= :: IndirectCommandsVertexBufferTokenEXT
-> IndirectCommandsVertexBufferTokenEXT
-> "isPreprocessed" ::: Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (IndirectCommandsVertexBufferTokenEXT)
#endif
deriving instance Show IndirectCommandsVertexBufferTokenEXT

instance ToCStruct IndirectCommandsVertexBufferTokenEXT where
  withCStruct :: forall b.
IndirectCommandsVertexBufferTokenEXT
-> (Ptr IndirectCommandsVertexBufferTokenEXT -> IO b) -> IO b
withCStruct IndirectCommandsVertexBufferTokenEXT
x Ptr IndirectCommandsVertexBufferTokenEXT -> IO b
f = Int -> (Ptr IndirectCommandsVertexBufferTokenEXT -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
4 ((Ptr IndirectCommandsVertexBufferTokenEXT -> IO b) -> IO b)
-> (Ptr IndirectCommandsVertexBufferTokenEXT -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr IndirectCommandsVertexBufferTokenEXT
p -> Ptr IndirectCommandsVertexBufferTokenEXT
-> IndirectCommandsVertexBufferTokenEXT -> IO b -> IO b
forall b.
Ptr IndirectCommandsVertexBufferTokenEXT
-> IndirectCommandsVertexBufferTokenEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr IndirectCommandsVertexBufferTokenEXT
p IndirectCommandsVertexBufferTokenEXT
x (Ptr IndirectCommandsVertexBufferTokenEXT -> IO b
f Ptr IndirectCommandsVertexBufferTokenEXT
p)
  pokeCStruct :: forall b.
Ptr IndirectCommandsVertexBufferTokenEXT
-> IndirectCommandsVertexBufferTokenEXT -> IO b -> IO b
pokeCStruct Ptr IndirectCommandsVertexBufferTokenEXT
p IndirectCommandsVertexBufferTokenEXT{Flags
$sel:vertexBindingUnit:IndirectCommandsVertexBufferTokenEXT :: IndirectCommandsVertexBufferTokenEXT -> Flags
vertexBindingUnit :: Flags
..} IO b
f = do
    Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectCommandsVertexBufferTokenEXT
p Ptr IndirectCommandsVertexBufferTokenEXT -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Word32)) (Flags
vertexBindingUnit)
    IO b
f
  cStructSize :: Int
cStructSize = Int
4
  cStructAlignment :: Int
cStructAlignment = Int
4
  pokeZeroCStruct :: forall b. Ptr IndirectCommandsVertexBufferTokenEXT -> IO b -> IO b
pokeZeroCStruct Ptr IndirectCommandsVertexBufferTokenEXT
p IO b
f = do
    Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectCommandsVertexBufferTokenEXT
p Ptr IndirectCommandsVertexBufferTokenEXT -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Word32)) (Flags
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct IndirectCommandsVertexBufferTokenEXT where
  peekCStruct :: Ptr IndirectCommandsVertexBufferTokenEXT
-> IO IndirectCommandsVertexBufferTokenEXT
peekCStruct Ptr IndirectCommandsVertexBufferTokenEXT
p = do
    Flags
vertexBindingUnit <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr IndirectCommandsVertexBufferTokenEXT
p Ptr IndirectCommandsVertexBufferTokenEXT -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Word32))
    IndirectCommandsVertexBufferTokenEXT
-> IO IndirectCommandsVertexBufferTokenEXT
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (IndirectCommandsVertexBufferTokenEXT
 -> IO IndirectCommandsVertexBufferTokenEXT)
-> IndirectCommandsVertexBufferTokenEXT
-> IO IndirectCommandsVertexBufferTokenEXT
forall a b. (a -> b) -> a -> b
$ Flags -> IndirectCommandsVertexBufferTokenEXT
IndirectCommandsVertexBufferTokenEXT
             Flags
vertexBindingUnit

instance Storable IndirectCommandsVertexBufferTokenEXT where
  sizeOf :: IndirectCommandsVertexBufferTokenEXT -> Int
sizeOf ~IndirectCommandsVertexBufferTokenEXT
_ = Int
4
  alignment :: IndirectCommandsVertexBufferTokenEXT -> Int
alignment ~IndirectCommandsVertexBufferTokenEXT
_ = Int
4
  peek :: Ptr IndirectCommandsVertexBufferTokenEXT
-> IO IndirectCommandsVertexBufferTokenEXT
peek = Ptr IndirectCommandsVertexBufferTokenEXT
-> IO IndirectCommandsVertexBufferTokenEXT
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct
  poke :: Ptr IndirectCommandsVertexBufferTokenEXT
-> IndirectCommandsVertexBufferTokenEXT -> IO ()
poke Ptr IndirectCommandsVertexBufferTokenEXT
ptr IndirectCommandsVertexBufferTokenEXT
poked = Ptr IndirectCommandsVertexBufferTokenEXT
-> IndirectCommandsVertexBufferTokenEXT -> IO () -> IO ()
forall b.
Ptr IndirectCommandsVertexBufferTokenEXT
-> IndirectCommandsVertexBufferTokenEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr IndirectCommandsVertexBufferTokenEXT
ptr IndirectCommandsVertexBufferTokenEXT
poked (() -> IO ()
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ())

instance Zero IndirectCommandsVertexBufferTokenEXT where
  zero :: IndirectCommandsVertexBufferTokenEXT
zero = Flags -> IndirectCommandsVertexBufferTokenEXT
IndirectCommandsVertexBufferTokenEXT
           Flags
forall a. Zero a => a
zero


-- | VkBindVertexBufferIndirectCommandEXT - Structure specifying input data
-- for a single vertex buffer command token
--
-- == Valid Usage
--
-- -   #VUID-VkBindVertexBufferIndirectCommandEXT-None-11120# The buffer’s
--     usage flag from which the address was acquired /must/ have the
--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_VERTEX_BUFFER_BIT'
--     bit set
--
-- -   #VUID-VkBindVertexBufferIndirectCommandEXT-None-11121# 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
--     'Vulkan.Core10.Handles.DeviceMemory' object
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_device_generated_commands VK_EXT_device_generated_commands>,
-- 'Vulkan.Core10.FundamentalTypes.DeviceAddress'
data BindVertexBufferIndirectCommandEXT = BindVertexBufferIndirectCommandEXT
  { -- | @bufferAddress@ specifies a physical address of the
    -- 'Vulkan.Core10.Handles.Buffer' used as vertex input binding.
    BindVertexBufferIndirectCommandEXT -> DeviceAddress
bufferAddress :: DeviceAddress
  , -- | @size@ is the byte size range which is available for this operation from
    -- the provided address.
    BindVertexBufferIndirectCommandEXT -> Flags
size :: Word32
  , -- | @stride@ is the byte size stride for this vertex input binding as in
    -- 'Vulkan.Core10.Pipeline.VertexInputBindingDescription'::@stride@.
    BindVertexBufferIndirectCommandEXT -> Flags
stride :: Word32
  }
  deriving (Typeable, BindVertexBufferIndirectCommandEXT
-> BindVertexBufferIndirectCommandEXT -> "isPreprocessed" ::: Bool
(BindVertexBufferIndirectCommandEXT
 -> BindVertexBufferIndirectCommandEXT -> "isPreprocessed" ::: Bool)
-> (BindVertexBufferIndirectCommandEXT
    -> BindVertexBufferIndirectCommandEXT -> "isPreprocessed" ::: Bool)
-> Eq BindVertexBufferIndirectCommandEXT
forall a.
(a -> a -> "isPreprocessed" ::: Bool)
-> (a -> a -> "isPreprocessed" ::: Bool) -> Eq a
$c== :: BindVertexBufferIndirectCommandEXT
-> BindVertexBufferIndirectCommandEXT -> "isPreprocessed" ::: Bool
== :: BindVertexBufferIndirectCommandEXT
-> BindVertexBufferIndirectCommandEXT -> "isPreprocessed" ::: Bool
$c/= :: BindVertexBufferIndirectCommandEXT
-> BindVertexBufferIndirectCommandEXT -> "isPreprocessed" ::: Bool
/= :: BindVertexBufferIndirectCommandEXT
-> BindVertexBufferIndirectCommandEXT -> "isPreprocessed" ::: Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (BindVertexBufferIndirectCommandEXT)
#endif
deriving instance Show BindVertexBufferIndirectCommandEXT

instance ToCStruct BindVertexBufferIndirectCommandEXT where
  withCStruct :: forall b.
BindVertexBufferIndirectCommandEXT
-> (Ptr BindVertexBufferIndirectCommandEXT -> IO b) -> IO b
withCStruct BindVertexBufferIndirectCommandEXT
x Ptr BindVertexBufferIndirectCommandEXT -> IO b
f = Int -> (Ptr BindVertexBufferIndirectCommandEXT -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
16 ((Ptr BindVertexBufferIndirectCommandEXT -> IO b) -> IO b)
-> (Ptr BindVertexBufferIndirectCommandEXT -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr BindVertexBufferIndirectCommandEXT
p -> Ptr BindVertexBufferIndirectCommandEXT
-> BindVertexBufferIndirectCommandEXT -> IO b -> IO b
forall b.
Ptr BindVertexBufferIndirectCommandEXT
-> BindVertexBufferIndirectCommandEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr BindVertexBufferIndirectCommandEXT
p BindVertexBufferIndirectCommandEXT
x (Ptr BindVertexBufferIndirectCommandEXT -> IO b
f Ptr BindVertexBufferIndirectCommandEXT
p)
  pokeCStruct :: forall b.
Ptr BindVertexBufferIndirectCommandEXT
-> BindVertexBufferIndirectCommandEXT -> IO b -> IO b
pokeCStruct Ptr BindVertexBufferIndirectCommandEXT
p BindVertexBufferIndirectCommandEXT{Flags
DeviceAddress
$sel:bufferAddress:BindVertexBufferIndirectCommandEXT :: BindVertexBufferIndirectCommandEXT -> DeviceAddress
$sel:size:BindVertexBufferIndirectCommandEXT :: BindVertexBufferIndirectCommandEXT -> Flags
$sel:stride:BindVertexBufferIndirectCommandEXT :: BindVertexBufferIndirectCommandEXT -> Flags
bufferAddress :: DeviceAddress
size :: Flags
stride :: Flags
..} IO b
f = do
    Ptr DeviceAddress -> DeviceAddress -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr BindVertexBufferIndirectCommandEXT
p Ptr BindVertexBufferIndirectCommandEXT -> Int -> Ptr DeviceAddress
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr DeviceAddress)) (DeviceAddress
bufferAddress)
    Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr BindVertexBufferIndirectCommandEXT
p Ptr BindVertexBufferIndirectCommandEXT -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr Word32)) (Flags
size)
    Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr BindVertexBufferIndirectCommandEXT
p Ptr BindVertexBufferIndirectCommandEXT -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
12 :: Ptr Word32)) (Flags
stride)
    IO b
f
  cStructSize :: Int
cStructSize = Int
16
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b. Ptr BindVertexBufferIndirectCommandEXT -> IO b -> IO b
pokeZeroCStruct Ptr BindVertexBufferIndirectCommandEXT
p IO b
f = do
    Ptr DeviceAddress -> DeviceAddress -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr BindVertexBufferIndirectCommandEXT
p Ptr BindVertexBufferIndirectCommandEXT -> Int -> Ptr DeviceAddress
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr DeviceAddress)) (DeviceAddress
forall a. Zero a => a
zero)
    Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr BindVertexBufferIndirectCommandEXT
p Ptr BindVertexBufferIndirectCommandEXT -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr Word32)) (Flags
forall a. Zero a => a
zero)
    Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr BindVertexBufferIndirectCommandEXT
p Ptr BindVertexBufferIndirectCommandEXT -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
12 :: Ptr Word32)) (Flags
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct BindVertexBufferIndirectCommandEXT where
  peekCStruct :: Ptr BindVertexBufferIndirectCommandEXT
-> IO BindVertexBufferIndirectCommandEXT
peekCStruct Ptr BindVertexBufferIndirectCommandEXT
p = do
    DeviceAddress
bufferAddress <- forall a. Storable a => Ptr a -> IO a
peek @DeviceAddress ((Ptr BindVertexBufferIndirectCommandEXT
p Ptr BindVertexBufferIndirectCommandEXT -> Int -> Ptr DeviceAddress
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr DeviceAddress))
    Flags
size <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr BindVertexBufferIndirectCommandEXT
p Ptr BindVertexBufferIndirectCommandEXT -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr Word32))
    Flags
stride <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr BindVertexBufferIndirectCommandEXT
p Ptr BindVertexBufferIndirectCommandEXT -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
12 :: Ptr Word32))
    BindVertexBufferIndirectCommandEXT
-> IO BindVertexBufferIndirectCommandEXT
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (BindVertexBufferIndirectCommandEXT
 -> IO BindVertexBufferIndirectCommandEXT)
-> BindVertexBufferIndirectCommandEXT
-> IO BindVertexBufferIndirectCommandEXT
forall a b. (a -> b) -> a -> b
$ DeviceAddress
-> Flags -> Flags -> BindVertexBufferIndirectCommandEXT
BindVertexBufferIndirectCommandEXT
             DeviceAddress
bufferAddress Flags
size Flags
stride

instance Storable BindVertexBufferIndirectCommandEXT where
  sizeOf :: BindVertexBufferIndirectCommandEXT -> Int
sizeOf ~BindVertexBufferIndirectCommandEXT
_ = Int
16
  alignment :: BindVertexBufferIndirectCommandEXT -> Int
alignment ~BindVertexBufferIndirectCommandEXT
_ = Int
8
  peek :: Ptr BindVertexBufferIndirectCommandEXT
-> IO BindVertexBufferIndirectCommandEXT
peek = Ptr BindVertexBufferIndirectCommandEXT
-> IO BindVertexBufferIndirectCommandEXT
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct
  poke :: Ptr BindVertexBufferIndirectCommandEXT
-> BindVertexBufferIndirectCommandEXT -> IO ()
poke Ptr BindVertexBufferIndirectCommandEXT
ptr BindVertexBufferIndirectCommandEXT
poked = Ptr BindVertexBufferIndirectCommandEXT
-> BindVertexBufferIndirectCommandEXT -> IO () -> IO ()
forall b.
Ptr BindVertexBufferIndirectCommandEXT
-> BindVertexBufferIndirectCommandEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr BindVertexBufferIndirectCommandEXT
ptr BindVertexBufferIndirectCommandEXT
poked (() -> IO ()
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ())

instance Zero BindVertexBufferIndirectCommandEXT where
  zero :: BindVertexBufferIndirectCommandEXT
zero = DeviceAddress
-> Flags -> Flags -> BindVertexBufferIndirectCommandEXT
BindVertexBufferIndirectCommandEXT
           DeviceAddress
forall a. Zero a => a
zero
           Flags
forall a. Zero a => a
zero
           Flags
forall a. Zero a => a
zero


-- | 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 'Vulkan.Core10.Enums.IndexType.IndexType'. It works as both
-- structs are otherwise binary compatible.
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_device_generated_commands VK_EXT_device_generated_commands>,
-- 'IndirectCommandsInputModeFlagBitsEXT', 'IndirectCommandsTokenDataEXT'
data IndirectCommandsIndexBufferTokenEXT = IndirectCommandsIndexBufferTokenEXT
  { -- | @mode@ specifies the mode to use with this token.
    --
    -- #VUID-VkIndirectCommandsIndexBufferTokenEXT-mode-11135# @mode@ /must/ be
    -- non-zero
    --
    -- #VUID-VkIndirectCommandsIndexBufferTokenEXT-mode-11136# @mode@ /must/ be
    -- one of the bits supported in
    -- <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#limits-supportedIndirectCommandsInputModes ::supportedIndirectCommandsInputModes>
    --
    -- #VUID-VkIndirectCommandsIndexBufferTokenEXT-mode-parameter# @mode@
    -- /must/ be a valid 'IndirectCommandsInputModeFlagBitsEXT' value
    IndirectCommandsIndexBufferTokenEXT
-> IndirectCommandsInputModeFlagsEXT
mode :: IndirectCommandsInputModeFlagBitsEXT }
  deriving (Typeable, IndirectCommandsIndexBufferTokenEXT
-> IndirectCommandsIndexBufferTokenEXT -> "isPreprocessed" ::: Bool
(IndirectCommandsIndexBufferTokenEXT
 -> IndirectCommandsIndexBufferTokenEXT
 -> "isPreprocessed" ::: Bool)
-> (IndirectCommandsIndexBufferTokenEXT
    -> IndirectCommandsIndexBufferTokenEXT
    -> "isPreprocessed" ::: Bool)
-> Eq IndirectCommandsIndexBufferTokenEXT
forall a.
(a -> a -> "isPreprocessed" ::: Bool)
-> (a -> a -> "isPreprocessed" ::: Bool) -> Eq a
$c== :: IndirectCommandsIndexBufferTokenEXT
-> IndirectCommandsIndexBufferTokenEXT -> "isPreprocessed" ::: Bool
== :: IndirectCommandsIndexBufferTokenEXT
-> IndirectCommandsIndexBufferTokenEXT -> "isPreprocessed" ::: Bool
$c/= :: IndirectCommandsIndexBufferTokenEXT
-> IndirectCommandsIndexBufferTokenEXT -> "isPreprocessed" ::: Bool
/= :: IndirectCommandsIndexBufferTokenEXT
-> IndirectCommandsIndexBufferTokenEXT -> "isPreprocessed" ::: Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (IndirectCommandsIndexBufferTokenEXT)
#endif
deriving instance Show IndirectCommandsIndexBufferTokenEXT

instance ToCStruct IndirectCommandsIndexBufferTokenEXT where
  withCStruct :: forall b.
IndirectCommandsIndexBufferTokenEXT
-> (Ptr IndirectCommandsIndexBufferTokenEXT -> IO b) -> IO b
withCStruct IndirectCommandsIndexBufferTokenEXT
x Ptr IndirectCommandsIndexBufferTokenEXT -> IO b
f = Int -> (Ptr IndirectCommandsIndexBufferTokenEXT -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
4 ((Ptr IndirectCommandsIndexBufferTokenEXT -> IO b) -> IO b)
-> (Ptr IndirectCommandsIndexBufferTokenEXT -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr IndirectCommandsIndexBufferTokenEXT
p -> Ptr IndirectCommandsIndexBufferTokenEXT
-> IndirectCommandsIndexBufferTokenEXT -> IO b -> IO b
forall b.
Ptr IndirectCommandsIndexBufferTokenEXT
-> IndirectCommandsIndexBufferTokenEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr IndirectCommandsIndexBufferTokenEXT
p IndirectCommandsIndexBufferTokenEXT
x (Ptr IndirectCommandsIndexBufferTokenEXT -> IO b
f Ptr IndirectCommandsIndexBufferTokenEXT
p)
  pokeCStruct :: forall b.
Ptr IndirectCommandsIndexBufferTokenEXT
-> IndirectCommandsIndexBufferTokenEXT -> IO b -> IO b
pokeCStruct Ptr IndirectCommandsIndexBufferTokenEXT
p IndirectCommandsIndexBufferTokenEXT{IndirectCommandsInputModeFlagsEXT
$sel:mode:IndirectCommandsIndexBufferTokenEXT :: IndirectCommandsIndexBufferTokenEXT
-> IndirectCommandsInputModeFlagsEXT
mode :: IndirectCommandsInputModeFlagsEXT
..} IO b
f = do
    Ptr IndirectCommandsInputModeFlagsEXT
-> IndirectCommandsInputModeFlagsEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectCommandsIndexBufferTokenEXT
p Ptr IndirectCommandsIndexBufferTokenEXT
-> Int -> Ptr IndirectCommandsInputModeFlagsEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr IndirectCommandsInputModeFlagBitsEXT)) (IndirectCommandsInputModeFlagsEXT
mode)
    IO b
f
  cStructSize :: Int
cStructSize = Int
4
  cStructAlignment :: Int
cStructAlignment = Int
4
  pokeZeroCStruct :: forall b. Ptr IndirectCommandsIndexBufferTokenEXT -> IO b -> IO b
pokeZeroCStruct Ptr IndirectCommandsIndexBufferTokenEXT
p IO b
f = do
    Ptr IndirectCommandsInputModeFlagsEXT
-> IndirectCommandsInputModeFlagsEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectCommandsIndexBufferTokenEXT
p Ptr IndirectCommandsIndexBufferTokenEXT
-> Int -> Ptr IndirectCommandsInputModeFlagsEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr IndirectCommandsInputModeFlagBitsEXT)) (IndirectCommandsInputModeFlagsEXT
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct IndirectCommandsIndexBufferTokenEXT where
  peekCStruct :: Ptr IndirectCommandsIndexBufferTokenEXT
-> IO IndirectCommandsIndexBufferTokenEXT
peekCStruct Ptr IndirectCommandsIndexBufferTokenEXT
p = do
    IndirectCommandsInputModeFlagsEXT
mode <- forall a. Storable a => Ptr a -> IO a
peek @IndirectCommandsInputModeFlagBitsEXT ((Ptr IndirectCommandsIndexBufferTokenEXT
p Ptr IndirectCommandsIndexBufferTokenEXT
-> Int -> Ptr IndirectCommandsInputModeFlagsEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr IndirectCommandsInputModeFlagBitsEXT))
    IndirectCommandsIndexBufferTokenEXT
-> IO IndirectCommandsIndexBufferTokenEXT
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (IndirectCommandsIndexBufferTokenEXT
 -> IO IndirectCommandsIndexBufferTokenEXT)
-> IndirectCommandsIndexBufferTokenEXT
-> IO IndirectCommandsIndexBufferTokenEXT
forall a b. (a -> b) -> a -> b
$ IndirectCommandsInputModeFlagsEXT
-> IndirectCommandsIndexBufferTokenEXT
IndirectCommandsIndexBufferTokenEXT
             IndirectCommandsInputModeFlagsEXT
mode

instance Storable IndirectCommandsIndexBufferTokenEXT where
  sizeOf :: IndirectCommandsIndexBufferTokenEXT -> Int
sizeOf ~IndirectCommandsIndexBufferTokenEXT
_ = Int
4
  alignment :: IndirectCommandsIndexBufferTokenEXT -> Int
alignment ~IndirectCommandsIndexBufferTokenEXT
_ = Int
4
  peek :: Ptr IndirectCommandsIndexBufferTokenEXT
-> IO IndirectCommandsIndexBufferTokenEXT
peek = Ptr IndirectCommandsIndexBufferTokenEXT
-> IO IndirectCommandsIndexBufferTokenEXT
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct
  poke :: Ptr IndirectCommandsIndexBufferTokenEXT
-> IndirectCommandsIndexBufferTokenEXT -> IO ()
poke Ptr IndirectCommandsIndexBufferTokenEXT
ptr IndirectCommandsIndexBufferTokenEXT
poked = Ptr IndirectCommandsIndexBufferTokenEXT
-> IndirectCommandsIndexBufferTokenEXT -> IO () -> IO ()
forall b.
Ptr IndirectCommandsIndexBufferTokenEXT
-> IndirectCommandsIndexBufferTokenEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr IndirectCommandsIndexBufferTokenEXT
ptr IndirectCommandsIndexBufferTokenEXT
poked (() -> IO ()
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ())

instance Zero IndirectCommandsIndexBufferTokenEXT where
  zero :: IndirectCommandsIndexBufferTokenEXT
zero = IndirectCommandsInputModeFlagsEXT
-> IndirectCommandsIndexBufferTokenEXT
IndirectCommandsIndexBufferTokenEXT
           IndirectCommandsInputModeFlagsEXT
forall a. Zero a => a
zero


-- | VkBindIndexBufferIndirectCommandEXT - Structure specifying input data
-- for a single index buffer command token
--
-- == Valid Usage
--
-- -   #VUID-VkBindIndexBufferIndirectCommandEXT-None-11117# The buffer’s
--     usage flags from which the address was acquired /must/ have the
--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDEX_BUFFER_BIT'
--     bit set
--
-- -   #VUID-VkBindIndexBufferIndirectCommandEXT-bufferAddress-11118# The
--     @bufferAddress@ /must/ be aligned to the
--     'Vulkan.Core10.Enums.IndexType.IndexType' of the @indexType@ used
--
-- -   #VUID-VkBindIndexBufferIndirectCommandEXT-None-11119# 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
--     'Vulkan.Core10.Handles.DeviceMemory' object
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkBindIndexBufferIndirectCommandEXT-indexType-parameter#
--     @indexType@ /must/ be a valid
--     'Vulkan.Core10.Enums.IndexType.IndexType' value
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_device_generated_commands VK_EXT_device_generated_commands>,
-- 'Vulkan.Core10.FundamentalTypes.DeviceAddress',
-- 'Vulkan.Core10.Enums.IndexType.IndexType'
data BindIndexBufferIndirectCommandEXT = BindIndexBufferIndirectCommandEXT
  { -- | @bufferAddress@ specifies a physical address of the
    -- 'Vulkan.Core10.Handles.Buffer' used as index buffer.
    BindIndexBufferIndirectCommandEXT -> DeviceAddress
bufferAddress :: DeviceAddress
  , -- | @size@ is the byte size range which is available for this operation from
    -- the provided address.
    BindIndexBufferIndirectCommandEXT -> Flags
size :: Word32
  , -- | @indexType@ is a 'Vulkan.Core10.Enums.IndexType.IndexType' value
    -- specifying how indices are treated.
    BindIndexBufferIndirectCommandEXT -> IndexType
indexType :: IndexType
  }
  deriving (Typeable, BindIndexBufferIndirectCommandEXT
-> BindIndexBufferIndirectCommandEXT -> "isPreprocessed" ::: Bool
(BindIndexBufferIndirectCommandEXT
 -> BindIndexBufferIndirectCommandEXT -> "isPreprocessed" ::: Bool)
-> (BindIndexBufferIndirectCommandEXT
    -> BindIndexBufferIndirectCommandEXT -> "isPreprocessed" ::: Bool)
-> Eq BindIndexBufferIndirectCommandEXT
forall a.
(a -> a -> "isPreprocessed" ::: Bool)
-> (a -> a -> "isPreprocessed" ::: Bool) -> Eq a
$c== :: BindIndexBufferIndirectCommandEXT
-> BindIndexBufferIndirectCommandEXT -> "isPreprocessed" ::: Bool
== :: BindIndexBufferIndirectCommandEXT
-> BindIndexBufferIndirectCommandEXT -> "isPreprocessed" ::: Bool
$c/= :: BindIndexBufferIndirectCommandEXT
-> BindIndexBufferIndirectCommandEXT -> "isPreprocessed" ::: Bool
/= :: BindIndexBufferIndirectCommandEXT
-> BindIndexBufferIndirectCommandEXT -> "isPreprocessed" ::: Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (BindIndexBufferIndirectCommandEXT)
#endif
deriving instance Show BindIndexBufferIndirectCommandEXT

instance ToCStruct BindIndexBufferIndirectCommandEXT where
  withCStruct :: forall b.
BindIndexBufferIndirectCommandEXT
-> (Ptr BindIndexBufferIndirectCommandEXT -> IO b) -> IO b
withCStruct BindIndexBufferIndirectCommandEXT
x Ptr BindIndexBufferIndirectCommandEXT -> IO b
f = Int -> (Ptr BindIndexBufferIndirectCommandEXT -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
16 ((Ptr BindIndexBufferIndirectCommandEXT -> IO b) -> IO b)
-> (Ptr BindIndexBufferIndirectCommandEXT -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr BindIndexBufferIndirectCommandEXT
p -> Ptr BindIndexBufferIndirectCommandEXT
-> BindIndexBufferIndirectCommandEXT -> IO b -> IO b
forall b.
Ptr BindIndexBufferIndirectCommandEXT
-> BindIndexBufferIndirectCommandEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr BindIndexBufferIndirectCommandEXT
p BindIndexBufferIndirectCommandEXT
x (Ptr BindIndexBufferIndirectCommandEXT -> IO b
f Ptr BindIndexBufferIndirectCommandEXT
p)
  pokeCStruct :: forall b.
Ptr BindIndexBufferIndirectCommandEXT
-> BindIndexBufferIndirectCommandEXT -> IO b -> IO b
pokeCStruct Ptr BindIndexBufferIndirectCommandEXT
p BindIndexBufferIndirectCommandEXT{Flags
DeviceAddress
IndexType
$sel:bufferAddress:BindIndexBufferIndirectCommandEXT :: BindIndexBufferIndirectCommandEXT -> DeviceAddress
$sel:size:BindIndexBufferIndirectCommandEXT :: BindIndexBufferIndirectCommandEXT -> Flags
$sel:indexType:BindIndexBufferIndirectCommandEXT :: BindIndexBufferIndirectCommandEXT -> IndexType
bufferAddress :: DeviceAddress
size :: Flags
indexType :: IndexType
..} IO b
f = do
    Ptr DeviceAddress -> DeviceAddress -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr BindIndexBufferIndirectCommandEXT
p Ptr BindIndexBufferIndirectCommandEXT -> Int -> Ptr DeviceAddress
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr DeviceAddress)) (DeviceAddress
bufferAddress)
    Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr BindIndexBufferIndirectCommandEXT
p Ptr BindIndexBufferIndirectCommandEXT -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr Word32)) (Flags
size)
    Ptr IndexType -> IndexType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr BindIndexBufferIndirectCommandEXT
p Ptr BindIndexBufferIndirectCommandEXT -> Int -> Ptr IndexType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
12 :: Ptr IndexType)) (IndexType
indexType)
    IO b
f
  cStructSize :: Int
cStructSize = Int
16
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b. Ptr BindIndexBufferIndirectCommandEXT -> IO b -> IO b
pokeZeroCStruct Ptr BindIndexBufferIndirectCommandEXT
p IO b
f = do
    Ptr DeviceAddress -> DeviceAddress -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr BindIndexBufferIndirectCommandEXT
p Ptr BindIndexBufferIndirectCommandEXT -> Int -> Ptr DeviceAddress
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr DeviceAddress)) (DeviceAddress
forall a. Zero a => a
zero)
    Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr BindIndexBufferIndirectCommandEXT
p Ptr BindIndexBufferIndirectCommandEXT -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr Word32)) (Flags
forall a. Zero a => a
zero)
    Ptr IndexType -> IndexType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr BindIndexBufferIndirectCommandEXT
p Ptr BindIndexBufferIndirectCommandEXT -> Int -> Ptr IndexType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
12 :: Ptr IndexType)) (IndexType
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct BindIndexBufferIndirectCommandEXT where
  peekCStruct :: Ptr BindIndexBufferIndirectCommandEXT
-> IO BindIndexBufferIndirectCommandEXT
peekCStruct Ptr BindIndexBufferIndirectCommandEXT
p = do
    DeviceAddress
bufferAddress <- forall a. Storable a => Ptr a -> IO a
peek @DeviceAddress ((Ptr BindIndexBufferIndirectCommandEXT
p Ptr BindIndexBufferIndirectCommandEXT -> Int -> Ptr DeviceAddress
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr DeviceAddress))
    Flags
size <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr BindIndexBufferIndirectCommandEXT
p Ptr BindIndexBufferIndirectCommandEXT -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr Word32))
    IndexType
indexType <- forall a. Storable a => Ptr a -> IO a
peek @IndexType ((Ptr BindIndexBufferIndirectCommandEXT
p Ptr BindIndexBufferIndirectCommandEXT -> Int -> Ptr IndexType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
12 :: Ptr IndexType))
    BindIndexBufferIndirectCommandEXT
-> IO BindIndexBufferIndirectCommandEXT
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (BindIndexBufferIndirectCommandEXT
 -> IO BindIndexBufferIndirectCommandEXT)
-> BindIndexBufferIndirectCommandEXT
-> IO BindIndexBufferIndirectCommandEXT
forall a b. (a -> b) -> a -> b
$ DeviceAddress
-> Flags -> IndexType -> BindIndexBufferIndirectCommandEXT
BindIndexBufferIndirectCommandEXT
             DeviceAddress
bufferAddress Flags
size IndexType
indexType

instance Storable BindIndexBufferIndirectCommandEXT where
  sizeOf :: BindIndexBufferIndirectCommandEXT -> Int
sizeOf ~BindIndexBufferIndirectCommandEXT
_ = Int
16
  alignment :: BindIndexBufferIndirectCommandEXT -> Int
alignment ~BindIndexBufferIndirectCommandEXT
_ = Int
8
  peek :: Ptr BindIndexBufferIndirectCommandEXT
-> IO BindIndexBufferIndirectCommandEXT
peek = Ptr BindIndexBufferIndirectCommandEXT
-> IO BindIndexBufferIndirectCommandEXT
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct
  poke :: Ptr BindIndexBufferIndirectCommandEXT
-> BindIndexBufferIndirectCommandEXT -> IO ()
poke Ptr BindIndexBufferIndirectCommandEXT
ptr BindIndexBufferIndirectCommandEXT
poked = Ptr BindIndexBufferIndirectCommandEXT
-> BindIndexBufferIndirectCommandEXT -> IO () -> IO ()
forall b.
Ptr BindIndexBufferIndirectCommandEXT
-> BindIndexBufferIndirectCommandEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr BindIndexBufferIndirectCommandEXT
ptr BindIndexBufferIndirectCommandEXT
poked (() -> IO ()
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ())

instance Zero BindIndexBufferIndirectCommandEXT where
  zero :: BindIndexBufferIndirectCommandEXT
zero = DeviceAddress
-> Flags -> IndexType -> BindIndexBufferIndirectCommandEXT
BindIndexBufferIndirectCommandEXT
           DeviceAddress
forall a. Zero a => a
zero
           Flags
forall a. Zero a => a
zero
           IndexType
forall a. Zero a => a
zero


-- | VkIndirectCommandsPushConstantTokenEXT - Structure specifying layout
-- token info for a single push constant command token
--
-- = Description
--
-- The @stageFlags@ member of @updateRange@ is ignored.
--
-- == Valid Usage
--
-- -   #VUID-VkIndirectCommandsPushConstantTokenEXT-updateRange-11132#
--     @updateRange@ /must/ be contained within the push constant info used
--     by 'IndirectCommandsLayoutCreateInfoEXT'
--
-- -   #VUID-VkIndirectCommandsPushConstantTokenEXT-size-11133# If the
--     token type is 'INDIRECT_COMMANDS_TOKEN_TYPE_SEQUENCE_INDEX_EXT', the
--     @size@ member of @updateRange@ /must/ be 4
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkIndirectCommandsPushConstantTokenEXT-updateRange-parameter#
--     @updateRange@ /must/ be a valid
--     'Vulkan.Core10.PipelineLayout.PushConstantRange' structure
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_device_generated_commands VK_EXT_device_generated_commands>,
-- 'IndirectCommandsTokenDataEXT',
-- 'Vulkan.Core10.PipelineLayout.PushConstantRange'
data IndirectCommandsPushConstantTokenEXT = IndirectCommandsPushConstantTokenEXT
  { -- | @updateRange@ is the push constant range that will be updated by the
    -- token.
    IndirectCommandsPushConstantTokenEXT -> PushConstantRange
updateRange :: PushConstantRange }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (IndirectCommandsPushConstantTokenEXT)
#endif
deriving instance Show IndirectCommandsPushConstantTokenEXT

instance ToCStruct IndirectCommandsPushConstantTokenEXT where
  withCStruct :: forall b.
IndirectCommandsPushConstantTokenEXT
-> (Ptr IndirectCommandsPushConstantTokenEXT -> IO b) -> IO b
withCStruct IndirectCommandsPushConstantTokenEXT
x Ptr IndirectCommandsPushConstantTokenEXT -> IO b
f = Int -> (Ptr IndirectCommandsPushConstantTokenEXT -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
12 ((Ptr IndirectCommandsPushConstantTokenEXT -> IO b) -> IO b)
-> (Ptr IndirectCommandsPushConstantTokenEXT -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr IndirectCommandsPushConstantTokenEXT
p -> Ptr IndirectCommandsPushConstantTokenEXT
-> IndirectCommandsPushConstantTokenEXT -> IO b -> IO b
forall b.
Ptr IndirectCommandsPushConstantTokenEXT
-> IndirectCommandsPushConstantTokenEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr IndirectCommandsPushConstantTokenEXT
p IndirectCommandsPushConstantTokenEXT
x (Ptr IndirectCommandsPushConstantTokenEXT -> IO b
f Ptr IndirectCommandsPushConstantTokenEXT
p)
  pokeCStruct :: forall b.
Ptr IndirectCommandsPushConstantTokenEXT
-> IndirectCommandsPushConstantTokenEXT -> IO b -> IO b
pokeCStruct Ptr IndirectCommandsPushConstantTokenEXT
p IndirectCommandsPushConstantTokenEXT{PushConstantRange
$sel:updateRange:IndirectCommandsPushConstantTokenEXT :: IndirectCommandsPushConstantTokenEXT -> PushConstantRange
updateRange :: PushConstantRange
..} IO b
f = do
    Ptr PushConstantRange -> PushConstantRange -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectCommandsPushConstantTokenEXT
p Ptr IndirectCommandsPushConstantTokenEXT
-> Int -> Ptr PushConstantRange
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr PushConstantRange)) (PushConstantRange
updateRange)
    IO b
f
  cStructSize :: Int
cStructSize = Int
12
  cStructAlignment :: Int
cStructAlignment = Int
4
  pokeZeroCStruct :: forall b. Ptr IndirectCommandsPushConstantTokenEXT -> IO b -> IO b
pokeZeroCStruct Ptr IndirectCommandsPushConstantTokenEXT
p IO b
f = do
    Ptr PushConstantRange -> PushConstantRange -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectCommandsPushConstantTokenEXT
p Ptr IndirectCommandsPushConstantTokenEXT
-> Int -> Ptr PushConstantRange
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr PushConstantRange)) (PushConstantRange
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct IndirectCommandsPushConstantTokenEXT where
  peekCStruct :: Ptr IndirectCommandsPushConstantTokenEXT
-> IO IndirectCommandsPushConstantTokenEXT
peekCStruct Ptr IndirectCommandsPushConstantTokenEXT
p = do
    PushConstantRange
updateRange <- forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @PushConstantRange ((Ptr IndirectCommandsPushConstantTokenEXT
p Ptr IndirectCommandsPushConstantTokenEXT
-> Int -> Ptr PushConstantRange
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr PushConstantRange))
    IndirectCommandsPushConstantTokenEXT
-> IO IndirectCommandsPushConstantTokenEXT
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (IndirectCommandsPushConstantTokenEXT
 -> IO IndirectCommandsPushConstantTokenEXT)
-> IndirectCommandsPushConstantTokenEXT
-> IO IndirectCommandsPushConstantTokenEXT
forall a b. (a -> b) -> a -> b
$ PushConstantRange -> IndirectCommandsPushConstantTokenEXT
IndirectCommandsPushConstantTokenEXT
             PushConstantRange
updateRange

instance Storable IndirectCommandsPushConstantTokenEXT where
  sizeOf :: IndirectCommandsPushConstantTokenEXT -> Int
sizeOf ~IndirectCommandsPushConstantTokenEXT
_ = Int
12
  alignment :: IndirectCommandsPushConstantTokenEXT -> Int
alignment ~IndirectCommandsPushConstantTokenEXT
_ = Int
4
  peek :: Ptr IndirectCommandsPushConstantTokenEXT
-> IO IndirectCommandsPushConstantTokenEXT
peek = Ptr IndirectCommandsPushConstantTokenEXT
-> IO IndirectCommandsPushConstantTokenEXT
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct
  poke :: Ptr IndirectCommandsPushConstantTokenEXT
-> IndirectCommandsPushConstantTokenEXT -> IO ()
poke Ptr IndirectCommandsPushConstantTokenEXT
ptr IndirectCommandsPushConstantTokenEXT
poked = Ptr IndirectCommandsPushConstantTokenEXT
-> IndirectCommandsPushConstantTokenEXT -> IO () -> IO ()
forall b.
Ptr IndirectCommandsPushConstantTokenEXT
-> IndirectCommandsPushConstantTokenEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr IndirectCommandsPushConstantTokenEXT
ptr IndirectCommandsPushConstantTokenEXT
poked (() -> IO ()
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ())

instance Zero IndirectCommandsPushConstantTokenEXT where
  zero :: IndirectCommandsPushConstantTokenEXT
zero = PushConstantRange -> IndirectCommandsPushConstantTokenEXT
IndirectCommandsPushConstantTokenEXT
           PushConstantRange
forall a. Zero a => a
zero


-- | VkIndirectCommandsExecutionSetTokenEXT - Structure specifying input data
-- for a single execution set command token
--
-- == Valid Usage
--
-- -   #VUID-VkIndirectCommandsExecutionSetTokenEXT-shaderStages-11137#
--     Each bit in @shaderStages@ /must/ be supported by
--     <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#limits-supportedIndirectCommandsShaderStagesPipelineBinding ::supportedIndirectCommandsShaderStagesPipelineBinding>
--     or
--     <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#limits-supportedIndirectCommandsShaderStagesShaderBinding ::supportedIndirectCommandsShaderStagesShaderBinding>
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkIndirectCommandsExecutionSetTokenEXT-type-parameter# @type@
--     /must/ be a valid 'IndirectExecutionSetInfoTypeEXT' value
--
-- -   #VUID-VkIndirectCommandsExecutionSetTokenEXT-shaderStages-parameter#
--     @shaderStages@ /must/ be a valid combination of
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits' values
--
-- -   #VUID-VkIndirectCommandsExecutionSetTokenEXT-shaderStages-requiredbitmask#
--     @shaderStages@ /must/ not be @0@
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_device_generated_commands VK_EXT_device_generated_commands>,
-- 'IndirectCommandsTokenDataEXT', 'IndirectExecutionSetInfoTypeEXT',
-- 'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlags'
data IndirectCommandsExecutionSetTokenEXT = IndirectCommandsExecutionSetTokenEXT
  { -- | @type@ describes the type of indirect execution set in use.
    IndirectCommandsExecutionSetTokenEXT
-> IndirectExecutionSetInfoTypeEXT
type' :: IndirectExecutionSetInfoTypeEXT
  , -- | @shaderStages@ specifies the shaders that will be changed by this token.
    IndirectCommandsExecutionSetTokenEXT -> ShaderStageFlags
shaderStages :: ShaderStageFlags
  }
  deriving (Typeable, IndirectCommandsExecutionSetTokenEXT
-> IndirectCommandsExecutionSetTokenEXT
-> "isPreprocessed" ::: Bool
(IndirectCommandsExecutionSetTokenEXT
 -> IndirectCommandsExecutionSetTokenEXT
 -> "isPreprocessed" ::: Bool)
-> (IndirectCommandsExecutionSetTokenEXT
    -> IndirectCommandsExecutionSetTokenEXT
    -> "isPreprocessed" ::: Bool)
-> Eq IndirectCommandsExecutionSetTokenEXT
forall a.
(a -> a -> "isPreprocessed" ::: Bool)
-> (a -> a -> "isPreprocessed" ::: Bool) -> Eq a
$c== :: IndirectCommandsExecutionSetTokenEXT
-> IndirectCommandsExecutionSetTokenEXT
-> "isPreprocessed" ::: Bool
== :: IndirectCommandsExecutionSetTokenEXT
-> IndirectCommandsExecutionSetTokenEXT
-> "isPreprocessed" ::: Bool
$c/= :: IndirectCommandsExecutionSetTokenEXT
-> IndirectCommandsExecutionSetTokenEXT
-> "isPreprocessed" ::: Bool
/= :: IndirectCommandsExecutionSetTokenEXT
-> IndirectCommandsExecutionSetTokenEXT
-> "isPreprocessed" ::: Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (IndirectCommandsExecutionSetTokenEXT)
#endif
deriving instance Show IndirectCommandsExecutionSetTokenEXT

instance ToCStruct IndirectCommandsExecutionSetTokenEXT where
  withCStruct :: forall b.
IndirectCommandsExecutionSetTokenEXT
-> (Ptr IndirectCommandsExecutionSetTokenEXT -> IO b) -> IO b
withCStruct IndirectCommandsExecutionSetTokenEXT
x Ptr IndirectCommandsExecutionSetTokenEXT -> IO b
f = Int -> (Ptr IndirectCommandsExecutionSetTokenEXT -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
8 ((Ptr IndirectCommandsExecutionSetTokenEXT -> IO b) -> IO b)
-> (Ptr IndirectCommandsExecutionSetTokenEXT -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr IndirectCommandsExecutionSetTokenEXT
p -> Ptr IndirectCommandsExecutionSetTokenEXT
-> IndirectCommandsExecutionSetTokenEXT -> IO b -> IO b
forall b.
Ptr IndirectCommandsExecutionSetTokenEXT
-> IndirectCommandsExecutionSetTokenEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr IndirectCommandsExecutionSetTokenEXT
p IndirectCommandsExecutionSetTokenEXT
x (Ptr IndirectCommandsExecutionSetTokenEXT -> IO b
f Ptr IndirectCommandsExecutionSetTokenEXT
p)
  pokeCStruct :: forall b.
Ptr IndirectCommandsExecutionSetTokenEXT
-> IndirectCommandsExecutionSetTokenEXT -> IO b -> IO b
pokeCStruct Ptr IndirectCommandsExecutionSetTokenEXT
p IndirectCommandsExecutionSetTokenEXT{ShaderStageFlags
IndirectExecutionSetInfoTypeEXT
$sel:type':IndirectCommandsExecutionSetTokenEXT :: IndirectCommandsExecutionSetTokenEXT
-> IndirectExecutionSetInfoTypeEXT
$sel:shaderStages:IndirectCommandsExecutionSetTokenEXT :: IndirectCommandsExecutionSetTokenEXT -> ShaderStageFlags
type' :: IndirectExecutionSetInfoTypeEXT
shaderStages :: ShaderStageFlags
..} IO b
f = do
    Ptr IndirectExecutionSetInfoTypeEXT
-> IndirectExecutionSetInfoTypeEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectCommandsExecutionSetTokenEXT
p Ptr IndirectCommandsExecutionSetTokenEXT
-> Int -> Ptr IndirectExecutionSetInfoTypeEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr IndirectExecutionSetInfoTypeEXT)) (IndirectExecutionSetInfoTypeEXT
type')
    Ptr ShaderStageFlags -> ShaderStageFlags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectCommandsExecutionSetTokenEXT
p Ptr IndirectCommandsExecutionSetTokenEXT
-> Int -> Ptr ShaderStageFlags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4 :: Ptr ShaderStageFlags)) (ShaderStageFlags
shaderStages)
    IO b
f
  cStructSize :: Int
cStructSize = Int
8
  cStructAlignment :: Int
cStructAlignment = Int
4
  pokeZeroCStruct :: forall b. Ptr IndirectCommandsExecutionSetTokenEXT -> IO b -> IO b
pokeZeroCStruct Ptr IndirectCommandsExecutionSetTokenEXT
p IO b
f = do
    Ptr IndirectExecutionSetInfoTypeEXT
-> IndirectExecutionSetInfoTypeEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectCommandsExecutionSetTokenEXT
p Ptr IndirectCommandsExecutionSetTokenEXT
-> Int -> Ptr IndirectExecutionSetInfoTypeEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr IndirectExecutionSetInfoTypeEXT)) (IndirectExecutionSetInfoTypeEXT
forall a. Zero a => a
zero)
    Ptr ShaderStageFlags -> ShaderStageFlags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectCommandsExecutionSetTokenEXT
p Ptr IndirectCommandsExecutionSetTokenEXT
-> Int -> Ptr ShaderStageFlags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4 :: Ptr ShaderStageFlags)) (ShaderStageFlags
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct IndirectCommandsExecutionSetTokenEXT where
  peekCStruct :: Ptr IndirectCommandsExecutionSetTokenEXT
-> IO IndirectCommandsExecutionSetTokenEXT
peekCStruct Ptr IndirectCommandsExecutionSetTokenEXT
p = do
    IndirectExecutionSetInfoTypeEXT
type' <- forall a. Storable a => Ptr a -> IO a
peek @IndirectExecutionSetInfoTypeEXT ((Ptr IndirectCommandsExecutionSetTokenEXT
p Ptr IndirectCommandsExecutionSetTokenEXT
-> Int -> Ptr IndirectExecutionSetInfoTypeEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr IndirectExecutionSetInfoTypeEXT))
    ShaderStageFlags
shaderStages <- forall a. Storable a => Ptr a -> IO a
peek @ShaderStageFlags ((Ptr IndirectCommandsExecutionSetTokenEXT
p Ptr IndirectCommandsExecutionSetTokenEXT
-> Int -> Ptr ShaderStageFlags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4 :: Ptr ShaderStageFlags))
    IndirectCommandsExecutionSetTokenEXT
-> IO IndirectCommandsExecutionSetTokenEXT
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (IndirectCommandsExecutionSetTokenEXT
 -> IO IndirectCommandsExecutionSetTokenEXT)
-> IndirectCommandsExecutionSetTokenEXT
-> IO IndirectCommandsExecutionSetTokenEXT
forall a b. (a -> b) -> a -> b
$ IndirectExecutionSetInfoTypeEXT
-> ShaderStageFlags -> IndirectCommandsExecutionSetTokenEXT
IndirectCommandsExecutionSetTokenEXT
             IndirectExecutionSetInfoTypeEXT
type' ShaderStageFlags
shaderStages

instance Storable IndirectCommandsExecutionSetTokenEXT where
  sizeOf :: IndirectCommandsExecutionSetTokenEXT -> Int
sizeOf ~IndirectCommandsExecutionSetTokenEXT
_ = Int
8
  alignment :: IndirectCommandsExecutionSetTokenEXT -> Int
alignment ~IndirectCommandsExecutionSetTokenEXT
_ = Int
4
  peek :: Ptr IndirectCommandsExecutionSetTokenEXT
-> IO IndirectCommandsExecutionSetTokenEXT
peek = Ptr IndirectCommandsExecutionSetTokenEXT
-> IO IndirectCommandsExecutionSetTokenEXT
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct
  poke :: Ptr IndirectCommandsExecutionSetTokenEXT
-> IndirectCommandsExecutionSetTokenEXT -> IO ()
poke Ptr IndirectCommandsExecutionSetTokenEXT
ptr IndirectCommandsExecutionSetTokenEXT
poked = Ptr IndirectCommandsExecutionSetTokenEXT
-> IndirectCommandsExecutionSetTokenEXT -> IO () -> IO ()
forall b.
Ptr IndirectCommandsExecutionSetTokenEXT
-> IndirectCommandsExecutionSetTokenEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr IndirectCommandsExecutionSetTokenEXT
ptr IndirectCommandsExecutionSetTokenEXT
poked (() -> IO ()
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ())

instance Zero IndirectCommandsExecutionSetTokenEXT where
  zero :: IndirectCommandsExecutionSetTokenEXT
zero = IndirectExecutionSetInfoTypeEXT
-> ShaderStageFlags -> IndirectCommandsExecutionSetTokenEXT
IndirectCommandsExecutionSetTokenEXT
           IndirectExecutionSetInfoTypeEXT
forall a. Zero a => a
zero
           ShaderStageFlags
forall a. Zero a => a
zero


data IndirectExecutionSetInfoEXT
  = PipelineInfo IndirectExecutionSetPipelineInfoEXT
  | ShaderInfo IndirectExecutionSetShaderInfoEXT
  deriving (Int -> IndirectExecutionSetInfoEXT -> ShowS
[IndirectExecutionSetInfoEXT] -> ShowS
IndirectExecutionSetInfoEXT -> String
(Int -> IndirectExecutionSetInfoEXT -> ShowS)
-> (IndirectExecutionSetInfoEXT -> String)
-> ([IndirectExecutionSetInfoEXT] -> ShowS)
-> Show IndirectExecutionSetInfoEXT
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> IndirectExecutionSetInfoEXT -> ShowS
showsPrec :: Int -> IndirectExecutionSetInfoEXT -> ShowS
$cshow :: IndirectExecutionSetInfoEXT -> String
show :: IndirectExecutionSetInfoEXT -> String
$cshowList :: [IndirectExecutionSetInfoEXT] -> ShowS
showList :: [IndirectExecutionSetInfoEXT] -> ShowS
Show)

instance ToCStruct IndirectExecutionSetInfoEXT where
  withCStruct :: forall b.
IndirectExecutionSetInfoEXT
-> (Ptr IndirectExecutionSetInfoEXT -> IO b) -> IO b
withCStruct IndirectExecutionSetInfoEXT
x Ptr IndirectExecutionSetInfoEXT -> IO b
f = Int -> (Ptr IndirectExecutionSetInfoEXT -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
8 ((Ptr IndirectExecutionSetInfoEXT -> IO b) -> IO b)
-> (Ptr IndirectExecutionSetInfoEXT -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr IndirectExecutionSetInfoEXT
p -> Ptr IndirectExecutionSetInfoEXT
-> IndirectExecutionSetInfoEXT -> IO b -> IO b
forall b.
Ptr IndirectExecutionSetInfoEXT
-> IndirectExecutionSetInfoEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr IndirectExecutionSetInfoEXT
p IndirectExecutionSetInfoEXT
x (Ptr IndirectExecutionSetInfoEXT -> IO b
f Ptr IndirectExecutionSetInfoEXT
p)
  pokeCStruct :: Ptr IndirectExecutionSetInfoEXT -> IndirectExecutionSetInfoEXT -> IO a -> IO a
  pokeCStruct :: forall b.
Ptr IndirectExecutionSetInfoEXT
-> IndirectExecutionSetInfoEXT -> IO b -> IO b
pokeCStruct Ptr IndirectExecutionSetInfoEXT
p = (((() -> IO a) -> IO a) -> (IO a -> () -> IO a) -> IO a -> IO a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. IO a -> () -> IO a
forall a b. a -> b -> a
const) (((() -> IO a) -> IO a) -> IO a -> IO a)
-> (IndirectExecutionSetInfoEXT -> (() -> IO a) -> IO a)
-> IndirectExecutionSetInfoEXT
-> IO a
-> IO a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT a IO () -> (() -> IO a) -> IO a
forall {k} (r :: k) (m :: k -> *) a.
ContT r m a -> (a -> m r) -> m r
runContT (ContT a IO () -> (() -> IO a) -> IO a)
-> (IndirectExecutionSetInfoEXT -> ContT a IO ())
-> IndirectExecutionSetInfoEXT
-> (() -> IO a)
-> IO a
forall b c a. (b -> c) -> (a -> b) -> a -> c
.  \case
    PipelineInfo IndirectExecutionSetPipelineInfoEXT
v -> do
      Ptr IndirectExecutionSetPipelineInfoEXT
pPipelineInfo <- ((Ptr IndirectExecutionSetPipelineInfoEXT -> IO a) -> IO a)
-> ContT a IO (Ptr IndirectExecutionSetPipelineInfoEXT)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr IndirectExecutionSetPipelineInfoEXT -> IO a) -> IO a)
 -> ContT a IO (Ptr IndirectExecutionSetPipelineInfoEXT))
-> ((Ptr IndirectExecutionSetPipelineInfoEXT -> IO a) -> IO a)
-> ContT a IO (Ptr IndirectExecutionSetPipelineInfoEXT)
forall a b. (a -> b) -> a -> b
$ IndirectExecutionSetPipelineInfoEXT
-> (Ptr IndirectExecutionSetPipelineInfoEXT -> IO a) -> IO a
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
forall b.
IndirectExecutionSetPipelineInfoEXT
-> (Ptr IndirectExecutionSetPipelineInfoEXT -> IO b) -> IO b
withCStruct (IndirectExecutionSetPipelineInfoEXT
v)
      IO () -> ContT a IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT a m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT a IO ()) -> IO () -> ContT a IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr IndirectExecutionSetPipelineInfoEXT)
-> Ptr IndirectExecutionSetPipelineInfoEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (forall a b. Ptr a -> Ptr b
castPtr @_ @(Ptr IndirectExecutionSetPipelineInfoEXT) Ptr IndirectExecutionSetInfoEXT
p) Ptr IndirectExecutionSetPipelineInfoEXT
pPipelineInfo
    ShaderInfo IndirectExecutionSetShaderInfoEXT
v -> do
      Ptr IndirectExecutionSetShaderInfoEXT
pShaderInfo <- ((Ptr IndirectExecutionSetShaderInfoEXT -> IO a) -> IO a)
-> ContT a IO (Ptr IndirectExecutionSetShaderInfoEXT)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr IndirectExecutionSetShaderInfoEXT -> IO a) -> IO a)
 -> ContT a IO (Ptr IndirectExecutionSetShaderInfoEXT))
-> ((Ptr IndirectExecutionSetShaderInfoEXT -> IO a) -> IO a)
-> ContT a IO (Ptr IndirectExecutionSetShaderInfoEXT)
forall a b. (a -> b) -> a -> b
$ IndirectExecutionSetShaderInfoEXT
-> (Ptr IndirectExecutionSetShaderInfoEXT -> IO a) -> IO a
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
forall b.
IndirectExecutionSetShaderInfoEXT
-> (Ptr IndirectExecutionSetShaderInfoEXT -> IO b) -> IO b
withCStruct (IndirectExecutionSetShaderInfoEXT
v)
      IO () -> ContT a IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT a m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT a IO ()) -> IO () -> ContT a IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr IndirectExecutionSetShaderInfoEXT)
-> Ptr IndirectExecutionSetShaderInfoEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (forall a b. Ptr a -> Ptr b
castPtr @_ @(Ptr IndirectExecutionSetShaderInfoEXT) Ptr IndirectExecutionSetInfoEXT
p) Ptr IndirectExecutionSetShaderInfoEXT
pShaderInfo
  pokeZeroCStruct :: Ptr IndirectExecutionSetInfoEXT -> IO b -> IO b
  pokeZeroCStruct :: forall b. Ptr IndirectExecutionSetInfoEXT -> IO b -> IO b
pokeZeroCStruct Ptr IndirectExecutionSetInfoEXT
_ IO b
f = IO b
f
  cStructSize :: Int
cStructSize = Int
8
  cStructAlignment :: Int
cStructAlignment = Int
8

instance Zero IndirectExecutionSetInfoEXT where
  zero :: IndirectExecutionSetInfoEXT
zero = IndirectExecutionSetPipelineInfoEXT -> IndirectExecutionSetInfoEXT
PipelineInfo IndirectExecutionSetPipelineInfoEXT
forall a. Zero a => a
zero


data IndirectCommandsTokenDataEXT
  = PushConstant IndirectCommandsPushConstantTokenEXT
  | VertexBuffer IndirectCommandsVertexBufferTokenEXT
  | IndexBuffer IndirectCommandsIndexBufferTokenEXT
  | ExecutionSet IndirectCommandsExecutionSetTokenEXT
  deriving (Int -> IndirectCommandsTokenDataEXT -> ShowS
[IndirectCommandsTokenDataEXT] -> ShowS
IndirectCommandsTokenDataEXT -> String
(Int -> IndirectCommandsTokenDataEXT -> ShowS)
-> (IndirectCommandsTokenDataEXT -> String)
-> ([IndirectCommandsTokenDataEXT] -> ShowS)
-> Show IndirectCommandsTokenDataEXT
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> IndirectCommandsTokenDataEXT -> ShowS
showsPrec :: Int -> IndirectCommandsTokenDataEXT -> ShowS
$cshow :: IndirectCommandsTokenDataEXT -> String
show :: IndirectCommandsTokenDataEXT -> String
$cshowList :: [IndirectCommandsTokenDataEXT] -> ShowS
showList :: [IndirectCommandsTokenDataEXT] -> ShowS
Show)

instance ToCStruct IndirectCommandsTokenDataEXT where
  withCStruct :: forall b.
IndirectCommandsTokenDataEXT
-> (Ptr IndirectCommandsTokenDataEXT -> IO b) -> IO b
withCStruct IndirectCommandsTokenDataEXT
x Ptr IndirectCommandsTokenDataEXT -> IO b
f = Int -> (Ptr IndirectCommandsTokenDataEXT -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
8 ((Ptr IndirectCommandsTokenDataEXT -> IO b) -> IO b)
-> (Ptr IndirectCommandsTokenDataEXT -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr IndirectCommandsTokenDataEXT
p -> Ptr IndirectCommandsTokenDataEXT
-> IndirectCommandsTokenDataEXT -> IO b -> IO b
forall b.
Ptr IndirectCommandsTokenDataEXT
-> IndirectCommandsTokenDataEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr IndirectCommandsTokenDataEXT
p IndirectCommandsTokenDataEXT
x (Ptr IndirectCommandsTokenDataEXT -> IO b
f Ptr IndirectCommandsTokenDataEXT
p)
  pokeCStruct :: Ptr IndirectCommandsTokenDataEXT -> IndirectCommandsTokenDataEXT -> IO a -> IO a
  pokeCStruct :: forall b.
Ptr IndirectCommandsTokenDataEXT
-> IndirectCommandsTokenDataEXT -> IO b -> IO b
pokeCStruct Ptr IndirectCommandsTokenDataEXT
p = (((() -> IO a) -> IO a) -> (IO a -> () -> IO a) -> IO a -> IO a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. IO a -> () -> IO a
forall a b. a -> b -> a
const) (((() -> IO a) -> IO a) -> IO a -> IO a)
-> (IndirectCommandsTokenDataEXT -> (() -> IO a) -> IO a)
-> IndirectCommandsTokenDataEXT
-> IO a
-> IO a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT a IO () -> (() -> IO a) -> IO a
forall {k} (r :: k) (m :: k -> *) a.
ContT r m a -> (a -> m r) -> m r
runContT (ContT a IO () -> (() -> IO a) -> IO a)
-> (IndirectCommandsTokenDataEXT -> ContT a IO ())
-> IndirectCommandsTokenDataEXT
-> (() -> IO a)
-> IO a
forall b c a. (b -> c) -> (a -> b) -> a -> c
.  \case
    PushConstant IndirectCommandsPushConstantTokenEXT
v -> do
      Ptr IndirectCommandsPushConstantTokenEXT
pPushConstant <- ((Ptr IndirectCommandsPushConstantTokenEXT -> IO a) -> IO a)
-> ContT a IO (Ptr IndirectCommandsPushConstantTokenEXT)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr IndirectCommandsPushConstantTokenEXT -> IO a) -> IO a)
 -> ContT a IO (Ptr IndirectCommandsPushConstantTokenEXT))
-> ((Ptr IndirectCommandsPushConstantTokenEXT -> IO a) -> IO a)
-> ContT a IO (Ptr IndirectCommandsPushConstantTokenEXT)
forall a b. (a -> b) -> a -> b
$ IndirectCommandsPushConstantTokenEXT
-> (Ptr IndirectCommandsPushConstantTokenEXT -> IO a) -> IO a
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
forall b.
IndirectCommandsPushConstantTokenEXT
-> (Ptr IndirectCommandsPushConstantTokenEXT -> IO b) -> IO b
withCStruct (IndirectCommandsPushConstantTokenEXT
v)
      IO () -> ContT a IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT a m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT a IO ()) -> IO () -> ContT a IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr IndirectCommandsPushConstantTokenEXT)
-> Ptr IndirectCommandsPushConstantTokenEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (forall a b. Ptr a -> Ptr b
castPtr @_ @(Ptr IndirectCommandsPushConstantTokenEXT) Ptr IndirectCommandsTokenDataEXT
p) Ptr IndirectCommandsPushConstantTokenEXT
pPushConstant
    VertexBuffer IndirectCommandsVertexBufferTokenEXT
v -> do
      Ptr IndirectCommandsVertexBufferTokenEXT
pVertexBuffer <- ((Ptr IndirectCommandsVertexBufferTokenEXT -> IO a) -> IO a)
-> ContT a IO (Ptr IndirectCommandsVertexBufferTokenEXT)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr IndirectCommandsVertexBufferTokenEXT -> IO a) -> IO a)
 -> ContT a IO (Ptr IndirectCommandsVertexBufferTokenEXT))
-> ((Ptr IndirectCommandsVertexBufferTokenEXT -> IO a) -> IO a)
-> ContT a IO (Ptr IndirectCommandsVertexBufferTokenEXT)
forall a b. (a -> b) -> a -> b
$ IndirectCommandsVertexBufferTokenEXT
-> (Ptr IndirectCommandsVertexBufferTokenEXT -> IO a) -> IO a
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
forall b.
IndirectCommandsVertexBufferTokenEXT
-> (Ptr IndirectCommandsVertexBufferTokenEXT -> IO b) -> IO b
withCStruct (IndirectCommandsVertexBufferTokenEXT
v)
      IO () -> ContT a IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT a m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT a IO ()) -> IO () -> ContT a IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr IndirectCommandsVertexBufferTokenEXT)
-> Ptr IndirectCommandsVertexBufferTokenEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (forall a b. Ptr a -> Ptr b
castPtr @_ @(Ptr IndirectCommandsVertexBufferTokenEXT) Ptr IndirectCommandsTokenDataEXT
p) Ptr IndirectCommandsVertexBufferTokenEXT
pVertexBuffer
    IndexBuffer IndirectCommandsIndexBufferTokenEXT
v -> do
      Ptr IndirectCommandsIndexBufferTokenEXT
pIndexBuffer <- ((Ptr IndirectCommandsIndexBufferTokenEXT -> IO a) -> IO a)
-> ContT a IO (Ptr IndirectCommandsIndexBufferTokenEXT)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr IndirectCommandsIndexBufferTokenEXT -> IO a) -> IO a)
 -> ContT a IO (Ptr IndirectCommandsIndexBufferTokenEXT))
-> ((Ptr IndirectCommandsIndexBufferTokenEXT -> IO a) -> IO a)
-> ContT a IO (Ptr IndirectCommandsIndexBufferTokenEXT)
forall a b. (a -> b) -> a -> b
$ IndirectCommandsIndexBufferTokenEXT
-> (Ptr IndirectCommandsIndexBufferTokenEXT -> IO a) -> IO a
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
forall b.
IndirectCommandsIndexBufferTokenEXT
-> (Ptr IndirectCommandsIndexBufferTokenEXT -> IO b) -> IO b
withCStruct (IndirectCommandsIndexBufferTokenEXT
v)
      IO () -> ContT a IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT a m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT a IO ()) -> IO () -> ContT a IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr IndirectCommandsIndexBufferTokenEXT)
-> Ptr IndirectCommandsIndexBufferTokenEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (forall a b. Ptr a -> Ptr b
castPtr @_ @(Ptr IndirectCommandsIndexBufferTokenEXT) Ptr IndirectCommandsTokenDataEXT
p) Ptr IndirectCommandsIndexBufferTokenEXT
pIndexBuffer
    ExecutionSet IndirectCommandsExecutionSetTokenEXT
v -> do
      Ptr IndirectCommandsExecutionSetTokenEXT
pExecutionSet <- ((Ptr IndirectCommandsExecutionSetTokenEXT -> IO a) -> IO a)
-> ContT a IO (Ptr IndirectCommandsExecutionSetTokenEXT)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr IndirectCommandsExecutionSetTokenEXT -> IO a) -> IO a)
 -> ContT a IO (Ptr IndirectCommandsExecutionSetTokenEXT))
-> ((Ptr IndirectCommandsExecutionSetTokenEXT -> IO a) -> IO a)
-> ContT a IO (Ptr IndirectCommandsExecutionSetTokenEXT)
forall a b. (a -> b) -> a -> b
$ IndirectCommandsExecutionSetTokenEXT
-> (Ptr IndirectCommandsExecutionSetTokenEXT -> IO a) -> IO a
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
forall b.
IndirectCommandsExecutionSetTokenEXT
-> (Ptr IndirectCommandsExecutionSetTokenEXT -> IO b) -> IO b
withCStruct (IndirectCommandsExecutionSetTokenEXT
v)
      IO () -> ContT a IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT a m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT a IO ()) -> IO () -> ContT a IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr IndirectCommandsExecutionSetTokenEXT)
-> Ptr IndirectCommandsExecutionSetTokenEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (forall a b. Ptr a -> Ptr b
castPtr @_ @(Ptr IndirectCommandsExecutionSetTokenEXT) Ptr IndirectCommandsTokenDataEXT
p) Ptr IndirectCommandsExecutionSetTokenEXT
pExecutionSet
  pokeZeroCStruct :: Ptr IndirectCommandsTokenDataEXT -> IO b -> IO b
  pokeZeroCStruct :: forall b. Ptr IndirectCommandsTokenDataEXT -> IO b -> IO b
pokeZeroCStruct Ptr IndirectCommandsTokenDataEXT
_ IO b
f = IO b
f
  cStructSize :: Int
cStructSize = Int
8
  cStructAlignment :: Int
cStructAlignment = Int
8

instance Zero IndirectCommandsTokenDataEXT where
  zero :: IndirectCommandsTokenDataEXT
zero = IndirectCommandsPushConstantTokenEXT
-> IndirectCommandsTokenDataEXT
PushConstant IndirectCommandsPushConstantTokenEXT
forall a. Zero a => a
zero


type IndirectCommandsLayoutUsageFlagsEXT = IndirectCommandsLayoutUsageFlagBitsEXT

-- | VkIndirectCommandsLayoutUsageFlagBitsEXT - Bitmask specifying allowed
-- usage of an indirect commands layout
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_device_generated_commands VK_EXT_device_generated_commands>,
-- 'IndirectCommandsLayoutUsageFlagsEXT'
newtype IndirectCommandsLayoutUsageFlagBitsEXT = IndirectCommandsLayoutUsageFlagBitsEXT Flags
  deriving newtype (IndirectCommandsLayoutUsageFlagsEXT
-> IndirectCommandsLayoutUsageFlagsEXT -> "isPreprocessed" ::: Bool
(IndirectCommandsLayoutUsageFlagsEXT
 -> IndirectCommandsLayoutUsageFlagsEXT
 -> "isPreprocessed" ::: Bool)
-> (IndirectCommandsLayoutUsageFlagsEXT
    -> IndirectCommandsLayoutUsageFlagsEXT
    -> "isPreprocessed" ::: Bool)
-> Eq IndirectCommandsLayoutUsageFlagsEXT
forall a.
(a -> a -> "isPreprocessed" ::: Bool)
-> (a -> a -> "isPreprocessed" ::: Bool) -> Eq a
$c== :: IndirectCommandsLayoutUsageFlagsEXT
-> IndirectCommandsLayoutUsageFlagsEXT -> "isPreprocessed" ::: Bool
== :: IndirectCommandsLayoutUsageFlagsEXT
-> IndirectCommandsLayoutUsageFlagsEXT -> "isPreprocessed" ::: Bool
$c/= :: IndirectCommandsLayoutUsageFlagsEXT
-> IndirectCommandsLayoutUsageFlagsEXT -> "isPreprocessed" ::: Bool
/= :: IndirectCommandsLayoutUsageFlagsEXT
-> IndirectCommandsLayoutUsageFlagsEXT -> "isPreprocessed" ::: Bool
Eq, Eq IndirectCommandsLayoutUsageFlagsEXT
Eq IndirectCommandsLayoutUsageFlagsEXT =>
(IndirectCommandsLayoutUsageFlagsEXT
 -> IndirectCommandsLayoutUsageFlagsEXT -> Ordering)
-> (IndirectCommandsLayoutUsageFlagsEXT
    -> IndirectCommandsLayoutUsageFlagsEXT
    -> "isPreprocessed" ::: Bool)
-> (IndirectCommandsLayoutUsageFlagsEXT
    -> IndirectCommandsLayoutUsageFlagsEXT
    -> "isPreprocessed" ::: Bool)
-> (IndirectCommandsLayoutUsageFlagsEXT
    -> IndirectCommandsLayoutUsageFlagsEXT
    -> "isPreprocessed" ::: Bool)
-> (IndirectCommandsLayoutUsageFlagsEXT
    -> IndirectCommandsLayoutUsageFlagsEXT
    -> "isPreprocessed" ::: Bool)
-> (IndirectCommandsLayoutUsageFlagsEXT
    -> IndirectCommandsLayoutUsageFlagsEXT
    -> IndirectCommandsLayoutUsageFlagsEXT)
-> (IndirectCommandsLayoutUsageFlagsEXT
    -> IndirectCommandsLayoutUsageFlagsEXT
    -> IndirectCommandsLayoutUsageFlagsEXT)
-> Ord IndirectCommandsLayoutUsageFlagsEXT
IndirectCommandsLayoutUsageFlagsEXT
-> IndirectCommandsLayoutUsageFlagsEXT -> "isPreprocessed" ::: Bool
IndirectCommandsLayoutUsageFlagsEXT
-> IndirectCommandsLayoutUsageFlagsEXT -> Ordering
IndirectCommandsLayoutUsageFlagsEXT
-> IndirectCommandsLayoutUsageFlagsEXT
-> IndirectCommandsLayoutUsageFlagsEXT
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> "isPreprocessed" ::: Bool)
-> (a -> a -> "isPreprocessed" ::: Bool)
-> (a -> a -> "isPreprocessed" ::: Bool)
-> (a -> a -> "isPreprocessed" ::: Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: IndirectCommandsLayoutUsageFlagsEXT
-> IndirectCommandsLayoutUsageFlagsEXT -> Ordering
compare :: IndirectCommandsLayoutUsageFlagsEXT
-> IndirectCommandsLayoutUsageFlagsEXT -> Ordering
$c< :: IndirectCommandsLayoutUsageFlagsEXT
-> IndirectCommandsLayoutUsageFlagsEXT -> "isPreprocessed" ::: Bool
< :: IndirectCommandsLayoutUsageFlagsEXT
-> IndirectCommandsLayoutUsageFlagsEXT -> "isPreprocessed" ::: Bool
$c<= :: IndirectCommandsLayoutUsageFlagsEXT
-> IndirectCommandsLayoutUsageFlagsEXT -> "isPreprocessed" ::: Bool
<= :: IndirectCommandsLayoutUsageFlagsEXT
-> IndirectCommandsLayoutUsageFlagsEXT -> "isPreprocessed" ::: Bool
$c> :: IndirectCommandsLayoutUsageFlagsEXT
-> IndirectCommandsLayoutUsageFlagsEXT -> "isPreprocessed" ::: Bool
> :: IndirectCommandsLayoutUsageFlagsEXT
-> IndirectCommandsLayoutUsageFlagsEXT -> "isPreprocessed" ::: Bool
$c>= :: IndirectCommandsLayoutUsageFlagsEXT
-> IndirectCommandsLayoutUsageFlagsEXT -> "isPreprocessed" ::: Bool
>= :: IndirectCommandsLayoutUsageFlagsEXT
-> IndirectCommandsLayoutUsageFlagsEXT -> "isPreprocessed" ::: Bool
$cmax :: IndirectCommandsLayoutUsageFlagsEXT
-> IndirectCommandsLayoutUsageFlagsEXT
-> IndirectCommandsLayoutUsageFlagsEXT
max :: IndirectCommandsLayoutUsageFlagsEXT
-> IndirectCommandsLayoutUsageFlagsEXT
-> IndirectCommandsLayoutUsageFlagsEXT
$cmin :: IndirectCommandsLayoutUsageFlagsEXT
-> IndirectCommandsLayoutUsageFlagsEXT
-> IndirectCommandsLayoutUsageFlagsEXT
min :: IndirectCommandsLayoutUsageFlagsEXT
-> IndirectCommandsLayoutUsageFlagsEXT
-> IndirectCommandsLayoutUsageFlagsEXT
Ord, Ptr IndirectCommandsLayoutUsageFlagsEXT
-> IO IndirectCommandsLayoutUsageFlagsEXT
Ptr IndirectCommandsLayoutUsageFlagsEXT
-> Int -> IO IndirectCommandsLayoutUsageFlagsEXT
Ptr IndirectCommandsLayoutUsageFlagsEXT
-> Int -> IndirectCommandsLayoutUsageFlagsEXT -> IO ()
Ptr IndirectCommandsLayoutUsageFlagsEXT
-> IndirectCommandsLayoutUsageFlagsEXT -> IO ()
IndirectCommandsLayoutUsageFlagsEXT -> Int
(IndirectCommandsLayoutUsageFlagsEXT -> Int)
-> (IndirectCommandsLayoutUsageFlagsEXT -> Int)
-> (Ptr IndirectCommandsLayoutUsageFlagsEXT
    -> Int -> IO IndirectCommandsLayoutUsageFlagsEXT)
-> (Ptr IndirectCommandsLayoutUsageFlagsEXT
    -> Int -> IndirectCommandsLayoutUsageFlagsEXT -> IO ())
-> (forall b.
    Ptr b -> Int -> IO IndirectCommandsLayoutUsageFlagsEXT)
-> (forall b.
    Ptr b -> Int -> IndirectCommandsLayoutUsageFlagsEXT -> IO ())
-> (Ptr IndirectCommandsLayoutUsageFlagsEXT
    -> IO IndirectCommandsLayoutUsageFlagsEXT)
-> (Ptr IndirectCommandsLayoutUsageFlagsEXT
    -> IndirectCommandsLayoutUsageFlagsEXT -> IO ())
-> Storable IndirectCommandsLayoutUsageFlagsEXT
forall b. Ptr b -> Int -> IO IndirectCommandsLayoutUsageFlagsEXT
forall b.
Ptr b -> Int -> IndirectCommandsLayoutUsageFlagsEXT -> IO ()
forall a.
(a -> Int)
-> (a -> Int)
-> (Ptr a -> Int -> IO a)
-> (Ptr a -> Int -> a -> IO ())
-> (forall b. Ptr b -> Int -> IO a)
-> (forall b. Ptr b -> Int -> a -> IO ())
-> (Ptr a -> IO a)
-> (Ptr a -> a -> IO ())
-> Storable a
$csizeOf :: IndirectCommandsLayoutUsageFlagsEXT -> Int
sizeOf :: IndirectCommandsLayoutUsageFlagsEXT -> Int
$calignment :: IndirectCommandsLayoutUsageFlagsEXT -> Int
alignment :: IndirectCommandsLayoutUsageFlagsEXT -> Int
$cpeekElemOff :: Ptr IndirectCommandsLayoutUsageFlagsEXT
-> Int -> IO IndirectCommandsLayoutUsageFlagsEXT
peekElemOff :: Ptr IndirectCommandsLayoutUsageFlagsEXT
-> Int -> IO IndirectCommandsLayoutUsageFlagsEXT
$cpokeElemOff :: Ptr IndirectCommandsLayoutUsageFlagsEXT
-> Int -> IndirectCommandsLayoutUsageFlagsEXT -> IO ()
pokeElemOff :: Ptr IndirectCommandsLayoutUsageFlagsEXT
-> Int -> IndirectCommandsLayoutUsageFlagsEXT -> IO ()
$cpeekByteOff :: forall b. Ptr b -> Int -> IO IndirectCommandsLayoutUsageFlagsEXT
peekByteOff :: forall b. Ptr b -> Int -> IO IndirectCommandsLayoutUsageFlagsEXT
$cpokeByteOff :: forall b.
Ptr b -> Int -> IndirectCommandsLayoutUsageFlagsEXT -> IO ()
pokeByteOff :: forall b.
Ptr b -> Int -> IndirectCommandsLayoutUsageFlagsEXT -> IO ()
$cpeek :: Ptr IndirectCommandsLayoutUsageFlagsEXT
-> IO IndirectCommandsLayoutUsageFlagsEXT
peek :: Ptr IndirectCommandsLayoutUsageFlagsEXT
-> IO IndirectCommandsLayoutUsageFlagsEXT
$cpoke :: Ptr IndirectCommandsLayoutUsageFlagsEXT
-> IndirectCommandsLayoutUsageFlagsEXT -> IO ()
poke :: Ptr IndirectCommandsLayoutUsageFlagsEXT
-> IndirectCommandsLayoutUsageFlagsEXT -> IO ()
Storable, IndirectCommandsLayoutUsageFlagsEXT
IndirectCommandsLayoutUsageFlagsEXT
-> Zero IndirectCommandsLayoutUsageFlagsEXT
forall a. a -> Zero a
$czero :: IndirectCommandsLayoutUsageFlagsEXT
zero :: IndirectCommandsLayoutUsageFlagsEXT
Zero, Eq IndirectCommandsLayoutUsageFlagsEXT
IndirectCommandsLayoutUsageFlagsEXT
Eq IndirectCommandsLayoutUsageFlagsEXT =>
(IndirectCommandsLayoutUsageFlagsEXT
 -> IndirectCommandsLayoutUsageFlagsEXT
 -> IndirectCommandsLayoutUsageFlagsEXT)
-> (IndirectCommandsLayoutUsageFlagsEXT
    -> IndirectCommandsLayoutUsageFlagsEXT
    -> IndirectCommandsLayoutUsageFlagsEXT)
-> (IndirectCommandsLayoutUsageFlagsEXT
    -> IndirectCommandsLayoutUsageFlagsEXT
    -> IndirectCommandsLayoutUsageFlagsEXT)
-> (IndirectCommandsLayoutUsageFlagsEXT
    -> IndirectCommandsLayoutUsageFlagsEXT)
-> (IndirectCommandsLayoutUsageFlagsEXT
    -> Int -> IndirectCommandsLayoutUsageFlagsEXT)
-> (IndirectCommandsLayoutUsageFlagsEXT
    -> Int -> IndirectCommandsLayoutUsageFlagsEXT)
-> IndirectCommandsLayoutUsageFlagsEXT
-> (Int -> IndirectCommandsLayoutUsageFlagsEXT)
-> (IndirectCommandsLayoutUsageFlagsEXT
    -> Int -> IndirectCommandsLayoutUsageFlagsEXT)
-> (IndirectCommandsLayoutUsageFlagsEXT
    -> Int -> IndirectCommandsLayoutUsageFlagsEXT)
-> (IndirectCommandsLayoutUsageFlagsEXT
    -> Int -> IndirectCommandsLayoutUsageFlagsEXT)
-> (IndirectCommandsLayoutUsageFlagsEXT
    -> Int -> "isPreprocessed" ::: Bool)
-> (IndirectCommandsLayoutUsageFlagsEXT -> Maybe Int)
-> (IndirectCommandsLayoutUsageFlagsEXT -> Int)
-> (IndirectCommandsLayoutUsageFlagsEXT
    -> "isPreprocessed" ::: Bool)
-> (IndirectCommandsLayoutUsageFlagsEXT
    -> Int -> IndirectCommandsLayoutUsageFlagsEXT)
-> (IndirectCommandsLayoutUsageFlagsEXT
    -> Int -> IndirectCommandsLayoutUsageFlagsEXT)
-> (IndirectCommandsLayoutUsageFlagsEXT
    -> Int -> IndirectCommandsLayoutUsageFlagsEXT)
-> (IndirectCommandsLayoutUsageFlagsEXT
    -> Int -> IndirectCommandsLayoutUsageFlagsEXT)
-> (IndirectCommandsLayoutUsageFlagsEXT
    -> Int -> IndirectCommandsLayoutUsageFlagsEXT)
-> (IndirectCommandsLayoutUsageFlagsEXT
    -> Int -> IndirectCommandsLayoutUsageFlagsEXT)
-> (IndirectCommandsLayoutUsageFlagsEXT -> Int)
-> Bits IndirectCommandsLayoutUsageFlagsEXT
Int -> IndirectCommandsLayoutUsageFlagsEXT
IndirectCommandsLayoutUsageFlagsEXT -> "isPreprocessed" ::: Bool
IndirectCommandsLayoutUsageFlagsEXT -> Int
IndirectCommandsLayoutUsageFlagsEXT -> Maybe Int
IndirectCommandsLayoutUsageFlagsEXT
-> IndirectCommandsLayoutUsageFlagsEXT
IndirectCommandsLayoutUsageFlagsEXT
-> Int -> "isPreprocessed" ::: Bool
IndirectCommandsLayoutUsageFlagsEXT
-> Int -> IndirectCommandsLayoutUsageFlagsEXT
IndirectCommandsLayoutUsageFlagsEXT
-> IndirectCommandsLayoutUsageFlagsEXT
-> IndirectCommandsLayoutUsageFlagsEXT
forall a.
Eq a =>
(a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> a
-> (Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> "isPreprocessed" ::: Bool)
-> (a -> Maybe Int)
-> (a -> Int)
-> (a -> "isPreprocessed" ::: Bool)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int)
-> Bits a
$c.&. :: IndirectCommandsLayoutUsageFlagsEXT
-> IndirectCommandsLayoutUsageFlagsEXT
-> IndirectCommandsLayoutUsageFlagsEXT
.&. :: IndirectCommandsLayoutUsageFlagsEXT
-> IndirectCommandsLayoutUsageFlagsEXT
-> IndirectCommandsLayoutUsageFlagsEXT
$c.|. :: IndirectCommandsLayoutUsageFlagsEXT
-> IndirectCommandsLayoutUsageFlagsEXT
-> IndirectCommandsLayoutUsageFlagsEXT
.|. :: IndirectCommandsLayoutUsageFlagsEXT
-> IndirectCommandsLayoutUsageFlagsEXT
-> IndirectCommandsLayoutUsageFlagsEXT
$cxor :: IndirectCommandsLayoutUsageFlagsEXT
-> IndirectCommandsLayoutUsageFlagsEXT
-> IndirectCommandsLayoutUsageFlagsEXT
xor :: IndirectCommandsLayoutUsageFlagsEXT
-> IndirectCommandsLayoutUsageFlagsEXT
-> IndirectCommandsLayoutUsageFlagsEXT
$ccomplement :: IndirectCommandsLayoutUsageFlagsEXT
-> IndirectCommandsLayoutUsageFlagsEXT
complement :: IndirectCommandsLayoutUsageFlagsEXT
-> IndirectCommandsLayoutUsageFlagsEXT
$cshift :: IndirectCommandsLayoutUsageFlagsEXT
-> Int -> IndirectCommandsLayoutUsageFlagsEXT
shift :: IndirectCommandsLayoutUsageFlagsEXT
-> Int -> IndirectCommandsLayoutUsageFlagsEXT
$crotate :: IndirectCommandsLayoutUsageFlagsEXT
-> Int -> IndirectCommandsLayoutUsageFlagsEXT
rotate :: IndirectCommandsLayoutUsageFlagsEXT
-> Int -> IndirectCommandsLayoutUsageFlagsEXT
$czeroBits :: IndirectCommandsLayoutUsageFlagsEXT
zeroBits :: IndirectCommandsLayoutUsageFlagsEXT
$cbit :: Int -> IndirectCommandsLayoutUsageFlagsEXT
bit :: Int -> IndirectCommandsLayoutUsageFlagsEXT
$csetBit :: IndirectCommandsLayoutUsageFlagsEXT
-> Int -> IndirectCommandsLayoutUsageFlagsEXT
setBit :: IndirectCommandsLayoutUsageFlagsEXT
-> Int -> IndirectCommandsLayoutUsageFlagsEXT
$cclearBit :: IndirectCommandsLayoutUsageFlagsEXT
-> Int -> IndirectCommandsLayoutUsageFlagsEXT
clearBit :: IndirectCommandsLayoutUsageFlagsEXT
-> Int -> IndirectCommandsLayoutUsageFlagsEXT
$ccomplementBit :: IndirectCommandsLayoutUsageFlagsEXT
-> Int -> IndirectCommandsLayoutUsageFlagsEXT
complementBit :: IndirectCommandsLayoutUsageFlagsEXT
-> Int -> IndirectCommandsLayoutUsageFlagsEXT
$ctestBit :: IndirectCommandsLayoutUsageFlagsEXT
-> Int -> "isPreprocessed" ::: Bool
testBit :: IndirectCommandsLayoutUsageFlagsEXT
-> Int -> "isPreprocessed" ::: Bool
$cbitSizeMaybe :: IndirectCommandsLayoutUsageFlagsEXT -> Maybe Int
bitSizeMaybe :: IndirectCommandsLayoutUsageFlagsEXT -> Maybe Int
$cbitSize :: IndirectCommandsLayoutUsageFlagsEXT -> Int
bitSize :: IndirectCommandsLayoutUsageFlagsEXT -> Int
$cisSigned :: IndirectCommandsLayoutUsageFlagsEXT -> "isPreprocessed" ::: Bool
isSigned :: IndirectCommandsLayoutUsageFlagsEXT -> "isPreprocessed" ::: Bool
$cshiftL :: IndirectCommandsLayoutUsageFlagsEXT
-> Int -> IndirectCommandsLayoutUsageFlagsEXT
shiftL :: IndirectCommandsLayoutUsageFlagsEXT
-> Int -> IndirectCommandsLayoutUsageFlagsEXT
$cunsafeShiftL :: IndirectCommandsLayoutUsageFlagsEXT
-> Int -> IndirectCommandsLayoutUsageFlagsEXT
unsafeShiftL :: IndirectCommandsLayoutUsageFlagsEXT
-> Int -> IndirectCommandsLayoutUsageFlagsEXT
$cshiftR :: IndirectCommandsLayoutUsageFlagsEXT
-> Int -> IndirectCommandsLayoutUsageFlagsEXT
shiftR :: IndirectCommandsLayoutUsageFlagsEXT
-> Int -> IndirectCommandsLayoutUsageFlagsEXT
$cunsafeShiftR :: IndirectCommandsLayoutUsageFlagsEXT
-> Int -> IndirectCommandsLayoutUsageFlagsEXT
unsafeShiftR :: IndirectCommandsLayoutUsageFlagsEXT
-> Int -> IndirectCommandsLayoutUsageFlagsEXT
$crotateL :: IndirectCommandsLayoutUsageFlagsEXT
-> Int -> IndirectCommandsLayoutUsageFlagsEXT
rotateL :: IndirectCommandsLayoutUsageFlagsEXT
-> Int -> IndirectCommandsLayoutUsageFlagsEXT
$crotateR :: IndirectCommandsLayoutUsageFlagsEXT
-> Int -> IndirectCommandsLayoutUsageFlagsEXT
rotateR :: IndirectCommandsLayoutUsageFlagsEXT
-> Int -> IndirectCommandsLayoutUsageFlagsEXT
$cpopCount :: IndirectCommandsLayoutUsageFlagsEXT -> Int
popCount :: IndirectCommandsLayoutUsageFlagsEXT -> Int
Bits, Bits IndirectCommandsLayoutUsageFlagsEXT
Bits IndirectCommandsLayoutUsageFlagsEXT =>
(IndirectCommandsLayoutUsageFlagsEXT -> Int)
-> (IndirectCommandsLayoutUsageFlagsEXT -> Int)
-> (IndirectCommandsLayoutUsageFlagsEXT -> Int)
-> FiniteBits IndirectCommandsLayoutUsageFlagsEXT
IndirectCommandsLayoutUsageFlagsEXT -> Int
forall b.
Bits b =>
(b -> Int) -> (b -> Int) -> (b -> Int) -> FiniteBits b
$cfiniteBitSize :: IndirectCommandsLayoutUsageFlagsEXT -> Int
finiteBitSize :: IndirectCommandsLayoutUsageFlagsEXT -> Int
$ccountLeadingZeros :: IndirectCommandsLayoutUsageFlagsEXT -> Int
countLeadingZeros :: IndirectCommandsLayoutUsageFlagsEXT -> Int
$ccountTrailingZeros :: IndirectCommandsLayoutUsageFlagsEXT -> Int
countTrailingZeros :: IndirectCommandsLayoutUsageFlagsEXT -> Int
FiniteBits)

-- | 'INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_EXT' specifies
-- that the layout is always used with the manual preprocessing step
-- through calling 'cmdPreprocessGeneratedCommandsEXT' and executed by
-- 'cmdExecuteGeneratedCommandsEXT' with @isPreprocessed@ set to
-- 'Vulkan.Core10.FundamentalTypes.TRUE'.
pattern $mINDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_EXT :: forall {r}.
IndirectCommandsLayoutUsageFlagsEXT
-> ((# #) -> r) -> ((# #) -> r) -> r
$bINDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_EXT :: IndirectCommandsLayoutUsageFlagsEXT
INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_EXT = IndirectCommandsLayoutUsageFlagBitsEXT 0x00000001

-- | 'INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_EXT' specifies
-- that the processing of sequences will happen at an
-- implementation-dependent order, which is not guaranteed to be
-- deterministic using the same input data. This flag is ignored when the
-- @shaderStages@ is
-- 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_COMPUTE_BIT' as it
-- is implied that the dispatch sequence is always unordered.
pattern $mINDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_EXT :: forall {r}.
IndirectCommandsLayoutUsageFlagsEXT
-> ((# #) -> r) -> ((# #) -> r) -> r
$bINDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_EXT :: IndirectCommandsLayoutUsageFlagsEXT
INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_EXT = IndirectCommandsLayoutUsageFlagBitsEXT 0x00000002

conNameIndirectCommandsLayoutUsageFlagBitsEXT :: String
conNameIndirectCommandsLayoutUsageFlagBitsEXT :: String
conNameIndirectCommandsLayoutUsageFlagBitsEXT = String
"IndirectCommandsLayoutUsageFlagBitsEXT"

enumPrefixIndirectCommandsLayoutUsageFlagBitsEXT :: String
enumPrefixIndirectCommandsLayoutUsageFlagBitsEXT :: String
enumPrefixIndirectCommandsLayoutUsageFlagBitsEXT = String
"INDIRECT_COMMANDS_LAYOUT_USAGE_"

showTableIndirectCommandsLayoutUsageFlagBitsEXT :: [(IndirectCommandsLayoutUsageFlagBitsEXT, String)]
showTableIndirectCommandsLayoutUsageFlagBitsEXT :: [(IndirectCommandsLayoutUsageFlagsEXT, String)]
showTableIndirectCommandsLayoutUsageFlagBitsEXT =
  [
    ( IndirectCommandsLayoutUsageFlagsEXT
INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_EXT
    , String
"EXPLICIT_PREPROCESS_BIT_EXT"
    )
  ,
    ( IndirectCommandsLayoutUsageFlagsEXT
INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_EXT
    , String
"UNORDERED_SEQUENCES_BIT_EXT"
    )
  ]

instance Show IndirectCommandsLayoutUsageFlagBitsEXT where
  showsPrec :: Int -> IndirectCommandsLayoutUsageFlagsEXT -> ShowS
showsPrec =
    String
-> [(IndirectCommandsLayoutUsageFlagsEXT, String)]
-> String
-> (IndirectCommandsLayoutUsageFlagsEXT -> Flags)
-> (Flags -> ShowS)
-> Int
-> IndirectCommandsLayoutUsageFlagsEXT
-> ShowS
forall a i.
Eq a =>
String
-> [(a, String)]
-> String
-> (a -> i)
-> (i -> ShowS)
-> Int
-> a
-> ShowS
enumShowsPrec
      String
enumPrefixIndirectCommandsLayoutUsageFlagBitsEXT
      [(IndirectCommandsLayoutUsageFlagsEXT, String)]
showTableIndirectCommandsLayoutUsageFlagBitsEXT
      String
conNameIndirectCommandsLayoutUsageFlagBitsEXT
      (\(IndirectCommandsLayoutUsageFlagBitsEXT Flags
x) -> Flags
x)
      (\Flags
x -> String -> ShowS
showString String
"0x" ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Flags -> ShowS
forall a. Integral a => a -> ShowS
showHex Flags
x)

instance Read IndirectCommandsLayoutUsageFlagBitsEXT where
  readPrec :: ReadPrec IndirectCommandsLayoutUsageFlagsEXT
readPrec =
    String
-> [(IndirectCommandsLayoutUsageFlagsEXT, String)]
-> String
-> (Flags -> IndirectCommandsLayoutUsageFlagsEXT)
-> ReadPrec IndirectCommandsLayoutUsageFlagsEXT
forall i a.
Read i =>
String -> [(a, String)] -> String -> (i -> a) -> ReadPrec a
enumReadPrec
      String
enumPrefixIndirectCommandsLayoutUsageFlagBitsEXT
      [(IndirectCommandsLayoutUsageFlagsEXT, String)]
showTableIndirectCommandsLayoutUsageFlagBitsEXT
      String
conNameIndirectCommandsLayoutUsageFlagBitsEXT
      Flags -> IndirectCommandsLayoutUsageFlagsEXT
IndirectCommandsLayoutUsageFlagBitsEXT

-- | VkIndirectExecutionSetInfoTypeEXT - Enum specifying allowed usage of an
-- indirect execution set
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_device_generated_commands VK_EXT_device_generated_commands>,
-- 'IndirectCommandsExecutionSetTokenEXT',
-- 'IndirectExecutionSetCreateInfoEXT'
newtype IndirectExecutionSetInfoTypeEXT = IndirectExecutionSetInfoTypeEXT Int32
  deriving newtype (IndirectExecutionSetInfoTypeEXT
-> IndirectExecutionSetInfoTypeEXT -> "isPreprocessed" ::: Bool
(IndirectExecutionSetInfoTypeEXT
 -> IndirectExecutionSetInfoTypeEXT -> "isPreprocessed" ::: Bool)
-> (IndirectExecutionSetInfoTypeEXT
    -> IndirectExecutionSetInfoTypeEXT -> "isPreprocessed" ::: Bool)
-> Eq IndirectExecutionSetInfoTypeEXT
forall a.
(a -> a -> "isPreprocessed" ::: Bool)
-> (a -> a -> "isPreprocessed" ::: Bool) -> Eq a
$c== :: IndirectExecutionSetInfoTypeEXT
-> IndirectExecutionSetInfoTypeEXT -> "isPreprocessed" ::: Bool
== :: IndirectExecutionSetInfoTypeEXT
-> IndirectExecutionSetInfoTypeEXT -> "isPreprocessed" ::: Bool
$c/= :: IndirectExecutionSetInfoTypeEXT
-> IndirectExecutionSetInfoTypeEXT -> "isPreprocessed" ::: Bool
/= :: IndirectExecutionSetInfoTypeEXT
-> IndirectExecutionSetInfoTypeEXT -> "isPreprocessed" ::: Bool
Eq, Eq IndirectExecutionSetInfoTypeEXT
Eq IndirectExecutionSetInfoTypeEXT =>
(IndirectExecutionSetInfoTypeEXT
 -> IndirectExecutionSetInfoTypeEXT -> Ordering)
-> (IndirectExecutionSetInfoTypeEXT
    -> IndirectExecutionSetInfoTypeEXT -> "isPreprocessed" ::: Bool)
-> (IndirectExecutionSetInfoTypeEXT
    -> IndirectExecutionSetInfoTypeEXT -> "isPreprocessed" ::: Bool)
-> (IndirectExecutionSetInfoTypeEXT
    -> IndirectExecutionSetInfoTypeEXT -> "isPreprocessed" ::: Bool)
-> (IndirectExecutionSetInfoTypeEXT
    -> IndirectExecutionSetInfoTypeEXT -> "isPreprocessed" ::: Bool)
-> (IndirectExecutionSetInfoTypeEXT
    -> IndirectExecutionSetInfoTypeEXT
    -> IndirectExecutionSetInfoTypeEXT)
-> (IndirectExecutionSetInfoTypeEXT
    -> IndirectExecutionSetInfoTypeEXT
    -> IndirectExecutionSetInfoTypeEXT)
-> Ord IndirectExecutionSetInfoTypeEXT
IndirectExecutionSetInfoTypeEXT
-> IndirectExecutionSetInfoTypeEXT -> "isPreprocessed" ::: Bool
IndirectExecutionSetInfoTypeEXT
-> IndirectExecutionSetInfoTypeEXT -> Ordering
IndirectExecutionSetInfoTypeEXT
-> IndirectExecutionSetInfoTypeEXT
-> IndirectExecutionSetInfoTypeEXT
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> "isPreprocessed" ::: Bool)
-> (a -> a -> "isPreprocessed" ::: Bool)
-> (a -> a -> "isPreprocessed" ::: Bool)
-> (a -> a -> "isPreprocessed" ::: Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: IndirectExecutionSetInfoTypeEXT
-> IndirectExecutionSetInfoTypeEXT -> Ordering
compare :: IndirectExecutionSetInfoTypeEXT
-> IndirectExecutionSetInfoTypeEXT -> Ordering
$c< :: IndirectExecutionSetInfoTypeEXT
-> IndirectExecutionSetInfoTypeEXT -> "isPreprocessed" ::: Bool
< :: IndirectExecutionSetInfoTypeEXT
-> IndirectExecutionSetInfoTypeEXT -> "isPreprocessed" ::: Bool
$c<= :: IndirectExecutionSetInfoTypeEXT
-> IndirectExecutionSetInfoTypeEXT -> "isPreprocessed" ::: Bool
<= :: IndirectExecutionSetInfoTypeEXT
-> IndirectExecutionSetInfoTypeEXT -> "isPreprocessed" ::: Bool
$c> :: IndirectExecutionSetInfoTypeEXT
-> IndirectExecutionSetInfoTypeEXT -> "isPreprocessed" ::: Bool
> :: IndirectExecutionSetInfoTypeEXT
-> IndirectExecutionSetInfoTypeEXT -> "isPreprocessed" ::: Bool
$c>= :: IndirectExecutionSetInfoTypeEXT
-> IndirectExecutionSetInfoTypeEXT -> "isPreprocessed" ::: Bool
>= :: IndirectExecutionSetInfoTypeEXT
-> IndirectExecutionSetInfoTypeEXT -> "isPreprocessed" ::: Bool
$cmax :: IndirectExecutionSetInfoTypeEXT
-> IndirectExecutionSetInfoTypeEXT
-> IndirectExecutionSetInfoTypeEXT
max :: IndirectExecutionSetInfoTypeEXT
-> IndirectExecutionSetInfoTypeEXT
-> IndirectExecutionSetInfoTypeEXT
$cmin :: IndirectExecutionSetInfoTypeEXT
-> IndirectExecutionSetInfoTypeEXT
-> IndirectExecutionSetInfoTypeEXT
min :: IndirectExecutionSetInfoTypeEXT
-> IndirectExecutionSetInfoTypeEXT
-> IndirectExecutionSetInfoTypeEXT
Ord, Ptr IndirectExecutionSetInfoTypeEXT
-> IO IndirectExecutionSetInfoTypeEXT
Ptr IndirectExecutionSetInfoTypeEXT
-> Int -> IO IndirectExecutionSetInfoTypeEXT
Ptr IndirectExecutionSetInfoTypeEXT
-> Int -> IndirectExecutionSetInfoTypeEXT -> IO ()
Ptr IndirectExecutionSetInfoTypeEXT
-> IndirectExecutionSetInfoTypeEXT -> IO ()
IndirectExecutionSetInfoTypeEXT -> Int
(IndirectExecutionSetInfoTypeEXT -> Int)
-> (IndirectExecutionSetInfoTypeEXT -> Int)
-> (Ptr IndirectExecutionSetInfoTypeEXT
    -> Int -> IO IndirectExecutionSetInfoTypeEXT)
-> (Ptr IndirectExecutionSetInfoTypeEXT
    -> Int -> IndirectExecutionSetInfoTypeEXT -> IO ())
-> (forall b. Ptr b -> Int -> IO IndirectExecutionSetInfoTypeEXT)
-> (forall b.
    Ptr b -> Int -> IndirectExecutionSetInfoTypeEXT -> IO ())
-> (Ptr IndirectExecutionSetInfoTypeEXT
    -> IO IndirectExecutionSetInfoTypeEXT)
-> (Ptr IndirectExecutionSetInfoTypeEXT
    -> IndirectExecutionSetInfoTypeEXT -> IO ())
-> Storable IndirectExecutionSetInfoTypeEXT
forall b. Ptr b -> Int -> IO IndirectExecutionSetInfoTypeEXT
forall b. Ptr b -> Int -> IndirectExecutionSetInfoTypeEXT -> IO ()
forall a.
(a -> Int)
-> (a -> Int)
-> (Ptr a -> Int -> IO a)
-> (Ptr a -> Int -> a -> IO ())
-> (forall b. Ptr b -> Int -> IO a)
-> (forall b. Ptr b -> Int -> a -> IO ())
-> (Ptr a -> IO a)
-> (Ptr a -> a -> IO ())
-> Storable a
$csizeOf :: IndirectExecutionSetInfoTypeEXT -> Int
sizeOf :: IndirectExecutionSetInfoTypeEXT -> Int
$calignment :: IndirectExecutionSetInfoTypeEXT -> Int
alignment :: IndirectExecutionSetInfoTypeEXT -> Int
$cpeekElemOff :: Ptr IndirectExecutionSetInfoTypeEXT
-> Int -> IO IndirectExecutionSetInfoTypeEXT
peekElemOff :: Ptr IndirectExecutionSetInfoTypeEXT
-> Int -> IO IndirectExecutionSetInfoTypeEXT
$cpokeElemOff :: Ptr IndirectExecutionSetInfoTypeEXT
-> Int -> IndirectExecutionSetInfoTypeEXT -> IO ()
pokeElemOff :: Ptr IndirectExecutionSetInfoTypeEXT
-> Int -> IndirectExecutionSetInfoTypeEXT -> IO ()
$cpeekByteOff :: forall b. Ptr b -> Int -> IO IndirectExecutionSetInfoTypeEXT
peekByteOff :: forall b. Ptr b -> Int -> IO IndirectExecutionSetInfoTypeEXT
$cpokeByteOff :: forall b. Ptr b -> Int -> IndirectExecutionSetInfoTypeEXT -> IO ()
pokeByteOff :: forall b. Ptr b -> Int -> IndirectExecutionSetInfoTypeEXT -> IO ()
$cpeek :: Ptr IndirectExecutionSetInfoTypeEXT
-> IO IndirectExecutionSetInfoTypeEXT
peek :: Ptr IndirectExecutionSetInfoTypeEXT
-> IO IndirectExecutionSetInfoTypeEXT
$cpoke :: Ptr IndirectExecutionSetInfoTypeEXT
-> IndirectExecutionSetInfoTypeEXT -> IO ()
poke :: Ptr IndirectExecutionSetInfoTypeEXT
-> IndirectExecutionSetInfoTypeEXT -> IO ()
Storable, IndirectExecutionSetInfoTypeEXT
IndirectExecutionSetInfoTypeEXT
-> Zero IndirectExecutionSetInfoTypeEXT
forall a. a -> Zero a
$czero :: IndirectExecutionSetInfoTypeEXT
zero :: IndirectExecutionSetInfoTypeEXT
Zero)

-- | 'INDIRECT_EXECUTION_SET_INFO_TYPE_PIPELINES_EXT' specifies that the
-- indirect execution set contains 'Vulkan.Core10.Handles.Pipeline'
-- objects.
pattern $mINDIRECT_EXECUTION_SET_INFO_TYPE_PIPELINES_EXT :: forall {r}.
IndirectExecutionSetInfoTypeEXT
-> ((# #) -> r) -> ((# #) -> r) -> r
$bINDIRECT_EXECUTION_SET_INFO_TYPE_PIPELINES_EXT :: IndirectExecutionSetInfoTypeEXT
INDIRECT_EXECUTION_SET_INFO_TYPE_PIPELINES_EXT = IndirectExecutionSetInfoTypeEXT 0

-- | 'INDIRECT_EXECUTION_SET_INFO_TYPE_SHADER_OBJECTS_EXT' specifies that the
-- indirect execution set contains 'Vulkan.Extensions.Handles.ShaderEXT'
-- objects.
pattern $mINDIRECT_EXECUTION_SET_INFO_TYPE_SHADER_OBJECTS_EXT :: forall {r}.
IndirectExecutionSetInfoTypeEXT
-> ((# #) -> r) -> ((# #) -> r) -> r
$bINDIRECT_EXECUTION_SET_INFO_TYPE_SHADER_OBJECTS_EXT :: IndirectExecutionSetInfoTypeEXT
INDIRECT_EXECUTION_SET_INFO_TYPE_SHADER_OBJECTS_EXT = IndirectExecutionSetInfoTypeEXT 1

{-# COMPLETE
  INDIRECT_EXECUTION_SET_INFO_TYPE_PIPELINES_EXT
  , INDIRECT_EXECUTION_SET_INFO_TYPE_SHADER_OBJECTS_EXT ::
    IndirectExecutionSetInfoTypeEXT
  #-}

conNameIndirectExecutionSetInfoTypeEXT :: String
conNameIndirectExecutionSetInfoTypeEXT :: String
conNameIndirectExecutionSetInfoTypeEXT = String
"IndirectExecutionSetInfoTypeEXT"

enumPrefixIndirectExecutionSetInfoTypeEXT :: String
enumPrefixIndirectExecutionSetInfoTypeEXT :: String
enumPrefixIndirectExecutionSetInfoTypeEXT = String
"INDIRECT_EXECUTION_SET_INFO_TYPE_"

showTableIndirectExecutionSetInfoTypeEXT :: [(IndirectExecutionSetInfoTypeEXT, String)]
showTableIndirectExecutionSetInfoTypeEXT :: [(IndirectExecutionSetInfoTypeEXT, String)]
showTableIndirectExecutionSetInfoTypeEXT =
  [
    ( IndirectExecutionSetInfoTypeEXT
INDIRECT_EXECUTION_SET_INFO_TYPE_PIPELINES_EXT
    , String
"PIPELINES_EXT"
    )
  ,
    ( IndirectExecutionSetInfoTypeEXT
INDIRECT_EXECUTION_SET_INFO_TYPE_SHADER_OBJECTS_EXT
    , String
"SHADER_OBJECTS_EXT"
    )
  ]

instance Show IndirectExecutionSetInfoTypeEXT where
  showsPrec :: Int -> IndirectExecutionSetInfoTypeEXT -> ShowS
showsPrec =
    String
-> [(IndirectExecutionSetInfoTypeEXT, String)]
-> String
-> (IndirectExecutionSetInfoTypeEXT -> Int32)
-> (Int32 -> ShowS)
-> Int
-> IndirectExecutionSetInfoTypeEXT
-> ShowS
forall a i.
Eq a =>
String
-> [(a, String)]
-> String
-> (a -> i)
-> (i -> ShowS)
-> Int
-> a
-> ShowS
enumShowsPrec
      String
enumPrefixIndirectExecutionSetInfoTypeEXT
      [(IndirectExecutionSetInfoTypeEXT, String)]
showTableIndirectExecutionSetInfoTypeEXT
      String
conNameIndirectExecutionSetInfoTypeEXT
      (\(IndirectExecutionSetInfoTypeEXT Int32
x) -> Int32
x)
      (Int -> Int32 -> ShowS
forall a. Show a => Int -> a -> ShowS
showsPrec Int
11)

instance Read IndirectExecutionSetInfoTypeEXT where
  readPrec :: ReadPrec IndirectExecutionSetInfoTypeEXT
readPrec =
    String
-> [(IndirectExecutionSetInfoTypeEXT, String)]
-> String
-> (Int32 -> IndirectExecutionSetInfoTypeEXT)
-> ReadPrec IndirectExecutionSetInfoTypeEXT
forall i a.
Read i =>
String -> [(a, String)] -> String -> (i -> a) -> ReadPrec a
enumReadPrec
      String
enumPrefixIndirectExecutionSetInfoTypeEXT
      [(IndirectExecutionSetInfoTypeEXT, String)]
showTableIndirectExecutionSetInfoTypeEXT
      String
conNameIndirectExecutionSetInfoTypeEXT
      Int32 -> IndirectExecutionSetInfoTypeEXT
IndirectExecutionSetInfoTypeEXT

type IndirectCommandsInputModeFlagsEXT = IndirectCommandsInputModeFlagBitsEXT

-- | VkIndirectCommandsInputModeFlagBitsEXT - Bitmask specifying allowed
-- usage of an indirect commands layout
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_device_generated_commands VK_EXT_device_generated_commands>,
-- 'IndirectCommandsIndexBufferTokenEXT',
-- 'IndirectCommandsInputModeFlagsEXT'
newtype IndirectCommandsInputModeFlagBitsEXT = IndirectCommandsInputModeFlagBitsEXT Flags
  deriving newtype (IndirectCommandsInputModeFlagsEXT
-> IndirectCommandsInputModeFlagsEXT -> "isPreprocessed" ::: Bool
(IndirectCommandsInputModeFlagsEXT
 -> IndirectCommandsInputModeFlagsEXT -> "isPreprocessed" ::: Bool)
-> (IndirectCommandsInputModeFlagsEXT
    -> IndirectCommandsInputModeFlagsEXT -> "isPreprocessed" ::: Bool)
-> Eq IndirectCommandsInputModeFlagsEXT
forall a.
(a -> a -> "isPreprocessed" ::: Bool)
-> (a -> a -> "isPreprocessed" ::: Bool) -> Eq a
$c== :: IndirectCommandsInputModeFlagsEXT
-> IndirectCommandsInputModeFlagsEXT -> "isPreprocessed" ::: Bool
== :: IndirectCommandsInputModeFlagsEXT
-> IndirectCommandsInputModeFlagsEXT -> "isPreprocessed" ::: Bool
$c/= :: IndirectCommandsInputModeFlagsEXT
-> IndirectCommandsInputModeFlagsEXT -> "isPreprocessed" ::: Bool
/= :: IndirectCommandsInputModeFlagsEXT
-> IndirectCommandsInputModeFlagsEXT -> "isPreprocessed" ::: Bool
Eq, Eq IndirectCommandsInputModeFlagsEXT
Eq IndirectCommandsInputModeFlagsEXT =>
(IndirectCommandsInputModeFlagsEXT
 -> IndirectCommandsInputModeFlagsEXT -> Ordering)
-> (IndirectCommandsInputModeFlagsEXT
    -> IndirectCommandsInputModeFlagsEXT -> "isPreprocessed" ::: Bool)
-> (IndirectCommandsInputModeFlagsEXT
    -> IndirectCommandsInputModeFlagsEXT -> "isPreprocessed" ::: Bool)
-> (IndirectCommandsInputModeFlagsEXT
    -> IndirectCommandsInputModeFlagsEXT -> "isPreprocessed" ::: Bool)
-> (IndirectCommandsInputModeFlagsEXT
    -> IndirectCommandsInputModeFlagsEXT -> "isPreprocessed" ::: Bool)
-> (IndirectCommandsInputModeFlagsEXT
    -> IndirectCommandsInputModeFlagsEXT
    -> IndirectCommandsInputModeFlagsEXT)
-> (IndirectCommandsInputModeFlagsEXT
    -> IndirectCommandsInputModeFlagsEXT
    -> IndirectCommandsInputModeFlagsEXT)
-> Ord IndirectCommandsInputModeFlagsEXT
IndirectCommandsInputModeFlagsEXT
-> IndirectCommandsInputModeFlagsEXT -> "isPreprocessed" ::: Bool
IndirectCommandsInputModeFlagsEXT
-> IndirectCommandsInputModeFlagsEXT -> Ordering
IndirectCommandsInputModeFlagsEXT
-> IndirectCommandsInputModeFlagsEXT
-> IndirectCommandsInputModeFlagsEXT
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> "isPreprocessed" ::: Bool)
-> (a -> a -> "isPreprocessed" ::: Bool)
-> (a -> a -> "isPreprocessed" ::: Bool)
-> (a -> a -> "isPreprocessed" ::: Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: IndirectCommandsInputModeFlagsEXT
-> IndirectCommandsInputModeFlagsEXT -> Ordering
compare :: IndirectCommandsInputModeFlagsEXT
-> IndirectCommandsInputModeFlagsEXT -> Ordering
$c< :: IndirectCommandsInputModeFlagsEXT
-> IndirectCommandsInputModeFlagsEXT -> "isPreprocessed" ::: Bool
< :: IndirectCommandsInputModeFlagsEXT
-> IndirectCommandsInputModeFlagsEXT -> "isPreprocessed" ::: Bool
$c<= :: IndirectCommandsInputModeFlagsEXT
-> IndirectCommandsInputModeFlagsEXT -> "isPreprocessed" ::: Bool
<= :: IndirectCommandsInputModeFlagsEXT
-> IndirectCommandsInputModeFlagsEXT -> "isPreprocessed" ::: Bool
$c> :: IndirectCommandsInputModeFlagsEXT
-> IndirectCommandsInputModeFlagsEXT -> "isPreprocessed" ::: Bool
> :: IndirectCommandsInputModeFlagsEXT
-> IndirectCommandsInputModeFlagsEXT -> "isPreprocessed" ::: Bool
$c>= :: IndirectCommandsInputModeFlagsEXT
-> IndirectCommandsInputModeFlagsEXT -> "isPreprocessed" ::: Bool
>= :: IndirectCommandsInputModeFlagsEXT
-> IndirectCommandsInputModeFlagsEXT -> "isPreprocessed" ::: Bool
$cmax :: IndirectCommandsInputModeFlagsEXT
-> IndirectCommandsInputModeFlagsEXT
-> IndirectCommandsInputModeFlagsEXT
max :: IndirectCommandsInputModeFlagsEXT
-> IndirectCommandsInputModeFlagsEXT
-> IndirectCommandsInputModeFlagsEXT
$cmin :: IndirectCommandsInputModeFlagsEXT
-> IndirectCommandsInputModeFlagsEXT
-> IndirectCommandsInputModeFlagsEXT
min :: IndirectCommandsInputModeFlagsEXT
-> IndirectCommandsInputModeFlagsEXT
-> IndirectCommandsInputModeFlagsEXT
Ord, Ptr IndirectCommandsInputModeFlagsEXT
-> IO IndirectCommandsInputModeFlagsEXT
Ptr IndirectCommandsInputModeFlagsEXT
-> Int -> IO IndirectCommandsInputModeFlagsEXT
Ptr IndirectCommandsInputModeFlagsEXT
-> Int -> IndirectCommandsInputModeFlagsEXT -> IO ()
Ptr IndirectCommandsInputModeFlagsEXT
-> IndirectCommandsInputModeFlagsEXT -> IO ()
IndirectCommandsInputModeFlagsEXT -> Int
(IndirectCommandsInputModeFlagsEXT -> Int)
-> (IndirectCommandsInputModeFlagsEXT -> Int)
-> (Ptr IndirectCommandsInputModeFlagsEXT
    -> Int -> IO IndirectCommandsInputModeFlagsEXT)
-> (Ptr IndirectCommandsInputModeFlagsEXT
    -> Int -> IndirectCommandsInputModeFlagsEXT -> IO ())
-> (forall b. Ptr b -> Int -> IO IndirectCommandsInputModeFlagsEXT)
-> (forall b.
    Ptr b -> Int -> IndirectCommandsInputModeFlagsEXT -> IO ())
-> (Ptr IndirectCommandsInputModeFlagsEXT
    -> IO IndirectCommandsInputModeFlagsEXT)
-> (Ptr IndirectCommandsInputModeFlagsEXT
    -> IndirectCommandsInputModeFlagsEXT -> IO ())
-> Storable IndirectCommandsInputModeFlagsEXT
forall b. Ptr b -> Int -> IO IndirectCommandsInputModeFlagsEXT
forall b.
Ptr b -> Int -> IndirectCommandsInputModeFlagsEXT -> IO ()
forall a.
(a -> Int)
-> (a -> Int)
-> (Ptr a -> Int -> IO a)
-> (Ptr a -> Int -> a -> IO ())
-> (forall b. Ptr b -> Int -> IO a)
-> (forall b. Ptr b -> Int -> a -> IO ())
-> (Ptr a -> IO a)
-> (Ptr a -> a -> IO ())
-> Storable a
$csizeOf :: IndirectCommandsInputModeFlagsEXT -> Int
sizeOf :: IndirectCommandsInputModeFlagsEXT -> Int
$calignment :: IndirectCommandsInputModeFlagsEXT -> Int
alignment :: IndirectCommandsInputModeFlagsEXT -> Int
$cpeekElemOff :: Ptr IndirectCommandsInputModeFlagsEXT
-> Int -> IO IndirectCommandsInputModeFlagsEXT
peekElemOff :: Ptr IndirectCommandsInputModeFlagsEXT
-> Int -> IO IndirectCommandsInputModeFlagsEXT
$cpokeElemOff :: Ptr IndirectCommandsInputModeFlagsEXT
-> Int -> IndirectCommandsInputModeFlagsEXT -> IO ()
pokeElemOff :: Ptr IndirectCommandsInputModeFlagsEXT
-> Int -> IndirectCommandsInputModeFlagsEXT -> IO ()
$cpeekByteOff :: forall b. Ptr b -> Int -> IO IndirectCommandsInputModeFlagsEXT
peekByteOff :: forall b. Ptr b -> Int -> IO IndirectCommandsInputModeFlagsEXT
$cpokeByteOff :: forall b.
Ptr b -> Int -> IndirectCommandsInputModeFlagsEXT -> IO ()
pokeByteOff :: forall b.
Ptr b -> Int -> IndirectCommandsInputModeFlagsEXT -> IO ()
$cpeek :: Ptr IndirectCommandsInputModeFlagsEXT
-> IO IndirectCommandsInputModeFlagsEXT
peek :: Ptr IndirectCommandsInputModeFlagsEXT
-> IO IndirectCommandsInputModeFlagsEXT
$cpoke :: Ptr IndirectCommandsInputModeFlagsEXT
-> IndirectCommandsInputModeFlagsEXT -> IO ()
poke :: Ptr IndirectCommandsInputModeFlagsEXT
-> IndirectCommandsInputModeFlagsEXT -> IO ()
Storable, IndirectCommandsInputModeFlagsEXT
IndirectCommandsInputModeFlagsEXT
-> Zero IndirectCommandsInputModeFlagsEXT
forall a. a -> Zero a
$czero :: IndirectCommandsInputModeFlagsEXT
zero :: IndirectCommandsInputModeFlagsEXT
Zero, Eq IndirectCommandsInputModeFlagsEXT
IndirectCommandsInputModeFlagsEXT
Eq IndirectCommandsInputModeFlagsEXT =>
(IndirectCommandsInputModeFlagsEXT
 -> IndirectCommandsInputModeFlagsEXT
 -> IndirectCommandsInputModeFlagsEXT)
-> (IndirectCommandsInputModeFlagsEXT
    -> IndirectCommandsInputModeFlagsEXT
    -> IndirectCommandsInputModeFlagsEXT)
-> (IndirectCommandsInputModeFlagsEXT
    -> IndirectCommandsInputModeFlagsEXT
    -> IndirectCommandsInputModeFlagsEXT)
-> (IndirectCommandsInputModeFlagsEXT
    -> IndirectCommandsInputModeFlagsEXT)
-> (IndirectCommandsInputModeFlagsEXT
    -> Int -> IndirectCommandsInputModeFlagsEXT)
-> (IndirectCommandsInputModeFlagsEXT
    -> Int -> IndirectCommandsInputModeFlagsEXT)
-> IndirectCommandsInputModeFlagsEXT
-> (Int -> IndirectCommandsInputModeFlagsEXT)
-> (IndirectCommandsInputModeFlagsEXT
    -> Int -> IndirectCommandsInputModeFlagsEXT)
-> (IndirectCommandsInputModeFlagsEXT
    -> Int -> IndirectCommandsInputModeFlagsEXT)
-> (IndirectCommandsInputModeFlagsEXT
    -> Int -> IndirectCommandsInputModeFlagsEXT)
-> (IndirectCommandsInputModeFlagsEXT
    -> Int -> "isPreprocessed" ::: Bool)
-> (IndirectCommandsInputModeFlagsEXT -> Maybe Int)
-> (IndirectCommandsInputModeFlagsEXT -> Int)
-> (IndirectCommandsInputModeFlagsEXT -> "isPreprocessed" ::: Bool)
-> (IndirectCommandsInputModeFlagsEXT
    -> Int -> IndirectCommandsInputModeFlagsEXT)
-> (IndirectCommandsInputModeFlagsEXT
    -> Int -> IndirectCommandsInputModeFlagsEXT)
-> (IndirectCommandsInputModeFlagsEXT
    -> Int -> IndirectCommandsInputModeFlagsEXT)
-> (IndirectCommandsInputModeFlagsEXT
    -> Int -> IndirectCommandsInputModeFlagsEXT)
-> (IndirectCommandsInputModeFlagsEXT
    -> Int -> IndirectCommandsInputModeFlagsEXT)
-> (IndirectCommandsInputModeFlagsEXT
    -> Int -> IndirectCommandsInputModeFlagsEXT)
-> (IndirectCommandsInputModeFlagsEXT -> Int)
-> Bits IndirectCommandsInputModeFlagsEXT
Int -> IndirectCommandsInputModeFlagsEXT
IndirectCommandsInputModeFlagsEXT -> "isPreprocessed" ::: Bool
IndirectCommandsInputModeFlagsEXT -> Int
IndirectCommandsInputModeFlagsEXT -> Maybe Int
IndirectCommandsInputModeFlagsEXT
-> IndirectCommandsInputModeFlagsEXT
IndirectCommandsInputModeFlagsEXT
-> Int -> "isPreprocessed" ::: Bool
IndirectCommandsInputModeFlagsEXT
-> Int -> IndirectCommandsInputModeFlagsEXT
IndirectCommandsInputModeFlagsEXT
-> IndirectCommandsInputModeFlagsEXT
-> IndirectCommandsInputModeFlagsEXT
forall a.
Eq a =>
(a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> a
-> (Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> "isPreprocessed" ::: Bool)
-> (a -> Maybe Int)
-> (a -> Int)
-> (a -> "isPreprocessed" ::: Bool)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int)
-> Bits a
$c.&. :: IndirectCommandsInputModeFlagsEXT
-> IndirectCommandsInputModeFlagsEXT
-> IndirectCommandsInputModeFlagsEXT
.&. :: IndirectCommandsInputModeFlagsEXT
-> IndirectCommandsInputModeFlagsEXT
-> IndirectCommandsInputModeFlagsEXT
$c.|. :: IndirectCommandsInputModeFlagsEXT
-> IndirectCommandsInputModeFlagsEXT
-> IndirectCommandsInputModeFlagsEXT
.|. :: IndirectCommandsInputModeFlagsEXT
-> IndirectCommandsInputModeFlagsEXT
-> IndirectCommandsInputModeFlagsEXT
$cxor :: IndirectCommandsInputModeFlagsEXT
-> IndirectCommandsInputModeFlagsEXT
-> IndirectCommandsInputModeFlagsEXT
xor :: IndirectCommandsInputModeFlagsEXT
-> IndirectCommandsInputModeFlagsEXT
-> IndirectCommandsInputModeFlagsEXT
$ccomplement :: IndirectCommandsInputModeFlagsEXT
-> IndirectCommandsInputModeFlagsEXT
complement :: IndirectCommandsInputModeFlagsEXT
-> IndirectCommandsInputModeFlagsEXT
$cshift :: IndirectCommandsInputModeFlagsEXT
-> Int -> IndirectCommandsInputModeFlagsEXT
shift :: IndirectCommandsInputModeFlagsEXT
-> Int -> IndirectCommandsInputModeFlagsEXT
$crotate :: IndirectCommandsInputModeFlagsEXT
-> Int -> IndirectCommandsInputModeFlagsEXT
rotate :: IndirectCommandsInputModeFlagsEXT
-> Int -> IndirectCommandsInputModeFlagsEXT
$czeroBits :: IndirectCommandsInputModeFlagsEXT
zeroBits :: IndirectCommandsInputModeFlagsEXT
$cbit :: Int -> IndirectCommandsInputModeFlagsEXT
bit :: Int -> IndirectCommandsInputModeFlagsEXT
$csetBit :: IndirectCommandsInputModeFlagsEXT
-> Int -> IndirectCommandsInputModeFlagsEXT
setBit :: IndirectCommandsInputModeFlagsEXT
-> Int -> IndirectCommandsInputModeFlagsEXT
$cclearBit :: IndirectCommandsInputModeFlagsEXT
-> Int -> IndirectCommandsInputModeFlagsEXT
clearBit :: IndirectCommandsInputModeFlagsEXT
-> Int -> IndirectCommandsInputModeFlagsEXT
$ccomplementBit :: IndirectCommandsInputModeFlagsEXT
-> Int -> IndirectCommandsInputModeFlagsEXT
complementBit :: IndirectCommandsInputModeFlagsEXT
-> Int -> IndirectCommandsInputModeFlagsEXT
$ctestBit :: IndirectCommandsInputModeFlagsEXT
-> Int -> "isPreprocessed" ::: Bool
testBit :: IndirectCommandsInputModeFlagsEXT
-> Int -> "isPreprocessed" ::: Bool
$cbitSizeMaybe :: IndirectCommandsInputModeFlagsEXT -> Maybe Int
bitSizeMaybe :: IndirectCommandsInputModeFlagsEXT -> Maybe Int
$cbitSize :: IndirectCommandsInputModeFlagsEXT -> Int
bitSize :: IndirectCommandsInputModeFlagsEXT -> Int
$cisSigned :: IndirectCommandsInputModeFlagsEXT -> "isPreprocessed" ::: Bool
isSigned :: IndirectCommandsInputModeFlagsEXT -> "isPreprocessed" ::: Bool
$cshiftL :: IndirectCommandsInputModeFlagsEXT
-> Int -> IndirectCommandsInputModeFlagsEXT
shiftL :: IndirectCommandsInputModeFlagsEXT
-> Int -> IndirectCommandsInputModeFlagsEXT
$cunsafeShiftL :: IndirectCommandsInputModeFlagsEXT
-> Int -> IndirectCommandsInputModeFlagsEXT
unsafeShiftL :: IndirectCommandsInputModeFlagsEXT
-> Int -> IndirectCommandsInputModeFlagsEXT
$cshiftR :: IndirectCommandsInputModeFlagsEXT
-> Int -> IndirectCommandsInputModeFlagsEXT
shiftR :: IndirectCommandsInputModeFlagsEXT
-> Int -> IndirectCommandsInputModeFlagsEXT
$cunsafeShiftR :: IndirectCommandsInputModeFlagsEXT
-> Int -> IndirectCommandsInputModeFlagsEXT
unsafeShiftR :: IndirectCommandsInputModeFlagsEXT
-> Int -> IndirectCommandsInputModeFlagsEXT
$crotateL :: IndirectCommandsInputModeFlagsEXT
-> Int -> IndirectCommandsInputModeFlagsEXT
rotateL :: IndirectCommandsInputModeFlagsEXT
-> Int -> IndirectCommandsInputModeFlagsEXT
$crotateR :: IndirectCommandsInputModeFlagsEXT
-> Int -> IndirectCommandsInputModeFlagsEXT
rotateR :: IndirectCommandsInputModeFlagsEXT
-> Int -> IndirectCommandsInputModeFlagsEXT
$cpopCount :: IndirectCommandsInputModeFlagsEXT -> Int
popCount :: IndirectCommandsInputModeFlagsEXT -> Int
Bits, Bits IndirectCommandsInputModeFlagsEXT
Bits IndirectCommandsInputModeFlagsEXT =>
(IndirectCommandsInputModeFlagsEXT -> Int)
-> (IndirectCommandsInputModeFlagsEXT -> Int)
-> (IndirectCommandsInputModeFlagsEXT -> Int)
-> FiniteBits IndirectCommandsInputModeFlagsEXT
IndirectCommandsInputModeFlagsEXT -> Int
forall b.
Bits b =>
(b -> Int) -> (b -> Int) -> (b -> Int) -> FiniteBits b
$cfiniteBitSize :: IndirectCommandsInputModeFlagsEXT -> Int
finiteBitSize :: IndirectCommandsInputModeFlagsEXT -> Int
$ccountLeadingZeros :: IndirectCommandsInputModeFlagsEXT -> Int
countLeadingZeros :: IndirectCommandsInputModeFlagsEXT -> Int
$ccountTrailingZeros :: IndirectCommandsInputModeFlagsEXT -> Int
countTrailingZeros :: IndirectCommandsInputModeFlagsEXT -> Int
FiniteBits)

-- | 'INDIRECT_COMMANDS_INPUT_MODE_VULKAN_INDEX_BUFFER_EXT' specifies that
-- the indirect buffer contains 'BindIndexBufferIndirectCommandEXT'.
pattern $mINDIRECT_COMMANDS_INPUT_MODE_VULKAN_INDEX_BUFFER_EXT :: forall {r}.
IndirectCommandsInputModeFlagsEXT
-> ((# #) -> r) -> ((# #) -> r) -> r
$bINDIRECT_COMMANDS_INPUT_MODE_VULKAN_INDEX_BUFFER_EXT :: IndirectCommandsInputModeFlagsEXT
INDIRECT_COMMANDS_INPUT_MODE_VULKAN_INDEX_BUFFER_EXT = IndirectCommandsInputModeFlagBitsEXT 0x00000001

-- | 'INDIRECT_COMMANDS_INPUT_MODE_DXGI_INDEX_BUFFER_EXT' specifies that the
-- indirect buffer contains @D3D12_INDEX_BUFFER_VIEW@.
pattern $mINDIRECT_COMMANDS_INPUT_MODE_DXGI_INDEX_BUFFER_EXT :: forall {r}.
IndirectCommandsInputModeFlagsEXT
-> ((# #) -> r) -> ((# #) -> r) -> r
$bINDIRECT_COMMANDS_INPUT_MODE_DXGI_INDEX_BUFFER_EXT :: IndirectCommandsInputModeFlagsEXT
INDIRECT_COMMANDS_INPUT_MODE_DXGI_INDEX_BUFFER_EXT = IndirectCommandsInputModeFlagBitsEXT 0x00000002

conNameIndirectCommandsInputModeFlagBitsEXT :: String
conNameIndirectCommandsInputModeFlagBitsEXT :: String
conNameIndirectCommandsInputModeFlagBitsEXT = String
"IndirectCommandsInputModeFlagBitsEXT"

enumPrefixIndirectCommandsInputModeFlagBitsEXT :: String
enumPrefixIndirectCommandsInputModeFlagBitsEXT :: String
enumPrefixIndirectCommandsInputModeFlagBitsEXT = String
"INDIRECT_COMMANDS_INPUT_MODE_"

showTableIndirectCommandsInputModeFlagBitsEXT :: [(IndirectCommandsInputModeFlagBitsEXT, String)]
showTableIndirectCommandsInputModeFlagBitsEXT :: [(IndirectCommandsInputModeFlagsEXT, String)]
showTableIndirectCommandsInputModeFlagBitsEXT =
  [
    ( IndirectCommandsInputModeFlagsEXT
INDIRECT_COMMANDS_INPUT_MODE_VULKAN_INDEX_BUFFER_EXT
    , String
"VULKAN_INDEX_BUFFER_EXT"
    )
  ,
    ( IndirectCommandsInputModeFlagsEXT
INDIRECT_COMMANDS_INPUT_MODE_DXGI_INDEX_BUFFER_EXT
    , String
"DXGI_INDEX_BUFFER_EXT"
    )
  ]

instance Show IndirectCommandsInputModeFlagBitsEXT where
  showsPrec :: Int -> IndirectCommandsInputModeFlagsEXT -> ShowS
showsPrec =
    String
-> [(IndirectCommandsInputModeFlagsEXT, String)]
-> String
-> (IndirectCommandsInputModeFlagsEXT -> Flags)
-> (Flags -> ShowS)
-> Int
-> IndirectCommandsInputModeFlagsEXT
-> ShowS
forall a i.
Eq a =>
String
-> [(a, String)]
-> String
-> (a -> i)
-> (i -> ShowS)
-> Int
-> a
-> ShowS
enumShowsPrec
      String
enumPrefixIndirectCommandsInputModeFlagBitsEXT
      [(IndirectCommandsInputModeFlagsEXT, String)]
showTableIndirectCommandsInputModeFlagBitsEXT
      String
conNameIndirectCommandsInputModeFlagBitsEXT
      (\(IndirectCommandsInputModeFlagBitsEXT Flags
x) -> Flags
x)
      (\Flags
x -> String -> ShowS
showString String
"0x" ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Flags -> ShowS
forall a. Integral a => a -> ShowS
showHex Flags
x)

instance Read IndirectCommandsInputModeFlagBitsEXT where
  readPrec :: ReadPrec IndirectCommandsInputModeFlagsEXT
readPrec =
    String
-> [(IndirectCommandsInputModeFlagsEXT, String)]
-> String
-> (Flags -> IndirectCommandsInputModeFlagsEXT)
-> ReadPrec IndirectCommandsInputModeFlagsEXT
forall i a.
Read i =>
String -> [(a, String)] -> String -> (i -> a) -> ReadPrec a
enumReadPrec
      String
enumPrefixIndirectCommandsInputModeFlagBitsEXT
      [(IndirectCommandsInputModeFlagsEXT, String)]
showTableIndirectCommandsInputModeFlagBitsEXT
      String
conNameIndirectCommandsInputModeFlagBitsEXT
      Flags -> IndirectCommandsInputModeFlagsEXT
IndirectCommandsInputModeFlagBitsEXT

-- | VkIndirectCommandsTokenTypeEXT - Enum specifying token commands
--
-- = Description
--
-- \'
--
-- +-------------------------------------------------------------+----------------------------------------------------------------------------------+
-- | __Common Tokens__                                           | __Command Data__                                                                 |
-- +=============================================================+==================================================================================+
-- | 'INDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT'            | @u32[]@ array of indices into the indirect execution set                         |
-- +-------------------------------------------------------------+----------------------------------------------------------------------------------+
-- | 'INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_EXT'            | @u32[]@ raw data                                                                 |
-- +-------------------------------------------------------------+----------------------------------------------------------------------------------+
-- | 'INDIRECT_COMMANDS_TOKEN_TYPE_SEQUENCE_INDEX_EXT'           | @u32@ placeholder data (not accessed by shader)                                  |
-- +-------------------------------------------------------------+----------------------------------------------------------------------------------+
-- | __Compute Tokens__                                          |                                                                                  |
-- +-------------------------------------------------------------+----------------------------------------------------------------------------------+
-- | 'INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_EXT'                 | 'Vulkan.Core10.OtherTypes.DispatchIndirectCommand'                               |
-- +-------------------------------------------------------------+----------------------------------------------------------------------------------+
-- | __Ray Tracing Tokens__                                      |                                                                                  |
-- +-------------------------------------------------------------+----------------------------------------------------------------------------------+
-- | 'INDIRECT_COMMANDS_TOKEN_TYPE_TRACE_RAYS2_EXT'              | 'Vulkan.Extensions.VK_KHR_ray_tracing_maintenance1.TraceRaysIndirectCommand2KHR' |
-- +-------------------------------------------------------------+----------------------------------------------------------------------------------+
-- | __Graphics State Tokens__                                   |                                                                                  |
-- +-------------------------------------------------------------+----------------------------------------------------------------------------------+
-- | 'INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_EXT'             | 'BindIndexBufferIndirectCommandEXT'                                              |
-- +-------------------------------------------------------------+----------------------------------------------------------------------------------+
-- | 'INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_EXT'            | 'BindVertexBufferIndirectCommandEXT'                                             |
-- +-------------------------------------------------------------+----------------------------------------------------------------------------------+
-- | __Graphics Draw Tokens__                                    |                                                                                  |
-- +-------------------------------------------------------------+----------------------------------------------------------------------------------+
-- | 'INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_EXT'             | 'Vulkan.Core10.OtherTypes.DrawIndexedIndirectCommand'                            |
-- +-------------------------------------------------------------+----------------------------------------------------------------------------------+
-- | 'INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_EXT'                     | 'Vulkan.Core10.OtherTypes.DrawIndirectCommand'                                   |
-- +-------------------------------------------------------------+----------------------------------------------------------------------------------+
-- | 'INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_EXT'          | 'Vulkan.Extensions.VK_EXT_mesh_shader.DrawMeshTasksIndirectCommandEXT'           |
-- +-------------------------------------------------------------+----------------------------------------------------------------------------------+
-- | 'INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_NV_EXT'       | 'Vulkan.Extensions.VK_NV_mesh_shader.DrawMeshTasksIndirectCommandNV'             |
-- +-------------------------------------------------------------+----------------------------------------------------------------------------------+
-- | __Graphics Draw Count Tokens__                              |                                                                                  |
-- +-------------------------------------------------------------+----------------------------------------------------------------------------------+
-- | 'INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_COUNT_EXT'       | 'DrawIndirectCountIndirectCommandEXT' with VkDrawIndexedIndirectCommand          |
-- +-------------------------------------------------------------+----------------------------------------------------------------------------------+
-- | 'INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_COUNT_EXT'               | 'DrawIndirectCountIndirectCommandEXT' with VkDrawIndirectCommand                 |
-- +-------------------------------------------------------------+----------------------------------------------------------------------------------+
-- | 'INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_COUNT_EXT'    | 'DrawIndirectCountIndirectCommandEXT' with VkDrawMeshTasksIndirectCommandEXT     |
-- +-------------------------------------------------------------+----------------------------------------------------------------------------------+
-- | 'INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_COUNT_NV_EXT' | 'DrawIndirectCountIndirectCommandEXT' with VkDrawMeshTasksIndirectCommandNV      |
-- +-------------------------------------------------------------+----------------------------------------------------------------------------------+
--
-- Supported Indirect Command Tokens
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_device_generated_commands VK_EXT_device_generated_commands>,
-- 'IndirectCommandsLayoutTokenEXT'
newtype IndirectCommandsTokenTypeEXT = IndirectCommandsTokenTypeEXT Int32
  deriving newtype (IndirectCommandsTokenTypeEXT
-> IndirectCommandsTokenTypeEXT -> "isPreprocessed" ::: Bool
(IndirectCommandsTokenTypeEXT
 -> IndirectCommandsTokenTypeEXT -> "isPreprocessed" ::: Bool)
-> (IndirectCommandsTokenTypeEXT
    -> IndirectCommandsTokenTypeEXT -> "isPreprocessed" ::: Bool)
-> Eq IndirectCommandsTokenTypeEXT
forall a.
(a -> a -> "isPreprocessed" ::: Bool)
-> (a -> a -> "isPreprocessed" ::: Bool) -> Eq a
$c== :: IndirectCommandsTokenTypeEXT
-> IndirectCommandsTokenTypeEXT -> "isPreprocessed" ::: Bool
== :: IndirectCommandsTokenTypeEXT
-> IndirectCommandsTokenTypeEXT -> "isPreprocessed" ::: Bool
$c/= :: IndirectCommandsTokenTypeEXT
-> IndirectCommandsTokenTypeEXT -> "isPreprocessed" ::: Bool
/= :: IndirectCommandsTokenTypeEXT
-> IndirectCommandsTokenTypeEXT -> "isPreprocessed" ::: Bool
Eq, Eq IndirectCommandsTokenTypeEXT
Eq IndirectCommandsTokenTypeEXT =>
(IndirectCommandsTokenTypeEXT
 -> IndirectCommandsTokenTypeEXT -> Ordering)
-> (IndirectCommandsTokenTypeEXT
    -> IndirectCommandsTokenTypeEXT -> "isPreprocessed" ::: Bool)
-> (IndirectCommandsTokenTypeEXT
    -> IndirectCommandsTokenTypeEXT -> "isPreprocessed" ::: Bool)
-> (IndirectCommandsTokenTypeEXT
    -> IndirectCommandsTokenTypeEXT -> "isPreprocessed" ::: Bool)
-> (IndirectCommandsTokenTypeEXT
    -> IndirectCommandsTokenTypeEXT -> "isPreprocessed" ::: Bool)
-> (IndirectCommandsTokenTypeEXT
    -> IndirectCommandsTokenTypeEXT -> IndirectCommandsTokenTypeEXT)
-> (IndirectCommandsTokenTypeEXT
    -> IndirectCommandsTokenTypeEXT -> IndirectCommandsTokenTypeEXT)
-> Ord IndirectCommandsTokenTypeEXT
IndirectCommandsTokenTypeEXT
-> IndirectCommandsTokenTypeEXT -> "isPreprocessed" ::: Bool
IndirectCommandsTokenTypeEXT
-> IndirectCommandsTokenTypeEXT -> Ordering
IndirectCommandsTokenTypeEXT
-> IndirectCommandsTokenTypeEXT -> IndirectCommandsTokenTypeEXT
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> "isPreprocessed" ::: Bool)
-> (a -> a -> "isPreprocessed" ::: Bool)
-> (a -> a -> "isPreprocessed" ::: Bool)
-> (a -> a -> "isPreprocessed" ::: Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: IndirectCommandsTokenTypeEXT
-> IndirectCommandsTokenTypeEXT -> Ordering
compare :: IndirectCommandsTokenTypeEXT
-> IndirectCommandsTokenTypeEXT -> Ordering
$c< :: IndirectCommandsTokenTypeEXT
-> IndirectCommandsTokenTypeEXT -> "isPreprocessed" ::: Bool
< :: IndirectCommandsTokenTypeEXT
-> IndirectCommandsTokenTypeEXT -> "isPreprocessed" ::: Bool
$c<= :: IndirectCommandsTokenTypeEXT
-> IndirectCommandsTokenTypeEXT -> "isPreprocessed" ::: Bool
<= :: IndirectCommandsTokenTypeEXT
-> IndirectCommandsTokenTypeEXT -> "isPreprocessed" ::: Bool
$c> :: IndirectCommandsTokenTypeEXT
-> IndirectCommandsTokenTypeEXT -> "isPreprocessed" ::: Bool
> :: IndirectCommandsTokenTypeEXT
-> IndirectCommandsTokenTypeEXT -> "isPreprocessed" ::: Bool
$c>= :: IndirectCommandsTokenTypeEXT
-> IndirectCommandsTokenTypeEXT -> "isPreprocessed" ::: Bool
>= :: IndirectCommandsTokenTypeEXT
-> IndirectCommandsTokenTypeEXT -> "isPreprocessed" ::: Bool
$cmax :: IndirectCommandsTokenTypeEXT
-> IndirectCommandsTokenTypeEXT -> IndirectCommandsTokenTypeEXT
max :: IndirectCommandsTokenTypeEXT
-> IndirectCommandsTokenTypeEXT -> IndirectCommandsTokenTypeEXT
$cmin :: IndirectCommandsTokenTypeEXT
-> IndirectCommandsTokenTypeEXT -> IndirectCommandsTokenTypeEXT
min :: IndirectCommandsTokenTypeEXT
-> IndirectCommandsTokenTypeEXT -> IndirectCommandsTokenTypeEXT
Ord, Ptr IndirectCommandsTokenTypeEXT -> IO IndirectCommandsTokenTypeEXT
Ptr IndirectCommandsTokenTypeEXT
-> Int -> IO IndirectCommandsTokenTypeEXT
Ptr IndirectCommandsTokenTypeEXT
-> Int -> IndirectCommandsTokenTypeEXT -> IO ()
Ptr IndirectCommandsTokenTypeEXT
-> IndirectCommandsTokenTypeEXT -> IO ()
IndirectCommandsTokenTypeEXT -> Int
(IndirectCommandsTokenTypeEXT -> Int)
-> (IndirectCommandsTokenTypeEXT -> Int)
-> (Ptr IndirectCommandsTokenTypeEXT
    -> Int -> IO IndirectCommandsTokenTypeEXT)
-> (Ptr IndirectCommandsTokenTypeEXT
    -> Int -> IndirectCommandsTokenTypeEXT -> IO ())
-> (forall b. Ptr b -> Int -> IO IndirectCommandsTokenTypeEXT)
-> (forall b.
    Ptr b -> Int -> IndirectCommandsTokenTypeEXT -> IO ())
-> (Ptr IndirectCommandsTokenTypeEXT
    -> IO IndirectCommandsTokenTypeEXT)
-> (Ptr IndirectCommandsTokenTypeEXT
    -> IndirectCommandsTokenTypeEXT -> IO ())
-> Storable IndirectCommandsTokenTypeEXT
forall b. Ptr b -> Int -> IO IndirectCommandsTokenTypeEXT
forall b. Ptr b -> Int -> IndirectCommandsTokenTypeEXT -> IO ()
forall a.
(a -> Int)
-> (a -> Int)
-> (Ptr a -> Int -> IO a)
-> (Ptr a -> Int -> a -> IO ())
-> (forall b. Ptr b -> Int -> IO a)
-> (forall b. Ptr b -> Int -> a -> IO ())
-> (Ptr a -> IO a)
-> (Ptr a -> a -> IO ())
-> Storable a
$csizeOf :: IndirectCommandsTokenTypeEXT -> Int
sizeOf :: IndirectCommandsTokenTypeEXT -> Int
$calignment :: IndirectCommandsTokenTypeEXT -> Int
alignment :: IndirectCommandsTokenTypeEXT -> Int
$cpeekElemOff :: Ptr IndirectCommandsTokenTypeEXT
-> Int -> IO IndirectCommandsTokenTypeEXT
peekElemOff :: Ptr IndirectCommandsTokenTypeEXT
-> Int -> IO IndirectCommandsTokenTypeEXT
$cpokeElemOff :: Ptr IndirectCommandsTokenTypeEXT
-> Int -> IndirectCommandsTokenTypeEXT -> IO ()
pokeElemOff :: Ptr IndirectCommandsTokenTypeEXT
-> Int -> IndirectCommandsTokenTypeEXT -> IO ()
$cpeekByteOff :: forall b. Ptr b -> Int -> IO IndirectCommandsTokenTypeEXT
peekByteOff :: forall b. Ptr b -> Int -> IO IndirectCommandsTokenTypeEXT
$cpokeByteOff :: forall b. Ptr b -> Int -> IndirectCommandsTokenTypeEXT -> IO ()
pokeByteOff :: forall b. Ptr b -> Int -> IndirectCommandsTokenTypeEXT -> IO ()
$cpeek :: Ptr IndirectCommandsTokenTypeEXT -> IO IndirectCommandsTokenTypeEXT
peek :: Ptr IndirectCommandsTokenTypeEXT -> IO IndirectCommandsTokenTypeEXT
$cpoke :: Ptr IndirectCommandsTokenTypeEXT
-> IndirectCommandsTokenTypeEXT -> IO ()
poke :: Ptr IndirectCommandsTokenTypeEXT
-> IndirectCommandsTokenTypeEXT -> IO ()
Storable, IndirectCommandsTokenTypeEXT
IndirectCommandsTokenTypeEXT -> Zero IndirectCommandsTokenTypeEXT
forall a. a -> Zero a
$czero :: IndirectCommandsTokenTypeEXT
zero :: IndirectCommandsTokenTypeEXT
Zero)

-- No documentation found for Nested "VkIndirectCommandsTokenTypeEXT" "VK_INDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT"
pattern $mINDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT :: forall {r}.
IndirectCommandsTokenTypeEXT -> ((# #) -> r) -> ((# #) -> r) -> r
$bINDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT :: IndirectCommandsTokenTypeEXT
INDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT = IndirectCommandsTokenTypeEXT 0

-- No documentation found for Nested "VkIndirectCommandsTokenTypeEXT" "VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_EXT"
pattern $mINDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_EXT :: forall {r}.
IndirectCommandsTokenTypeEXT -> ((# #) -> r) -> ((# #) -> r) -> r
$bINDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_EXT :: IndirectCommandsTokenTypeEXT
INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_EXT = IndirectCommandsTokenTypeEXT 1

-- No documentation found for Nested "VkIndirectCommandsTokenTypeEXT" "VK_INDIRECT_COMMANDS_TOKEN_TYPE_SEQUENCE_INDEX_EXT"
pattern $mINDIRECT_COMMANDS_TOKEN_TYPE_SEQUENCE_INDEX_EXT :: forall {r}.
IndirectCommandsTokenTypeEXT -> ((# #) -> r) -> ((# #) -> r) -> r
$bINDIRECT_COMMANDS_TOKEN_TYPE_SEQUENCE_INDEX_EXT :: IndirectCommandsTokenTypeEXT
INDIRECT_COMMANDS_TOKEN_TYPE_SEQUENCE_INDEX_EXT = IndirectCommandsTokenTypeEXT 2

-- No documentation found for Nested "VkIndirectCommandsTokenTypeEXT" "VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_EXT"
pattern $mINDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_EXT :: forall {r}.
IndirectCommandsTokenTypeEXT -> ((# #) -> r) -> ((# #) -> r) -> r
$bINDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_EXT :: IndirectCommandsTokenTypeEXT
INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_EXT = IndirectCommandsTokenTypeEXT 3

-- No documentation found for Nested "VkIndirectCommandsTokenTypeEXT" "VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_EXT"
pattern $mINDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_EXT :: forall {r}.
IndirectCommandsTokenTypeEXT -> ((# #) -> r) -> ((# #) -> r) -> r
$bINDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_EXT :: IndirectCommandsTokenTypeEXT
INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_EXT = IndirectCommandsTokenTypeEXT 4

-- No documentation found for Nested "VkIndirectCommandsTokenTypeEXT" "VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_EXT"
pattern $mINDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_EXT :: forall {r}.
IndirectCommandsTokenTypeEXT -> ((# #) -> r) -> ((# #) -> r) -> r
$bINDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_EXT :: IndirectCommandsTokenTypeEXT
INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_EXT = IndirectCommandsTokenTypeEXT 5

-- No documentation found for Nested "VkIndirectCommandsTokenTypeEXT" "VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_EXT"
pattern $mINDIRECT_COMMANDS_TOKEN_TYPE_DRAW_EXT :: forall {r}.
IndirectCommandsTokenTypeEXT -> ((# #) -> r) -> ((# #) -> r) -> r
$bINDIRECT_COMMANDS_TOKEN_TYPE_DRAW_EXT :: IndirectCommandsTokenTypeEXT
INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_EXT = IndirectCommandsTokenTypeEXT 6

-- No documentation found for Nested "VkIndirectCommandsTokenTypeEXT" "VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_COUNT_EXT"
pattern $mINDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_COUNT_EXT :: forall {r}.
IndirectCommandsTokenTypeEXT -> ((# #) -> r) -> ((# #) -> r) -> r
$bINDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_COUNT_EXT :: IndirectCommandsTokenTypeEXT
INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_COUNT_EXT = IndirectCommandsTokenTypeEXT 7

-- No documentation found for Nested "VkIndirectCommandsTokenTypeEXT" "VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_COUNT_EXT"
pattern $mINDIRECT_COMMANDS_TOKEN_TYPE_DRAW_COUNT_EXT :: forall {r}.
IndirectCommandsTokenTypeEXT -> ((# #) -> r) -> ((# #) -> r) -> r
$bINDIRECT_COMMANDS_TOKEN_TYPE_DRAW_COUNT_EXT :: IndirectCommandsTokenTypeEXT
INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_COUNT_EXT = IndirectCommandsTokenTypeEXT 8

-- No documentation found for Nested "VkIndirectCommandsTokenTypeEXT" "VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_EXT"
pattern $mINDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_EXT :: forall {r}.
IndirectCommandsTokenTypeEXT -> ((# #) -> r) -> ((# #) -> r) -> r
$bINDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_EXT :: IndirectCommandsTokenTypeEXT
INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_EXT = IndirectCommandsTokenTypeEXT 9

-- No documentation found for Nested "VkIndirectCommandsTokenTypeEXT" "VK_INDIRECT_COMMANDS_TOKEN_TYPE_TRACE_RAYS2_EXT"
pattern $mINDIRECT_COMMANDS_TOKEN_TYPE_TRACE_RAYS2_EXT :: forall {r}.
IndirectCommandsTokenTypeEXT -> ((# #) -> r) -> ((# #) -> r) -> r
$bINDIRECT_COMMANDS_TOKEN_TYPE_TRACE_RAYS2_EXT :: IndirectCommandsTokenTypeEXT
INDIRECT_COMMANDS_TOKEN_TYPE_TRACE_RAYS2_EXT = IndirectCommandsTokenTypeEXT 1000386004

-- No documentation found for Nested "VkIndirectCommandsTokenTypeEXT" "VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_COUNT_EXT"
pattern $mINDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_COUNT_EXT :: forall {r}.
IndirectCommandsTokenTypeEXT -> ((# #) -> r) -> ((# #) -> r) -> r
$bINDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_COUNT_EXT :: IndirectCommandsTokenTypeEXT
INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_COUNT_EXT = IndirectCommandsTokenTypeEXT 1000328001

-- No documentation found for Nested "VkIndirectCommandsTokenTypeEXT" "VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_EXT"
pattern $mINDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_EXT :: forall {r}.
IndirectCommandsTokenTypeEXT -> ((# #) -> r) -> ((# #) -> r) -> r
$bINDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_EXT :: IndirectCommandsTokenTypeEXT
INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_EXT = IndirectCommandsTokenTypeEXT 1000328000

-- No documentation found for Nested "VkIndirectCommandsTokenTypeEXT" "VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_COUNT_NV_EXT"
pattern $mINDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_COUNT_NV_EXT :: forall {r}.
IndirectCommandsTokenTypeEXT -> ((# #) -> r) -> ((# #) -> r) -> r
$bINDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_COUNT_NV_EXT :: IndirectCommandsTokenTypeEXT
INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_COUNT_NV_EXT = IndirectCommandsTokenTypeEXT 1000202003

-- No documentation found for Nested "VkIndirectCommandsTokenTypeEXT" "VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_NV_EXT"
pattern $mINDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_NV_EXT :: forall {r}.
IndirectCommandsTokenTypeEXT -> ((# #) -> r) -> ((# #) -> r) -> r
$bINDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_NV_EXT :: IndirectCommandsTokenTypeEXT
INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_NV_EXT = IndirectCommandsTokenTypeEXT 1000202002

{-# COMPLETE
  INDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT
  , INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_EXT
  , INDIRECT_COMMANDS_TOKEN_TYPE_SEQUENCE_INDEX_EXT
  , INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_EXT
  , INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_EXT
  , INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_EXT
  , INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_EXT
  , INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_COUNT_EXT
  , INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_COUNT_EXT
  , INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_EXT
  , INDIRECT_COMMANDS_TOKEN_TYPE_TRACE_RAYS2_EXT
  , INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_COUNT_EXT
  , INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_EXT
  , INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_COUNT_NV_EXT
  , INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_NV_EXT ::
    IndirectCommandsTokenTypeEXT
  #-}

conNameIndirectCommandsTokenTypeEXT :: String
conNameIndirectCommandsTokenTypeEXT :: String
conNameIndirectCommandsTokenTypeEXT = String
"IndirectCommandsTokenTypeEXT"

enumPrefixIndirectCommandsTokenTypeEXT :: String
enumPrefixIndirectCommandsTokenTypeEXT :: String
enumPrefixIndirectCommandsTokenTypeEXT = String
"INDIRECT_COMMANDS_TOKEN_TYPE_"

showTableIndirectCommandsTokenTypeEXT :: [(IndirectCommandsTokenTypeEXT, String)]
showTableIndirectCommandsTokenTypeEXT :: [(IndirectCommandsTokenTypeEXT, String)]
showTableIndirectCommandsTokenTypeEXT =
  [
    ( IndirectCommandsTokenTypeEXT
INDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT
    , String
"EXECUTION_SET_EXT"
    )
  ,
    ( IndirectCommandsTokenTypeEXT
INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_EXT
    , String
"PUSH_CONSTANT_EXT"
    )
  ,
    ( IndirectCommandsTokenTypeEXT
INDIRECT_COMMANDS_TOKEN_TYPE_SEQUENCE_INDEX_EXT
    , String
"SEQUENCE_INDEX_EXT"
    )
  ,
    ( IndirectCommandsTokenTypeEXT
INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_EXT
    , String
"INDEX_BUFFER_EXT"
    )
  ,
    ( IndirectCommandsTokenTypeEXT
INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_EXT
    , String
"VERTEX_BUFFER_EXT"
    )
  ,
    ( IndirectCommandsTokenTypeEXT
INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_EXT
    , String
"DRAW_INDEXED_EXT"
    )
  ,
    ( IndirectCommandsTokenTypeEXT
INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_EXT
    , String
"DRAW_EXT"
    )
  ,
    ( IndirectCommandsTokenTypeEXT
INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_COUNT_EXT
    , String
"DRAW_INDEXED_COUNT_EXT"
    )
  ,
    ( IndirectCommandsTokenTypeEXT
INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_COUNT_EXT
    , String
"DRAW_COUNT_EXT"
    )
  ,
    ( IndirectCommandsTokenTypeEXT
INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_EXT
    , String
"DISPATCH_EXT"
    )
  ,
    ( IndirectCommandsTokenTypeEXT
INDIRECT_COMMANDS_TOKEN_TYPE_TRACE_RAYS2_EXT
    , String
"TRACE_RAYS2_EXT"
    )
  ,
    ( IndirectCommandsTokenTypeEXT
INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_COUNT_EXT
    , String
"DRAW_MESH_TASKS_COUNT_EXT"
    )
  ,
    ( IndirectCommandsTokenTypeEXT
INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_EXT
    , String
"DRAW_MESH_TASKS_EXT"
    )
  ,
    ( IndirectCommandsTokenTypeEXT
INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_COUNT_NV_EXT
    , String
"DRAW_MESH_TASKS_COUNT_NV_EXT"
    )
  ,
    ( IndirectCommandsTokenTypeEXT
INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_NV_EXT
    , String
"DRAW_MESH_TASKS_NV_EXT"
    )
  ]

instance Show IndirectCommandsTokenTypeEXT where
  showsPrec :: Int -> IndirectCommandsTokenTypeEXT -> ShowS
showsPrec =
    String
-> [(IndirectCommandsTokenTypeEXT, String)]
-> String
-> (IndirectCommandsTokenTypeEXT -> Int32)
-> (Int32 -> ShowS)
-> Int
-> IndirectCommandsTokenTypeEXT
-> ShowS
forall a i.
Eq a =>
String
-> [(a, String)]
-> String
-> (a -> i)
-> (i -> ShowS)
-> Int
-> a
-> ShowS
enumShowsPrec
      String
enumPrefixIndirectCommandsTokenTypeEXT
      [(IndirectCommandsTokenTypeEXT, String)]
showTableIndirectCommandsTokenTypeEXT
      String
conNameIndirectCommandsTokenTypeEXT
      (\(IndirectCommandsTokenTypeEXT Int32
x) -> Int32
x)
      (Int -> Int32 -> ShowS
forall a. Show a => Int -> a -> ShowS
showsPrec Int
11)

instance Read IndirectCommandsTokenTypeEXT where
  readPrec :: ReadPrec IndirectCommandsTokenTypeEXT
readPrec =
    String
-> [(IndirectCommandsTokenTypeEXT, String)]
-> String
-> (Int32 -> IndirectCommandsTokenTypeEXT)
-> ReadPrec IndirectCommandsTokenTypeEXT
forall i a.
Read i =>
String -> [(a, String)] -> String -> (i -> a) -> ReadPrec a
enumReadPrec
      String
enumPrefixIndirectCommandsTokenTypeEXT
      [(IndirectCommandsTokenTypeEXT, String)]
showTableIndirectCommandsTokenTypeEXT
      String
conNameIndirectCommandsTokenTypeEXT
      Int32 -> IndirectCommandsTokenTypeEXT
IndirectCommandsTokenTypeEXT

type EXT_DEVICE_GENERATED_COMMANDS_SPEC_VERSION = 1

-- No documentation found for TopLevel "VK_EXT_DEVICE_GENERATED_COMMANDS_SPEC_VERSION"
pattern EXT_DEVICE_GENERATED_COMMANDS_SPEC_VERSION :: forall a . Integral a => a
pattern $mEXT_DEVICE_GENERATED_COMMANDS_SPEC_VERSION :: forall {r} {a}.
Integral a =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
$bEXT_DEVICE_GENERATED_COMMANDS_SPEC_VERSION :: forall a. Integral a => a
EXT_DEVICE_GENERATED_COMMANDS_SPEC_VERSION = 1


type EXT_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME = "VK_EXT_device_generated_commands"

-- No documentation found for TopLevel "VK_EXT_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME"
pattern EXT_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
pattern $mEXT_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME :: forall {r} {a}.
(Eq a, IsString a) =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
$bEXT_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a
EXT_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME = "VK_EXT_device_generated_commands"