{-# language CPP #-}
-- | = Name
--
-- VK_NV_device_generated_commands - device extension
--
-- == VK_NV_device_generated_commands
--
-- [__Name String__]
--     @VK_NV_device_generated_commands@
--
-- [__Extension Type__]
--     Device extension
--
-- [__Registered Extension Number__]
--     278
--
-- [__Revision__]
--     3
--
-- [__Extension and Version Dependencies__]
--
--     -   Requires support for Vulkan 1.1
--
--     -   Requires @VK_KHR_buffer_device_address@ to be enabled for any
--         device-level functionality
--
-- [__Contact__]
--
--     -   Christoph Kubisch
--         <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?body=[VK_NV_device_generated_commands] @pixeljetstream%0A*Here describe the issue or question you have about the VK_NV_device_generated_commands extension* >
--
-- == Other Extension Metadata
--
-- [__Last Modified Date__]
--     2020-02-20
--
-- [__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 interacts with @VK_NV_mesh_shader@. If the latter
--         extension is not supported, remove the command token to initiate
--         mesh tasks drawing in this extension.
--
-- [__Contributors__]
--
--     -   Christoph Kubisch, NVIDIA
--
--     -   Pierre Boudier, NVIDIA
--
--     -   Jeff Bolz, NVIDIA
--
--     -   Eric Werness, NVIDIA
--
--     -   Yuriy O’Donnell, Epic Games
--
--     -   Baldur Karlsson, Valve
--
--     -   Mathias Schott, NVIDIA
--
--     -   Tyson Smith, NVIDIA
--
--     -   Ingo Esser, NVIDIA
--
-- == Description
--
-- This extension allows the device to generate a number of critical
-- graphics commands for command buffers.
--
-- 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.
--
-- However, if the application desires to quickly kick off the rendering of
-- the final stream of objects, then unextended Vulkan forces the
-- application to 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 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.Extensions.VK_EXT_buffer_device_address.getBufferDeviceAddressEXT'
--
-- -   create a graphics pipeline using
--     'GraphicsPipelineShaderGroupsCreateInfoNV' for the ability to change
--     shaders on the device.
--
-- -   create a 'Vulkan.Extensions.Handles.IndirectCommandsLayoutNV', which
--     lists the 'IndirectCommandsTokenTypeNV' 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 in the pipeline.
--
-- -   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
--     'getGeneratedCommandsMemoryRequirementsNV'.
--
-- -   optionally preprocess the generated content using
--     'cmdPreprocessGeneratedCommandsNV', for example on an asynchronous
--     compute queue, or for the purpose of re-using the data in multiple
--     executions.
--
-- -   call 'cmdExecuteGeneratedCommandsNV' 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 different shader group
--
-- -   a number of vertex buffer bindings
--
-- -   a different index buffer, with an optional dynamic offset and index
--     type
--
-- -   a number of different push constants
--
-- -   a flag that encodes the primitive winding
--
-- 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.IndirectCommandsLayoutNV'
--
-- == New Commands
--
-- -   'cmdBindPipelineShaderGroupNV'
--
-- -   'cmdExecuteGeneratedCommandsNV'
--
-- -   'cmdPreprocessGeneratedCommandsNV'
--
-- -   'createIndirectCommandsLayoutNV'
--
-- -   'destroyIndirectCommandsLayoutNV'
--
-- -   'getGeneratedCommandsMemoryRequirementsNV'
--
-- == New Structures
--
-- -   'BindIndexBufferIndirectCommandNV'
--
-- -   'BindShaderGroupIndirectCommandNV'
--
-- -   'BindVertexBufferIndirectCommandNV'
--
-- -   'GeneratedCommandsInfoNV'
--
-- -   'GeneratedCommandsMemoryRequirementsInfoNV'
--
-- -   'GraphicsShaderGroupCreateInfoNV'
--
-- -   'IndirectCommandsLayoutCreateInfoNV'
--
-- -   'IndirectCommandsLayoutTokenNV'
--
-- -   'IndirectCommandsStreamNV'
--
-- -   'SetStateFlagsIndirectCommandNV'
--
-- -   Extending 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo':
--
--     -   'GraphicsPipelineShaderGroupsCreateInfoNV'
--
-- -   Extending
--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--     'Vulkan.Core10.Device.DeviceCreateInfo':
--
--     -   'PhysicalDeviceDeviceGeneratedCommandsFeaturesNV'
--
-- -   Extending
--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2':
--
--     -   'PhysicalDeviceDeviceGeneratedCommandsPropertiesNV'
--
-- == New Enums
--
-- -   'IndirectCommandsLayoutUsageFlagBitsNV'
--
-- -   'IndirectCommandsTokenTypeNV'
--
-- -   'IndirectStateFlagBitsNV'
--
-- == New Bitmasks
--
-- -   'IndirectCommandsLayoutUsageFlagsNV'
--
-- -   'IndirectStateFlagsNV'
--
-- == New Enum Constants
--
-- -   'NV_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME'
--
-- -   'NV_DEVICE_GENERATED_COMMANDS_SPEC_VERSION'
--
-- -   Extending 'Vulkan.Core10.Enums.AccessFlagBits.AccessFlagBits':
--
--     -   'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_COMMAND_PREPROCESS_READ_BIT_NV'
--
--     -   'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_COMMAND_PREPROCESS_WRITE_BIT_NV'
--
-- -   Extending 'Vulkan.Core10.Enums.ObjectType.ObjectType':
--
--     -   'Vulkan.Core10.Enums.ObjectType.OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NV'
--
-- -   Extending
--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits':
--
--     -   'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV'
--
-- -   Extending
--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PipelineStageFlagBits':
--
--     -   'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV'
--
-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NV'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NV'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_NV'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV'
--
-- == Issues
--
-- 1) How to name this extension ?
--
-- @VK_NV_device_generated_commands@
--
-- As usual, one of the hardest issues ;)
--
-- Alternatives: @VK_gpu_commands@, @VK_execute_commands@,
-- @VK_device_commands@, @VK_device_execute_commands@, @VK_device_execute@,
-- @VK_device_created_commands@, @VK_device_recorded_commands@,
-- @VK_device_generated_commands@ @VK_indirect_generated_commands@
--
-- 2) Should we use a serial stateful token stream or stateless sequence
-- descriptions?
--
-- Similarly to 'Vulkan.Core10.Handles.Pipeline', fixed layouts have the
-- most likelihood to be cross-vendor adoptable. They also benefit from
-- being processable in parallel. This is a different design choice
-- compared to the serial command stream generated through
-- @GL_NV_command_list@.
--
-- 3) How to name a sequence description?
--
-- @VkIndirectCommandsLayout@ as in the NVX extension predecessor.
--
-- Alternative: @VkGeneratedCommandsLayout@
--
-- 4) Do we want to provide @indirectCommands@ inputs with layout or at
-- @indirectCommands@ time?
--
-- Separate layout from data as Vulkan does. Provide full flexibility for
-- @indirectCommands@.
--
-- 5) Should the input be provided as SoA or AoS?
--
-- Both ways are desirable. AoS can provide portability to other APIs and
-- easier to setup, while SoA allows to update individual inputs in a
-- cache-efficient manner, when others remain static.
--
-- 6) How do we make developers aware of the memory requirements of
-- implementation-dependent data used for the generated commands?
--
-- Make the API explicit and introduce a @preprocess@
-- 'Vulkan.Core10.Handles.Buffer'. Developers have to allocate it using
-- 'getGeneratedCommandsMemoryRequirementsNV'.
--
-- In the NVX version the requirements were hidden implicitly as part of
-- the command buffer reservation process, however as the memory
-- requirements can be substantial, we want to give developers the ability
-- to budget the memory themselves. By lowering the @maxSequencesCount@ the
-- memory consumption can be reduced. Furthermore reuse of the memory is
-- possible, for example for doing explicit preprocessing and execution in
-- a ping-pong fashion.
--
-- The actual buffer size is implementation-dependent and may be zero, i.e.
-- not always required.
--
-- When making use of Graphics Shader Groups, the programs should behave
-- similar with regards to vertex inputs, clipping and culling outputs of
-- the geometry stage, as well as sample shading behavior in fragment
-- shaders, to reduce the amount of the worst-case memory approximation.
--
-- 7) Should we allow additional per-sequence dynamic state changes?
--
-- Yes
--
-- Introduced a lightweight indirect state flag 'IndirectStateFlagBitsNV'.
-- So far only switching front face winding state is exposed. Especially in
-- CAD\/DCC mirrored transforms that require such changes are common, and
-- similar flexibility is given in the ray tracing instance description.
--
-- The flag could be extended further, for example to switch between
-- primitive-lists or -strips, or make other state modifications.
--
-- Furthermore, as new tokens can be added easily, future extension could
-- add the ability to change any
-- 'Vulkan.Core10.Enums.DynamicState.DynamicState'.
--
-- 8) How do we allow re-using already “generated” @indirectCommands@?
--
-- Expose a @preprocessBuffer@ to reuse implementation-dependencyFlags
-- data. Set the @isPreprocessed@ to true in
-- 'cmdExecuteGeneratedCommandsNV'.
--
-- 9) Under which conditions is 'cmdExecuteGeneratedCommandsNV' legal?
--
-- It behaves like a regular draw call command.
--
-- 10) Is 'cmdPreprocessGeneratedCommandsNV' copying the input data or
-- referencing it?
--
-- There are multiple implementations possible:
--
-- -   one could have some emulation code that parses the inputs, and
--     generates an output command buffer, therefore copying the inputs.
--
-- -   one could just reference the inputs, and have the processing done in
--     pipe at execution time.
--
-- If the data is mandated to be copied, then it puts a penalty on
-- implementation that could process the inputs directly in pipe. If the
-- data is “referenced”, then it allows both types of implementation.
--
-- The inputs are “referenced”, and /must/ not be modified after the call
-- to 'cmdExecuteGeneratedCommandsNV' has completed.
--
-- 11) Which buffer usage flags are required for the buffers referenced by
-- 'GeneratedCommandsInfoNV' ?
--
-- Reuse existing
-- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'
--
-- -   'GeneratedCommandsInfoNV'::@preprocessBuffer@
--
-- -   'GeneratedCommandsInfoNV'::@sequencesCountBuffer@
--
-- -   'GeneratedCommandsInfoNV'::@sequencesIndexBuffer@
--
-- -   'IndirectCommandsStreamNV'::@buffer@
--
-- 12) In which pipeline stage does the device generated command expansion
-- happen?
--
-- 'cmdPreprocessGeneratedCommandsNV' is treated as if it occurs in a
-- separate logical pipeline from either graphics or compute, and that
-- pipeline only includes
-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_TOP_OF_PIPE_BIT',
-- a new stage
-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV',
-- and
-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT'.
-- This new stage has two corresponding new access types,
-- 'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_COMMAND_PREPROCESS_READ_BIT_NV'
-- and
-- 'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_COMMAND_PREPROCESS_WRITE_BIT_NV',
-- used to synchronize reading the buffer inputs and writing the preprocess
-- memory output.
--
-- The generated output written in the preprocess buffer memory by
-- 'cmdExecuteGeneratedCommandsNV' is considered to be consumed by the
-- 'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_DRAW_INDIRECT_BIT'
-- pipeline stage.
--
-- Thus, to synchronize from writing the input buffers to preprocessing via
-- 'cmdPreprocessGeneratedCommandsNV', use:
--
-- -   @dstStageMask@ =
--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV'
--
-- -   @dstAccessMask@ =
--     'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_COMMAND_PREPROCESS_READ_BIT_NV'
--
-- To synchronize from 'cmdPreprocessGeneratedCommandsNV' to executing the
-- generated commands by 'cmdExecuteGeneratedCommandsNV', use:
--
-- -   @srcStageMask@ =
--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV'
--
-- -   @srcAccessMask@ =
--     'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_COMMAND_PREPROCESS_WRITE_BIT_NV'
--
-- -   @dstStageMask@ =
--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_DRAW_INDIRECT_BIT'
--
-- -   @dstAccessMask@ =
--     'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_INDIRECT_COMMAND_READ_BIT'
--
-- When 'cmdExecuteGeneratedCommandsNV' is used with a @isPreprocessed@ of
-- 'Vulkan.Core10.FundamentalTypes.FALSE', the generated commands are
-- implicitly preprocessed, therefore one only needs to synchronize the
-- inputs via:
--
-- -   @dstStageMask@ =
--     'Vulkan.Core10.Enums.PipelineStageFlagBits.PIPELINE_STAGE_DRAW_INDIRECT_BIT'
--
-- -   @dstAccessMask@ =
--     'Vulkan.Core10.Enums.AccessFlagBits.ACCESS_INDIRECT_COMMAND_READ_BIT'
--
-- 13) What if most token data is “static”, but we frequently want to
-- render a subsection?
--
-- Added “sequencesIndexBuffer”. This allows to easier sort and filter what
-- should actually be executed.
--
-- 14) What are the changes compared to the previous NVX extension?
--
-- -   Compute dispatch support was removed (was never implemented in
--     drivers). There are different approaches how dispatching from the
--     device should work, hence we defer this to a future extension.
--
-- -   The @ObjectTableNVX@ was replaced by using physical buffer addresses
--     and introducing Shader Groups for the graphics pipeline.
--
-- -   Less state changes are possible overall, but the important
--     operations are still there (reduces complexity of implementation).
--
-- -   The API was redesigned so all inputs must be passed at both
--     preprocessing and execution time (this was implicit in NVX, now it
--     is explicit)
--
-- -   The reservation of intermediate command space is now mandatory and
--     explicit through a preprocess buffer.
--
-- -   The 'IndirectStateFlagBitsNV' were introduced
--
-- 15) When porting from other APIs, their indirect buffers may use
-- different enums, for example for index buffer types. How to solve this?
--
-- Added “pIndexTypeValues” to map custom @uint32_t@ values to
-- corresponding 'Vulkan.Core10.Enums.IndexType.IndexType'.
--
-- 16) Do we need more shader group state overrides?
--
-- The NVX version allowed all PSO states to be different, however as the
-- goal is not to replace all state setup, but focus on highly-frequent
-- state changes for drawing lots of objects, we reduced the amount of
-- state overrides. Especially VkPipelineLayout as well as VkRenderPass
-- configuration should be left static, the rest is still open for
-- discussion.
--
-- The current focus is just to allow VertexInput changes as well as
-- shaders, while all shader groups use the same shader stages.
--
-- Too much flexibility will increase the test coverage requirement as
-- well. However, further extensions could allow more dynamic state as
-- well.
--
-- 17) Do we need more detailed physical device feature queries\/enables?
--
-- An EXT version would need detailed implementor feedback to come up with
-- a good set of features. Please contact us if you are interested, we are
-- happy to make more features optional, or add further restrictions to
-- reduce the minimum feature set of an EXT.
--
-- 18) Is there an interaction with VK_KHR_pipeline_library planned?
--
-- Yes, a future version of this extension will detail the interaction,
-- once VK_KHR_pipeline_library is no longer provisional.
--
-- == Example Code
--
-- Open-Source samples illustrating the usage of the extension can be found
-- at the following location (may not yet exist at time of writing):
--
-- <https://github.com/nvpro-samples/vk_device_generated_cmds>
--
-- == Version History
--
-- -   Revision 1, 2020-02-20 (Christoph Kubisch)
--
--     -   Initial version
--
-- -   Revision 2, 2020-03-09 (Christoph Kubisch)
--
--     -   Remove VK_EXT_debug_report interactions
--
-- -   Revision 3, 2020-03-09 (Christoph Kubisch)
--
--     -   Fix naming VkPhysicalDeviceGenerated to
--         VkPhysicalDeviceDeviceGenerated
--
-- == See Also
--
-- 'BindIndexBufferIndirectCommandNV', 'BindShaderGroupIndirectCommandNV',
-- 'BindVertexBufferIndirectCommandNV', 'GeneratedCommandsInfoNV',
-- 'GeneratedCommandsMemoryRequirementsInfoNV',
-- 'GraphicsPipelineShaderGroupsCreateInfoNV',
-- 'GraphicsShaderGroupCreateInfoNV', 'IndirectCommandsLayoutCreateInfoNV',
-- 'Vulkan.Extensions.Handles.IndirectCommandsLayoutNV',
-- 'IndirectCommandsLayoutTokenNV',
-- 'IndirectCommandsLayoutUsageFlagBitsNV',
-- 'IndirectCommandsLayoutUsageFlagsNV', 'IndirectCommandsStreamNV',
-- 'IndirectCommandsTokenTypeNV', 'IndirectStateFlagBitsNV',
-- 'IndirectStateFlagsNV',
-- 'PhysicalDeviceDeviceGeneratedCommandsFeaturesNV',
-- 'PhysicalDeviceDeviceGeneratedCommandsPropertiesNV',
-- 'SetStateFlagsIndirectCommandNV', 'cmdBindPipelineShaderGroupNV',
-- 'cmdExecuteGeneratedCommandsNV', 'cmdPreprocessGeneratedCommandsNV',
-- 'createIndirectCommandsLayoutNV', 'destroyIndirectCommandsLayoutNV',
-- 'getGeneratedCommandsMemoryRequirementsNV'
--
-- == Document Notes
--
-- For more information, see the
-- <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VK_NV_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_NV_device_generated_commands  ( cmdExecuteGeneratedCommandsNV
                                                          , cmdPreprocessGeneratedCommandsNV
                                                          , cmdBindPipelineShaderGroupNV
                                                          , getGeneratedCommandsMemoryRequirementsNV
                                                          , createIndirectCommandsLayoutNV
                                                          , withIndirectCommandsLayoutNV
                                                          , destroyIndirectCommandsLayoutNV
                                                          , PhysicalDeviceDeviceGeneratedCommandsFeaturesNV(..)
                                                          , PhysicalDeviceDeviceGeneratedCommandsPropertiesNV(..)
                                                          , GraphicsShaderGroupCreateInfoNV(..)
                                                          , GraphicsPipelineShaderGroupsCreateInfoNV(..)
                                                          , BindShaderGroupIndirectCommandNV(..)
                                                          , BindIndexBufferIndirectCommandNV(..)
                                                          , BindVertexBufferIndirectCommandNV(..)
                                                          , SetStateFlagsIndirectCommandNV(..)
                                                          , IndirectCommandsStreamNV(..)
                                                          , IndirectCommandsLayoutTokenNV(..)
                                                          , IndirectCommandsLayoutCreateInfoNV(..)
                                                          , GeneratedCommandsInfoNV(..)
                                                          , GeneratedCommandsMemoryRequirementsInfoNV(..)
                                                          , IndirectCommandsLayoutUsageFlagsNV
                                                          , IndirectCommandsLayoutUsageFlagBitsNV( INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NV
                                                                                                 , INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NV
                                                                                                 , INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NV
                                                                                                 , ..
                                                                                                 )
                                                          , IndirectStateFlagsNV
                                                          , IndirectStateFlagBitsNV( INDIRECT_STATE_FLAG_FRONTFACE_BIT_NV
                                                                                   , ..
                                                                                   )
                                                          , IndirectCommandsTokenTypeNV( INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV
                                                                                       , INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV
                                                                                       , INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NV
                                                                                       , INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV
                                                                                       , INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV
                                                                                       , INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NV
                                                                                       , INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV
                                                                                       , INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV
                                                                                       , INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_NV
                                                                                       , ..
                                                                                       )
                                                          , NV_DEVICE_GENERATED_COMMANDS_SPEC_VERSION
                                                          , pattern NV_DEVICE_GENERATED_COMMANDS_SPEC_VERSION
                                                          , NV_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME
                                                          , pattern NV_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME
                                                          , IndirectCommandsLayoutNV(..)
                                                          ) where

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 Foreign.Marshal.Alloc (allocaBytes)
import Foreign.Marshal.Alloc (callocBytes)
import Foreign.Marshal.Alloc (free)
import Foreign.Marshal.Utils (maybePeek)
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 Data.Vector (generateM)
import qualified Data.Vector (imapM_)
import qualified Data.Vector (length)
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.Bits (Bits)
import Data.Bits (FiniteBits)
import Data.String (IsString)
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.CStruct.Extends (peekSomeCStruct)
import Vulkan.CStruct.Extends (pokeSomeCStruct)
import Vulkan.CStruct.Extends (withSomeCStruct)
import Vulkan.NamedType ((:::))
import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
import Vulkan.Core10.FundamentalTypes (Bool32)
import Vulkan.Core10.FundamentalTypes (Bool32(..))
import Vulkan.Core10.Handles (Buffer)
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 (Device)
import Vulkan.Core10.Handles (Device(..))
import Vulkan.Core10.Handles (Device(Device))
import Vulkan.Core10.FundamentalTypes (DeviceAddress)
import Vulkan.Dynamic (DeviceCmds(pVkCmdBindPipelineShaderGroupNV))
import Vulkan.Dynamic (DeviceCmds(pVkCmdExecuteGeneratedCommandsNV))
import Vulkan.Dynamic (DeviceCmds(pVkCmdPreprocessGeneratedCommandsNV))
import Vulkan.Dynamic (DeviceCmds(pVkCreateIndirectCommandsLayoutNV))
import Vulkan.Dynamic (DeviceCmds(pVkDestroyIndirectCommandsLayoutNV))
import Vulkan.Dynamic (DeviceCmds(pVkGetGeneratedCommandsMemoryRequirementsNV))
import Vulkan.Core10.FundamentalTypes (DeviceSize)
import Vulkan.Core10.Handles (Device_T)
import Vulkan.CStruct.Extends (Extendss)
import Vulkan.Core10.FundamentalTypes (Flags)
import Vulkan.Core10.Enums.IndexType (IndexType)
import Vulkan.Extensions.Handles (IndirectCommandsLayoutNV)
import Vulkan.Extensions.Handles (IndirectCommandsLayoutNV(..))
import Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2 (MemoryRequirements2)
import Vulkan.CStruct.Extends (PeekChain)
import Vulkan.Core10.Handles (Pipeline)
import Vulkan.Core10.Handles (Pipeline(..))
import Vulkan.Core10.Enums.PipelineBindPoint (PipelineBindPoint)
import Vulkan.Core10.Enums.PipelineBindPoint (PipelineBindPoint(..))
import Vulkan.Core10.Handles (PipelineLayout)
import Vulkan.Core10.Pipeline (PipelineShaderStageCreateInfo)
import Vulkan.Core10.Pipeline (PipelineTessellationStateCreateInfo)
import Vulkan.Core10.Pipeline (PipelineVertexInputStateCreateInfo)
import Vulkan.CStruct.Extends (PokeChain)
import Vulkan.Core10.Enums.Result (Result)
import Vulkan.Core10.Enums.Result (Result(..))
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.StructureType (StructureType(STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NV))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NV))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_NV))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV))
import Vulkan.Core10.Enums.Result (Result(SUCCESS))
import Vulkan.Extensions.Handles (IndirectCommandsLayoutNV(..))
foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkCmdExecuteGeneratedCommandsNV
  :: FunPtr (Ptr CommandBuffer_T -> Bool32 -> Ptr GeneratedCommandsInfoNV -> IO ()) -> Ptr CommandBuffer_T -> Bool32 -> Ptr GeneratedCommandsInfoNV -> IO ()

-- | vkCmdExecuteGeneratedCommandsNV - Generate and execute commands on the
-- device
--
-- == Valid Usage
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-magFilter-04553# If a
--     'Vulkan.Core10.Handles.Sampler' created with @magFilter@ or
--     @minFilter@ equal to 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' 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-vkCmdExecuteGeneratedCommandsNV-mipmapMode-04770# If a
--     'Vulkan.Core10.Handles.Sampler' created with @mipmapMode@ equal to
--     'Vulkan.Core10.Enums.SamplerMipmapMode.SAMPLER_MIPMAP_MODE_LINEAR'
--     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-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-None-02697# For each set /n/
--     that is statically used by the 'Vulkan.Core10.Handles.Pipeline'
--     bound to the pipeline bind point used by this command, a descriptor
--     set /must/ have been bound to /n/ at the same pipeline bind point,
--     with 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', as described in
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-maintenance4-06425# 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 the 'Vulkan.Core10.Handles.Pipeline' bound to the
--     pipeline bind point used by this command, 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', as described in
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-None-02699# Descriptors in
--     each bound descriptor set, specified via
--     'Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets', /must/
--     be valid if they are statically used by the
--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point
--     used by this command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-None-02700# A valid pipeline
--     /must/ be bound to the pipeline bind point used by this command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-commandBuffer-02701# If the
--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
--     point used by this command requires any dynamic state, that state
--     /must/ have been set or inherited (if the
--     @VK_NV_inherited_viewport_scissor@ extension is enabled) for
--     @commandBuffer@, and done so after any previously bound pipeline
--     with the corresponding state not specified as dynamic
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-None-02859# There /must/ not
--     have been any calls to dynamic state setting commands for any state
--     not specified as dynamic in the 'Vulkan.Core10.Handles.Pipeline'
--     object bound to the pipeline bind point used by this command, since
--     that pipeline was bound
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-None-02702# If the
--     'Vulkan.Core10.Handles.Pipeline' object bound 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-vkCmdExecuteGeneratedCommandsNV-None-02703# If the
--     'Vulkan.Core10.Handles.Pipeline' object bound 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-vkCmdExecuteGeneratedCommandsNV-None-02704# If the
--     'Vulkan.Core10.Handles.Pipeline' object bound 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-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-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 the
--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
--     point used by this command /must/ not be a protected resource
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-None-06550# If the
--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
--     point used by this command 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-vkCmdExecuteGeneratedCommandsNV-ConstOffset-06551# If the
--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
--     point used by this command 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-vkCmdExecuteGeneratedCommandsNV-None-04115# If a
--     'Vulkan.Core10.Handles.ImageView' 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-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-OpImageWeightedSampleQCOM-06977#
--     If @OpImageWeightedSampleQCOM@, @OpImageBoxFilterQCOM@,
--     @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-vkCmdExecuteGeneratedCommandsNV-OpImageWeightedSampleQCOM-06978#
--     If any command other than @OpImageWeightedSampleQCOM@,
--     @OpImageBoxFilterQCOM@, @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-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-None-02686# Every input
--     attachment used by the current subpass /must/ be bound to the
--     pipeline via a descriptor set
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-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 be created with a 'Vulkan.Core10.Handles.ImageView' that
--     is an attachment in the currently bound
--     'Vulkan.Core10.Handles.Framebuffer' at an index that corresponds to
--     a valid input attachment in the current subpass
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-None-06538# If any recorded
--     command in the current subpass will write to an image subresource as
--     an attachment, this command /must/ not read from the memory backing
--     that image subresource in any other way than as an attachment
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-None-06539# If any recorded
--     command in the current subpass will read from an image subresource
--     used as an attachment in any way other than as an attachment, this
--     command /must/ not write to that image subresource as an attachment
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-None-06887# If the current
--     render pass instance uses a depth\/stencil attachment with a
--     read-only layout for the stencil aspect 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-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-None-06666# If the bound
--     graphics pipeline state was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT'
--     dynamic state enabled then
--     'Vulkan.Extensions.VK_EXT_sample_locations.cmdSetSampleLocationsEXT'
--     /must/ have been called in the current command buffer prior to this
--     drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-viewportCount-03417# 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_SCISSOR_WITH_COUNT'
--     dynamic state enabled, 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/ match the
--     'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'::@scissorCount@
--     of the pipeline
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-scissorCount-03418# If the
--     bound graphics pipeline state was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_SCISSOR_WITH_COUNT'
--     dynamic state enabled, but not the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VIEWPORT_WITH_COUNT'
--     dynamic state enabled, then
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state.cmdSetScissorWithCount'
--     /must/ have been called in the current command buffer prior to this
--     drawing command, and the @scissorCount@ parameter of
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state.cmdSetScissorWithCount'
--     /must/ match the
--     'Vulkan.Core10.Pipeline.PipelineViewportStateCreateInfo'::@viewportCount@
--     of the pipeline
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-viewportCount-03419# If the
--     bound graphics pipeline state 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 then both
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state.cmdSetViewportWithCount'
--     and
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state.cmdSetScissorWithCount'
--     /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/ match the @scissorCount@ parameter of
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state.cmdSetScissorWithCount'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-viewportCount-04138# 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_W_SCALING_NV'
--     dynamic states enabled 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-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-viewportCount-04140# 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_SHADING_RATE_PALETTE_NV'
--     dynamic states enabled 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-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-None-04876# If the bound
--     graphics pipeline state 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 in the current command buffer prior to this
--     drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-None-04877# If the bound
--     graphics pipeline state was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_DEPTH_BIAS_ENABLE'
--     dynamic state enabled then
--     'Vulkan.Core13.Promoted_From_VK_EXT_extended_dynamic_state2.cmdSetDepthBiasEnable'
--     /must/ have been called in the current command buffer prior to this
--     drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-logicOp-04878# If the bound
--     graphics pipeline state was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_LOGIC_OP_EXT'
--     dynamic state enabled then
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetLogicOpEXT'
--     /must/ have been called in the current command buffer prior to this
--     drawing command and the @logicOp@ /must/ be a valid
--     'Vulkan.Core10.Enums.LogicOp.LogicOp' value
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-multisampledRenderToSingleSampled-07284#
--     If rasterization is not disabled in the bound graphics pipeline, and
--     none of the @VK_AMD_mixed_attachment_samples@ extension, the
--     @VK_NV_framebuffer_mixed_samples@ extension, or the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multisampledRenderToSingleSampled multisampledRenderToSingleSampled>
--     feature are enabled, then
--     'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@
--     /must/ be the same as the current subpass color and\/or
--     depth\/stencil attachments
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-viewMask-06178# If the current
--     render pass instance was begun with
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering',
--     the currently 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-vkCmdExecuteGeneratedCommandsNV-colorAttachmentCount-06179# If
--     the current render pass instance was begun with
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering',
--     the currently 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-vkCmdExecuteGeneratedCommandsNV-colorAttachmentCount-06180# If
--     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 a @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 currently bound graphics pipeline
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-attachmentCount-06667# 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 in the current command buffer prior to this
--     drawing command, and 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 currently bound graphics pipeline
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-attachmentCount-06815# 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 in the current command buffer prior to this
--     drawing command, and the @attachmentCount@ parameter of
--     'Vulkan.Extensions.VK_EXT_color_write_enable.cmdSetColorWriteEnableEXT'
--     /must/ be less than or equal to the @maxColorAttachments@ member of
--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-pDepthAttachment-06181# If 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'::@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 currently 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-vkCmdExecuteGeneratedCommandsNV-pStencilAttachment-06182# If
--     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'::@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 currently 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-vkCmdExecuteGeneratedCommandsNV-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_dynamic_rendering.RenderingFragmentShadingRateAttachmentInfoKHR'::@imageView@
--     was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the currently
--     bound graphics pipeline /must/ have been created with
--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-imageView-06184# If the
--     current render pass instance was begun with
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering'
--     and
--     'Vulkan.Extensions.VK_KHR_dynamic_rendering.RenderingFragmentDensityMapAttachmentInfoEXT'::@imageView@
--     was not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the currently
--     bound graphics pipeline /must/ have been created with
--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-colorAttachmentCount-06185# If
--     the currently bound pipeline was created with a
--     'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'
--     or
--     'Vulkan.Extensions.VK_KHR_dynamic_rendering.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_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'
--     or
--     'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'
--     used to create the currently bound graphics pipeline
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-pDepthAttachment-06186# If the
--     current render pass instance was begun with
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering',
--     the currently bound pipeline was created with a
--     'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'
--     or
--     'Vulkan.Extensions.VK_KHR_dynamic_rendering.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_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'
--     or
--     'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'
--     used to create the currently 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-vkCmdExecuteGeneratedCommandsNV-pStencilAttachment-06187# If
--     the current render pass instance was begun with
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering',
--     the currently bound pipeline was created with a
--     'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'
--     or
--     'Vulkan.Extensions.VK_KHR_dynamic_rendering.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_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'
--     or
--     'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoNV'
--     used to create the currently 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-vkCmdExecuteGeneratedCommandsNV-multisampledRenderToSingleSampled-07285#
--     If the currently bound pipeline was created without a
--     'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'
--     or
--     'Vulkan.Extensions.VK_KHR_dynamic_rendering.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
--     'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@
--     used to create the currently bound graphics pipeline
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-multisampledRenderToSingleSampled-07286#
--     If the current render pass instance was begun with
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering',
--     the currently bound pipeline was created without a
--     'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'
--     or
--     'Vulkan.Extensions.VK_KHR_dynamic_rendering.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
--     'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@
--     used to create the currently 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-vkCmdExecuteGeneratedCommandsNV-multisampledRenderToSingleSampled-07287#
--     If the current render pass instance was begun with
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering',
--     the currently bound pipeline was created without a
--     'Vulkan.Extensions.VK_KHR_dynamic_rendering.AttachmentSampleCountInfoAMD'
--     or
--     'Vulkan.Extensions.VK_KHR_dynamic_rendering.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
--     'Vulkan.Core10.Pipeline.PipelineMultisampleStateCreateInfo'::@rasterizationSamples@
--     used to create the currently 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-vkCmdExecuteGeneratedCommandsNV-renderPass-06198# If the
--     current render pass instance was begun with
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.cmdBeginRendering',
--     the currently bound pipeline /must/ have been created with a
--     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@renderPass@
--     equal to 'Vulkan.Core10.APIConstants.NULL_HANDLE'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-multisampledRenderToSingleSampled-07475#
--     If the bound graphics pipeline state was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT'
--     state enabled, and none of the @VK_AMD_mixed_attachment_samples@
--     extension, @VK_NV_framebuffer_mixed_samples@ extension, or the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-multisampledRenderToSingleSampled multisampledRenderToSingleSampled>
--     feature is 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-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-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, 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-vkCmdExecuteGeneratedCommandsNV-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, 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-vkCmdExecuteGeneratedCommandsNV-sampleLocationsEnable-07484#
--     If 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-vkCmdExecuteGeneratedCommandsNV-sampleLocationsEnable-07485#
--     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_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-vkCmdExecuteGeneratedCommandsNV-sampleLocationsEnable-07486#
--     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_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-vkCmdExecuteGeneratedCommandsNV-sampleLocationsEnable-07487#
--     If 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-vkCmdExecuteGeneratedCommandsNV-coverageModulationTableEnable-07488#
--     If 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-vkCmdExecuteGeneratedCommandsNV-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 currently
--     bound pipeline state, then the current @rasterizationSamples@ must
--     be the same as the sample count of the depth\/stencil attachment
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-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_EXT_line_rasterization.LINE_RASTERIZATION_MODE_RECTANGULAR_EXT',
--     then the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-stippledRectangularLines stippledRectangularLines>
--     feature /must/ be enabled
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-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_EXT_line_rasterization.LINE_RASTERIZATION_MODE_BRESENHAM_EXT',
--     then the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-stippledBresenhamLines stippledBresenhamLines>
--     feature /must/ be enabled
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-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_EXT_line_rasterization.LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT',
--     then the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-stippledSmoothLines stippledSmoothLines>
--     feature /must/ be enabled
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-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_EXT_line_rasterization.LINE_RASTERIZATION_MODE_DEFAULT_EXT',
--     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 VK_TRUE
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-stage-07073# If the currently
--     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-vkCmdExecuteGeneratedCommandsNV-None-04007# All vertex input
--     bindings accessed via vertex input variables declared in the vertex
--     shader entry point’s interface /must/ have either valid or
--     'Vulkan.Core10.APIConstants.NULL_HANDLE' buffers bound
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-None-04008# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-nullDescriptor nullDescriptor>
--     feature is not enabled, all vertex input bindings accessed via
--     vertex input variables declared in the vertex shader entry point’s
--     interface /must/ not be 'Vulkan.Core10.APIConstants.NULL_HANDLE'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-None-02721# For a given vertex
--     buffer binding, any attribute data fetched /must/ be entirely
--     contained within the corresponding vertex buffer binding, as
--     described in
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fxvertex-input ???>
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-dynamicPrimitiveTopologyUnrestricted-07500#
--     If the bound graphics pipeline state was created with the
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT'
--     dynamic state enabled and the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-dynamicPrimitiveTopologyUnrestricted dynamicPrimitiveTopologyUnrestricted>
--     is 'Vulkan.Core10.FundamentalTypes.FALSE', then the
--     @primitiveTopology@ parameter in the last call to
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetPrimitiveTopologyEXT'
--     /must/ be of the same
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-primitive-topology-class topology class>
--     as the pipeline
--     'Vulkan.Core10.Pipeline.PipelineInputAssemblyStateCreateInfo'::@topology@
--     state
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-None-04912# If the bound
--     graphics pipeline was created with both the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_EXT'
--     and
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT'
--     dynamic states enabled, then
--     'Vulkan.Extensions.VK_EXT_vertex_input_dynamic_state.cmdSetVertexInputEXT'
--     /must/ have been called in the current command buffer prior to this
--     draw command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-pStrides-04913# If the bound
--     graphics pipeline was created with the
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT'
--     dynamic state enabled, but not the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_EXT'
--     dynamic state enabled, then
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdBindVertexBuffers2EXT'
--     /must/ have been called in the current command buffer prior to this
--     draw command, and the @pStrides@ parameter of
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdBindVertexBuffers2EXT'
--     /must/ not be @NULL@
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-None-04914# If the bound
--     graphics pipeline state was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_VERTEX_INPUT_EXT'
--     dynamic state enabled, then
--     'Vulkan.Extensions.VK_EXT_vertex_input_dynamic_state.cmdSetVertexInputEXT'
--     /must/ have been called in the current command buffer prior to this
--     draw command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-None-04875# If the bound
--     graphics pipeline state was created with the
--     'Vulkan.Core10.Enums.DynamicState.DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT'
--     dynamic state enabled then
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetPatchControlPointsEXT'
--     /must/ have been called in the current command buffer prior to this
--     drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-None-04879# If the bound
--     graphics pipeline state was created with the
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE_EXT'
--     dynamic state enabled then
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetPrimitiveRestartEnableEXT'
--     /must/ have been called in the current command buffer prior to this
--     drawing command
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-stage-06481# The bound
--     graphics pipeline /must/ not have been 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_TASK_BIT_EXT'
--     or
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_MESH_BIT_EXT'
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-commandBuffer-02970#
--     @commandBuffer@ /must/ not be a protected command buffer
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-isPreprocessed-02908# If
--     @isPreprocessed@ is 'Vulkan.Core10.FundamentalTypes.TRUE' then
--     'cmdPreprocessGeneratedCommandsNV' /must/ have already been executed
--     on the device, using the same @pGeneratedCommandsInfo@ content as
--     well as the content of the input buffers it references (all except
--     'GeneratedCommandsInfoNV'::@preprocessBuffer@). Furthermore
--     @pGeneratedCommandsInfo@\`s @indirectCommandsLayout@ /must/ have
--     been created with the
--     'INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NV' bit set
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-pipeline-02909#
--     'GeneratedCommandsInfoNV'::@pipeline@ /must/ match the current bound
--     pipeline at 'GeneratedCommandsInfoNV'::@pipelineBindPoint@
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-None-02910# Transform feedback
--     /must/ not be active
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-deviceGeneratedCommands-02911#
--     The
--     <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#features-deviceGeneratedCommands ::deviceGeneratedCommands>
--     feature /must/ be enabled
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-commandBuffer-parameter#
--     @commandBuffer@ /must/ be a valid
--     'Vulkan.Core10.Handles.CommandBuffer' handle
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-pGeneratedCommandsInfo-parameter#
--     @pGeneratedCommandsInfo@ /must/ be a valid pointer to a valid
--     'GeneratedCommandsInfoNV' structure
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-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-vkCmdExecuteGeneratedCommandsNV-commandBuffer-cmdpool# The
--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
--     allocated from /must/ support graphics, or compute operations
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-renderpass# This command
--     /must/ only be called inside of a render pass instance
--
-- -   #VUID-vkCmdExecuteGeneratedCommandsNV-videocoding# This command
--     /must/ only be called outside of a video coding scope
--
-- == 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                                                                                                                    | Inside                                                                                                                 | Outside                                                                                                                     | Graphics                                                                                                              | Action                                                                                                                                 |
-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                             | Compute                                                                                                               | Indirection                                                                                                                            |
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------+
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_device_generated_commands VK_NV_device_generated_commands>,
-- 'Vulkan.Core10.FundamentalTypes.Bool32',
-- 'Vulkan.Core10.Handles.CommandBuffer', 'GeneratedCommandsInfoNV'
cmdExecuteGeneratedCommandsNV :: forall io
                               . (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 'GeneratedCommandsInfoNV'
                                 -- structure containing parameters affecting the generation of commands.
                                 GeneratedCommandsInfoNV
                              -> io ()
cmdExecuteGeneratedCommandsNV :: forall (io :: * -> *).
MonadIO io =>
CommandBuffer
-> ("isPreprocessed" ::: Bool) -> GeneratedCommandsInfoNV -> io ()
cmdExecuteGeneratedCommandsNV CommandBuffer
commandBuffer
                                "isPreprocessed" ::: Bool
isPreprocessed
                                GeneratedCommandsInfoNV
generatedCommandsInfo = IO () -> io ()
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 vkCmdExecuteGeneratedCommandsNVPtr :: FunPtr
  (Ptr CommandBuffer_T
   -> ("isPreprocessed" ::: Bool32)
   -> ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
   -> IO ())
vkCmdExecuteGeneratedCommandsNVPtr = DeviceCmds
-> FunPtr
     (Ptr CommandBuffer_T
      -> ("isPreprocessed" ::: Bool32)
      -> ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
      -> IO ())
pVkCmdExecuteGeneratedCommandsNV (case CommandBuffer
commandBuffer of CommandBuffer{DeviceCmds
$sel:deviceCmds:CommandBuffer :: CommandBuffer -> DeviceCmds
deviceCmds :: DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO () -> ContT () IO ()
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
   -> ("isPreprocessed" ::: Bool32)
   -> ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
   -> IO ())
vkCmdExecuteGeneratedCommandsNVPtr FunPtr
  (Ptr CommandBuffer_T
   -> ("isPreprocessed" ::: Bool32)
   -> ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
   -> IO ())
-> FunPtr
     (Ptr CommandBuffer_T
      -> ("isPreprocessed" ::: Bool32)
      -> ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
      -> IO ())
-> "isPreprocessed" ::: Bool
forall a. Eq a => a -> a -> "isPreprocessed" ::: Bool
/= FunPtr
  (Ptr CommandBuffer_T
   -> ("isPreprocessed" ::: Bool32)
   -> ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
   -> 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 vkCmdExecuteGeneratedCommandsNV is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkCmdExecuteGeneratedCommandsNV' :: Ptr CommandBuffer_T
-> ("isPreprocessed" ::: Bool32)
-> ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
-> IO ()
vkCmdExecuteGeneratedCommandsNV' = FunPtr
  (Ptr CommandBuffer_T
   -> ("isPreprocessed" ::: Bool32)
   -> ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
   -> IO ())
-> Ptr CommandBuffer_T
-> ("isPreprocessed" ::: Bool32)
-> ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
-> IO ()
mkVkCmdExecuteGeneratedCommandsNV FunPtr
  (Ptr CommandBuffer_T
   -> ("isPreprocessed" ::: Bool32)
   -> ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
   -> IO ())
vkCmdExecuteGeneratedCommandsNVPtr
  "pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV
pGeneratedCommandsInfo <- ((("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
  -> IO ())
 -> IO ())
-> ContT
     () IO ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
   -> IO ())
  -> IO ())
 -> ContT
      () IO ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV))
-> ((("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
     -> IO ())
    -> IO ())
-> ContT
     () IO ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
forall a b. (a -> b) -> a -> b
$ GeneratedCommandsInfoNV
-> (("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
    -> IO ())
-> IO ()
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
withCStruct (GeneratedCommandsInfoNV
generatedCommandsInfo)
  IO () -> ContT () IO ()
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
"vkCmdExecuteGeneratedCommandsNV" (Ptr CommandBuffer_T
-> ("isPreprocessed" ::: Bool32)
-> ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
-> IO ()
vkCmdExecuteGeneratedCommandsNV'
                                                               (CommandBuffer -> Ptr CommandBuffer_T
commandBufferHandle (CommandBuffer
commandBuffer))
                                                               (("isPreprocessed" ::: Bool) -> "isPreprocessed" ::: Bool32
boolToBool32 ("isPreprocessed" ::: Bool
isPreprocessed))
                                                               "pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV
pGeneratedCommandsInfo)
  () -> ContT () IO ()
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" mkVkCmdPreprocessGeneratedCommandsNV
  :: FunPtr (Ptr CommandBuffer_T -> Ptr GeneratedCommandsInfoNV -> IO ()) -> Ptr CommandBuffer_T -> Ptr GeneratedCommandsInfoNV -> IO ()

-- | vkCmdPreprocessGeneratedCommandsNV - Performs preprocessing for
-- generated commands
--
-- == Valid Usage
--
-- -   #VUID-vkCmdPreprocessGeneratedCommandsNV-commandBuffer-02974#
--     @commandBuffer@ /must/ not be a protected command buffer
--
-- -   #VUID-vkCmdPreprocessGeneratedCommandsNV-pGeneratedCommandsInfo-02927#
--     @pGeneratedCommandsInfo@\`s @indirectCommandsLayout@ /must/ have
--     been created with the
--     'INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NV' bit set
--
-- -   #VUID-vkCmdPreprocessGeneratedCommandsNV-deviceGeneratedCommands-02928#
--     The
--     <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#features-deviceGeneratedCommands ::deviceGeneratedCommands>
--     feature /must/ be enabled
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkCmdPreprocessGeneratedCommandsNV-commandBuffer-parameter#
--     @commandBuffer@ /must/ be a valid
--     'Vulkan.Core10.Handles.CommandBuffer' handle
--
-- -   #VUID-vkCmdPreprocessGeneratedCommandsNV-pGeneratedCommandsInfo-parameter#
--     @pGeneratedCommandsInfo@ /must/ be a valid pointer to a valid
--     'GeneratedCommandsInfoNV' structure
--
-- -   #VUID-vkCmdPreprocessGeneratedCommandsNV-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-vkCmdPreprocessGeneratedCommandsNV-commandBuffer-cmdpool# The
--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
--     allocated from /must/ support graphics, or compute operations
--
-- -   #VUID-vkCmdPreprocessGeneratedCommandsNV-renderpass# This command
--     /must/ only be called outside of a render pass instance
--
-- -   #VUID-vkCmdPreprocessGeneratedCommandsNV-videocoding# This command
--     /must/ only be called outside of a video coding scope
--
-- == 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                                                                                                                    | Outside                                                                                                                | Outside                                                                                                                     | Graphics                                                                                                              | Action                                                                                                                                 |
-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                             | Compute                                                                                                               |                                                                                                                                        |
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------+
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_device_generated_commands VK_NV_device_generated_commands>,
-- 'Vulkan.Core10.Handles.CommandBuffer', 'GeneratedCommandsInfoNV'
cmdPreprocessGeneratedCommandsNV :: forall io
                                  . (MonadIO io)
                                 => -- | @commandBuffer@ is the command buffer which does the preprocessing.
                                    CommandBuffer
                                 -> -- | @pGeneratedCommandsInfo@ is a pointer to a 'GeneratedCommandsInfoNV'
                                    -- structure containing parameters affecting the preprocessing step.
                                    GeneratedCommandsInfoNV
                                 -> io ()
cmdPreprocessGeneratedCommandsNV :: forall (io :: * -> *).
MonadIO io =>
CommandBuffer -> GeneratedCommandsInfoNV -> io ()
cmdPreprocessGeneratedCommandsNV CommandBuffer
commandBuffer
                                   GeneratedCommandsInfoNV
generatedCommandsInfo = IO () -> io ()
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 vkCmdPreprocessGeneratedCommandsNVPtr :: FunPtr
  (Ptr CommandBuffer_T
   -> ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
   -> IO ())
vkCmdPreprocessGeneratedCommandsNVPtr = DeviceCmds
-> FunPtr
     (Ptr CommandBuffer_T
      -> ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
      -> IO ())
pVkCmdPreprocessGeneratedCommandsNV (case CommandBuffer
commandBuffer of CommandBuffer{DeviceCmds
deviceCmds :: DeviceCmds
$sel:deviceCmds:CommandBuffer :: CommandBuffer -> DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO () -> ContT () IO ()
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
   -> ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
   -> IO ())
vkCmdPreprocessGeneratedCommandsNVPtr FunPtr
  (Ptr CommandBuffer_T
   -> ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
   -> IO ())
-> FunPtr
     (Ptr CommandBuffer_T
      -> ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
      -> IO ())
-> "isPreprocessed" ::: Bool
forall a. Eq a => a -> a -> "isPreprocessed" ::: Bool
/= FunPtr
  (Ptr CommandBuffer_T
   -> ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
   -> 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 vkCmdPreprocessGeneratedCommandsNV is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkCmdPreprocessGeneratedCommandsNV' :: Ptr CommandBuffer_T
-> ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
-> IO ()
vkCmdPreprocessGeneratedCommandsNV' = FunPtr
  (Ptr CommandBuffer_T
   -> ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
   -> IO ())
-> Ptr CommandBuffer_T
-> ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
-> IO ()
mkVkCmdPreprocessGeneratedCommandsNV FunPtr
  (Ptr CommandBuffer_T
   -> ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
   -> IO ())
vkCmdPreprocessGeneratedCommandsNVPtr
  "pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV
pGeneratedCommandsInfo <- ((("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
  -> IO ())
 -> IO ())
-> ContT
     () IO ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
   -> IO ())
  -> IO ())
 -> ContT
      () IO ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV))
-> ((("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
     -> IO ())
    -> IO ())
-> ContT
     () IO ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
forall a b. (a -> b) -> a -> b
$ GeneratedCommandsInfoNV
-> (("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
    -> IO ())
-> IO ()
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
withCStruct (GeneratedCommandsInfoNV
generatedCommandsInfo)
  IO () -> ContT () IO ()
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
"vkCmdPreprocessGeneratedCommandsNV" (Ptr CommandBuffer_T
-> ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
-> IO ()
vkCmdPreprocessGeneratedCommandsNV'
                                                                  (CommandBuffer -> Ptr CommandBuffer_T
commandBufferHandle (CommandBuffer
commandBuffer))
                                                                  "pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV
pGeneratedCommandsInfo)
  () -> ContT () IO ()
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" mkVkCmdBindPipelineShaderGroupNV
  :: FunPtr (Ptr CommandBuffer_T -> PipelineBindPoint -> Pipeline -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> PipelineBindPoint -> Pipeline -> Word32 -> IO ()

-- | vkCmdBindPipelineShaderGroupNV - Bind a pipeline object
--
-- == Valid Usage
--
-- -   #VUID-vkCmdBindPipelineShaderGroupNV-groupIndex-02893# @groupIndex@
--     /must/ be @0@ or less than the effective
--     'GraphicsPipelineShaderGroupsCreateInfoNV'::@groupCount@ including
--     the referenced pipelines
--
-- -   #VUID-vkCmdBindPipelineShaderGroupNV-pipelineBindPoint-02894# The
--     @pipelineBindPoint@ /must/ be
--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
--
-- -   #VUID-vkCmdBindPipelineShaderGroupNV-groupIndex-02895# The same
--     restrictions as
--     'Vulkan.Core10.CommandBufferBuilding.cmdBindPipeline' apply as if
--     the bound pipeline was created only with the Shader Group from the
--     @groupIndex@ information
--
-- -   #VUID-vkCmdBindPipelineShaderGroupNV-deviceGeneratedCommands-02896#
--     The
--     <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#features-deviceGeneratedCommands deviceGeneratedCommands>
--     feature /must/ be enabled
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkCmdBindPipelineShaderGroupNV-commandBuffer-parameter#
--     @commandBuffer@ /must/ be a valid
--     'Vulkan.Core10.Handles.CommandBuffer' handle
--
-- -   #VUID-vkCmdBindPipelineShaderGroupNV-pipelineBindPoint-parameter#
--     @pipelineBindPoint@ /must/ be a valid
--     'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' value
--
-- -   #VUID-vkCmdBindPipelineShaderGroupNV-pipeline-parameter# @pipeline@
--     /must/ be a valid 'Vulkan.Core10.Handles.Pipeline' handle
--
-- -   #VUID-vkCmdBindPipelineShaderGroupNV-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-vkCmdBindPipelineShaderGroupNV-commandBuffer-cmdpool# The
--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
--     allocated from /must/ support graphics, or compute operations
--
-- -   #VUID-vkCmdBindPipelineShaderGroupNV-videocoding# This command
--     /must/ only be called outside of a video coding scope
--
-- -   #VUID-vkCmdBindPipelineShaderGroupNV-commonparent# Both of
--     @commandBuffer@, and @pipeline@ /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 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                                                                                                              | State                                                                                                                                  |
-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                             | Compute                                                                                                               |                                                                                                                                        |
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------+
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_device_generated_commands VK_NV_device_generated_commands>,
-- 'Vulkan.Core10.Handles.CommandBuffer', 'Vulkan.Core10.Handles.Pipeline',
-- 'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint'
cmdBindPipelineShaderGroupNV :: forall io
                              . (MonadIO io)
                             => -- | @commandBuffer@ is the command buffer that the pipeline will be bound
                                -- to.
                                CommandBuffer
                             -> -- | @pipelineBindPoint@ is a
                                -- 'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' value
                                -- specifying the bind point to which the pipeline will be bound.
                                PipelineBindPoint
                             -> -- | @pipeline@ is the pipeline to be bound.
                                Pipeline
                             -> -- | @groupIndex@ is the shader group to be bound.
                                ("groupIndex" ::: Word32)
                             -> io ()
cmdBindPipelineShaderGroupNV :: forall (io :: * -> *).
MonadIO io =>
CommandBuffer -> PipelineBindPoint -> Pipeline -> Flags -> io ()
cmdBindPipelineShaderGroupNV CommandBuffer
commandBuffer
                               PipelineBindPoint
pipelineBindPoint
                               Pipeline
pipeline
                               Flags
groupIndex = IO () -> io ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> io ()) -> IO () -> io ()
forall a b. (a -> b) -> a -> b
$ do
  let vkCmdBindPipelineShaderGroupNVPtr :: FunPtr
  (Ptr CommandBuffer_T
   -> PipelineBindPoint -> Pipeline -> Flags -> IO ())
vkCmdBindPipelineShaderGroupNVPtr = DeviceCmds
-> FunPtr
     (Ptr CommandBuffer_T
      -> PipelineBindPoint -> Pipeline -> Flags -> IO ())
pVkCmdBindPipelineShaderGroupNV (case CommandBuffer
commandBuffer of CommandBuffer{DeviceCmds
deviceCmds :: DeviceCmds
$sel:deviceCmds:CommandBuffer :: CommandBuffer -> DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  ("isPreprocessed" ::: Bool) -> IO () -> IO ()
forall (f :: * -> *).
Applicative f =>
("isPreprocessed" ::: Bool) -> f () -> f ()
unless (FunPtr
  (Ptr CommandBuffer_T
   -> PipelineBindPoint -> Pipeline -> Flags -> IO ())
vkCmdBindPipelineShaderGroupNVPtr FunPtr
  (Ptr CommandBuffer_T
   -> PipelineBindPoint -> Pipeline -> Flags -> IO ())
-> FunPtr
     (Ptr CommandBuffer_T
      -> PipelineBindPoint -> Pipeline -> Flags -> IO ())
-> "isPreprocessed" ::: Bool
forall a. Eq a => a -> a -> "isPreprocessed" ::: Bool
/= FunPtr
  (Ptr CommandBuffer_T
   -> PipelineBindPoint -> Pipeline -> Flags -> 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 vkCmdBindPipelineShaderGroupNV is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkCmdBindPipelineShaderGroupNV' :: Ptr CommandBuffer_T
-> PipelineBindPoint -> Pipeline -> Flags -> IO ()
vkCmdBindPipelineShaderGroupNV' = FunPtr
  (Ptr CommandBuffer_T
   -> PipelineBindPoint -> Pipeline -> Flags -> IO ())
-> Ptr CommandBuffer_T
-> PipelineBindPoint
-> Pipeline
-> Flags
-> IO ()
mkVkCmdBindPipelineShaderGroupNV FunPtr
  (Ptr CommandBuffer_T
   -> PipelineBindPoint -> Pipeline -> Flags -> IO ())
vkCmdBindPipelineShaderGroupNVPtr
  String -> IO () -> IO ()
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkCmdBindPipelineShaderGroupNV" (Ptr CommandBuffer_T
-> PipelineBindPoint -> Pipeline -> Flags -> IO ()
vkCmdBindPipelineShaderGroupNV'
                                                       (CommandBuffer -> Ptr CommandBuffer_T
commandBufferHandle (CommandBuffer
commandBuffer))
                                                       (PipelineBindPoint
pipelineBindPoint)
                                                       (Pipeline
pipeline)
                                                       (Flags
groupIndex))
  () -> IO ()
forall (f :: * -> *) a. Applicative f => a -> f a
pure (() -> IO ()) -> () -> IO ()
forall a b. (a -> b) -> a -> b
$ ()


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

-- | vkGetGeneratedCommandsMemoryRequirementsNV - Retrieve the buffer
-- allocation requirements for generated commands
--
-- == Valid Usage
--
-- -   #VUID-vkGetGeneratedCommandsMemoryRequirementsNV-deviceGeneratedCommands-02906#
--     The
--     <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#features-deviceGeneratedCommands ::deviceGeneratedCommands>
--     feature /must/ be enabled
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkGetGeneratedCommandsMemoryRequirementsNV-device-parameter#
--     @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
--
-- -   #VUID-vkGetGeneratedCommandsMemoryRequirementsNV-pInfo-parameter#
--     @pInfo@ /must/ be a valid pointer to a valid
--     'GeneratedCommandsMemoryRequirementsInfoNV' structure
--
-- -   #VUID-vkGetGeneratedCommandsMemoryRequirementsNV-pMemoryRequirements-parameter#
--     @pMemoryRequirements@ /must/ be a valid pointer to a
--     'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.MemoryRequirements2'
--     structure
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_device_generated_commands VK_NV_device_generated_commands>,
-- 'Vulkan.Core10.Handles.Device',
-- 'GeneratedCommandsMemoryRequirementsInfoNV',
-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.MemoryRequirements2'
getGeneratedCommandsMemoryRequirementsNV :: forall a io
                                          . ( Extendss MemoryRequirements2 a
                                            , PokeChain a
                                            , PeekChain a
                                            , MonadIO io )
                                         => -- | @device@ is the logical device that owns the buffer.
                                            Device
                                         -> -- | @pInfo@ is a pointer to a 'GeneratedCommandsMemoryRequirementsInfoNV'
                                            -- structure containing parameters required for the memory requirements
                                            -- query.
                                            GeneratedCommandsMemoryRequirementsInfoNV
                                         -> io (MemoryRequirements2 a)
getGeneratedCommandsMemoryRequirementsNV :: forall (a :: [*]) (io :: * -> *).
(Extendss MemoryRequirements2 a, PokeChain a, PeekChain a,
 MonadIO io) =>
Device
-> GeneratedCommandsMemoryRequirementsInfoNV
-> io (MemoryRequirements2 a)
getGeneratedCommandsMemoryRequirementsNV Device
device GeneratedCommandsMemoryRequirementsInfoNV
info = IO (MemoryRequirements2 a) -> io (MemoryRequirements2 a)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (MemoryRequirements2 a) -> io (MemoryRequirements2 a))
-> (ContT (MemoryRequirements2 a) IO (MemoryRequirements2 a)
    -> IO (MemoryRequirements2 a))
-> ContT (MemoryRequirements2 a) IO (MemoryRequirements2 a)
-> io (MemoryRequirements2 a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT (MemoryRequirements2 a) IO (MemoryRequirements2 a)
-> IO (MemoryRequirements2 a)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (MemoryRequirements2 a) IO (MemoryRequirements2 a)
 -> io (MemoryRequirements2 a))
-> ContT (MemoryRequirements2 a) IO (MemoryRequirements2 a)
-> io (MemoryRequirements2 a)
forall a b. (a -> b) -> a -> b
$ do
  let vkGetGeneratedCommandsMemoryRequirementsNVPtr :: FunPtr
  (Ptr Device_T
   -> ("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV)
   -> ("pMemoryRequirements" ::: Ptr (SomeStruct MemoryRequirements2))
   -> IO ())
vkGetGeneratedCommandsMemoryRequirementsNVPtr = DeviceCmds
-> FunPtr
     (Ptr Device_T
      -> ("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV)
      -> ("pMemoryRequirements" ::: Ptr (SomeStruct MemoryRequirements2))
      -> IO ())
pVkGetGeneratedCommandsMemoryRequirementsNV (case Device
device of Device{DeviceCmds
$sel:deviceCmds:Device :: Device -> DeviceCmds
deviceCmds :: DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO () -> ContT (MemoryRequirements2 a) IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT (MemoryRequirements2 a) IO ())
-> IO () -> ContT (MemoryRequirements2 a) 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
   -> ("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV)
   -> ("pMemoryRequirements" ::: Ptr (SomeStruct MemoryRequirements2))
   -> IO ())
vkGetGeneratedCommandsMemoryRequirementsNVPtr FunPtr
  (Ptr Device_T
   -> ("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV)
   -> ("pMemoryRequirements" ::: Ptr (SomeStruct MemoryRequirements2))
   -> IO ())
-> FunPtr
     (Ptr Device_T
      -> ("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV)
      -> ("pMemoryRequirements" ::: Ptr (SomeStruct MemoryRequirements2))
      -> IO ())
-> "isPreprocessed" ::: Bool
forall a. Eq a => a -> a -> "isPreprocessed" ::: Bool
/= FunPtr
  (Ptr Device_T
   -> ("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV)
   -> ("pMemoryRequirements" ::: 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 vkGetGeneratedCommandsMemoryRequirementsNV is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkGetGeneratedCommandsMemoryRequirementsNV' :: Ptr Device_T
-> ("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV)
-> ("pMemoryRequirements" ::: Ptr (SomeStruct MemoryRequirements2))
-> IO ()
vkGetGeneratedCommandsMemoryRequirementsNV' = FunPtr
  (Ptr Device_T
   -> ("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV)
   -> ("pMemoryRequirements" ::: Ptr (SomeStruct MemoryRequirements2))
   -> IO ())
-> Ptr Device_T
-> ("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV)
-> ("pMemoryRequirements" ::: Ptr (SomeStruct MemoryRequirements2))
-> IO ()
mkVkGetGeneratedCommandsMemoryRequirementsNV FunPtr
  (Ptr Device_T
   -> ("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV)
   -> ("pMemoryRequirements" ::: Ptr (SomeStruct MemoryRequirements2))
   -> IO ())
vkGetGeneratedCommandsMemoryRequirementsNVPtr
  "pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV
pInfo <- ((("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV)
  -> IO (MemoryRequirements2 a))
 -> IO (MemoryRequirements2 a))
-> ContT
     (MemoryRequirements2 a)
     IO
     ("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV)
   -> IO (MemoryRequirements2 a))
  -> IO (MemoryRequirements2 a))
 -> ContT
      (MemoryRequirements2 a)
      IO
      ("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV))
-> ((("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV)
     -> IO (MemoryRequirements2 a))
    -> IO (MemoryRequirements2 a))
-> ContT
     (MemoryRequirements2 a)
     IO
     ("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV)
forall a b. (a -> b) -> a -> b
$ GeneratedCommandsMemoryRequirementsInfoNV
-> (("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV)
    -> IO (MemoryRequirements2 a))
-> IO (MemoryRequirements2 a)
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
withCStruct (GeneratedCommandsMemoryRequirementsInfoNV
info)
  Ptr (MemoryRequirements2 a)
pPMemoryRequirements <- ((Ptr (MemoryRequirements2 a) -> IO (MemoryRequirements2 a))
 -> IO (MemoryRequirements2 a))
-> ContT (MemoryRequirements2 a) IO (Ptr (MemoryRequirements2 a))
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 a) IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT (MemoryRequirements2 a) IO ())
-> IO () -> ContT (MemoryRequirements2 a) IO ()
forall a b. (a -> b) -> a -> b
$ String -> IO () -> IO ()
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkGetGeneratedCommandsMemoryRequirementsNV" (Ptr Device_T
-> ("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV)
-> ("pMemoryRequirements" ::: Ptr (SomeStruct MemoryRequirements2))
-> IO ()
vkGetGeneratedCommandsMemoryRequirementsNV'
                                                                          (Device -> Ptr Device_T
deviceHandle (Device
device))
                                                                          "pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV
pInfo
                                                                          (Ptr (MemoryRequirements2 a)
-> "pMemoryRequirements" ::: Ptr (SomeStruct MemoryRequirements2)
forall (a :: [*] -> *) (es :: [*]).
Ptr (a es) -> Ptr (SomeStruct a)
forgetExtensions (Ptr (MemoryRequirements2 a)
pPMemoryRequirements)))
  MemoryRequirements2 a
pMemoryRequirements <- IO (MemoryRequirements2 a)
-> ContT (MemoryRequirements2 a) IO (MemoryRequirements2 a)
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO (MemoryRequirements2 a)
 -> ContT (MemoryRequirements2 a) IO (MemoryRequirements2 a))
-> IO (MemoryRequirements2 a)
-> ContT (MemoryRequirements2 a) IO (MemoryRequirements2 a)
forall a b. (a -> b) -> a -> b
$ forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @(MemoryRequirements2 _) Ptr (MemoryRequirements2 a)
pPMemoryRequirements
  MemoryRequirements2 a
-> ContT (MemoryRequirements2 a) IO (MemoryRequirements2 a)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (MemoryRequirements2 a
 -> ContT (MemoryRequirements2 a) IO (MemoryRequirements2 a))
-> MemoryRequirements2 a
-> ContT (MemoryRequirements2 a) IO (MemoryRequirements2 a)
forall a b. (a -> b) -> a -> b
$ (MemoryRequirements2 a
pMemoryRequirements)


foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkCreateIndirectCommandsLayoutNV
  :: FunPtr (Ptr Device_T -> Ptr IndirectCommandsLayoutCreateInfoNV -> Ptr AllocationCallbacks -> Ptr IndirectCommandsLayoutNV -> IO Result) -> Ptr Device_T -> Ptr IndirectCommandsLayoutCreateInfoNV -> Ptr AllocationCallbacks -> Ptr IndirectCommandsLayoutNV -> IO Result

-- | vkCreateIndirectCommandsLayoutNV - Create an indirect command layout
-- object
--
-- == Valid Usage
--
-- -   #VUID-vkCreateIndirectCommandsLayoutNV-deviceGeneratedCommands-02929#
--     The
--     <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#features-deviceGeneratedCommands ::deviceGeneratedCommands>
--     feature /must/ be enabled
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkCreateIndirectCommandsLayoutNV-device-parameter# @device@
--     /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
--
-- -   #VUID-vkCreateIndirectCommandsLayoutNV-pCreateInfo-parameter#
--     @pCreateInfo@ /must/ be a valid pointer to a valid
--     'IndirectCommandsLayoutCreateInfoNV' structure
--
-- -   #VUID-vkCreateIndirectCommandsLayoutNV-pAllocator-parameter# If
--     @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid pointer
--     to a valid 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
--     structure
--
-- -   #VUID-vkCreateIndirectCommandsLayoutNV-pIndirectCommandsLayout-parameter#
--     @pIndirectCommandsLayout@ /must/ be a valid pointer to a
--     'Vulkan.Extensions.Handles.IndirectCommandsLayoutNV' 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_NV_device_generated_commands VK_NV_device_generated_commands>,
-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
-- 'Vulkan.Core10.Handles.Device', 'IndirectCommandsLayoutCreateInfoNV',
-- 'Vulkan.Extensions.Handles.IndirectCommandsLayoutNV'
createIndirectCommandsLayoutNV :: forall io
                                . (MonadIO io)
                               => -- | @device@ is the logical device that creates the indirect command layout.
                                  Device
                               -> -- | @pCreateInfo@ is a pointer to a 'IndirectCommandsLayoutCreateInfoNV'
                                  -- structure containing parameters affecting creation of the indirect
                                  -- command layout.
                                  IndirectCommandsLayoutCreateInfoNV
                               -> -- | @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 (IndirectCommandsLayoutNV)
createIndirectCommandsLayoutNV :: forall (io :: * -> *).
MonadIO io =>
Device
-> IndirectCommandsLayoutCreateInfoNV
-> ("allocator" ::: Maybe AllocationCallbacks)
-> io IndirectCommandsLayoutNV
createIndirectCommandsLayoutNV Device
device
                                 IndirectCommandsLayoutCreateInfoNV
createInfo
                                 "allocator" ::: Maybe AllocationCallbacks
allocator = IO IndirectCommandsLayoutNV -> io IndirectCommandsLayoutNV
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO IndirectCommandsLayoutNV -> io IndirectCommandsLayoutNV)
-> (ContT IndirectCommandsLayoutNV IO IndirectCommandsLayoutNV
    -> IO IndirectCommandsLayoutNV)
-> ContT IndirectCommandsLayoutNV IO IndirectCommandsLayoutNV
-> io IndirectCommandsLayoutNV
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT IndirectCommandsLayoutNV IO IndirectCommandsLayoutNV
-> IO IndirectCommandsLayoutNV
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT IndirectCommandsLayoutNV IO IndirectCommandsLayoutNV
 -> io IndirectCommandsLayoutNV)
-> ContT IndirectCommandsLayoutNV IO IndirectCommandsLayoutNV
-> io IndirectCommandsLayoutNV
forall a b. (a -> b) -> a -> b
$ do
  let vkCreateIndirectCommandsLayoutNVPtr :: FunPtr
  (Ptr Device_T
   -> ("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV)
   -> ("pAllocator" ::: Ptr AllocationCallbacks)
   -> ("pIndirectCommandsLayout" ::: Ptr IndirectCommandsLayoutNV)
   -> IO Result)
vkCreateIndirectCommandsLayoutNVPtr = DeviceCmds
-> FunPtr
     (Ptr Device_T
      -> ("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV)
      -> ("pAllocator" ::: Ptr AllocationCallbacks)
      -> ("pIndirectCommandsLayout" ::: Ptr IndirectCommandsLayoutNV)
      -> IO Result)
pVkCreateIndirectCommandsLayoutNV (case Device
device of Device{DeviceCmds
deviceCmds :: DeviceCmds
$sel:deviceCmds:Device :: Device -> DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO () -> ContT IndirectCommandsLayoutNV IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT IndirectCommandsLayoutNV IO ())
-> IO () -> ContT IndirectCommandsLayoutNV 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
   -> ("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV)
   -> ("pAllocator" ::: Ptr AllocationCallbacks)
   -> ("pIndirectCommandsLayout" ::: Ptr IndirectCommandsLayoutNV)
   -> IO Result)
vkCreateIndirectCommandsLayoutNVPtr FunPtr
  (Ptr Device_T
   -> ("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV)
   -> ("pAllocator" ::: Ptr AllocationCallbacks)
   -> ("pIndirectCommandsLayout" ::: Ptr IndirectCommandsLayoutNV)
   -> IO Result)
-> FunPtr
     (Ptr Device_T
      -> ("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV)
      -> ("pAllocator" ::: Ptr AllocationCallbacks)
      -> ("pIndirectCommandsLayout" ::: Ptr IndirectCommandsLayoutNV)
      -> IO Result)
-> "isPreprocessed" ::: Bool
forall a. Eq a => a -> a -> "isPreprocessed" ::: Bool
/= FunPtr
  (Ptr Device_T
   -> ("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV)
   -> ("pAllocator" ::: Ptr AllocationCallbacks)
   -> ("pIndirectCommandsLayout" ::: Ptr IndirectCommandsLayoutNV)
   -> 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 vkCreateIndirectCommandsLayoutNV is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkCreateIndirectCommandsLayoutNV' :: Ptr Device_T
-> ("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV)
-> ("pAllocator" ::: Ptr AllocationCallbacks)
-> ("pIndirectCommandsLayout" ::: Ptr IndirectCommandsLayoutNV)
-> IO Result
vkCreateIndirectCommandsLayoutNV' = FunPtr
  (Ptr Device_T
   -> ("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV)
   -> ("pAllocator" ::: Ptr AllocationCallbacks)
   -> ("pIndirectCommandsLayout" ::: Ptr IndirectCommandsLayoutNV)
   -> IO Result)
-> Ptr Device_T
-> ("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV)
-> ("pAllocator" ::: Ptr AllocationCallbacks)
-> ("pIndirectCommandsLayout" ::: Ptr IndirectCommandsLayoutNV)
-> IO Result
mkVkCreateIndirectCommandsLayoutNV FunPtr
  (Ptr Device_T
   -> ("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV)
   -> ("pAllocator" ::: Ptr AllocationCallbacks)
   -> ("pIndirectCommandsLayout" ::: Ptr IndirectCommandsLayoutNV)
   -> IO Result)
vkCreateIndirectCommandsLayoutNVPtr
  "pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV
pCreateInfo <- ((("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV)
  -> IO IndirectCommandsLayoutNV)
 -> IO IndirectCommandsLayoutNV)
-> ContT
     IndirectCommandsLayoutNV
     IO
     ("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV)
   -> IO IndirectCommandsLayoutNV)
  -> IO IndirectCommandsLayoutNV)
 -> ContT
      IndirectCommandsLayoutNV
      IO
      ("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV))
-> ((("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV)
     -> IO IndirectCommandsLayoutNV)
    -> IO IndirectCommandsLayoutNV)
-> ContT
     IndirectCommandsLayoutNV
     IO
     ("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV)
forall a b. (a -> b) -> a -> b
$ IndirectCommandsLayoutCreateInfoNV
-> (("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV)
    -> IO IndirectCommandsLayoutNV)
-> IO IndirectCommandsLayoutNV
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
withCStruct (IndirectCommandsLayoutCreateInfoNV
createInfo)
  "pAllocator" ::: Ptr AllocationCallbacks
pAllocator <- case ("allocator" ::: Maybe AllocationCallbacks
allocator) of
    "allocator" ::: Maybe AllocationCallbacks
Nothing -> ("pAllocator" ::: Ptr AllocationCallbacks)
-> ContT
     IndirectCommandsLayoutNV
     IO
     ("pAllocator" ::: Ptr AllocationCallbacks)
forall (f :: * -> *) a. Applicative f => a -> f a
pure "pAllocator" ::: Ptr AllocationCallbacks
forall a. Ptr a
nullPtr
    Just AllocationCallbacks
j -> ((("pAllocator" ::: Ptr AllocationCallbacks)
  -> IO IndirectCommandsLayoutNV)
 -> IO IndirectCommandsLayoutNV)
-> ContT
     IndirectCommandsLayoutNV
     IO
     ("pAllocator" ::: Ptr AllocationCallbacks)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pAllocator" ::: Ptr AllocationCallbacks)
   -> IO IndirectCommandsLayoutNV)
  -> IO IndirectCommandsLayoutNV)
 -> ContT
      IndirectCommandsLayoutNV
      IO
      ("pAllocator" ::: Ptr AllocationCallbacks))
-> ((("pAllocator" ::: Ptr AllocationCallbacks)
     -> IO IndirectCommandsLayoutNV)
    -> IO IndirectCommandsLayoutNV)
-> ContT
     IndirectCommandsLayoutNV
     IO
     ("pAllocator" ::: Ptr AllocationCallbacks)
forall a b. (a -> b) -> a -> b
$ AllocationCallbacks
-> (("pAllocator" ::: Ptr AllocationCallbacks)
    -> IO IndirectCommandsLayoutNV)
-> IO IndirectCommandsLayoutNV
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
withCStruct (AllocationCallbacks
j)
  "pIndirectCommandsLayout" ::: Ptr IndirectCommandsLayoutNV
pPIndirectCommandsLayout <- ((("pIndirectCommandsLayout" ::: Ptr IndirectCommandsLayoutNV)
  -> IO IndirectCommandsLayoutNV)
 -> IO IndirectCommandsLayoutNV)
-> ContT
     IndirectCommandsLayoutNV
     IO
     ("pIndirectCommandsLayout" ::: Ptr IndirectCommandsLayoutNV)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pIndirectCommandsLayout" ::: Ptr IndirectCommandsLayoutNV)
   -> IO IndirectCommandsLayoutNV)
  -> IO IndirectCommandsLayoutNV)
 -> ContT
      IndirectCommandsLayoutNV
      IO
      ("pIndirectCommandsLayout" ::: Ptr IndirectCommandsLayoutNV))
-> ((("pIndirectCommandsLayout" ::: Ptr IndirectCommandsLayoutNV)
     -> IO IndirectCommandsLayoutNV)
    -> IO IndirectCommandsLayoutNV)
-> ContT
     IndirectCommandsLayoutNV
     IO
     ("pIndirectCommandsLayout" ::: Ptr IndirectCommandsLayoutNV)
forall a b. (a -> b) -> a -> b
$ IO ("pIndirectCommandsLayout" ::: Ptr IndirectCommandsLayoutNV)
-> (("pIndirectCommandsLayout" ::: Ptr IndirectCommandsLayoutNV)
    -> IO ())
-> (("pIndirectCommandsLayout" ::: Ptr IndirectCommandsLayoutNV)
    -> IO IndirectCommandsLayoutNV)
-> IO IndirectCommandsLayoutNV
forall a b c. IO a -> (a -> IO b) -> (a -> IO c) -> IO c
bracket (forall a. Int -> IO (Ptr a)
callocBytes @IndirectCommandsLayoutNV Int
8) ("pIndirectCommandsLayout" ::: Ptr IndirectCommandsLayoutNV)
-> IO ()
forall a. Ptr a -> IO ()
free
  Result
r <- IO Result -> ContT IndirectCommandsLayoutNV IO Result
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO Result -> ContT IndirectCommandsLayoutNV IO Result)
-> IO Result -> ContT IndirectCommandsLayoutNV IO Result
forall a b. (a -> b) -> a -> b
$ String -> IO Result -> IO Result
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkCreateIndirectCommandsLayoutNV" (Ptr Device_T
-> ("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV)
-> ("pAllocator" ::: Ptr AllocationCallbacks)
-> ("pIndirectCommandsLayout" ::: Ptr IndirectCommandsLayoutNV)
-> IO Result
vkCreateIndirectCommandsLayoutNV'
                                                                     (Device -> Ptr Device_T
deviceHandle (Device
device))
                                                                     "pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV
pCreateInfo
                                                                     "pAllocator" ::: Ptr AllocationCallbacks
pAllocator
                                                                     ("pIndirectCommandsLayout" ::: Ptr IndirectCommandsLayoutNV
pPIndirectCommandsLayout))
  IO () -> ContT IndirectCommandsLayoutNV IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT IndirectCommandsLayoutNV IO ())
-> IO () -> ContT IndirectCommandsLayoutNV 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))
  IndirectCommandsLayoutNV
pIndirectCommandsLayout <- IO IndirectCommandsLayoutNV
-> ContT IndirectCommandsLayoutNV IO IndirectCommandsLayoutNV
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO IndirectCommandsLayoutNV
 -> ContT IndirectCommandsLayoutNV IO IndirectCommandsLayoutNV)
-> IO IndirectCommandsLayoutNV
-> ContT IndirectCommandsLayoutNV IO IndirectCommandsLayoutNV
forall a b. (a -> b) -> a -> b
$ forall a. Storable a => Ptr a -> IO a
peek @IndirectCommandsLayoutNV "pIndirectCommandsLayout" ::: Ptr IndirectCommandsLayoutNV
pPIndirectCommandsLayout
  IndirectCommandsLayoutNV
-> ContT IndirectCommandsLayoutNV IO IndirectCommandsLayoutNV
forall (f :: * -> *) a. Applicative f => a -> f a
pure (IndirectCommandsLayoutNV
 -> ContT IndirectCommandsLayoutNV IO IndirectCommandsLayoutNV)
-> IndirectCommandsLayoutNV
-> ContT IndirectCommandsLayoutNV IO IndirectCommandsLayoutNV
forall a b. (a -> b) -> a -> b
$ (IndirectCommandsLayoutNV
pIndirectCommandsLayout)

-- | A convenience wrapper to make a compatible pair of calls to
-- 'createIndirectCommandsLayoutNV' and 'destroyIndirectCommandsLayoutNV'
--
-- To ensure that 'destroyIndirectCommandsLayoutNV' 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.
--
withIndirectCommandsLayoutNV :: forall io r . MonadIO io => Device -> IndirectCommandsLayoutCreateInfoNV -> Maybe AllocationCallbacks -> (io IndirectCommandsLayoutNV -> (IndirectCommandsLayoutNV -> io ()) -> r) -> r
withIndirectCommandsLayoutNV :: forall (io :: * -> *) r.
MonadIO io =>
Device
-> IndirectCommandsLayoutCreateInfoNV
-> ("allocator" ::: Maybe AllocationCallbacks)
-> (io IndirectCommandsLayoutNV
    -> (IndirectCommandsLayoutNV -> io ()) -> r)
-> r
withIndirectCommandsLayoutNV Device
device IndirectCommandsLayoutCreateInfoNV
pCreateInfo "allocator" ::: Maybe AllocationCallbacks
pAllocator io IndirectCommandsLayoutNV
-> (IndirectCommandsLayoutNV -> io ()) -> r
b =
  io IndirectCommandsLayoutNV
-> (IndirectCommandsLayoutNV -> io ()) -> r
b (Device
-> IndirectCommandsLayoutCreateInfoNV
-> ("allocator" ::: Maybe AllocationCallbacks)
-> io IndirectCommandsLayoutNV
forall (io :: * -> *).
MonadIO io =>
Device
-> IndirectCommandsLayoutCreateInfoNV
-> ("allocator" ::: Maybe AllocationCallbacks)
-> io IndirectCommandsLayoutNV
createIndirectCommandsLayoutNV Device
device IndirectCommandsLayoutCreateInfoNV
pCreateInfo "allocator" ::: Maybe AllocationCallbacks
pAllocator)
    (\(IndirectCommandsLayoutNV
o0) -> Device
-> IndirectCommandsLayoutNV
-> ("allocator" ::: Maybe AllocationCallbacks)
-> io ()
forall (io :: * -> *).
MonadIO io =>
Device
-> IndirectCommandsLayoutNV
-> ("allocator" ::: Maybe AllocationCallbacks)
-> io ()
destroyIndirectCommandsLayoutNV Device
device IndirectCommandsLayoutNV
o0 "allocator" ::: Maybe AllocationCallbacks
pAllocator)


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

-- | vkDestroyIndirectCommandsLayoutNV - Destroy an indirect commands layout
--
-- == Valid Usage
--
-- -   #VUID-vkDestroyIndirectCommandsLayoutNV-indirectCommandsLayout-02938#
--     All submitted commands that refer to @indirectCommandsLayout@ /must/
--     have completed execution
--
-- -   #VUID-vkDestroyIndirectCommandsLayoutNV-indirectCommandsLayout-02939#
--     If 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
--     provided when @indirectCommandsLayout@ was created, a compatible set
--     of callbacks /must/ be provided here
--
-- -   #VUID-vkDestroyIndirectCommandsLayoutNV-indirectCommandsLayout-02940#
--     If no 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
--     provided when @indirectCommandsLayout@ was created, @pAllocator@
--     /must/ be @NULL@
--
-- -   #VUID-vkDestroyIndirectCommandsLayoutNV-deviceGeneratedCommands-02941#
--     The
--     <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#features-deviceGeneratedCommands ::deviceGeneratedCommands>
--     feature /must/ be enabled
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkDestroyIndirectCommandsLayoutNV-device-parameter# @device@
--     /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
--
-- -   #VUID-vkDestroyIndirectCommandsLayoutNV-indirectCommandsLayout-parameter#
--     If @indirectCommandsLayout@ is not
--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @indirectCommandsLayout@
--     /must/ be a valid
--     'Vulkan.Extensions.Handles.IndirectCommandsLayoutNV' handle
--
-- -   #VUID-vkDestroyIndirectCommandsLayoutNV-pAllocator-parameter# If
--     @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid pointer
--     to a valid 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
--     structure
--
-- -   #VUID-vkDestroyIndirectCommandsLayoutNV-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_NV_device_generated_commands VK_NV_device_generated_commands>,
-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
-- 'Vulkan.Core10.Handles.Device',
-- 'Vulkan.Extensions.Handles.IndirectCommandsLayoutNV'
destroyIndirectCommandsLayoutNV :: forall io
                                 . (MonadIO io)
                                => -- | @device@ is the logical device that destroys the layout.
                                   Device
                                -> -- | @indirectCommandsLayout@ is the layout to destroy.
                                   IndirectCommandsLayoutNV
                                -> -- | @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 ()
destroyIndirectCommandsLayoutNV :: forall (io :: * -> *).
MonadIO io =>
Device
-> IndirectCommandsLayoutNV
-> ("allocator" ::: Maybe AllocationCallbacks)
-> io ()
destroyIndirectCommandsLayoutNV Device
device
                                  IndirectCommandsLayoutNV
indirectCommandsLayout
                                  "allocator" ::: Maybe AllocationCallbacks
allocator = IO () -> io ()
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 vkDestroyIndirectCommandsLayoutNVPtr :: FunPtr
  (Ptr Device_T
   -> IndirectCommandsLayoutNV
   -> ("pAllocator" ::: Ptr AllocationCallbacks)
   -> IO ())
vkDestroyIndirectCommandsLayoutNVPtr = DeviceCmds
-> FunPtr
     (Ptr Device_T
      -> IndirectCommandsLayoutNV
      -> ("pAllocator" ::: Ptr AllocationCallbacks)
      -> IO ())
pVkDestroyIndirectCommandsLayoutNV (case Device
device of Device{DeviceCmds
deviceCmds :: DeviceCmds
$sel:deviceCmds:Device :: Device -> DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO () -> ContT () IO ()
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
   -> IndirectCommandsLayoutNV
   -> ("pAllocator" ::: Ptr AllocationCallbacks)
   -> IO ())
vkDestroyIndirectCommandsLayoutNVPtr FunPtr
  (Ptr Device_T
   -> IndirectCommandsLayoutNV
   -> ("pAllocator" ::: Ptr AllocationCallbacks)
   -> IO ())
-> FunPtr
     (Ptr Device_T
      -> IndirectCommandsLayoutNV
      -> ("pAllocator" ::: Ptr AllocationCallbacks)
      -> IO ())
-> "isPreprocessed" ::: Bool
forall a. Eq a => a -> a -> "isPreprocessed" ::: Bool
/= FunPtr
  (Ptr Device_T
   -> IndirectCommandsLayoutNV
   -> ("pAllocator" ::: 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 vkDestroyIndirectCommandsLayoutNV is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkDestroyIndirectCommandsLayoutNV' :: Ptr Device_T
-> IndirectCommandsLayoutNV
-> ("pAllocator" ::: Ptr AllocationCallbacks)
-> IO ()
vkDestroyIndirectCommandsLayoutNV' = FunPtr
  (Ptr Device_T
   -> IndirectCommandsLayoutNV
   -> ("pAllocator" ::: Ptr AllocationCallbacks)
   -> IO ())
-> Ptr Device_T
-> IndirectCommandsLayoutNV
-> ("pAllocator" ::: Ptr AllocationCallbacks)
-> IO ()
mkVkDestroyIndirectCommandsLayoutNV FunPtr
  (Ptr Device_T
   -> IndirectCommandsLayoutNV
   -> ("pAllocator" ::: Ptr AllocationCallbacks)
   -> IO ())
vkDestroyIndirectCommandsLayoutNVPtr
  "pAllocator" ::: Ptr AllocationCallbacks
pAllocator <- case ("allocator" ::: Maybe AllocationCallbacks
allocator) of
    "allocator" ::: Maybe AllocationCallbacks
Nothing -> ("pAllocator" ::: Ptr AllocationCallbacks)
-> ContT () IO ("pAllocator" ::: Ptr AllocationCallbacks)
forall (f :: * -> *) a. Applicative f => a -> f a
pure "pAllocator" ::: Ptr AllocationCallbacks
forall a. Ptr a
nullPtr
    Just AllocationCallbacks
j -> ((("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) -> IO ())
-> ContT () IO ("pAllocator" ::: Ptr AllocationCallbacks)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) -> IO ())
 -> ContT () IO ("pAllocator" ::: Ptr AllocationCallbacks))
-> ((("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) -> IO ())
-> ContT () IO ("pAllocator" ::: Ptr AllocationCallbacks)
forall a b. (a -> b) -> a -> b
$ AllocationCallbacks
-> (("pAllocator" ::: Ptr AllocationCallbacks) -> IO ()) -> IO ()
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
withCStruct (AllocationCallbacks
j)
  IO () -> ContT () IO ()
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
"vkDestroyIndirectCommandsLayoutNV" (Ptr Device_T
-> IndirectCommandsLayoutNV
-> ("pAllocator" ::: Ptr AllocationCallbacks)
-> IO ()
vkDestroyIndirectCommandsLayoutNV'
                                                                 (Device -> Ptr Device_T
deviceHandle (Device
device))
                                                                 (IndirectCommandsLayoutNV
indirectCommandsLayout)
                                                                 "pAllocator" ::: Ptr AllocationCallbacks
pAllocator)
  () -> ContT () IO ()
forall (f :: * -> *) a. Applicative f => a -> f a
pure (() -> ContT () IO ()) -> () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ ()


-- | VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV - Structure describing
-- the device-generated commands features that can be supported by an
-- implementation
--
-- = Members
--
-- This structure describes the following feature:
--
-- = Description
--
-- If the 'PhysicalDeviceDeviceGeneratedCommandsFeaturesNV' 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. 'PhysicalDeviceDeviceGeneratedCommandsFeaturesNV' /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_NV_device_generated_commands VK_NV_device_generated_commands>,
-- 'Vulkan.Core10.FundamentalTypes.Bool32',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data PhysicalDeviceDeviceGeneratedCommandsFeaturesNV = PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
  { -- | #features-deviceGeneratedCommands# @deviceGeneratedCommands@ indicates
    -- whether the implementation supports functionality to generate commands
    -- on the device. See
    -- <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#device-generated-commands Device-Generated Commands>.
    PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
-> "isPreprocessed" ::: Bool
deviceGeneratedCommands :: Bool }
  deriving (Typeable, PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
-> PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
-> "isPreprocessed" ::: Bool
(PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
 -> PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
 -> "isPreprocessed" ::: Bool)
-> (PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
    -> PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
    -> "isPreprocessed" ::: Bool)
-> Eq PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
forall a.
(a -> a -> "isPreprocessed" ::: Bool)
-> (a -> a -> "isPreprocessed" ::: Bool) -> Eq a
/= :: PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
-> PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
-> "isPreprocessed" ::: Bool
$c/= :: PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
-> PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
-> "isPreprocessed" ::: Bool
== :: PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
-> PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
-> "isPreprocessed" ::: Bool
$c== :: PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
-> PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
-> "isPreprocessed" ::: Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (PhysicalDeviceDeviceGeneratedCommandsFeaturesNV)
#endif
deriving instance Show PhysicalDeviceDeviceGeneratedCommandsFeaturesNV

instance ToCStruct PhysicalDeviceDeviceGeneratedCommandsFeaturesNV where
  withCStruct :: forall b.
PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
-> (Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesNV -> IO b)
-> IO b
withCStruct PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
x Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesNV -> IO b
f = Int
-> (Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesNV -> IO b)
-> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
24 ((Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesNV -> IO b)
 -> IO b)
-> (Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesNV -> IO b)
-> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
p -> Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
-> PhysicalDeviceDeviceGeneratedCommandsFeaturesNV -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
p PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
x (Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesNV -> IO b
f Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
p)
  pokeCStruct :: forall b.
Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
-> PhysicalDeviceDeviceGeneratedCommandsFeaturesNV -> IO b -> IO b
pokeCStruct Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
p PhysicalDeviceDeviceGeneratedCommandsFeaturesNV{"isPreprocessed" ::: Bool
deviceGeneratedCommands :: "isPreprocessed" ::: Bool
$sel:deviceGeneratedCommands:PhysicalDeviceDeviceGeneratedCommandsFeaturesNV :: PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
-> "isPreprocessed" ::: Bool
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
p Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
-> 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_NV)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
p Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr ("isPreprocessed" ::: Bool32)
-> ("isPreprocessed" ::: Bool32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
p Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
-> Int -> Ptr ("isPreprocessed" ::: Bool32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Bool32)) (("isPreprocessed" ::: Bool) -> "isPreprocessed" ::: Bool32
boolToBool32 ("isPreprocessed" ::: Bool
deviceGeneratedCommands))
    IO b
f
  cStructSize :: Int
cStructSize = Int
24
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b.
Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesNV -> IO b -> IO b
pokeZeroCStruct Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
p Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
-> 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_NV)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
p Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr ("isPreprocessed" ::: Bool32)
-> ("isPreprocessed" ::: Bool32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
p Ptr PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
-> Int -> Ptr ("isPreprocessed" ::: Bool32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Bool32)) (("isPreprocessed" ::: Bool) -> "isPreprocessed" ::: Bool32
boolToBool32 ("isPreprocessed" ::: Bool
forall a. Zero a => a
zero))
    IO b
f

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

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

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


-- | VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV - Structure
-- describing push descriptor limits that can be supported by an
-- implementation
--
-- = Description
--
-- If the 'PhysicalDeviceDeviceGeneratedCommandsPropertiesNV' 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_NV_device_generated_commands VK_NV_device_generated_commands>,
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data PhysicalDeviceDeviceGeneratedCommandsPropertiesNV = PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
  { -- | @maxGraphicsShaderGroupCount@ is the maximum number of shader groups in
    -- 'GraphicsPipelineShaderGroupsCreateInfoNV'.
    PhysicalDeviceDeviceGeneratedCommandsPropertiesNV -> Flags
maxGraphicsShaderGroupCount :: Word32
  , -- | @maxIndirectSequenceCount@ is the maximum number of sequences in
    -- 'GeneratedCommandsInfoNV' and in
    -- 'GeneratedCommandsMemoryRequirementsInfoNV'.
    PhysicalDeviceDeviceGeneratedCommandsPropertiesNV -> Flags
maxIndirectSequenceCount :: Word32
  , -- | @maxIndirectCommandsTokenCount@ is the maximum number of tokens in
    -- 'IndirectCommandsLayoutCreateInfoNV'.
    PhysicalDeviceDeviceGeneratedCommandsPropertiesNV -> Flags
maxIndirectCommandsTokenCount :: Word32
  , -- | @maxIndirectCommandsStreamCount@ is the maximum number of streams in
    -- 'IndirectCommandsLayoutCreateInfoNV'.
    PhysicalDeviceDeviceGeneratedCommandsPropertiesNV -> Flags
maxIndirectCommandsStreamCount :: Word32
  , -- | @maxIndirectCommandsTokenOffset@ is the maximum offset in
    -- 'IndirectCommandsLayoutTokenNV'.
    PhysicalDeviceDeviceGeneratedCommandsPropertiesNV -> Flags
maxIndirectCommandsTokenOffset :: Word32
  , -- | @maxIndirectCommandsStreamStride@ is the maximum stream stride in
    -- 'IndirectCommandsLayoutCreateInfoNV'.
    PhysicalDeviceDeviceGeneratedCommandsPropertiesNV -> Flags
maxIndirectCommandsStreamStride :: Word32
  , -- | @minSequencesCountBufferOffsetAlignment@ is the minimum alignment for
    -- memory addresses which /can/ be used in 'GeneratedCommandsInfoNV'.
    PhysicalDeviceDeviceGeneratedCommandsPropertiesNV -> Flags
minSequencesCountBufferOffsetAlignment :: Word32
  , -- | @minSequencesIndexBufferOffsetAlignment@ is the minimum alignment for
    -- memory addresses which /can/ be used in 'GeneratedCommandsInfoNV'.
    PhysicalDeviceDeviceGeneratedCommandsPropertiesNV -> Flags
minSequencesIndexBufferOffsetAlignment :: Word32
  , -- | @minIndirectCommandsBufferOffsetAlignment@ is the minimum alignment for
    -- memory addresses used in 'IndirectCommandsStreamNV', and as preprocess
    -- buffer in 'GeneratedCommandsInfoNV'.
    PhysicalDeviceDeviceGeneratedCommandsPropertiesNV -> Flags
minIndirectCommandsBufferOffsetAlignment :: Word32
  }
  deriving (Typeable, PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-> PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-> "isPreprocessed" ::: Bool
(PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
 -> PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
 -> "isPreprocessed" ::: Bool)
-> (PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
    -> PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
    -> "isPreprocessed" ::: Bool)
-> Eq PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
forall a.
(a -> a -> "isPreprocessed" ::: Bool)
-> (a -> a -> "isPreprocessed" ::: Bool) -> Eq a
/= :: PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-> PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-> "isPreprocessed" ::: Bool
$c/= :: PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-> PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-> "isPreprocessed" ::: Bool
== :: PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-> PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-> "isPreprocessed" ::: Bool
$c== :: PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-> PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-> "isPreprocessed" ::: Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (PhysicalDeviceDeviceGeneratedCommandsPropertiesNV)
#endif
deriving instance Show PhysicalDeviceDeviceGeneratedCommandsPropertiesNV

instance ToCStruct PhysicalDeviceDeviceGeneratedCommandsPropertiesNV where
  withCStruct :: forall b.
PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-> (Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV -> IO b)
-> IO b
withCStruct PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
x Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV -> IO b
f = Int
-> (Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV -> IO b)
-> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
56 ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV -> IO b)
 -> IO b)
-> (Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV -> IO b)
-> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
p -> Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-> PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-> IO b
-> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
p PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
x (Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV -> IO b
f Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
p)
  pokeCStruct :: forall b.
Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-> PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-> IO b
-> IO b
pokeCStruct Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
p PhysicalDeviceDeviceGeneratedCommandsPropertiesNV{Flags
minIndirectCommandsBufferOffsetAlignment :: Flags
minSequencesIndexBufferOffsetAlignment :: Flags
minSequencesCountBufferOffsetAlignment :: Flags
maxIndirectCommandsStreamStride :: Flags
maxIndirectCommandsTokenOffset :: Flags
maxIndirectCommandsStreamCount :: Flags
maxIndirectCommandsTokenCount :: Flags
maxIndirectSequenceCount :: Flags
maxGraphicsShaderGroupCount :: Flags
$sel:minIndirectCommandsBufferOffsetAlignment:PhysicalDeviceDeviceGeneratedCommandsPropertiesNV :: PhysicalDeviceDeviceGeneratedCommandsPropertiesNV -> Flags
$sel:minSequencesIndexBufferOffsetAlignment:PhysicalDeviceDeviceGeneratedCommandsPropertiesNV :: PhysicalDeviceDeviceGeneratedCommandsPropertiesNV -> Flags
$sel:minSequencesCountBufferOffsetAlignment:PhysicalDeviceDeviceGeneratedCommandsPropertiesNV :: PhysicalDeviceDeviceGeneratedCommandsPropertiesNV -> Flags
$sel:maxIndirectCommandsStreamStride:PhysicalDeviceDeviceGeneratedCommandsPropertiesNV :: PhysicalDeviceDeviceGeneratedCommandsPropertiesNV -> Flags
$sel:maxIndirectCommandsTokenOffset:PhysicalDeviceDeviceGeneratedCommandsPropertiesNV :: PhysicalDeviceDeviceGeneratedCommandsPropertiesNV -> Flags
$sel:maxIndirectCommandsStreamCount:PhysicalDeviceDeviceGeneratedCommandsPropertiesNV :: PhysicalDeviceDeviceGeneratedCommandsPropertiesNV -> Flags
$sel:maxIndirectCommandsTokenCount:PhysicalDeviceDeviceGeneratedCommandsPropertiesNV :: PhysicalDeviceDeviceGeneratedCommandsPropertiesNV -> Flags
$sel:maxIndirectSequenceCount:PhysicalDeviceDeviceGeneratedCommandsPropertiesNV :: PhysicalDeviceDeviceGeneratedCommandsPropertiesNV -> Flags
$sel:maxGraphicsShaderGroupCount:PhysicalDeviceDeviceGeneratedCommandsPropertiesNV :: PhysicalDeviceDeviceGeneratedCommandsPropertiesNV -> Flags
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-> 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_NV)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-> 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 PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32)) (Flags
maxGraphicsShaderGroupCount)
    Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr Word32)) (Flags
maxIndirectSequenceCount)
    Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Word32)) (Flags
maxIndirectCommandsTokenCount)
    Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
28 :: Ptr Word32)) (Flags
maxIndirectCommandsStreamCount)
    Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-> 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 PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
36 :: Ptr Word32)) (Flags
maxIndirectCommandsStreamStride)
    Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr Word32)) (Flags
minSequencesCountBufferOffsetAlignment)
    Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
44 :: Ptr Word32)) (Flags
minSequencesIndexBufferOffsetAlignment)
    Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr Word32)) (Flags
minIndirectCommandsBufferOffsetAlignment)
    IO b
f
  cStructSize :: Int
cStructSize = Int
56
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b.
Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-> IO b -> IO b
pokeZeroCStruct Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-> 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_NV)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-> 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 PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-> 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 PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-> 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 PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-> 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 PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-> 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 PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-> 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 PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
36 :: Ptr Word32)) (Flags
forall a. Zero a => a
zero)
    Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr Word32)) (Flags
forall a. Zero a => a
zero)
    Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
44 :: Ptr Word32)) (Flags
forall a. Zero a => a
zero)
    Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr Word32)) (Flags
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct PhysicalDeviceDeviceGeneratedCommandsPropertiesNV where
  peekCStruct :: Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-> IO PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
peekCStruct Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
p = do
    Flags
maxGraphicsShaderGroupCount <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32))
    Flags
maxIndirectSequenceCount <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr Word32))
    Flags
maxIndirectCommandsTokenCount <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Word32))
    Flags
maxIndirectCommandsStreamCount <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-> 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 PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr Word32))
    Flags
maxIndirectCommandsStreamStride <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
36 :: Ptr Word32))
    Flags
minSequencesCountBufferOffsetAlignment <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr Word32))
    Flags
minSequencesIndexBufferOffsetAlignment <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
44 :: Ptr Word32))
    Flags
minIndirectCommandsBufferOffsetAlignment <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
p Ptr PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr Word32))
    PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-> IO PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
forall (f :: * -> *) a. Applicative f => a -> f a
pure (PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
 -> IO PhysicalDeviceDeviceGeneratedCommandsPropertiesNV)
-> PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
-> IO PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
forall a b. (a -> b) -> a -> b
$ Flags
-> Flags
-> Flags
-> Flags
-> Flags
-> Flags
-> Flags
-> Flags
-> Flags
-> PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
             Flags
maxGraphicsShaderGroupCount
             Flags
maxIndirectSequenceCount
             Flags
maxIndirectCommandsTokenCount
             Flags
maxIndirectCommandsStreamCount
             Flags
maxIndirectCommandsTokenOffset
             Flags
maxIndirectCommandsStreamStride
             Flags
minSequencesCountBufferOffsetAlignment
             Flags
minSequencesIndexBufferOffsetAlignment
             Flags
minIndirectCommandsBufferOffsetAlignment

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

instance Zero PhysicalDeviceDeviceGeneratedCommandsPropertiesNV where
  zero :: PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
zero = Flags
-> Flags
-> Flags
-> Flags
-> Flags
-> Flags
-> Flags
-> Flags
-> Flags
-> PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
           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
           Flags
forall a. Zero a => a
zero
           Flags
forall a. Zero a => a
zero
           Flags
forall a. Zero a => a
zero


-- | VkGraphicsShaderGroupCreateInfoNV - Structure specifying override
-- parameters for each shader group
--
-- == Valid Usage
--
-- -   #VUID-VkGraphicsShaderGroupCreateInfoNV-stageCount-02888# For
--     @stageCount@, the same restrictions as in
--     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@stageCount@
--     apply
--
-- -   #VUID-VkGraphicsShaderGroupCreateInfoNV-pStages-02889# For
--     @pStages@, the same restrictions as in
--     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@pStages@ apply
--
-- -   #VUID-VkGraphicsShaderGroupCreateInfoNV-pVertexInputState-02890# For
--     @pVertexInputState@, the same restrictions as in
--     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@pVertexInputState@
--     apply
--
-- -   #VUID-VkGraphicsShaderGroupCreateInfoNV-pTessellationState-02891#
--     For @pTessellationState@, the same restrictions as in
--     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@pTessellationState@
--     apply
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkGraphicsShaderGroupCreateInfoNV-sType-sType# @sType@ /must/
--     be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV'
--
-- -   #VUID-VkGraphicsShaderGroupCreateInfoNV-pNext-pNext# @pNext@ /must/
--     be @NULL@
--
-- -   #VUID-VkGraphicsShaderGroupCreateInfoNV-pStages-parameter# @pStages@
--     /must/ be a valid pointer to an array of @stageCount@ valid
--     'Vulkan.Core10.Pipeline.PipelineShaderStageCreateInfo' structures
--
-- -   #VUID-VkGraphicsShaderGroupCreateInfoNV-stageCount-arraylength#
--     @stageCount@ /must/ be greater than @0@
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_device_generated_commands VK_NV_device_generated_commands>,
-- 'GraphicsPipelineShaderGroupsCreateInfoNV',
-- 'Vulkan.Core10.Pipeline.PipelineShaderStageCreateInfo',
-- 'Vulkan.Core10.Pipeline.PipelineTessellationStateCreateInfo',
-- 'Vulkan.Core10.Pipeline.PipelineVertexInputStateCreateInfo',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data GraphicsShaderGroupCreateInfoNV = GraphicsShaderGroupCreateInfoNV
  { -- | @pStages@ is a pointer to an array
    -- 'Vulkan.Core10.Pipeline.PipelineShaderStageCreateInfo' structures
    -- specifying the set of the shader stages to be included in this shader
    -- group.
    GraphicsShaderGroupCreateInfoNV
-> Vector (SomeStruct PipelineShaderStageCreateInfo)
stages :: Vector (SomeStruct PipelineShaderStageCreateInfo)
  , -- | @pVertexInputState@ is a pointer to a
    -- 'Vulkan.Core10.Pipeline.PipelineVertexInputStateCreateInfo' structure.
    GraphicsShaderGroupCreateInfoNV
-> Maybe (SomeStruct PipelineVertexInputStateCreateInfo)
vertexInputState :: Maybe (SomeStruct PipelineVertexInputStateCreateInfo)
  , -- | @pTessellationState@ is a pointer to a
    -- 'Vulkan.Core10.Pipeline.PipelineTessellationStateCreateInfo' structure,
    -- and is ignored if the shader group does not include a tessellation
    -- control shader stage and tessellation evaluation shader stage.
    GraphicsShaderGroupCreateInfoNV
-> Maybe (SomeStruct PipelineTessellationStateCreateInfo)
tessellationState :: Maybe (SomeStruct PipelineTessellationStateCreateInfo)
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (GraphicsShaderGroupCreateInfoNV)
#endif
deriving instance Show GraphicsShaderGroupCreateInfoNV

instance ToCStruct GraphicsShaderGroupCreateInfoNV where
  withCStruct :: forall b.
GraphicsShaderGroupCreateInfoNV
-> (Ptr GraphicsShaderGroupCreateInfoNV -> IO b) -> IO b
withCStruct GraphicsShaderGroupCreateInfoNV
x Ptr GraphicsShaderGroupCreateInfoNV -> IO b
f = Int -> (Ptr GraphicsShaderGroupCreateInfoNV -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
48 ((Ptr GraphicsShaderGroupCreateInfoNV -> IO b) -> IO b)
-> (Ptr GraphicsShaderGroupCreateInfoNV -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr GraphicsShaderGroupCreateInfoNV
p -> Ptr GraphicsShaderGroupCreateInfoNV
-> GraphicsShaderGroupCreateInfoNV -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr GraphicsShaderGroupCreateInfoNV
p GraphicsShaderGroupCreateInfoNV
x (Ptr GraphicsShaderGroupCreateInfoNV -> IO b
f Ptr GraphicsShaderGroupCreateInfoNV
p)
  pokeCStruct :: forall b.
Ptr GraphicsShaderGroupCreateInfoNV
-> GraphicsShaderGroupCreateInfoNV -> IO b -> IO b
pokeCStruct Ptr GraphicsShaderGroupCreateInfoNV
p GraphicsShaderGroupCreateInfoNV{Maybe (SomeStruct PipelineVertexInputStateCreateInfo)
Maybe (SomeStruct PipelineTessellationStateCreateInfo)
Vector (SomeStruct PipelineShaderStageCreateInfo)
tessellationState :: Maybe (SomeStruct PipelineTessellationStateCreateInfo)
vertexInputState :: Maybe (SomeStruct PipelineVertexInputStateCreateInfo)
stages :: Vector (SomeStruct PipelineShaderStageCreateInfo)
$sel:tessellationState:GraphicsShaderGroupCreateInfoNV :: GraphicsShaderGroupCreateInfoNV
-> Maybe (SomeStruct PipelineTessellationStateCreateInfo)
$sel:vertexInputState:GraphicsShaderGroupCreateInfoNV :: GraphicsShaderGroupCreateInfoNV
-> Maybe (SomeStruct PipelineVertexInputStateCreateInfo)
$sel:stages:GraphicsShaderGroupCreateInfoNV :: GraphicsShaderGroupCreateInfoNV
-> Vector (SomeStruct PipelineShaderStageCreateInfo)
..} 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 (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 GraphicsShaderGroupCreateInfoNV
p Ptr GraphicsShaderGroupCreateInfoNV -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV)
    IO () -> ContT b IO ()
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 GraphicsShaderGroupCreateInfoNV
p Ptr GraphicsShaderGroupCreateInfoNV -> 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 (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 GraphicsShaderGroupCreateInfoNV
p Ptr GraphicsShaderGroupCreateInfoNV -> 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 (SomeStruct PipelineShaderStageCreateInfo) -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector (SomeStruct PipelineShaderStageCreateInfo) -> Int)
-> Vector (SomeStruct PipelineShaderStageCreateInfo) -> Int
forall a b. (a -> b) -> a -> b
$ (Vector (SomeStruct PipelineShaderStageCreateInfo)
stages)) :: Word32))
    Ptr (PipelineShaderStageCreateInfo Any)
pPStages' <- ((Ptr (PipelineShaderStageCreateInfo Any) -> IO b) -> IO b)
-> ContT b IO (Ptr (PipelineShaderStageCreateInfo Any))
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr (PipelineShaderStageCreateInfo Any) -> IO b) -> IO b)
 -> ContT b IO (Ptr (PipelineShaderStageCreateInfo Any)))
-> ((Ptr (PipelineShaderStageCreateInfo Any) -> IO b) -> IO b)
-> ContT b IO (Ptr (PipelineShaderStageCreateInfo Any))
forall a b. (a -> b) -> a -> b
$ forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @(PipelineShaderStageCreateInfo _) ((Vector (SomeStruct PipelineShaderStageCreateInfo) -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector (SomeStruct PipelineShaderStageCreateInfo)
stages)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
48)
    (Int -> SomeStruct PipelineShaderStageCreateInfo -> ContT b IO ())
-> Vector (SomeStruct PipelineShaderStageCreateInfo)
-> ContT b IO ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i SomeStruct PipelineShaderStageCreateInfo
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 (SomeStruct PipelineShaderStageCreateInfo)
-> SomeStruct PipelineShaderStageCreateInfo -> IO b -> IO b
forall (a :: [*] -> *) b.
(forall (es :: [*]).
 (Extendss a es, PokeChain es) =>
 ToCStruct (a es)) =>
Ptr (SomeStruct a) -> SomeStruct a -> IO b -> IO b
pokeSomeCStruct (Ptr (PipelineShaderStageCreateInfo Any)
-> Ptr (SomeStruct PipelineShaderStageCreateInfo)
forall (a :: [*] -> *) (es :: [*]).
Ptr (a es) -> Ptr (SomeStruct a)
forgetExtensions (Ptr (PipelineShaderStageCreateInfo Any)
pPStages' Ptr (PipelineShaderStageCreateInfo Any)
-> Int -> Ptr (PipelineShaderStageCreateInfo w)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
48 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr (PipelineShaderStageCreateInfo _))) (SomeStruct PipelineShaderStageCreateInfo
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 (SomeStruct PipelineShaderStageCreateInfo)
stages)
    IO () -> ContT b IO ()
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 (PipelineShaderStageCreateInfo Any))
-> Ptr (PipelineShaderStageCreateInfo Any) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr GraphicsShaderGroupCreateInfoNV
p Ptr GraphicsShaderGroupCreateInfoNV
-> Int -> Ptr (Ptr (PipelineShaderStageCreateInfo w))
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr (Ptr (PipelineShaderStageCreateInfo _)))) (Ptr (PipelineShaderStageCreateInfo Any)
pPStages')
    Ptr (PipelineVertexInputStateCreateInfo '[])
pVertexInputState'' <- case (Maybe (SomeStruct PipelineVertexInputStateCreateInfo)
vertexInputState) of
      Maybe (SomeStruct PipelineVertexInputStateCreateInfo)
Nothing -> Ptr (PipelineVertexInputStateCreateInfo '[])
-> ContT b IO (Ptr (PipelineVertexInputStateCreateInfo '[]))
forall (f :: * -> *) a. Applicative f => a -> f a
pure Ptr (PipelineVertexInputStateCreateInfo '[])
forall a. Ptr a
nullPtr
      Just SomeStruct PipelineVertexInputStateCreateInfo
j -> forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
forall {r} {m :: * -> *} {a}. ((a -> m r) -> m r) -> ContT r m a
ContT @_ @_ @(Ptr (PipelineVertexInputStateCreateInfo '[])) (((Ptr (PipelineVertexInputStateCreateInfo '[]) -> IO b) -> IO b)
 -> ContT b IO (Ptr (PipelineVertexInputStateCreateInfo '[])))
-> ((Ptr (PipelineVertexInputStateCreateInfo '[]) -> IO b) -> IO b)
-> ContT b IO (Ptr (PipelineVertexInputStateCreateInfo '[]))
forall a b. (a -> b) -> a -> b
$ \Ptr (PipelineVertexInputStateCreateInfo '[]) -> IO b
cont -> forall (a :: [*] -> *) b.
(forall (es :: [*]).
 (Extendss a es, PokeChain es) =>
 ToCStruct (a es)) =>
SomeStruct a
-> (forall (es :: [*]).
    (Extendss a es, PokeChain es) =>
    Ptr (a es) -> IO b)
-> IO b
withSomeCStruct @PipelineVertexInputStateCreateInfo (SomeStruct PipelineVertexInputStateCreateInfo
j) (Ptr (PipelineVertexInputStateCreateInfo '[]) -> IO b
cont (Ptr (PipelineVertexInputStateCreateInfo '[]) -> IO b)
-> (Ptr (PipelineVertexInputStateCreateInfo es)
    -> Ptr (PipelineVertexInputStateCreateInfo '[]))
-> Ptr (PipelineVertexInputStateCreateInfo es)
-> IO b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Ptr (PipelineVertexInputStateCreateInfo es)
-> Ptr (PipelineVertexInputStateCreateInfo '[])
forall a b. Ptr a -> Ptr b
castPtr)
    IO () -> ContT b IO ()
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 (PipelineVertexInputStateCreateInfo '[]))
-> Ptr (PipelineVertexInputStateCreateInfo '[]) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr GraphicsShaderGroupCreateInfoNV
p Ptr GraphicsShaderGroupCreateInfoNV
-> Int -> Ptr (Ptr (PipelineVertexInputStateCreateInfo w))
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr (Ptr (PipelineVertexInputStateCreateInfo _)))) Ptr (PipelineVertexInputStateCreateInfo '[])
pVertexInputState''
    Ptr (PipelineTessellationStateCreateInfo '[])
pTessellationState'' <- case (Maybe (SomeStruct PipelineTessellationStateCreateInfo)
tessellationState) of
      Maybe (SomeStruct PipelineTessellationStateCreateInfo)
Nothing -> Ptr (PipelineTessellationStateCreateInfo '[])
-> ContT b IO (Ptr (PipelineTessellationStateCreateInfo '[]))
forall (f :: * -> *) a. Applicative f => a -> f a
pure Ptr (PipelineTessellationStateCreateInfo '[])
forall a. Ptr a
nullPtr
      Just SomeStruct PipelineTessellationStateCreateInfo
j -> forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
forall {r} {m :: * -> *} {a}. ((a -> m r) -> m r) -> ContT r m a
ContT @_ @_ @(Ptr (PipelineTessellationStateCreateInfo '[])) (((Ptr (PipelineTessellationStateCreateInfo '[]) -> IO b) -> IO b)
 -> ContT b IO (Ptr (PipelineTessellationStateCreateInfo '[])))
-> ((Ptr (PipelineTessellationStateCreateInfo '[]) -> IO b)
    -> IO b)
-> ContT b IO (Ptr (PipelineTessellationStateCreateInfo '[]))
forall a b. (a -> b) -> a -> b
$ \Ptr (PipelineTessellationStateCreateInfo '[]) -> IO b
cont -> forall (a :: [*] -> *) b.
(forall (es :: [*]).
 (Extendss a es, PokeChain es) =>
 ToCStruct (a es)) =>
SomeStruct a
-> (forall (es :: [*]).
    (Extendss a es, PokeChain es) =>
    Ptr (a es) -> IO b)
-> IO b
withSomeCStruct @PipelineTessellationStateCreateInfo (SomeStruct PipelineTessellationStateCreateInfo
j) (Ptr (PipelineTessellationStateCreateInfo '[]) -> IO b
cont (Ptr (PipelineTessellationStateCreateInfo '[]) -> IO b)
-> (Ptr (PipelineTessellationStateCreateInfo es)
    -> Ptr (PipelineTessellationStateCreateInfo '[]))
-> Ptr (PipelineTessellationStateCreateInfo es)
-> IO b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Ptr (PipelineTessellationStateCreateInfo es)
-> Ptr (PipelineTessellationStateCreateInfo '[])
forall a b. Ptr a -> Ptr b
castPtr)
    IO () -> ContT b IO ()
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 (PipelineTessellationStateCreateInfo '[]))
-> Ptr (PipelineTessellationStateCreateInfo '[]) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr GraphicsShaderGroupCreateInfoNV
p Ptr GraphicsShaderGroupCreateInfoNV
-> Int -> Ptr (Ptr (PipelineTessellationStateCreateInfo w))
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr (Ptr (PipelineTessellationStateCreateInfo _)))) Ptr (PipelineTessellationStateCreateInfo '[])
pTessellationState''
    IO b -> ContT b IO b
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
48
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b. Ptr GraphicsShaderGroupCreateInfoNV -> IO b -> IO b
pokeZeroCStruct Ptr GraphicsShaderGroupCreateInfoNV
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr GraphicsShaderGroupCreateInfoNV
p Ptr GraphicsShaderGroupCreateInfoNV -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr GraphicsShaderGroupCreateInfoNV
p Ptr GraphicsShaderGroupCreateInfoNV -> 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 GraphicsShaderGroupCreateInfoNV where
  peekCStruct :: Ptr GraphicsShaderGroupCreateInfoNV
-> IO GraphicsShaderGroupCreateInfoNV
peekCStruct Ptr GraphicsShaderGroupCreateInfoNV
p = do
    Flags
stageCount <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr GraphicsShaderGroupCreateInfoNV
p Ptr GraphicsShaderGroupCreateInfoNV -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32))
    Ptr (PipelineShaderStageCreateInfo Any)
pStages <- forall a. Storable a => Ptr a -> IO a
peek @(Ptr (PipelineShaderStageCreateInfo _)) ((Ptr GraphicsShaderGroupCreateInfoNV
p Ptr GraphicsShaderGroupCreateInfoNV
-> Int -> Ptr (Ptr (PipelineShaderStageCreateInfo w))
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr (Ptr (PipelineShaderStageCreateInfo _))))
    Vector (SomeStruct PipelineShaderStageCreateInfo)
pStages' <- Int
-> (Int -> IO (SomeStruct PipelineShaderStageCreateInfo))
-> IO (Vector (SomeStruct PipelineShaderStageCreateInfo))
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
stageCount) (\Int
i -> Ptr (SomeStruct PipelineShaderStageCreateInfo)
-> IO (SomeStruct PipelineShaderStageCreateInfo)
forall (a :: [*] -> *).
(Extensible a,
 forall (es :: [*]).
 (Extendss a es, PeekChain es) =>
 FromCStruct (a es)) =>
Ptr (SomeStruct a) -> IO (SomeStruct a)
peekSomeCStruct (Ptr (PipelineShaderStageCreateInfo Any)
-> Ptr (SomeStruct PipelineShaderStageCreateInfo)
forall (a :: [*] -> *) (es :: [*]).
Ptr (a es) -> Ptr (SomeStruct a)
forgetExtensions ((Ptr (PipelineShaderStageCreateInfo Any)
pStages Ptr (PipelineShaderStageCreateInfo Any)
-> Int -> Ptr (PipelineShaderStageCreateInfo Any)
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
48 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr (PipelineShaderStageCreateInfo _)))))
    Ptr (PipelineVertexInputStateCreateInfo Any)
pVertexInputState <- forall a. Storable a => Ptr a -> IO a
peek @(Ptr (PipelineVertexInputStateCreateInfo _)) ((Ptr GraphicsShaderGroupCreateInfoNV
p Ptr GraphicsShaderGroupCreateInfoNV
-> Int -> Ptr (Ptr (PipelineVertexInputStateCreateInfo w))
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr (Ptr (PipelineVertexInputStateCreateInfo _))))
    Maybe (SomeStruct PipelineVertexInputStateCreateInfo)
pVertexInputState' <- (Ptr (PipelineVertexInputStateCreateInfo Any)
 -> IO (SomeStruct PipelineVertexInputStateCreateInfo))
-> Ptr (PipelineVertexInputStateCreateInfo Any)
-> IO (Maybe (SomeStruct PipelineVertexInputStateCreateInfo))
forall a b. (Ptr a -> IO b) -> Ptr a -> IO (Maybe b)
maybePeek (\Ptr (PipelineVertexInputStateCreateInfo Any)
j -> Ptr (SomeStruct PipelineVertexInputStateCreateInfo)
-> IO (SomeStruct PipelineVertexInputStateCreateInfo)
forall (a :: [*] -> *).
(Extensible a,
 forall (es :: [*]).
 (Extendss a es, PeekChain es) =>
 FromCStruct (a es)) =>
Ptr (SomeStruct a) -> IO (SomeStruct a)
peekSomeCStruct (Ptr (PipelineVertexInputStateCreateInfo Any)
-> Ptr (SomeStruct PipelineVertexInputStateCreateInfo)
forall (a :: [*] -> *) (es :: [*]).
Ptr (a es) -> Ptr (SomeStruct a)
forgetExtensions (Ptr (PipelineVertexInputStateCreateInfo Any)
j))) Ptr (PipelineVertexInputStateCreateInfo Any)
pVertexInputState
    Ptr (PipelineTessellationStateCreateInfo Any)
pTessellationState <- forall a. Storable a => Ptr a -> IO a
peek @(Ptr (PipelineTessellationStateCreateInfo _)) ((Ptr GraphicsShaderGroupCreateInfoNV
p Ptr GraphicsShaderGroupCreateInfoNV
-> Int -> Ptr (Ptr (PipelineTessellationStateCreateInfo w))
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr (Ptr (PipelineTessellationStateCreateInfo _))))
    Maybe (SomeStruct PipelineTessellationStateCreateInfo)
pTessellationState' <- (Ptr (PipelineTessellationStateCreateInfo Any)
 -> IO (SomeStruct PipelineTessellationStateCreateInfo))
-> Ptr (PipelineTessellationStateCreateInfo Any)
-> IO (Maybe (SomeStruct PipelineTessellationStateCreateInfo))
forall a b. (Ptr a -> IO b) -> Ptr a -> IO (Maybe b)
maybePeek (\Ptr (PipelineTessellationStateCreateInfo Any)
j -> Ptr (SomeStruct PipelineTessellationStateCreateInfo)
-> IO (SomeStruct PipelineTessellationStateCreateInfo)
forall (a :: [*] -> *).
(Extensible a,
 forall (es :: [*]).
 (Extendss a es, PeekChain es) =>
 FromCStruct (a es)) =>
Ptr (SomeStruct a) -> IO (SomeStruct a)
peekSomeCStruct (Ptr (PipelineTessellationStateCreateInfo Any)
-> Ptr (SomeStruct PipelineTessellationStateCreateInfo)
forall (a :: [*] -> *) (es :: [*]).
Ptr (a es) -> Ptr (SomeStruct a)
forgetExtensions (Ptr (PipelineTessellationStateCreateInfo Any)
j))) Ptr (PipelineTessellationStateCreateInfo Any)
pTessellationState
    GraphicsShaderGroupCreateInfoNV
-> IO GraphicsShaderGroupCreateInfoNV
forall (f :: * -> *) a. Applicative f => a -> f a
pure (GraphicsShaderGroupCreateInfoNV
 -> IO GraphicsShaderGroupCreateInfoNV)
-> GraphicsShaderGroupCreateInfoNV
-> IO GraphicsShaderGroupCreateInfoNV
forall a b. (a -> b) -> a -> b
$ Vector (SomeStruct PipelineShaderStageCreateInfo)
-> Maybe (SomeStruct PipelineVertexInputStateCreateInfo)
-> Maybe (SomeStruct PipelineTessellationStateCreateInfo)
-> GraphicsShaderGroupCreateInfoNV
GraphicsShaderGroupCreateInfoNV
             Vector (SomeStruct PipelineShaderStageCreateInfo)
pStages' Maybe (SomeStruct PipelineVertexInputStateCreateInfo)
pVertexInputState' Maybe (SomeStruct PipelineTessellationStateCreateInfo)
pTessellationState'

instance Zero GraphicsShaderGroupCreateInfoNV where
  zero :: GraphicsShaderGroupCreateInfoNV
zero = Vector (SomeStruct PipelineShaderStageCreateInfo)
-> Maybe (SomeStruct PipelineVertexInputStateCreateInfo)
-> Maybe (SomeStruct PipelineTessellationStateCreateInfo)
-> GraphicsShaderGroupCreateInfoNV
GraphicsShaderGroupCreateInfoNV
           Vector (SomeStruct PipelineShaderStageCreateInfo)
forall a. Monoid a => a
mempty
           Maybe (SomeStruct PipelineVertexInputStateCreateInfo)
forall a. Maybe a
Nothing
           Maybe (SomeStruct PipelineTessellationStateCreateInfo)
forall a. Maybe a
Nothing


-- | VkGraphicsPipelineShaderGroupsCreateInfoNV - Structure specifying
-- parameters of a newly created multi shader group pipeline
--
-- = Description
--
-- When referencing shader groups by index, groups defined in the
-- referenced pipelines are treated as if they were defined as additional
-- entries in @pGroups@. They are appended in the order they appear in the
-- @pPipelines@ array and in the @pGroups@ array when those pipelines were
-- defined.
--
-- The application /must/ maintain the lifetime of all such referenced
-- pipelines based on the pipelines that make use of them.
--
-- == Valid Usage
--
-- -   #VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-groupCount-02879#
--     @groupCount@ /must/ be at least @1@ and as maximum
--     'PhysicalDeviceDeviceGeneratedCommandsPropertiesNV'::@maxGraphicsShaderGroupCount@
--
-- -   #VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-groupCount-02880#
--     The sum of @groupCount@ including those groups added from referenced
--     @pPipelines@ /must/ also be as maximum
--     'PhysicalDeviceDeviceGeneratedCommandsPropertiesNV'::@maxGraphicsShaderGroupCount@
--
-- -   #VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-pGroups-02881# The
--     state of the first element of @pGroups@ /must/ match its equivalent
--     within the parent’s
--     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'
--
-- -   #VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-pGroups-02882# Each
--     element of @pGroups@ /must/ in combination with the rest of the
--     pipeline state yield a valid state configuration
--
-- -   #VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-pGroups-02884# All
--     elements of @pGroups@ /must/ use the same shader stage combinations
--     unless any mesh shader stage is used, then either combination of
--     task and mesh or just mesh shader is valid
--
-- -   #VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-pGroups-02885# Mesh
--     and regular primitive shading stages cannot be mixed across
--     @pGroups@
--
-- -   #VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-pPipelines-02886#
--     Each element of @pPipelines@ /must/ have been created with identical
--     state to the pipeline currently created except the state that can be
--     overridden by 'GraphicsShaderGroupCreateInfoNV'
--
-- -   #VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-deviceGeneratedCommands-02887#
--     The
--     <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#features-deviceGeneratedCommands deviceGeneratedCommands>
--     feature /must/ be enabled
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-sType-sType#
--     @sType@ /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV'
--
-- -   #VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-pGroups-parameter#
--     If @groupCount@ is not @0@, @pGroups@ /must/ be a valid pointer to
--     an array of @groupCount@ valid 'GraphicsShaderGroupCreateInfoNV'
--     structures
--
-- -   #VUID-VkGraphicsPipelineShaderGroupsCreateInfoNV-pPipelines-parameter#
--     If @pipelineCount@ is not @0@, @pPipelines@ /must/ be a valid
--     pointer to an array of @pipelineCount@ valid
--     'Vulkan.Core10.Handles.Pipeline' handles
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_device_generated_commands VK_NV_device_generated_commands>,
-- 'GraphicsShaderGroupCreateInfoNV', 'Vulkan.Core10.Handles.Pipeline',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data GraphicsPipelineShaderGroupsCreateInfoNV = GraphicsPipelineShaderGroupsCreateInfoNV
  { -- | @pGroups@ is a pointer to an array of 'GraphicsShaderGroupCreateInfoNV'
    -- structures specifying which state of the original
    -- 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' each shader group
    -- overrides.
    GraphicsPipelineShaderGroupsCreateInfoNV
-> Vector GraphicsShaderGroupCreateInfoNV
groups :: Vector GraphicsShaderGroupCreateInfoNV
  , -- | @pPipelines@ is a pointer to an array of graphics
    -- 'Vulkan.Core10.Handles.Pipeline' structures which are referenced within
    -- the created pipeline, including all their shader groups.
    GraphicsPipelineShaderGroupsCreateInfoNV -> Vector Pipeline
pipelines :: Vector Pipeline
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (GraphicsPipelineShaderGroupsCreateInfoNV)
#endif
deriving instance Show GraphicsPipelineShaderGroupsCreateInfoNV

instance ToCStruct GraphicsPipelineShaderGroupsCreateInfoNV where
  withCStruct :: forall b.
GraphicsPipelineShaderGroupsCreateInfoNV
-> (Ptr GraphicsPipelineShaderGroupsCreateInfoNV -> IO b) -> IO b
withCStruct GraphicsPipelineShaderGroupsCreateInfoNV
x Ptr GraphicsPipelineShaderGroupsCreateInfoNV -> IO b
f = Int
-> (Ptr GraphicsPipelineShaderGroupsCreateInfoNV -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
48 ((Ptr GraphicsPipelineShaderGroupsCreateInfoNV -> IO b) -> IO b)
-> (Ptr GraphicsPipelineShaderGroupsCreateInfoNV -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr GraphicsPipelineShaderGroupsCreateInfoNV
p -> Ptr GraphicsPipelineShaderGroupsCreateInfoNV
-> GraphicsPipelineShaderGroupsCreateInfoNV -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr GraphicsPipelineShaderGroupsCreateInfoNV
p GraphicsPipelineShaderGroupsCreateInfoNV
x (Ptr GraphicsPipelineShaderGroupsCreateInfoNV -> IO b
f Ptr GraphicsPipelineShaderGroupsCreateInfoNV
p)
  pokeCStruct :: forall b.
Ptr GraphicsPipelineShaderGroupsCreateInfoNV
-> GraphicsPipelineShaderGroupsCreateInfoNV -> IO b -> IO b
pokeCStruct Ptr GraphicsPipelineShaderGroupsCreateInfoNV
p GraphicsPipelineShaderGroupsCreateInfoNV{Vector Pipeline
Vector GraphicsShaderGroupCreateInfoNV
pipelines :: Vector Pipeline
groups :: Vector GraphicsShaderGroupCreateInfoNV
$sel:pipelines:GraphicsPipelineShaderGroupsCreateInfoNV :: GraphicsPipelineShaderGroupsCreateInfoNV -> Vector Pipeline
$sel:groups:GraphicsPipelineShaderGroupsCreateInfoNV :: GraphicsPipelineShaderGroupsCreateInfoNV
-> Vector GraphicsShaderGroupCreateInfoNV
..} 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 (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 GraphicsPipelineShaderGroupsCreateInfoNV
p Ptr GraphicsPipelineShaderGroupsCreateInfoNV
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV)
    IO () -> ContT b IO ()
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 GraphicsPipelineShaderGroupsCreateInfoNV
p Ptr GraphicsPipelineShaderGroupsCreateInfoNV -> 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 (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 GraphicsPipelineShaderGroupsCreateInfoNV
p Ptr GraphicsPipelineShaderGroupsCreateInfoNV -> 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 GraphicsShaderGroupCreateInfoNV -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector GraphicsShaderGroupCreateInfoNV -> Int)
-> Vector GraphicsShaderGroupCreateInfoNV -> Int
forall a b. (a -> b) -> a -> b
$ (Vector GraphicsShaderGroupCreateInfoNV
groups)) :: Word32))
    Ptr GraphicsShaderGroupCreateInfoNV
pPGroups' <- ((Ptr GraphicsShaderGroupCreateInfoNV -> IO b) -> IO b)
-> ContT b IO (Ptr GraphicsShaderGroupCreateInfoNV)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr GraphicsShaderGroupCreateInfoNV -> IO b) -> IO b)
 -> ContT b IO (Ptr GraphicsShaderGroupCreateInfoNV))
-> ((Ptr GraphicsShaderGroupCreateInfoNV -> IO b) -> IO b)
-> ContT b IO (Ptr GraphicsShaderGroupCreateInfoNV)
forall a b. (a -> b) -> a -> b
$ forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @GraphicsShaderGroupCreateInfoNV ((Vector GraphicsShaderGroupCreateInfoNV -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector GraphicsShaderGroupCreateInfoNV
groups)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
48)
    (Int -> GraphicsShaderGroupCreateInfoNV -> ContT b IO ())
-> Vector GraphicsShaderGroupCreateInfoNV -> ContT b IO ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i GraphicsShaderGroupCreateInfoNV
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 GraphicsShaderGroupCreateInfoNV
-> GraphicsShaderGroupCreateInfoNV -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct (Ptr GraphicsShaderGroupCreateInfoNV
pPGroups' Ptr GraphicsShaderGroupCreateInfoNV
-> Int -> Ptr GraphicsShaderGroupCreateInfoNV
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
48 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr GraphicsShaderGroupCreateInfoNV) (GraphicsShaderGroupCreateInfoNV
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 GraphicsShaderGroupCreateInfoNV
groups)
    IO () -> ContT b IO ()
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 GraphicsShaderGroupCreateInfoNV)
-> Ptr GraphicsShaderGroupCreateInfoNV -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr GraphicsPipelineShaderGroupsCreateInfoNV
p Ptr GraphicsPipelineShaderGroupsCreateInfoNV
-> Int -> Ptr (Ptr GraphicsShaderGroupCreateInfoNV)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr (Ptr GraphicsShaderGroupCreateInfoNV))) (Ptr GraphicsShaderGroupCreateInfoNV
pPGroups')
    IO () -> ContT b IO ()
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 GraphicsPipelineShaderGroupsCreateInfoNV
p Ptr GraphicsPipelineShaderGroupsCreateInfoNV -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr Word32)) ((Int -> Flags
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Vector Pipeline -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector Pipeline -> Int) -> Vector Pipeline -> Int
forall a b. (a -> b) -> a -> b
$ (Vector Pipeline
pipelines)) :: Word32))
    Ptr Pipeline
pPPipelines' <- ((Ptr Pipeline -> IO b) -> IO b) -> ContT b IO (Ptr Pipeline)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr Pipeline -> IO b) -> IO b) -> ContT b IO (Ptr Pipeline))
-> ((Ptr Pipeline -> IO b) -> IO b) -> ContT b IO (Ptr Pipeline)
forall a b. (a -> b) -> a -> b
$ forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @Pipeline ((Vector Pipeline -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector Pipeline
pipelines)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
8)
    IO () -> ContT b IO ()
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 -> Pipeline -> IO ()) -> Vector Pipeline -> IO ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i Pipeline
e -> Ptr Pipeline -> Pipeline -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr Pipeline
pPPipelines' Ptr Pipeline -> Int -> Ptr Pipeline
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
8 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr Pipeline) (Pipeline
e)) (Vector Pipeline
pipelines)
    IO () -> ContT b IO ()
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 Pipeline) -> Ptr Pipeline -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr GraphicsPipelineShaderGroupsCreateInfoNV
p Ptr GraphicsPipelineShaderGroupsCreateInfoNV
-> Int -> Ptr (Ptr Pipeline)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr (Ptr Pipeline))) (Ptr Pipeline
pPPipelines')
    IO b -> ContT b IO b
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
48
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b.
Ptr GraphicsPipelineShaderGroupsCreateInfoNV -> IO b -> IO b
pokeZeroCStruct Ptr GraphicsPipelineShaderGroupsCreateInfoNV
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr GraphicsPipelineShaderGroupsCreateInfoNV
p Ptr GraphicsPipelineShaderGroupsCreateInfoNV
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr GraphicsPipelineShaderGroupsCreateInfoNV
p Ptr GraphicsPipelineShaderGroupsCreateInfoNV -> 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 GraphicsPipelineShaderGroupsCreateInfoNV where
  peekCStruct :: Ptr GraphicsPipelineShaderGroupsCreateInfoNV
-> IO GraphicsPipelineShaderGroupsCreateInfoNV
peekCStruct Ptr GraphicsPipelineShaderGroupsCreateInfoNV
p = do
    Flags
groupCount <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr GraphicsPipelineShaderGroupsCreateInfoNV
p Ptr GraphicsPipelineShaderGroupsCreateInfoNV -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32))
    Ptr GraphicsShaderGroupCreateInfoNV
pGroups <- forall a. Storable a => Ptr a -> IO a
peek @(Ptr GraphicsShaderGroupCreateInfoNV) ((Ptr GraphicsPipelineShaderGroupsCreateInfoNV
p Ptr GraphicsPipelineShaderGroupsCreateInfoNV
-> Int -> Ptr (Ptr GraphicsShaderGroupCreateInfoNV)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr (Ptr GraphicsShaderGroupCreateInfoNV)))
    Vector GraphicsShaderGroupCreateInfoNV
pGroups' <- Int
-> (Int -> IO GraphicsShaderGroupCreateInfoNV)
-> IO (Vector GraphicsShaderGroupCreateInfoNV)
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
groupCount) (\Int
i -> forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @GraphicsShaderGroupCreateInfoNV ((Ptr GraphicsShaderGroupCreateInfoNV
pGroups Ptr GraphicsShaderGroupCreateInfoNV
-> Int -> Ptr GraphicsShaderGroupCreateInfoNV
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
48 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr GraphicsShaderGroupCreateInfoNV)))
    Flags
pipelineCount <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr GraphicsPipelineShaderGroupsCreateInfoNV
p Ptr GraphicsPipelineShaderGroupsCreateInfoNV -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr Word32))
    Ptr Pipeline
pPipelines <- forall a. Storable a => Ptr a -> IO a
peek @(Ptr Pipeline) ((Ptr GraphicsPipelineShaderGroupsCreateInfoNV
p Ptr GraphicsPipelineShaderGroupsCreateInfoNV
-> Int -> Ptr (Ptr Pipeline)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr (Ptr Pipeline)))
    Vector Pipeline
pPipelines' <- Int -> (Int -> IO Pipeline) -> IO (Vector Pipeline)
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
pipelineCount) (\Int
i -> forall a. Storable a => Ptr a -> IO a
peek @Pipeline ((Ptr Pipeline
pPipelines Ptr Pipeline -> Int -> Ptr Pipeline
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
8 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr Pipeline)))
    GraphicsPipelineShaderGroupsCreateInfoNV
-> IO GraphicsPipelineShaderGroupsCreateInfoNV
forall (f :: * -> *) a. Applicative f => a -> f a
pure (GraphicsPipelineShaderGroupsCreateInfoNV
 -> IO GraphicsPipelineShaderGroupsCreateInfoNV)
-> GraphicsPipelineShaderGroupsCreateInfoNV
-> IO GraphicsPipelineShaderGroupsCreateInfoNV
forall a b. (a -> b) -> a -> b
$ Vector GraphicsShaderGroupCreateInfoNV
-> Vector Pipeline -> GraphicsPipelineShaderGroupsCreateInfoNV
GraphicsPipelineShaderGroupsCreateInfoNV
             Vector GraphicsShaderGroupCreateInfoNV
pGroups' Vector Pipeline
pPipelines'

instance Zero GraphicsPipelineShaderGroupsCreateInfoNV where
  zero :: GraphicsPipelineShaderGroupsCreateInfoNV
zero = Vector GraphicsShaderGroupCreateInfoNV
-> Vector Pipeline -> GraphicsPipelineShaderGroupsCreateInfoNV
GraphicsPipelineShaderGroupsCreateInfoNV
           Vector GraphicsShaderGroupCreateInfoNV
forall a. Monoid a => a
mempty
           Vector Pipeline
forall a. Monoid a => a
mempty


-- | VkBindShaderGroupIndirectCommandNV - Structure specifying input data for
-- a single shader group command token
--
-- == Valid Usage
--
-- -   #VUID-VkBindShaderGroupIndirectCommandNV-None-02944# The current
--     bound graphics pipeline, as well as the pipelines it may reference,
--     /must/ have been created with
--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV'
--
-- -   #VUID-VkBindShaderGroupIndirectCommandNV-index-02945# The @index@
--     /must/ be within range of the accessible shader groups of the
--     current bound graphics pipeline. See 'cmdBindPipelineShaderGroupNV'
--     for further details
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_device_generated_commands VK_NV_device_generated_commands>
data BindShaderGroupIndirectCommandNV = BindShaderGroupIndirectCommandNV
  { -- No documentation found for Nested "VkBindShaderGroupIndirectCommandNV" "groupIndex"
    BindShaderGroupIndirectCommandNV -> Flags
groupIndex :: Word32 }
  deriving (Typeable, BindShaderGroupIndirectCommandNV
-> BindShaderGroupIndirectCommandNV -> "isPreprocessed" ::: Bool
(BindShaderGroupIndirectCommandNV
 -> BindShaderGroupIndirectCommandNV -> "isPreprocessed" ::: Bool)
-> (BindShaderGroupIndirectCommandNV
    -> BindShaderGroupIndirectCommandNV -> "isPreprocessed" ::: Bool)
-> Eq BindShaderGroupIndirectCommandNV
forall a.
(a -> a -> "isPreprocessed" ::: Bool)
-> (a -> a -> "isPreprocessed" ::: Bool) -> Eq a
/= :: BindShaderGroupIndirectCommandNV
-> BindShaderGroupIndirectCommandNV -> "isPreprocessed" ::: Bool
$c/= :: BindShaderGroupIndirectCommandNV
-> BindShaderGroupIndirectCommandNV -> "isPreprocessed" ::: Bool
== :: BindShaderGroupIndirectCommandNV
-> BindShaderGroupIndirectCommandNV -> "isPreprocessed" ::: Bool
$c== :: BindShaderGroupIndirectCommandNV
-> BindShaderGroupIndirectCommandNV -> "isPreprocessed" ::: Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (BindShaderGroupIndirectCommandNV)
#endif
deriving instance Show BindShaderGroupIndirectCommandNV

instance ToCStruct BindShaderGroupIndirectCommandNV where
  withCStruct :: forall b.
BindShaderGroupIndirectCommandNV
-> (Ptr BindShaderGroupIndirectCommandNV -> IO b) -> IO b
withCStruct BindShaderGroupIndirectCommandNV
x Ptr BindShaderGroupIndirectCommandNV -> IO b
f = Int -> (Ptr BindShaderGroupIndirectCommandNV -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
4 ((Ptr BindShaderGroupIndirectCommandNV -> IO b) -> IO b)
-> (Ptr BindShaderGroupIndirectCommandNV -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr BindShaderGroupIndirectCommandNV
p -> Ptr BindShaderGroupIndirectCommandNV
-> BindShaderGroupIndirectCommandNV -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr BindShaderGroupIndirectCommandNV
p BindShaderGroupIndirectCommandNV
x (Ptr BindShaderGroupIndirectCommandNV -> IO b
f Ptr BindShaderGroupIndirectCommandNV
p)
  pokeCStruct :: forall b.
Ptr BindShaderGroupIndirectCommandNV
-> BindShaderGroupIndirectCommandNV -> IO b -> IO b
pokeCStruct Ptr BindShaderGroupIndirectCommandNV
p BindShaderGroupIndirectCommandNV{Flags
groupIndex :: Flags
$sel:groupIndex:BindShaderGroupIndirectCommandNV :: BindShaderGroupIndirectCommandNV -> Flags
..} IO b
f = do
    Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr BindShaderGroupIndirectCommandNV
p Ptr BindShaderGroupIndirectCommandNV -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Word32)) (Flags
groupIndex)
    IO b
f
  cStructSize :: Int
cStructSize = Int
4
  cStructAlignment :: Int
cStructAlignment = Int
4
  pokeZeroCStruct :: forall b. Ptr BindShaderGroupIndirectCommandNV -> IO b -> IO b
pokeZeroCStruct Ptr BindShaderGroupIndirectCommandNV
p IO b
f = do
    Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr BindShaderGroupIndirectCommandNV
p Ptr BindShaderGroupIndirectCommandNV -> 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 BindShaderGroupIndirectCommandNV where
  peekCStruct :: Ptr BindShaderGroupIndirectCommandNV
-> IO BindShaderGroupIndirectCommandNV
peekCStruct Ptr BindShaderGroupIndirectCommandNV
p = do
    Flags
groupIndex <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr BindShaderGroupIndirectCommandNV
p Ptr BindShaderGroupIndirectCommandNV -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Word32))
    BindShaderGroupIndirectCommandNV
-> IO BindShaderGroupIndirectCommandNV
forall (f :: * -> *) a. Applicative f => a -> f a
pure (BindShaderGroupIndirectCommandNV
 -> IO BindShaderGroupIndirectCommandNV)
-> BindShaderGroupIndirectCommandNV
-> IO BindShaderGroupIndirectCommandNV
forall a b. (a -> b) -> a -> b
$ Flags -> BindShaderGroupIndirectCommandNV
BindShaderGroupIndirectCommandNV
             Flags
groupIndex

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

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


-- | VkBindIndexBufferIndirectCommandNV - Structure specifying input data for
-- a single index buffer command token
--
-- == Valid Usage
--
-- -   #VUID-VkBindIndexBufferIndirectCommandNV-None-02946# The buffer’s
--     usage flag from which the address was acquired /must/ have the
--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDEX_BUFFER_BIT'
--     bit set
--
-- -   #VUID-VkBindIndexBufferIndirectCommandNV-bufferAddress-02947# The
--     @bufferAddress@ /must/ be aligned to the @indexType@ used
--
-- -   #VUID-VkBindIndexBufferIndirectCommandNV-None-02948# 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-VkBindIndexBufferIndirectCommandNV-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_NV_device_generated_commands VK_NV_device_generated_commands>,
-- 'Vulkan.Core10.FundamentalTypes.DeviceAddress',
-- 'Vulkan.Core10.Enums.IndexType.IndexType'
data BindIndexBufferIndirectCommandNV = BindIndexBufferIndirectCommandNV
  { -- | @bufferAddress@ specifies a physical address of the
    -- 'Vulkan.Core10.Handles.Buffer' used as index buffer.
    BindIndexBufferIndirectCommandNV -> DeviceAddress
bufferAddress :: DeviceAddress
  , -- | @size@ is the byte size range which is available for this operation from
    -- the provided address.
    BindIndexBufferIndirectCommandNV -> Flags
size :: Word32
  , -- | @indexType@ is a 'Vulkan.Core10.Enums.IndexType.IndexType' value
    -- specifying how indices are treated. Instead of the Vulkan enum values, a
    -- custom @uint32_t@ value /can/ be mapped to an
    -- 'Vulkan.Core10.Enums.IndexType.IndexType' by specifying the
    -- 'IndirectCommandsLayoutTokenNV'::@pIndexTypes@ and
    -- 'IndirectCommandsLayoutTokenNV'::@pIndexTypeValues@ arrays.
    BindIndexBufferIndirectCommandNV -> IndexType
indexType :: IndexType
  }
  deriving (Typeable, BindIndexBufferIndirectCommandNV
-> BindIndexBufferIndirectCommandNV -> "isPreprocessed" ::: Bool
(BindIndexBufferIndirectCommandNV
 -> BindIndexBufferIndirectCommandNV -> "isPreprocessed" ::: Bool)
-> (BindIndexBufferIndirectCommandNV
    -> BindIndexBufferIndirectCommandNV -> "isPreprocessed" ::: Bool)
-> Eq BindIndexBufferIndirectCommandNV
forall a.
(a -> a -> "isPreprocessed" ::: Bool)
-> (a -> a -> "isPreprocessed" ::: Bool) -> Eq a
/= :: BindIndexBufferIndirectCommandNV
-> BindIndexBufferIndirectCommandNV -> "isPreprocessed" ::: Bool
$c/= :: BindIndexBufferIndirectCommandNV
-> BindIndexBufferIndirectCommandNV -> "isPreprocessed" ::: Bool
== :: BindIndexBufferIndirectCommandNV
-> BindIndexBufferIndirectCommandNV -> "isPreprocessed" ::: Bool
$c== :: BindIndexBufferIndirectCommandNV
-> BindIndexBufferIndirectCommandNV -> "isPreprocessed" ::: Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (BindIndexBufferIndirectCommandNV)
#endif
deriving instance Show BindIndexBufferIndirectCommandNV

instance ToCStruct BindIndexBufferIndirectCommandNV where
  withCStruct :: forall b.
BindIndexBufferIndirectCommandNV
-> (Ptr BindIndexBufferIndirectCommandNV -> IO b) -> IO b
withCStruct BindIndexBufferIndirectCommandNV
x Ptr BindIndexBufferIndirectCommandNV -> IO b
f = Int -> (Ptr BindIndexBufferIndirectCommandNV -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
16 ((Ptr BindIndexBufferIndirectCommandNV -> IO b) -> IO b)
-> (Ptr BindIndexBufferIndirectCommandNV -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr BindIndexBufferIndirectCommandNV
p -> Ptr BindIndexBufferIndirectCommandNV
-> BindIndexBufferIndirectCommandNV -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr BindIndexBufferIndirectCommandNV
p BindIndexBufferIndirectCommandNV
x (Ptr BindIndexBufferIndirectCommandNV -> IO b
f Ptr BindIndexBufferIndirectCommandNV
p)
  pokeCStruct :: forall b.
Ptr BindIndexBufferIndirectCommandNV
-> BindIndexBufferIndirectCommandNV -> IO b -> IO b
pokeCStruct Ptr BindIndexBufferIndirectCommandNV
p BindIndexBufferIndirectCommandNV{Flags
DeviceAddress
IndexType
indexType :: IndexType
size :: Flags
bufferAddress :: DeviceAddress
$sel:indexType:BindIndexBufferIndirectCommandNV :: BindIndexBufferIndirectCommandNV -> IndexType
$sel:size:BindIndexBufferIndirectCommandNV :: BindIndexBufferIndirectCommandNV -> Flags
$sel:bufferAddress:BindIndexBufferIndirectCommandNV :: BindIndexBufferIndirectCommandNV -> DeviceAddress
..} IO b
f = do
    Ptr DeviceAddress -> DeviceAddress -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr BindIndexBufferIndirectCommandNV
p Ptr BindIndexBufferIndirectCommandNV -> 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 BindIndexBufferIndirectCommandNV
p Ptr BindIndexBufferIndirectCommandNV -> 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 BindIndexBufferIndirectCommandNV
p Ptr BindIndexBufferIndirectCommandNV -> 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 BindIndexBufferIndirectCommandNV -> IO b -> IO b
pokeZeroCStruct Ptr BindIndexBufferIndirectCommandNV
p IO b
f = do
    Ptr DeviceAddress -> DeviceAddress -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr BindIndexBufferIndirectCommandNV
p Ptr BindIndexBufferIndirectCommandNV -> 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 BindIndexBufferIndirectCommandNV
p Ptr BindIndexBufferIndirectCommandNV -> 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 BindIndexBufferIndirectCommandNV
p Ptr BindIndexBufferIndirectCommandNV -> 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 BindIndexBufferIndirectCommandNV where
  peekCStruct :: Ptr BindIndexBufferIndirectCommandNV
-> IO BindIndexBufferIndirectCommandNV
peekCStruct Ptr BindIndexBufferIndirectCommandNV
p = do
    DeviceAddress
bufferAddress <- forall a. Storable a => Ptr a -> IO a
peek @DeviceAddress ((Ptr BindIndexBufferIndirectCommandNV
p Ptr BindIndexBufferIndirectCommandNV -> 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 BindIndexBufferIndirectCommandNV
p Ptr BindIndexBufferIndirectCommandNV -> 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 BindIndexBufferIndirectCommandNV
p Ptr BindIndexBufferIndirectCommandNV -> Int -> Ptr IndexType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
12 :: Ptr IndexType))
    BindIndexBufferIndirectCommandNV
-> IO BindIndexBufferIndirectCommandNV
forall (f :: * -> *) a. Applicative f => a -> f a
pure (BindIndexBufferIndirectCommandNV
 -> IO BindIndexBufferIndirectCommandNV)
-> BindIndexBufferIndirectCommandNV
-> IO BindIndexBufferIndirectCommandNV
forall a b. (a -> b) -> a -> b
$ DeviceAddress
-> Flags -> IndexType -> BindIndexBufferIndirectCommandNV
BindIndexBufferIndirectCommandNV
             DeviceAddress
bufferAddress Flags
size IndexType
indexType

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

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


-- | VkBindVertexBufferIndirectCommandNV - Structure specifying input data
-- for a single vertex buffer command token
--
-- == Valid Usage
--
-- -   #VUID-VkBindVertexBufferIndirectCommandNV-None-02949# 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-VkBindVertexBufferIndirectCommandNV-None-02950# 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_NV_device_generated_commands VK_NV_device_generated_commands>,
-- 'Vulkan.Core10.FundamentalTypes.DeviceAddress'
data BindVertexBufferIndirectCommandNV = BindVertexBufferIndirectCommandNV
  { -- | @bufferAddress@ specifies a physical address of the
    -- 'Vulkan.Core10.Handles.Buffer' used as vertex input binding.
    BindVertexBufferIndirectCommandNV -> DeviceAddress
bufferAddress :: DeviceAddress
  , -- | @size@ is the byte size range which is available for this operation from
    -- the provided address.
    BindVertexBufferIndirectCommandNV -> Flags
size :: Word32
  , -- | @stride@ is the byte size stride for this vertex input binding as in
    -- 'Vulkan.Core10.Pipeline.VertexInputBindingDescription'::@stride@. It is
    -- only used if 'IndirectCommandsLayoutTokenNV'::@vertexDynamicStride@ was
    -- set, otherwise the stride is inherited from the current bound graphics
    -- pipeline.
    BindVertexBufferIndirectCommandNV -> Flags
stride :: Word32
  }
  deriving (Typeable, BindVertexBufferIndirectCommandNV
-> BindVertexBufferIndirectCommandNV -> "isPreprocessed" ::: Bool
(BindVertexBufferIndirectCommandNV
 -> BindVertexBufferIndirectCommandNV -> "isPreprocessed" ::: Bool)
-> (BindVertexBufferIndirectCommandNV
    -> BindVertexBufferIndirectCommandNV -> "isPreprocessed" ::: Bool)
-> Eq BindVertexBufferIndirectCommandNV
forall a.
(a -> a -> "isPreprocessed" ::: Bool)
-> (a -> a -> "isPreprocessed" ::: Bool) -> Eq a
/= :: BindVertexBufferIndirectCommandNV
-> BindVertexBufferIndirectCommandNV -> "isPreprocessed" ::: Bool
$c/= :: BindVertexBufferIndirectCommandNV
-> BindVertexBufferIndirectCommandNV -> "isPreprocessed" ::: Bool
== :: BindVertexBufferIndirectCommandNV
-> BindVertexBufferIndirectCommandNV -> "isPreprocessed" ::: Bool
$c== :: BindVertexBufferIndirectCommandNV
-> BindVertexBufferIndirectCommandNV -> "isPreprocessed" ::: Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (BindVertexBufferIndirectCommandNV)
#endif
deriving instance Show BindVertexBufferIndirectCommandNV

instance ToCStruct BindVertexBufferIndirectCommandNV where
  withCStruct :: forall b.
BindVertexBufferIndirectCommandNV
-> (Ptr BindVertexBufferIndirectCommandNV -> IO b) -> IO b
withCStruct BindVertexBufferIndirectCommandNV
x Ptr BindVertexBufferIndirectCommandNV -> IO b
f = Int -> (Ptr BindVertexBufferIndirectCommandNV -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
16 ((Ptr BindVertexBufferIndirectCommandNV -> IO b) -> IO b)
-> (Ptr BindVertexBufferIndirectCommandNV -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr BindVertexBufferIndirectCommandNV
p -> Ptr BindVertexBufferIndirectCommandNV
-> BindVertexBufferIndirectCommandNV -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr BindVertexBufferIndirectCommandNV
p BindVertexBufferIndirectCommandNV
x (Ptr BindVertexBufferIndirectCommandNV -> IO b
f Ptr BindVertexBufferIndirectCommandNV
p)
  pokeCStruct :: forall b.
Ptr BindVertexBufferIndirectCommandNV
-> BindVertexBufferIndirectCommandNV -> IO b -> IO b
pokeCStruct Ptr BindVertexBufferIndirectCommandNV
p BindVertexBufferIndirectCommandNV{Flags
DeviceAddress
stride :: Flags
size :: Flags
bufferAddress :: DeviceAddress
$sel:stride:BindVertexBufferIndirectCommandNV :: BindVertexBufferIndirectCommandNV -> Flags
$sel:size:BindVertexBufferIndirectCommandNV :: BindVertexBufferIndirectCommandNV -> Flags
$sel:bufferAddress:BindVertexBufferIndirectCommandNV :: BindVertexBufferIndirectCommandNV -> DeviceAddress
..} IO b
f = do
    Ptr DeviceAddress -> DeviceAddress -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr BindVertexBufferIndirectCommandNV
p Ptr BindVertexBufferIndirectCommandNV -> 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 BindVertexBufferIndirectCommandNV
p Ptr BindVertexBufferIndirectCommandNV -> 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 BindVertexBufferIndirectCommandNV
p Ptr BindVertexBufferIndirectCommandNV -> 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 BindVertexBufferIndirectCommandNV -> IO b -> IO b
pokeZeroCStruct Ptr BindVertexBufferIndirectCommandNV
p IO b
f = do
    Ptr DeviceAddress -> DeviceAddress -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr BindVertexBufferIndirectCommandNV
p Ptr BindVertexBufferIndirectCommandNV -> 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 BindVertexBufferIndirectCommandNV
p Ptr BindVertexBufferIndirectCommandNV -> 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 BindVertexBufferIndirectCommandNV
p Ptr BindVertexBufferIndirectCommandNV -> 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 BindVertexBufferIndirectCommandNV where
  peekCStruct :: Ptr BindVertexBufferIndirectCommandNV
-> IO BindVertexBufferIndirectCommandNV
peekCStruct Ptr BindVertexBufferIndirectCommandNV
p = do
    DeviceAddress
bufferAddress <- forall a. Storable a => Ptr a -> IO a
peek @DeviceAddress ((Ptr BindVertexBufferIndirectCommandNV
p Ptr BindVertexBufferIndirectCommandNV -> 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 BindVertexBufferIndirectCommandNV
p Ptr BindVertexBufferIndirectCommandNV -> 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 BindVertexBufferIndirectCommandNV
p Ptr BindVertexBufferIndirectCommandNV -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
12 :: Ptr Word32))
    BindVertexBufferIndirectCommandNV
-> IO BindVertexBufferIndirectCommandNV
forall (f :: * -> *) a. Applicative f => a -> f a
pure (BindVertexBufferIndirectCommandNV
 -> IO BindVertexBufferIndirectCommandNV)
-> BindVertexBufferIndirectCommandNV
-> IO BindVertexBufferIndirectCommandNV
forall a b. (a -> b) -> a -> b
$ DeviceAddress
-> Flags -> Flags -> BindVertexBufferIndirectCommandNV
BindVertexBufferIndirectCommandNV
             DeviceAddress
bufferAddress Flags
size Flags
stride

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

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


-- | VkSetStateFlagsIndirectCommandNV - Structure specifying input data for a
-- single state flag command token
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_device_generated_commands VK_NV_device_generated_commands>
data SetStateFlagsIndirectCommandNV = SetStateFlagsIndirectCommandNV
  { -- | @data@ encodes packed state that this command alters.
    --
    -- -   Bit @0@: If set represents
    --     'Vulkan.Core10.Enums.FrontFace.FRONT_FACE_CLOCKWISE', otherwise
    --     'Vulkan.Core10.Enums.FrontFace.FRONT_FACE_COUNTER_CLOCKWISE'
    SetStateFlagsIndirectCommandNV -> Flags
data' :: Word32 }
  deriving (Typeable, SetStateFlagsIndirectCommandNV
-> SetStateFlagsIndirectCommandNV -> "isPreprocessed" ::: Bool
(SetStateFlagsIndirectCommandNV
 -> SetStateFlagsIndirectCommandNV -> "isPreprocessed" ::: Bool)
-> (SetStateFlagsIndirectCommandNV
    -> SetStateFlagsIndirectCommandNV -> "isPreprocessed" ::: Bool)
-> Eq SetStateFlagsIndirectCommandNV
forall a.
(a -> a -> "isPreprocessed" ::: Bool)
-> (a -> a -> "isPreprocessed" ::: Bool) -> Eq a
/= :: SetStateFlagsIndirectCommandNV
-> SetStateFlagsIndirectCommandNV -> "isPreprocessed" ::: Bool
$c/= :: SetStateFlagsIndirectCommandNV
-> SetStateFlagsIndirectCommandNV -> "isPreprocessed" ::: Bool
== :: SetStateFlagsIndirectCommandNV
-> SetStateFlagsIndirectCommandNV -> "isPreprocessed" ::: Bool
$c== :: SetStateFlagsIndirectCommandNV
-> SetStateFlagsIndirectCommandNV -> "isPreprocessed" ::: Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (SetStateFlagsIndirectCommandNV)
#endif
deriving instance Show SetStateFlagsIndirectCommandNV

instance ToCStruct SetStateFlagsIndirectCommandNV where
  withCStruct :: forall b.
SetStateFlagsIndirectCommandNV
-> (Ptr SetStateFlagsIndirectCommandNV -> IO b) -> IO b
withCStruct SetStateFlagsIndirectCommandNV
x Ptr SetStateFlagsIndirectCommandNV -> IO b
f = Int -> (Ptr SetStateFlagsIndirectCommandNV -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
4 ((Ptr SetStateFlagsIndirectCommandNV -> IO b) -> IO b)
-> (Ptr SetStateFlagsIndirectCommandNV -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr SetStateFlagsIndirectCommandNV
p -> Ptr SetStateFlagsIndirectCommandNV
-> SetStateFlagsIndirectCommandNV -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr SetStateFlagsIndirectCommandNV
p SetStateFlagsIndirectCommandNV
x (Ptr SetStateFlagsIndirectCommandNV -> IO b
f Ptr SetStateFlagsIndirectCommandNV
p)
  pokeCStruct :: forall b.
Ptr SetStateFlagsIndirectCommandNV
-> SetStateFlagsIndirectCommandNV -> IO b -> IO b
pokeCStruct Ptr SetStateFlagsIndirectCommandNV
p SetStateFlagsIndirectCommandNV{Flags
data' :: Flags
$sel:data':SetStateFlagsIndirectCommandNV :: SetStateFlagsIndirectCommandNV -> Flags
..} IO b
f = do
    Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr SetStateFlagsIndirectCommandNV
p Ptr SetStateFlagsIndirectCommandNV -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Word32)) (Flags
data')
    IO b
f
  cStructSize :: Int
cStructSize = Int
4
  cStructAlignment :: Int
cStructAlignment = Int
4
  pokeZeroCStruct :: forall b. Ptr SetStateFlagsIndirectCommandNV -> IO b -> IO b
pokeZeroCStruct Ptr SetStateFlagsIndirectCommandNV
p IO b
f = do
    Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr SetStateFlagsIndirectCommandNV
p Ptr SetStateFlagsIndirectCommandNV -> 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 SetStateFlagsIndirectCommandNV where
  peekCStruct :: Ptr SetStateFlagsIndirectCommandNV
-> IO SetStateFlagsIndirectCommandNV
peekCStruct Ptr SetStateFlagsIndirectCommandNV
p = do
    Flags
data' <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr SetStateFlagsIndirectCommandNV
p Ptr SetStateFlagsIndirectCommandNV -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Word32))
    SetStateFlagsIndirectCommandNV -> IO SetStateFlagsIndirectCommandNV
forall (f :: * -> *) a. Applicative f => a -> f a
pure (SetStateFlagsIndirectCommandNV
 -> IO SetStateFlagsIndirectCommandNV)
-> SetStateFlagsIndirectCommandNV
-> IO SetStateFlagsIndirectCommandNV
forall a b. (a -> b) -> a -> b
$ Flags -> SetStateFlagsIndirectCommandNV
SetStateFlagsIndirectCommandNV
             Flags
data'

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

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


-- | VkIndirectCommandsStreamNV - Structure specifying input streams for
-- generated command tokens
--
-- == Valid Usage
--
-- -   #VUID-VkIndirectCommandsStreamNV-buffer-02942# The @buffer@’s usage
--     flag /must/ have the
--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'
--     bit set
--
-- -   #VUID-VkIndirectCommandsStreamNV-offset-02943# The @offset@ /must/
--     be aligned to
--     'PhysicalDeviceDeviceGeneratedCommandsPropertiesNV'::@minIndirectCommandsBufferOffsetAlignment@
--
-- -   #VUID-VkIndirectCommandsStreamNV-buffer-02975# If @buffer@ is
--     non-sparse then it /must/ be bound completely and contiguously to a
--     single 'Vulkan.Core10.Handles.DeviceMemory' object
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkIndirectCommandsStreamNV-buffer-parameter# @buffer@ /must/
--     be a valid 'Vulkan.Core10.Handles.Buffer' handle
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_device_generated_commands VK_NV_device_generated_commands>,
-- 'Vulkan.Core10.Handles.Buffer',
-- 'Vulkan.Core10.FundamentalTypes.DeviceSize', 'GeneratedCommandsInfoNV'
data IndirectCommandsStreamNV = IndirectCommandsStreamNV
  { -- | @buffer@ specifies the 'Vulkan.Core10.Handles.Buffer' storing the
    -- functional arguments for each sequence. These arguments /can/ be written
    -- by the device.
    IndirectCommandsStreamNV -> Buffer
buffer :: Buffer
  , -- | @offset@ specified an offset into @buffer@ where the arguments start.
    IndirectCommandsStreamNV -> DeviceAddress
offset :: DeviceSize
  }
  deriving (Typeable, IndirectCommandsStreamNV
-> IndirectCommandsStreamNV -> "isPreprocessed" ::: Bool
(IndirectCommandsStreamNV
 -> IndirectCommandsStreamNV -> "isPreprocessed" ::: Bool)
-> (IndirectCommandsStreamNV
    -> IndirectCommandsStreamNV -> "isPreprocessed" ::: Bool)
-> Eq IndirectCommandsStreamNV
forall a.
(a -> a -> "isPreprocessed" ::: Bool)
-> (a -> a -> "isPreprocessed" ::: Bool) -> Eq a
/= :: IndirectCommandsStreamNV
-> IndirectCommandsStreamNV -> "isPreprocessed" ::: Bool
$c/= :: IndirectCommandsStreamNV
-> IndirectCommandsStreamNV -> "isPreprocessed" ::: Bool
== :: IndirectCommandsStreamNV
-> IndirectCommandsStreamNV -> "isPreprocessed" ::: Bool
$c== :: IndirectCommandsStreamNV
-> IndirectCommandsStreamNV -> "isPreprocessed" ::: Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (IndirectCommandsStreamNV)
#endif
deriving instance Show IndirectCommandsStreamNV

instance ToCStruct IndirectCommandsStreamNV where
  withCStruct :: forall b.
IndirectCommandsStreamNV
-> (Ptr IndirectCommandsStreamNV -> IO b) -> IO b
withCStruct IndirectCommandsStreamNV
x Ptr IndirectCommandsStreamNV -> IO b
f = Int -> (Ptr IndirectCommandsStreamNV -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
16 ((Ptr IndirectCommandsStreamNV -> IO b) -> IO b)
-> (Ptr IndirectCommandsStreamNV -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr IndirectCommandsStreamNV
p -> Ptr IndirectCommandsStreamNV
-> IndirectCommandsStreamNV -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr IndirectCommandsStreamNV
p IndirectCommandsStreamNV
x (Ptr IndirectCommandsStreamNV -> IO b
f Ptr IndirectCommandsStreamNV
p)
  pokeCStruct :: forall b.
Ptr IndirectCommandsStreamNV
-> IndirectCommandsStreamNV -> IO b -> IO b
pokeCStruct Ptr IndirectCommandsStreamNV
p IndirectCommandsStreamNV{DeviceAddress
Buffer
offset :: DeviceAddress
buffer :: Buffer
$sel:offset:IndirectCommandsStreamNV :: IndirectCommandsStreamNV -> DeviceAddress
$sel:buffer:IndirectCommandsStreamNV :: IndirectCommandsStreamNV -> Buffer
..} IO b
f = do
    Ptr Buffer -> Buffer -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectCommandsStreamNV
p Ptr IndirectCommandsStreamNV -> Int -> Ptr Buffer
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Buffer)) (Buffer
buffer)
    Ptr DeviceAddress -> DeviceAddress -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectCommandsStreamNV
p Ptr IndirectCommandsStreamNV -> Int -> Ptr DeviceAddress
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr DeviceSize)) (DeviceAddress
offset)
    IO b
f
  cStructSize :: Int
cStructSize = Int
16
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b. Ptr IndirectCommandsStreamNV -> IO b -> IO b
pokeZeroCStruct Ptr IndirectCommandsStreamNV
p IO b
f = do
    Ptr Buffer -> Buffer -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectCommandsStreamNV
p Ptr IndirectCommandsStreamNV -> Int -> Ptr Buffer
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Buffer)) (Buffer
forall a. Zero a => a
zero)
    Ptr DeviceAddress -> DeviceAddress -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectCommandsStreamNV
p Ptr IndirectCommandsStreamNV -> Int -> Ptr DeviceAddress
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr DeviceSize)) (DeviceAddress
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct IndirectCommandsStreamNV where
  peekCStruct :: Ptr IndirectCommandsStreamNV -> IO IndirectCommandsStreamNV
peekCStruct Ptr IndirectCommandsStreamNV
p = do
    Buffer
buffer <- forall a. Storable a => Ptr a -> IO a
peek @Buffer ((Ptr IndirectCommandsStreamNV
p Ptr IndirectCommandsStreamNV -> Int -> Ptr Buffer
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Buffer))
    DeviceAddress
offset <- forall a. Storable a => Ptr a -> IO a
peek @DeviceSize ((Ptr IndirectCommandsStreamNV
p Ptr IndirectCommandsStreamNV -> Int -> Ptr DeviceAddress
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr DeviceSize))
    IndirectCommandsStreamNV -> IO IndirectCommandsStreamNV
forall (f :: * -> *) a. Applicative f => a -> f a
pure (IndirectCommandsStreamNV -> IO IndirectCommandsStreamNV)
-> IndirectCommandsStreamNV -> IO IndirectCommandsStreamNV
forall a b. (a -> b) -> a -> b
$ Buffer -> DeviceAddress -> IndirectCommandsStreamNV
IndirectCommandsStreamNV
             Buffer
buffer DeviceAddress
offset

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

instance Zero IndirectCommandsStreamNV where
  zero :: IndirectCommandsStreamNV
zero = Buffer -> DeviceAddress -> IndirectCommandsStreamNV
IndirectCommandsStreamNV
           Buffer
forall a. Zero a => a
zero
           DeviceAddress
forall a. Zero a => a
zero


-- | VkIndirectCommandsLayoutTokenNV - Struct specifying the details of an
-- indirect command layout token
--
-- == Valid Usage
--
-- -   #VUID-VkIndirectCommandsLayoutTokenNV-stream-02951# @stream@ /must/
--     be smaller than 'IndirectCommandsLayoutCreateInfoNV'::@streamCount@
--
-- -   #VUID-VkIndirectCommandsLayoutTokenNV-offset-02952# @offset@ /must/
--     be less than or equal to
--     'PhysicalDeviceDeviceGeneratedCommandsPropertiesNV'::@maxIndirectCommandsTokenOffset@
--
-- -   #VUID-VkIndirectCommandsLayoutTokenNV-offset-06888# @offset@ /must/
--     be aligned to the scalar alignment of @tokenType@ or
--     @minIndirectCommandsBufferOffsetAlignment@, whichever is lower
--
-- -   #VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02976# If
--     @tokenType@ is 'INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV',
--     @vertexBindingUnit@ /must/ stay within device supported limits for
--     the appropriate commands
--
-- -   #VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02977# If
--     @tokenType@ is 'INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV',
--     @pushconstantPipelineLayout@ /must/ be valid
--
-- -   #VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02978# If
--     @tokenType@ is 'INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV',
--     @pushconstantOffset@ /must/ be a multiple of @4@
--
-- -   #VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02979# If
--     @tokenType@ is 'INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV',
--     @pushconstantSize@ /must/ be a multiple of @4@
--
-- -   #VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02980# If
--     @tokenType@ is 'INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV',
--     @pushconstantOffset@ /must/ be less than
--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPushConstantsSize@
--
-- -   #VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02981# If
--     @tokenType@ is 'INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV',
--     @pushconstantSize@ /must/ be less than or equal to
--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPushConstantsSize@
--     minus @pushconstantOffset@
--
-- -   #VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02982# If
--     @tokenType@ is 'INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV', for
--     each byte in the range specified by @pushconstantOffset@ and
--     @pushconstantSize@ and for each shader stage in
--     @pushconstantShaderStageFlags@, there /must/ be a push constant
--     range in @pushconstantPipelineLayout@ that includes that byte and
--     that stage
--
-- -   #VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02983# If
--     @tokenType@ is 'INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV', for
--     each byte in the range specified by @pushconstantOffset@ and
--     @pushconstantSize@ and for each push constant range that overlaps
--     that byte, @pushconstantShaderStageFlags@ /must/ include all stages
--     in that push constant range’s
--     'Vulkan.Core10.PipelineLayout.PushConstantRange'::@stageFlags@
--
-- -   #VUID-VkIndirectCommandsLayoutTokenNV-tokenType-02984# If
--     @tokenType@ is 'INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV',
--     @indirectStateFlags@ /must/ not be @0@
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkIndirectCommandsLayoutTokenNV-sType-sType# @sType@ /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_NV'
--
-- -   #VUID-VkIndirectCommandsLayoutTokenNV-pNext-pNext# @pNext@ /must/ be
--     @NULL@
--
-- -   #VUID-VkIndirectCommandsLayoutTokenNV-tokenType-parameter#
--     @tokenType@ /must/ be a valid 'IndirectCommandsTokenTypeNV' value
--
-- -   #VUID-VkIndirectCommandsLayoutTokenNV-pushconstantPipelineLayout-parameter#
--     If @pushconstantPipelineLayout@ is not
--     'Vulkan.Core10.APIConstants.NULL_HANDLE',
--     @pushconstantPipelineLayout@ /must/ be a valid
--     'Vulkan.Core10.Handles.PipelineLayout' handle
--
-- -   #VUID-VkIndirectCommandsLayoutTokenNV-pushconstantShaderStageFlags-parameter#
--     @pushconstantShaderStageFlags@ /must/ be a valid combination of
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlagBits' values
--
-- -   #VUID-VkIndirectCommandsLayoutTokenNV-indirectStateFlags-parameter#
--     @indirectStateFlags@ /must/ be a valid combination of
--     'IndirectStateFlagBitsNV' values
--
-- -   #VUID-VkIndirectCommandsLayoutTokenNV-pIndexTypes-parameter# If
--     @indexTypeCount@ is not @0@, @pIndexTypes@ /must/ be a valid pointer
--     to an array of @indexTypeCount@ valid
--     'Vulkan.Core10.Enums.IndexType.IndexType' values
--
-- -   #VUID-VkIndirectCommandsLayoutTokenNV-pIndexTypeValues-parameter# If
--     @indexTypeCount@ is not @0@, @pIndexTypeValues@ /must/ be a valid
--     pointer to an array of @indexTypeCount@ @uint32_t@ values
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_device_generated_commands VK_NV_device_generated_commands>,
-- 'Vulkan.Core10.FundamentalTypes.Bool32',
-- 'Vulkan.Core10.Enums.IndexType.IndexType',
-- 'IndirectCommandsLayoutCreateInfoNV', 'IndirectCommandsTokenTypeNV',
-- 'IndirectStateFlagsNV', 'Vulkan.Core10.Handles.PipelineLayout',
-- 'Vulkan.Core10.Enums.ShaderStageFlagBits.ShaderStageFlags',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data IndirectCommandsLayoutTokenNV = IndirectCommandsLayoutTokenNV
  { -- | @tokenType@ specifies the token command type.
    IndirectCommandsLayoutTokenNV -> IndirectCommandsTokenTypeNV
tokenType :: IndirectCommandsTokenTypeNV
  , -- | @stream@ is the index of the input stream containing the token argument
    -- data.
    IndirectCommandsLayoutTokenNV -> Flags
stream :: Word32
  , -- | @offset@ is a relative starting offset within the input stream memory
    -- for the token argument data.
    IndirectCommandsLayoutTokenNV -> Flags
offset :: Word32
  , -- | @vertexBindingUnit@ is used for the vertex buffer binding command.
    IndirectCommandsLayoutTokenNV -> Flags
vertexBindingUnit :: Word32
  , -- | @vertexDynamicStride@ sets if the vertex buffer stride is provided by
    -- the binding command rather than the current bound graphics pipeline
    -- state.
    IndirectCommandsLayoutTokenNV -> "isPreprocessed" ::: Bool
vertexDynamicStride :: Bool
  , -- | @pushconstantPipelineLayout@ is the
    -- 'Vulkan.Core10.Handles.PipelineLayout' used for the push constant
    -- command.
    IndirectCommandsLayoutTokenNV -> PipelineLayout
pushconstantPipelineLayout :: PipelineLayout
  , -- | @pushconstantShaderStageFlags@ are the shader stage flags used for the
    -- push constant command.
    IndirectCommandsLayoutTokenNV -> ShaderStageFlags
pushconstantShaderStageFlags :: ShaderStageFlags
  , -- | @pushconstantOffset@ is the offset used for the push constant command.
    IndirectCommandsLayoutTokenNV -> Flags
pushconstantOffset :: Word32
  , -- | @pushconstantSize@ is the size used for the push constant command.
    IndirectCommandsLayoutTokenNV -> Flags
pushconstantSize :: Word32
  , -- | @indirectStateFlags@ are the active states for the state flag command.
    IndirectCommandsLayoutTokenNV -> IndirectStateFlagBitsNV
indirectStateFlags :: IndirectStateFlagsNV
  , -- | @pIndexTypes@ is the used 'Vulkan.Core10.Enums.IndexType.IndexType' for
    -- the corresponding @uint32_t@ value entry in @pIndexTypeValues@.
    IndirectCommandsLayoutTokenNV -> Vector IndexType
indexTypes :: Vector IndexType
  , -- No documentation found for Nested "VkIndirectCommandsLayoutTokenNV" "pIndexTypeValues"
    IndirectCommandsLayoutTokenNV -> Vector Flags
indexTypeValues :: Vector Word32
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (IndirectCommandsLayoutTokenNV)
#endif
deriving instance Show IndirectCommandsLayoutTokenNV

instance ToCStruct IndirectCommandsLayoutTokenNV where
  withCStruct :: forall b.
IndirectCommandsLayoutTokenNV
-> (Ptr IndirectCommandsLayoutTokenNV -> IO b) -> IO b
withCStruct IndirectCommandsLayoutTokenNV
x Ptr IndirectCommandsLayoutTokenNV -> IO b
f = Int -> (Ptr IndirectCommandsLayoutTokenNV -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
88 ((Ptr IndirectCommandsLayoutTokenNV -> IO b) -> IO b)
-> (Ptr IndirectCommandsLayoutTokenNV -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr IndirectCommandsLayoutTokenNV
p -> Ptr IndirectCommandsLayoutTokenNV
-> IndirectCommandsLayoutTokenNV -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr IndirectCommandsLayoutTokenNV
p IndirectCommandsLayoutTokenNV
x (Ptr IndirectCommandsLayoutTokenNV -> IO b
f Ptr IndirectCommandsLayoutTokenNV
p)
  pokeCStruct :: forall b.
Ptr IndirectCommandsLayoutTokenNV
-> IndirectCommandsLayoutTokenNV -> IO b -> IO b
pokeCStruct Ptr IndirectCommandsLayoutTokenNV
p IndirectCommandsLayoutTokenNV{"isPreprocessed" ::: Bool
Flags
Vector Flags
Vector IndexType
ShaderStageFlags
PipelineLayout
IndirectCommandsTokenTypeNV
IndirectStateFlagBitsNV
indexTypeValues :: Vector Flags
indexTypes :: Vector IndexType
indirectStateFlags :: IndirectStateFlagBitsNV
pushconstantSize :: Flags
pushconstantOffset :: Flags
pushconstantShaderStageFlags :: ShaderStageFlags
pushconstantPipelineLayout :: PipelineLayout
vertexDynamicStride :: "isPreprocessed" ::: Bool
vertexBindingUnit :: Flags
offset :: Flags
stream :: Flags
tokenType :: IndirectCommandsTokenTypeNV
$sel:indexTypeValues:IndirectCommandsLayoutTokenNV :: IndirectCommandsLayoutTokenNV -> Vector Flags
$sel:indexTypes:IndirectCommandsLayoutTokenNV :: IndirectCommandsLayoutTokenNV -> Vector IndexType
$sel:indirectStateFlags:IndirectCommandsLayoutTokenNV :: IndirectCommandsLayoutTokenNV -> IndirectStateFlagBitsNV
$sel:pushconstantSize:IndirectCommandsLayoutTokenNV :: IndirectCommandsLayoutTokenNV -> Flags
$sel:pushconstantOffset:IndirectCommandsLayoutTokenNV :: IndirectCommandsLayoutTokenNV -> Flags
$sel:pushconstantShaderStageFlags:IndirectCommandsLayoutTokenNV :: IndirectCommandsLayoutTokenNV -> ShaderStageFlags
$sel:pushconstantPipelineLayout:IndirectCommandsLayoutTokenNV :: IndirectCommandsLayoutTokenNV -> PipelineLayout
$sel:vertexDynamicStride:IndirectCommandsLayoutTokenNV :: IndirectCommandsLayoutTokenNV -> "isPreprocessed" ::: Bool
$sel:vertexBindingUnit:IndirectCommandsLayoutTokenNV :: IndirectCommandsLayoutTokenNV -> Flags
$sel:offset:IndirectCommandsLayoutTokenNV :: IndirectCommandsLayoutTokenNV -> Flags
$sel:stream:IndirectCommandsLayoutTokenNV :: IndirectCommandsLayoutTokenNV -> Flags
$sel:tokenType:IndirectCommandsLayoutTokenNV :: IndirectCommandsLayoutTokenNV -> IndirectCommandsTokenTypeNV
..} 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 (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 IndirectCommandsLayoutTokenNV
p Ptr IndirectCommandsLayoutTokenNV -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_NV)
    IO () -> ContT b IO ()
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 IndirectCommandsLayoutTokenNV
p Ptr IndirectCommandsLayoutTokenNV -> 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 (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 IndirectCommandsTokenTypeNV
-> IndirectCommandsTokenTypeNV -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectCommandsLayoutTokenNV
p Ptr IndirectCommandsLayoutTokenNV
-> Int -> Ptr IndirectCommandsTokenTypeNV
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr IndirectCommandsTokenTypeNV)) (IndirectCommandsTokenTypeNV
tokenType)
    IO () -> ContT b IO ()
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 IndirectCommandsLayoutTokenNV
p Ptr IndirectCommandsLayoutTokenNV -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr Word32)) (Flags
stream)
    IO () -> ContT b IO ()
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 IndirectCommandsLayoutTokenNV
p Ptr IndirectCommandsLayoutTokenNV -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Word32)) (Flags
offset)
    IO () -> ContT b IO ()
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 IndirectCommandsLayoutTokenNV
p Ptr IndirectCommandsLayoutTokenNV -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
28 :: Ptr Word32)) (Flags
vertexBindingUnit)
    IO () -> ContT b IO ()
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 ("isPreprocessed" ::: Bool32)
-> ("isPreprocessed" ::: Bool32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectCommandsLayoutTokenNV
p Ptr IndirectCommandsLayoutTokenNV
-> Int -> Ptr ("isPreprocessed" ::: Bool32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr Bool32)) (("isPreprocessed" ::: Bool) -> "isPreprocessed" ::: Bool32
boolToBool32 ("isPreprocessed" ::: Bool
vertexDynamicStride))
    IO () -> ContT b IO ()
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 IndirectCommandsLayoutTokenNV
p Ptr IndirectCommandsLayoutTokenNV -> Int -> Ptr PipelineLayout
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr PipelineLayout)) (PipelineLayout
pushconstantPipelineLayout)
    IO () -> ContT b IO ()
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 IndirectCommandsLayoutTokenNV
p Ptr IndirectCommandsLayoutTokenNV -> Int -> Ptr ShaderStageFlags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr ShaderStageFlags)) (ShaderStageFlags
pushconstantShaderStageFlags)
    IO () -> ContT b IO ()
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 IndirectCommandsLayoutTokenNV
p Ptr IndirectCommandsLayoutTokenNV -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
52 :: Ptr Word32)) (Flags
pushconstantOffset)
    IO () -> ContT b IO ()
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 IndirectCommandsLayoutTokenNV
p Ptr IndirectCommandsLayoutTokenNV -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
56 :: Ptr Word32)) (Flags
pushconstantSize)
    IO () -> ContT b IO ()
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 IndirectStateFlagBitsNV -> IndirectStateFlagBitsNV -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectCommandsLayoutTokenNV
p Ptr IndirectCommandsLayoutTokenNV
-> Int -> Ptr IndirectStateFlagBitsNV
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
60 :: Ptr IndirectStateFlagsNV)) (IndirectStateFlagBitsNV
indirectStateFlags)
    let pIndexTypesLength :: Int
pIndexTypesLength = Vector IndexType -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector IndexType -> Int) -> Vector IndexType -> Int
forall a b. (a -> b) -> a -> b
$ (Vector IndexType
indexTypes)
    IO () -> ContT b IO ()
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 ((Vector Flags -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector Flags -> Int) -> Vector Flags -> Int
forall a b. (a -> b) -> a -> b
$ (Vector Flags
indexTypeValues)) Int -> Int -> "isPreprocessed" ::: Bool
forall a. Eq a => a -> a -> "isPreprocessed" ::: Bool
== Int
pIndexTypesLength) (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
"pIndexTypeValues and pIndexTypes must have the same length" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
    IO () -> ContT b IO ()
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 IndirectCommandsLayoutTokenNV
p Ptr IndirectCommandsLayoutTokenNV -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
64 :: Ptr Word32)) ((Int -> Flags
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
pIndexTypesLength :: Word32))
    Ptr IndexType
pPIndexTypes' <- ((Ptr IndexType -> IO b) -> IO b) -> ContT b IO (Ptr IndexType)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr IndexType -> IO b) -> IO b) -> ContT b IO (Ptr IndexType))
-> ((Ptr IndexType -> IO b) -> IO b) -> ContT b IO (Ptr IndexType)
forall a b. (a -> b) -> a -> b
$ forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @IndexType ((Vector IndexType -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector IndexType
indexTypes)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
4)
    IO () -> ContT b IO ()
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 -> IndexType -> IO ()) -> Vector IndexType -> IO ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i IndexType
e -> Ptr IndexType -> IndexType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr IndexType
pPIndexTypes' Ptr IndexType -> Int -> Ptr IndexType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
4 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr IndexType) (IndexType
e)) (Vector IndexType
indexTypes)
    IO () -> ContT b IO ()
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 IndexType) -> Ptr IndexType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectCommandsLayoutTokenNV
p Ptr IndirectCommandsLayoutTokenNV -> Int -> Ptr (Ptr IndexType)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
72 :: Ptr (Ptr IndexType))) (Ptr IndexType
pPIndexTypes')
    Ptr Flags
pPIndexTypeValues' <- ((Ptr Flags -> IO b) -> IO b) -> ContT b IO (Ptr Flags)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr Flags -> IO b) -> IO b) -> ContT b IO (Ptr Flags))
-> ((Ptr Flags -> IO b) -> IO b) -> ContT b IO (Ptr Flags)
forall a b. (a -> b) -> a -> b
$ forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @Word32 ((Vector Flags -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector Flags
indexTypeValues)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
4)
    IO () -> ContT b IO ()
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 -> Flags -> IO ()) -> Vector Flags -> IO ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i Flags
e -> Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr Flags
pPIndexTypeValues' Ptr Flags -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
4 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr Word32) (Flags
e)) (Vector Flags
indexTypeValues)
    IO () -> ContT b IO ()
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 Flags) -> Ptr Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectCommandsLayoutTokenNV
p Ptr IndirectCommandsLayoutTokenNV -> Int -> Ptr (Ptr Flags)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
80 :: Ptr (Ptr Word32))) (Ptr Flags
pPIndexTypeValues')
    IO b -> ContT b IO b
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
88
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b. Ptr IndirectCommandsLayoutTokenNV -> IO b -> IO b
pokeZeroCStruct Ptr IndirectCommandsLayoutTokenNV
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectCommandsLayoutTokenNV
p Ptr IndirectCommandsLayoutTokenNV -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_NV)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectCommandsLayoutTokenNV
p Ptr IndirectCommandsLayoutTokenNV -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr IndirectCommandsTokenTypeNV
-> IndirectCommandsTokenTypeNV -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectCommandsLayoutTokenNV
p Ptr IndirectCommandsLayoutTokenNV
-> Int -> Ptr IndirectCommandsTokenTypeNV
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr IndirectCommandsTokenTypeNV)) (IndirectCommandsTokenTypeNV
forall a. Zero a => a
zero)
    Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectCommandsLayoutTokenNV
p Ptr IndirectCommandsLayoutTokenNV -> 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 IndirectCommandsLayoutTokenNV
p Ptr IndirectCommandsLayoutTokenNV -> 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 IndirectCommandsLayoutTokenNV
p Ptr IndirectCommandsLayoutTokenNV -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
28 :: Ptr Word32)) (Flags
forall a. Zero a => a
zero)
    Ptr ("isPreprocessed" ::: Bool32)
-> ("isPreprocessed" ::: Bool32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectCommandsLayoutTokenNV
p Ptr IndirectCommandsLayoutTokenNV
-> Int -> Ptr ("isPreprocessed" ::: Bool32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr Bool32)) (("isPreprocessed" ::: Bool) -> "isPreprocessed" ::: Bool32
boolToBool32 ("isPreprocessed" ::: Bool
forall a. Zero a => a
zero))
    Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectCommandsLayoutTokenNV
p Ptr IndirectCommandsLayoutTokenNV -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
52 :: Ptr Word32)) (Flags
forall a. Zero a => a
zero)
    Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr IndirectCommandsLayoutTokenNV
p Ptr IndirectCommandsLayoutTokenNV -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
56 :: Ptr Word32)) (Flags
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct IndirectCommandsLayoutTokenNV where
  peekCStruct :: Ptr IndirectCommandsLayoutTokenNV
-> IO IndirectCommandsLayoutTokenNV
peekCStruct Ptr IndirectCommandsLayoutTokenNV
p = do
    IndirectCommandsTokenTypeNV
tokenType <- forall a. Storable a => Ptr a -> IO a
peek @IndirectCommandsTokenTypeNV ((Ptr IndirectCommandsLayoutTokenNV
p Ptr IndirectCommandsLayoutTokenNV
-> Int -> Ptr IndirectCommandsTokenTypeNV
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr IndirectCommandsTokenTypeNV))
    Flags
stream <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr IndirectCommandsLayoutTokenNV
p Ptr IndirectCommandsLayoutTokenNV -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr Word32))
    Flags
offset <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr IndirectCommandsLayoutTokenNV
p Ptr IndirectCommandsLayoutTokenNV -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Word32))
    Flags
vertexBindingUnit <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr IndirectCommandsLayoutTokenNV
p Ptr IndirectCommandsLayoutTokenNV -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
28 :: Ptr Word32))
    "isPreprocessed" ::: Bool32
vertexDynamicStride <- forall a. Storable a => Ptr a -> IO a
peek @Bool32 ((Ptr IndirectCommandsLayoutTokenNV
p Ptr IndirectCommandsLayoutTokenNV
-> Int -> Ptr ("isPreprocessed" ::: Bool32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr Bool32))
    PipelineLayout
pushconstantPipelineLayout <- forall a. Storable a => Ptr a -> IO a
peek @PipelineLayout ((Ptr IndirectCommandsLayoutTokenNV
p Ptr IndirectCommandsLayoutTokenNV -> Int -> Ptr PipelineLayout
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr PipelineLayout))
    ShaderStageFlags
pushconstantShaderStageFlags <- forall a. Storable a => Ptr a -> IO a
peek @ShaderStageFlags ((Ptr IndirectCommandsLayoutTokenNV
p Ptr IndirectCommandsLayoutTokenNV -> Int -> Ptr ShaderStageFlags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr ShaderStageFlags))
    Flags
pushconstantOffset <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr IndirectCommandsLayoutTokenNV
p Ptr IndirectCommandsLayoutTokenNV -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
52 :: Ptr Word32))
    Flags
pushconstantSize <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr IndirectCommandsLayoutTokenNV
p Ptr IndirectCommandsLayoutTokenNV -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
56 :: Ptr Word32))
    IndirectStateFlagBitsNV
indirectStateFlags <- forall a. Storable a => Ptr a -> IO a
peek @IndirectStateFlagsNV ((Ptr IndirectCommandsLayoutTokenNV
p Ptr IndirectCommandsLayoutTokenNV
-> Int -> Ptr IndirectStateFlagBitsNV
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
60 :: Ptr IndirectStateFlagsNV))
    Flags
indexTypeCount <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr IndirectCommandsLayoutTokenNV
p Ptr IndirectCommandsLayoutTokenNV -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
64 :: Ptr Word32))
    Ptr IndexType
pIndexTypes <- forall a. Storable a => Ptr a -> IO a
peek @(Ptr IndexType) ((Ptr IndirectCommandsLayoutTokenNV
p Ptr IndirectCommandsLayoutTokenNV -> Int -> Ptr (Ptr IndexType)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
72 :: Ptr (Ptr IndexType)))
    Vector IndexType
pIndexTypes' <- Int -> (Int -> IO IndexType) -> IO (Vector IndexType)
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
indexTypeCount) (\Int
i -> forall a. Storable a => Ptr a -> IO a
peek @IndexType ((Ptr IndexType
pIndexTypes Ptr IndexType -> Int -> Ptr IndexType
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
4 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr IndexType)))
    Ptr Flags
pIndexTypeValues <- forall a. Storable a => Ptr a -> IO a
peek @(Ptr Word32) ((Ptr IndirectCommandsLayoutTokenNV
p Ptr IndirectCommandsLayoutTokenNV -> Int -> Ptr (Ptr Flags)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
80 :: Ptr (Ptr Word32)))
    Vector Flags
pIndexTypeValues' <- Int -> (Int -> IO Flags) -> IO (Vector Flags)
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
indexTypeCount) (\Int
i -> forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr Flags
pIndexTypeValues Ptr Flags -> Int -> Ptr Flags
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
4 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr Word32)))
    IndirectCommandsLayoutTokenNV -> IO IndirectCommandsLayoutTokenNV
forall (f :: * -> *) a. Applicative f => a -> f a
pure (IndirectCommandsLayoutTokenNV -> IO IndirectCommandsLayoutTokenNV)
-> IndirectCommandsLayoutTokenNV
-> IO IndirectCommandsLayoutTokenNV
forall a b. (a -> b) -> a -> b
$ IndirectCommandsTokenTypeNV
-> Flags
-> Flags
-> Flags
-> ("isPreprocessed" ::: Bool)
-> PipelineLayout
-> ShaderStageFlags
-> Flags
-> Flags
-> IndirectStateFlagBitsNV
-> Vector IndexType
-> Vector Flags
-> IndirectCommandsLayoutTokenNV
IndirectCommandsLayoutTokenNV
             IndirectCommandsTokenTypeNV
tokenType
             Flags
stream
             Flags
offset
             Flags
vertexBindingUnit
             (("isPreprocessed" ::: Bool32) -> "isPreprocessed" ::: Bool
bool32ToBool "isPreprocessed" ::: Bool32
vertexDynamicStride)
             PipelineLayout
pushconstantPipelineLayout
             ShaderStageFlags
pushconstantShaderStageFlags
             Flags
pushconstantOffset
             Flags
pushconstantSize
             IndirectStateFlagBitsNV
indirectStateFlags
             Vector IndexType
pIndexTypes'
             Vector Flags
pIndexTypeValues'

instance Zero IndirectCommandsLayoutTokenNV where
  zero :: IndirectCommandsLayoutTokenNV
zero = IndirectCommandsTokenTypeNV
-> Flags
-> Flags
-> Flags
-> ("isPreprocessed" ::: Bool)
-> PipelineLayout
-> ShaderStageFlags
-> Flags
-> Flags
-> IndirectStateFlagBitsNV
-> Vector IndexType
-> Vector Flags
-> IndirectCommandsLayoutTokenNV
IndirectCommandsLayoutTokenNV
           IndirectCommandsTokenTypeNV
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
           "isPreprocessed" ::: Bool
forall a. Zero a => a
zero
           PipelineLayout
forall a. Zero a => a
zero
           ShaderStageFlags
forall a. Zero a => a
zero
           Flags
forall a. Zero a => a
zero
           Flags
forall a. Zero a => a
zero
           IndirectStateFlagBitsNV
forall a. Zero a => a
zero
           Vector IndexType
forall a. Monoid a => a
mempty
           Vector Flags
forall a. Monoid a => a
mempty


-- | VkIndirectCommandsLayoutCreateInfoNV - Structure specifying the
-- parameters of a newly created indirect commands layout object
--
-- = Description
--
-- The following code illustrates some of the flags:
--
-- > void cmdProcessAllSequences(cmd, pipeline, indirectCommandsLayout, pIndirectCommandsTokens, sequencesCount, indexbuffer, indexbufferOffset)
-- > {
-- >   for (s = 0; s < sequencesCount; s++)
-- >   {
-- >     sUsed = s;
-- >
-- >     if (indirectCommandsLayout.flags & VK_INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NV) {
-- >       sUsed = indexbuffer.load_uint32( sUsed * sizeof(uint32_t) + indexbufferOffset);
-- >     }
-- >
-- >     if (indirectCommandsLayout.flags & VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NV) {
-- >       sUsed = incoherent_implementation_dependent_permutation[ sUsed ];
-- >     }
-- >
-- >     cmdProcessSequence( cmd, pipeline, indirectCommandsLayout, pIndirectCommandsTokens, 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
-- 'PhysicalDeviceDeviceGeneratedCommandsPropertiesNV'::@minIndirectCommandsBufferOffsetAlignment@,
-- whichever is lower.
--
-- Note
--
-- A @minIndirectCommandsBufferOffsetAlignment@ of 4 allows
-- 'Vulkan.Core10.FundamentalTypes.DeviceAddress' to be packed as @uvec2@
-- with scalar layout instead of @uint64_t@ with 8 byte alignment. This
-- enables direct compatibility with D3D12 command signature layouts.
--
-- == Valid Usage
--
-- -   #VUID-VkIndirectCommandsLayoutCreateInfoNV-pipelineBindPoint-02930#
--     The @pipelineBindPoint@ /must/ be
--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_GRAPHICS'
--
-- -   #VUID-VkIndirectCommandsLayoutCreateInfoNV-tokenCount-02931#
--     @tokenCount@ /must/ be greater than @0@ and less than or equal to
--     'PhysicalDeviceDeviceGeneratedCommandsPropertiesNV'::@maxIndirectCommandsTokenCount@
--
-- -   #VUID-VkIndirectCommandsLayoutCreateInfoNV-pTokens-02932# If
--     @pTokens@ contains an entry of
--     'INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV' it /must/ be the
--     first element of the array and there /must/ be only a single element
--     of such token type
--
-- -   #VUID-VkIndirectCommandsLayoutCreateInfoNV-pTokens-02933# If
--     @pTokens@ contains an entry of
--     'INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV' there /must/ be only a
--     single element of such token type
--
-- -   #VUID-VkIndirectCommandsLayoutCreateInfoNV-pTokens-02934# All state
--     tokens in @pTokens@ /must/ occur before any work provoking tokens
--     ('INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV',
--     'INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NV',
--     'INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV',
--     'INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_NV')
--
-- -   #VUID-VkIndirectCommandsLayoutCreateInfoNV-pTokens-02935# The
--     content of @pTokens@ /must/ include one single work provoking token
--     that is compatible with the @pipelineBindPoint@
--
-- -   #VUID-VkIndirectCommandsLayoutCreateInfoNV-streamCount-02936#
--     @streamCount@ /must/ be greater than @0@ and less or equal to
--     'PhysicalDeviceDeviceGeneratedCommandsPropertiesNV'::@maxIndirectCommandsStreamCount@
--
-- -   #VUID-VkIndirectCommandsLayoutCreateInfoNV-pStreamStrides-02937#
--     each element of @pStreamStrides@ /must/ be greater than \`0\`and
--     less than or equal to
--     'PhysicalDeviceDeviceGeneratedCommandsPropertiesNV'::@maxIndirectCommandsStreamStride@.
--     Furthermore the alignment of each token input /must/ be ensured
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkIndirectCommandsLayoutCreateInfoNV-sType-sType# @sType@
--     /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NV'
--
-- -   #VUID-VkIndirectCommandsLayoutCreateInfoNV-pNext-pNext# @pNext@
--     /must/ be @NULL@
--
-- -   #VUID-VkIndirectCommandsLayoutCreateInfoNV-flags-parameter# @flags@
--     /must/ be a valid combination of
--     'IndirectCommandsLayoutUsageFlagBitsNV' values
--
-- -   #VUID-VkIndirectCommandsLayoutCreateInfoNV-pipelineBindPoint-parameter#
--     @pipelineBindPoint@ /must/ be a valid
--     'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' value
--
-- -   #VUID-VkIndirectCommandsLayoutCreateInfoNV-pTokens-parameter#
--     @pTokens@ /must/ be a valid pointer to an array of @tokenCount@
--     valid 'IndirectCommandsLayoutTokenNV' structures
--
-- -   #VUID-VkIndirectCommandsLayoutCreateInfoNV-pStreamStrides-parameter#
--     @pStreamStrides@ /must/ be a valid pointer to an array of
--     @streamCount@ @uint32_t@ values
--
-- -   #VUID-VkIndirectCommandsLayoutCreateInfoNV-tokenCount-arraylength#
--     @tokenCount@ /must/ be greater than @0@
--
-- -   #VUID-VkIndirectCommandsLayoutCreateInfoNV-streamCount-arraylength#
--     @streamCount@ /must/ be greater than @0@
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_device_generated_commands VK_NV_device_generated_commands>,
-- 'IndirectCommandsLayoutTokenNV', 'IndirectCommandsLayoutUsageFlagsNV',
-- 'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint',
-- 'Vulkan.Core10.Enums.StructureType.StructureType',
-- 'createIndirectCommandsLayoutNV'
data IndirectCommandsLayoutCreateInfoNV = IndirectCommandsLayoutCreateInfoNV
  { -- | @flags@ is a bitmask of 'IndirectCommandsLayoutUsageFlagBitsNV'
    -- specifying usage hints of this layout.
    IndirectCommandsLayoutCreateInfoNV
-> IndirectCommandsLayoutUsageFlagBitsNV
flags :: IndirectCommandsLayoutUsageFlagsNV
  , -- | @pipelineBindPoint@ is the
    -- 'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' that this
    -- layout targets.
    IndirectCommandsLayoutCreateInfoNV -> PipelineBindPoint
pipelineBindPoint :: PipelineBindPoint
  , -- | @pTokens@ is an array describing each command token in detail. See
    -- 'IndirectCommandsTokenTypeNV' and 'IndirectCommandsLayoutTokenNV' below
    -- for details.
    IndirectCommandsLayoutCreateInfoNV
-> Vector IndirectCommandsLayoutTokenNV
tokens :: Vector IndirectCommandsLayoutTokenNV
  , -- | @pStreamStrides@ is an array defining the byte stride for each input
    -- stream.
    IndirectCommandsLayoutCreateInfoNV -> Vector Flags
streamStrides :: Vector Word32
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (IndirectCommandsLayoutCreateInfoNV)
#endif
deriving instance Show IndirectCommandsLayoutCreateInfoNV

instance ToCStruct IndirectCommandsLayoutCreateInfoNV where
  withCStruct :: forall b.
IndirectCommandsLayoutCreateInfoNV
-> (("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV)
    -> IO b)
-> IO b
withCStruct IndirectCommandsLayoutCreateInfoNV
x ("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV) -> IO b
f = Int
-> (("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV)
    -> IO b)
-> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
56 ((("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV)
  -> IO b)
 -> IO b)
-> (("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV)
    -> IO b)
-> IO b
forall a b. (a -> b) -> a -> b
$ \"pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV
p -> ("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV)
-> IndirectCommandsLayoutCreateInfoNV -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct "pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV
p IndirectCommandsLayoutCreateInfoNV
x (("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV) -> IO b
f "pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV
p)
  pokeCStruct :: forall b.
("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV)
-> IndirectCommandsLayoutCreateInfoNV -> IO b -> IO b
pokeCStruct "pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV
p IndirectCommandsLayoutCreateInfoNV{Vector Flags
Vector IndirectCommandsLayoutTokenNV
PipelineBindPoint
IndirectCommandsLayoutUsageFlagBitsNV
streamStrides :: Vector Flags
tokens :: Vector IndirectCommandsLayoutTokenNV
pipelineBindPoint :: PipelineBindPoint
flags :: IndirectCommandsLayoutUsageFlagBitsNV
$sel:streamStrides:IndirectCommandsLayoutCreateInfoNV :: IndirectCommandsLayoutCreateInfoNV -> Vector Flags
$sel:tokens:IndirectCommandsLayoutCreateInfoNV :: IndirectCommandsLayoutCreateInfoNV
-> Vector IndirectCommandsLayoutTokenNV
$sel:pipelineBindPoint:IndirectCommandsLayoutCreateInfoNV :: IndirectCommandsLayoutCreateInfoNV -> PipelineBindPoint
$sel:flags:IndirectCommandsLayoutCreateInfoNV :: IndirectCommandsLayoutCreateInfoNV
-> IndirectCommandsLayoutUsageFlagBitsNV
..} 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 (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 (("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV
p ("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV)
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NV)
    IO () -> ContT b IO ()
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 (("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV
p ("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV)
-> 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 (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 IndirectCommandsLayoutUsageFlagBitsNV
-> IndirectCommandsLayoutUsageFlagBitsNV -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV
p ("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV)
-> Int -> Ptr IndirectCommandsLayoutUsageFlagBitsNV
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr IndirectCommandsLayoutUsageFlagsNV)) (IndirectCommandsLayoutUsageFlagBitsNV
flags)
    IO () -> ContT b IO ()
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 PipelineBindPoint -> PipelineBindPoint -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV
p ("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV)
-> Int -> Ptr PipelineBindPoint
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr PipelineBindPoint)) (PipelineBindPoint
pipelineBindPoint)
    IO () -> ContT b IO ()
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 (("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV
p ("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV)
-> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Word32)) ((Int -> Flags
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Vector IndirectCommandsLayoutTokenNV -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector IndirectCommandsLayoutTokenNV -> Int)
-> Vector IndirectCommandsLayoutTokenNV -> Int
forall a b. (a -> b) -> a -> b
$ (Vector IndirectCommandsLayoutTokenNV
tokens)) :: Word32))
    Ptr IndirectCommandsLayoutTokenNV
pPTokens' <- ((Ptr IndirectCommandsLayoutTokenNV -> IO b) -> IO b)
-> ContT b IO (Ptr IndirectCommandsLayoutTokenNV)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr IndirectCommandsLayoutTokenNV -> IO b) -> IO b)
 -> ContT b IO (Ptr IndirectCommandsLayoutTokenNV))
-> ((Ptr IndirectCommandsLayoutTokenNV -> IO b) -> IO b)
-> ContT b IO (Ptr IndirectCommandsLayoutTokenNV)
forall a b. (a -> b) -> a -> b
$ forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @IndirectCommandsLayoutTokenNV ((Vector IndirectCommandsLayoutTokenNV -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector IndirectCommandsLayoutTokenNV
tokens)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
88)
    (Int -> IndirectCommandsLayoutTokenNV -> ContT b IO ())
-> Vector IndirectCommandsLayoutTokenNV -> ContT b IO ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i IndirectCommandsLayoutTokenNV
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 IndirectCommandsLayoutTokenNV
-> IndirectCommandsLayoutTokenNV -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct (Ptr IndirectCommandsLayoutTokenNV
pPTokens' Ptr IndirectCommandsLayoutTokenNV
-> Int -> Ptr IndirectCommandsLayoutTokenNV
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
88 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr IndirectCommandsLayoutTokenNV) (IndirectCommandsLayoutTokenNV
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 IndirectCommandsLayoutTokenNV
tokens)
    IO () -> ContT b IO ()
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 IndirectCommandsLayoutTokenNV)
-> Ptr IndirectCommandsLayoutTokenNV -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV
p ("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV)
-> Int -> Ptr (Ptr IndirectCommandsLayoutTokenNV)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr (Ptr IndirectCommandsLayoutTokenNV))) (Ptr IndirectCommandsLayoutTokenNV
pPTokens')
    IO () -> ContT b IO ()
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 (("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV
p ("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV)
-> 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 Flags -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector Flags -> Int) -> Vector Flags -> Int
forall a b. (a -> b) -> a -> b
$ (Vector Flags
streamStrides)) :: Word32))
    Ptr Flags
pPStreamStrides' <- ((Ptr Flags -> IO b) -> IO b) -> ContT b IO (Ptr Flags)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr Flags -> IO b) -> IO b) -> ContT b IO (Ptr Flags))
-> ((Ptr Flags -> IO b) -> IO b) -> ContT b IO (Ptr Flags)
forall a b. (a -> b) -> a -> b
$ forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @Word32 ((Vector Flags -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector Flags
streamStrides)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
4)
    IO () -> ContT b IO ()
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 -> Flags -> IO ()) -> Vector Flags -> IO ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i Flags
e -> Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr Flags
pPStreamStrides' Ptr Flags -> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
4 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr Word32) (Flags
e)) (Vector Flags
streamStrides)
    IO () -> ContT b IO ()
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 Flags) -> Ptr Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV
p ("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV)
-> Int -> Ptr (Ptr Flags)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr (Ptr Word32))) (Ptr Flags
pPStreamStrides')
    IO b -> ContT b IO b
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.
("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV)
-> IO b -> IO b
pokeZeroCStruct "pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV
p ("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV)
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NV)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV
p ("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV)
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr PipelineBindPoint -> PipelineBindPoint -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV
p ("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV)
-> Int -> Ptr PipelineBindPoint
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr PipelineBindPoint)) (PipelineBindPoint
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct IndirectCommandsLayoutCreateInfoNV where
  peekCStruct :: ("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV)
-> IO IndirectCommandsLayoutCreateInfoNV
peekCStruct "pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV
p = do
    IndirectCommandsLayoutUsageFlagBitsNV
flags <- forall a. Storable a => Ptr a -> IO a
peek @IndirectCommandsLayoutUsageFlagsNV (("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV
p ("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV)
-> Int -> Ptr IndirectCommandsLayoutUsageFlagBitsNV
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr IndirectCommandsLayoutUsageFlagsNV))
    PipelineBindPoint
pipelineBindPoint <- forall a. Storable a => Ptr a -> IO a
peek @PipelineBindPoint (("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV
p ("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV)
-> Int -> Ptr PipelineBindPoint
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr PipelineBindPoint))
    Flags
tokenCount <- forall a. Storable a => Ptr a -> IO a
peek @Word32 (("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV
p ("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV)
-> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Word32))
    Ptr IndirectCommandsLayoutTokenNV
pTokens <- forall a. Storable a => Ptr a -> IO a
peek @(Ptr IndirectCommandsLayoutTokenNV) (("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV
p ("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV)
-> Int -> Ptr (Ptr IndirectCommandsLayoutTokenNV)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr (Ptr IndirectCommandsLayoutTokenNV)))
    Vector IndirectCommandsLayoutTokenNV
pTokens' <- Int
-> (Int -> IO IndirectCommandsLayoutTokenNV)
-> IO (Vector IndirectCommandsLayoutTokenNV)
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
tokenCount) (\Int
i -> forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @IndirectCommandsLayoutTokenNV ((Ptr IndirectCommandsLayoutTokenNV
pTokens Ptr IndirectCommandsLayoutTokenNV
-> Int -> Ptr IndirectCommandsLayoutTokenNV
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
88 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr IndirectCommandsLayoutTokenNV)))
    Flags
streamCount <- forall a. Storable a => Ptr a -> IO a
peek @Word32 (("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV
p ("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV)
-> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr Word32))
    Ptr Flags
pStreamStrides <- forall a. Storable a => Ptr a -> IO a
peek @(Ptr Word32) (("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV
p ("pCreateInfo" ::: Ptr IndirectCommandsLayoutCreateInfoNV)
-> Int -> Ptr (Ptr Flags)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr (Ptr Word32)))
    Vector Flags
pStreamStrides' <- Int -> (Int -> IO Flags) -> IO (Vector Flags)
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
streamCount) (\Int
i -> forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr Flags
pStreamStrides Ptr Flags -> Int -> Ptr Flags
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
4 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr Word32)))
    IndirectCommandsLayoutCreateInfoNV
-> IO IndirectCommandsLayoutCreateInfoNV
forall (f :: * -> *) a. Applicative f => a -> f a
pure (IndirectCommandsLayoutCreateInfoNV
 -> IO IndirectCommandsLayoutCreateInfoNV)
-> IndirectCommandsLayoutCreateInfoNV
-> IO IndirectCommandsLayoutCreateInfoNV
forall a b. (a -> b) -> a -> b
$ IndirectCommandsLayoutUsageFlagBitsNV
-> PipelineBindPoint
-> Vector IndirectCommandsLayoutTokenNV
-> Vector Flags
-> IndirectCommandsLayoutCreateInfoNV
IndirectCommandsLayoutCreateInfoNV
             IndirectCommandsLayoutUsageFlagBitsNV
flags PipelineBindPoint
pipelineBindPoint Vector IndirectCommandsLayoutTokenNV
pTokens' Vector Flags
pStreamStrides'

instance Zero IndirectCommandsLayoutCreateInfoNV where
  zero :: IndirectCommandsLayoutCreateInfoNV
zero = IndirectCommandsLayoutUsageFlagBitsNV
-> PipelineBindPoint
-> Vector IndirectCommandsLayoutTokenNV
-> Vector Flags
-> IndirectCommandsLayoutCreateInfoNV
IndirectCommandsLayoutCreateInfoNV
           IndirectCommandsLayoutUsageFlagBitsNV
forall a. Zero a => a
zero
           PipelineBindPoint
forall a. Zero a => a
zero
           Vector IndirectCommandsLayoutTokenNV
forall a. Monoid a => a
mempty
           Vector Flags
forall a. Monoid a => a
mempty


-- | VkGeneratedCommandsInfoNV - Structure specifying parameters for the
-- generation of commands
--
-- == Valid Usage
--
-- -   #VUID-VkGeneratedCommandsInfoNV-pipeline-02912# The provided
--     @pipeline@ /must/ match the pipeline bound at execution time
--
-- -   #VUID-VkGeneratedCommandsInfoNV-indirectCommandsLayout-02913# If the
--     @indirectCommandsLayout@ uses a token of
--     'INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV', then the @pipeline@
--     /must/ have been created with multiple shader groups
--
-- -   #VUID-VkGeneratedCommandsInfoNV-indirectCommandsLayout-02914# If the
--     @indirectCommandsLayout@ uses a token of
--     'INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV', then the @pipeline@
--     /must/ have been created with
--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV'
--     set in 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@flags@
--
-- -   #VUID-VkGeneratedCommandsInfoNV-indirectCommandsLayout-02915# If the
--     @indirectCommandsLayout@ uses a token of
--     'INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV', then the
--     @pipeline@\`s 'Vulkan.Core10.Handles.PipelineLayout' /must/ match
--     the 'IndirectCommandsLayoutTokenNV'::@pushconstantPipelineLayout@
--
-- -   #VUID-VkGeneratedCommandsInfoNV-streamCount-02916# @streamCount@
--     /must/ match the @indirectCommandsLayout@’s @streamCount@
--
-- -   #VUID-VkGeneratedCommandsInfoNV-sequencesCount-02917#
--     @sequencesCount@ /must/ be less or equal to
--     'PhysicalDeviceDeviceGeneratedCommandsPropertiesNV'::@maxIndirectSequenceCount@
--     and 'GeneratedCommandsMemoryRequirementsInfoNV'::@maxSequencesCount@
--     that was used to determine the @preprocessSize@
--
-- -   #VUID-VkGeneratedCommandsInfoNV-preprocessBuffer-02918#
--     @preprocessBuffer@ /must/ have the
--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'
--     bit set in its usage flag
--
-- -   #VUID-VkGeneratedCommandsInfoNV-preprocessOffset-02919#
--     @preprocessOffset@ /must/ be aligned to
--     'PhysicalDeviceDeviceGeneratedCommandsPropertiesNV'::@minIndirectCommandsBufferOffsetAlignment@
--
-- -   #VUID-VkGeneratedCommandsInfoNV-preprocessBuffer-02971# If
--     @preprocessBuffer@ is non-sparse then it /must/ be bound completely
--     and contiguously to a single 'Vulkan.Core10.Handles.DeviceMemory'
--     object
--
-- -   #VUID-VkGeneratedCommandsInfoNV-preprocessSize-02920#
--     @preprocessSize@ /must/ be at least equal to the memory
--     requirement\`s size returned by
--     'getGeneratedCommandsMemoryRequirementsNV' using the matching inputs
--     (@indirectCommandsLayout@, …​) as within this structure
--
-- -   #VUID-VkGeneratedCommandsInfoNV-sequencesCountBuffer-02921#
--     @sequencesCountBuffer@ /can/ be set if the actual used count of
--     sequences is sourced from the provided buffer. In that case the
--     @sequencesCount@ serves as upper bound
--
-- -   #VUID-VkGeneratedCommandsInfoNV-sequencesCountBuffer-02922# If
--     @sequencesCountBuffer@ is not
--     'Vulkan.Core10.APIConstants.NULL_HANDLE', its usage flag /must/ have
--     the
--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'
--     bit set
--
-- -   #VUID-VkGeneratedCommandsInfoNV-sequencesCountBuffer-02923# If
--     @sequencesCountBuffer@ is not
--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @sequencesCountOffset@
--     /must/ be aligned to
--     'PhysicalDeviceDeviceGeneratedCommandsPropertiesNV'::@minSequencesCountBufferOffsetAlignment@
--
-- -   #VUID-VkGeneratedCommandsInfoNV-sequencesCountBuffer-02972# If
--     @sequencesCountBuffer@ is not
--     'Vulkan.Core10.APIConstants.NULL_HANDLE' and is non-sparse then it
--     /must/ be bound completely and contiguously to a single
--     'Vulkan.Core10.Handles.DeviceMemory' object
--
-- -   #VUID-VkGeneratedCommandsInfoNV-sequencesIndexBuffer-02924# If
--     @indirectCommandsLayout@’s
--     'INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NV' is set,
--     @sequencesIndexBuffer@ /must/ be set otherwise it /must/ be
--     'Vulkan.Core10.APIConstants.NULL_HANDLE'
--
-- -   #VUID-VkGeneratedCommandsInfoNV-sequencesIndexBuffer-02925# If
--     @sequencesIndexBuffer@ is not
--     'Vulkan.Core10.APIConstants.NULL_HANDLE', its usage flag /must/ have
--     the
--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'
--     bit set
--
-- -   #VUID-VkGeneratedCommandsInfoNV-sequencesIndexBuffer-02926# If
--     @sequencesIndexBuffer@ is not
--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @sequencesIndexOffset@
--     /must/ be aligned to
--     'PhysicalDeviceDeviceGeneratedCommandsPropertiesNV'::@minSequencesIndexBufferOffsetAlignment@
--
-- -   #VUID-VkGeneratedCommandsInfoNV-sequencesIndexBuffer-02973# If
--     @sequencesIndexBuffer@ is not
--     'Vulkan.Core10.APIConstants.NULL_HANDLE' and is non-sparse then it
--     /must/ be bound completely and contiguously to a single
--     'Vulkan.Core10.Handles.DeviceMemory' object
--
-- -   #VUID-VkGeneratedCommandsInfoNV-indirectCommandsLayout-07078# If the
--     @indirectCommandsLayout@ uses a token of
--     'INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV', then the @pipeline@
--     /must/ contain a shader stage using the @MeshNV@ @Execution@
--     @Model@.
--
-- -   #VUID-VkGeneratedCommandsInfoNV-indirectCommandsLayout-07079# If the
--     @indirectCommandsLayout@ uses a token of
--     'INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_NV', then the
--     @pipeline@ /must/ contain a shader stage using the @MeshEXT@
--     @Execution@ @Model@.
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkGeneratedCommandsInfoNV-sType-sType# @sType@ /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NV'
--
-- -   #VUID-VkGeneratedCommandsInfoNV-pNext-pNext# @pNext@ /must/ be
--     @NULL@
--
-- -   #VUID-VkGeneratedCommandsInfoNV-pipelineBindPoint-parameter#
--     @pipelineBindPoint@ /must/ be a valid
--     'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' value
--
-- -   #VUID-VkGeneratedCommandsInfoNV-pipeline-parameter# @pipeline@
--     /must/ be a valid 'Vulkan.Core10.Handles.Pipeline' handle
--
-- -   #VUID-VkGeneratedCommandsInfoNV-indirectCommandsLayout-parameter#
--     @indirectCommandsLayout@ /must/ be a valid
--     'Vulkan.Extensions.Handles.IndirectCommandsLayoutNV' handle
--
-- -   #VUID-VkGeneratedCommandsInfoNV-pStreams-parameter# @pStreams@
--     /must/ be a valid pointer to an array of @streamCount@ valid
--     'IndirectCommandsStreamNV' structures
--
-- -   #VUID-VkGeneratedCommandsInfoNV-preprocessBuffer-parameter#
--     @preprocessBuffer@ /must/ be a valid 'Vulkan.Core10.Handles.Buffer'
--     handle
--
-- -   #VUID-VkGeneratedCommandsInfoNV-sequencesCountBuffer-parameter# If
--     @sequencesCountBuffer@ is not
--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @sequencesCountBuffer@
--     /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle
--
-- -   #VUID-VkGeneratedCommandsInfoNV-sequencesIndexBuffer-parameter# If
--     @sequencesIndexBuffer@ is not
--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @sequencesIndexBuffer@
--     /must/ be a valid 'Vulkan.Core10.Handles.Buffer' handle
--
-- -   #VUID-VkGeneratedCommandsInfoNV-streamCount-arraylength#
--     @streamCount@ /must/ be greater than @0@
--
-- -   #VUID-VkGeneratedCommandsInfoNV-commonparent# Each of
--     @indirectCommandsLayout@, @pipeline@, @preprocessBuffer@,
--     @sequencesCountBuffer@, and @sequencesIndexBuffer@ 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_NV_device_generated_commands VK_NV_device_generated_commands>,
-- 'Vulkan.Core10.Handles.Buffer',
-- 'Vulkan.Core10.FundamentalTypes.DeviceSize',
-- 'Vulkan.Extensions.Handles.IndirectCommandsLayoutNV',
-- 'IndirectCommandsStreamNV', 'Vulkan.Core10.Handles.Pipeline',
-- 'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint',
-- 'Vulkan.Core10.Enums.StructureType.StructureType',
-- 'cmdExecuteGeneratedCommandsNV', 'cmdPreprocessGeneratedCommandsNV'
data GeneratedCommandsInfoNV = GeneratedCommandsInfoNV
  { -- | @pipelineBindPoint@ is the
    -- 'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' used for the
    -- @pipeline@.
    GeneratedCommandsInfoNV -> PipelineBindPoint
pipelineBindPoint :: PipelineBindPoint
  , -- | @pipeline@ is the 'Vulkan.Core10.Handles.Pipeline' used in the
    -- generation and execution process.
    GeneratedCommandsInfoNV -> Pipeline
pipeline :: Pipeline
  , -- | @indirectCommandsLayout@ is the
    -- 'Vulkan.Extensions.Handles.IndirectCommandsLayoutNV' that provides the
    -- command sequence to generate.
    GeneratedCommandsInfoNV -> IndirectCommandsLayoutNV
indirectCommandsLayout :: IndirectCommandsLayoutNV
  , -- | @pStreams@ is a pointer to an array of @streamCount@
    -- 'IndirectCommandsStreamNV' structures providing the input data for the
    -- tokens used in @indirectCommandsLayout@.
    GeneratedCommandsInfoNV -> Vector IndirectCommandsStreamNV
streams :: Vector IndirectCommandsStreamNV
  , -- | @sequencesCount@ is the maximum number of sequences to reserve. If
    -- @sequencesCountBuffer@ is 'Vulkan.Core10.APIConstants.NULL_HANDLE', this
    -- is also the actual number of sequences generated.
    GeneratedCommandsInfoNV -> Flags
sequencesCount :: Word32
  , -- | @preprocessBuffer@ is the 'Vulkan.Core10.Handles.Buffer' that is used
    -- for preprocessing the input data for execution. If this structure is
    -- used with 'cmdExecuteGeneratedCommandsNV' with its @isPreprocessed@ set
    -- to 'Vulkan.Core10.FundamentalTypes.TRUE', then the preprocessing step is
    -- skipped and data is only read from this buffer. The contents and the
    -- layout of this buffer is opaque to applications and /must/ not be
    -- modified or copied to another buffer for reuse.
    GeneratedCommandsInfoNV -> Buffer
preprocessBuffer :: Buffer
  , -- | @preprocessOffset@ is the byte offset into @preprocessBuffer@ where the
    -- preprocessed data is stored.
    GeneratedCommandsInfoNV -> DeviceAddress
preprocessOffset :: DeviceSize
  , -- | @preprocessSize@ is the maximum byte size within the @preprocessBuffer@
    -- after the @preprocessOffset@ that is available for preprocessing.
    GeneratedCommandsInfoNV -> DeviceAddress
preprocessSize :: DeviceSize
  , -- | @sequencesCountBuffer@ is a 'Vulkan.Core10.Handles.Buffer' in which the
    -- actual number of sequences is provided as single @uint32_t@ value.
    GeneratedCommandsInfoNV -> Buffer
sequencesCountBuffer :: Buffer
  , -- | @sequencesCountOffset@ is the byte offset into @sequencesCountBuffer@
    -- where the count value is stored.
    GeneratedCommandsInfoNV -> DeviceAddress
sequencesCountOffset :: DeviceSize
  , -- | @sequencesIndexBuffer@ is a 'Vulkan.Core10.Handles.Buffer' that encodes
    -- the used sequence indices as @uint32_t@ array.
    GeneratedCommandsInfoNV -> Buffer
sequencesIndexBuffer :: Buffer
  , -- | @sequencesIndexOffset@ is the byte offset into @sequencesIndexBuffer@
    -- where the index values start.
    GeneratedCommandsInfoNV -> DeviceAddress
sequencesIndexOffset :: DeviceSize
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (GeneratedCommandsInfoNV)
#endif
deriving instance Show GeneratedCommandsInfoNV

instance ToCStruct GeneratedCommandsInfoNV where
  withCStruct :: forall b.
GeneratedCommandsInfoNV
-> (("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
    -> IO b)
-> IO b
withCStruct GeneratedCommandsInfoNV
x ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV) -> IO b
f = Int
-> (("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
    -> IO b)
-> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
120 ((("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
  -> IO b)
 -> IO b)
-> (("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
    -> IO b)
-> IO b
forall a b. (a -> b) -> a -> b
$ \"pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV
p -> ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
-> GeneratedCommandsInfoNV -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct "pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV
p GeneratedCommandsInfoNV
x (("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV) -> IO b
f "pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV
p)
  pokeCStruct :: forall b.
("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
-> GeneratedCommandsInfoNV -> IO b -> IO b
pokeCStruct "pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV
p GeneratedCommandsInfoNV{Flags
DeviceAddress
Vector IndirectCommandsStreamNV
PipelineBindPoint
Pipeline
Buffer
IndirectCommandsLayoutNV
sequencesIndexOffset :: DeviceAddress
sequencesIndexBuffer :: Buffer
sequencesCountOffset :: DeviceAddress
sequencesCountBuffer :: Buffer
preprocessSize :: DeviceAddress
preprocessOffset :: DeviceAddress
preprocessBuffer :: Buffer
sequencesCount :: Flags
streams :: Vector IndirectCommandsStreamNV
indirectCommandsLayout :: IndirectCommandsLayoutNV
pipeline :: Pipeline
pipelineBindPoint :: PipelineBindPoint
$sel:sequencesIndexOffset:GeneratedCommandsInfoNV :: GeneratedCommandsInfoNV -> DeviceAddress
$sel:sequencesIndexBuffer:GeneratedCommandsInfoNV :: GeneratedCommandsInfoNV -> Buffer
$sel:sequencesCountOffset:GeneratedCommandsInfoNV :: GeneratedCommandsInfoNV -> DeviceAddress
$sel:sequencesCountBuffer:GeneratedCommandsInfoNV :: GeneratedCommandsInfoNV -> Buffer
$sel:preprocessSize:GeneratedCommandsInfoNV :: GeneratedCommandsInfoNV -> DeviceAddress
$sel:preprocessOffset:GeneratedCommandsInfoNV :: GeneratedCommandsInfoNV -> DeviceAddress
$sel:preprocessBuffer:GeneratedCommandsInfoNV :: GeneratedCommandsInfoNV -> Buffer
$sel:sequencesCount:GeneratedCommandsInfoNV :: GeneratedCommandsInfoNV -> Flags
$sel:streams:GeneratedCommandsInfoNV :: GeneratedCommandsInfoNV -> Vector IndirectCommandsStreamNV
$sel:indirectCommandsLayout:GeneratedCommandsInfoNV :: GeneratedCommandsInfoNV -> IndirectCommandsLayoutNV
$sel:pipeline:GeneratedCommandsInfoNV :: GeneratedCommandsInfoNV -> Pipeline
$sel:pipelineBindPoint:GeneratedCommandsInfoNV :: GeneratedCommandsInfoNV -> PipelineBindPoint
..} 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 (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 (("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV
p ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NV)
    IO () -> ContT b IO ()
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 (("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV
p ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
-> 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 (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 PipelineBindPoint -> PipelineBindPoint -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV
p ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
-> Int -> Ptr PipelineBindPoint
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr PipelineBindPoint)) (PipelineBindPoint
pipelineBindPoint)
    IO () -> ContT b IO ()
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 Pipeline -> Pipeline -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV
p ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
-> Int -> Ptr Pipeline
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Pipeline)) (Pipeline
pipeline)
    IO () -> ContT b IO ()
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
$ ("pIndirectCommandsLayout" ::: Ptr IndirectCommandsLayoutNV)
-> IndirectCommandsLayoutNV -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV
p ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
-> Int
-> "pIndirectCommandsLayout" ::: Ptr IndirectCommandsLayoutNV
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr IndirectCommandsLayoutNV)) (IndirectCommandsLayoutNV
indirectCommandsLayout)
    IO () -> ContT b IO ()
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 (("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV
p ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
-> 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 IndirectCommandsStreamNV -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector IndirectCommandsStreamNV -> Int)
-> Vector IndirectCommandsStreamNV -> Int
forall a b. (a -> b) -> a -> b
$ (Vector IndirectCommandsStreamNV
streams)) :: Word32))
    Ptr IndirectCommandsStreamNV
pPStreams' <- ((Ptr IndirectCommandsStreamNV -> IO b) -> IO b)
-> ContT b IO (Ptr IndirectCommandsStreamNV)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr IndirectCommandsStreamNV -> IO b) -> IO b)
 -> ContT b IO (Ptr IndirectCommandsStreamNV))
-> ((Ptr IndirectCommandsStreamNV -> IO b) -> IO b)
-> ContT b IO (Ptr IndirectCommandsStreamNV)
forall a b. (a -> b) -> a -> b
$ forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @IndirectCommandsStreamNV ((Vector IndirectCommandsStreamNV -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector IndirectCommandsStreamNV
streams)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
16)
    IO () -> ContT b IO ()
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 -> IndirectCommandsStreamNV -> IO ())
-> Vector IndirectCommandsStreamNV -> IO ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i IndirectCommandsStreamNV
e -> Ptr IndirectCommandsStreamNV -> IndirectCommandsStreamNV -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr IndirectCommandsStreamNV
pPStreams' Ptr IndirectCommandsStreamNV -> Int -> Ptr IndirectCommandsStreamNV
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
16 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr IndirectCommandsStreamNV) (IndirectCommandsStreamNV
e)) (Vector IndirectCommandsStreamNV
streams)
    IO () -> ContT b IO ()
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 IndirectCommandsStreamNV)
-> Ptr IndirectCommandsStreamNV -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV
p ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
-> Int -> Ptr (Ptr IndirectCommandsStreamNV)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr (Ptr IndirectCommandsStreamNV))) (Ptr IndirectCommandsStreamNV
pPStreams')
    IO () -> ContT b IO ()
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 (("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV
p ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
-> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
56 :: Ptr Word32)) (Flags
sequencesCount)
    IO () -> ContT b IO ()
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 Buffer -> Buffer -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV
p ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
-> Int -> Ptr Buffer
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
64 :: Ptr Buffer)) (Buffer
preprocessBuffer)
    IO () -> ContT b IO ()
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 (("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV
p ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
-> Int -> Ptr DeviceAddress
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
72 :: Ptr DeviceSize)) (DeviceAddress
preprocessOffset)
    IO () -> ContT b IO ()
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 (("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV
p ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
-> Int -> Ptr DeviceAddress
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
80 :: Ptr DeviceSize)) (DeviceAddress
preprocessSize)
    IO () -> ContT b IO ()
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 Buffer -> Buffer -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV
p ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
-> Int -> Ptr Buffer
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
88 :: Ptr Buffer)) (Buffer
sequencesCountBuffer)
    IO () -> ContT b IO ()
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 (("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV
p ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
-> Int -> Ptr DeviceAddress
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
96 :: Ptr DeviceSize)) (DeviceAddress
sequencesCountOffset)
    IO () -> ContT b IO ()
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 Buffer -> Buffer -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV
p ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
-> Int -> Ptr Buffer
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
104 :: Ptr Buffer)) (Buffer
sequencesIndexBuffer)
    IO () -> ContT b IO ()
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 (("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV
p ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
-> Int -> Ptr DeviceAddress
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
112 :: Ptr DeviceSize)) (DeviceAddress
sequencesIndexOffset)
    IO b -> ContT b IO b
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
120
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b.
("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
-> IO b -> IO b
pokeZeroCStruct "pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV
p ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NV)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV
p ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr PipelineBindPoint -> PipelineBindPoint -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV
p ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
-> Int -> Ptr PipelineBindPoint
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr PipelineBindPoint)) (PipelineBindPoint
forall a. Zero a => a
zero)
    Ptr Pipeline -> Pipeline -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV
p ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
-> Int -> Ptr Pipeline
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Pipeline)) (Pipeline
forall a. Zero a => a
zero)
    ("pIndirectCommandsLayout" ::: Ptr IndirectCommandsLayoutNV)
-> IndirectCommandsLayoutNV -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV
p ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
-> Int
-> "pIndirectCommandsLayout" ::: Ptr IndirectCommandsLayoutNV
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr IndirectCommandsLayoutNV)) (IndirectCommandsLayoutNV
forall a. Zero a => a
zero)
    Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV
p ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
-> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
56 :: Ptr Word32)) (Flags
forall a. Zero a => a
zero)
    Ptr Buffer -> Buffer -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV
p ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
-> Int -> Ptr Buffer
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
64 :: Ptr Buffer)) (Buffer
forall a. Zero a => a
zero)
    Ptr DeviceAddress -> DeviceAddress -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV
p ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
-> Int -> Ptr DeviceAddress
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
72 :: Ptr DeviceSize)) (DeviceAddress
forall a. Zero a => a
zero)
    Ptr DeviceAddress -> DeviceAddress -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV
p ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
-> Int -> Ptr DeviceAddress
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
80 :: Ptr DeviceSize)) (DeviceAddress
forall a. Zero a => a
zero)
    Ptr DeviceAddress -> DeviceAddress -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV
p ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
-> Int -> Ptr DeviceAddress
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
96 :: Ptr DeviceSize)) (DeviceAddress
forall a. Zero a => a
zero)
    Ptr DeviceAddress -> DeviceAddress -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV
p ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
-> Int -> Ptr DeviceAddress
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
112 :: Ptr DeviceSize)) (DeviceAddress
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct GeneratedCommandsInfoNV where
  peekCStruct :: ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
-> IO GeneratedCommandsInfoNV
peekCStruct "pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV
p = do
    PipelineBindPoint
pipelineBindPoint <- forall a. Storable a => Ptr a -> IO a
peek @PipelineBindPoint (("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV
p ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
-> Int -> Ptr PipelineBindPoint
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr PipelineBindPoint))
    Pipeline
pipeline <- forall a. Storable a => Ptr a -> IO a
peek @Pipeline (("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV
p ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
-> Int -> Ptr Pipeline
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Pipeline))
    IndirectCommandsLayoutNV
indirectCommandsLayout <- forall a. Storable a => Ptr a -> IO a
peek @IndirectCommandsLayoutNV (("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV
p ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
-> Int
-> "pIndirectCommandsLayout" ::: Ptr IndirectCommandsLayoutNV
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr IndirectCommandsLayoutNV))
    Flags
streamCount <- forall a. Storable a => Ptr a -> IO a
peek @Word32 (("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV
p ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
-> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr Word32))
    Ptr IndirectCommandsStreamNV
pStreams <- forall a. Storable a => Ptr a -> IO a
peek @(Ptr IndirectCommandsStreamNV) (("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV
p ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
-> Int -> Ptr (Ptr IndirectCommandsStreamNV)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr (Ptr IndirectCommandsStreamNV)))
    Vector IndirectCommandsStreamNV
pStreams' <- Int
-> (Int -> IO IndirectCommandsStreamNV)
-> IO (Vector IndirectCommandsStreamNV)
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
streamCount) (\Int
i -> forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @IndirectCommandsStreamNV ((Ptr IndirectCommandsStreamNV
pStreams Ptr IndirectCommandsStreamNV -> Int -> Ptr IndirectCommandsStreamNV
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
16 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr IndirectCommandsStreamNV)))
    Flags
sequencesCount <- forall a. Storable a => Ptr a -> IO a
peek @Word32 (("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV
p ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
-> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
56 :: Ptr Word32))
    Buffer
preprocessBuffer <- forall a. Storable a => Ptr a -> IO a
peek @Buffer (("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV
p ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
-> Int -> Ptr Buffer
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
64 :: Ptr Buffer))
    DeviceAddress
preprocessOffset <- forall a. Storable a => Ptr a -> IO a
peek @DeviceSize (("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV
p ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
-> Int -> Ptr DeviceAddress
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
72 :: Ptr DeviceSize))
    DeviceAddress
preprocessSize <- forall a. Storable a => Ptr a -> IO a
peek @DeviceSize (("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV
p ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
-> Int -> Ptr DeviceAddress
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
80 :: Ptr DeviceSize))
    Buffer
sequencesCountBuffer <- forall a. Storable a => Ptr a -> IO a
peek @Buffer (("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV
p ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
-> Int -> Ptr Buffer
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
88 :: Ptr Buffer))
    DeviceAddress
sequencesCountOffset <- forall a. Storable a => Ptr a -> IO a
peek @DeviceSize (("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV
p ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
-> Int -> Ptr DeviceAddress
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
96 :: Ptr DeviceSize))
    Buffer
sequencesIndexBuffer <- forall a. Storable a => Ptr a -> IO a
peek @Buffer (("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV
p ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
-> Int -> Ptr Buffer
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
104 :: Ptr Buffer))
    DeviceAddress
sequencesIndexOffset <- forall a. Storable a => Ptr a -> IO a
peek @DeviceSize (("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV
p ("pGeneratedCommandsInfo" ::: Ptr GeneratedCommandsInfoNV)
-> Int -> Ptr DeviceAddress
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
112 :: Ptr DeviceSize))
    GeneratedCommandsInfoNV -> IO GeneratedCommandsInfoNV
forall (f :: * -> *) a. Applicative f => a -> f a
pure (GeneratedCommandsInfoNV -> IO GeneratedCommandsInfoNV)
-> GeneratedCommandsInfoNV -> IO GeneratedCommandsInfoNV
forall a b. (a -> b) -> a -> b
$ PipelineBindPoint
-> Pipeline
-> IndirectCommandsLayoutNV
-> Vector IndirectCommandsStreamNV
-> Flags
-> Buffer
-> DeviceAddress
-> DeviceAddress
-> Buffer
-> DeviceAddress
-> Buffer
-> DeviceAddress
-> GeneratedCommandsInfoNV
GeneratedCommandsInfoNV
             PipelineBindPoint
pipelineBindPoint
             Pipeline
pipeline
             IndirectCommandsLayoutNV
indirectCommandsLayout
             Vector IndirectCommandsStreamNV
pStreams'
             Flags
sequencesCount
             Buffer
preprocessBuffer
             DeviceAddress
preprocessOffset
             DeviceAddress
preprocessSize
             Buffer
sequencesCountBuffer
             DeviceAddress
sequencesCountOffset
             Buffer
sequencesIndexBuffer
             DeviceAddress
sequencesIndexOffset

instance Zero GeneratedCommandsInfoNV where
  zero :: GeneratedCommandsInfoNV
zero = PipelineBindPoint
-> Pipeline
-> IndirectCommandsLayoutNV
-> Vector IndirectCommandsStreamNV
-> Flags
-> Buffer
-> DeviceAddress
-> DeviceAddress
-> Buffer
-> DeviceAddress
-> Buffer
-> DeviceAddress
-> GeneratedCommandsInfoNV
GeneratedCommandsInfoNV
           PipelineBindPoint
forall a. Zero a => a
zero
           Pipeline
forall a. Zero a => a
zero
           IndirectCommandsLayoutNV
forall a. Zero a => a
zero
           Vector IndirectCommandsStreamNV
forall a. Monoid a => a
mempty
           Flags
forall a. Zero a => a
zero
           Buffer
forall a. Zero a => a
zero
           DeviceAddress
forall a. Zero a => a
zero
           DeviceAddress
forall a. Zero a => a
zero
           Buffer
forall a. Zero a => a
zero
           DeviceAddress
forall a. Zero a => a
zero
           Buffer
forall a. Zero a => a
zero
           DeviceAddress
forall a. Zero a => a
zero


-- | VkGeneratedCommandsMemoryRequirementsInfoNV - Structure specifying
-- parameters for the reservation of preprocess buffer space
--
-- == Valid Usage
--
-- -   #VUID-VkGeneratedCommandsMemoryRequirementsInfoNV-maxSequencesCount-02907#
--     @maxSequencesCount@ /must/ be less or equal to
--     'PhysicalDeviceDeviceGeneratedCommandsPropertiesNV'::@maxIndirectSequenceCount@
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkGeneratedCommandsMemoryRequirementsInfoNV-sType-sType#
--     @sType@ /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV'
--
-- -   #VUID-VkGeneratedCommandsMemoryRequirementsInfoNV-pNext-pNext#
--     @pNext@ /must/ be @NULL@
--
-- -   #VUID-VkGeneratedCommandsMemoryRequirementsInfoNV-pipelineBindPoint-parameter#
--     @pipelineBindPoint@ /must/ be a valid
--     'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' value
--
-- -   #VUID-VkGeneratedCommandsMemoryRequirementsInfoNV-pipeline-parameter#
--     @pipeline@ /must/ be a valid 'Vulkan.Core10.Handles.Pipeline' handle
--
-- -   #VUID-VkGeneratedCommandsMemoryRequirementsInfoNV-indirectCommandsLayout-parameter#
--     @indirectCommandsLayout@ /must/ be a valid
--     'Vulkan.Extensions.Handles.IndirectCommandsLayoutNV' handle
--
-- -   #VUID-VkGeneratedCommandsMemoryRequirementsInfoNV-commonparent# Both
--     of @indirectCommandsLayout@, and @pipeline@ /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_NV_device_generated_commands VK_NV_device_generated_commands>,
-- 'Vulkan.Extensions.Handles.IndirectCommandsLayoutNV',
-- 'Vulkan.Core10.Handles.Pipeline',
-- 'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint',
-- 'Vulkan.Core10.Enums.StructureType.StructureType',
-- 'getGeneratedCommandsMemoryRequirementsNV'
data GeneratedCommandsMemoryRequirementsInfoNV = GeneratedCommandsMemoryRequirementsInfoNV
  { -- | @pipelineBindPoint@ is the
    -- 'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint' of the
    -- @pipeline@ that this buffer memory is intended to be used with during
    -- the execution.
    GeneratedCommandsMemoryRequirementsInfoNV -> PipelineBindPoint
pipelineBindPoint :: PipelineBindPoint
  , -- | @pipeline@ is the 'Vulkan.Core10.Handles.Pipeline' that this buffer
    -- memory is intended to be used with during the execution.
    GeneratedCommandsMemoryRequirementsInfoNV -> Pipeline
pipeline :: Pipeline
  , -- | @indirectCommandsLayout@ is the
    -- 'Vulkan.Extensions.Handles.IndirectCommandsLayoutNV' that this buffer
    -- memory is intended to be used with.
    GeneratedCommandsMemoryRequirementsInfoNV
-> IndirectCommandsLayoutNV
indirectCommandsLayout :: IndirectCommandsLayoutNV
  , -- | @maxSequencesCount@ is the maximum number of sequences that this buffer
    -- memory in combination with the other state provided /can/ be used with.
    GeneratedCommandsMemoryRequirementsInfoNV -> Flags
maxSequencesCount :: Word32
  }
  deriving (Typeable, GeneratedCommandsMemoryRequirementsInfoNV
-> GeneratedCommandsMemoryRequirementsInfoNV
-> "isPreprocessed" ::: Bool
(GeneratedCommandsMemoryRequirementsInfoNV
 -> GeneratedCommandsMemoryRequirementsInfoNV
 -> "isPreprocessed" ::: Bool)
-> (GeneratedCommandsMemoryRequirementsInfoNV
    -> GeneratedCommandsMemoryRequirementsInfoNV
    -> "isPreprocessed" ::: Bool)
-> Eq GeneratedCommandsMemoryRequirementsInfoNV
forall a.
(a -> a -> "isPreprocessed" ::: Bool)
-> (a -> a -> "isPreprocessed" ::: Bool) -> Eq a
/= :: GeneratedCommandsMemoryRequirementsInfoNV
-> GeneratedCommandsMemoryRequirementsInfoNV
-> "isPreprocessed" ::: Bool
$c/= :: GeneratedCommandsMemoryRequirementsInfoNV
-> GeneratedCommandsMemoryRequirementsInfoNV
-> "isPreprocessed" ::: Bool
== :: GeneratedCommandsMemoryRequirementsInfoNV
-> GeneratedCommandsMemoryRequirementsInfoNV
-> "isPreprocessed" ::: Bool
$c== :: GeneratedCommandsMemoryRequirementsInfoNV
-> GeneratedCommandsMemoryRequirementsInfoNV
-> "isPreprocessed" ::: Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (GeneratedCommandsMemoryRequirementsInfoNV)
#endif
deriving instance Show GeneratedCommandsMemoryRequirementsInfoNV

instance ToCStruct GeneratedCommandsMemoryRequirementsInfoNV where
  withCStruct :: forall b.
GeneratedCommandsMemoryRequirementsInfoNV
-> (("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV)
    -> IO b)
-> IO b
withCStruct GeneratedCommandsMemoryRequirementsInfoNV
x ("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV) -> IO b
f = Int
-> (("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV)
    -> IO b)
-> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
48 ((("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV)
  -> IO b)
 -> IO b)
-> (("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV)
    -> IO b)
-> IO b
forall a b. (a -> b) -> a -> b
$ \"pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV
p -> ("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV)
-> GeneratedCommandsMemoryRequirementsInfoNV -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct "pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV
p GeneratedCommandsMemoryRequirementsInfoNV
x (("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV) -> IO b
f "pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV
p)
  pokeCStruct :: forall b.
("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV)
-> GeneratedCommandsMemoryRequirementsInfoNV -> IO b -> IO b
pokeCStruct "pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV
p GeneratedCommandsMemoryRequirementsInfoNV{Flags
PipelineBindPoint
Pipeline
IndirectCommandsLayoutNV
maxSequencesCount :: Flags
indirectCommandsLayout :: IndirectCommandsLayoutNV
pipeline :: Pipeline
pipelineBindPoint :: PipelineBindPoint
$sel:maxSequencesCount:GeneratedCommandsMemoryRequirementsInfoNV :: GeneratedCommandsMemoryRequirementsInfoNV -> Flags
$sel:indirectCommandsLayout:GeneratedCommandsMemoryRequirementsInfoNV :: GeneratedCommandsMemoryRequirementsInfoNV
-> IndirectCommandsLayoutNV
$sel:pipeline:GeneratedCommandsMemoryRequirementsInfoNV :: GeneratedCommandsMemoryRequirementsInfoNV -> Pipeline
$sel:pipelineBindPoint:GeneratedCommandsMemoryRequirementsInfoNV :: GeneratedCommandsMemoryRequirementsInfoNV -> PipelineBindPoint
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV
p ("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV)
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV
p ("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV)
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr PipelineBindPoint -> PipelineBindPoint -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV
p ("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV)
-> Int -> Ptr PipelineBindPoint
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr PipelineBindPoint)) (PipelineBindPoint
pipelineBindPoint)
    Ptr Pipeline -> Pipeline -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV
p ("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV)
-> Int -> Ptr Pipeline
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Pipeline)) (Pipeline
pipeline)
    ("pIndirectCommandsLayout" ::: Ptr IndirectCommandsLayoutNV)
-> IndirectCommandsLayoutNV -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV
p ("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV)
-> Int
-> "pIndirectCommandsLayout" ::: Ptr IndirectCommandsLayoutNV
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr IndirectCommandsLayoutNV)) (IndirectCommandsLayoutNV
indirectCommandsLayout)
    Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV
p ("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV)
-> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr Word32)) (Flags
maxSequencesCount)
    IO b
f
  cStructSize :: Int
cStructSize = Int
48
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b.
("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV)
-> IO b -> IO b
pokeZeroCStruct "pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV
p ("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV)
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV
p ("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV)
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr PipelineBindPoint -> PipelineBindPoint -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV
p ("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV)
-> Int -> Ptr PipelineBindPoint
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr PipelineBindPoint)) (PipelineBindPoint
forall a. Zero a => a
zero)
    Ptr Pipeline -> Pipeline -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV
p ("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV)
-> Int -> Ptr Pipeline
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Pipeline)) (Pipeline
forall a. Zero a => a
zero)
    ("pIndirectCommandsLayout" ::: Ptr IndirectCommandsLayoutNV)
-> IndirectCommandsLayoutNV -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV
p ("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV)
-> Int
-> "pIndirectCommandsLayout" ::: Ptr IndirectCommandsLayoutNV
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr IndirectCommandsLayoutNV)) (IndirectCommandsLayoutNV
forall a. Zero a => a
zero)
    Ptr Flags -> Flags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV
p ("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV)
-> 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 GeneratedCommandsMemoryRequirementsInfoNV where
  peekCStruct :: ("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV)
-> IO GeneratedCommandsMemoryRequirementsInfoNV
peekCStruct "pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV
p = do
    PipelineBindPoint
pipelineBindPoint <- forall a. Storable a => Ptr a -> IO a
peek @PipelineBindPoint (("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV
p ("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV)
-> Int -> Ptr PipelineBindPoint
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr PipelineBindPoint))
    Pipeline
pipeline <- forall a. Storable a => Ptr a -> IO a
peek @Pipeline (("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV
p ("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV)
-> Int -> Ptr Pipeline
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Pipeline))
    IndirectCommandsLayoutNV
indirectCommandsLayout <- forall a. Storable a => Ptr a -> IO a
peek @IndirectCommandsLayoutNV (("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV
p ("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV)
-> Int
-> "pIndirectCommandsLayout" ::: Ptr IndirectCommandsLayoutNV
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr IndirectCommandsLayoutNV))
    Flags
maxSequencesCount <- forall a. Storable a => Ptr a -> IO a
peek @Word32 (("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV
p ("pInfo" ::: Ptr GeneratedCommandsMemoryRequirementsInfoNV)
-> Int -> Ptr Flags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr Word32))
    GeneratedCommandsMemoryRequirementsInfoNV
-> IO GeneratedCommandsMemoryRequirementsInfoNV
forall (f :: * -> *) a. Applicative f => a -> f a
pure (GeneratedCommandsMemoryRequirementsInfoNV
 -> IO GeneratedCommandsMemoryRequirementsInfoNV)
-> GeneratedCommandsMemoryRequirementsInfoNV
-> IO GeneratedCommandsMemoryRequirementsInfoNV
forall a b. (a -> b) -> a -> b
$ PipelineBindPoint
-> Pipeline
-> IndirectCommandsLayoutNV
-> Flags
-> GeneratedCommandsMemoryRequirementsInfoNV
GeneratedCommandsMemoryRequirementsInfoNV
             PipelineBindPoint
pipelineBindPoint Pipeline
pipeline IndirectCommandsLayoutNV
indirectCommandsLayout Flags
maxSequencesCount

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

instance Zero GeneratedCommandsMemoryRequirementsInfoNV where
  zero :: GeneratedCommandsMemoryRequirementsInfoNV
zero = PipelineBindPoint
-> Pipeline
-> IndirectCommandsLayoutNV
-> Flags
-> GeneratedCommandsMemoryRequirementsInfoNV
GeneratedCommandsMemoryRequirementsInfoNV
           PipelineBindPoint
forall a. Zero a => a
zero
           Pipeline
forall a. Zero a => a
zero
           IndirectCommandsLayoutNV
forall a. Zero a => a
zero
           Flags
forall a. Zero a => a
zero


type IndirectCommandsLayoutUsageFlagsNV = IndirectCommandsLayoutUsageFlagBitsNV

-- | VkIndirectCommandsLayoutUsageFlagBitsNV - 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_NV_device_generated_commands VK_NV_device_generated_commands>,
-- 'IndirectCommandsLayoutUsageFlagsNV'
newtype IndirectCommandsLayoutUsageFlagBitsNV = IndirectCommandsLayoutUsageFlagBitsNV Flags
  deriving newtype (IndirectCommandsLayoutUsageFlagBitsNV
-> IndirectCommandsLayoutUsageFlagBitsNV
-> "isPreprocessed" ::: Bool
(IndirectCommandsLayoutUsageFlagBitsNV
 -> IndirectCommandsLayoutUsageFlagBitsNV
 -> "isPreprocessed" ::: Bool)
-> (IndirectCommandsLayoutUsageFlagBitsNV
    -> IndirectCommandsLayoutUsageFlagBitsNV
    -> "isPreprocessed" ::: Bool)
-> Eq IndirectCommandsLayoutUsageFlagBitsNV
forall a.
(a -> a -> "isPreprocessed" ::: Bool)
-> (a -> a -> "isPreprocessed" ::: Bool) -> Eq a
/= :: IndirectCommandsLayoutUsageFlagBitsNV
-> IndirectCommandsLayoutUsageFlagBitsNV
-> "isPreprocessed" ::: Bool
$c/= :: IndirectCommandsLayoutUsageFlagBitsNV
-> IndirectCommandsLayoutUsageFlagBitsNV
-> "isPreprocessed" ::: Bool
== :: IndirectCommandsLayoutUsageFlagBitsNV
-> IndirectCommandsLayoutUsageFlagBitsNV
-> "isPreprocessed" ::: Bool
$c== :: IndirectCommandsLayoutUsageFlagBitsNV
-> IndirectCommandsLayoutUsageFlagBitsNV
-> "isPreprocessed" ::: Bool
Eq, Eq IndirectCommandsLayoutUsageFlagBitsNV
Eq IndirectCommandsLayoutUsageFlagBitsNV
-> (IndirectCommandsLayoutUsageFlagBitsNV
    -> IndirectCommandsLayoutUsageFlagBitsNV -> Ordering)
-> (IndirectCommandsLayoutUsageFlagBitsNV
    -> IndirectCommandsLayoutUsageFlagBitsNV
    -> "isPreprocessed" ::: Bool)
-> (IndirectCommandsLayoutUsageFlagBitsNV
    -> IndirectCommandsLayoutUsageFlagBitsNV
    -> "isPreprocessed" ::: Bool)
-> (IndirectCommandsLayoutUsageFlagBitsNV
    -> IndirectCommandsLayoutUsageFlagBitsNV
    -> "isPreprocessed" ::: Bool)
-> (IndirectCommandsLayoutUsageFlagBitsNV
    -> IndirectCommandsLayoutUsageFlagBitsNV
    -> "isPreprocessed" ::: Bool)
-> (IndirectCommandsLayoutUsageFlagBitsNV
    -> IndirectCommandsLayoutUsageFlagBitsNV
    -> IndirectCommandsLayoutUsageFlagBitsNV)
-> (IndirectCommandsLayoutUsageFlagBitsNV
    -> IndirectCommandsLayoutUsageFlagBitsNV
    -> IndirectCommandsLayoutUsageFlagBitsNV)
-> Ord IndirectCommandsLayoutUsageFlagBitsNV
IndirectCommandsLayoutUsageFlagBitsNV
-> IndirectCommandsLayoutUsageFlagBitsNV
-> "isPreprocessed" ::: Bool
IndirectCommandsLayoutUsageFlagBitsNV
-> IndirectCommandsLayoutUsageFlagBitsNV -> Ordering
IndirectCommandsLayoutUsageFlagBitsNV
-> IndirectCommandsLayoutUsageFlagBitsNV
-> IndirectCommandsLayoutUsageFlagBitsNV
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
min :: IndirectCommandsLayoutUsageFlagBitsNV
-> IndirectCommandsLayoutUsageFlagBitsNV
-> IndirectCommandsLayoutUsageFlagBitsNV
$cmin :: IndirectCommandsLayoutUsageFlagBitsNV
-> IndirectCommandsLayoutUsageFlagBitsNV
-> IndirectCommandsLayoutUsageFlagBitsNV
max :: IndirectCommandsLayoutUsageFlagBitsNV
-> IndirectCommandsLayoutUsageFlagBitsNV
-> IndirectCommandsLayoutUsageFlagBitsNV
$cmax :: IndirectCommandsLayoutUsageFlagBitsNV
-> IndirectCommandsLayoutUsageFlagBitsNV
-> IndirectCommandsLayoutUsageFlagBitsNV
>= :: IndirectCommandsLayoutUsageFlagBitsNV
-> IndirectCommandsLayoutUsageFlagBitsNV
-> "isPreprocessed" ::: Bool
$c>= :: IndirectCommandsLayoutUsageFlagBitsNV
-> IndirectCommandsLayoutUsageFlagBitsNV
-> "isPreprocessed" ::: Bool
> :: IndirectCommandsLayoutUsageFlagBitsNV
-> IndirectCommandsLayoutUsageFlagBitsNV
-> "isPreprocessed" ::: Bool
$c> :: IndirectCommandsLayoutUsageFlagBitsNV
-> IndirectCommandsLayoutUsageFlagBitsNV
-> "isPreprocessed" ::: Bool
<= :: IndirectCommandsLayoutUsageFlagBitsNV
-> IndirectCommandsLayoutUsageFlagBitsNV
-> "isPreprocessed" ::: Bool
$c<= :: IndirectCommandsLayoutUsageFlagBitsNV
-> IndirectCommandsLayoutUsageFlagBitsNV
-> "isPreprocessed" ::: Bool
< :: IndirectCommandsLayoutUsageFlagBitsNV
-> IndirectCommandsLayoutUsageFlagBitsNV
-> "isPreprocessed" ::: Bool
$c< :: IndirectCommandsLayoutUsageFlagBitsNV
-> IndirectCommandsLayoutUsageFlagBitsNV
-> "isPreprocessed" ::: Bool
compare :: IndirectCommandsLayoutUsageFlagBitsNV
-> IndirectCommandsLayoutUsageFlagBitsNV -> Ordering
$ccompare :: IndirectCommandsLayoutUsageFlagBitsNV
-> IndirectCommandsLayoutUsageFlagBitsNV -> Ordering
Ord, Ptr IndirectCommandsLayoutUsageFlagBitsNV
-> IO IndirectCommandsLayoutUsageFlagBitsNV
Ptr IndirectCommandsLayoutUsageFlagBitsNV
-> Int -> IO IndirectCommandsLayoutUsageFlagBitsNV
Ptr IndirectCommandsLayoutUsageFlagBitsNV
-> Int -> IndirectCommandsLayoutUsageFlagBitsNV -> IO ()
Ptr IndirectCommandsLayoutUsageFlagBitsNV
-> IndirectCommandsLayoutUsageFlagBitsNV -> IO ()
IndirectCommandsLayoutUsageFlagBitsNV -> Int
(IndirectCommandsLayoutUsageFlagBitsNV -> Int)
-> (IndirectCommandsLayoutUsageFlagBitsNV -> Int)
-> (Ptr IndirectCommandsLayoutUsageFlagBitsNV
    -> Int -> IO IndirectCommandsLayoutUsageFlagBitsNV)
-> (Ptr IndirectCommandsLayoutUsageFlagBitsNV
    -> Int -> IndirectCommandsLayoutUsageFlagBitsNV -> IO ())
-> (forall b.
    Ptr b -> Int -> IO IndirectCommandsLayoutUsageFlagBitsNV)
-> (forall b.
    Ptr b -> Int -> IndirectCommandsLayoutUsageFlagBitsNV -> IO ())
-> (Ptr IndirectCommandsLayoutUsageFlagBitsNV
    -> IO IndirectCommandsLayoutUsageFlagBitsNV)
-> (Ptr IndirectCommandsLayoutUsageFlagBitsNV
    -> IndirectCommandsLayoutUsageFlagBitsNV -> IO ())
-> Storable IndirectCommandsLayoutUsageFlagBitsNV
forall b. Ptr b -> Int -> IO IndirectCommandsLayoutUsageFlagBitsNV
forall b.
Ptr b -> Int -> IndirectCommandsLayoutUsageFlagBitsNV -> 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
poke :: Ptr IndirectCommandsLayoutUsageFlagBitsNV
-> IndirectCommandsLayoutUsageFlagBitsNV -> IO ()
$cpoke :: Ptr IndirectCommandsLayoutUsageFlagBitsNV
-> IndirectCommandsLayoutUsageFlagBitsNV -> IO ()
peek :: Ptr IndirectCommandsLayoutUsageFlagBitsNV
-> IO IndirectCommandsLayoutUsageFlagBitsNV
$cpeek :: Ptr IndirectCommandsLayoutUsageFlagBitsNV
-> IO IndirectCommandsLayoutUsageFlagBitsNV
pokeByteOff :: forall b.
Ptr b -> Int -> IndirectCommandsLayoutUsageFlagBitsNV -> IO ()
$cpokeByteOff :: forall b.
Ptr b -> Int -> IndirectCommandsLayoutUsageFlagBitsNV -> IO ()
peekByteOff :: forall b. Ptr b -> Int -> IO IndirectCommandsLayoutUsageFlagBitsNV
$cpeekByteOff :: forall b. Ptr b -> Int -> IO IndirectCommandsLayoutUsageFlagBitsNV
pokeElemOff :: Ptr IndirectCommandsLayoutUsageFlagBitsNV
-> Int -> IndirectCommandsLayoutUsageFlagBitsNV -> IO ()
$cpokeElemOff :: Ptr IndirectCommandsLayoutUsageFlagBitsNV
-> Int -> IndirectCommandsLayoutUsageFlagBitsNV -> IO ()
peekElemOff :: Ptr IndirectCommandsLayoutUsageFlagBitsNV
-> Int -> IO IndirectCommandsLayoutUsageFlagBitsNV
$cpeekElemOff :: Ptr IndirectCommandsLayoutUsageFlagBitsNV
-> Int -> IO IndirectCommandsLayoutUsageFlagBitsNV
alignment :: IndirectCommandsLayoutUsageFlagBitsNV -> Int
$calignment :: IndirectCommandsLayoutUsageFlagBitsNV -> Int
sizeOf :: IndirectCommandsLayoutUsageFlagBitsNV -> Int
$csizeOf :: IndirectCommandsLayoutUsageFlagBitsNV -> Int
Storable, IndirectCommandsLayoutUsageFlagBitsNV
IndirectCommandsLayoutUsageFlagBitsNV
-> Zero IndirectCommandsLayoutUsageFlagBitsNV
forall a. a -> Zero a
zero :: IndirectCommandsLayoutUsageFlagBitsNV
$czero :: IndirectCommandsLayoutUsageFlagBitsNV
Zero, Eq IndirectCommandsLayoutUsageFlagBitsNV
IndirectCommandsLayoutUsageFlagBitsNV
Eq IndirectCommandsLayoutUsageFlagBitsNV
-> (IndirectCommandsLayoutUsageFlagBitsNV
    -> IndirectCommandsLayoutUsageFlagBitsNV
    -> IndirectCommandsLayoutUsageFlagBitsNV)
-> (IndirectCommandsLayoutUsageFlagBitsNV
    -> IndirectCommandsLayoutUsageFlagBitsNV
    -> IndirectCommandsLayoutUsageFlagBitsNV)
-> (IndirectCommandsLayoutUsageFlagBitsNV
    -> IndirectCommandsLayoutUsageFlagBitsNV
    -> IndirectCommandsLayoutUsageFlagBitsNV)
-> (IndirectCommandsLayoutUsageFlagBitsNV
    -> IndirectCommandsLayoutUsageFlagBitsNV)
-> (IndirectCommandsLayoutUsageFlagBitsNV
    -> Int -> IndirectCommandsLayoutUsageFlagBitsNV)
-> (IndirectCommandsLayoutUsageFlagBitsNV
    -> Int -> IndirectCommandsLayoutUsageFlagBitsNV)
-> IndirectCommandsLayoutUsageFlagBitsNV
-> (Int -> IndirectCommandsLayoutUsageFlagBitsNV)
-> (IndirectCommandsLayoutUsageFlagBitsNV
    -> Int -> IndirectCommandsLayoutUsageFlagBitsNV)
-> (IndirectCommandsLayoutUsageFlagBitsNV
    -> Int -> IndirectCommandsLayoutUsageFlagBitsNV)
-> (IndirectCommandsLayoutUsageFlagBitsNV
    -> Int -> IndirectCommandsLayoutUsageFlagBitsNV)
-> (IndirectCommandsLayoutUsageFlagBitsNV
    -> Int -> "isPreprocessed" ::: Bool)
-> (IndirectCommandsLayoutUsageFlagBitsNV -> Maybe Int)
-> (IndirectCommandsLayoutUsageFlagBitsNV -> Int)
-> (IndirectCommandsLayoutUsageFlagBitsNV
    -> "isPreprocessed" ::: Bool)
-> (IndirectCommandsLayoutUsageFlagBitsNV
    -> Int -> IndirectCommandsLayoutUsageFlagBitsNV)
-> (IndirectCommandsLayoutUsageFlagBitsNV
    -> Int -> IndirectCommandsLayoutUsageFlagBitsNV)
-> (IndirectCommandsLayoutUsageFlagBitsNV
    -> Int -> IndirectCommandsLayoutUsageFlagBitsNV)
-> (IndirectCommandsLayoutUsageFlagBitsNV
    -> Int -> IndirectCommandsLayoutUsageFlagBitsNV)
-> (IndirectCommandsLayoutUsageFlagBitsNV
    -> Int -> IndirectCommandsLayoutUsageFlagBitsNV)
-> (IndirectCommandsLayoutUsageFlagBitsNV
    -> Int -> IndirectCommandsLayoutUsageFlagBitsNV)
-> (IndirectCommandsLayoutUsageFlagBitsNV -> Int)
-> Bits IndirectCommandsLayoutUsageFlagBitsNV
Int -> IndirectCommandsLayoutUsageFlagBitsNV
IndirectCommandsLayoutUsageFlagBitsNV -> "isPreprocessed" ::: Bool
IndirectCommandsLayoutUsageFlagBitsNV -> Int
IndirectCommandsLayoutUsageFlagBitsNV -> Maybe Int
IndirectCommandsLayoutUsageFlagBitsNV
-> IndirectCommandsLayoutUsageFlagBitsNV
IndirectCommandsLayoutUsageFlagBitsNV
-> Int -> "isPreprocessed" ::: Bool
IndirectCommandsLayoutUsageFlagBitsNV
-> Int -> IndirectCommandsLayoutUsageFlagBitsNV
IndirectCommandsLayoutUsageFlagBitsNV
-> IndirectCommandsLayoutUsageFlagBitsNV
-> IndirectCommandsLayoutUsageFlagBitsNV
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
popCount :: IndirectCommandsLayoutUsageFlagBitsNV -> Int
$cpopCount :: IndirectCommandsLayoutUsageFlagBitsNV -> Int
rotateR :: IndirectCommandsLayoutUsageFlagBitsNV
-> Int -> IndirectCommandsLayoutUsageFlagBitsNV
$crotateR :: IndirectCommandsLayoutUsageFlagBitsNV
-> Int -> IndirectCommandsLayoutUsageFlagBitsNV
rotateL :: IndirectCommandsLayoutUsageFlagBitsNV
-> Int -> IndirectCommandsLayoutUsageFlagBitsNV
$crotateL :: IndirectCommandsLayoutUsageFlagBitsNV
-> Int -> IndirectCommandsLayoutUsageFlagBitsNV
unsafeShiftR :: IndirectCommandsLayoutUsageFlagBitsNV
-> Int -> IndirectCommandsLayoutUsageFlagBitsNV
$cunsafeShiftR :: IndirectCommandsLayoutUsageFlagBitsNV
-> Int -> IndirectCommandsLayoutUsageFlagBitsNV
shiftR :: IndirectCommandsLayoutUsageFlagBitsNV
-> Int -> IndirectCommandsLayoutUsageFlagBitsNV
$cshiftR :: IndirectCommandsLayoutUsageFlagBitsNV
-> Int -> IndirectCommandsLayoutUsageFlagBitsNV
unsafeShiftL :: IndirectCommandsLayoutUsageFlagBitsNV
-> Int -> IndirectCommandsLayoutUsageFlagBitsNV
$cunsafeShiftL :: IndirectCommandsLayoutUsageFlagBitsNV
-> Int -> IndirectCommandsLayoutUsageFlagBitsNV
shiftL :: IndirectCommandsLayoutUsageFlagBitsNV
-> Int -> IndirectCommandsLayoutUsageFlagBitsNV
$cshiftL :: IndirectCommandsLayoutUsageFlagBitsNV
-> Int -> IndirectCommandsLayoutUsageFlagBitsNV
isSigned :: IndirectCommandsLayoutUsageFlagBitsNV -> "isPreprocessed" ::: Bool
$cisSigned :: IndirectCommandsLayoutUsageFlagBitsNV -> "isPreprocessed" ::: Bool
bitSize :: IndirectCommandsLayoutUsageFlagBitsNV -> Int
$cbitSize :: IndirectCommandsLayoutUsageFlagBitsNV -> Int
bitSizeMaybe :: IndirectCommandsLayoutUsageFlagBitsNV -> Maybe Int
$cbitSizeMaybe :: IndirectCommandsLayoutUsageFlagBitsNV -> Maybe Int
testBit :: IndirectCommandsLayoutUsageFlagBitsNV
-> Int -> "isPreprocessed" ::: Bool
$ctestBit :: IndirectCommandsLayoutUsageFlagBitsNV
-> Int -> "isPreprocessed" ::: Bool
complementBit :: IndirectCommandsLayoutUsageFlagBitsNV
-> Int -> IndirectCommandsLayoutUsageFlagBitsNV
$ccomplementBit :: IndirectCommandsLayoutUsageFlagBitsNV
-> Int -> IndirectCommandsLayoutUsageFlagBitsNV
clearBit :: IndirectCommandsLayoutUsageFlagBitsNV
-> Int -> IndirectCommandsLayoutUsageFlagBitsNV
$cclearBit :: IndirectCommandsLayoutUsageFlagBitsNV
-> Int -> IndirectCommandsLayoutUsageFlagBitsNV
setBit :: IndirectCommandsLayoutUsageFlagBitsNV
-> Int -> IndirectCommandsLayoutUsageFlagBitsNV
$csetBit :: IndirectCommandsLayoutUsageFlagBitsNV
-> Int -> IndirectCommandsLayoutUsageFlagBitsNV
bit :: Int -> IndirectCommandsLayoutUsageFlagBitsNV
$cbit :: Int -> IndirectCommandsLayoutUsageFlagBitsNV
zeroBits :: IndirectCommandsLayoutUsageFlagBitsNV
$czeroBits :: IndirectCommandsLayoutUsageFlagBitsNV
rotate :: IndirectCommandsLayoutUsageFlagBitsNV
-> Int -> IndirectCommandsLayoutUsageFlagBitsNV
$crotate :: IndirectCommandsLayoutUsageFlagBitsNV
-> Int -> IndirectCommandsLayoutUsageFlagBitsNV
shift :: IndirectCommandsLayoutUsageFlagBitsNV
-> Int -> IndirectCommandsLayoutUsageFlagBitsNV
$cshift :: IndirectCommandsLayoutUsageFlagBitsNV
-> Int -> IndirectCommandsLayoutUsageFlagBitsNV
complement :: IndirectCommandsLayoutUsageFlagBitsNV
-> IndirectCommandsLayoutUsageFlagBitsNV
$ccomplement :: IndirectCommandsLayoutUsageFlagBitsNV
-> IndirectCommandsLayoutUsageFlagBitsNV
xor :: IndirectCommandsLayoutUsageFlagBitsNV
-> IndirectCommandsLayoutUsageFlagBitsNV
-> IndirectCommandsLayoutUsageFlagBitsNV
$cxor :: IndirectCommandsLayoutUsageFlagBitsNV
-> IndirectCommandsLayoutUsageFlagBitsNV
-> IndirectCommandsLayoutUsageFlagBitsNV
.|. :: IndirectCommandsLayoutUsageFlagBitsNV
-> IndirectCommandsLayoutUsageFlagBitsNV
-> IndirectCommandsLayoutUsageFlagBitsNV
$c.|. :: IndirectCommandsLayoutUsageFlagBitsNV
-> IndirectCommandsLayoutUsageFlagBitsNV
-> IndirectCommandsLayoutUsageFlagBitsNV
.&. :: IndirectCommandsLayoutUsageFlagBitsNV
-> IndirectCommandsLayoutUsageFlagBitsNV
-> IndirectCommandsLayoutUsageFlagBitsNV
$c.&. :: IndirectCommandsLayoutUsageFlagBitsNV
-> IndirectCommandsLayoutUsageFlagBitsNV
-> IndirectCommandsLayoutUsageFlagBitsNV
Bits, Bits IndirectCommandsLayoutUsageFlagBitsNV
Bits IndirectCommandsLayoutUsageFlagBitsNV
-> (IndirectCommandsLayoutUsageFlagBitsNV -> Int)
-> (IndirectCommandsLayoutUsageFlagBitsNV -> Int)
-> (IndirectCommandsLayoutUsageFlagBitsNV -> Int)
-> FiniteBits IndirectCommandsLayoutUsageFlagBitsNV
IndirectCommandsLayoutUsageFlagBitsNV -> Int
forall b.
Bits b -> (b -> Int) -> (b -> Int) -> (b -> Int) -> FiniteBits b
countTrailingZeros :: IndirectCommandsLayoutUsageFlagBitsNV -> Int
$ccountTrailingZeros :: IndirectCommandsLayoutUsageFlagBitsNV -> Int
countLeadingZeros :: IndirectCommandsLayoutUsageFlagBitsNV -> Int
$ccountLeadingZeros :: IndirectCommandsLayoutUsageFlagBitsNV -> Int
finiteBitSize :: IndirectCommandsLayoutUsageFlagBitsNV -> Int
$cfiniteBitSize :: IndirectCommandsLayoutUsageFlagBitsNV -> Int
FiniteBits)

-- | 'INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NV' specifies
-- that the layout is always used with the manual preprocessing step
-- through calling 'cmdPreprocessGeneratedCommandsNV' and executed by
-- 'cmdExecuteGeneratedCommandsNV' with @isPreprocessed@ set to
-- 'Vulkan.Core10.FundamentalTypes.TRUE'.
pattern $bINDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NV :: IndirectCommandsLayoutUsageFlagBitsNV
$mINDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NV :: forall {r}.
IndirectCommandsLayoutUsageFlagBitsNV
-> (Void# -> r) -> (Void# -> r) -> r
INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NV = IndirectCommandsLayoutUsageFlagBitsNV 0x00000001

-- | 'INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NV' specifies that
-- the input data for the sequences is not implicitly indexed from
-- 0..sequencesUsed but a user provided 'Vulkan.Core10.Handles.Buffer'
-- encoding the index is provided.
pattern $bINDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NV :: IndirectCommandsLayoutUsageFlagBitsNV
$mINDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NV :: forall {r}.
IndirectCommandsLayoutUsageFlagBitsNV
-> (Void# -> r) -> (Void# -> r) -> r
INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NV = IndirectCommandsLayoutUsageFlagBitsNV 0x00000002

-- | 'INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NV' specifies
-- that the processing of sequences /can/ happen at an
-- implementation-dependent order, which is not: guaranteed to be coherent
-- using the same input data.
pattern $bINDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NV :: IndirectCommandsLayoutUsageFlagBitsNV
$mINDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NV :: forall {r}.
IndirectCommandsLayoutUsageFlagBitsNV
-> (Void# -> r) -> (Void# -> r) -> r
INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NV = IndirectCommandsLayoutUsageFlagBitsNV 0x00000004

conNameIndirectCommandsLayoutUsageFlagBitsNV :: String
conNameIndirectCommandsLayoutUsageFlagBitsNV :: String
conNameIndirectCommandsLayoutUsageFlagBitsNV = String
"IndirectCommandsLayoutUsageFlagBitsNV"

enumPrefixIndirectCommandsLayoutUsageFlagBitsNV :: String
enumPrefixIndirectCommandsLayoutUsageFlagBitsNV :: String
enumPrefixIndirectCommandsLayoutUsageFlagBitsNV = String
"INDIRECT_COMMANDS_LAYOUT_USAGE_"

showTableIndirectCommandsLayoutUsageFlagBitsNV :: [(IndirectCommandsLayoutUsageFlagBitsNV, String)]
showTableIndirectCommandsLayoutUsageFlagBitsNV :: [(IndirectCommandsLayoutUsageFlagBitsNV, String)]
showTableIndirectCommandsLayoutUsageFlagBitsNV =
  [
    ( IndirectCommandsLayoutUsageFlagBitsNV
INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NV
    , String
"EXPLICIT_PREPROCESS_BIT_NV"
    )
  ,
    ( IndirectCommandsLayoutUsageFlagBitsNV
INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NV
    , String
"INDEXED_SEQUENCES_BIT_NV"
    )
  ,
    ( IndirectCommandsLayoutUsageFlagBitsNV
INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NV
    , String
"UNORDERED_SEQUENCES_BIT_NV"
    )
  ]

instance Show IndirectCommandsLayoutUsageFlagBitsNV where
  showsPrec :: Int -> IndirectCommandsLayoutUsageFlagBitsNV -> ShowS
showsPrec =
    String
-> [(IndirectCommandsLayoutUsageFlagBitsNV, String)]
-> String
-> (IndirectCommandsLayoutUsageFlagBitsNV -> Flags)
-> (Flags -> ShowS)
-> Int
-> IndirectCommandsLayoutUsageFlagBitsNV
-> ShowS
forall a i.
Eq a =>
String
-> [(a, String)]
-> String
-> (a -> i)
-> (i -> ShowS)
-> Int
-> a
-> ShowS
enumShowsPrec
      String
enumPrefixIndirectCommandsLayoutUsageFlagBitsNV
      [(IndirectCommandsLayoutUsageFlagBitsNV, String)]
showTableIndirectCommandsLayoutUsageFlagBitsNV
      String
conNameIndirectCommandsLayoutUsageFlagBitsNV
      (\(IndirectCommandsLayoutUsageFlagBitsNV 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, Show a) => a -> ShowS
showHex Flags
x)

instance Read IndirectCommandsLayoutUsageFlagBitsNV where
  readPrec :: ReadPrec IndirectCommandsLayoutUsageFlagBitsNV
readPrec =
    String
-> [(IndirectCommandsLayoutUsageFlagBitsNV, String)]
-> String
-> (Flags -> IndirectCommandsLayoutUsageFlagBitsNV)
-> ReadPrec IndirectCommandsLayoutUsageFlagBitsNV
forall i a.
Read i =>
String -> [(a, String)] -> String -> (i -> a) -> ReadPrec a
enumReadPrec
      String
enumPrefixIndirectCommandsLayoutUsageFlagBitsNV
      [(IndirectCommandsLayoutUsageFlagBitsNV, String)]
showTableIndirectCommandsLayoutUsageFlagBitsNV
      String
conNameIndirectCommandsLayoutUsageFlagBitsNV
      Flags -> IndirectCommandsLayoutUsageFlagBitsNV
IndirectCommandsLayoutUsageFlagBitsNV

type IndirectStateFlagsNV = IndirectStateFlagBitsNV

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

-- | 'INDIRECT_STATE_FLAG_FRONTFACE_BIT_NV' allows to toggle the
-- 'Vulkan.Core10.Enums.FrontFace.FrontFace' rasterization state for
-- subsequent draw operations.
pattern $bINDIRECT_STATE_FLAG_FRONTFACE_BIT_NV :: IndirectStateFlagBitsNV
$mINDIRECT_STATE_FLAG_FRONTFACE_BIT_NV :: forall {r}.
IndirectStateFlagBitsNV -> (Void# -> r) -> (Void# -> r) -> r
INDIRECT_STATE_FLAG_FRONTFACE_BIT_NV = IndirectStateFlagBitsNV 0x00000001

conNameIndirectStateFlagBitsNV :: String
conNameIndirectStateFlagBitsNV :: String
conNameIndirectStateFlagBitsNV = String
"IndirectStateFlagBitsNV"

enumPrefixIndirectStateFlagBitsNV :: String
enumPrefixIndirectStateFlagBitsNV :: String
enumPrefixIndirectStateFlagBitsNV = String
"INDIRECT_STATE_FLAG_FRONTFACE_BIT_NV"

showTableIndirectStateFlagBitsNV :: [(IndirectStateFlagBitsNV, String)]
showTableIndirectStateFlagBitsNV :: [(IndirectStateFlagBitsNV, String)]
showTableIndirectStateFlagBitsNV = [(IndirectStateFlagBitsNV
INDIRECT_STATE_FLAG_FRONTFACE_BIT_NV, String
"")]

instance Show IndirectStateFlagBitsNV where
  showsPrec :: Int -> IndirectStateFlagBitsNV -> ShowS
showsPrec =
    String
-> [(IndirectStateFlagBitsNV, String)]
-> String
-> (IndirectStateFlagBitsNV -> Flags)
-> (Flags -> ShowS)
-> Int
-> IndirectStateFlagBitsNV
-> ShowS
forall a i.
Eq a =>
String
-> [(a, String)]
-> String
-> (a -> i)
-> (i -> ShowS)
-> Int
-> a
-> ShowS
enumShowsPrec
      String
enumPrefixIndirectStateFlagBitsNV
      [(IndirectStateFlagBitsNV, String)]
showTableIndirectStateFlagBitsNV
      String
conNameIndirectStateFlagBitsNV
      (\(IndirectStateFlagBitsNV 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, Show a) => a -> ShowS
showHex Flags
x)

instance Read IndirectStateFlagBitsNV where
  readPrec :: ReadPrec IndirectStateFlagBitsNV
readPrec =
    String
-> [(IndirectStateFlagBitsNV, String)]
-> String
-> (Flags -> IndirectStateFlagBitsNV)
-> ReadPrec IndirectStateFlagBitsNV
forall i a.
Read i =>
String -> [(a, String)] -> String -> (i -> a) -> ReadPrec a
enumReadPrec
      String
enumPrefixIndirectStateFlagBitsNV
      [(IndirectStateFlagBitsNV, String)]
showTableIndirectStateFlagBitsNV
      String
conNameIndirectStateFlagBitsNV
      Flags -> IndirectStateFlagBitsNV
IndirectStateFlagBitsNV

-- | VkIndirectCommandsTokenTypeNV - Enum specifying token commands
--
-- = Description
--
-- \'
--
-- +---------------------------------------------------+--------------------------------------------------------------------+
-- | Token type                                        | Equivalent command                                                 |
-- +===================================================+====================================================================+
-- | 'INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV'    | 'cmdBindPipelineShaderGroupNV'                                     |
-- +---------------------------------------------------+--------------------------------------------------------------------+
-- | 'INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV'     | -                                                                  |
-- +---------------------------------------------------+--------------------------------------------------------------------+
-- | 'INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NV'    | 'Vulkan.Core10.CommandBufferBuilding.cmdBindIndexBuffer'           |
-- +---------------------------------------------------+--------------------------------------------------------------------+
-- | 'INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV'   | 'Vulkan.Core10.CommandBufferBuilding.cmdBindVertexBuffers'         |
-- +---------------------------------------------------+--------------------------------------------------------------------+
-- | 'INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV'   | 'Vulkan.Core10.CommandBufferBuilding.cmdPushConstants'             |
-- +---------------------------------------------------+--------------------------------------------------------------------+
-- | 'INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NV'    | 'Vulkan.Core10.CommandBufferBuilding.cmdDrawIndexedIndirect'       |
-- +---------------------------------------------------+--------------------------------------------------------------------+
-- | 'INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV'            | 'Vulkan.Core10.CommandBufferBuilding.cmdDrawIndirect'              |
-- +---------------------------------------------------+--------------------------------------------------------------------+
-- | 'INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV'      | 'Vulkan.Extensions.VK_NV_mesh_shader.cmdDrawMeshTasksIndirectNV'   |
-- +---------------------------------------------------+--------------------------------------------------------------------+
-- | 'INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_NV' | 'Vulkan.Extensions.VK_EXT_mesh_shader.cmdDrawMeshTasksIndirectEXT' |
-- +---------------------------------------------------+--------------------------------------------------------------------+
--
-- Supported indirect command tokens
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_device_generated_commands VK_NV_device_generated_commands>,
-- 'IndirectCommandsLayoutTokenNV'
newtype IndirectCommandsTokenTypeNV = IndirectCommandsTokenTypeNV Int32
  deriving newtype (IndirectCommandsTokenTypeNV
-> IndirectCommandsTokenTypeNV -> "isPreprocessed" ::: Bool
(IndirectCommandsTokenTypeNV
 -> IndirectCommandsTokenTypeNV -> "isPreprocessed" ::: Bool)
-> (IndirectCommandsTokenTypeNV
    -> IndirectCommandsTokenTypeNV -> "isPreprocessed" ::: Bool)
-> Eq IndirectCommandsTokenTypeNV
forall a.
(a -> a -> "isPreprocessed" ::: Bool)
-> (a -> a -> "isPreprocessed" ::: Bool) -> Eq a
/= :: IndirectCommandsTokenTypeNV
-> IndirectCommandsTokenTypeNV -> "isPreprocessed" ::: Bool
$c/= :: IndirectCommandsTokenTypeNV
-> IndirectCommandsTokenTypeNV -> "isPreprocessed" ::: Bool
== :: IndirectCommandsTokenTypeNV
-> IndirectCommandsTokenTypeNV -> "isPreprocessed" ::: Bool
$c== :: IndirectCommandsTokenTypeNV
-> IndirectCommandsTokenTypeNV -> "isPreprocessed" ::: Bool
Eq, Eq IndirectCommandsTokenTypeNV
Eq IndirectCommandsTokenTypeNV
-> (IndirectCommandsTokenTypeNV
    -> IndirectCommandsTokenTypeNV -> Ordering)
-> (IndirectCommandsTokenTypeNV
    -> IndirectCommandsTokenTypeNV -> "isPreprocessed" ::: Bool)
-> (IndirectCommandsTokenTypeNV
    -> IndirectCommandsTokenTypeNV -> "isPreprocessed" ::: Bool)
-> (IndirectCommandsTokenTypeNV
    -> IndirectCommandsTokenTypeNV -> "isPreprocessed" ::: Bool)
-> (IndirectCommandsTokenTypeNV
    -> IndirectCommandsTokenTypeNV -> "isPreprocessed" ::: Bool)
-> (IndirectCommandsTokenTypeNV
    -> IndirectCommandsTokenTypeNV -> IndirectCommandsTokenTypeNV)
-> (IndirectCommandsTokenTypeNV
    -> IndirectCommandsTokenTypeNV -> IndirectCommandsTokenTypeNV)
-> Ord IndirectCommandsTokenTypeNV
IndirectCommandsTokenTypeNV
-> IndirectCommandsTokenTypeNV -> "isPreprocessed" ::: Bool
IndirectCommandsTokenTypeNV
-> IndirectCommandsTokenTypeNV -> Ordering
IndirectCommandsTokenTypeNV
-> IndirectCommandsTokenTypeNV -> IndirectCommandsTokenTypeNV
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
min :: IndirectCommandsTokenTypeNV
-> IndirectCommandsTokenTypeNV -> IndirectCommandsTokenTypeNV
$cmin :: IndirectCommandsTokenTypeNV
-> IndirectCommandsTokenTypeNV -> IndirectCommandsTokenTypeNV
max :: IndirectCommandsTokenTypeNV
-> IndirectCommandsTokenTypeNV -> IndirectCommandsTokenTypeNV
$cmax :: IndirectCommandsTokenTypeNV
-> IndirectCommandsTokenTypeNV -> IndirectCommandsTokenTypeNV
>= :: IndirectCommandsTokenTypeNV
-> IndirectCommandsTokenTypeNV -> "isPreprocessed" ::: Bool
$c>= :: IndirectCommandsTokenTypeNV
-> IndirectCommandsTokenTypeNV -> "isPreprocessed" ::: Bool
> :: IndirectCommandsTokenTypeNV
-> IndirectCommandsTokenTypeNV -> "isPreprocessed" ::: Bool
$c> :: IndirectCommandsTokenTypeNV
-> IndirectCommandsTokenTypeNV -> "isPreprocessed" ::: Bool
<= :: IndirectCommandsTokenTypeNV
-> IndirectCommandsTokenTypeNV -> "isPreprocessed" ::: Bool
$c<= :: IndirectCommandsTokenTypeNV
-> IndirectCommandsTokenTypeNV -> "isPreprocessed" ::: Bool
< :: IndirectCommandsTokenTypeNV
-> IndirectCommandsTokenTypeNV -> "isPreprocessed" ::: Bool
$c< :: IndirectCommandsTokenTypeNV
-> IndirectCommandsTokenTypeNV -> "isPreprocessed" ::: Bool
compare :: IndirectCommandsTokenTypeNV
-> IndirectCommandsTokenTypeNV -> Ordering
$ccompare :: IndirectCommandsTokenTypeNV
-> IndirectCommandsTokenTypeNV -> Ordering
Ord, Ptr IndirectCommandsTokenTypeNV -> IO IndirectCommandsTokenTypeNV
Ptr IndirectCommandsTokenTypeNV
-> Int -> IO IndirectCommandsTokenTypeNV
Ptr IndirectCommandsTokenTypeNV
-> Int -> IndirectCommandsTokenTypeNV -> IO ()
Ptr IndirectCommandsTokenTypeNV
-> IndirectCommandsTokenTypeNV -> IO ()
IndirectCommandsTokenTypeNV -> Int
(IndirectCommandsTokenTypeNV -> Int)
-> (IndirectCommandsTokenTypeNV -> Int)
-> (Ptr IndirectCommandsTokenTypeNV
    -> Int -> IO IndirectCommandsTokenTypeNV)
-> (Ptr IndirectCommandsTokenTypeNV
    -> Int -> IndirectCommandsTokenTypeNV -> IO ())
-> (forall b. Ptr b -> Int -> IO IndirectCommandsTokenTypeNV)
-> (forall b. Ptr b -> Int -> IndirectCommandsTokenTypeNV -> IO ())
-> (Ptr IndirectCommandsTokenTypeNV
    -> IO IndirectCommandsTokenTypeNV)
-> (Ptr IndirectCommandsTokenTypeNV
    -> IndirectCommandsTokenTypeNV -> IO ())
-> Storable IndirectCommandsTokenTypeNV
forall b. Ptr b -> Int -> IO IndirectCommandsTokenTypeNV
forall b. Ptr b -> Int -> IndirectCommandsTokenTypeNV -> 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
poke :: Ptr IndirectCommandsTokenTypeNV
-> IndirectCommandsTokenTypeNV -> IO ()
$cpoke :: Ptr IndirectCommandsTokenTypeNV
-> IndirectCommandsTokenTypeNV -> IO ()
peek :: Ptr IndirectCommandsTokenTypeNV -> IO IndirectCommandsTokenTypeNV
$cpeek :: Ptr IndirectCommandsTokenTypeNV -> IO IndirectCommandsTokenTypeNV
pokeByteOff :: forall b. Ptr b -> Int -> IndirectCommandsTokenTypeNV -> IO ()
$cpokeByteOff :: forall b. Ptr b -> Int -> IndirectCommandsTokenTypeNV -> IO ()
peekByteOff :: forall b. Ptr b -> Int -> IO IndirectCommandsTokenTypeNV
$cpeekByteOff :: forall b. Ptr b -> Int -> IO IndirectCommandsTokenTypeNV
pokeElemOff :: Ptr IndirectCommandsTokenTypeNV
-> Int -> IndirectCommandsTokenTypeNV -> IO ()
$cpokeElemOff :: Ptr IndirectCommandsTokenTypeNV
-> Int -> IndirectCommandsTokenTypeNV -> IO ()
peekElemOff :: Ptr IndirectCommandsTokenTypeNV
-> Int -> IO IndirectCommandsTokenTypeNV
$cpeekElemOff :: Ptr IndirectCommandsTokenTypeNV
-> Int -> IO IndirectCommandsTokenTypeNV
alignment :: IndirectCommandsTokenTypeNV -> Int
$calignment :: IndirectCommandsTokenTypeNV -> Int
sizeOf :: IndirectCommandsTokenTypeNV -> Int
$csizeOf :: IndirectCommandsTokenTypeNV -> Int
Storable, IndirectCommandsTokenTypeNV
IndirectCommandsTokenTypeNV -> Zero IndirectCommandsTokenTypeNV
forall a. a -> Zero a
zero :: IndirectCommandsTokenTypeNV
$czero :: IndirectCommandsTokenTypeNV
Zero)

-- No documentation found for Nested "VkIndirectCommandsTokenTypeNV" "VK_INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV"
pattern $bINDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV :: IndirectCommandsTokenTypeNV
$mINDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV :: forall {r}.
IndirectCommandsTokenTypeNV -> (Void# -> r) -> (Void# -> r) -> r
INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV = IndirectCommandsTokenTypeNV 0

-- No documentation found for Nested "VkIndirectCommandsTokenTypeNV" "VK_INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV"
pattern $bINDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV :: IndirectCommandsTokenTypeNV
$mINDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV :: forall {r}.
IndirectCommandsTokenTypeNV -> (Void# -> r) -> (Void# -> r) -> r
INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV = IndirectCommandsTokenTypeNV 1

-- No documentation found for Nested "VkIndirectCommandsTokenTypeNV" "VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NV"
pattern $bINDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NV :: IndirectCommandsTokenTypeNV
$mINDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NV :: forall {r}.
IndirectCommandsTokenTypeNV -> (Void# -> r) -> (Void# -> r) -> r
INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NV = IndirectCommandsTokenTypeNV 2

-- No documentation found for Nested "VkIndirectCommandsTokenTypeNV" "VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV"
pattern $bINDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV :: IndirectCommandsTokenTypeNV
$mINDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV :: forall {r}.
IndirectCommandsTokenTypeNV -> (Void# -> r) -> (Void# -> r) -> r
INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV = IndirectCommandsTokenTypeNV 3

-- No documentation found for Nested "VkIndirectCommandsTokenTypeNV" "VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV"
pattern $bINDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV :: IndirectCommandsTokenTypeNV
$mINDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV :: forall {r}.
IndirectCommandsTokenTypeNV -> (Void# -> r) -> (Void# -> r) -> r
INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV = IndirectCommandsTokenTypeNV 4

-- No documentation found for Nested "VkIndirectCommandsTokenTypeNV" "VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NV"
pattern $bINDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NV :: IndirectCommandsTokenTypeNV
$mINDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NV :: forall {r}.
IndirectCommandsTokenTypeNV -> (Void# -> r) -> (Void# -> r) -> r
INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NV = IndirectCommandsTokenTypeNV 5

-- No documentation found for Nested "VkIndirectCommandsTokenTypeNV" "VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV"
pattern $bINDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV :: IndirectCommandsTokenTypeNV
$mINDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV :: forall {r}.
IndirectCommandsTokenTypeNV -> (Void# -> r) -> (Void# -> r) -> r
INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV = IndirectCommandsTokenTypeNV 6

-- No documentation found for Nested "VkIndirectCommandsTokenTypeNV" "VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV"
pattern $bINDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV :: IndirectCommandsTokenTypeNV
$mINDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV :: forall {r}.
IndirectCommandsTokenTypeNV -> (Void# -> r) -> (Void# -> r) -> r
INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV = IndirectCommandsTokenTypeNV 7

-- No documentation found for Nested "VkIndirectCommandsTokenTypeNV" "VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_NV"
pattern $bINDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_NV :: IndirectCommandsTokenTypeNV
$mINDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_NV :: forall {r}.
IndirectCommandsTokenTypeNV -> (Void# -> r) -> (Void# -> r) -> r
INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_NV = IndirectCommandsTokenTypeNV 1000328000

{-# COMPLETE
  INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV
  , INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV
  , INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NV
  , INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV
  , INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV
  , INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NV
  , INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV
  , INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV
  , INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_NV ::
    IndirectCommandsTokenTypeNV
  #-}

conNameIndirectCommandsTokenTypeNV :: String
conNameIndirectCommandsTokenTypeNV :: String
conNameIndirectCommandsTokenTypeNV = String
"IndirectCommandsTokenTypeNV"

enumPrefixIndirectCommandsTokenTypeNV :: String
enumPrefixIndirectCommandsTokenTypeNV :: String
enumPrefixIndirectCommandsTokenTypeNV = String
"INDIRECT_COMMANDS_TOKEN_TYPE_"

showTableIndirectCommandsTokenTypeNV :: [(IndirectCommandsTokenTypeNV, String)]
showTableIndirectCommandsTokenTypeNV :: [(IndirectCommandsTokenTypeNV, String)]
showTableIndirectCommandsTokenTypeNV =
  [
    ( IndirectCommandsTokenTypeNV
INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV
    , String
"SHADER_GROUP_NV"
    )
  ,
    ( IndirectCommandsTokenTypeNV
INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV
    , String
"STATE_FLAGS_NV"
    )
  ,
    ( IndirectCommandsTokenTypeNV
INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NV
    , String
"INDEX_BUFFER_NV"
    )
  ,
    ( IndirectCommandsTokenTypeNV
INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV
    , String
"VERTEX_BUFFER_NV"
    )
  ,
    ( IndirectCommandsTokenTypeNV
INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV
    , String
"PUSH_CONSTANT_NV"
    )
  ,
    ( IndirectCommandsTokenTypeNV
INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NV
    , String
"DRAW_INDEXED_NV"
    )
  ,
    ( IndirectCommandsTokenTypeNV
INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV
    , String
"DRAW_NV"
    )
  ,
    ( IndirectCommandsTokenTypeNV
INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV
    , String
"DRAW_TASKS_NV"
    )
  ,
    ( IndirectCommandsTokenTypeNV
INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_NV
    , String
"DRAW_MESH_TASKS_NV"
    )
  ]

instance Show IndirectCommandsTokenTypeNV where
  showsPrec :: Int -> IndirectCommandsTokenTypeNV -> ShowS
showsPrec =
    String
-> [(IndirectCommandsTokenTypeNV, String)]
-> String
-> (IndirectCommandsTokenTypeNV -> Int32)
-> (Int32 -> ShowS)
-> Int
-> IndirectCommandsTokenTypeNV
-> ShowS
forall a i.
Eq a =>
String
-> [(a, String)]
-> String
-> (a -> i)
-> (i -> ShowS)
-> Int
-> a
-> ShowS
enumShowsPrec
      String
enumPrefixIndirectCommandsTokenTypeNV
      [(IndirectCommandsTokenTypeNV, String)]
showTableIndirectCommandsTokenTypeNV
      String
conNameIndirectCommandsTokenTypeNV
      (\(IndirectCommandsTokenTypeNV Int32
x) -> Int32
x)
      (Int -> Int32 -> ShowS
forall a. Show a => Int -> a -> ShowS
showsPrec Int
11)

instance Read IndirectCommandsTokenTypeNV where
  readPrec :: ReadPrec IndirectCommandsTokenTypeNV
readPrec =
    String
-> [(IndirectCommandsTokenTypeNV, String)]
-> String
-> (Int32 -> IndirectCommandsTokenTypeNV)
-> ReadPrec IndirectCommandsTokenTypeNV
forall i a.
Read i =>
String -> [(a, String)] -> String -> (i -> a) -> ReadPrec a
enumReadPrec
      String
enumPrefixIndirectCommandsTokenTypeNV
      [(IndirectCommandsTokenTypeNV, String)]
showTableIndirectCommandsTokenTypeNV
      String
conNameIndirectCommandsTokenTypeNV
      Int32 -> IndirectCommandsTokenTypeNV
IndirectCommandsTokenTypeNV

type NV_DEVICE_GENERATED_COMMANDS_SPEC_VERSION = 3

-- No documentation found for TopLevel "VK_NV_DEVICE_GENERATED_COMMANDS_SPEC_VERSION"
pattern NV_DEVICE_GENERATED_COMMANDS_SPEC_VERSION :: forall a . Integral a => a
pattern $bNV_DEVICE_GENERATED_COMMANDS_SPEC_VERSION :: forall a. Integral a => a
$mNV_DEVICE_GENERATED_COMMANDS_SPEC_VERSION :: forall {r} {a}.
Integral a =>
a -> (Void# -> r) -> (Void# -> r) -> r
NV_DEVICE_GENERATED_COMMANDS_SPEC_VERSION = 3


type NV_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME = "VK_NV_device_generated_commands"

-- No documentation found for TopLevel "VK_NV_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME"
pattern NV_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
pattern $bNV_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a
$mNV_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME :: forall {r} {a}.
(Eq a, IsString a) =>
a -> (Void# -> r) -> (Void# -> r) -> r
NV_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME = "VK_NV_device_generated_commands"