{-# language CPP #-}
-- | = Name
--
-- VK_AMDX_shader_enqueue - device extension
--
-- == VK_AMDX_shader_enqueue
--
-- [__Name String__]
--     @VK_AMDX_shader_enqueue@
--
-- [__Extension Type__]
--     Device extension
--
-- [__Registered Extension Number__]
--     135
--
-- [__Revision__]
--     1
--
-- [__Ratification Status__]
--     Not ratified
--
-- [__Extension and Version Dependencies__]
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_get_physical_device_properties2 VK_KHR_get_physical_device_properties2>
--     and
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_synchronization2 VK_KHR_synchronization2>
--     and
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_pipeline_library VK_KHR_pipeline_library>
--     and
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_spirv_1_4 VK_KHR_spirv_1_4>
--
--     -   __This is a /provisional/ extension and /must/ be used with
--         caution. See the
--         <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#boilerplate-provisional-header description>
--         of provisional header files for enablement and stability
--         details.__
--
-- [__API Interactions__]
--
--     -   Interacts with VK_KHR_maintenance5
--
-- [__SPIR-V Dependencies__]
--
--     -   <https://htmlpreview.github.io/?https://github.com/KhronosGroup/SPIRV-Registry/blob/master/extensions/AMDX/SPV_AMDX_shader_enqueue.html SPV_AMDX_shader_enqueue>
--
-- [__Contact__]
--
--     -   Tobias Hector
--         <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?body=[VK_AMDX_shader_enqueue] @tobski%0A*Here describe the issue or question you have about the VK_AMDX_shader_enqueue extension* >
--
-- [__Extension Proposal__]
--     <https://github.com/KhronosGroup/Vulkan-Docs/tree/main/proposals/VK_AMDX_shader_enqueue.adoc VK_AMDX_shader_enqueue>
--
-- == Other Extension Metadata
--
-- [__Last Modified Date__]
--     2021-07-22
--
-- [__Provisional__]
--     __This extension is /provisional/ and /should/ not be used in
--     production applications. The functionality /may/ change in ways that
--     break backwards compatibility between revisions, and before final
--     release.__
--
-- [__Contributors__]
--
--     -   Tobias Hector, AMD
--
--     -   Matthaeus Chajdas, AMD
--
--     -   Maciej Jesionowski, AMD
--
--     -   Robert Martin, AMD
--
--     -   Qun Lin, AMD
--
--     -   Rex Xu, AMD
--
--     -   Dominik Witczak, AMD
--
--     -   Karthik Srinivasan, AMD
--
--     -   Nicolai Haehnle, AMD
--
--     -   Stuart Smith, AMD
--
-- == Description
--
-- This extension adds the ability for developers to enqueue compute shader
-- workgroups from other compute shaders.
--
-- == New Commands
--
-- -   'cmdDispatchGraphAMDX'
--
-- -   'cmdDispatchGraphIndirectAMDX'
--
-- -   'cmdDispatchGraphIndirectCountAMDX'
--
-- -   'cmdInitializeGraphScratchMemoryAMDX'
--
-- -   'createExecutionGraphPipelinesAMDX'
--
-- -   'getExecutionGraphPipelineNodeIndexAMDX'
--
-- -   'getExecutionGraphPipelineScratchSizeAMDX'
--
-- == New Structures
--
-- -   'DispatchGraphCountInfoAMDX'
--
-- -   'DispatchGraphInfoAMDX'
--
-- -   'ExecutionGraphPipelineCreateInfoAMDX'
--
-- -   'ExecutionGraphPipelineScratchSizeAMDX'
--
-- -   Extending
--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--     'Vulkan.Core10.Device.DeviceCreateInfo':
--
--     -   'PhysicalDeviceShaderEnqueueFeaturesAMDX'
--
-- -   Extending
--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2':
--
--     -   'PhysicalDeviceShaderEnqueuePropertiesAMDX'
--
-- -   Extending 'Vulkan.Core10.Pipeline.PipelineShaderStageCreateInfo':
--
--     -   'PipelineShaderStageNodeCreateInfoAMDX'
--
-- == New Unions
--
-- -   'DeviceOrHostAddressConstAMDX'
--
-- == New Enum Constants
--
-- -   'AMDX_SHADER_ENQUEUE_EXTENSION_NAME'
--
-- -   'AMDX_SHADER_ENQUEUE_SPEC_VERSION'
--
-- -   'Vulkan.Core10.APIConstants.SHADER_INDEX_UNUSED_AMDX'
--
-- -   Extending
--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BufferUsageFlagBits':
--
--     -   'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_EXECUTION_GRAPH_SCRATCH_BIT_AMDX'
--
-- -   Extending 'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint':
--
--     -   'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_EXECUTION_GRAPH_AMDX'
--
-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_EXECUTION_GRAPH_PIPELINE_CREATE_INFO_AMDX'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_EXECUTION_GRAPH_PIPELINE_SCRATCH_SIZE_AMDX'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ENQUEUE_FEATURES_AMDX'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ENQUEUE_PROPERTIES_AMDX'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_NODE_CREATE_INFO_AMDX'
--
-- If
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_maintenance5 VK_KHR_maintenance5>
-- is supported:
--
-- -   Extending 'BufferUsageFlagBits2KHR':
--
--     -   'BUFFER_USAGE_2_EXECUTION_GRAPH_SCRATCH_BIT_AMDX'
--
-- == Version History
--
-- -   Revision 1, 2021-07-22 (Tobias Hector)
--
--     -   Initial revision
--
-- == See Also
--
-- 'Vulkan.Core10.APIConstants.SHADER_INDEX_UNUSED_AMDX',
-- 'DeviceOrHostAddressConstAMDX', 'DispatchGraphCountInfoAMDX',
-- 'DispatchGraphInfoAMDX', 'ExecutionGraphPipelineCreateInfoAMDX',
-- 'ExecutionGraphPipelineScratchSizeAMDX',
-- 'PhysicalDeviceShaderEnqueueFeaturesAMDX',
-- 'PhysicalDeviceShaderEnqueuePropertiesAMDX',
-- 'PipelineShaderStageNodeCreateInfoAMDX', 'cmdDispatchGraphAMDX',
-- 'cmdDispatchGraphIndirectAMDX', 'cmdDispatchGraphIndirectCountAMDX',
-- 'cmdInitializeGraphScratchMemoryAMDX',
-- 'createExecutionGraphPipelinesAMDX',
-- 'getExecutionGraphPipelineNodeIndexAMDX',
-- 'getExecutionGraphPipelineScratchSizeAMDX'
--
-- == Document Notes
--
-- For more information, see the
-- <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VK_AMDX_shader_enqueue Vulkan Specification>
--
-- This page is a generated document. Fixes and changes should be made to
-- the generator scripts, not directly.
module Vulkan.Extensions.VK_AMDX_shader_enqueue  ( getExecutionGraphPipelineScratchSizeAMDX
                                                 , getExecutionGraphPipelineNodeIndexAMDX
                                                 , createExecutionGraphPipelinesAMDX
                                                 , cmdInitializeGraphScratchMemoryAMDX
                                                 , cmdDispatchGraphAMDX
                                                 , cmdDispatchGraphIndirectAMDX
                                                 , cmdDispatchGraphIndirectCountAMDX
                                                 , PhysicalDeviceShaderEnqueuePropertiesAMDX(..)
                                                 , PhysicalDeviceShaderEnqueueFeaturesAMDX(..)
                                                 , ExecutionGraphPipelineCreateInfoAMDX(..)
                                                 , PipelineShaderStageNodeCreateInfoAMDX(..)
                                                 , ExecutionGraphPipelineScratchSizeAMDX(..)
                                                 , DispatchGraphInfoAMDX(..)
                                                 , DispatchGraphCountInfoAMDX(..)
                                                 , DeviceOrHostAddressConstAMDX(..)
                                                 , BufferUsageFlags2KHR
                                                 , BufferUsageFlagBits2KHR( BUFFER_USAGE_2_TRANSFER_SRC_BIT_KHR
                                                                          , BUFFER_USAGE_2_TRANSFER_DST_BIT_KHR
                                                                          , BUFFER_USAGE_2_UNIFORM_TEXEL_BUFFER_BIT_KHR
                                                                          , BUFFER_USAGE_2_STORAGE_TEXEL_BUFFER_BIT_KHR
                                                                          , BUFFER_USAGE_2_UNIFORM_BUFFER_BIT_KHR
                                                                          , BUFFER_USAGE_2_STORAGE_BUFFER_BIT_KHR
                                                                          , BUFFER_USAGE_2_INDEX_BUFFER_BIT_KHR
                                                                          , BUFFER_USAGE_2_VERTEX_BUFFER_BIT_KHR
                                                                          , BUFFER_USAGE_2_INDIRECT_BUFFER_BIT_KHR
                                                                          , BUFFER_USAGE_2_MICROMAP_STORAGE_BIT_EXT
                                                                          , BUFFER_USAGE_2_MICROMAP_BUILD_INPUT_READ_ONLY_BIT_EXT
                                                                          , BUFFER_USAGE_2_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT
                                                                          , BUFFER_USAGE_2_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT
                                                                          , BUFFER_USAGE_2_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT
                                                                          , BUFFER_USAGE_2_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR
                                                                          , BUFFER_USAGE_2_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR
                                                                          , BUFFER_USAGE_2_SHADER_DEVICE_ADDRESS_BIT_KHR
                                                                          , BUFFER_USAGE_2_VIDEO_ENCODE_SRC_BIT_KHR
                                                                          , BUFFER_USAGE_2_VIDEO_ENCODE_DST_BIT_KHR
                                                                          , BUFFER_USAGE_2_VIDEO_DECODE_DST_BIT_KHR
                                                                          , BUFFER_USAGE_2_VIDEO_DECODE_SRC_BIT_KHR
                                                                          , BUFFER_USAGE_2_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT
                                                                          , BUFFER_USAGE_2_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT
                                                                          , BUFFER_USAGE_2_SHADER_BINDING_TABLE_BIT_KHR
                                                                          , BUFFER_USAGE_2_CONDITIONAL_RENDERING_BIT_EXT
                                                                          , BUFFER_USAGE_2_EXECUTION_GRAPH_SCRATCH_BIT_AMDX
                                                                          , ..
                                                                          )
                                                 , AMDX_SHADER_ENQUEUE_SPEC_VERSION
                                                 , pattern AMDX_SHADER_ENQUEUE_SPEC_VERSION
                                                 , AMDX_SHADER_ENQUEUE_EXTENSION_NAME
                                                 , pattern AMDX_SHADER_ENQUEUE_EXTENSION_NAME
                                                 , PipelineLibraryCreateInfoKHR(..)
                                                 , SHADER_INDEX_UNUSED_AMDX
                                                 , pattern SHADER_INDEX_UNUSED_AMDX
                                                 ) where

import Data.Bits (Bits)
import Data.Bits (FiniteBits)
import Vulkan.Internal.Utils (enumReadPrec)
import Vulkan.Internal.Utils (enumShowsPrec)
import Vulkan.Internal.Utils (traceAroundEvent)
import Control.Exception.Base (bracket)
import Control.Monad (unless)
import Control.Monad.IO.Class (liftIO)
import Data.Typeable (eqT)
import Foreign.Marshal.Alloc (allocaBytes)
import Foreign.Marshal.Alloc (callocBytes)
import Foreign.Marshal.Alloc (free)
import 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 Numeric (showHex)
import Data.ByteString (packCString)
import Data.ByteString (useAsCString)
import Control.Monad.Trans.Class (lift)
import Control.Monad.Trans.Cont (evalContT)
import Control.Monad.Trans.Cont (runContT)
import Data.Vector (generateM)
import qualified Data.Vector (imapM_)
import qualified Data.Vector (length)
import qualified Data.Vector (null)
import Vulkan.CStruct (FromCStruct)
import Vulkan.CStruct (FromCStruct(..))
import Vulkan.CStruct (ToCStruct)
import Vulkan.CStruct (ToCStruct(..))
import Vulkan.Zero (Zero)
import Vulkan.Zero (Zero(..))
import Control.Monad.IO.Class (MonadIO)
import Data.String (IsString)
import Data.Type.Equality ((:~:)(Refl))
import Data.Typeable (Typeable)
import Foreign.C.Types (CChar)
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.Word (Word64)
import Data.ByteString (ByteString)
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.NamedType ((:::))
import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
import Vulkan.Core10.FundamentalTypes (Bool32)
import Vulkan.CStruct.Extends (Chain)
import Vulkan.Core10.Handles (CommandBuffer)
import Vulkan.Core10.Handles (CommandBuffer(..))
import Vulkan.Core10.Handles (CommandBuffer(CommandBuffer))
import Vulkan.Core10.Handles (CommandBuffer_T)
import Vulkan.Core10.Handles (Device)
import Vulkan.Core10.Handles (Device(..))
import Vulkan.Core10.Handles (Device(Device))
import Vulkan.Core10.FundamentalTypes (DeviceAddress)
import Vulkan.Dynamic (DeviceCmds(pVkCmdDispatchGraphAMDX))
import Vulkan.Dynamic (DeviceCmds(pVkCmdDispatchGraphIndirectAMDX))
import Vulkan.Dynamic (DeviceCmds(pVkCmdDispatchGraphIndirectCountAMDX))
import Vulkan.Dynamic (DeviceCmds(pVkCmdInitializeGraphScratchMemoryAMDX))
import Vulkan.Dynamic (DeviceCmds(pVkCreateExecutionGraphPipelinesAMDX))
import Vulkan.Dynamic (DeviceCmds(pVkGetExecutionGraphPipelineNodeIndexAMDX))
import Vulkan.Dynamic (DeviceCmds(pVkGetExecutionGraphPipelineScratchSizeAMDX))
import Vulkan.Core10.FundamentalTypes (DeviceSize)
import Vulkan.Core10.Handles (Device_T)
import Vulkan.CStruct.Extends (Extends)
import Vulkan.CStruct.Extends (Extendss)
import Vulkan.CStruct.Extends (Extensible(..))
import Vulkan.Core10.FundamentalTypes (Flags64)
import Vulkan.CStruct.Extends (PeekChain)
import Vulkan.CStruct.Extends (PeekChain(..))
import Vulkan.Core10.Handles (Pipeline)
import Vulkan.Core10.Handles (Pipeline(..))
import Vulkan.Core10.Handles (PipelineCache)
import Vulkan.Core10.Handles (PipelineCache(..))
import {-# SOURCE #-} Vulkan.Extensions.VK_AMD_pipeline_compiler_control (PipelineCompilerControlCreateInfoAMD)
import Vulkan.Core10.Enums.PipelineCreateFlagBits (PipelineCreateFlags)
import {-# SOURCE #-} Vulkan.Core13.Promoted_From_VK_EXT_pipeline_creation_feedback (PipelineCreationFeedbackCreateInfo)
import Vulkan.Core10.Handles (PipelineLayout)
import Vulkan.Extensions.VK_KHR_pipeline_library (PipelineLibraryCreateInfoKHR)
import Vulkan.Core10.Pipeline (PipelineShaderStageCreateInfo)
import Vulkan.CStruct.Extends (PokeChain)
import Vulkan.CStruct.Extends (PokeChain(..))
import Vulkan.Core10.Enums.Result (Result)
import Vulkan.Core10.Enums.Result (Result(..))
import Vulkan.CStruct.Extends (SomeStruct)
import Vulkan.Core10.Enums.StructureType (StructureType)
import Vulkan.Exception (VulkanException(..))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_EXECUTION_GRAPH_PIPELINE_CREATE_INFO_AMDX))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_EXECUTION_GRAPH_PIPELINE_SCRATCH_SIZE_AMDX))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ENQUEUE_FEATURES_AMDX))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ENQUEUE_PROPERTIES_AMDX))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_NODE_CREATE_INFO_AMDX))
import Vulkan.Core10.Enums.Result (Result(SUCCESS))
import Vulkan.Extensions.VK_KHR_pipeline_library (PipelineLibraryCreateInfoKHR(..))
import Vulkan.Core10.APIConstants (SHADER_INDEX_UNUSED_AMDX)
import Vulkan.Core10.APIConstants (pattern SHADER_INDEX_UNUSED_AMDX)
foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkGetExecutionGraphPipelineScratchSizeAMDX
  :: FunPtr (Ptr Device_T -> Pipeline -> Ptr ExecutionGraphPipelineScratchSizeAMDX -> IO Result) -> Ptr Device_T -> Pipeline -> Ptr ExecutionGraphPipelineScratchSizeAMDX -> IO Result

-- | vkGetExecutionGraphPipelineScratchSizeAMDX - Query scratch space
-- required to dispatch an execution graph
--
-- = Description
--
-- After this function returns, information about the scratch space
-- required will be returned in @pSizeInfo@.
--
-- == 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'
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_AMDX_shader_enqueue VK_AMDX_shader_enqueue>,
-- 'Vulkan.Core10.Handles.Device', 'ExecutionGraphPipelineScratchSizeAMDX',
-- 'Vulkan.Core10.Handles.Pipeline'
getExecutionGraphPipelineScratchSizeAMDX :: forall io
                                          . (MonadIO io)
                                         => -- | @device@ is the that @executionGraph@ was created on.
                                            --
                                            -- #VUID-vkGetExecutionGraphPipelineScratchSizeAMDX-device-parameter#
                                            -- @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
                                            Device
                                         -> -- | @executionGraph@ is the execution graph pipeline to query the scratch
                                            -- space for.
                                            --
                                            -- #VUID-vkGetExecutionGraphPipelineScratchSizeAMDX-executionGraph-parameter#
                                            -- @executionGraph@ /must/ be a valid 'Vulkan.Core10.Handles.Pipeline'
                                            -- handle
                                            --
                                            -- #VUID-vkGetExecutionGraphPipelineScratchSizeAMDX-executionGraph-parent#
                                            -- @executionGraph@ /must/ have been created, allocated, or retrieved from
                                            -- @device@
                                            ("executionGraph" ::: Pipeline)
                                         -> io (("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX))
getExecutionGraphPipelineScratchSizeAMDX :: forall (io :: * -> *).
MonadIO io =>
Device
-> ("executionGraph" ::: Pipeline)
-> io ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
getExecutionGraphPipelineScratchSizeAMDX Device
device
                                           "executionGraph" ::: Pipeline
executionGraph = IO ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
-> io ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
forall a. IO a -> io a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
 -> io ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX))
-> (ContT
      ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
      IO
      ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
    -> IO ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX))
-> ContT
     ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
     IO
     ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
-> io ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT
  ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
  IO
  ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
-> IO ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
   IO
   ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
 -> io ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX))
-> ContT
     ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
     IO
     ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
-> io ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
forall a b. (a -> b) -> a -> b
$ do
  let vkGetExecutionGraphPipelineScratchSizeAMDXPtr :: FunPtr
  (Ptr Device_T
   -> ("executionGraph" ::: Pipeline)
   -> Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
   -> IO Result)
vkGetExecutionGraphPipelineScratchSizeAMDXPtr = DeviceCmds
-> FunPtr
     (Ptr Device_T
      -> ("executionGraph" ::: Pipeline)
      -> Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
      -> IO Result)
pVkGetExecutionGraphPipelineScratchSizeAMDX (case Device
device of Device{DeviceCmds
deviceCmds :: DeviceCmds
$sel:deviceCmds:Device :: Device -> DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO ()
-> ContT
     ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX) IO ()
forall (m :: * -> *) a.
Monad m =>
m a
-> ContT ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX) m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO ()
 -> ContT
      ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX) IO ())
-> IO ()
-> ContT
     ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX) IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr Device_T
   -> ("executionGraph" ::: Pipeline)
   -> Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
   -> IO Result)
vkGetExecutionGraphPipelineScratchSizeAMDXPtr FunPtr
  (Ptr Device_T
   -> ("executionGraph" ::: Pipeline)
   -> Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
   -> IO Result)
-> FunPtr
     (Ptr Device_T
      -> ("executionGraph" ::: Pipeline)
      -> Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
      -> IO Result)
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr Device_T
   -> ("executionGraph" ::: Pipeline)
   -> Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
   -> 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 vkGetExecutionGraphPipelineScratchSizeAMDX is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkGetExecutionGraphPipelineScratchSizeAMDX' :: Ptr Device_T
-> ("executionGraph" ::: Pipeline)
-> Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
-> IO Result
vkGetExecutionGraphPipelineScratchSizeAMDX' = FunPtr
  (Ptr Device_T
   -> ("executionGraph" ::: Pipeline)
   -> Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
   -> IO Result)
-> Ptr Device_T
-> ("executionGraph" ::: Pipeline)
-> Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
-> IO Result
mkVkGetExecutionGraphPipelineScratchSizeAMDX FunPtr
  (Ptr Device_T
   -> ("executionGraph" ::: Pipeline)
   -> Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
   -> IO Result)
vkGetExecutionGraphPipelineScratchSizeAMDXPtr
  Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
pPSizeInfo <- ((Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
  -> IO ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX))
 -> IO ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX))
-> ContT
     ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
     IO
     (Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX))
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 @ExecutionGraphPipelineScratchSizeAMDX)
  Result
r <- IO Result
-> ContT
     ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX) IO Result
forall (m :: * -> *) a.
Monad m =>
m a
-> ContT ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX) m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO Result
 -> ContT
      ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX) IO Result)
-> IO Result
-> ContT
     ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX) IO Result
forall a b. (a -> b) -> a -> b
$ String -> IO Result -> IO Result
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkGetExecutionGraphPipelineScratchSizeAMDX" (Ptr Device_T
-> ("executionGraph" ::: Pipeline)
-> Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
-> IO Result
vkGetExecutionGraphPipelineScratchSizeAMDX'
                                                                               (Device -> Ptr Device_T
deviceHandle (Device
device))
                                                                               ("executionGraph" ::: Pipeline
executionGraph)
                                                                               (Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
pPSizeInfo))
  IO ()
-> ContT
     ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX) IO ()
forall (m :: * -> *) a.
Monad m =>
m a
-> ContT ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX) m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO ()
 -> ContT
      ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX) IO ())
-> IO ()
-> ContT
     ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX) IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
when (Result
r Result -> Result -> Bool
forall a. Ord a => a -> a -> Bool
< Result
SUCCESS) (VulkanException -> IO ()
forall e a. Exception e => e -> IO a
throwIO (Result -> VulkanException
VulkanException Result
r))
  "sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX
pSizeInfo <- IO ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
-> ContT
     ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
     IO
     ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
forall (m :: * -> *) a.
Monad m =>
m a
-> ContT ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX) m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
 -> ContT
      ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
      IO
      ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX))
-> IO ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
-> ContT
     ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
     IO
     ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
forall a b. (a -> b) -> a -> b
$ forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @ExecutionGraphPipelineScratchSizeAMDX Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
pPSizeInfo
  ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
-> ContT
     ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
     IO
     ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
forall a.
a
-> ContT
     ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX) IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
 -> ContT
      ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
      IO
      ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX))
-> ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
-> ContT
     ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
     IO
     ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
forall a b. (a -> b) -> a -> b
$ ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX
pSizeInfo)


foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkGetExecutionGraphPipelineNodeIndexAMDX
  :: FunPtr (Ptr Device_T -> Pipeline -> Ptr PipelineShaderStageNodeCreateInfoAMDX -> Ptr Word32 -> IO Result) -> Ptr Device_T -> Pipeline -> Ptr PipelineShaderStageNodeCreateInfoAMDX -> Ptr Word32 -> IO Result

-- | vkGetExecutionGraphPipelineNodeIndexAMDX - Query internal id of a node
-- in an execution graph
--
-- = Description
--
-- Once this function returns, the contents of @pNodeIndex@ contain the
-- internal node index of the identified node.
--
-- == Valid Usage
--
-- -   #VUID-vkGetExecutionGraphPipelineNodeIndexAMDX-pNodeInfo-09140#
--     @pNodeInfo->pName@ /must/ not be @NULL@
--
-- -   #VUID-vkGetExecutionGraphPipelineNodeIndexAMDX-pNodeInfo-09141#
--     @pNodeInfo->index@ /must/ not be
--     'Vulkan.Core10.APIConstants.SHADER_INDEX_UNUSED_AMDX'
--
-- -   #VUID-vkGetExecutionGraphPipelineNodeIndexAMDX-executionGraph-09142#
--     There /must/ be a node in @executionGraph@ with a shader name and
--     index equal to @pNodeInfo->pName@ and @pNodeInfo->index@
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkGetExecutionGraphPipelineNodeIndexAMDX-device-parameter#
--     @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
--
-- -   #VUID-vkGetExecutionGraphPipelineNodeIndexAMDX-executionGraph-parameter#
--     @executionGraph@ /must/ be a valid 'Vulkan.Core10.Handles.Pipeline'
--     handle
--
-- -   #VUID-vkGetExecutionGraphPipelineNodeIndexAMDX-pNodeInfo-parameter#
--     @pNodeInfo@ /must/ be a valid pointer to a valid
--     'PipelineShaderStageNodeCreateInfoAMDX' structure
--
-- -   #VUID-vkGetExecutionGraphPipelineNodeIndexAMDX-pNodeIndex-parameter#
--     @pNodeIndex@ /must/ be a valid pointer to a @uint32_t@ value
--
-- -   #VUID-vkGetExecutionGraphPipelineNodeIndexAMDX-executionGraph-parent#
--     @executionGraph@ /must/ have been created, allocated, or retrieved
--     from @device@
--
-- == 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'
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_AMDX_shader_enqueue VK_AMDX_shader_enqueue>,
-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.Pipeline',
-- 'PipelineShaderStageNodeCreateInfoAMDX'
getExecutionGraphPipelineNodeIndexAMDX :: forall io
                                        . (MonadIO io)
                                       => -- | @device@ is the that @executionGraph@ was created on.
                                          Device
                                       -> -- | @executionGraph@ is the execution graph pipeline to query the internal
                                          -- node index for.
                                          ("executionGraph" ::: Pipeline)
                                       -> -- | @pNodeInfo@ is a pointer to a 'PipelineShaderStageNodeCreateInfoAMDX'
                                          -- structure identifying the name and index of the node to query.
                                          ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
                                       -> io (("nodeIndex" ::: Word32))
getExecutionGraphPipelineNodeIndexAMDX :: forall (io :: * -> *).
MonadIO io =>
Device
-> ("executionGraph" ::: Pipeline)
-> ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
-> io ("nodeIndex" ::: Word32)
getExecutionGraphPipelineNodeIndexAMDX Device
device
                                         "executionGraph" ::: Pipeline
executionGraph
                                         "nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX
nodeInfo = IO ("nodeIndex" ::: Word32) -> io ("nodeIndex" ::: Word32)
forall a. IO a -> io a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ("nodeIndex" ::: Word32) -> io ("nodeIndex" ::: Word32))
-> (ContT ("nodeIndex" ::: Word32) IO ("nodeIndex" ::: Word32)
    -> IO ("nodeIndex" ::: Word32))
-> ContT ("nodeIndex" ::: Word32) IO ("nodeIndex" ::: Word32)
-> io ("nodeIndex" ::: Word32)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT ("nodeIndex" ::: Word32) IO ("nodeIndex" ::: Word32)
-> IO ("nodeIndex" ::: Word32)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT ("nodeIndex" ::: Word32) IO ("nodeIndex" ::: Word32)
 -> io ("nodeIndex" ::: Word32))
-> ContT ("nodeIndex" ::: Word32) IO ("nodeIndex" ::: Word32)
-> io ("nodeIndex" ::: Word32)
forall a b. (a -> b) -> a -> b
$ do
  let vkGetExecutionGraphPipelineNodeIndexAMDXPtr :: FunPtr
  (Ptr Device_T
   -> ("executionGraph" ::: Pipeline)
   -> Ptr ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
   -> Ptr ("nodeIndex" ::: Word32)
   -> IO Result)
vkGetExecutionGraphPipelineNodeIndexAMDXPtr = DeviceCmds
-> FunPtr
     (Ptr Device_T
      -> ("executionGraph" ::: Pipeline)
      -> Ptr ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
      -> Ptr ("nodeIndex" ::: Word32)
      -> IO Result)
pVkGetExecutionGraphPipelineNodeIndexAMDX (case Device
device of Device{DeviceCmds
$sel:deviceCmds:Device :: Device -> DeviceCmds
deviceCmds :: DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO () -> ContT ("nodeIndex" ::: Word32) IO ()
forall (m :: * -> *) a.
Monad m =>
m a -> ContT ("nodeIndex" ::: Word32) m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT ("nodeIndex" ::: Word32) IO ())
-> IO () -> ContT ("nodeIndex" ::: Word32) IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr Device_T
   -> ("executionGraph" ::: Pipeline)
   -> Ptr ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
   -> Ptr ("nodeIndex" ::: Word32)
   -> IO Result)
vkGetExecutionGraphPipelineNodeIndexAMDXPtr FunPtr
  (Ptr Device_T
   -> ("executionGraph" ::: Pipeline)
   -> Ptr ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
   -> Ptr ("nodeIndex" ::: Word32)
   -> IO Result)
-> FunPtr
     (Ptr Device_T
      -> ("executionGraph" ::: Pipeline)
      -> Ptr ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
      -> Ptr ("nodeIndex" ::: Word32)
      -> IO Result)
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr Device_T
   -> ("executionGraph" ::: Pipeline)
   -> Ptr ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
   -> Ptr ("nodeIndex" ::: Word32)
   -> 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 vkGetExecutionGraphPipelineNodeIndexAMDX is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkGetExecutionGraphPipelineNodeIndexAMDX' :: Ptr Device_T
-> ("executionGraph" ::: Pipeline)
-> Ptr ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
-> Ptr ("nodeIndex" ::: Word32)
-> IO Result
vkGetExecutionGraphPipelineNodeIndexAMDX' = FunPtr
  (Ptr Device_T
   -> ("executionGraph" ::: Pipeline)
   -> Ptr ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
   -> Ptr ("nodeIndex" ::: Word32)
   -> IO Result)
-> Ptr Device_T
-> ("executionGraph" ::: Pipeline)
-> Ptr ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
-> Ptr ("nodeIndex" ::: Word32)
-> IO Result
mkVkGetExecutionGraphPipelineNodeIndexAMDX FunPtr
  (Ptr Device_T
   -> ("executionGraph" ::: Pipeline)
   -> Ptr ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
   -> Ptr ("nodeIndex" ::: Word32)
   -> IO Result)
vkGetExecutionGraphPipelineNodeIndexAMDXPtr
  Ptr ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
pNodeInfo <- ((Ptr ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
  -> IO ("nodeIndex" ::: Word32))
 -> IO ("nodeIndex" ::: Word32))
-> ContT
     ("nodeIndex" ::: Word32)
     IO
     (Ptr ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX))
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
   -> IO ("nodeIndex" ::: Word32))
  -> IO ("nodeIndex" ::: Word32))
 -> ContT
      ("nodeIndex" ::: Word32)
      IO
      (Ptr ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)))
-> ((Ptr ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
     -> IO ("nodeIndex" ::: Word32))
    -> IO ("nodeIndex" ::: Word32))
-> ContT
     ("nodeIndex" ::: Word32)
     IO
     (Ptr ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX))
forall a b. (a -> b) -> a -> b
$ ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
-> (Ptr ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
    -> IO ("nodeIndex" ::: Word32))
-> IO ("nodeIndex" ::: Word32)
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
forall b.
("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
-> (Ptr ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
    -> IO b)
-> IO b
withCStruct ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX
nodeInfo)
  Ptr ("nodeIndex" ::: Word32)
pPNodeIndex <- ((Ptr ("nodeIndex" ::: Word32) -> IO ("nodeIndex" ::: Word32))
 -> IO ("nodeIndex" ::: Word32))
-> ContT ("nodeIndex" ::: Word32) IO (Ptr ("nodeIndex" ::: Word32))
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr ("nodeIndex" ::: Word32) -> IO ("nodeIndex" ::: Word32))
  -> IO ("nodeIndex" ::: Word32))
 -> ContT
      ("nodeIndex" ::: Word32) IO (Ptr ("nodeIndex" ::: Word32)))
-> ((Ptr ("nodeIndex" ::: Word32) -> IO ("nodeIndex" ::: Word32))
    -> IO ("nodeIndex" ::: Word32))
-> ContT ("nodeIndex" ::: Word32) IO (Ptr ("nodeIndex" ::: Word32))
forall a b. (a -> b) -> a -> b
$ IO (Ptr ("nodeIndex" ::: Word32))
-> (Ptr ("nodeIndex" ::: Word32) -> IO ())
-> (Ptr ("nodeIndex" ::: Word32) -> IO ("nodeIndex" ::: Word32))
-> IO ("nodeIndex" ::: Word32)
forall a b c. IO a -> (a -> IO b) -> (a -> IO c) -> IO c
bracket (forall a. Int -> IO (Ptr a)
callocBytes @Word32 Int
4) Ptr ("nodeIndex" ::: Word32) -> IO ()
forall a. Ptr a -> IO ()
free
  Result
r <- IO Result -> ContT ("nodeIndex" ::: Word32) IO Result
forall (m :: * -> *) a.
Monad m =>
m a -> ContT ("nodeIndex" ::: Word32) m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO Result -> ContT ("nodeIndex" ::: Word32) IO Result)
-> IO Result -> ContT ("nodeIndex" ::: Word32) IO Result
forall a b. (a -> b) -> a -> b
$ String -> IO Result -> IO Result
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkGetExecutionGraphPipelineNodeIndexAMDX" (Ptr Device_T
-> ("executionGraph" ::: Pipeline)
-> Ptr ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
-> Ptr ("nodeIndex" ::: Word32)
-> IO Result
vkGetExecutionGraphPipelineNodeIndexAMDX'
                                                                             (Device -> Ptr Device_T
deviceHandle (Device
device))
                                                                             ("executionGraph" ::: Pipeline
executionGraph)
                                                                             Ptr ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
pNodeInfo
                                                                             (Ptr ("nodeIndex" ::: Word32)
pPNodeIndex))
  IO () -> ContT ("nodeIndex" ::: Word32) IO ()
forall (m :: * -> *) a.
Monad m =>
m a -> ContT ("nodeIndex" ::: Word32) m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT ("nodeIndex" ::: Word32) IO ())
-> IO () -> ContT ("nodeIndex" ::: Word32) IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
when (Result
r Result -> Result -> Bool
forall a. Ord a => a -> a -> Bool
< Result
SUCCESS) (VulkanException -> IO ()
forall e a. Exception e => e -> IO a
throwIO (Result -> VulkanException
VulkanException Result
r))
  "nodeIndex" ::: Word32
pNodeIndex <- IO ("nodeIndex" ::: Word32)
-> ContT ("nodeIndex" ::: Word32) IO ("nodeIndex" ::: Word32)
forall (m :: * -> *) a.
Monad m =>
m a -> ContT ("nodeIndex" ::: Word32) m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO ("nodeIndex" ::: Word32)
 -> ContT ("nodeIndex" ::: Word32) IO ("nodeIndex" ::: Word32))
-> IO ("nodeIndex" ::: Word32)
-> ContT ("nodeIndex" ::: Word32) IO ("nodeIndex" ::: Word32)
forall a b. (a -> b) -> a -> b
$ forall a. Storable a => Ptr a -> IO a
peek @Word32 Ptr ("nodeIndex" ::: Word32)
pPNodeIndex
  ("nodeIndex" ::: Word32)
-> ContT ("nodeIndex" ::: Word32) IO ("nodeIndex" ::: Word32)
forall a. a -> ContT ("nodeIndex" ::: Word32) IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (("nodeIndex" ::: Word32)
 -> ContT ("nodeIndex" ::: Word32) IO ("nodeIndex" ::: Word32))
-> ("nodeIndex" ::: Word32)
-> ContT ("nodeIndex" ::: Word32) IO ("nodeIndex" ::: Word32)
forall a b. (a -> b) -> a -> b
$ ("nodeIndex" ::: Word32
pNodeIndex)


foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkCreateExecutionGraphPipelinesAMDX
  :: FunPtr (Ptr Device_T -> PipelineCache -> Word32 -> Ptr (SomeStruct ExecutionGraphPipelineCreateInfoAMDX) -> Ptr AllocationCallbacks -> Ptr Pipeline -> IO Result) -> Ptr Device_T -> PipelineCache -> Word32 -> Ptr (SomeStruct ExecutionGraphPipelineCreateInfoAMDX) -> Ptr AllocationCallbacks -> Ptr Pipeline -> IO Result

-- | vkCreateExecutionGraphPipelinesAMDX - Creates a new execution graph
-- pipeline object
--
-- = Description
--
-- Pipelines are created and returned as described for
-- <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#pipelines-multiple Multiple Pipeline Creation>.
--
-- == Valid Usage
--
-- -   #VUID-vkCreateExecutionGraphPipelinesAMDX-shaderEnqueue-09124# The
--     <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#features-shaderEnqueue shaderEnqueue feature>
--     /must/ be enabled
--
-- -   #VUID-vkCreateExecutionGraphPipelinesAMDX-flags-09125# If the
--     @flags@ member of any element of @pCreateInfos@ contains the
--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
--     flag, and the @basePipelineIndex@ member of that same element is not
--     @-1@, @basePipelineIndex@ /must/ be less than the index into
--     @pCreateInfos@ that corresponds to that element
--
-- -   #VUID-vkCreateExecutionGraphPipelinesAMDX-flags-09126# If the
--     @flags@ member of any element of @pCreateInfos@ contains the
--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
--     flag, the base pipeline /must/ have been created with the
--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT'
--     flag set
--
-- -   #VUID-vkCreateExecutionGraphPipelinesAMDX-pipelineCache-09127# If
--     @pipelineCache@ was created with
--     'Vulkan.Core10.Enums.PipelineCacheCreateFlagBits.PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT',
--     host access to @pipelineCache@ /must/ be
--     <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#fundamentals-threadingbehavior externally synchronized>
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkCreateExecutionGraphPipelinesAMDX-device-parameter# @device@
--     /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
--
-- -   #VUID-vkCreateExecutionGraphPipelinesAMDX-pipelineCache-parameter#
--     If @pipelineCache@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
--     @pipelineCache@ /must/ be a valid
--     'Vulkan.Core10.Handles.PipelineCache' handle
--
-- -   #VUID-vkCreateExecutionGraphPipelinesAMDX-pCreateInfos-parameter#
--     @pCreateInfos@ /must/ be a valid pointer to an array of
--     @createInfoCount@ valid 'ExecutionGraphPipelineCreateInfoAMDX'
--     structures
--
-- -   #VUID-vkCreateExecutionGraphPipelinesAMDX-pAllocator-parameter# If
--     @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid pointer
--     to a valid 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
--     structure
--
-- -   #VUID-vkCreateExecutionGraphPipelinesAMDX-pPipelines-parameter#
--     @pPipelines@ /must/ be a valid pointer to an array of
--     @createInfoCount@ 'Vulkan.Core10.Handles.Pipeline' handles
--
-- -   #VUID-vkCreateExecutionGraphPipelinesAMDX-createInfoCount-arraylength#
--     @createInfoCount@ /must/ be greater than @0@
--
-- -   #VUID-vkCreateExecutionGraphPipelinesAMDX-pipelineCache-parent# If
--     @pipelineCache@ is a valid handle, it /must/ have been created,
--     allocated, or retrieved from @device@
--
-- == Return Codes
--
-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
--
--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
--
--     -   'Vulkan.Extensions.VK_EXT_pipeline_creation_cache_control.PIPELINE_COMPILE_REQUIRED_EXT'
--
-- [<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_AMDX_shader_enqueue VK_AMDX_shader_enqueue>,
-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
-- 'Vulkan.Core10.Handles.Device', 'ExecutionGraphPipelineCreateInfoAMDX',
-- 'Vulkan.Core10.Handles.Pipeline', 'Vulkan.Core10.Handles.PipelineCache'
createExecutionGraphPipelinesAMDX :: forall io
                                   . (MonadIO io)
                                  => -- | @device@ is the logical device that creates the execution graph
                                     -- pipelines.
                                     Device
                                  -> -- | @pipelineCache@ is either 'Vulkan.Core10.APIConstants.NULL_HANDLE',
                                     -- indicating that pipeline caching is disabled; or the handle of a valid
                                     -- <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#pipelines-cache pipeline cache>
                                     -- object, in which case use of that cache is enabled for the duration of
                                     -- the command.
                                     PipelineCache
                                  -> -- | @pCreateInfos@ is a pointer to an array of
                                     -- 'ExecutionGraphPipelineCreateInfoAMDX' structures.
                                     ("createInfos" ::: Vector (SomeStruct ExecutionGraphPipelineCreateInfoAMDX))
                                  -> -- | @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 (Result, ("pipelines" ::: Vector Pipeline))
createExecutionGraphPipelinesAMDX :: forall (io :: * -> *).
MonadIO io =>
Device
-> PipelineCache
-> ("createInfos"
    ::: Vector (SomeStruct ExecutionGraphPipelineCreateInfoAMDX))
-> ("allocator" ::: Maybe AllocationCallbacks)
-> io
     (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
createExecutionGraphPipelinesAMDX Device
device
                                    PipelineCache
pipelineCache
                                    "createInfos"
::: Vector (SomeStruct ExecutionGraphPipelineCreateInfoAMDX)
createInfos
                                    "allocator" ::: Maybe AllocationCallbacks
allocator = IO (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
-> io
     (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
forall a. IO a -> io a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
 -> io
      (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline)))
-> (ContT
      (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
      IO
      (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
    -> IO
         (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline)))
-> ContT
     (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
     IO
     (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
-> io
     (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT
  (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
  IO
  (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
-> IO
     (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
   IO
   (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
 -> io
      (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline)))
-> ContT
     (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
     IO
     (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
-> io
     (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
forall a b. (a -> b) -> a -> b
$ do
  let vkCreateExecutionGraphPipelinesAMDXPtr :: FunPtr
  (Ptr Device_T
   -> PipelineCache
   -> ("nodeIndex" ::: Word32)
   -> Ptr (SomeStruct ExecutionGraphPipelineCreateInfoAMDX)
   -> Ptr AllocationCallbacks
   -> Ptr ("executionGraph" ::: Pipeline)
   -> IO Result)
vkCreateExecutionGraphPipelinesAMDXPtr = DeviceCmds
-> FunPtr
     (Ptr Device_T
      -> PipelineCache
      -> ("nodeIndex" ::: Word32)
      -> Ptr (SomeStruct ExecutionGraphPipelineCreateInfoAMDX)
      -> Ptr AllocationCallbacks
      -> Ptr ("executionGraph" ::: Pipeline)
      -> IO Result)
pVkCreateExecutionGraphPipelinesAMDX (case Device
device of Device{DeviceCmds
$sel:deviceCmds:Device :: Device -> DeviceCmds
deviceCmds :: DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO ()
-> ContT
     (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
     IO
     ()
forall (m :: * -> *) a.
Monad m =>
m a
-> ContT
     (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
     m
     a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO ()
 -> ContT
      (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
      IO
      ())
-> IO ()
-> ContT
     (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr Device_T
   -> PipelineCache
   -> ("nodeIndex" ::: Word32)
   -> Ptr (SomeStruct ExecutionGraphPipelineCreateInfoAMDX)
   -> Ptr AllocationCallbacks
   -> Ptr ("executionGraph" ::: Pipeline)
   -> IO Result)
vkCreateExecutionGraphPipelinesAMDXPtr FunPtr
  (Ptr Device_T
   -> PipelineCache
   -> ("nodeIndex" ::: Word32)
   -> Ptr (SomeStruct ExecutionGraphPipelineCreateInfoAMDX)
   -> Ptr AllocationCallbacks
   -> Ptr ("executionGraph" ::: Pipeline)
   -> IO Result)
-> FunPtr
     (Ptr Device_T
      -> PipelineCache
      -> ("nodeIndex" ::: Word32)
      -> Ptr (SomeStruct ExecutionGraphPipelineCreateInfoAMDX)
      -> Ptr AllocationCallbacks
      -> Ptr ("executionGraph" ::: Pipeline)
      -> IO Result)
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr Device_T
   -> PipelineCache
   -> ("nodeIndex" ::: Word32)
   -> Ptr (SomeStruct ExecutionGraphPipelineCreateInfoAMDX)
   -> Ptr AllocationCallbacks
   -> Ptr ("executionGraph" ::: Pipeline)
   -> 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 vkCreateExecutionGraphPipelinesAMDX is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkCreateExecutionGraphPipelinesAMDX' :: Ptr Device_T
-> PipelineCache
-> ("nodeIndex" ::: Word32)
-> Ptr (SomeStruct ExecutionGraphPipelineCreateInfoAMDX)
-> Ptr AllocationCallbacks
-> Ptr ("executionGraph" ::: Pipeline)
-> IO Result
vkCreateExecutionGraphPipelinesAMDX' = FunPtr
  (Ptr Device_T
   -> PipelineCache
   -> ("nodeIndex" ::: Word32)
   -> Ptr (SomeStruct ExecutionGraphPipelineCreateInfoAMDX)
   -> Ptr AllocationCallbacks
   -> Ptr ("executionGraph" ::: Pipeline)
   -> IO Result)
-> Ptr Device_T
-> PipelineCache
-> ("nodeIndex" ::: Word32)
-> Ptr (SomeStruct ExecutionGraphPipelineCreateInfoAMDX)
-> Ptr AllocationCallbacks
-> Ptr ("executionGraph" ::: Pipeline)
-> IO Result
mkVkCreateExecutionGraphPipelinesAMDX FunPtr
  (Ptr Device_T
   -> PipelineCache
   -> ("nodeIndex" ::: Word32)
   -> Ptr (SomeStruct ExecutionGraphPipelineCreateInfoAMDX)
   -> Ptr AllocationCallbacks
   -> Ptr ("executionGraph" ::: Pipeline)
   -> IO Result)
vkCreateExecutionGraphPipelinesAMDXPtr
  Ptr (ExecutionGraphPipelineCreateInfoAMDX Any)
pPCreateInfos <- ((Ptr (ExecutionGraphPipelineCreateInfoAMDX Any)
  -> IO
       (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline)))
 -> IO
      (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline)))
-> ContT
     (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
     IO
     (Ptr (ExecutionGraphPipelineCreateInfoAMDX Any))
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr (ExecutionGraphPipelineCreateInfoAMDX Any)
   -> IO
        (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline)))
  -> IO
       (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline)))
 -> ContT
      (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
      IO
      (Ptr (ExecutionGraphPipelineCreateInfoAMDX Any)))
-> ((Ptr (ExecutionGraphPipelineCreateInfoAMDX Any)
     -> IO
          (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline)))
    -> IO
         (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline)))
-> ContT
     (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
     IO
     (Ptr (ExecutionGraphPipelineCreateInfoAMDX Any))
forall a b. (a -> b) -> a -> b
$ forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @(ExecutionGraphPipelineCreateInfoAMDX _) ((("createInfos"
 ::: Vector (SomeStruct ExecutionGraphPipelineCreateInfoAMDX))
-> Int
forall a. Vector a -> Int
Data.Vector.length ("createInfos"
::: Vector (SomeStruct ExecutionGraphPipelineCreateInfoAMDX)
createInfos)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
64)
  (Int
 -> SomeStruct ExecutionGraphPipelineCreateInfoAMDX
 -> ContT
      (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
      IO
      ())
-> ("createInfos"
    ::: Vector (SomeStruct ExecutionGraphPipelineCreateInfoAMDX))
-> ContT
     (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
     IO
     ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i SomeStruct ExecutionGraphPipelineCreateInfoAMDX
e -> ((()
  -> IO
       (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline)))
 -> IO
      (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline)))
-> ContT
     (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
     IO
     ()
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((()
   -> IO
        (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline)))
  -> IO
       (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline)))
 -> ContT
      (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
      IO
      ())
-> ((()
     -> IO
          (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline)))
    -> IO
         (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline)))
-> ContT
     (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr (SomeStruct ExecutionGraphPipelineCreateInfoAMDX)
-> SomeStruct ExecutionGraphPipelineCreateInfoAMDX
-> IO
     (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
-> IO
     (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
forall (a :: [*] -> *) b.
(forall (es :: [*]).
 (Extendss a es, PokeChain es) =>
 ToCStruct (a es)) =>
Ptr (SomeStruct a) -> SomeStruct a -> IO b -> IO b
pokeSomeCStruct (Ptr (ExecutionGraphPipelineCreateInfoAMDX Any)
-> Ptr (SomeStruct ExecutionGraphPipelineCreateInfoAMDX)
forall (a :: [*] -> *) (es :: [*]).
Ptr (a es) -> Ptr (SomeStruct a)
forgetExtensions (Ptr (ExecutionGraphPipelineCreateInfoAMDX Any)
pPCreateInfos Ptr (ExecutionGraphPipelineCreateInfoAMDX Any)
-> Int -> Ptr (ExecutionGraphPipelineCreateInfoAMDX w)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
64 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr (ExecutionGraphPipelineCreateInfoAMDX _))) (SomeStruct ExecutionGraphPipelineCreateInfoAMDX
e) (IO
   (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
 -> IO
      (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline)))
-> ((()
     -> IO
          (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline)))
    -> IO
         (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline)))
-> (()
    -> IO
         (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline)))
-> IO
     (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((()
 -> IO
      (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline)))
-> ()
-> IO
     (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
forall a b. (a -> b) -> a -> b
$ ())) ("createInfos"
::: Vector (SomeStruct ExecutionGraphPipelineCreateInfoAMDX)
createInfos)
  Ptr AllocationCallbacks
pAllocator <- case ("allocator" ::: Maybe AllocationCallbacks
allocator) of
    "allocator" ::: Maybe AllocationCallbacks
Nothing -> Ptr AllocationCallbacks
-> ContT
     (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
     IO
     (Ptr AllocationCallbacks)
forall a.
a
-> ContT
     (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
     IO
     a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Ptr AllocationCallbacks
forall a. Ptr a
nullPtr
    Just AllocationCallbacks
j -> ((Ptr AllocationCallbacks
  -> IO
       (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline)))
 -> IO
      (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline)))
-> ContT
     (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
     IO
     (Ptr AllocationCallbacks)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr AllocationCallbacks
   -> IO
        (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline)))
  -> IO
       (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline)))
 -> ContT
      (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
      IO
      (Ptr AllocationCallbacks))
-> ((Ptr AllocationCallbacks
     -> IO
          (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline)))
    -> IO
         (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline)))
-> ContT
     (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
     IO
     (Ptr AllocationCallbacks)
forall a b. (a -> b) -> a -> b
$ AllocationCallbacks
-> (Ptr AllocationCallbacks
    -> IO
         (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline)))
-> IO
     (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
forall b.
AllocationCallbacks -> (Ptr AllocationCallbacks -> IO b) -> IO b
withCStruct (AllocationCallbacks
j)
  Ptr ("executionGraph" ::: Pipeline)
pPPipelines <- ((Ptr ("executionGraph" ::: Pipeline)
  -> IO
       (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline)))
 -> IO
      (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline)))
-> ContT
     (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
     IO
     (Ptr ("executionGraph" ::: Pipeline))
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr ("executionGraph" ::: Pipeline)
   -> IO
        (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline)))
  -> IO
       (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline)))
 -> ContT
      (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
      IO
      (Ptr ("executionGraph" ::: Pipeline)))
-> ((Ptr ("executionGraph" ::: Pipeline)
     -> IO
          (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline)))
    -> IO
         (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline)))
-> ContT
     (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
     IO
     (Ptr ("executionGraph" ::: Pipeline))
forall a b. (a -> b) -> a -> b
$ IO (Ptr ("executionGraph" ::: Pipeline))
-> (Ptr ("executionGraph" ::: Pipeline) -> IO ())
-> (Ptr ("executionGraph" ::: Pipeline)
    -> IO
         (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline)))
-> IO
     (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
forall a b c. IO a -> (a -> IO b) -> (a -> IO c) -> IO c
bracket (forall a. Int -> IO (Ptr a)
callocBytes @Pipeline ((("nodeIndex" ::: Word32) -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Int -> "nodeIndex" ::: Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral (("createInfos"
 ::: Vector (SomeStruct ExecutionGraphPipelineCreateInfoAMDX))
-> Int
forall a. Vector a -> Int
Data.Vector.length (("createInfos"
  ::: Vector (SomeStruct ExecutionGraphPipelineCreateInfoAMDX))
 -> Int)
-> ("createInfos"
    ::: Vector (SomeStruct ExecutionGraphPipelineCreateInfoAMDX))
-> Int
forall a b. (a -> b) -> a -> b
$ ("createInfos"
::: Vector (SomeStruct ExecutionGraphPipelineCreateInfoAMDX)
createInfos)) :: Word32))) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
8)) Ptr ("executionGraph" ::: Pipeline) -> IO ()
forall a. Ptr a -> IO ()
free
  Result
r <- IO Result
-> ContT
     (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
     IO
     Result
forall (m :: * -> *) a.
Monad m =>
m a
-> ContT
     (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
     m
     a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO Result
 -> ContT
      (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
      IO
      Result)
-> IO Result
-> ContT
     (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
     IO
     Result
forall a b. (a -> b) -> a -> b
$ String -> IO Result -> IO Result
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkCreateExecutionGraphPipelinesAMDX" (Ptr Device_T
-> PipelineCache
-> ("nodeIndex" ::: Word32)
-> Ptr (SomeStruct ExecutionGraphPipelineCreateInfoAMDX)
-> Ptr AllocationCallbacks
-> Ptr ("executionGraph" ::: Pipeline)
-> IO Result
vkCreateExecutionGraphPipelinesAMDX'
                                                                        (Device -> Ptr Device_T
deviceHandle (Device
device))
                                                                        (PipelineCache
pipelineCache)
                                                                        ((Int -> "nodeIndex" ::: Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral (("createInfos"
 ::: Vector (SomeStruct ExecutionGraphPipelineCreateInfoAMDX))
-> Int
forall a. Vector a -> Int
Data.Vector.length (("createInfos"
  ::: Vector (SomeStruct ExecutionGraphPipelineCreateInfoAMDX))
 -> Int)
-> ("createInfos"
    ::: Vector (SomeStruct ExecutionGraphPipelineCreateInfoAMDX))
-> Int
forall a b. (a -> b) -> a -> b
$ ("createInfos"
::: Vector (SomeStruct ExecutionGraphPipelineCreateInfoAMDX)
createInfos)) :: Word32))
                                                                        (Ptr (ExecutionGraphPipelineCreateInfoAMDX Any)
-> Ptr (SomeStruct ExecutionGraphPipelineCreateInfoAMDX)
forall (a :: [*] -> *) (es :: [*]).
Ptr (a es) -> Ptr (SomeStruct a)
forgetExtensions (Ptr (ExecutionGraphPipelineCreateInfoAMDX Any)
pPCreateInfos))
                                                                        Ptr AllocationCallbacks
pAllocator
                                                                        (Ptr ("executionGraph" ::: Pipeline)
pPPipelines))
  IO ()
-> ContT
     (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
     IO
     ()
forall (m :: * -> *) a.
Monad m =>
m a
-> ContT
     (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
     m
     a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO ()
 -> ContT
      (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
      IO
      ())
-> IO ()
-> ContT
     (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
when (Result
r Result -> Result -> Bool
forall a. Ord a => a -> a -> Bool
< Result
SUCCESS) (VulkanException -> IO ()
forall e a. Exception e => e -> IO a
throwIO (Result -> VulkanException
VulkanException Result
r))
  "pipelines" ::: Vector ("executionGraph" ::: Pipeline)
pPipelines <- IO ("pipelines" ::: Vector ("executionGraph" ::: Pipeline))
-> ContT
     (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
     IO
     ("pipelines" ::: Vector ("executionGraph" ::: Pipeline))
forall (m :: * -> *) a.
Monad m =>
m a
-> ContT
     (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
     m
     a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO ("pipelines" ::: Vector ("executionGraph" ::: Pipeline))
 -> ContT
      (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
      IO
      ("pipelines" ::: Vector ("executionGraph" ::: Pipeline)))
-> IO ("pipelines" ::: Vector ("executionGraph" ::: Pipeline))
-> ContT
     (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
     IO
     ("pipelines" ::: Vector ("executionGraph" ::: Pipeline))
forall a b. (a -> b) -> a -> b
$ Int
-> (Int -> IO ("executionGraph" ::: Pipeline))
-> IO ("pipelines" ::: Vector ("executionGraph" ::: Pipeline))
forall (m :: * -> *) a.
Monad m =>
Int -> (Int -> m a) -> m (Vector a)
generateM (("nodeIndex" ::: Word32) -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral ((Int -> "nodeIndex" ::: Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral (("createInfos"
 ::: Vector (SomeStruct ExecutionGraphPipelineCreateInfoAMDX))
-> Int
forall a. Vector a -> Int
Data.Vector.length (("createInfos"
  ::: Vector (SomeStruct ExecutionGraphPipelineCreateInfoAMDX))
 -> Int)
-> ("createInfos"
    ::: Vector (SomeStruct ExecutionGraphPipelineCreateInfoAMDX))
-> Int
forall a b. (a -> b) -> a -> b
$ ("createInfos"
::: Vector (SomeStruct ExecutionGraphPipelineCreateInfoAMDX)
createInfos)) :: Word32))) (\Int
i -> forall a. Storable a => Ptr a -> IO a
peek @Pipeline ((Ptr ("executionGraph" ::: Pipeline)
pPPipelines Ptr ("executionGraph" ::: Pipeline)
-> Int -> Ptr ("executionGraph" ::: 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)))
  (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
-> ContT
     (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
     IO
     (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
forall a.
a
-> ContT
     (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
     IO
     a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ((Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
 -> ContT
      (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
      IO
      (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline)))
-> (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
-> ContT
     (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
     IO
     (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))
forall a b. (a -> b) -> a -> b
$ (Result
r, "pipelines" ::: Vector ("executionGraph" ::: Pipeline)
pPipelines)


foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkCmdInitializeGraphScratchMemoryAMDX
  :: FunPtr (Ptr CommandBuffer_T -> DeviceAddress -> IO ()) -> Ptr CommandBuffer_T -> DeviceAddress -> IO ()

-- | vkCmdInitializeGraphScratchMemoryAMDX - Initialize scratch memory for an
-- execution graph
--
-- = Description
--
-- This command /must/ be called before using @scratch@ to dispatch the
-- currently bound execution graph pipeline.
--
-- Execution of this command /may/ modify any memory locations in the range
-- [@scratch@,@scratch@ + @size@), where @size@ is the value returned in
-- 'ExecutionGraphPipelineScratchSizeAMDX'::@size@ by
-- 'ExecutionGraphPipelineScratchSizeAMDX' for the currently bound
-- execution graph pipeline. Accesses to this memory range are performed in
-- the
-- 'Vulkan.Core13.Enums.PipelineStageFlags2.PIPELINE_STAGE_2_COMPUTE_SHADER_BIT'
-- pipeline stage with the
-- 'Vulkan.Core13.Enums.AccessFlags2.ACCESS_2_SHADER_STORAGE_READ_BIT' and
-- 'Vulkan.Core13.Enums.AccessFlags2.ACCESS_2_SHADER_STORAGE_WRITE_BIT'
-- access flags.
--
-- If any portion of @scratch@ is modified by any command other than
-- 'cmdDispatchGraphAMDX', 'cmdDispatchGraphIndirectAMDX',
-- 'cmdDispatchGraphIndirectCountAMDX', or
-- 'cmdInitializeGraphScratchMemoryAMDX' with the same execution graph, it
-- /must/ be reinitialized for the execution graph again before dispatching
-- against it.
--
-- == Valid Usage
--
-- -   #VUID-vkCmdInitializeGraphScratchMemoryAMDX-scratch-09143# @scratch@
--     /must/ be the device address of an allocated memory range at least
--     as large as the value of
--     'ExecutionGraphPipelineScratchSizeAMDX'::@size@ returned by
--     'ExecutionGraphPipelineScratchSizeAMDX' for the currently bound
--     execution graph pipeline.
--
-- -   #VUID-vkCmdInitializeGraphScratchMemoryAMDX-scratch-09144# @scratch@
--     /must/ be a multiple of 64
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkCmdInitializeGraphScratchMemoryAMDX-commandBuffer-parameter#
--     @commandBuffer@ /must/ be a valid
--     'Vulkan.Core10.Handles.CommandBuffer' handle
--
-- -   #VUID-vkCmdInitializeGraphScratchMemoryAMDX-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-vkCmdInitializeGraphScratchMemoryAMDX-commandBuffer-cmdpool#
--     The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
--     allocated from /must/ support graphics, or compute operations
--
-- -   #VUID-vkCmdInitializeGraphScratchMemoryAMDX-renderpass# This command
--     /must/ only be called outside of a render pass instance
--
-- -   #VUID-vkCmdInitializeGraphScratchMemoryAMDX-videocoding# This
--     command /must/ only be called outside of a video coding scope
--
-- -   #VUID-vkCmdInitializeGraphScratchMemoryAMDX-bufferlevel#
--     @commandBuffer@ /must/ be a primary
--     'Vulkan.Core10.Handles.CommandBuffer'
--
-- == Host Synchronization
--
-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
--     @commandBuffer@ was allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- \'
--
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------+
-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginVideoCodingKHR Video Coding Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-queueoperation-command-types Command Type> |
-- +============================================================================================================================+========================================================================================================================+=============================================================================================================================+=======================================================================================================================+========================================================================================================================================+
-- | Primary                                                                                                                    | Outside                                                                                                                | Outside                                                                                                                     | Graphics                                                                                                              | Action                                                                                                                                 |
-- |                                                                                                                            |                                                                                                                        |                                                                                                                             | Compute                                                                                                               |                                                                                                                                        |
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------+
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_AMDX_shader_enqueue VK_AMDX_shader_enqueue>,
-- 'Vulkan.Core10.Handles.CommandBuffer',
-- 'Vulkan.Core10.FundamentalTypes.DeviceAddress'
cmdInitializeGraphScratchMemoryAMDX :: forall io
                                     . (MonadIO io)
                                    => -- | @commandBuffer@ is the command buffer into which the command will be
                                       -- recorded.
                                       CommandBuffer
                                    -> -- | @scratch@ is a pointer to the scratch memory to be initialized.
                                       ("scratch" ::: DeviceAddress)
                                    -> io ()
cmdInitializeGraphScratchMemoryAMDX :: forall (io :: * -> *).
MonadIO io =>
CommandBuffer -> Flags64 -> io ()
cmdInitializeGraphScratchMemoryAMDX CommandBuffer
commandBuffer Flags64
scratch = IO () -> io ()
forall a. IO a -> io a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> io ()) -> IO () -> io ()
forall a b. (a -> b) -> a -> b
$ do
  let vkCmdInitializeGraphScratchMemoryAMDXPtr :: FunPtr (Ptr CommandBuffer_T -> Flags64 -> IO ())
vkCmdInitializeGraphScratchMemoryAMDXPtr = DeviceCmds -> FunPtr (Ptr CommandBuffer_T -> Flags64 -> IO ())
pVkCmdInitializeGraphScratchMemoryAMDX (case CommandBuffer
commandBuffer of CommandBuffer{DeviceCmds
deviceCmds :: DeviceCmds
$sel:deviceCmds:CommandBuffer :: CommandBuffer -> DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr (Ptr CommandBuffer_T -> Flags64 -> IO ())
vkCmdInitializeGraphScratchMemoryAMDXPtr FunPtr (Ptr CommandBuffer_T -> Flags64 -> IO ())
-> FunPtr (Ptr CommandBuffer_T -> Flags64 -> IO ()) -> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr (Ptr CommandBuffer_T -> Flags64 -> 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 vkCmdInitializeGraphScratchMemoryAMDX is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkCmdInitializeGraphScratchMemoryAMDX' :: Ptr CommandBuffer_T -> Flags64 -> IO ()
vkCmdInitializeGraphScratchMemoryAMDX' = FunPtr (Ptr CommandBuffer_T -> Flags64 -> IO ())
-> Ptr CommandBuffer_T -> Flags64 -> IO ()
mkVkCmdInitializeGraphScratchMemoryAMDX FunPtr (Ptr CommandBuffer_T -> Flags64 -> IO ())
vkCmdInitializeGraphScratchMemoryAMDXPtr
  String -> IO () -> IO ()
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkCmdInitializeGraphScratchMemoryAMDX" (Ptr CommandBuffer_T -> Flags64 -> IO ()
vkCmdInitializeGraphScratchMemoryAMDX'
                                                              (CommandBuffer -> Ptr CommandBuffer_T
commandBufferHandle (CommandBuffer
commandBuffer))
                                                              (Flags64
scratch))
  () -> IO ()
forall a. a -> IO a
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" mkVkCmdDispatchGraphAMDX
  :: FunPtr (Ptr CommandBuffer_T -> DeviceAddress -> Ptr DispatchGraphCountInfoAMDX -> IO ()) -> Ptr CommandBuffer_T -> DeviceAddress -> Ptr DispatchGraphCountInfoAMDX -> IO ()

-- | vkCmdDispatchGraphAMDX - Dispatch an execution graph
--
-- = Description
--
-- When this command is executed, the nodes specified in @pCountInfo@ are
-- executed. Nodes executed as part of this command are not implicitly
-- synchronized in any way against each other once they are dispatched.
--
-- For this command, all device\/host pointers in substructures are treated
-- as host pointers and read only during host execution of this command.
-- Once this command returns, no reference to the original pointers is
-- retained.
--
-- Execution of this command /may/ modify any memory locations in the range
-- [@scratch@,@scratch@ + @size@), where @size@ is the value returned in
-- 'ExecutionGraphPipelineScratchSizeAMDX'::@size@ by
-- 'ExecutionGraphPipelineScratchSizeAMDX' for the currently bound
-- execution graph pipeline Accesses to this memory range are performed in
-- the
-- 'Vulkan.Core13.Enums.PipelineStageFlags2.PIPELINE_STAGE_2_COMPUTE_SHADER_BIT'
-- pipeline stage with the
-- 'Vulkan.Core13.Enums.AccessFlags2.ACCESS_2_SHADER_STORAGE_READ_BIT' and
-- 'Vulkan.Core13.Enums.AccessFlags2.ACCESS_2_SHADER_STORAGE_WRITE_BIT'
-- access flags.
--
-- == Valid Usage
--
-- -   #VUID-vkCmdDispatchGraphAMDX-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-vkCmdDispatchGraphAMDX-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-vkCmdDispatchGraphAMDX-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-vkCmdDispatchGraphAMDX-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-vkCmdDispatchGraphAMDX-None-07888# If a
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER'
--     descriptor is accessed using atomic operations as a result of this
--     command, then the storage texel buffer’s
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-buffer-view-format-features format features>
--     /must/ contain
--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT'
--
-- -   #VUID-vkCmdDispatchGraphAMDX-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-vkCmdDispatchGraphAMDX-None-02693# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_filter_cubic VK_EXT_filter_cubic>
--     extension is not enabled and any 'Vulkan.Core10.Handles.ImageView'
--     is sampled with 'Vulkan.Core10.Enums.Filter.FILTER_CUBIC_EXT' as a
--     result of this command, it /must/ not have a
--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' of
--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',
--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE', or
--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY'
--
-- -   #VUID-vkCmdDispatchGraphAMDX-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-vkCmdDispatchGraphAMDX-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-vkCmdDispatchGraphAMDX-cubicRangeClamp-09212# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-filter-cubic-range-clamp cubicRangeClamp>
--     feature is not enabled, then any 'Vulkan.Core10.Handles.ImageView'
--     being sampled with 'Vulkan.Core10.Enums.Filter.FILTER_CUBIC_EXT' as
--     a result of this command /must/ not have a
--     'Vulkan.Core12.Promoted_From_VK_EXT_sampler_filter_minmax.SamplerReductionModeCreateInfo'::@reductionMode@
--     equal to
--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM'
--
-- -   #VUID-vkCmdDispatchGraphAMDX-reductionMode-09213# Any
--     'Vulkan.Core10.Handles.ImageView' being sampled with a
--     'Vulkan.Core12.Promoted_From_VK_EXT_sampler_filter_minmax.SamplerReductionModeCreateInfo'::@reductionMode@
--     equal to
--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM'
--     as a result of this command /must/ sample with
--     'Vulkan.Core10.Enums.Filter.FILTER_CUBIC_EXT'
--
-- -   #VUID-vkCmdDispatchGraphAMDX-selectableCubicWeights-09214# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-filter-cubic-weight-selection selectableCubicWeights>
--     feature is not enabled, then any 'Vulkan.Core10.Handles.ImageView'
--     being sampled with 'Vulkan.Core10.Enums.Filter.FILTER_CUBIC_EXT' as
--     a result of this command /must/ have
--     'Vulkan.Extensions.VK_QCOM_filter_cubic_weights.SamplerCubicWeightsCreateInfoQCOM'::@cubicWeights@
--     equal to
--     'Vulkan.Extensions.VK_QCOM_filter_cubic_weights.CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM'
--
-- -   #VUID-vkCmdDispatchGraphAMDX-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-vkCmdDispatchGraphAMDX-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-vkCmdDispatchGraphAMDX-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-vkCmdDispatchGraphAMDX-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-vkCmdDispatchGraphAMDX-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-vkCmdDispatchGraphAMDX-None-08600# For each set /n/ that is
--     statically used by
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding a bound shader>,
--     a descriptor set /must/ have been bound to /n/ at the same pipeline
--     bind point, with a 'Vulkan.Core10.Handles.PipelineLayout' that is
--     compatible for set /n/, with the
--     'Vulkan.Core10.Handles.PipelineLayout' used to create the current
--     'Vulkan.Core10.Handles.Pipeline' or the
--     'Vulkan.Core10.Handles.DescriptorSetLayout' array used to create the
--     current 'Vulkan.Extensions.Handles.ShaderEXT' , as described in
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
--
-- -   #VUID-vkCmdDispatchGraphAMDX-None-08601# For each push constant that
--     is statically used by
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding a bound shader>,
--     a push constant value /must/ have been set for the same pipeline
--     bind point, with a 'Vulkan.Core10.Handles.PipelineLayout' that is
--     compatible for push constants, with the
--     'Vulkan.Core10.Handles.PipelineLayout' used to create the current
--     'Vulkan.Core10.Handles.Pipeline' or the
--     'Vulkan.Core10.Handles.DescriptorSetLayout' array used to create the
--     current 'Vulkan.Extensions.Handles.ShaderEXT' , as described in
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
--
-- -   #VUID-vkCmdDispatchGraphAMDX-maintenance4-08602# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-maintenance4 maintenance4>
--     feature is not enabled, then for each push constant that is
--     statically used by
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding a bound shader>,
--     a push constant value /must/ have been set for the same pipeline
--     bind point, with a 'Vulkan.Core10.Handles.PipelineLayout' that is
--     compatible for push constants, with the
--     'Vulkan.Core10.Handles.PipelineLayout' used to create the current
--     'Vulkan.Core10.Handles.Pipeline' or the
--     'Vulkan.Core10.Handles.DescriptorSetLayout' and
--     'Vulkan.Core10.PipelineLayout.PushConstantRange' arrays used to
--     create the current 'Vulkan.Extensions.Handles.ShaderEXT' , as
--     described in
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
--
-- -   #VUID-vkCmdDispatchGraphAMDX-None-08114# Descriptors in each bound
--     descriptor set, specified via
--     'Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets', /must/
--     be valid as described by
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptor-validity descriptor validity>
--     if they are statically used by the 'Vulkan.Core10.Handles.Pipeline'
--     bound to the pipeline bind point used by this command and the bound
--     'Vulkan.Core10.Handles.Pipeline' was not created with
--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT'
--
-- -   #VUID-vkCmdDispatchGraphAMDX-None-08115# If the descriptors used by
--     the 'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind
--     point were specified via
--     'Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets', the
--     bound 'Vulkan.Core10.Handles.Pipeline' /must/ have been created
--     without
--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT'
--
-- -   #VUID-vkCmdDispatchGraphAMDX-None-08116# Descriptors in bound
--     descriptor buffers, specified via
--     'Vulkan.Extensions.VK_EXT_descriptor_buffer.cmdSetDescriptorBufferOffsetsEXT',
--     /must/ be valid if they are dynamically used by the
--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point
--     used by this command and the bound 'Vulkan.Core10.Handles.Pipeline'
--     was created with
--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT'
--
-- -   #VUID-vkCmdDispatchGraphAMDX-None-08604# Descriptors in bound
--     descriptor buffers, specified via
--     'Vulkan.Extensions.VK_EXT_descriptor_buffer.cmdSetDescriptorBufferOffsetsEXT',
--     /must/ be valid if they are dynamically used by any
--     'Vulkan.Extensions.Handles.ShaderEXT' bound to a stage corresponding
--     to the pipeline bind point used by this command
--
-- -   #VUID-vkCmdDispatchGraphAMDX-None-08117# If the descriptors used by
--     the 'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind
--     point were specified via
--     'Vulkan.Extensions.VK_EXT_descriptor_buffer.cmdSetDescriptorBufferOffsetsEXT',
--     the bound 'Vulkan.Core10.Handles.Pipeline' /must/ have been created
--     with
--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT'
--
-- -   #VUID-vkCmdDispatchGraphAMDX-None-08119# If a descriptor is
--     dynamically used with a 'Vulkan.Core10.Handles.Pipeline' created
--     with
--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT',
--     the descriptor memory /must/ be resident
--
-- -   #VUID-vkCmdDispatchGraphAMDX-None-08605# If a descriptor is
--     dynamically used with a 'Vulkan.Extensions.Handles.ShaderEXT'
--     created with a 'Vulkan.Core10.Handles.DescriptorSetLayout' that was
--     created with
--     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT',
--     the descriptor memory /must/ be resident
--
-- -   #VUID-vkCmdDispatchGraphAMDX-None-08606# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shaderObject shaderObject>
--     feature is not enabled, a valid pipeline /must/ be bound to the
--     pipeline bind point used by this command
--
-- -   #VUID-vkCmdDispatchGraphAMDX-None-08608# If a pipeline is bound to
--     the pipeline bind point used by this command, there /must/ not have
--     been any calls to dynamic state setting commands for any state 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-vkCmdDispatchGraphAMDX-None-08609# If the
--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
--     point used by this command or any
--     'Vulkan.Extensions.Handles.ShaderEXT' bound to a stage corresponding
--     to the pipeline bind point used by this command accesses a
--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
--     coordinates, that sampler /must/ not be used to sample from any
--     'Vulkan.Core10.Handles.Image' with a
--     'Vulkan.Core10.Handles.ImageView' of the type
--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',
--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',
--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',
--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' or
--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in
--     any shader stage
--
-- -   #VUID-vkCmdDispatchGraphAMDX-None-08610# If the
--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
--     point used by this command or any
--     'Vulkan.Extensions.Handles.ShaderEXT' bound to a stage corresponding
--     to the pipeline bind point used by this command accesses a
--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
--     coordinates, that sampler /must/ not be used with any of the SPIR-V
--     @OpImageSample*@ or @OpImageSparseSample*@ instructions with
--     @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage
--
-- -   #VUID-vkCmdDispatchGraphAMDX-None-08611# If the
--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
--     point used by this command or any
--     'Vulkan.Extensions.Handles.ShaderEXT' bound to a stage corresponding
--     to the pipeline bind point used by this command accesses a
--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
--     coordinates, that sampler /must/ not be used with any of the SPIR-V
--     @OpImageSample*@ or @OpImageSparseSample*@ instructions that
--     includes a LOD bias or any offset values, in any shader stage
--
-- -   #VUID-vkCmdDispatchGraphAMDX-None-08607# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shaderObject shaderObject>
--     is enabled, either a valid pipeline /must/ be bound to the pipeline
--     bind point used by this command, or a valid combination of valid and
--     'Vulkan.Core10.APIConstants.NULL_HANDLE' shader objects /must/ be
--     bound to every supported shader stage corresponding to the pipeline
--     bind point used by this command
--
-- -   #VUID-vkCmdDispatchGraphAMDX-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-vkCmdDispatchGraphAMDX-None-08612# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robustBufferAccess>
--     feature is not enabled, and any
--     'Vulkan.Extensions.Handles.ShaderEXT' bound to a stage corresponding
--     to the pipeline bind point used by this command accesses a uniform
--     buffer, it /must/ not access values outside of the range of the
--     buffer as specified in the descriptor set bound to the same pipeline
--     bind point
--
-- -   #VUID-vkCmdDispatchGraphAMDX-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-vkCmdDispatchGraphAMDX-None-08613# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robustBufferAccess>
--     feature is not enabled, and any
--     'Vulkan.Extensions.Handles.ShaderEXT' bound to a stage corresponding
--     to the pipeline bind point used by this command accesses a storage
--     buffer, it /must/ not access values outside of the range of the
--     buffer as specified in the descriptor set bound to the same pipeline
--     bind point
--
-- -   #VUID-vkCmdDispatchGraphAMDX-commandBuffer-02707# If @commandBuffer@
--     is an unprotected command buffer and
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-protectedNoFault protectedNoFault>
--     is not supported, any resource accessed by
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding bound shaders>
--     /must/ not be a protected resource
--
-- -   #VUID-vkCmdDispatchGraphAMDX-None-06550# If
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding a bound shader>
--     accesses a 'Vulkan.Core10.Handles.Sampler' or
--     'Vulkan.Core10.Handles.ImageView' object that enables
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>,
--     that object /must/ only be used with @OpImageSample*@ or
--     @OpImageSparseSample*@ instructions
--
-- -   #VUID-vkCmdDispatchGraphAMDX-ConstOffset-06551# If
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding a bound shader>
--     accesses a 'Vulkan.Core10.Handles.Sampler' or
--     'Vulkan.Core10.Handles.ImageView' object that enables
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>,
--     that object /must/ not use the @ConstOffset@ and @Offset@ operands
--
-- -   #VUID-vkCmdDispatchGraphAMDX-viewType-07752# If a
--     'Vulkan.Core10.Handles.ImageView' is accessed as a result of this
--     command, then the image view’s @viewType@ /must/ match the @Dim@
--     operand of the @OpTypeImage@ as described in
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-operation-validation ???>
--
-- -   #VUID-vkCmdDispatchGraphAMDX-format-07753# If a
--     'Vulkan.Core10.Handles.ImageView' is accessed as a result of this
--     command, then the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-numericformat numeric type>
--     of the image view’s @format@ and the @Sampled@ @Type@ operand of the
--     @OpTypeImage@ /must/ match
--
-- -   #VUID-vkCmdDispatchGraphAMDX-OpImageWrite-08795# If a
--     'Vulkan.Core10.Handles.ImageView' created with a format other than
--     'Vulkan.Core10.Enums.Format.FORMAT_A8_UNORM_KHR' is accessed using
--     @OpImageWrite@ as a result of this command, then the @Type@ of the
--     @Texel@ operand of that instruction /must/ have at least as many
--     components as the image view’s format
--
-- -   #VUID-vkCmdDispatchGraphAMDX-OpImageWrite-08796# If a
--     'Vulkan.Core10.Handles.ImageView' created with the format
--     'Vulkan.Core10.Enums.Format.FORMAT_A8_UNORM_KHR' is accessed using
--     @OpImageWrite@ as a result of this command, then the @Type@ of the
--     @Texel@ operand of that instruction /must/ have four components
--
-- -   #VUID-vkCmdDispatchGraphAMDX-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-vkCmdDispatchGraphAMDX-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-vkCmdDispatchGraphAMDX-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-vkCmdDispatchGraphAMDX-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-vkCmdDispatchGraphAMDX-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-vkCmdDispatchGraphAMDX-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-vkCmdDispatchGraphAMDX-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-vkCmdDispatchGraphAMDX-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-vkCmdDispatchGraphAMDX-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-vkCmdDispatchGraphAMDX-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-vkCmdDispatchGraphAMDX-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-vkCmdDispatchGraphAMDX-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-vkCmdDispatchGraphAMDX-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-vkCmdDispatchGraphAMDX-OpImageWeightedSampleQCOM-06977# If
--     @OpImageWeightedSampleQCOM@, @OpImageBoxFilterQCOM@,
--     @OpImageBlockMatchWindowSSDQCOM@, @OpImageBlockMatchWindowSADQCOM@,
--     @OpImageBlockMatchGatherSSDQCOM@, @OpImageBlockMatchGatherSADQCOM@,
--     @OpImageBlockMatchSSDQCOM@, or @OpImageBlockMatchSADQCOM@ uses a
--     'Vulkan.Core10.Handles.Sampler' as a result of this command, then
--     the sampler /must/ have been created with
--     'Vulkan.Core10.Enums.SamplerCreateFlagBits.SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM'
--
-- -   #VUID-vkCmdDispatchGraphAMDX-OpImageWeightedSampleQCOM-06978# If any
--     command other than @OpImageWeightedSampleQCOM@,
--     @OpImageBoxFilterQCOM@, @OpImageBlockMatchWindowSSDQCOM@,
--     @OpImageBlockMatchWindowSADQCOM@, @OpImageBlockMatchGatherSSDQCOM@,
--     @OpImageBlockMatchGatherSADQCOM@, @OpImageBlockMatchSSDQCOM@, or
--     @OpImageBlockMatchSADQCOM@ uses a 'Vulkan.Core10.Handles.Sampler' as
--     a result of this command, then the sampler /must/ not have been
--     created with
--     'Vulkan.Core10.Enums.SamplerCreateFlagBits.SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM'
--
-- -   #VUID-vkCmdDispatchGraphAMDX-OpImageBlockMatchWindow-09215# If a
--     @OpImageBlockMatchWindow*QCOM@ or @OpImageBlockMatchGather*QCOM@
--     instruction is used to read from an
--     'Vulkan.Core10.Handles.ImageView' as a result of this command, then
--     the image view’s
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
--     /must/ contain
--     'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM'
--
-- -   #VUID-vkCmdDispatchGraphAMDX-OpImageBlockMatchWindow-09216# If a
--     @OpImageBlockMatchWindow*QCOM@ or @OpImageBlockMatchGather*QCOM@
--     instruction is used to read from an
--     'Vulkan.Core10.Handles.ImageView' as a result of this command, then
--     the image view’s format /must/ be a single-component format.
--
-- -   #VUID-vkCmdDispatchGraphAMDX-OpImageBlockMatchWindow-09217# If a
--     @OpImageBlockMatchWindow*QCOM@ or @OpImageBlockMatchGather*QCOM@
--     read from a reference image as result of this command, then the
--     specified reference coordinates /must/ not fail
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-integer-coordinate-validation integer texel coordinate validation>
--
-- -   #VUID-vkCmdDispatchGraphAMDX-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-vkCmdDispatchGraphAMDX-commandBuffer-09181# @commandBuffer@
--     /must/ not be a protected command buffer
--
-- -   #VUID-vkCmdDispatchGraphAMDX-commandBuffer-09182# @commandBuffer@
--     /must/ be a primary command buffer
--
-- -   #VUID-vkCmdDispatchGraphAMDX-scratch-09183# @scratch@ /must/ be the
--     device address of an allocated memory range at least as large as the
--     value of 'ExecutionGraphPipelineScratchSizeAMDX'::@size@ returned by
--     'ExecutionGraphPipelineScratchSizeAMDX' for the currently bound
--     execution graph pipeline
--
-- -   #VUID-vkCmdDispatchGraphAMDX-scratch-09184# @scratch@ /must/ be a
--     device address within a 'Vulkan.Core10.Handles.Buffer' created with
--     the
--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_EXECUTION_GRAPH_SCRATCH_BIT_AMDX'
--     or 'BUFFER_USAGE_2_EXECUTION_GRAPH_SCRATCH_BIT_AMDX' flag
--
-- -   #VUID-vkCmdDispatchGraphAMDX-scratch-09185# Device memory in the
--     range [@scratch@,@scratch@
--     'ExecutionGraphPipelineScratchSizeAMDX'::@size@) /must/ have been
--     initialized with 'cmdInitializeGraphScratchMemoryAMDX' using the
--     currently bound execution graph pipeline, and not modified after
--     that by anything other than another execution graph dispatch command
--
-- -   #VUID-vkCmdDispatchGraphAMDX-maxComputeWorkGroupCount-09186#
--     Execution of this command /must/ not cause a node to be dispatched
--     with a larger number of workgroups than that specified by either a
--     @MaxNumWorkgroupsAMDX@ decoration in the dispatched node or
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxComputeWorkGroupCount maxComputeWorkGroupCount>
--
-- -   #VUID-vkCmdDispatchGraphAMDX-maxExecutionGraphShaderPayloadCount-09187#
--     Execution of this command /must/ not cause any shader to initialize
--     more than
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxExecutionGraphShaderPayloadCount maxExecutionGraphShaderPayloadCount>
--     output payloads
--
-- -   #VUID-vkCmdDispatchGraphAMDX-NodeMaxPayloadsAMDX-09188# Execution of
--     this command /must/ not cause any shader that declares
--     @NodeMaxPayloadsAMDX@ to initialize more output payloads than
--     specified by the max number of payloads for that decoration. This
--     requirement applies to each @NodeMaxPayloadsAMDX@ decoration
--     separately
--
-- -   #VUID-vkCmdDispatchGraphAMDX-pCountInfo-09145# @pCountInfo->infos@
--     /must/ be a host pointer to a memory allocation at least as large as
--     the product of @count@ and @stride@
--
-- -   #VUID-vkCmdDispatchGraphAMDX-infos-09146# Host memory locations at
--     indexes in the range [@infos@, @infos@ + (@count@*@stride@)), at a
--     granularity of @stride@ /must/ contain valid 'DispatchGraphInfoAMDX'
--     structures in the first 24 bytes
--
-- -   #VUID-vkCmdDispatchGraphAMDX-pCountInfo-09147# For each
--     'DispatchGraphInfoAMDX' structure in @pCountInfo->infos@, @payloads@
--     /must/ be a host pointer to a memory allocation at least as large as
--     the product of @payloadCount@ and @payloadStride@
--
-- -   #VUID-vkCmdDispatchGraphAMDX-pCountInfo-09148# For each
--     'DispatchGraphInfoAMDX' structure in @pCountInfo->infos@,
--     @nodeIndex@ /must/ be a valid node index in the currently bound
--     execution graph pipeline, as returned by
--     'getExecutionGraphPipelineNodeIndexAMDX'
--
-- -   #VUID-vkCmdDispatchGraphAMDX-pCountInfo-09149# For each
--     'DispatchGraphInfoAMDX' structure in @pCountInfo->infos@, host
--     memory locations at indexes in the range [@payloads@, @payloads@ +
--     (@payloadCount@ * @payloadStride@)), at a granularity of
--     @payloadStride@ /must/ contain a payload matching the size of the
--     input payload expected by the node in @nodeIndex@ in the first bytes
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkCmdDispatchGraphAMDX-commandBuffer-parameter#
--     @commandBuffer@ /must/ be a valid
--     'Vulkan.Core10.Handles.CommandBuffer' handle
--
-- -   #VUID-vkCmdDispatchGraphAMDX-pCountInfo-parameter# @pCountInfo@
--     /must/ be a valid pointer to a valid 'DispatchGraphCountInfoAMDX'
--     structure
--
-- -   #VUID-vkCmdDispatchGraphAMDX-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-vkCmdDispatchGraphAMDX-commandBuffer-cmdpool# The
--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
--     allocated from /must/ support graphics, or compute operations
--
-- -   #VUID-vkCmdDispatchGraphAMDX-renderpass# This command /must/ only be
--     called outside of a render pass instance
--
-- -   #VUID-vkCmdDispatchGraphAMDX-videocoding# This command /must/ only
--     be called outside of a video coding scope
--
-- -   #VUID-vkCmdDispatchGraphAMDX-bufferlevel# @commandBuffer@ /must/ be
--     a primary 'Vulkan.Core10.Handles.CommandBuffer'
--
-- == Host Synchronization
--
-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
--     @commandBuffer@ was allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- \'
--
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------+
-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginVideoCodingKHR Video Coding Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-queueoperation-command-types Command Type> |
-- +============================================================================================================================+========================================================================================================================+=============================================================================================================================+=======================================================================================================================+========================================================================================================================================+
-- | Primary                                                                                                                    | Outside                                                                                                                | Outside                                                                                                                     | Graphics                                                                                                              | Action                                                                                                                                 |
-- |                                                                                                                            |                                                                                                                        |                                                                                                                             | Compute                                                                                                               |                                                                                                                                        |
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------+
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_AMDX_shader_enqueue VK_AMDX_shader_enqueue>,
-- 'Vulkan.Core10.Handles.CommandBuffer',
-- 'Vulkan.Core10.FundamentalTypes.DeviceAddress',
-- 'DispatchGraphCountInfoAMDX'
cmdDispatchGraphAMDX :: forall io
                      . (MonadIO io)
                     => -- | @commandBuffer@ is the command buffer into which the command will be
                        -- recorded.
                        CommandBuffer
                     -> -- | @scratch@ is a pointer to the scratch memory to be used.
                        ("scratch" ::: DeviceAddress)
                     -> -- | @pCountInfo@ is a host pointer to a 'DispatchGraphCountInfoAMDX'
                        -- structure defining the nodes which will be initially executed.
                        DispatchGraphCountInfoAMDX
                     -> io ()
cmdDispatchGraphAMDX :: forall (io :: * -> *).
MonadIO io =>
CommandBuffer -> Flags64 -> DispatchGraphCountInfoAMDX -> io ()
cmdDispatchGraphAMDX CommandBuffer
commandBuffer Flags64
scratch DispatchGraphCountInfoAMDX
countInfo = IO () -> io ()
forall a. IO a -> io a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> io ())
-> (ContT () IO () -> IO ()) -> ContT () IO () -> io ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> io ()) -> ContT () IO () -> io ()
forall a b. (a -> b) -> a -> b
$ do
  let vkCmdDispatchGraphAMDXPtr :: FunPtr
  (Ptr CommandBuffer_T
   -> Flags64 -> Ptr DispatchGraphCountInfoAMDX -> IO ())
vkCmdDispatchGraphAMDXPtr = DeviceCmds
-> FunPtr
     (Ptr CommandBuffer_T
      -> Flags64 -> Ptr DispatchGraphCountInfoAMDX -> IO ())
pVkCmdDispatchGraphAMDX (case CommandBuffer
commandBuffer of CommandBuffer{DeviceCmds
$sel:deviceCmds:CommandBuffer :: CommandBuffer -> DeviceCmds
deviceCmds :: DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO () -> ContT () IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT () m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr CommandBuffer_T
   -> Flags64 -> Ptr DispatchGraphCountInfoAMDX -> IO ())
vkCmdDispatchGraphAMDXPtr FunPtr
  (Ptr CommandBuffer_T
   -> Flags64 -> Ptr DispatchGraphCountInfoAMDX -> IO ())
-> FunPtr
     (Ptr CommandBuffer_T
      -> Flags64 -> Ptr DispatchGraphCountInfoAMDX -> IO ())
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr CommandBuffer_T
   -> Flags64 -> Ptr DispatchGraphCountInfoAMDX -> 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 vkCmdDispatchGraphAMDX is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkCmdDispatchGraphAMDX' :: Ptr CommandBuffer_T
-> Flags64 -> Ptr DispatchGraphCountInfoAMDX -> IO ()
vkCmdDispatchGraphAMDX' = FunPtr
  (Ptr CommandBuffer_T
   -> Flags64 -> Ptr DispatchGraphCountInfoAMDX -> IO ())
-> Ptr CommandBuffer_T
-> Flags64
-> Ptr DispatchGraphCountInfoAMDX
-> IO ()
mkVkCmdDispatchGraphAMDX FunPtr
  (Ptr CommandBuffer_T
   -> Flags64 -> Ptr DispatchGraphCountInfoAMDX -> IO ())
vkCmdDispatchGraphAMDXPtr
  Ptr DispatchGraphCountInfoAMDX
pCountInfo <- ((Ptr DispatchGraphCountInfoAMDX -> IO ()) -> IO ())
-> ContT () IO (Ptr DispatchGraphCountInfoAMDX)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr DispatchGraphCountInfoAMDX -> IO ()) -> IO ())
 -> ContT () IO (Ptr DispatchGraphCountInfoAMDX))
-> ((Ptr DispatchGraphCountInfoAMDX -> IO ()) -> IO ())
-> ContT () IO (Ptr DispatchGraphCountInfoAMDX)
forall a b. (a -> b) -> a -> b
$ DispatchGraphCountInfoAMDX
-> (Ptr DispatchGraphCountInfoAMDX -> IO ()) -> IO ()
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
forall b.
DispatchGraphCountInfoAMDX
-> (Ptr DispatchGraphCountInfoAMDX -> IO b) -> IO b
withCStruct (DispatchGraphCountInfoAMDX
countInfo)
  IO () -> ContT () IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT () m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ String -> IO () -> IO ()
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkCmdDispatchGraphAMDX" (Ptr CommandBuffer_T
-> Flags64 -> Ptr DispatchGraphCountInfoAMDX -> IO ()
vkCmdDispatchGraphAMDX'
                                                      (CommandBuffer -> Ptr CommandBuffer_T
commandBufferHandle (CommandBuffer
commandBuffer))
                                                      (Flags64
scratch)
                                                      Ptr DispatchGraphCountInfoAMDX
pCountInfo)
  () -> ContT () IO ()
forall a. a -> ContT () IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (() -> ContT () IO ()) -> () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ ()


foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkCmdDispatchGraphIndirectAMDX
  :: FunPtr (Ptr CommandBuffer_T -> DeviceAddress -> Ptr DispatchGraphCountInfoAMDX -> IO ()) -> Ptr CommandBuffer_T -> DeviceAddress -> Ptr DispatchGraphCountInfoAMDX -> IO ()

-- | vkCmdDispatchGraphIndirectAMDX - Dispatch an execution graph with node
-- and payload parameters read on the device
--
-- = Description
--
-- When this command is executed, the nodes specified in @pCountInfo@ are
-- executed. Nodes executed as part of this command are not implicitly
-- synchronized in any way against each other once they are dispatched.
--
-- For this command, all device\/host pointers in substructures are treated
-- as device pointers and read during device execution of this command. The
-- allocation and contents of these pointers only needs to be valid during
-- device execution. All of these addresses will be read in the
-- 'Vulkan.Core13.Enums.PipelineStageFlags2.PIPELINE_STAGE_2_COMPUTE_SHADER_BIT'
-- pipeline stage with the
-- 'Vulkan.Core13.Enums.AccessFlags2.ACCESS_2_SHADER_STORAGE_READ_BIT'
-- access flag.
--
-- Execution of this command /may/ modify any memory locations in the range
-- [@scratch@,@scratch@ + @size@), where @size@ is the value returned in
-- 'ExecutionGraphPipelineScratchSizeAMDX'::@size@ by
-- 'ExecutionGraphPipelineScratchSizeAMDX' for the currently bound
-- execution graph pipeline. Accesses to this memory range are performed in
-- the
-- 'Vulkan.Core13.Enums.PipelineStageFlags2.PIPELINE_STAGE_2_COMPUTE_SHADER_BIT'
-- pipeline stage with the
-- 'Vulkan.Core13.Enums.AccessFlags2.ACCESS_2_SHADER_STORAGE_READ_BIT' and
-- 'Vulkan.Core13.Enums.AccessFlags2.ACCESS_2_SHADER_STORAGE_WRITE_BIT'
-- access flags.
--
-- == Valid Usage
--
-- -   #VUID-vkCmdDispatchGraphIndirectAMDX-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-vkCmdDispatchGraphIndirectAMDX-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-vkCmdDispatchGraphIndirectAMDX-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-vkCmdDispatchGraphIndirectAMDX-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-vkCmdDispatchGraphIndirectAMDX-None-07888# If a
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER'
--     descriptor is accessed using atomic operations as a result of this
--     command, then the storage texel buffer’s
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-buffer-view-format-features format features>
--     /must/ contain
--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT'
--
-- -   #VUID-vkCmdDispatchGraphIndirectAMDX-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-vkCmdDispatchGraphIndirectAMDX-None-02693# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_filter_cubic VK_EXT_filter_cubic>
--     extension is not enabled and any 'Vulkan.Core10.Handles.ImageView'
--     is sampled with 'Vulkan.Core10.Enums.Filter.FILTER_CUBIC_EXT' as a
--     result of this command, it /must/ not have a
--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' of
--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',
--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE', or
--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY'
--
-- -   #VUID-vkCmdDispatchGraphIndirectAMDX-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-vkCmdDispatchGraphIndirectAMDX-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-vkCmdDispatchGraphIndirectAMDX-cubicRangeClamp-09212# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-filter-cubic-range-clamp cubicRangeClamp>
--     feature is not enabled, then any 'Vulkan.Core10.Handles.ImageView'
--     being sampled with 'Vulkan.Core10.Enums.Filter.FILTER_CUBIC_EXT' as
--     a result of this command /must/ not have a
--     'Vulkan.Core12.Promoted_From_VK_EXT_sampler_filter_minmax.SamplerReductionModeCreateInfo'::@reductionMode@
--     equal to
--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM'
--
-- -   #VUID-vkCmdDispatchGraphIndirectAMDX-reductionMode-09213# Any
--     'Vulkan.Core10.Handles.ImageView' being sampled with a
--     'Vulkan.Core12.Promoted_From_VK_EXT_sampler_filter_minmax.SamplerReductionModeCreateInfo'::@reductionMode@
--     equal to
--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM'
--     as a result of this command /must/ sample with
--     'Vulkan.Core10.Enums.Filter.FILTER_CUBIC_EXT'
--
-- -   #VUID-vkCmdDispatchGraphIndirectAMDX-selectableCubicWeights-09214#
--     If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-filter-cubic-weight-selection selectableCubicWeights>
--     feature is not enabled, then any 'Vulkan.Core10.Handles.ImageView'
--     being sampled with 'Vulkan.Core10.Enums.Filter.FILTER_CUBIC_EXT' as
--     a result of this command /must/ have
--     'Vulkan.Extensions.VK_QCOM_filter_cubic_weights.SamplerCubicWeightsCreateInfoQCOM'::@cubicWeights@
--     equal to
--     'Vulkan.Extensions.VK_QCOM_filter_cubic_weights.CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM'
--
-- -   #VUID-vkCmdDispatchGraphIndirectAMDX-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-vkCmdDispatchGraphIndirectAMDX-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-vkCmdDispatchGraphIndirectAMDX-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-vkCmdDispatchGraphIndirectAMDX-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-vkCmdDispatchGraphIndirectAMDX-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-vkCmdDispatchGraphIndirectAMDX-None-08600# For each set /n/
--     that is statically used by
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding a bound shader>,
--     a descriptor set /must/ have been bound to /n/ at the same pipeline
--     bind point, with a 'Vulkan.Core10.Handles.PipelineLayout' that is
--     compatible for set /n/, with the
--     'Vulkan.Core10.Handles.PipelineLayout' used to create the current
--     'Vulkan.Core10.Handles.Pipeline' or the
--     'Vulkan.Core10.Handles.DescriptorSetLayout' array used to create the
--     current 'Vulkan.Extensions.Handles.ShaderEXT' , as described in
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
--
-- -   #VUID-vkCmdDispatchGraphIndirectAMDX-None-08601# For each push
--     constant that is statically used by
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding a bound shader>,
--     a push constant value /must/ have been set for the same pipeline
--     bind point, with a 'Vulkan.Core10.Handles.PipelineLayout' that is
--     compatible for push constants, with the
--     'Vulkan.Core10.Handles.PipelineLayout' used to create the current
--     'Vulkan.Core10.Handles.Pipeline' or the
--     'Vulkan.Core10.Handles.DescriptorSetLayout' array used to create the
--     current 'Vulkan.Extensions.Handles.ShaderEXT' , as described in
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
--
-- -   #VUID-vkCmdDispatchGraphIndirectAMDX-maintenance4-08602# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-maintenance4 maintenance4>
--     feature is not enabled, then for each push constant that is
--     statically used by
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding a bound shader>,
--     a push constant value /must/ have been set for the same pipeline
--     bind point, with a 'Vulkan.Core10.Handles.PipelineLayout' that is
--     compatible for push constants, with the
--     'Vulkan.Core10.Handles.PipelineLayout' used to create the current
--     'Vulkan.Core10.Handles.Pipeline' or the
--     'Vulkan.Core10.Handles.DescriptorSetLayout' and
--     'Vulkan.Core10.PipelineLayout.PushConstantRange' arrays used to
--     create the current 'Vulkan.Extensions.Handles.ShaderEXT' , as
--     described in
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
--
-- -   #VUID-vkCmdDispatchGraphIndirectAMDX-None-08114# Descriptors in each
--     bound descriptor set, specified via
--     'Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets', /must/
--     be valid as described by
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptor-validity descriptor validity>
--     if they are statically used by the 'Vulkan.Core10.Handles.Pipeline'
--     bound to the pipeline bind point used by this command and the bound
--     'Vulkan.Core10.Handles.Pipeline' was not created with
--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT'
--
-- -   #VUID-vkCmdDispatchGraphIndirectAMDX-None-08115# If the descriptors
--     used by the 'Vulkan.Core10.Handles.Pipeline' bound to the pipeline
--     bind point were specified via
--     'Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets', the
--     bound 'Vulkan.Core10.Handles.Pipeline' /must/ have been created
--     without
--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT'
--
-- -   #VUID-vkCmdDispatchGraphIndirectAMDX-None-08116# Descriptors in
--     bound descriptor buffers, specified via
--     'Vulkan.Extensions.VK_EXT_descriptor_buffer.cmdSetDescriptorBufferOffsetsEXT',
--     /must/ be valid if they are dynamically used by the
--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point
--     used by this command and the bound 'Vulkan.Core10.Handles.Pipeline'
--     was created with
--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT'
--
-- -   #VUID-vkCmdDispatchGraphIndirectAMDX-None-08604# Descriptors in
--     bound descriptor buffers, specified via
--     'Vulkan.Extensions.VK_EXT_descriptor_buffer.cmdSetDescriptorBufferOffsetsEXT',
--     /must/ be valid if they are dynamically used by any
--     'Vulkan.Extensions.Handles.ShaderEXT' bound to a stage corresponding
--     to the pipeline bind point used by this command
--
-- -   #VUID-vkCmdDispatchGraphIndirectAMDX-None-08117# If the descriptors
--     used by the 'Vulkan.Core10.Handles.Pipeline' bound to the pipeline
--     bind point were specified via
--     'Vulkan.Extensions.VK_EXT_descriptor_buffer.cmdSetDescriptorBufferOffsetsEXT',
--     the bound 'Vulkan.Core10.Handles.Pipeline' /must/ have been created
--     with
--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT'
--
-- -   #VUID-vkCmdDispatchGraphIndirectAMDX-None-08119# If a descriptor is
--     dynamically used with a 'Vulkan.Core10.Handles.Pipeline' created
--     with
--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT',
--     the descriptor memory /must/ be resident
--
-- -   #VUID-vkCmdDispatchGraphIndirectAMDX-None-08605# If a descriptor is
--     dynamically used with a 'Vulkan.Extensions.Handles.ShaderEXT'
--     created with a 'Vulkan.Core10.Handles.DescriptorSetLayout' that was
--     created with
--     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT',
--     the descriptor memory /must/ be resident
--
-- -   #VUID-vkCmdDispatchGraphIndirectAMDX-None-08606# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shaderObject shaderObject>
--     feature is not enabled, a valid pipeline /must/ be bound to the
--     pipeline bind point used by this command
--
-- -   #VUID-vkCmdDispatchGraphIndirectAMDX-None-08608# If a pipeline is
--     bound to the pipeline bind point used by this command, there /must/
--     not have been any calls to dynamic state setting commands for any
--     state 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-vkCmdDispatchGraphIndirectAMDX-None-08609# If the
--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
--     point used by this command or any
--     'Vulkan.Extensions.Handles.ShaderEXT' bound to a stage corresponding
--     to the pipeline bind point used by this command accesses a
--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
--     coordinates, that sampler /must/ not be used to sample from any
--     'Vulkan.Core10.Handles.Image' with a
--     'Vulkan.Core10.Handles.ImageView' of the type
--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',
--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',
--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',
--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' or
--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in
--     any shader stage
--
-- -   #VUID-vkCmdDispatchGraphIndirectAMDX-None-08610# If the
--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
--     point used by this command or any
--     'Vulkan.Extensions.Handles.ShaderEXT' bound to a stage corresponding
--     to the pipeline bind point used by this command accesses a
--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
--     coordinates, that sampler /must/ not be used with any of the SPIR-V
--     @OpImageSample*@ or @OpImageSparseSample*@ instructions with
--     @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage
--
-- -   #VUID-vkCmdDispatchGraphIndirectAMDX-None-08611# If the
--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
--     point used by this command or any
--     'Vulkan.Extensions.Handles.ShaderEXT' bound to a stage corresponding
--     to the pipeline bind point used by this command accesses a
--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
--     coordinates, that sampler /must/ not be used with any of the SPIR-V
--     @OpImageSample*@ or @OpImageSparseSample*@ instructions that
--     includes a LOD bias or any offset values, in any shader stage
--
-- -   #VUID-vkCmdDispatchGraphIndirectAMDX-None-08607# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shaderObject shaderObject>
--     is enabled, either a valid pipeline /must/ be bound to the pipeline
--     bind point used by this command, or a valid combination of valid and
--     'Vulkan.Core10.APIConstants.NULL_HANDLE' shader objects /must/ be
--     bound to every supported shader stage corresponding to the pipeline
--     bind point used by this command
--
-- -   #VUID-vkCmdDispatchGraphIndirectAMDX-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-vkCmdDispatchGraphIndirectAMDX-None-08612# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robustBufferAccess>
--     feature is not enabled, and any
--     'Vulkan.Extensions.Handles.ShaderEXT' bound to a stage corresponding
--     to the pipeline bind point used by this command accesses a uniform
--     buffer, it /must/ not access values outside of the range of the
--     buffer as specified in the descriptor set bound to the same pipeline
--     bind point
--
-- -   #VUID-vkCmdDispatchGraphIndirectAMDX-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-vkCmdDispatchGraphIndirectAMDX-None-08613# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robustBufferAccess>
--     feature is not enabled, and any
--     'Vulkan.Extensions.Handles.ShaderEXT' bound to a stage corresponding
--     to the pipeline bind point used by this command accesses a storage
--     buffer, it /must/ not access values outside of the range of the
--     buffer as specified in the descriptor set bound to the same pipeline
--     bind point
--
-- -   #VUID-vkCmdDispatchGraphIndirectAMDX-commandBuffer-02707# If
--     @commandBuffer@ is an unprotected command buffer and
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-protectedNoFault protectedNoFault>
--     is not supported, any resource accessed by
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding bound shaders>
--     /must/ not be a protected resource
--
-- -   #VUID-vkCmdDispatchGraphIndirectAMDX-None-06550# If
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding a bound shader>
--     accesses a 'Vulkan.Core10.Handles.Sampler' or
--     'Vulkan.Core10.Handles.ImageView' object that enables
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>,
--     that object /must/ only be used with @OpImageSample*@ or
--     @OpImageSparseSample*@ instructions
--
-- -   #VUID-vkCmdDispatchGraphIndirectAMDX-ConstOffset-06551# If
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding a bound shader>
--     accesses a 'Vulkan.Core10.Handles.Sampler' or
--     'Vulkan.Core10.Handles.ImageView' object that enables
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>,
--     that object /must/ not use the @ConstOffset@ and @Offset@ operands
--
-- -   #VUID-vkCmdDispatchGraphIndirectAMDX-viewType-07752# If a
--     'Vulkan.Core10.Handles.ImageView' is accessed as a result of this
--     command, then the image view’s @viewType@ /must/ match the @Dim@
--     operand of the @OpTypeImage@ as described in
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-operation-validation ???>
--
-- -   #VUID-vkCmdDispatchGraphIndirectAMDX-format-07753# If a
--     'Vulkan.Core10.Handles.ImageView' is accessed as a result of this
--     command, then the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-numericformat numeric type>
--     of the image view’s @format@ and the @Sampled@ @Type@ operand of the
--     @OpTypeImage@ /must/ match
--
-- -   #VUID-vkCmdDispatchGraphIndirectAMDX-OpImageWrite-08795# If a
--     'Vulkan.Core10.Handles.ImageView' created with a format other than
--     'Vulkan.Core10.Enums.Format.FORMAT_A8_UNORM_KHR' is accessed using
--     @OpImageWrite@ as a result of this command, then the @Type@ of the
--     @Texel@ operand of that instruction /must/ have at least as many
--     components as the image view’s format
--
-- -   #VUID-vkCmdDispatchGraphIndirectAMDX-OpImageWrite-08796# If a
--     'Vulkan.Core10.Handles.ImageView' created with the format
--     'Vulkan.Core10.Enums.Format.FORMAT_A8_UNORM_KHR' is accessed using
--     @OpImageWrite@ as a result of this command, then the @Type@ of the
--     @Texel@ operand of that instruction /must/ have four components
--
-- -   #VUID-vkCmdDispatchGraphIndirectAMDX-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-vkCmdDispatchGraphIndirectAMDX-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-vkCmdDispatchGraphIndirectAMDX-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-vkCmdDispatchGraphIndirectAMDX-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-vkCmdDispatchGraphIndirectAMDX-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-vkCmdDispatchGraphIndirectAMDX-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-vkCmdDispatchGraphIndirectAMDX-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-vkCmdDispatchGraphIndirectAMDX-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-vkCmdDispatchGraphIndirectAMDX-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-vkCmdDispatchGraphIndirectAMDX-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-vkCmdDispatchGraphIndirectAMDX-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-vkCmdDispatchGraphIndirectAMDX-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-vkCmdDispatchGraphIndirectAMDX-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-vkCmdDispatchGraphIndirectAMDX-OpImageWeightedSampleQCOM-06977#
--     If @OpImageWeightedSampleQCOM@, @OpImageBoxFilterQCOM@,
--     @OpImageBlockMatchWindowSSDQCOM@, @OpImageBlockMatchWindowSADQCOM@,
--     @OpImageBlockMatchGatherSSDQCOM@, @OpImageBlockMatchGatherSADQCOM@,
--     @OpImageBlockMatchSSDQCOM@, or @OpImageBlockMatchSADQCOM@ uses a
--     'Vulkan.Core10.Handles.Sampler' as a result of this command, then
--     the sampler /must/ have been created with
--     'Vulkan.Core10.Enums.SamplerCreateFlagBits.SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM'
--
-- -   #VUID-vkCmdDispatchGraphIndirectAMDX-OpImageWeightedSampleQCOM-06978#
--     If any command other than @OpImageWeightedSampleQCOM@,
--     @OpImageBoxFilterQCOM@, @OpImageBlockMatchWindowSSDQCOM@,
--     @OpImageBlockMatchWindowSADQCOM@, @OpImageBlockMatchGatherSSDQCOM@,
--     @OpImageBlockMatchGatherSADQCOM@, @OpImageBlockMatchSSDQCOM@, or
--     @OpImageBlockMatchSADQCOM@ uses a 'Vulkan.Core10.Handles.Sampler' as
--     a result of this command, then the sampler /must/ not have been
--     created with
--     'Vulkan.Core10.Enums.SamplerCreateFlagBits.SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM'
--
-- -   #VUID-vkCmdDispatchGraphIndirectAMDX-OpImageBlockMatchWindow-09215#
--     If a @OpImageBlockMatchWindow*QCOM@ or
--     @OpImageBlockMatchGather*QCOM@ instruction is used to read from an
--     'Vulkan.Core10.Handles.ImageView' as a result of this command, then
--     the image view’s
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
--     /must/ contain
--     'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM'
--
-- -   #VUID-vkCmdDispatchGraphIndirectAMDX-OpImageBlockMatchWindow-09216#
--     If a @OpImageBlockMatchWindow*QCOM@ or
--     @OpImageBlockMatchGather*QCOM@ instruction is used to read from an
--     'Vulkan.Core10.Handles.ImageView' as a result of this command, then
--     the image view’s format /must/ be a single-component format.
--
-- -   #VUID-vkCmdDispatchGraphIndirectAMDX-OpImageBlockMatchWindow-09217#
--     If a @OpImageBlockMatchWindow*QCOM@ or
--     @OpImageBlockMatchGather*QCOM@ read from a reference image as result
--     of this command, then the specified reference coordinates /must/ not
--     fail
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-integer-coordinate-validation integer texel coordinate validation>
--
-- -   #VUID-vkCmdDispatchGraphIndirectAMDX-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-vkCmdDispatchGraphIndirectAMDX-commandBuffer-09181#
--     @commandBuffer@ /must/ not be a protected command buffer
--
-- -   #VUID-vkCmdDispatchGraphIndirectAMDX-commandBuffer-09182#
--     @commandBuffer@ /must/ be a primary command buffer
--
-- -   #VUID-vkCmdDispatchGraphIndirectAMDX-scratch-09183# @scratch@ /must/
--     be the device address of an allocated memory range at least as large
--     as the value of 'ExecutionGraphPipelineScratchSizeAMDX'::@size@
--     returned by 'ExecutionGraphPipelineScratchSizeAMDX' for the
--     currently bound execution graph pipeline
--
-- -   #VUID-vkCmdDispatchGraphIndirectAMDX-scratch-09184# @scratch@ /must/
--     be a device address within a 'Vulkan.Core10.Handles.Buffer' created
--     with the
--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_EXECUTION_GRAPH_SCRATCH_BIT_AMDX'
--     or 'BUFFER_USAGE_2_EXECUTION_GRAPH_SCRATCH_BIT_AMDX' flag
--
-- -   #VUID-vkCmdDispatchGraphIndirectAMDX-scratch-09185# Device memory in
--     the range [@scratch@,@scratch@
--     'ExecutionGraphPipelineScratchSizeAMDX'::@size@) /must/ have been
--     initialized with 'cmdInitializeGraphScratchMemoryAMDX' using the
--     currently bound execution graph pipeline, and not modified after
--     that by anything other than another execution graph dispatch command
--
-- -   #VUID-vkCmdDispatchGraphIndirectAMDX-maxComputeWorkGroupCount-09186#
--     Execution of this command /must/ not cause a node to be dispatched
--     with a larger number of workgroups than that specified by either a
--     @MaxNumWorkgroupsAMDX@ decoration in the dispatched node or
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxComputeWorkGroupCount maxComputeWorkGroupCount>
--
-- -   #VUID-vkCmdDispatchGraphIndirectAMDX-maxExecutionGraphShaderPayloadCount-09187#
--     Execution of this command /must/ not cause any shader to initialize
--     more than
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxExecutionGraphShaderPayloadCount maxExecutionGraphShaderPayloadCount>
--     output payloads
--
-- -   #VUID-vkCmdDispatchGraphIndirectAMDX-NodeMaxPayloadsAMDX-09188#
--     Execution of this command /must/ not cause any shader that declares
--     @NodeMaxPayloadsAMDX@ to initialize more output payloads than
--     specified by the max number of payloads for that decoration. This
--     requirement applies to each @NodeMaxPayloadsAMDX@ decoration
--     separately
--
-- -   #VUID-vkCmdDispatchGraphIndirectAMDX-pCountInfo-09150#
--     @pCountInfo->infos@ /must/ be a device pointer to a memory
--     allocation at least as large as the product of @count@ and @stride@
--     when this command is executed on the device
--
-- -   #VUID-vkCmdDispatchGraphIndirectAMDX-pCountInfo-09151#
--     @pCountInfo->infos@ /must/ be a device address within a
--     'Vulkan.Core10.Handles.Buffer' created with the
--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'
--     flag
--
-- -   #VUID-vkCmdDispatchGraphIndirectAMDX-pCountInfo-09152#
--     @pCountInfo->infos@ /must/ be a multiple of
--     <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#limits-executionGraphDispatchAddressAlignment executionGraphDispatchAddressAlignment>
--
-- -   #VUID-vkCmdDispatchGraphIndirectAMDX-infos-09153# Device memory
--     locations at indexes in the range [@infos@, @infos@ +
--     (@count@*@stride@)), at a granularity of @stride@ /must/ contain
--     valid 'DispatchGraphInfoAMDX' structures in the first 24 bytes when
--     this command is executed on the device
--
-- -   #VUID-vkCmdDispatchGraphIndirectAMDX-pCountInfo-09154# For each
--     'DispatchGraphInfoAMDX' structure in @pCountInfo->infos@, @payloads@
--     /must/ be a device pointer to a memory allocation at least as large
--     as the product of @payloadCount@ and @payloadStride@ when this
--     command is executed on the device
--
-- -   #VUID-vkCmdDispatchGraphIndirectAMDX-pCountInfo-09155# For each
--     'DispatchGraphInfoAMDX' structure in @pCountInfo->infos@, @payloads@
--     /must/ be a device address within a 'Vulkan.Core10.Handles.Buffer'
--     created with the
--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'
--     flag
--
-- -   #VUID-vkCmdDispatchGraphIndirectAMDX-pCountInfo-09156# For each
--     'DispatchGraphInfoAMDX' structure in @pCountInfo->infos@, @payloads@
--     /must/ be a multiple of
--     <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#limits-executionGraphDispatchAddressAlignment executionGraphDispatchAddressAlignment>
--
-- -   #VUID-vkCmdDispatchGraphIndirectAMDX-pCountInfo-09157# For each
--     'DispatchGraphInfoAMDX' structure in @pCountInfo->infos@,
--     @nodeIndex@ /must/ be a valid node index in the currently bound
--     execution graph pipeline, as returned by
--     'getExecutionGraphPipelineNodeIndexAMDX' when this command is
--     executed on the device
--
-- -   #VUID-vkCmdDispatchGraphIndirectAMDX-pCountInfo-09158# For each
--     'DispatchGraphInfoAMDX' structure in @pCountInfo->infos@, device
--     memory locations at indexes in the range [@payloads@, @payloads@ +
--     (@payloadCount@ * @payloadStride@)), at a granularity of
--     @payloadStride@ /must/ contain a payload matching the size of the
--     input payload expected by the node in @nodeIndex@ in the first bytes
--     when this command is executed on the device
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkCmdDispatchGraphIndirectAMDX-commandBuffer-parameter#
--     @commandBuffer@ /must/ be a valid
--     'Vulkan.Core10.Handles.CommandBuffer' handle
--
-- -   #VUID-vkCmdDispatchGraphIndirectAMDX-pCountInfo-parameter#
--     @pCountInfo@ /must/ be a valid pointer to a valid
--     'DispatchGraphCountInfoAMDX' structure
--
-- -   #VUID-vkCmdDispatchGraphIndirectAMDX-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-vkCmdDispatchGraphIndirectAMDX-commandBuffer-cmdpool# The
--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
--     allocated from /must/ support graphics, or compute operations
--
-- -   #VUID-vkCmdDispatchGraphIndirectAMDX-renderpass# This command /must/
--     only be called outside of a render pass instance
--
-- -   #VUID-vkCmdDispatchGraphIndirectAMDX-videocoding# This command
--     /must/ only be called outside of a video coding scope
--
-- -   #VUID-vkCmdDispatchGraphIndirectAMDX-bufferlevel# @commandBuffer@
--     /must/ be a primary 'Vulkan.Core10.Handles.CommandBuffer'
--
-- == Host Synchronization
--
-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
--     @commandBuffer@ was allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- \'
--
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------+
-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginVideoCodingKHR Video Coding Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-queueoperation-command-types Command Type> |
-- +============================================================================================================================+========================================================================================================================+=============================================================================================================================+=======================================================================================================================+========================================================================================================================================+
-- | Primary                                                                                                                    | Outside                                                                                                                | Outside                                                                                                                     | Graphics                                                                                                              | Action                                                                                                                                 |
-- |                                                                                                                            |                                                                                                                        |                                                                                                                             | Compute                                                                                                               |                                                                                                                                        |
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------+
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_AMDX_shader_enqueue VK_AMDX_shader_enqueue>,
-- 'Vulkan.Core10.Handles.CommandBuffer',
-- 'Vulkan.Core10.FundamentalTypes.DeviceAddress',
-- 'DispatchGraphCountInfoAMDX'
cmdDispatchGraphIndirectAMDX :: forall io
                              . (MonadIO io)
                             => -- | @commandBuffer@ is the command buffer into which the command will be
                                -- recorded.
                                CommandBuffer
                             -> -- | @scratch@ is a pointer to the scratch memory to be used.
                                ("scratch" ::: DeviceAddress)
                             -> -- | @pCountInfo@ is a host pointer to a 'DispatchGraphCountInfoAMDX'
                                -- structure defining the nodes which will be initially executed.
                                DispatchGraphCountInfoAMDX
                             -> io ()
cmdDispatchGraphIndirectAMDX :: forall (io :: * -> *).
MonadIO io =>
CommandBuffer -> Flags64 -> DispatchGraphCountInfoAMDX -> io ()
cmdDispatchGraphIndirectAMDX CommandBuffer
commandBuffer
                               Flags64
scratch
                               DispatchGraphCountInfoAMDX
countInfo = IO () -> io ()
forall a. IO a -> io a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> io ())
-> (ContT () IO () -> IO ()) -> ContT () IO () -> io ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> io ()) -> ContT () IO () -> io ()
forall a b. (a -> b) -> a -> b
$ do
  let vkCmdDispatchGraphIndirectAMDXPtr :: FunPtr
  (Ptr CommandBuffer_T
   -> Flags64 -> Ptr DispatchGraphCountInfoAMDX -> IO ())
vkCmdDispatchGraphIndirectAMDXPtr = DeviceCmds
-> FunPtr
     (Ptr CommandBuffer_T
      -> Flags64 -> Ptr DispatchGraphCountInfoAMDX -> IO ())
pVkCmdDispatchGraphIndirectAMDX (case CommandBuffer
commandBuffer of CommandBuffer{DeviceCmds
$sel:deviceCmds:CommandBuffer :: CommandBuffer -> DeviceCmds
deviceCmds :: DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO () -> ContT () IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT () m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr CommandBuffer_T
   -> Flags64 -> Ptr DispatchGraphCountInfoAMDX -> IO ())
vkCmdDispatchGraphIndirectAMDXPtr FunPtr
  (Ptr CommandBuffer_T
   -> Flags64 -> Ptr DispatchGraphCountInfoAMDX -> IO ())
-> FunPtr
     (Ptr CommandBuffer_T
      -> Flags64 -> Ptr DispatchGraphCountInfoAMDX -> IO ())
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr CommandBuffer_T
   -> Flags64 -> Ptr DispatchGraphCountInfoAMDX -> 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 vkCmdDispatchGraphIndirectAMDX is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkCmdDispatchGraphIndirectAMDX' :: Ptr CommandBuffer_T
-> Flags64 -> Ptr DispatchGraphCountInfoAMDX -> IO ()
vkCmdDispatchGraphIndirectAMDX' = FunPtr
  (Ptr CommandBuffer_T
   -> Flags64 -> Ptr DispatchGraphCountInfoAMDX -> IO ())
-> Ptr CommandBuffer_T
-> Flags64
-> Ptr DispatchGraphCountInfoAMDX
-> IO ()
mkVkCmdDispatchGraphIndirectAMDX FunPtr
  (Ptr CommandBuffer_T
   -> Flags64 -> Ptr DispatchGraphCountInfoAMDX -> IO ())
vkCmdDispatchGraphIndirectAMDXPtr
  Ptr DispatchGraphCountInfoAMDX
pCountInfo <- ((Ptr DispatchGraphCountInfoAMDX -> IO ()) -> IO ())
-> ContT () IO (Ptr DispatchGraphCountInfoAMDX)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr DispatchGraphCountInfoAMDX -> IO ()) -> IO ())
 -> ContT () IO (Ptr DispatchGraphCountInfoAMDX))
-> ((Ptr DispatchGraphCountInfoAMDX -> IO ()) -> IO ())
-> ContT () IO (Ptr DispatchGraphCountInfoAMDX)
forall a b. (a -> b) -> a -> b
$ DispatchGraphCountInfoAMDX
-> (Ptr DispatchGraphCountInfoAMDX -> IO ()) -> IO ()
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
forall b.
DispatchGraphCountInfoAMDX
-> (Ptr DispatchGraphCountInfoAMDX -> IO b) -> IO b
withCStruct (DispatchGraphCountInfoAMDX
countInfo)
  IO () -> ContT () IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT () m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ String -> IO () -> IO ()
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkCmdDispatchGraphIndirectAMDX" (Ptr CommandBuffer_T
-> Flags64 -> Ptr DispatchGraphCountInfoAMDX -> IO ()
vkCmdDispatchGraphIndirectAMDX'
                                                              (CommandBuffer -> Ptr CommandBuffer_T
commandBufferHandle (CommandBuffer
commandBuffer))
                                                              (Flags64
scratch)
                                                              Ptr DispatchGraphCountInfoAMDX
pCountInfo)
  () -> ContT () IO ()
forall a. a -> ContT () IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (() -> ContT () IO ()) -> () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ ()


foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkCmdDispatchGraphIndirectCountAMDX
  :: FunPtr (Ptr CommandBuffer_T -> DeviceAddress -> DeviceAddress -> IO ()) -> Ptr CommandBuffer_T -> DeviceAddress -> DeviceAddress -> IO ()

-- | vkCmdDispatchGraphIndirectCountAMDX - Dispatch an execution graph with
-- all parameters read on the device
--
-- = Description
--
-- When this command is executed, the nodes specified in @countInfo@ are
-- executed. Nodes executed as part of this command are not implicitly
-- synchronized in any way against each other once they are dispatched.
--
-- For this command, all pointers in substructures are treated as device
-- pointers and read during device execution of this command. The
-- allocation and contents of these pointers only needs to be valid during
-- device execution. All of these addresses will be read in the
-- 'Vulkan.Core13.Enums.PipelineStageFlags2.PIPELINE_STAGE_2_COMPUTE_SHADER_BIT'
-- pipeline stage with the
-- 'Vulkan.Core13.Enums.AccessFlags2.ACCESS_2_SHADER_STORAGE_READ_BIT'
-- access flag.
--
-- Execution of this command /may/ modify any memory locations in the range
-- [@scratch@,@scratch@ + @size@), where @size@ is the value returned in
-- 'ExecutionGraphPipelineScratchSizeAMDX'::@size@ by
-- 'ExecutionGraphPipelineScratchSizeAMDX' for the currently bound
-- execution graph pipeline. Accesses to this memory range are performed in
-- the
-- 'Vulkan.Core13.Enums.PipelineStageFlags2.PIPELINE_STAGE_2_COMPUTE_SHADER_BIT'
-- pipeline stage with the
-- 'Vulkan.Core13.Enums.AccessFlags2.ACCESS_2_SHADER_STORAGE_READ_BIT' and
-- 'Vulkan.Core13.Enums.AccessFlags2.ACCESS_2_SHADER_STORAGE_WRITE_BIT'
-- access flags.
--
-- == Valid Usage
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-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-vkCmdDispatchGraphIndirectCountAMDX-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-vkCmdDispatchGraphIndirectCountAMDX-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-vkCmdDispatchGraphIndirectCountAMDX-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-vkCmdDispatchGraphIndirectCountAMDX-None-07888# If a
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER'
--     descriptor is accessed using atomic operations as a result of this
--     command, then the storage texel buffer’s
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-buffer-view-format-features format features>
--     /must/ contain
--     'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT'
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-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-vkCmdDispatchGraphIndirectCountAMDX-None-02693# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_filter_cubic VK_EXT_filter_cubic>
--     extension is not enabled and any 'Vulkan.Core10.Handles.ImageView'
--     is sampled with 'Vulkan.Core10.Enums.Filter.FILTER_CUBIC_EXT' as a
--     result of this command, it /must/ not have a
--     'Vulkan.Core10.Enums.ImageViewType.ImageViewType' of
--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',
--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE', or
--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY'
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-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-vkCmdDispatchGraphIndirectCountAMDX-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-vkCmdDispatchGraphIndirectCountAMDX-cubicRangeClamp-09212# If
--     the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-filter-cubic-range-clamp cubicRangeClamp>
--     feature is not enabled, then any 'Vulkan.Core10.Handles.ImageView'
--     being sampled with 'Vulkan.Core10.Enums.Filter.FILTER_CUBIC_EXT' as
--     a result of this command /must/ not have a
--     'Vulkan.Core12.Promoted_From_VK_EXT_sampler_filter_minmax.SamplerReductionModeCreateInfo'::@reductionMode@
--     equal to
--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM'
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-reductionMode-09213# Any
--     'Vulkan.Core10.Handles.ImageView' being sampled with a
--     'Vulkan.Core12.Promoted_From_VK_EXT_sampler_filter_minmax.SamplerReductionModeCreateInfo'::@reductionMode@
--     equal to
--     'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM'
--     as a result of this command /must/ sample with
--     'Vulkan.Core10.Enums.Filter.FILTER_CUBIC_EXT'
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-selectableCubicWeights-09214#
--     If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-filter-cubic-weight-selection selectableCubicWeights>
--     feature is not enabled, then any 'Vulkan.Core10.Handles.ImageView'
--     being sampled with 'Vulkan.Core10.Enums.Filter.FILTER_CUBIC_EXT' as
--     a result of this command /must/ have
--     'Vulkan.Extensions.VK_QCOM_filter_cubic_weights.SamplerCubicWeightsCreateInfoQCOM'::@cubicWeights@
--     equal to
--     'Vulkan.Extensions.VK_QCOM_filter_cubic_weights.CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM'
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-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-vkCmdDispatchGraphIndirectCountAMDX-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-vkCmdDispatchGraphIndirectCountAMDX-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-vkCmdDispatchGraphIndirectCountAMDX-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-vkCmdDispatchGraphIndirectCountAMDX-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-vkCmdDispatchGraphIndirectCountAMDX-None-08600# For each set
--     /n/ that is statically used by
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding a bound shader>,
--     a descriptor set /must/ have been bound to /n/ at the same pipeline
--     bind point, with a 'Vulkan.Core10.Handles.PipelineLayout' that is
--     compatible for set /n/, with the
--     'Vulkan.Core10.Handles.PipelineLayout' used to create the current
--     'Vulkan.Core10.Handles.Pipeline' or the
--     'Vulkan.Core10.Handles.DescriptorSetLayout' array used to create the
--     current 'Vulkan.Extensions.Handles.ShaderEXT' , as described in
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-None-08601# For each push
--     constant that is statically used by
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding a bound shader>,
--     a push constant value /must/ have been set for the same pipeline
--     bind point, with a 'Vulkan.Core10.Handles.PipelineLayout' that is
--     compatible for push constants, with the
--     'Vulkan.Core10.Handles.PipelineLayout' used to create the current
--     'Vulkan.Core10.Handles.Pipeline' or the
--     'Vulkan.Core10.Handles.DescriptorSetLayout' array used to create the
--     current 'Vulkan.Extensions.Handles.ShaderEXT' , as described in
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-maintenance4-08602# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-maintenance4 maintenance4>
--     feature is not enabled, then for each push constant that is
--     statically used by
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding a bound shader>,
--     a push constant value /must/ have been set for the same pipeline
--     bind point, with a 'Vulkan.Core10.Handles.PipelineLayout' that is
--     compatible for push constants, with the
--     'Vulkan.Core10.Handles.PipelineLayout' used to create the current
--     'Vulkan.Core10.Handles.Pipeline' or the
--     'Vulkan.Core10.Handles.DescriptorSetLayout' and
--     'Vulkan.Core10.PipelineLayout.PushConstantRange' arrays used to
--     create the current 'Vulkan.Extensions.Handles.ShaderEXT' , as
--     described in
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility ???>
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-None-08114# Descriptors in
--     each bound descriptor set, specified via
--     'Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets', /must/
--     be valid as described by
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptor-validity descriptor validity>
--     if they are statically used by the 'Vulkan.Core10.Handles.Pipeline'
--     bound to the pipeline bind point used by this command and the bound
--     'Vulkan.Core10.Handles.Pipeline' was not created with
--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT'
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-None-08115# If the
--     descriptors used by the 'Vulkan.Core10.Handles.Pipeline' bound to
--     the pipeline bind point were specified via
--     'Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets', the
--     bound 'Vulkan.Core10.Handles.Pipeline' /must/ have been created
--     without
--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT'
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-None-08116# Descriptors in
--     bound descriptor buffers, specified via
--     'Vulkan.Extensions.VK_EXT_descriptor_buffer.cmdSetDescriptorBufferOffsetsEXT',
--     /must/ be valid if they are dynamically used by the
--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point
--     used by this command and the bound 'Vulkan.Core10.Handles.Pipeline'
--     was created with
--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT'
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-None-08604# Descriptors in
--     bound descriptor buffers, specified via
--     'Vulkan.Extensions.VK_EXT_descriptor_buffer.cmdSetDescriptorBufferOffsetsEXT',
--     /must/ be valid if they are dynamically used by any
--     'Vulkan.Extensions.Handles.ShaderEXT' bound to a stage corresponding
--     to the pipeline bind point used by this command
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-None-08117# If the
--     descriptors used by the 'Vulkan.Core10.Handles.Pipeline' bound to
--     the pipeline bind point were specified via
--     'Vulkan.Extensions.VK_EXT_descriptor_buffer.cmdSetDescriptorBufferOffsetsEXT',
--     the bound 'Vulkan.Core10.Handles.Pipeline' /must/ have been created
--     with
--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT'
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-None-08119# If a
--     descriptor is dynamically used with a
--     'Vulkan.Core10.Handles.Pipeline' created with
--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT',
--     the descriptor memory /must/ be resident
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-None-08605# If a
--     descriptor is dynamically used with a
--     'Vulkan.Extensions.Handles.ShaderEXT' created with a
--     'Vulkan.Core10.Handles.DescriptorSetLayout' that was created with
--     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT',
--     the descriptor memory /must/ be resident
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-None-08606# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shaderObject shaderObject>
--     feature is not enabled, a valid pipeline /must/ be bound to the
--     pipeline bind point used by this command
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-None-08608# If a pipeline
--     is bound to the pipeline bind point used by this command, there
--     /must/ not have been any calls to dynamic state setting commands for
--     any state 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-vkCmdDispatchGraphIndirectCountAMDX-None-08609# If the
--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
--     point used by this command or any
--     'Vulkan.Extensions.Handles.ShaderEXT' bound to a stage corresponding
--     to the pipeline bind point used by this command accesses a
--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
--     coordinates, that sampler /must/ not be used to sample from any
--     'Vulkan.Core10.Handles.Image' with a
--     'Vulkan.Core10.Handles.ImageView' of the type
--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_3D',
--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE',
--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D_ARRAY',
--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D_ARRAY' or
--     'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_CUBE_ARRAY', in
--     any shader stage
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-None-08610# If the
--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
--     point used by this command or any
--     'Vulkan.Extensions.Handles.ShaderEXT' bound to a stage corresponding
--     to the pipeline bind point used by this command accesses a
--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
--     coordinates, that sampler /must/ not be used with any of the SPIR-V
--     @OpImageSample*@ or @OpImageSparseSample*@ instructions with
--     @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-None-08611# If the
--     'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind
--     point used by this command or any
--     'Vulkan.Extensions.Handles.ShaderEXT' bound to a stage corresponding
--     to the pipeline bind point used by this command accesses a
--     'Vulkan.Core10.Handles.Sampler' object that uses unnormalized
--     coordinates, that sampler /must/ not be used with any of the SPIR-V
--     @OpImageSample*@ or @OpImageSparseSample*@ instructions that
--     includes a LOD bias or any offset values, in any shader stage
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-None-08607# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shaderObject shaderObject>
--     is enabled, either a valid pipeline /must/ be bound to the pipeline
--     bind point used by this command, or a valid combination of valid and
--     'Vulkan.Core10.APIConstants.NULL_HANDLE' shader objects /must/ be
--     bound to every supported shader stage corresponding to the pipeline
--     bind point used by this command
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-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-vkCmdDispatchGraphIndirectCountAMDX-None-08612# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robustBufferAccess>
--     feature is not enabled, and any
--     'Vulkan.Extensions.Handles.ShaderEXT' bound to a stage corresponding
--     to the pipeline bind point used by this command accesses a uniform
--     buffer, it /must/ not access values outside of the range of the
--     buffer as specified in the descriptor set bound to the same pipeline
--     bind point
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-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-vkCmdDispatchGraphIndirectCountAMDX-None-08613# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess robustBufferAccess>
--     feature is not enabled, and any
--     'Vulkan.Extensions.Handles.ShaderEXT' bound to a stage corresponding
--     to the pipeline bind point used by this command accesses a storage
--     buffer, it /must/ not access values outside of the range of the
--     buffer as specified in the descriptor set bound to the same pipeline
--     bind point
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-commandBuffer-02707# If
--     @commandBuffer@ is an unprotected command buffer and
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-protectedNoFault protectedNoFault>
--     is not supported, any resource accessed by
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding bound shaders>
--     /must/ not be a protected resource
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-None-06550# If
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding a bound shader>
--     accesses a 'Vulkan.Core10.Handles.Sampler' or
--     'Vulkan.Core10.Handles.ImageView' object that enables
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>,
--     that object /must/ only be used with @OpImageSample*@ or
--     @OpImageSparseSample*@ instructions
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-ConstOffset-06551# If
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding a bound shader>
--     accesses a 'Vulkan.Core10.Handles.Sampler' or
--     'Vulkan.Core10.Handles.ImageView' object that enables
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#samplers-YCbCr-conversion sampler Y′CBCR conversion>,
--     that object /must/ not use the @ConstOffset@ and @Offset@ operands
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-viewType-07752# If a
--     'Vulkan.Core10.Handles.ImageView' is accessed as a result of this
--     command, then the image view’s @viewType@ /must/ match the @Dim@
--     operand of the @OpTypeImage@ as described in
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-operation-validation ???>
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-format-07753# If a
--     'Vulkan.Core10.Handles.ImageView' is accessed as a result of this
--     command, then the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-numericformat numeric type>
--     of the image view’s @format@ and the @Sampled@ @Type@ operand of the
--     @OpTypeImage@ /must/ match
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-OpImageWrite-08795# If a
--     'Vulkan.Core10.Handles.ImageView' created with a format other than
--     'Vulkan.Core10.Enums.Format.FORMAT_A8_UNORM_KHR' is accessed using
--     @OpImageWrite@ as a result of this command, then the @Type@ of the
--     @Texel@ operand of that instruction /must/ have at least as many
--     components as the image view’s format
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-OpImageWrite-08796# If a
--     'Vulkan.Core10.Handles.ImageView' created with the format
--     'Vulkan.Core10.Enums.Format.FORMAT_A8_UNORM_KHR' is accessed using
--     @OpImageWrite@ as a result of this command, then the @Type@ of the
--     @Texel@ operand of that instruction /must/ have four components
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-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-vkCmdDispatchGraphIndirectCountAMDX-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-vkCmdDispatchGraphIndirectCountAMDX-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-vkCmdDispatchGraphIndirectCountAMDX-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-vkCmdDispatchGraphIndirectCountAMDX-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-vkCmdDispatchGraphIndirectCountAMDX-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-vkCmdDispatchGraphIndirectCountAMDX-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-vkCmdDispatchGraphIndirectCountAMDX-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-vkCmdDispatchGraphIndirectCountAMDX-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-vkCmdDispatchGraphIndirectCountAMDX-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-vkCmdDispatchGraphIndirectCountAMDX-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-vkCmdDispatchGraphIndirectCountAMDX-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-vkCmdDispatchGraphIndirectCountAMDX-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-vkCmdDispatchGraphIndirectCountAMDX-OpImageWeightedSampleQCOM-06977#
--     If @OpImageWeightedSampleQCOM@, @OpImageBoxFilterQCOM@,
--     @OpImageBlockMatchWindowSSDQCOM@, @OpImageBlockMatchWindowSADQCOM@,
--     @OpImageBlockMatchGatherSSDQCOM@, @OpImageBlockMatchGatherSADQCOM@,
--     @OpImageBlockMatchSSDQCOM@, or @OpImageBlockMatchSADQCOM@ uses a
--     'Vulkan.Core10.Handles.Sampler' as a result of this command, then
--     the sampler /must/ have been created with
--     'Vulkan.Core10.Enums.SamplerCreateFlagBits.SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM'
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-OpImageWeightedSampleQCOM-06978#
--     If any command other than @OpImageWeightedSampleQCOM@,
--     @OpImageBoxFilterQCOM@, @OpImageBlockMatchWindowSSDQCOM@,
--     @OpImageBlockMatchWindowSADQCOM@, @OpImageBlockMatchGatherSSDQCOM@,
--     @OpImageBlockMatchGatherSADQCOM@, @OpImageBlockMatchSSDQCOM@, or
--     @OpImageBlockMatchSADQCOM@ uses a 'Vulkan.Core10.Handles.Sampler' as
--     a result of this command, then the sampler /must/ not have been
--     created with
--     'Vulkan.Core10.Enums.SamplerCreateFlagBits.SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM'
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-OpImageBlockMatchWindow-09215#
--     If a @OpImageBlockMatchWindow*QCOM@ or
--     @OpImageBlockMatchGather*QCOM@ instruction is used to read from an
--     'Vulkan.Core10.Handles.ImageView' as a result of this command, then
--     the image view’s
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features>
--     /must/ contain
--     'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM'
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-OpImageBlockMatchWindow-09216#
--     If a @OpImageBlockMatchWindow*QCOM@ or
--     @OpImageBlockMatchGather*QCOM@ instruction is used to read from an
--     'Vulkan.Core10.Handles.ImageView' as a result of this command, then
--     the image view’s format /must/ be a single-component format.
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-OpImageBlockMatchWindow-09217#
--     If a @OpImageBlockMatchWindow*QCOM@ or
--     @OpImageBlockMatchGather*QCOM@ read from a reference image as result
--     of this command, then the specified reference coordinates /must/ not
--     fail
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#textures-integer-coordinate-validation integer texel coordinate validation>
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-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-vkCmdDispatchGraphIndirectCountAMDX-commandBuffer-09181#
--     @commandBuffer@ /must/ not be a protected command buffer
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-commandBuffer-09182#
--     @commandBuffer@ /must/ be a primary command buffer
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-scratch-09183# @scratch@
--     /must/ be the device address of an allocated memory range at least
--     as large as the value of
--     'ExecutionGraphPipelineScratchSizeAMDX'::@size@ returned by
--     'ExecutionGraphPipelineScratchSizeAMDX' for the currently bound
--     execution graph pipeline
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-scratch-09184# @scratch@
--     /must/ be a device address within a 'Vulkan.Core10.Handles.Buffer'
--     created with the
--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_EXECUTION_GRAPH_SCRATCH_BIT_AMDX'
--     or 'BUFFER_USAGE_2_EXECUTION_GRAPH_SCRATCH_BIT_AMDX' flag
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-scratch-09185# Device
--     memory in the range [@scratch@,@scratch@
--     'ExecutionGraphPipelineScratchSizeAMDX'::@size@) /must/ have been
--     initialized with 'cmdInitializeGraphScratchMemoryAMDX' using the
--     currently bound execution graph pipeline, and not modified after
--     that by anything other than another execution graph dispatch command
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-maxComputeWorkGroupCount-09186#
--     Execution of this command /must/ not cause a node to be dispatched
--     with a larger number of workgroups than that specified by either a
--     @MaxNumWorkgroupsAMDX@ decoration in the dispatched node or
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxComputeWorkGroupCount maxComputeWorkGroupCount>
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-maxExecutionGraphShaderPayloadCount-09187#
--     Execution of this command /must/ not cause any shader to initialize
--     more than
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxExecutionGraphShaderPayloadCount maxExecutionGraphShaderPayloadCount>
--     output payloads
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-NodeMaxPayloadsAMDX-09188#
--     Execution of this command /must/ not cause any shader that declares
--     @NodeMaxPayloadsAMDX@ to initialize more output payloads than
--     specified by the max number of payloads for that decoration. This
--     requirement applies to each @NodeMaxPayloadsAMDX@ decoration
--     separately
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-countInfo-09159#
--     @countInfo@ /must/ be a device pointer to a memory allocation
--     containing a valid 'DispatchGraphCountInfoAMDX' structure when this
--     command is executed on the device
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-countInfo-09160#
--     @countInfo@ /must/ be a device address within a
--     'Vulkan.Core10.Handles.Buffer' created with the
--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'
--     flag
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-countInfo-09161#
--     @countInfo@ /must/ be a multiple of
--     <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#limits-executionGraphDispatchAddressAlignment executionGraphDispatchAddressAlignment>
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-countInfo-09162#
--     @countInfo->infos@ /must/ be a device pointer to a memory allocation
--     at least as large as the product of @count@ and @stride@ when this
--     command is executed on the device
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-countInfo-09163#
--     @countInfo->infos@ /must/ be a device address within a
--     'Vulkan.Core10.Handles.Buffer' created with the
--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'
--     flag
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-countInfo-09164#
--     @countInfo->infos@ /must/ be a multiple of
--     <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#limits-executionGraphDispatchAddressAlignment executionGraphDispatchAddressAlignment>
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-infos-09165# Device memory
--     locations at indexes in the range [@infos@, @infos@ +
--     (@count@*@stride@)), at a granularity of @stride@ /must/ contain
--     valid 'DispatchGraphInfoAMDX' structures in the first 24 bytes when
--     this command is executed on the device
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-countInfo-09166# For each
--     'DispatchGraphInfoAMDX' structure in @countInfo->infos@, @payloads@
--     /must/ be a device pointer to a memory allocation at least as large
--     as the product of @payloadCount@ and @payloadStride@ when this
--     command is executed on the device
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-countInfo-09167# For each
--     'DispatchGraphInfoAMDX' structure in @countInfo->infos@, @payloads@
--     /must/ be a device address within a 'Vulkan.Core10.Handles.Buffer'
--     created with the
--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'
--     flag
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-countInfo-09168# For each
--     'DispatchGraphInfoAMDX' structure in @countInfo->infos@, @payloads@
--     /must/ be a multiple of
--     <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#limits-executionGraphDispatchAddressAlignment executionGraphDispatchAddressAlignment>
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-countInfo-09169# For each
--     'DispatchGraphInfoAMDX' structure in @countInfo->infos@, @nodeIndex@
--     /must/ be a valid node index in the currently bound execution graph
--     pipeline, as returned by 'getExecutionGraphPipelineNodeIndexAMDX'
--     when this command is executed on the device
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-countInfo-09170# For each
--     'DispatchGraphInfoAMDX' structure in @countInfo->infos@, device
--     memory locations at indexes in the range [@payloads@, @payloads@ +
--     (@payloadCount@ * @payloadStride@)), at a granularity of
--     @payloadStride@ /must/ contain a payload matching the size of the
--     input payload expected by the node in @nodeIndex@ in the first bytes
--     when this command is executed on the device
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-commandBuffer-parameter#
--     @commandBuffer@ /must/ be a valid
--     'Vulkan.Core10.Handles.CommandBuffer' handle
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-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-vkCmdDispatchGraphIndirectCountAMDX-commandBuffer-cmdpool# The
--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
--     allocated from /must/ support graphics, or compute operations
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-renderpass# This command
--     /must/ only be called outside of a render pass instance
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-videocoding# This command
--     /must/ only be called outside of a video coding scope
--
-- -   #VUID-vkCmdDispatchGraphIndirectCountAMDX-bufferlevel#
--     @commandBuffer@ /must/ be a primary
--     'Vulkan.Core10.Handles.CommandBuffer'
--
-- == Host Synchronization
--
-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
--     @commandBuffer@ was allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- \'
--
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------+
-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginVideoCodingKHR Video Coding Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-queueoperation-command-types Command Type> |
-- +============================================================================================================================+========================================================================================================================+=============================================================================================================================+=======================================================================================================================+========================================================================================================================================+
-- | Primary                                                                                                                    | Outside                                                                                                                | Outside                                                                                                                     | Graphics                                                                                                              | Action                                                                                                                                 |
-- |                                                                                                                            |                                                                                                                        |                                                                                                                             | Compute                                                                                                               |                                                                                                                                        |
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------+
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_AMDX_shader_enqueue VK_AMDX_shader_enqueue>,
-- 'Vulkan.Core10.Handles.CommandBuffer',
-- 'Vulkan.Core10.FundamentalTypes.DeviceAddress'
cmdDispatchGraphIndirectCountAMDX :: forall io
                                   . (MonadIO io)
                                  => -- | @commandBuffer@ is the command buffer into which the command will be
                                     -- recorded.
                                     CommandBuffer
                                  -> -- | @scratch@ is a pointer to the scratch memory to be used.
                                     ("scratch" ::: DeviceAddress)
                                  -> -- | @countInfo@ is a device address of a 'DispatchGraphCountInfoAMDX'
                                     -- structure defining the nodes which will be initially executed.
                                     ("countInfo" ::: DeviceAddress)
                                  -> io ()
cmdDispatchGraphIndirectCountAMDX :: forall (io :: * -> *).
MonadIO io =>
CommandBuffer -> Flags64 -> Flags64 -> io ()
cmdDispatchGraphIndirectCountAMDX CommandBuffer
commandBuffer Flags64
scratch Flags64
countInfo = IO () -> io ()
forall a. IO a -> io a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> io ()) -> IO () -> io ()
forall a b. (a -> b) -> a -> b
$ do
  let vkCmdDispatchGraphIndirectCountAMDXPtr :: FunPtr (Ptr CommandBuffer_T -> Flags64 -> Flags64 -> IO ())
vkCmdDispatchGraphIndirectCountAMDXPtr = DeviceCmds
-> FunPtr (Ptr CommandBuffer_T -> Flags64 -> Flags64 -> IO ())
pVkCmdDispatchGraphIndirectCountAMDX (case CommandBuffer
commandBuffer of CommandBuffer{DeviceCmds
$sel:deviceCmds:CommandBuffer :: CommandBuffer -> DeviceCmds
deviceCmds :: DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr (Ptr CommandBuffer_T -> Flags64 -> Flags64 -> IO ())
vkCmdDispatchGraphIndirectCountAMDXPtr FunPtr (Ptr CommandBuffer_T -> Flags64 -> Flags64 -> IO ())
-> FunPtr (Ptr CommandBuffer_T -> Flags64 -> Flags64 -> IO ())
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr (Ptr CommandBuffer_T -> Flags64 -> Flags64 -> 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 vkCmdDispatchGraphIndirectCountAMDX is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkCmdDispatchGraphIndirectCountAMDX' :: Ptr CommandBuffer_T -> Flags64 -> Flags64 -> IO ()
vkCmdDispatchGraphIndirectCountAMDX' = FunPtr (Ptr CommandBuffer_T -> Flags64 -> Flags64 -> IO ())
-> Ptr CommandBuffer_T -> Flags64 -> Flags64 -> IO ()
mkVkCmdDispatchGraphIndirectCountAMDX FunPtr (Ptr CommandBuffer_T -> Flags64 -> Flags64 -> IO ())
vkCmdDispatchGraphIndirectCountAMDXPtr
  String -> IO () -> IO ()
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkCmdDispatchGraphIndirectCountAMDX" (Ptr CommandBuffer_T -> Flags64 -> Flags64 -> IO ()
vkCmdDispatchGraphIndirectCountAMDX'
                                                            (CommandBuffer -> Ptr CommandBuffer_T
commandBufferHandle (CommandBuffer
commandBuffer))
                                                            (Flags64
scratch)
                                                            (Flags64
countInfo))
  () -> IO ()
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (() -> IO ()) -> () -> IO ()
forall a b. (a -> b) -> a -> b
$ ()


-- | VkPhysicalDeviceShaderEnqueuePropertiesAMDX - Structure describing
-- shader enqueue limits of an implementation
--
-- = Members
--
-- The members of the 'PhysicalDeviceShaderEnqueuePropertiesAMDX' structure
-- describe the following limits:
--
-- = Description
--
-- If the 'PhysicalDeviceShaderEnqueuePropertiesAMDX' 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_AMDX_shader_enqueue VK_AMDX_shader_enqueue>,
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data PhysicalDeviceShaderEnqueuePropertiesAMDX = PhysicalDeviceShaderEnqueuePropertiesAMDX
  { -- | #limits-maxExecutionGraphDepth# @maxExecutionGraphDepth@ defines the
    -- maximum node chain depth in the graph. The dispatched node is at depth 1
    -- and the node enqueued by it is at depth 2, and so on. If a node enqueues
    -- itself, each recursive enqueue increases the depth by 1 as well.
    PhysicalDeviceShaderEnqueuePropertiesAMDX -> "nodeIndex" ::: Word32
maxExecutionGraphDepth :: Word32
  , -- | #limits-maxExecutionGraphShaderOutputNodes#
    -- @maxExecutionGraphShaderOutputNodes@ specifies the maximum number of
    -- unique nodes that can be dispatched from a single shader, and must be at
    -- least 256.
    PhysicalDeviceShaderEnqueuePropertiesAMDX -> "nodeIndex" ::: Word32
maxExecutionGraphShaderOutputNodes :: Word32
  , -- | #limits-maxExecutionGraphShaderPayloadSize#
    -- @maxExecutionGraphShaderPayloadSize@ specifies the maximum total size of
    -- payload declarations in a shader. For any payload declarations that
    -- share resources, indicated by @NodeSharesPayloadLimitsWithAMDX@
    -- decorations, the maximum size of each set of shared payload declarations
    -- is taken. The sum of each shared set’s maximum size and the size of each
    -- unshared payload is counted against this limit.
    PhysicalDeviceShaderEnqueuePropertiesAMDX -> "nodeIndex" ::: Word32
maxExecutionGraphShaderPayloadSize :: Word32
  , -- | #limits-maxExecutionGraphShaderPayloadCount#
    -- @maxExecutionGraphShaderPayloadCount@ specifies the maximum number of
    -- output payloads that can be initialized in a single workgroup.
    PhysicalDeviceShaderEnqueuePropertiesAMDX -> "nodeIndex" ::: Word32
maxExecutionGraphShaderPayloadCount :: Word32
  , -- | #limits-executionGraphDispatchAddressAlignment#
    -- @executionGraphDispatchAddressAlignment@ specifies the alignment of
    -- non-scratch 'Vulkan.Core10.FundamentalTypes.DeviceAddress' arguments
    -- consumed by graph dispatch commands.
    PhysicalDeviceShaderEnqueuePropertiesAMDX -> "nodeIndex" ::: Word32
executionGraphDispatchAddressAlignment :: Word32
  }
  deriving (Typeable, PhysicalDeviceShaderEnqueuePropertiesAMDX
-> PhysicalDeviceShaderEnqueuePropertiesAMDX -> Bool
(PhysicalDeviceShaderEnqueuePropertiesAMDX
 -> PhysicalDeviceShaderEnqueuePropertiesAMDX -> Bool)
-> (PhysicalDeviceShaderEnqueuePropertiesAMDX
    -> PhysicalDeviceShaderEnqueuePropertiesAMDX -> Bool)
-> Eq PhysicalDeviceShaderEnqueuePropertiesAMDX
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: PhysicalDeviceShaderEnqueuePropertiesAMDX
-> PhysicalDeviceShaderEnqueuePropertiesAMDX -> Bool
== :: PhysicalDeviceShaderEnqueuePropertiesAMDX
-> PhysicalDeviceShaderEnqueuePropertiesAMDX -> Bool
$c/= :: PhysicalDeviceShaderEnqueuePropertiesAMDX
-> PhysicalDeviceShaderEnqueuePropertiesAMDX -> Bool
/= :: PhysicalDeviceShaderEnqueuePropertiesAMDX
-> PhysicalDeviceShaderEnqueuePropertiesAMDX -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (PhysicalDeviceShaderEnqueuePropertiesAMDX)
#endif
deriving instance Show PhysicalDeviceShaderEnqueuePropertiesAMDX

instance ToCStruct PhysicalDeviceShaderEnqueuePropertiesAMDX where
  withCStruct :: forall b.
PhysicalDeviceShaderEnqueuePropertiesAMDX
-> (Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX -> IO b) -> IO b
withCStruct PhysicalDeviceShaderEnqueuePropertiesAMDX
x Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX -> IO b
f = Int
-> (Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
40 ((Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX -> IO b) -> IO b)
-> (Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX
p -> Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX
-> PhysicalDeviceShaderEnqueuePropertiesAMDX -> IO b -> IO b
forall b.
Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX
-> PhysicalDeviceShaderEnqueuePropertiesAMDX -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX
p PhysicalDeviceShaderEnqueuePropertiesAMDX
x (Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX -> IO b
f Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX
p)
  pokeCStruct :: forall b.
Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX
-> PhysicalDeviceShaderEnqueuePropertiesAMDX -> IO b -> IO b
pokeCStruct Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX
p PhysicalDeviceShaderEnqueuePropertiesAMDX{"nodeIndex" ::: Word32
$sel:maxExecutionGraphDepth:PhysicalDeviceShaderEnqueuePropertiesAMDX :: PhysicalDeviceShaderEnqueuePropertiesAMDX -> "nodeIndex" ::: Word32
$sel:maxExecutionGraphShaderOutputNodes:PhysicalDeviceShaderEnqueuePropertiesAMDX :: PhysicalDeviceShaderEnqueuePropertiesAMDX -> "nodeIndex" ::: Word32
$sel:maxExecutionGraphShaderPayloadSize:PhysicalDeviceShaderEnqueuePropertiesAMDX :: PhysicalDeviceShaderEnqueuePropertiesAMDX -> "nodeIndex" ::: Word32
$sel:maxExecutionGraphShaderPayloadCount:PhysicalDeviceShaderEnqueuePropertiesAMDX :: PhysicalDeviceShaderEnqueuePropertiesAMDX -> "nodeIndex" ::: Word32
$sel:executionGraphDispatchAddressAlignment:PhysicalDeviceShaderEnqueuePropertiesAMDX :: PhysicalDeviceShaderEnqueuePropertiesAMDX -> "nodeIndex" ::: Word32
maxExecutionGraphDepth :: "nodeIndex" ::: Word32
maxExecutionGraphShaderOutputNodes :: "nodeIndex" ::: Word32
maxExecutionGraphShaderPayloadSize :: "nodeIndex" ::: Word32
maxExecutionGraphShaderPayloadCount :: "nodeIndex" ::: Word32
executionGraphDispatchAddressAlignment :: "nodeIndex" ::: Word32
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX
p Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ENQUEUE_PROPERTIES_AMDX)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX
p Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr ("nodeIndex" ::: Word32) -> ("nodeIndex" ::: Word32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX
p Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX
-> Int -> Ptr ("nodeIndex" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32)) ("nodeIndex" ::: Word32
maxExecutionGraphDepth)
    Ptr ("nodeIndex" ::: Word32) -> ("nodeIndex" ::: Word32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX
p Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX
-> Int -> Ptr ("nodeIndex" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr Word32)) ("nodeIndex" ::: Word32
maxExecutionGraphShaderOutputNodes)
    Ptr ("nodeIndex" ::: Word32) -> ("nodeIndex" ::: Word32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX
p Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX
-> Int -> Ptr ("nodeIndex" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Word32)) ("nodeIndex" ::: Word32
maxExecutionGraphShaderPayloadSize)
    Ptr ("nodeIndex" ::: Word32) -> ("nodeIndex" ::: Word32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX
p Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX
-> Int -> Ptr ("nodeIndex" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
28 :: Ptr Word32)) ("nodeIndex" ::: Word32
maxExecutionGraphShaderPayloadCount)
    Ptr ("nodeIndex" ::: Word32) -> ("nodeIndex" ::: Word32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX
p Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX
-> Int -> Ptr ("nodeIndex" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr Word32)) ("nodeIndex" ::: Word32
executionGraphDispatchAddressAlignment)
    IO b
f
  cStructSize :: Int
cStructSize = Int
40
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b.
Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX -> IO b -> IO b
pokeZeroCStruct Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX
p Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ENQUEUE_PROPERTIES_AMDX)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX
p Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr ("nodeIndex" ::: Word32) -> ("nodeIndex" ::: Word32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX
p Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX
-> Int -> Ptr ("nodeIndex" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32)) ("nodeIndex" ::: Word32
forall a. Zero a => a
zero)
    Ptr ("nodeIndex" ::: Word32) -> ("nodeIndex" ::: Word32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX
p Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX
-> Int -> Ptr ("nodeIndex" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr Word32)) ("nodeIndex" ::: Word32
forall a. Zero a => a
zero)
    Ptr ("nodeIndex" ::: Word32) -> ("nodeIndex" ::: Word32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX
p Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX
-> Int -> Ptr ("nodeIndex" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Word32)) ("nodeIndex" ::: Word32
forall a. Zero a => a
zero)
    Ptr ("nodeIndex" ::: Word32) -> ("nodeIndex" ::: Word32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX
p Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX
-> Int -> Ptr ("nodeIndex" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
28 :: Ptr Word32)) ("nodeIndex" ::: Word32
forall a. Zero a => a
zero)
    Ptr ("nodeIndex" ::: Word32) -> ("nodeIndex" ::: Word32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX
p Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX
-> Int -> Ptr ("nodeIndex" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr Word32)) ("nodeIndex" ::: Word32
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct PhysicalDeviceShaderEnqueuePropertiesAMDX where
  peekCStruct :: Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX
-> IO PhysicalDeviceShaderEnqueuePropertiesAMDX
peekCStruct Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX
p = do
    "nodeIndex" ::: Word32
maxExecutionGraphDepth <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX
p Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX
-> Int -> Ptr ("nodeIndex" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32))
    "nodeIndex" ::: Word32
maxExecutionGraphShaderOutputNodes <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX
p Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX
-> Int -> Ptr ("nodeIndex" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr Word32))
    "nodeIndex" ::: Word32
maxExecutionGraphShaderPayloadSize <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX
p Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX
-> Int -> Ptr ("nodeIndex" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Word32))
    "nodeIndex" ::: Word32
maxExecutionGraphShaderPayloadCount <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX
p Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX
-> Int -> Ptr ("nodeIndex" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
28 :: Ptr Word32))
    "nodeIndex" ::: Word32
executionGraphDispatchAddressAlignment <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX
p Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX
-> Int -> Ptr ("nodeIndex" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr Word32))
    PhysicalDeviceShaderEnqueuePropertiesAMDX
-> IO PhysicalDeviceShaderEnqueuePropertiesAMDX
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (PhysicalDeviceShaderEnqueuePropertiesAMDX
 -> IO PhysicalDeviceShaderEnqueuePropertiesAMDX)
-> PhysicalDeviceShaderEnqueuePropertiesAMDX
-> IO PhysicalDeviceShaderEnqueuePropertiesAMDX
forall a b. (a -> b) -> a -> b
$ ("nodeIndex" ::: Word32)
-> ("nodeIndex" ::: Word32)
-> ("nodeIndex" ::: Word32)
-> ("nodeIndex" ::: Word32)
-> ("nodeIndex" ::: Word32)
-> PhysicalDeviceShaderEnqueuePropertiesAMDX
PhysicalDeviceShaderEnqueuePropertiesAMDX
             "nodeIndex" ::: Word32
maxExecutionGraphDepth
             "nodeIndex" ::: Word32
maxExecutionGraphShaderOutputNodes
             "nodeIndex" ::: Word32
maxExecutionGraphShaderPayloadSize
             "nodeIndex" ::: Word32
maxExecutionGraphShaderPayloadCount
             "nodeIndex" ::: Word32
executionGraphDispatchAddressAlignment

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

instance Zero PhysicalDeviceShaderEnqueuePropertiesAMDX where
  zero :: PhysicalDeviceShaderEnqueuePropertiesAMDX
zero = ("nodeIndex" ::: Word32)
-> ("nodeIndex" ::: Word32)
-> ("nodeIndex" ::: Word32)
-> ("nodeIndex" ::: Word32)
-> ("nodeIndex" ::: Word32)
-> PhysicalDeviceShaderEnqueuePropertiesAMDX
PhysicalDeviceShaderEnqueuePropertiesAMDX
           "nodeIndex" ::: Word32
forall a. Zero a => a
zero
           "nodeIndex" ::: Word32
forall a. Zero a => a
zero
           "nodeIndex" ::: Word32
forall a. Zero a => a
zero
           "nodeIndex" ::: Word32
forall a. Zero a => a
zero
           "nodeIndex" ::: Word32
forall a. Zero a => a
zero


-- | VkPhysicalDeviceShaderEnqueueFeaturesAMDX - Structure describing whether
-- shader enqueue within execution graphs are supported by the
-- implementation
--
-- = Members
--
-- This structure describes the following feature:
--
-- = Description
--
-- If the 'PhysicalDeviceShaderEnqueueFeaturesAMDX' 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. 'PhysicalDeviceShaderEnqueueFeaturesAMDX' /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_AMDX_shader_enqueue VK_AMDX_shader_enqueue>,
-- 'Vulkan.Core10.FundamentalTypes.Bool32',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data PhysicalDeviceShaderEnqueueFeaturesAMDX = PhysicalDeviceShaderEnqueueFeaturesAMDX
  { -- | #features-shaderEnqueue# @shaderEnqueue@ indicates whether the
    -- implementation supports
    -- <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#executiongraphs execution graphs>.
    PhysicalDeviceShaderEnqueueFeaturesAMDX -> Bool
shaderEnqueue :: Bool }
  deriving (Typeable, PhysicalDeviceShaderEnqueueFeaturesAMDX
-> PhysicalDeviceShaderEnqueueFeaturesAMDX -> Bool
(PhysicalDeviceShaderEnqueueFeaturesAMDX
 -> PhysicalDeviceShaderEnqueueFeaturesAMDX -> Bool)
-> (PhysicalDeviceShaderEnqueueFeaturesAMDX
    -> PhysicalDeviceShaderEnqueueFeaturesAMDX -> Bool)
-> Eq PhysicalDeviceShaderEnqueueFeaturesAMDX
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: PhysicalDeviceShaderEnqueueFeaturesAMDX
-> PhysicalDeviceShaderEnqueueFeaturesAMDX -> Bool
== :: PhysicalDeviceShaderEnqueueFeaturesAMDX
-> PhysicalDeviceShaderEnqueueFeaturesAMDX -> Bool
$c/= :: PhysicalDeviceShaderEnqueueFeaturesAMDX
-> PhysicalDeviceShaderEnqueueFeaturesAMDX -> Bool
/= :: PhysicalDeviceShaderEnqueueFeaturesAMDX
-> PhysicalDeviceShaderEnqueueFeaturesAMDX -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (PhysicalDeviceShaderEnqueueFeaturesAMDX)
#endif
deriving instance Show PhysicalDeviceShaderEnqueueFeaturesAMDX

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

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

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

instance Zero PhysicalDeviceShaderEnqueueFeaturesAMDX where
  zero :: PhysicalDeviceShaderEnqueueFeaturesAMDX
zero = Bool -> PhysicalDeviceShaderEnqueueFeaturesAMDX
PhysicalDeviceShaderEnqueueFeaturesAMDX
           Bool
forall a. Zero a => a
zero


-- | VkExecutionGraphPipelineCreateInfoAMDX - Structure specifying parameters
-- of a newly created execution graph pipeline
--
-- = Description
--
-- The parameters @basePipelineHandle@ and @basePipelineIndex@ are
-- described in more detail in
-- <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#pipelines-pipeline-derivatives Pipeline Derivatives>.
--
-- Each shader stage provided when creating an execution graph pipeline
-- (including those in libraries) is associated with a name and an index,
-- determined by the inclusion or omission of a
-- 'PipelineShaderStageNodeCreateInfoAMDX' structure in its @pNext@ chain.
--
-- In addition to the shader name and index, an internal \"node index\" is
-- also generated for each node, which can be queried with
-- 'getExecutionGraphPipelineNodeIndexAMDX', and is used exclusively for
-- initial dispatch of an execution graph.
--
-- == Valid Usage
--
-- -   #VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-07984# If @flags@
--     contains the
--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
--     flag, and @basePipelineIndex@ is -1, @basePipelineHandle@ /must/ be
--     a valid execution graph 'Vulkan.Core10.Handles.Pipeline' handle
--
-- -   #VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-07985# If @flags@
--     contains the
--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
--     flag, and @basePipelineHandle@ is
--     'Vulkan.Core10.APIConstants.NULL_HANDLE', @basePipelineIndex@ /must/
--     be a valid index into the calling command’s @pCreateInfos@ parameter
--
-- -   #VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-07986# If @flags@
--     contains the
--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DERIVATIVE_BIT'
--     flag, @basePipelineIndex@ /must/ be -1 or @basePipelineHandle@
--     /must/ be 'Vulkan.Core10.APIConstants.NULL_HANDLE'
--
-- -   #VUID-VkExecutionGraphPipelineCreateInfoAMDX-layout-07987# If a push
--     constant block is declared in a shader, a push constant range in
--     @layout@ /must/ match both the shader stage and range
--
-- -   #VUID-VkExecutionGraphPipelineCreateInfoAMDX-layout-07988# If a
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces-resources resource variables>
--     is declared in a shader, a descriptor slot in @layout@ /must/ match
--     the shader stage
--
-- -   #VUID-VkExecutionGraphPipelineCreateInfoAMDX-layout-07990# If a
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces-resources resource variables>
--     is declared in a shader, and the descriptor type is not
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_MUTABLE_EXT', a
--     descriptor slot in @layout@ /must/ match the descriptor type
--
-- -   #VUID-VkExecutionGraphPipelineCreateInfoAMDX-layout-07991# If a
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces-resources resource variables>
--     is declared in a shader as an array, a descriptor slot in @layout@
--     /must/ match the descriptor count
--
-- -   #VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-03365# @flags@
--     /must/ not include
--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR'
--
-- -   #VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-03366# @flags@
--     /must/ not include
--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR'
--
-- -   #VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-03367# @flags@
--     /must/ not include
--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR'
--
-- -   #VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-03368# @flags@
--     /must/ not include
--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR'
--
-- -   #VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-03369# @flags@
--     /must/ not include
--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR'
--
-- -   #VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-03370# @flags@
--     /must/ not include
--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR'
--
-- -   #VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-03576# @flags@
--     /must/ not include
--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR'
--
-- -   #VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-04945# @flags@
--     /must/ not include
--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV'
--
-- -   #VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-09007# If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-deviceGeneratedComputePipelines ::deviceGeneratedComputePipelines>
--     is not enabled, @flags@ /must/ not include
--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV'
--
-- -   #VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-09008# If @flags@
--     includes
--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV',
--     then the @pNext@ chain /must/ include a pointer to a valid instance
--     of
--     'Vulkan.Extensions.VK_NV_device_generated_commands_compute.ComputePipelineIndirectBufferInfoNV'
--     specifying the address where the pipeline’s metadata will be saved
--
-- -   #VUID-VkExecutionGraphPipelineCreateInfoAMDX-pipelineCreationCacheControl-02875#
--     If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-pipelineCreationCacheControl pipelineCreationCacheControl>
--     feature is not enabled, @flags@ /must/ not include
--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT'
--     or
--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT'
--
-- -   #VUID-VkExecutionGraphPipelineCreateInfoAMDX-stage-09128# The
--     @stage@ member of any element of @pStages@ /must/ be
--     'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_COMPUTE_BIT'
--
-- -   #VUID-VkExecutionGraphPipelineCreateInfoAMDX-pStages-09129# The
--     shader code for the entry point identified by each element of
--     @pStages@ and the rest of the state identified by this structure
--     /must/ adhere to the pipeline linking rules described in the
--     <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#interfaces Shader Interfaces>
--     chapter
--
-- -   #VUID-VkExecutionGraphPipelineCreateInfoAMDX-layout-09130# @layout@
--     /must/ be
--     <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#descriptorsets-pipelinelayout-consistency consistent>
--     with the layout of the shaders specified in @pStages@
--
-- -   #VUID-VkExecutionGraphPipelineCreateInfoAMDX-pLibraryInfo-09131# If
--     @pLibraryInfo@ is not @NULL@, each element of its @pLibraries@
--     member /must/ have been created with a @layout@ that is compatible
--     with the @layout@ in this pipeline
--
-- -   #VUID-VkExecutionGraphPipelineCreateInfoAMDX-layout-09132# The
--     number of resources in @layout@ accessible to each shader stage that
--     is used by the pipeline /must/ be less than or equal to
--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceLimits'::@maxPerStageResources@
--
-- -   #VUID-VkExecutionGraphPipelineCreateInfoAMDX-pLibraryInfo-09133# If
--     @pLibraryInfo@ is not @NULL@, each element of
--     @pLibraryInfo->libraries@ /must/ be either a compute pipeline or an
--     execution graph pipeline
--
-- -   #VUID-VkExecutionGraphPipelineCreateInfoAMDX-None-09134# There
--     /must/ be no two nodes in the pipeline that share both the same
--     shader name and index, as specified by
--     'PipelineShaderStageNodeCreateInfoAMDX'
--
-- -   #VUID-VkExecutionGraphPipelineCreateInfoAMDX-None-09135# There
--     /must/ be no two nodes in the pipeline that share the same shader
--     name and have input payload declarations with different sizes
--
-- -   #VUID-VkExecutionGraphPipelineCreateInfoAMDX-None-09136# There
--     /must/ be no two nodes in the pipeline that share the same name but
--     have different execution models
--
-- -   #VUID-VkExecutionGraphPipelineCreateInfoAMDX-CoalescedInputCountAMDX-09137#
--     There /must/ be no two nodes in the pipeline that share the same
--     name where one includes @CoalescedInputCountAMDX@ and the other does
--     not
--
-- -   #VUID-VkExecutionGraphPipelineCreateInfoAMDX-StaticNumWorkgroupsAMDX-09138#
--     There /must/ be no two nodes in the pipeline that share the same
--     name where one includes @StaticNumWorkgroupsAMDX@ and the other does
--     not
--
-- -   #VUID-VkExecutionGraphPipelineCreateInfoAMDX-PayloadNodeNameAMDX-09139#
--     If an output payload declared in any shader in the pipeline has a
--     @PayloadNodeNameAMDX@ decoration with a @Node@ @Name@ that matches
--     the shader name of any other node in the graph, the size of the
--     output payload /must/ match the size of the input payload in the
--     matching node
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkExecutionGraphPipelineCreateInfoAMDX-sType-sType# @sType@
--     /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_EXECUTION_GRAPH_PIPELINE_CREATE_INFO_AMDX'
--
-- -   #VUID-VkExecutionGraphPipelineCreateInfoAMDX-pNext-pNext# Each
--     @pNext@ member of any structure (including this one) in the @pNext@
--     chain /must/ be either @NULL@ or a pointer to a valid instance of
--     'Vulkan.Extensions.VK_AMD_pipeline_compiler_control.PipelineCompilerControlCreateInfoAMD'
--     or
--     'Vulkan.Core13.Promoted_From_VK_EXT_pipeline_creation_feedback.PipelineCreationFeedbackCreateInfo'
--
-- -   #VUID-VkExecutionGraphPipelineCreateInfoAMDX-sType-unique# The
--     @sType@ value of each struct in the @pNext@ chain /must/ be unique
--
-- -   #VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-parameter#
--     @flags@ /must/ be a valid combination of
--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits'
--     values
--
-- -   #VUID-VkExecutionGraphPipelineCreateInfoAMDX-pStages-parameter# If
--     @stageCount@ is not @0@, and @pStages@ is not @NULL@, @pStages@
--     /must/ be a valid pointer to an array of @stageCount@ valid
--     'Vulkan.Core10.Pipeline.PipelineShaderStageCreateInfo' structures
--
-- -   #VUID-VkExecutionGraphPipelineCreateInfoAMDX-pLibraryInfo-parameter#
--     If @pLibraryInfo@ is not @NULL@, @pLibraryInfo@ /must/ be a valid
--     pointer to a valid
--     'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR'
--     structure
--
-- -   #VUID-VkExecutionGraphPipelineCreateInfoAMDX-layout-parameter#
--     @layout@ /must/ be a valid 'Vulkan.Core10.Handles.PipelineLayout'
--     handle
--
-- -   #VUID-VkExecutionGraphPipelineCreateInfoAMDX-commonparent# Both of
--     @basePipelineHandle@, and @layout@ 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_AMDX_shader_enqueue VK_AMDX_shader_enqueue>,
-- 'Vulkan.Core10.Handles.Pipeline',
-- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlags',
-- 'Vulkan.Core10.Handles.PipelineLayout',
-- 'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR',
-- 'Vulkan.Core10.Pipeline.PipelineShaderStageCreateInfo',
-- 'Vulkan.Core10.Enums.StructureType.StructureType',
-- 'createExecutionGraphPipelinesAMDX'
data ExecutionGraphPipelineCreateInfoAMDX (es :: [Type]) = ExecutionGraphPipelineCreateInfoAMDX
  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.
    forall (es :: [*]).
ExecutionGraphPipelineCreateInfoAMDX es -> Chain es
next :: Chain es
  , -- | @flags@ is a bitmask of
    -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits'
    -- specifying how the pipeline will be generated.
    forall (es :: [*]).
ExecutionGraphPipelineCreateInfoAMDX es -> PipelineCreateFlags
flags :: PipelineCreateFlags
  , -- | @stageCount@ is the number of entries in the @pStages@ array.
    forall (es :: [*]).
ExecutionGraphPipelineCreateInfoAMDX es -> "nodeIndex" ::: Word32
stageCount :: Word32
  , -- | @pStages@ is a pointer to an array of @stageCount@
    -- 'Vulkan.Core10.Pipeline.PipelineShaderStageCreateInfo' structures
    -- describing the set of the shader stages to be included in the execution
    -- graph pipeline.
    forall (es :: [*]).
ExecutionGraphPipelineCreateInfoAMDX es
-> Vector (SomeStruct PipelineShaderStageCreateInfo)
stages :: Vector (SomeStruct PipelineShaderStageCreateInfo)
  , -- | @pLibraryInfo@ is a pointer to a
    -- 'Vulkan.Extensions.VK_KHR_pipeline_library.PipelineLibraryCreateInfoKHR'
    -- structure defining pipeline libraries to include.
    forall (es :: [*]).
ExecutionGraphPipelineCreateInfoAMDX es
-> Maybe PipelineLibraryCreateInfoKHR
libraryInfo :: Maybe PipelineLibraryCreateInfoKHR
  , -- | @layout@ is the description of binding locations used by both the
    -- pipeline and descriptor sets used with the pipeline.
    forall (es :: [*]).
ExecutionGraphPipelineCreateInfoAMDX es -> PipelineLayout
layout :: PipelineLayout
  , -- | @basePipelineHandle@ is a pipeline to derive from
    forall (es :: [*]).
ExecutionGraphPipelineCreateInfoAMDX es
-> "executionGraph" ::: Pipeline
basePipelineHandle :: Pipeline
  , -- | @basePipelineIndex@ is an index into the @pCreateInfos@ parameter to use
    -- as a pipeline to derive from
    forall (es :: [*]).
ExecutionGraphPipelineCreateInfoAMDX es -> Int32
basePipelineIndex :: Int32
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (ExecutionGraphPipelineCreateInfoAMDX (es :: [Type]))
#endif
deriving instance Show (Chain es) => Show (ExecutionGraphPipelineCreateInfoAMDX es)

instance Extensible ExecutionGraphPipelineCreateInfoAMDX where
  extensibleTypeName :: String
extensibleTypeName = String
"ExecutionGraphPipelineCreateInfoAMDX"
  setNext :: forall (ds :: [*]) (es :: [*]).
ExecutionGraphPipelineCreateInfoAMDX ds
-> Chain es -> ExecutionGraphPipelineCreateInfoAMDX es
setNext ExecutionGraphPipelineCreateInfoAMDX{Int32
Maybe PipelineLibraryCreateInfoKHR
"nodeIndex" ::: Word32
Vector (SomeStruct PipelineShaderStageCreateInfo)
PipelineCreateFlags
"executionGraph" ::: Pipeline
PipelineLayout
Chain ds
$sel:next:ExecutionGraphPipelineCreateInfoAMDX :: forall (es :: [*]).
ExecutionGraphPipelineCreateInfoAMDX es -> Chain es
$sel:flags:ExecutionGraphPipelineCreateInfoAMDX :: forall (es :: [*]).
ExecutionGraphPipelineCreateInfoAMDX es -> PipelineCreateFlags
$sel:stageCount:ExecutionGraphPipelineCreateInfoAMDX :: forall (es :: [*]).
ExecutionGraphPipelineCreateInfoAMDX es -> "nodeIndex" ::: Word32
$sel:stages:ExecutionGraphPipelineCreateInfoAMDX :: forall (es :: [*]).
ExecutionGraphPipelineCreateInfoAMDX es
-> Vector (SomeStruct PipelineShaderStageCreateInfo)
$sel:libraryInfo:ExecutionGraphPipelineCreateInfoAMDX :: forall (es :: [*]).
ExecutionGraphPipelineCreateInfoAMDX es
-> Maybe PipelineLibraryCreateInfoKHR
$sel:layout:ExecutionGraphPipelineCreateInfoAMDX :: forall (es :: [*]).
ExecutionGraphPipelineCreateInfoAMDX es -> PipelineLayout
$sel:basePipelineHandle:ExecutionGraphPipelineCreateInfoAMDX :: forall (es :: [*]).
ExecutionGraphPipelineCreateInfoAMDX es
-> "executionGraph" ::: Pipeline
$sel:basePipelineIndex:ExecutionGraphPipelineCreateInfoAMDX :: forall (es :: [*]).
ExecutionGraphPipelineCreateInfoAMDX es -> Int32
next :: Chain ds
flags :: PipelineCreateFlags
stageCount :: "nodeIndex" ::: Word32
stages :: Vector (SomeStruct PipelineShaderStageCreateInfo)
libraryInfo :: Maybe PipelineLibraryCreateInfoKHR
layout :: PipelineLayout
basePipelineHandle :: "executionGraph" ::: Pipeline
basePipelineIndex :: Int32
..} Chain es
next' = ExecutionGraphPipelineCreateInfoAMDX{$sel:next:ExecutionGraphPipelineCreateInfoAMDX :: Chain es
next = Chain es
next', Int32
Maybe PipelineLibraryCreateInfoKHR
"nodeIndex" ::: Word32
Vector (SomeStruct PipelineShaderStageCreateInfo)
PipelineCreateFlags
"executionGraph" ::: Pipeline
PipelineLayout
$sel:flags:ExecutionGraphPipelineCreateInfoAMDX :: PipelineCreateFlags
$sel:stageCount:ExecutionGraphPipelineCreateInfoAMDX :: "nodeIndex" ::: Word32
$sel:stages:ExecutionGraphPipelineCreateInfoAMDX :: Vector (SomeStruct PipelineShaderStageCreateInfo)
$sel:libraryInfo:ExecutionGraphPipelineCreateInfoAMDX :: Maybe PipelineLibraryCreateInfoKHR
$sel:layout:ExecutionGraphPipelineCreateInfoAMDX :: PipelineLayout
$sel:basePipelineHandle:ExecutionGraphPipelineCreateInfoAMDX :: "executionGraph" ::: Pipeline
$sel:basePipelineIndex:ExecutionGraphPipelineCreateInfoAMDX :: Int32
flags :: PipelineCreateFlags
stageCount :: "nodeIndex" ::: Word32
stages :: Vector (SomeStruct PipelineShaderStageCreateInfo)
libraryInfo :: Maybe PipelineLibraryCreateInfoKHR
layout :: PipelineLayout
basePipelineHandle :: "executionGraph" ::: Pipeline
basePipelineIndex :: Int32
..}
  getNext :: forall (es :: [*]).
ExecutionGraphPipelineCreateInfoAMDX es -> Chain es
getNext ExecutionGraphPipelineCreateInfoAMDX{Int32
Maybe PipelineLibraryCreateInfoKHR
"nodeIndex" ::: Word32
Vector (SomeStruct PipelineShaderStageCreateInfo)
PipelineCreateFlags
"executionGraph" ::: Pipeline
PipelineLayout
Chain es
$sel:next:ExecutionGraphPipelineCreateInfoAMDX :: forall (es :: [*]).
ExecutionGraphPipelineCreateInfoAMDX es -> Chain es
$sel:flags:ExecutionGraphPipelineCreateInfoAMDX :: forall (es :: [*]).
ExecutionGraphPipelineCreateInfoAMDX es -> PipelineCreateFlags
$sel:stageCount:ExecutionGraphPipelineCreateInfoAMDX :: forall (es :: [*]).
ExecutionGraphPipelineCreateInfoAMDX es -> "nodeIndex" ::: Word32
$sel:stages:ExecutionGraphPipelineCreateInfoAMDX :: forall (es :: [*]).
ExecutionGraphPipelineCreateInfoAMDX es
-> Vector (SomeStruct PipelineShaderStageCreateInfo)
$sel:libraryInfo:ExecutionGraphPipelineCreateInfoAMDX :: forall (es :: [*]).
ExecutionGraphPipelineCreateInfoAMDX es
-> Maybe PipelineLibraryCreateInfoKHR
$sel:layout:ExecutionGraphPipelineCreateInfoAMDX :: forall (es :: [*]).
ExecutionGraphPipelineCreateInfoAMDX es -> PipelineLayout
$sel:basePipelineHandle:ExecutionGraphPipelineCreateInfoAMDX :: forall (es :: [*]).
ExecutionGraphPipelineCreateInfoAMDX es
-> "executionGraph" ::: Pipeline
$sel:basePipelineIndex:ExecutionGraphPipelineCreateInfoAMDX :: forall (es :: [*]).
ExecutionGraphPipelineCreateInfoAMDX es -> Int32
next :: Chain es
flags :: PipelineCreateFlags
stageCount :: "nodeIndex" ::: Word32
stages :: Vector (SomeStruct PipelineShaderStageCreateInfo)
libraryInfo :: Maybe PipelineLibraryCreateInfoKHR
layout :: PipelineLayout
basePipelineHandle :: "executionGraph" ::: Pipeline
basePipelineIndex :: Int32
..} = Chain es
next
  extends :: forall e b proxy. Typeable e => proxy e -> (Extends ExecutionGraphPipelineCreateInfoAMDX e => b) -> Maybe b
  extends :: forall e b (proxy :: * -> *).
Typeable e =>
proxy e
-> (Extends ExecutionGraphPipelineCreateInfoAMDX e => b) -> Maybe b
extends proxy e
_ Extends ExecutionGraphPipelineCreateInfoAMDX e => b
f
    | Just e :~: PipelineCompilerControlCreateInfoAMD
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PipelineCompilerControlCreateInfoAMD = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends ExecutionGraphPipelineCreateInfoAMDX e => b
f
    | Just e :~: PipelineCreationFeedbackCreateInfo
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PipelineCreationFeedbackCreateInfo = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends ExecutionGraphPipelineCreateInfoAMDX e => b
f
    | Bool
otherwise = Maybe b
forall a. Maybe a
Nothing

instance ( Extendss ExecutionGraphPipelineCreateInfoAMDX es
         , PokeChain es ) => ToCStruct (ExecutionGraphPipelineCreateInfoAMDX es) where
  withCStruct :: forall b.
ExecutionGraphPipelineCreateInfoAMDX es
-> (Ptr (ExecutionGraphPipelineCreateInfoAMDX es) -> IO b) -> IO b
withCStruct ExecutionGraphPipelineCreateInfoAMDX es
x Ptr (ExecutionGraphPipelineCreateInfoAMDX es) -> IO b
f = Int
-> (Ptr (ExecutionGraphPipelineCreateInfoAMDX es) -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
64 ((Ptr (ExecutionGraphPipelineCreateInfoAMDX es) -> IO b) -> IO b)
-> (Ptr (ExecutionGraphPipelineCreateInfoAMDX es) -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr (ExecutionGraphPipelineCreateInfoAMDX es)
p -> Ptr (ExecutionGraphPipelineCreateInfoAMDX es)
-> ExecutionGraphPipelineCreateInfoAMDX es -> IO b -> IO b
forall b.
Ptr (ExecutionGraphPipelineCreateInfoAMDX es)
-> ExecutionGraphPipelineCreateInfoAMDX es -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr (ExecutionGraphPipelineCreateInfoAMDX es)
p ExecutionGraphPipelineCreateInfoAMDX es
x (Ptr (ExecutionGraphPipelineCreateInfoAMDX es) -> IO b
f Ptr (ExecutionGraphPipelineCreateInfoAMDX es)
p)
  pokeCStruct :: forall b.
Ptr (ExecutionGraphPipelineCreateInfoAMDX es)
-> ExecutionGraphPipelineCreateInfoAMDX es -> IO b -> IO b
pokeCStruct Ptr (ExecutionGraphPipelineCreateInfoAMDX es)
p ExecutionGraphPipelineCreateInfoAMDX{Int32
Maybe PipelineLibraryCreateInfoKHR
"nodeIndex" ::: Word32
Vector (SomeStruct PipelineShaderStageCreateInfo)
PipelineCreateFlags
"executionGraph" ::: Pipeline
PipelineLayout
Chain es
$sel:next:ExecutionGraphPipelineCreateInfoAMDX :: forall (es :: [*]).
ExecutionGraphPipelineCreateInfoAMDX es -> Chain es
$sel:flags:ExecutionGraphPipelineCreateInfoAMDX :: forall (es :: [*]).
ExecutionGraphPipelineCreateInfoAMDX es -> PipelineCreateFlags
$sel:stageCount:ExecutionGraphPipelineCreateInfoAMDX :: forall (es :: [*]).
ExecutionGraphPipelineCreateInfoAMDX es -> "nodeIndex" ::: Word32
$sel:stages:ExecutionGraphPipelineCreateInfoAMDX :: forall (es :: [*]).
ExecutionGraphPipelineCreateInfoAMDX es
-> Vector (SomeStruct PipelineShaderStageCreateInfo)
$sel:libraryInfo:ExecutionGraphPipelineCreateInfoAMDX :: forall (es :: [*]).
ExecutionGraphPipelineCreateInfoAMDX es
-> Maybe PipelineLibraryCreateInfoKHR
$sel:layout:ExecutionGraphPipelineCreateInfoAMDX :: forall (es :: [*]).
ExecutionGraphPipelineCreateInfoAMDX es -> PipelineLayout
$sel:basePipelineHandle:ExecutionGraphPipelineCreateInfoAMDX :: forall (es :: [*]).
ExecutionGraphPipelineCreateInfoAMDX es
-> "executionGraph" ::: Pipeline
$sel:basePipelineIndex:ExecutionGraphPipelineCreateInfoAMDX :: forall (es :: [*]).
ExecutionGraphPipelineCreateInfoAMDX es -> Int32
next :: Chain es
flags :: PipelineCreateFlags
stageCount :: "nodeIndex" ::: Word32
stages :: Vector (SomeStruct PipelineShaderStageCreateInfo)
libraryInfo :: Maybe PipelineLibraryCreateInfoKHR
layout :: PipelineLayout
basePipelineHandle :: "executionGraph" ::: Pipeline
basePipelineIndex :: Int32
..} IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (ExecutionGraphPipelineCreateInfoAMDX es)
p Ptr (ExecutionGraphPipelineCreateInfoAMDX es)
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_EXECUTION_GRAPH_PIPELINE_CREATE_INFO_AMDX)
    Ptr ()
pNext'' <- (Ptr (Chain es) -> Ptr ())
-> ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ())
forall a b. (a -> b) -> ContT b IO a -> ContT b IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Ptr (Chain es) -> Ptr ()
forall a b. Ptr a -> Ptr b
castPtr (ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ()))
-> (((Ptr (Chain es) -> IO b) -> IO b)
    -> ContT b IO (Ptr (Chain es)))
-> ((Ptr (Chain es) -> IO b) -> IO b)
-> ContT b IO (Ptr ())
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr (Chain es))
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr ()))
-> ((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr ())
forall a b. (a -> b) -> a -> b
$ Chain es -> (Ptr (Chain es) -> IO b) -> IO b
forall (es :: [*]) a.
PokeChain es =>
Chain es -> (Ptr (Chain es) -> IO a) -> IO a
forall a. Chain es -> (Ptr (Chain es) -> IO a) -> IO a
withChain (Chain es
next)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (ExecutionGraphPipelineCreateInfoAMDX es)
p Ptr (ExecutionGraphPipelineCreateInfoAMDX es)
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) Ptr ()
pNext''
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr PipelineCreateFlags -> PipelineCreateFlags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (ExecutionGraphPipelineCreateInfoAMDX es)
p Ptr (ExecutionGraphPipelineCreateInfoAMDX es)
-> Int -> Ptr PipelineCreateFlags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr PipelineCreateFlags)) (PipelineCreateFlags
flags)
    let pStagesLength :: Int
pStagesLength = 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)
    "nodeIndex" ::: Word32
stageCount'' <- IO ("nodeIndex" ::: Word32) -> ContT b IO ("nodeIndex" ::: Word32)
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO ("nodeIndex" ::: Word32)
 -> ContT b IO ("nodeIndex" ::: Word32))
-> IO ("nodeIndex" ::: Word32)
-> ContT b IO ("nodeIndex" ::: Word32)
forall a b. (a -> b) -> a -> b
$ if ("nodeIndex" ::: Word32
stageCount) ("nodeIndex" ::: Word32) -> ("nodeIndex" ::: Word32) -> Bool
forall a. Eq a => a -> a -> Bool
== "nodeIndex" ::: Word32
0
      then ("nodeIndex" ::: Word32) -> IO ("nodeIndex" ::: Word32)
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (("nodeIndex" ::: Word32) -> IO ("nodeIndex" ::: Word32))
-> ("nodeIndex" ::: Word32) -> IO ("nodeIndex" ::: Word32)
forall a b. (a -> b) -> a -> b
$ Int -> "nodeIndex" ::: Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
pStagesLength
      else do
        Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Int -> "nodeIndex" ::: Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
pStagesLength ("nodeIndex" ::: Word32) -> ("nodeIndex" ::: Word32) -> Bool
forall a. Eq a => a -> a -> Bool
== ("nodeIndex" ::: Word32
stageCount) Bool -> Bool -> Bool
|| Int
pStagesLength Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
0) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
          IOException -> IO ()
forall e a. Exception e => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"pStages must be empty or have 'stageCount' elements" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
        ("nodeIndex" ::: Word32) -> IO ("nodeIndex" ::: Word32)
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ("nodeIndex" ::: Word32
stageCount)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr ("nodeIndex" ::: Word32) -> ("nodeIndex" ::: Word32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (ExecutionGraphPipelineCreateInfoAMDX es)
p Ptr (ExecutionGraphPipelineCreateInfoAMDX es)
-> Int -> Ptr ("nodeIndex" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr Word32)) ("nodeIndex" ::: Word32
stageCount'')
    Ptr (PipelineShaderStageCreateInfo Any)
pStages'' <- if Vector (SomeStruct PipelineShaderStageCreateInfo) -> Bool
forall a. Vector a -> Bool
Data.Vector.null (Vector (SomeStruct PipelineShaderStageCreateInfo)
stages)
      then Ptr (PipelineShaderStageCreateInfo Any)
-> ContT b IO (Ptr (PipelineShaderStageCreateInfo Any))
forall a. a -> ContT b IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Ptr (PipelineShaderStageCreateInfo Any)
forall a. Ptr a
nullPtr
      else do
        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))
        Ptr (PipelineShaderStageCreateInfo Any)
-> ContT b IO (Ptr (PipelineShaderStageCreateInfo Any))
forall a. a -> ContT b IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Ptr (PipelineShaderStageCreateInfo Any)
 -> ContT b IO (Ptr (PipelineShaderStageCreateInfo Any)))
-> Ptr (PipelineShaderStageCreateInfo Any)
-> ContT b IO (Ptr (PipelineShaderStageCreateInfo Any))
forall a b. (a -> b) -> a -> b
$ Ptr (PipelineShaderStageCreateInfo Any)
pPStages
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr (PipelineShaderStageCreateInfo Any))
-> Ptr (PipelineShaderStageCreateInfo Any) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (ExecutionGraphPipelineCreateInfoAMDX es)
p Ptr (ExecutionGraphPipelineCreateInfoAMDX es)
-> Int -> Ptr (Ptr (PipelineShaderStageCreateInfo w))
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr (Ptr (PipelineShaderStageCreateInfo _)))) Ptr (PipelineShaderStageCreateInfo Any)
pStages''
    Ptr PipelineLibraryCreateInfoKHR
pLibraryInfo'' <- case (Maybe PipelineLibraryCreateInfoKHR
libraryInfo) of
      Maybe PipelineLibraryCreateInfoKHR
Nothing -> Ptr PipelineLibraryCreateInfoKHR
-> ContT b IO (Ptr PipelineLibraryCreateInfoKHR)
forall a. a -> ContT b IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Ptr PipelineLibraryCreateInfoKHR
forall a. Ptr a
nullPtr
      Just PipelineLibraryCreateInfoKHR
j -> ((Ptr PipelineLibraryCreateInfoKHR -> IO b) -> IO b)
-> ContT b IO (Ptr PipelineLibraryCreateInfoKHR)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr PipelineLibraryCreateInfoKHR -> IO b) -> IO b)
 -> ContT b IO (Ptr PipelineLibraryCreateInfoKHR))
-> ((Ptr PipelineLibraryCreateInfoKHR -> IO b) -> IO b)
-> ContT b IO (Ptr PipelineLibraryCreateInfoKHR)
forall a b. (a -> b) -> a -> b
$ PipelineLibraryCreateInfoKHR
-> (Ptr PipelineLibraryCreateInfoKHR -> IO b) -> IO b
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
forall b.
PipelineLibraryCreateInfoKHR
-> (Ptr PipelineLibraryCreateInfoKHR -> IO b) -> IO b
withCStruct (PipelineLibraryCreateInfoKHR
j)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr PipelineLibraryCreateInfoKHR)
-> Ptr PipelineLibraryCreateInfoKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (ExecutionGraphPipelineCreateInfoAMDX es)
p Ptr (ExecutionGraphPipelineCreateInfoAMDX es)
-> Int -> Ptr (Ptr PipelineLibraryCreateInfoKHR)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr (Ptr PipelineLibraryCreateInfoKHR))) Ptr PipelineLibraryCreateInfoKHR
pLibraryInfo''
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr PipelineLayout -> PipelineLayout -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (ExecutionGraphPipelineCreateInfoAMDX es)
p Ptr (ExecutionGraphPipelineCreateInfoAMDX es)
-> Int -> Ptr PipelineLayout
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr PipelineLayout)) (PipelineLayout
layout)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr ("executionGraph" ::: Pipeline)
-> ("executionGraph" ::: Pipeline) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (ExecutionGraphPipelineCreateInfoAMDX es)
p Ptr (ExecutionGraphPipelineCreateInfoAMDX es)
-> Int -> Ptr ("executionGraph" ::: Pipeline)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr Pipeline)) ("executionGraph" ::: Pipeline
basePipelineHandle)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Int32 -> Int32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (ExecutionGraphPipelineCreateInfoAMDX es)
p Ptr (ExecutionGraphPipelineCreateInfoAMDX es) -> Int -> Ptr Int32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
56 :: Ptr Int32)) (Int32
basePipelineIndex)
    IO b -> ContT b IO b
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO b -> ContT b IO b) -> IO b -> ContT b IO b
forall a b. (a -> b) -> a -> b
$ IO b
f
  cStructSize :: Int
cStructSize = Int
64
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b.
Ptr (ExecutionGraphPipelineCreateInfoAMDX es) -> IO b -> IO b
pokeZeroCStruct Ptr (ExecutionGraphPipelineCreateInfoAMDX es)
p IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (ExecutionGraphPipelineCreateInfoAMDX es)
p Ptr (ExecutionGraphPipelineCreateInfoAMDX es)
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_EXECUTION_GRAPH_PIPELINE_CREATE_INFO_AMDX)
    Ptr ()
pNext' <- (Ptr (Chain es) -> Ptr ())
-> ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ())
forall a b. (a -> b) -> ContT b IO a -> ContT b IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Ptr (Chain es) -> Ptr ()
forall a b. Ptr a -> Ptr b
castPtr (ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ()))
-> (((Ptr (Chain es) -> IO b) -> IO b)
    -> ContT b IO (Ptr (Chain es)))
-> ((Ptr (Chain es) -> IO b) -> IO b)
-> ContT b IO (Ptr ())
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr (Chain es))
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr ()))
-> ((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr ())
forall a b. (a -> b) -> a -> b
$ forall (es :: [*]) a.
PokeChain es =>
(Ptr (Chain es) -> IO a) -> IO a
withZeroChain @es
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (ExecutionGraphPipelineCreateInfoAMDX es)
p Ptr (ExecutionGraphPipelineCreateInfoAMDX es)
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) Ptr ()
pNext'
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr PipelineLayout -> PipelineLayout -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (ExecutionGraphPipelineCreateInfoAMDX es)
p Ptr (ExecutionGraphPipelineCreateInfoAMDX es)
-> Int -> Ptr PipelineLayout
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr PipelineLayout)) (PipelineLayout
forall a. Zero a => a
zero)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Int32 -> Int32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (ExecutionGraphPipelineCreateInfoAMDX es)
p Ptr (ExecutionGraphPipelineCreateInfoAMDX es) -> Int -> Ptr Int32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
56 :: Ptr Int32)) (Int32
forall a. Zero a => a
zero)
    IO b -> ContT b IO b
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO b -> ContT b IO b) -> IO b -> ContT b IO b
forall a b. (a -> b) -> a -> b
$ IO b
f

instance ( Extendss ExecutionGraphPipelineCreateInfoAMDX es
         , PeekChain es ) => FromCStruct (ExecutionGraphPipelineCreateInfoAMDX es) where
  peekCStruct :: Ptr (ExecutionGraphPipelineCreateInfoAMDX es)
-> IO (ExecutionGraphPipelineCreateInfoAMDX es)
peekCStruct Ptr (ExecutionGraphPipelineCreateInfoAMDX es)
p = do
    Ptr ()
pNext <- forall a. Storable a => Ptr a -> IO a
peek @(Ptr ()) ((Ptr (ExecutionGraphPipelineCreateInfoAMDX es)
p Ptr (ExecutionGraphPipelineCreateInfoAMDX es)
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ())))
    Chain es
next <- Ptr (Chain es) -> IO (Chain es)
forall (es :: [*]). PeekChain es => Ptr (Chain es) -> IO (Chain es)
peekChain (Ptr () -> Ptr (Chain es)
forall a b. Ptr a -> Ptr b
castPtr Ptr ()
pNext)
    PipelineCreateFlags
flags <- forall a. Storable a => Ptr a -> IO a
peek @PipelineCreateFlags ((Ptr (ExecutionGraphPipelineCreateInfoAMDX es)
p Ptr (ExecutionGraphPipelineCreateInfoAMDX es)
-> Int -> Ptr PipelineCreateFlags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr PipelineCreateFlags))
    "nodeIndex" ::: Word32
stageCount <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr (ExecutionGraphPipelineCreateInfoAMDX es)
p Ptr (ExecutionGraphPipelineCreateInfoAMDX es)
-> Int -> Ptr ("nodeIndex" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr Word32))
    Ptr (PipelineShaderStageCreateInfo Any)
pStages <- forall a. Storable a => Ptr a -> IO a
peek @(Ptr (PipelineShaderStageCreateInfo _)) ((Ptr (ExecutionGraphPipelineCreateInfoAMDX es)
p Ptr (ExecutionGraphPipelineCreateInfoAMDX es)
-> Int -> Ptr (Ptr (PipelineShaderStageCreateInfo w))
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr (Ptr (PipelineShaderStageCreateInfo _))))
    let pStagesLength :: Int
pStagesLength = if Ptr (PipelineShaderStageCreateInfo Any)
pStages Ptr (PipelineShaderStageCreateInfo Any)
-> Ptr (PipelineShaderStageCreateInfo Any) -> Bool
forall a. Eq a => a -> a -> Bool
== Ptr (PipelineShaderStageCreateInfo Any)
forall a. Ptr a
nullPtr then Int
0 else (("nodeIndex" ::: Word32) -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral "nodeIndex" ::: Word32
stageCount)
    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 Int
pStagesLength (\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 PipelineLibraryCreateInfoKHR
pLibraryInfo <- forall a. Storable a => Ptr a -> IO a
peek @(Ptr PipelineLibraryCreateInfoKHR) ((Ptr (ExecutionGraphPipelineCreateInfoAMDX es)
p Ptr (ExecutionGraphPipelineCreateInfoAMDX es)
-> Int -> Ptr (Ptr PipelineLibraryCreateInfoKHR)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr (Ptr PipelineLibraryCreateInfoKHR)))
    Maybe PipelineLibraryCreateInfoKHR
pLibraryInfo' <- (Ptr PipelineLibraryCreateInfoKHR
 -> IO PipelineLibraryCreateInfoKHR)
-> Ptr PipelineLibraryCreateInfoKHR
-> IO (Maybe PipelineLibraryCreateInfoKHR)
forall a b. (Ptr a -> IO b) -> Ptr a -> IO (Maybe b)
maybePeek (\Ptr PipelineLibraryCreateInfoKHR
j -> forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @PipelineLibraryCreateInfoKHR (Ptr PipelineLibraryCreateInfoKHR
j)) Ptr PipelineLibraryCreateInfoKHR
pLibraryInfo
    PipelineLayout
layout <- forall a. Storable a => Ptr a -> IO a
peek @PipelineLayout ((Ptr (ExecutionGraphPipelineCreateInfoAMDX es)
p Ptr (ExecutionGraphPipelineCreateInfoAMDX es)
-> Int -> Ptr PipelineLayout
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr PipelineLayout))
    "executionGraph" ::: Pipeline
basePipelineHandle <- forall a. Storable a => Ptr a -> IO a
peek @Pipeline ((Ptr (ExecutionGraphPipelineCreateInfoAMDX es)
p Ptr (ExecutionGraphPipelineCreateInfoAMDX es)
-> Int -> Ptr ("executionGraph" ::: Pipeline)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr Pipeline))
    Int32
basePipelineIndex <- forall a. Storable a => Ptr a -> IO a
peek @Int32 ((Ptr (ExecutionGraphPipelineCreateInfoAMDX es)
p Ptr (ExecutionGraphPipelineCreateInfoAMDX es) -> Int -> Ptr Int32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
56 :: Ptr Int32))
    ExecutionGraphPipelineCreateInfoAMDX es
-> IO (ExecutionGraphPipelineCreateInfoAMDX es)
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (ExecutionGraphPipelineCreateInfoAMDX es
 -> IO (ExecutionGraphPipelineCreateInfoAMDX es))
-> ExecutionGraphPipelineCreateInfoAMDX es
-> IO (ExecutionGraphPipelineCreateInfoAMDX es)
forall a b. (a -> b) -> a -> b
$ Chain es
-> PipelineCreateFlags
-> ("nodeIndex" ::: Word32)
-> Vector (SomeStruct PipelineShaderStageCreateInfo)
-> Maybe PipelineLibraryCreateInfoKHR
-> PipelineLayout
-> ("executionGraph" ::: Pipeline)
-> Int32
-> ExecutionGraphPipelineCreateInfoAMDX es
forall (es :: [*]).
Chain es
-> PipelineCreateFlags
-> ("nodeIndex" ::: Word32)
-> Vector (SomeStruct PipelineShaderStageCreateInfo)
-> Maybe PipelineLibraryCreateInfoKHR
-> PipelineLayout
-> ("executionGraph" ::: Pipeline)
-> Int32
-> ExecutionGraphPipelineCreateInfoAMDX es
ExecutionGraphPipelineCreateInfoAMDX
             Chain es
next
             PipelineCreateFlags
flags
             "nodeIndex" ::: Word32
stageCount
             Vector (SomeStruct PipelineShaderStageCreateInfo)
pStages'
             Maybe PipelineLibraryCreateInfoKHR
pLibraryInfo'
             PipelineLayout
layout
             "executionGraph" ::: Pipeline
basePipelineHandle
             Int32
basePipelineIndex

instance es ~ '[] => Zero (ExecutionGraphPipelineCreateInfoAMDX es) where
  zero :: ExecutionGraphPipelineCreateInfoAMDX es
zero = Chain es
-> PipelineCreateFlags
-> ("nodeIndex" ::: Word32)
-> Vector (SomeStruct PipelineShaderStageCreateInfo)
-> Maybe PipelineLibraryCreateInfoKHR
-> PipelineLayout
-> ("executionGraph" ::: Pipeline)
-> Int32
-> ExecutionGraphPipelineCreateInfoAMDX es
forall (es :: [*]).
Chain es
-> PipelineCreateFlags
-> ("nodeIndex" ::: Word32)
-> Vector (SomeStruct PipelineShaderStageCreateInfo)
-> Maybe PipelineLibraryCreateInfoKHR
-> PipelineLayout
-> ("executionGraph" ::: Pipeline)
-> Int32
-> ExecutionGraphPipelineCreateInfoAMDX es
ExecutionGraphPipelineCreateInfoAMDX
           ()
           PipelineCreateFlags
forall a. Zero a => a
zero
           "nodeIndex" ::: Word32
forall a. Zero a => a
zero
           Vector (SomeStruct PipelineShaderStageCreateInfo)
forall a. Monoid a => a
mempty
           Maybe PipelineLibraryCreateInfoKHR
forall a. Maybe a
Nothing
           PipelineLayout
forall a. Zero a => a
zero
           "executionGraph" ::: Pipeline
forall a. Zero a => a
zero
           Int32
forall a. Zero a => a
zero


-- | VkPipelineShaderStageNodeCreateInfoAMDX - Structure specifying the
-- shader name and index with an execution graph
--
-- = Description
--
-- When included in the @pNext@ chain of a
-- 'Vulkan.Core10.Pipeline.PipelineShaderStageCreateInfo' structure, this
-- structure specifies the shader name and shader index of a node when
-- creating an execution graph pipeline. If this structure is omitted, the
-- shader name is set to the name of the entry point in SPIR-V and the
-- shader index is set to @0@.
--
-- When dispatching a node from another shader, the name is fixed at
-- pipeline creation, but the index /can/ be set dynamically. By
-- associating multiple shaders with the same name but different indexes,
-- applications can dynamically select different nodes to execute.
-- Applications /must/ ensure each node has a unique name and index.
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkPipelineShaderStageNodeCreateInfoAMDX-sType-sType# @sType@
--     /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_NODE_CREATE_INFO_AMDX'
--
-- -   #VUID-VkPipelineShaderStageNodeCreateInfoAMDX-pName-parameter# If
--     @pName@ is not @NULL@, @pName@ /must/ be a null-terminated UTF-8
--     string
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_AMDX_shader_enqueue VK_AMDX_shader_enqueue>,
-- 'Vulkan.Core10.Enums.StructureType.StructureType',
-- 'getExecutionGraphPipelineNodeIndexAMDX'
data PipelineShaderStageNodeCreateInfoAMDX = PipelineShaderStageNodeCreateInfoAMDX
  { -- | @pName@ is the shader name to use when creating a node in an execution
    -- graph. If @pName@ is @NULL@, the name of the entry point specified in
    -- SPIR-V is used as the shader name.
    ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
-> Maybe ByteString
name :: Maybe ByteString
  , -- | @index@ is the shader index to use when creating a node in an execution
    -- graph. If @index@ is
    -- 'Vulkan.Core10.APIConstants.SHADER_INDEX_UNUSED_AMDX' then the original
    -- index is used, either as specified by the @ShaderIndexAMDX@ execution
    -- mode, or @0@ if that too is not specified.
    ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
-> "nodeIndex" ::: Word32
index :: Word32
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (PipelineShaderStageNodeCreateInfoAMDX)
#endif
deriving instance Show PipelineShaderStageNodeCreateInfoAMDX

instance ToCStruct PipelineShaderStageNodeCreateInfoAMDX where
  withCStruct :: forall b.
("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
-> (Ptr ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
    -> IO b)
-> IO b
withCStruct "nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX
x Ptr ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX) -> IO b
f = Int
-> (Ptr ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
    -> IO b)
-> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
32 ((Ptr ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
  -> IO b)
 -> IO b)
-> (Ptr ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
    -> IO b)
-> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
p -> Ptr ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
-> ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
-> IO b
-> IO b
forall b.
Ptr ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
-> ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
-> IO b
-> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
p "nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX
x (Ptr ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX) -> IO b
f Ptr ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
p)
  pokeCStruct :: forall b.
Ptr ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
-> ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
-> IO b
-> IO b
pokeCStruct Ptr ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
p PipelineShaderStageNodeCreateInfoAMDX{Maybe ByteString
"nodeIndex" ::: Word32
$sel:name:PipelineShaderStageNodeCreateInfoAMDX :: ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
-> Maybe ByteString
$sel:index:PipelineShaderStageNodeCreateInfoAMDX :: ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
-> "nodeIndex" ::: Word32
name :: Maybe ByteString
index :: "nodeIndex" ::: Word32
..} IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
p Ptr ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_NODE_CREATE_INFO_AMDX)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
p Ptr ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr CChar
pName'' <- case (Maybe ByteString
name) of
      Maybe ByteString
Nothing -> Ptr CChar -> ContT b IO (Ptr CChar)
forall a. a -> ContT b IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Ptr CChar
forall a. Ptr a
nullPtr
      Just ByteString
j -> ((Ptr CChar -> IO b) -> IO b) -> ContT b IO (Ptr CChar)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr CChar -> IO b) -> IO b) -> ContT b IO (Ptr CChar))
-> ((Ptr CChar -> IO b) -> IO b) -> ContT b IO (Ptr CChar)
forall a b. (a -> b) -> a -> b
$ ByteString -> (Ptr CChar -> IO b) -> IO b
forall a. ByteString -> (Ptr CChar -> IO a) -> IO a
useAsCString (ByteString
j)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr CChar) -> Ptr CChar -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
p Ptr ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
-> Int -> Ptr (Ptr CChar)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr (Ptr CChar))) Ptr CChar
pName''
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr ("nodeIndex" ::: Word32) -> ("nodeIndex" ::: Word32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
p Ptr ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
-> Int -> Ptr ("nodeIndex" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Word32)) ("nodeIndex" ::: Word32
index)
    IO b -> ContT b IO b
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO b -> ContT b IO b) -> IO b -> ContT b IO b
forall a b. (a -> b) -> a -> b
$ IO b
f
  cStructSize :: Int
cStructSize = Int
32
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b.
Ptr ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
-> IO b -> IO b
pokeZeroCStruct Ptr ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
p Ptr ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_NODE_CREATE_INFO_AMDX)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
p Ptr ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr ("nodeIndex" ::: Word32) -> ("nodeIndex" ::: Word32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
p Ptr ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
-> Int -> Ptr ("nodeIndex" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Word32)) ("nodeIndex" ::: Word32
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct PipelineShaderStageNodeCreateInfoAMDX where
  peekCStruct :: Ptr ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
-> IO ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
peekCStruct Ptr ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
p = do
    Ptr CChar
pName <- forall a. Storable a => Ptr a -> IO a
peek @(Ptr CChar) ((Ptr ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
p Ptr ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
-> Int -> Ptr (Ptr CChar)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr (Ptr CChar)))
    Maybe ByteString
pName' <- (Ptr CChar -> IO ByteString) -> Ptr CChar -> IO (Maybe ByteString)
forall a b. (Ptr a -> IO b) -> Ptr a -> IO (Maybe b)
maybePeek (\Ptr CChar
j -> Ptr CChar -> IO ByteString
packCString (Ptr CChar
j)) Ptr CChar
pName
    "nodeIndex" ::: Word32
index <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
p Ptr ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
-> Int -> Ptr ("nodeIndex" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Word32))
    ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
-> IO ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
 -> IO ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX))
-> ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
-> IO ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX)
forall a b. (a -> b) -> a -> b
$ Maybe ByteString
-> ("nodeIndex" ::: Word32)
-> "nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX
PipelineShaderStageNodeCreateInfoAMDX
             Maybe ByteString
pName' "nodeIndex" ::: Word32
index

instance Zero PipelineShaderStageNodeCreateInfoAMDX where
  zero :: "nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX
zero = Maybe ByteString
-> ("nodeIndex" ::: Word32)
-> "nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX
PipelineShaderStageNodeCreateInfoAMDX
           Maybe ByteString
forall a. Maybe a
Nothing
           "nodeIndex" ::: Word32
forall a. Zero a => a
zero


-- | VkExecutionGraphPipelineScratchSizeAMDX - Structure describing the
-- scratch space required to dispatch an execution graph
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_AMDX_shader_enqueue VK_AMDX_shader_enqueue>,
-- 'Vulkan.Core10.FundamentalTypes.DeviceSize',
-- 'Vulkan.Core10.Enums.StructureType.StructureType',
-- 'getExecutionGraphPipelineScratchSizeAMDX'
data ExecutionGraphPipelineScratchSizeAMDX = ExecutionGraphPipelineScratchSizeAMDX
  { -- | @size@ indicates the scratch space required for dispatch the queried
    -- execution graph.
    ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX) -> Flags64
size :: DeviceSize }
  deriving (Typeable, ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
-> ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX) -> Bool
(("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
 -> ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX) -> Bool)
-> (("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
    -> ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX) -> Bool)
-> Eq ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
-> ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX) -> Bool
== :: ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
-> ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX) -> Bool
$c/= :: ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
-> ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX) -> Bool
/= :: ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
-> ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX) -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (ExecutionGraphPipelineScratchSizeAMDX)
#endif
deriving instance Show ExecutionGraphPipelineScratchSizeAMDX

instance ToCStruct ExecutionGraphPipelineScratchSizeAMDX where
  withCStruct :: forall b.
("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
-> (Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
    -> IO b)
-> IO b
withCStruct "sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX
x Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX) -> IO b
f = Int
-> (Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
    -> IO b)
-> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
24 ((Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
  -> IO b)
 -> IO b)
-> (Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
    -> IO b)
-> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
p -> Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
-> ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
-> IO b
-> IO b
forall b.
Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
-> ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
-> IO b
-> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
p "sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX
x (Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX) -> IO b
f Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
p)
  pokeCStruct :: forall b.
Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
-> ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
-> IO b
-> IO b
pokeCStruct Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
p ExecutionGraphPipelineScratchSizeAMDX{Flags64
$sel:size:ExecutionGraphPipelineScratchSizeAMDX :: ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX) -> Flags64
size :: Flags64
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
p Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_EXECUTION_GRAPH_PIPELINE_SCRATCH_SIZE_AMDX)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
p Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr Flags64 -> Flags64 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
p Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
-> Int -> Ptr Flags64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr DeviceSize)) (Flags64
size)
    IO b
f
  cStructSize :: Int
cStructSize = Int
24
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b.
Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
-> IO b -> IO b
pokeZeroCStruct Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
p Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_EXECUTION_GRAPH_PIPELINE_SCRATCH_SIZE_AMDX)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
p Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr Flags64 -> Flags64 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
p Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
-> Int -> Ptr Flags64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr DeviceSize)) (Flags64
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct ExecutionGraphPipelineScratchSizeAMDX where
  peekCStruct :: Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
-> IO ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
peekCStruct Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
p = do
    Flags64
size <- forall a. Storable a => Ptr a -> IO a
peek @DeviceSize ((Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
p Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
-> Int -> Ptr Flags64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr DeviceSize))
    ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
-> IO ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
 -> IO ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX))
-> ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
-> IO ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX)
forall a b. (a -> b) -> a -> b
$ Flags64 -> "sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX
ExecutionGraphPipelineScratchSizeAMDX
             Flags64
size

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

instance Zero ExecutionGraphPipelineScratchSizeAMDX where
  zero :: "sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX
zero = Flags64 -> "sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX
ExecutionGraphPipelineScratchSizeAMDX
           Flags64
forall a. Zero a => a
zero


-- | VkDispatchGraphInfoAMDX - Structure specifying node parameters for
-- execution graph dispatch
--
-- = Description
--
-- Whether @payloads@ is consumed as a device or host pointer is defined by
-- the command this structure is used in.
--
-- == Valid Usage
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_AMDX_shader_enqueue VK_AMDX_shader_enqueue>,
-- 'DeviceOrHostAddressConstAMDX', 'DispatchGraphCountInfoAMDX'
data DispatchGraphInfoAMDX = DispatchGraphInfoAMDX
  { -- | @nodeIndex@ is the index of a node in an execution graph to be
    -- dispatched.
    DispatchGraphInfoAMDX -> "nodeIndex" ::: Word32
nodeIndex :: Word32
  , -- | @payloadCount@ is the number of payloads to dispatch for the specified
    -- node.
    --
    -- #VUID-VkDispatchGraphInfoAMDX-payloadCount-09171# @payloadCount@ /must/
    -- be no greater than
    -- <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#limits-maxExecutionGraphShaderPayloadCount maxExecutionGraphShaderPayloadCount>
    DispatchGraphInfoAMDX -> "nodeIndex" ::: Word32
payloadCount :: Word32
  , -- | @payloads@ is a device or host address pointer to a flat array of
    -- payloads with size equal to the product of @payloadCount@ and
    -- @payloadStride@
    DispatchGraphInfoAMDX -> DeviceOrHostAddressConstAMDX
payloads :: DeviceOrHostAddressConstAMDX
  , -- | @payloadStride@ is the byte stride between successive payloads in
    -- @payloads@
    DispatchGraphInfoAMDX -> Flags64
payloadStride :: Word64
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DispatchGraphInfoAMDX)
#endif
deriving instance Show DispatchGraphInfoAMDX

instance ToCStruct DispatchGraphInfoAMDX where
  withCStruct :: forall b.
DispatchGraphInfoAMDX
-> (Ptr DispatchGraphInfoAMDX -> IO b) -> IO b
withCStruct DispatchGraphInfoAMDX
x Ptr DispatchGraphInfoAMDX -> IO b
f = Int -> (Ptr DispatchGraphInfoAMDX -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
24 ((Ptr DispatchGraphInfoAMDX -> IO b) -> IO b)
-> (Ptr DispatchGraphInfoAMDX -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr DispatchGraphInfoAMDX
p -> Ptr DispatchGraphInfoAMDX -> DispatchGraphInfoAMDX -> IO b -> IO b
forall b.
Ptr DispatchGraphInfoAMDX -> DispatchGraphInfoAMDX -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr DispatchGraphInfoAMDX
p DispatchGraphInfoAMDX
x (Ptr DispatchGraphInfoAMDX -> IO b
f Ptr DispatchGraphInfoAMDX
p)
  pokeCStruct :: forall b.
Ptr DispatchGraphInfoAMDX -> DispatchGraphInfoAMDX -> IO b -> IO b
pokeCStruct Ptr DispatchGraphInfoAMDX
p DispatchGraphInfoAMDX{"nodeIndex" ::: Word32
Flags64
DeviceOrHostAddressConstAMDX
$sel:nodeIndex:DispatchGraphInfoAMDX :: DispatchGraphInfoAMDX -> "nodeIndex" ::: Word32
$sel:payloadCount:DispatchGraphInfoAMDX :: DispatchGraphInfoAMDX -> "nodeIndex" ::: Word32
$sel:payloads:DispatchGraphInfoAMDX :: DispatchGraphInfoAMDX -> DeviceOrHostAddressConstAMDX
$sel:payloadStride:DispatchGraphInfoAMDX :: DispatchGraphInfoAMDX -> Flags64
nodeIndex :: "nodeIndex" ::: Word32
payloadCount :: "nodeIndex" ::: Word32
payloads :: DeviceOrHostAddressConstAMDX
payloadStride :: Flags64
..} IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr ("nodeIndex" ::: Word32) -> ("nodeIndex" ::: Word32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DispatchGraphInfoAMDX
p Ptr DispatchGraphInfoAMDX -> Int -> Ptr ("nodeIndex" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Word32)) ("nodeIndex" ::: Word32
nodeIndex)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr ("nodeIndex" ::: Word32) -> ("nodeIndex" ::: Word32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DispatchGraphInfoAMDX
p Ptr DispatchGraphInfoAMDX -> Int -> Ptr ("nodeIndex" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4 :: Ptr Word32)) ("nodeIndex" ::: Word32
payloadCount)
    ((() -> 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 DeviceOrHostAddressConstAMDX
-> DeviceOrHostAddressConstAMDX -> IO b -> IO b
forall b.
Ptr DeviceOrHostAddressConstAMDX
-> DeviceOrHostAddressConstAMDX -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct ((Ptr DispatchGraphInfoAMDX
p Ptr DispatchGraphInfoAMDX
-> Int -> Ptr DeviceOrHostAddressConstAMDX
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr DeviceOrHostAddressConstAMDX)) (DeviceOrHostAddressConstAMDX
payloads) (IO b -> IO b) -> ((() -> IO b) -> IO b) -> (() -> IO b) -> IO b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((() -> IO b) -> () -> IO b
forall a b. (a -> b) -> a -> b
$ ())
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Flags64 -> Flags64 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DispatchGraphInfoAMDX
p Ptr DispatchGraphInfoAMDX -> Int -> Ptr Flags64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word64)) (Flags64
payloadStride)
    IO b -> ContT b IO b
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO b -> ContT b IO b) -> IO b -> ContT b IO b
forall a b. (a -> b) -> a -> b
$ IO b
f
  cStructSize :: Int
cStructSize = Int
24
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b. Ptr DispatchGraphInfoAMDX -> IO b -> IO b
pokeZeroCStruct Ptr DispatchGraphInfoAMDX
p IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr ("nodeIndex" ::: Word32) -> ("nodeIndex" ::: Word32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DispatchGraphInfoAMDX
p Ptr DispatchGraphInfoAMDX -> Int -> Ptr ("nodeIndex" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Word32)) ("nodeIndex" ::: Word32
forall a. Zero a => a
zero)
    ((() -> IO b) -> IO b) -> ContT b IO ()
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((() -> IO b) -> IO b) -> ContT b IO ())
-> ((() -> IO b) -> IO b) -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr DeviceOrHostAddressConstAMDX
-> DeviceOrHostAddressConstAMDX -> IO b -> IO b
forall b.
Ptr DeviceOrHostAddressConstAMDX
-> DeviceOrHostAddressConstAMDX -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct ((Ptr DispatchGraphInfoAMDX
p Ptr DispatchGraphInfoAMDX
-> Int -> Ptr DeviceOrHostAddressConstAMDX
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr DeviceOrHostAddressConstAMDX)) (DeviceOrHostAddressConstAMDX
forall a. Zero a => a
zero) (IO b -> IO b) -> ((() -> IO b) -> IO b) -> (() -> IO b) -> IO b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((() -> IO b) -> () -> IO b
forall a b. (a -> b) -> a -> b
$ ())
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Flags64 -> Flags64 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DispatchGraphInfoAMDX
p Ptr DispatchGraphInfoAMDX -> Int -> Ptr Flags64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word64)) (Flags64
forall a. Zero a => a
zero)
    IO b -> ContT b IO b
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO b -> ContT b IO b) -> IO b -> ContT b IO b
forall a b. (a -> b) -> a -> b
$ IO b
f

instance Zero DispatchGraphInfoAMDX where
  zero :: DispatchGraphInfoAMDX
zero = ("nodeIndex" ::: Word32)
-> ("nodeIndex" ::: Word32)
-> DeviceOrHostAddressConstAMDX
-> Flags64
-> DispatchGraphInfoAMDX
DispatchGraphInfoAMDX
           "nodeIndex" ::: Word32
forall a. Zero a => a
zero
           "nodeIndex" ::: Word32
forall a. Zero a => a
zero
           DeviceOrHostAddressConstAMDX
forall a. Zero a => a
zero
           Flags64
forall a. Zero a => a
zero


-- | VkDispatchGraphCountInfoAMDX - Structure specifying count parameters for
-- execution graph dispatch
--
-- = Description
--
-- Whether @infos@ is consumed as a device or host pointer is defined by
-- the command this structure is used in.
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_AMDX_shader_enqueue VK_AMDX_shader_enqueue>,
-- 'DeviceOrHostAddressConstAMDX', 'cmdDispatchGraphAMDX',
-- 'cmdDispatchGraphIndirectAMDX', 'cmdDispatchGraphIndirectCountAMDX'
data DispatchGraphCountInfoAMDX = DispatchGraphCountInfoAMDX
  { -- | @count@ is the number of dispatches to perform.
    DispatchGraphCountInfoAMDX -> "nodeIndex" ::: Word32
count :: Word32
  , -- | @infos@ is the device or host address of a flat array of
    -- 'DispatchGraphInfoAMDX' structures
    DispatchGraphCountInfoAMDX -> DeviceOrHostAddressConstAMDX
infos :: DeviceOrHostAddressConstAMDX
  , -- | @stride@ is the byte stride between successive 'DispatchGraphInfoAMDX'
    -- structures in @infos@
    DispatchGraphCountInfoAMDX -> Flags64
stride :: Word64
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DispatchGraphCountInfoAMDX)
#endif
deriving instance Show DispatchGraphCountInfoAMDX

instance ToCStruct DispatchGraphCountInfoAMDX where
  withCStruct :: forall b.
DispatchGraphCountInfoAMDX
-> (Ptr DispatchGraphCountInfoAMDX -> IO b) -> IO b
withCStruct DispatchGraphCountInfoAMDX
x Ptr DispatchGraphCountInfoAMDX -> IO b
f = Int -> (Ptr DispatchGraphCountInfoAMDX -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
24 ((Ptr DispatchGraphCountInfoAMDX -> IO b) -> IO b)
-> (Ptr DispatchGraphCountInfoAMDX -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr DispatchGraphCountInfoAMDX
p -> Ptr DispatchGraphCountInfoAMDX
-> DispatchGraphCountInfoAMDX -> IO b -> IO b
forall b.
Ptr DispatchGraphCountInfoAMDX
-> DispatchGraphCountInfoAMDX -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr DispatchGraphCountInfoAMDX
p DispatchGraphCountInfoAMDX
x (Ptr DispatchGraphCountInfoAMDX -> IO b
f Ptr DispatchGraphCountInfoAMDX
p)
  pokeCStruct :: forall b.
Ptr DispatchGraphCountInfoAMDX
-> DispatchGraphCountInfoAMDX -> IO b -> IO b
pokeCStruct Ptr DispatchGraphCountInfoAMDX
p DispatchGraphCountInfoAMDX{"nodeIndex" ::: Word32
Flags64
DeviceOrHostAddressConstAMDX
$sel:count:DispatchGraphCountInfoAMDX :: DispatchGraphCountInfoAMDX -> "nodeIndex" ::: Word32
$sel:infos:DispatchGraphCountInfoAMDX :: DispatchGraphCountInfoAMDX -> DeviceOrHostAddressConstAMDX
$sel:stride:DispatchGraphCountInfoAMDX :: DispatchGraphCountInfoAMDX -> Flags64
count :: "nodeIndex" ::: Word32
infos :: DeviceOrHostAddressConstAMDX
stride :: Flags64
..} IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr ("nodeIndex" ::: Word32) -> ("nodeIndex" ::: Word32) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DispatchGraphCountInfoAMDX
p Ptr DispatchGraphCountInfoAMDX
-> Int -> Ptr ("nodeIndex" ::: Word32)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr Word32)) ("nodeIndex" ::: Word32
count)
    ((() -> 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 DeviceOrHostAddressConstAMDX
-> DeviceOrHostAddressConstAMDX -> IO b -> IO b
forall b.
Ptr DeviceOrHostAddressConstAMDX
-> DeviceOrHostAddressConstAMDX -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct ((Ptr DispatchGraphCountInfoAMDX
p Ptr DispatchGraphCountInfoAMDX
-> Int -> Ptr DeviceOrHostAddressConstAMDX
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr DeviceOrHostAddressConstAMDX)) (DeviceOrHostAddressConstAMDX
infos) (IO b -> IO b) -> ((() -> IO b) -> IO b) -> (() -> IO b) -> IO b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((() -> IO b) -> () -> IO b
forall a b. (a -> b) -> a -> b
$ ())
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Flags64 -> Flags64 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DispatchGraphCountInfoAMDX
p Ptr DispatchGraphCountInfoAMDX -> Int -> Ptr Flags64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word64)) (Flags64
stride)
    IO b -> ContT b IO b
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO b -> ContT b IO b) -> IO b -> ContT b IO b
forall a b. (a -> b) -> a -> b
$ IO b
f
  cStructSize :: Int
cStructSize = Int
24
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b. Ptr DispatchGraphCountInfoAMDX -> IO b -> IO b
pokeZeroCStruct Ptr DispatchGraphCountInfoAMDX
p IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    ((() -> IO 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 DeviceOrHostAddressConstAMDX
-> DeviceOrHostAddressConstAMDX -> IO b -> IO b
forall b.
Ptr DeviceOrHostAddressConstAMDX
-> DeviceOrHostAddressConstAMDX -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct ((Ptr DispatchGraphCountInfoAMDX
p Ptr DispatchGraphCountInfoAMDX
-> Int -> Ptr DeviceOrHostAddressConstAMDX
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr DeviceOrHostAddressConstAMDX)) (DeviceOrHostAddressConstAMDX
forall a. Zero a => a
zero) (IO b -> IO b) -> ((() -> IO b) -> IO b) -> (() -> IO b) -> IO b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((() -> IO b) -> () -> IO b
forall a b. (a -> b) -> a -> b
$ ())
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Flags64 -> Flags64 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DispatchGraphCountInfoAMDX
p Ptr DispatchGraphCountInfoAMDX -> Int -> Ptr Flags64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word64)) (Flags64
forall a. Zero a => a
zero)
    IO b -> ContT b IO b
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO b -> ContT b IO b) -> IO b -> ContT b IO b
forall a b. (a -> b) -> a -> b
$ IO b
f

instance Zero DispatchGraphCountInfoAMDX where
  zero :: DispatchGraphCountInfoAMDX
zero = ("nodeIndex" ::: Word32)
-> DeviceOrHostAddressConstAMDX
-> Flags64
-> DispatchGraphCountInfoAMDX
DispatchGraphCountInfoAMDX
           "nodeIndex" ::: Word32
forall a. Zero a => a
zero
           DeviceOrHostAddressConstAMDX
forall a. Zero a => a
zero
           Flags64
forall a. Zero a => a
zero


data DeviceOrHostAddressConstAMDX
  = DeviceAddressConstAMDX DeviceAddress
  | HostAddressConstAMDX (Ptr ())
  deriving (Int -> DeviceOrHostAddressConstAMDX -> ShowS
[DeviceOrHostAddressConstAMDX] -> ShowS
DeviceOrHostAddressConstAMDX -> String
(Int -> DeviceOrHostAddressConstAMDX -> ShowS)
-> (DeviceOrHostAddressConstAMDX -> String)
-> ([DeviceOrHostAddressConstAMDX] -> ShowS)
-> Show DeviceOrHostAddressConstAMDX
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> DeviceOrHostAddressConstAMDX -> ShowS
showsPrec :: Int -> DeviceOrHostAddressConstAMDX -> ShowS
$cshow :: DeviceOrHostAddressConstAMDX -> String
show :: DeviceOrHostAddressConstAMDX -> String
$cshowList :: [DeviceOrHostAddressConstAMDX] -> ShowS
showList :: [DeviceOrHostAddressConstAMDX] -> ShowS
Show)

instance ToCStruct DeviceOrHostAddressConstAMDX where
  withCStruct :: forall b.
DeviceOrHostAddressConstAMDX
-> (Ptr DeviceOrHostAddressConstAMDX -> IO b) -> IO b
withCStruct DeviceOrHostAddressConstAMDX
x Ptr DeviceOrHostAddressConstAMDX -> IO b
f = Int -> (Ptr DeviceOrHostAddressConstAMDX -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
8 ((Ptr DeviceOrHostAddressConstAMDX -> IO b) -> IO b)
-> (Ptr DeviceOrHostAddressConstAMDX -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr DeviceOrHostAddressConstAMDX
p -> Ptr DeviceOrHostAddressConstAMDX
-> DeviceOrHostAddressConstAMDX -> IO b -> IO b
forall b.
Ptr DeviceOrHostAddressConstAMDX
-> DeviceOrHostAddressConstAMDX -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr DeviceOrHostAddressConstAMDX
p DeviceOrHostAddressConstAMDX
x (Ptr DeviceOrHostAddressConstAMDX -> IO b
f Ptr DeviceOrHostAddressConstAMDX
p)
  pokeCStruct :: Ptr DeviceOrHostAddressConstAMDX -> DeviceOrHostAddressConstAMDX -> IO a -> IO a
  pokeCStruct :: forall b.
Ptr DeviceOrHostAddressConstAMDX
-> DeviceOrHostAddressConstAMDX -> IO b -> IO b
pokeCStruct Ptr DeviceOrHostAddressConstAMDX
p = (((() -> IO a) -> IO a) -> (IO a -> () -> IO a) -> IO a -> IO a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. IO a -> () -> IO a
forall a b. a -> b -> a
const) (((() -> IO a) -> IO a) -> IO a -> IO a)
-> (DeviceOrHostAddressConstAMDX -> (() -> IO a) -> IO a)
-> DeviceOrHostAddressConstAMDX
-> IO a
-> IO a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT a IO () -> (() -> IO a) -> IO a
forall {k} (r :: k) (m :: k -> *) a.
ContT r m a -> (a -> m r) -> m r
runContT (ContT a IO () -> (() -> IO a) -> IO a)
-> (DeviceOrHostAddressConstAMDX -> ContT a IO ())
-> DeviceOrHostAddressConstAMDX
-> (() -> IO a)
-> IO a
forall b c a. (b -> c) -> (a -> b) -> a -> c
.  \case
    DeviceAddressConstAMDX Flags64
v -> IO () -> ContT a IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT a m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT a IO ()) -> IO () -> ContT a IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Flags64 -> Flags64 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (forall a b. Ptr a -> Ptr b
castPtr @_ @DeviceAddress Ptr DeviceOrHostAddressConstAMDX
p) (Flags64
v)
    HostAddressConstAMDX Ptr ()
v -> IO () -> ContT a IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT a m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT a IO ()) -> IO () -> ContT a IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (forall a b. Ptr a -> Ptr b
castPtr @_ @(Ptr ()) Ptr DeviceOrHostAddressConstAMDX
p) (Ptr ()
v)
  pokeZeroCStruct :: Ptr DeviceOrHostAddressConstAMDX -> IO b -> IO b
  pokeZeroCStruct :: forall b. Ptr DeviceOrHostAddressConstAMDX -> IO b -> IO b
pokeZeroCStruct Ptr DeviceOrHostAddressConstAMDX
_ IO b
f = IO b
f
  cStructSize :: Int
cStructSize = Int
8
  cStructAlignment :: Int
cStructAlignment = Int
8

instance Zero DeviceOrHostAddressConstAMDX where
  zero :: DeviceOrHostAddressConstAMDX
zero = Flags64 -> DeviceOrHostAddressConstAMDX
DeviceAddressConstAMDX Flags64
forall a. Zero a => a
zero


type BufferUsageFlags2KHR = BufferUsageFlagBits2KHR

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

-- | 'BUFFER_USAGE_2_TRANSFER_SRC_BIT_KHR' specifies that the buffer /can/ be
-- used as the source of a /transfer command/ (see the definition of
-- <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#synchronization-pipeline-stages-transfer >).
pattern $bBUFFER_USAGE_2_TRANSFER_SRC_BIT_KHR :: BufferUsageFlagBits2KHR
$mBUFFER_USAGE_2_TRANSFER_SRC_BIT_KHR :: forall {r}.
BufferUsageFlagBits2KHR -> ((# #) -> r) -> ((# #) -> r) -> r
BUFFER_USAGE_2_TRANSFER_SRC_BIT_KHR = BufferUsageFlagBits2KHR 0x0000000000000001

-- | 'BUFFER_USAGE_2_TRANSFER_DST_BIT_KHR' specifies that the buffer /can/ be
-- used as the destination of a transfer command.
pattern $bBUFFER_USAGE_2_TRANSFER_DST_BIT_KHR :: BufferUsageFlagBits2KHR
$mBUFFER_USAGE_2_TRANSFER_DST_BIT_KHR :: forall {r}.
BufferUsageFlagBits2KHR -> ((# #) -> r) -> ((# #) -> r) -> r
BUFFER_USAGE_2_TRANSFER_DST_BIT_KHR = BufferUsageFlagBits2KHR 0x0000000000000002

-- | 'BUFFER_USAGE_2_UNIFORM_TEXEL_BUFFER_BIT_KHR' specifies that the buffer
-- /can/ be used to create a 'Vulkan.Core10.Handles.BufferView' suitable
-- for occupying a 'Vulkan.Core10.Handles.DescriptorSet' slot of type
-- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER'.
pattern $bBUFFER_USAGE_2_UNIFORM_TEXEL_BUFFER_BIT_KHR :: BufferUsageFlagBits2KHR
$mBUFFER_USAGE_2_UNIFORM_TEXEL_BUFFER_BIT_KHR :: forall {r}.
BufferUsageFlagBits2KHR -> ((# #) -> r) -> ((# #) -> r) -> r
BUFFER_USAGE_2_UNIFORM_TEXEL_BUFFER_BIT_KHR = BufferUsageFlagBits2KHR 0x0000000000000004

-- | 'BUFFER_USAGE_2_STORAGE_TEXEL_BUFFER_BIT_KHR' specifies that the buffer
-- /can/ be used to create a 'Vulkan.Core10.Handles.BufferView' suitable
-- for occupying a 'Vulkan.Core10.Handles.DescriptorSet' slot of type
-- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER'.
pattern $bBUFFER_USAGE_2_STORAGE_TEXEL_BUFFER_BIT_KHR :: BufferUsageFlagBits2KHR
$mBUFFER_USAGE_2_STORAGE_TEXEL_BUFFER_BIT_KHR :: forall {r}.
BufferUsageFlagBits2KHR -> ((# #) -> r) -> ((# #) -> r) -> r
BUFFER_USAGE_2_STORAGE_TEXEL_BUFFER_BIT_KHR = BufferUsageFlagBits2KHR 0x0000000000000008

-- | 'BUFFER_USAGE_2_UNIFORM_BUFFER_BIT_KHR' specifies that the buffer /can/
-- be used in a 'Vulkan.Core10.DescriptorSet.DescriptorBufferInfo' suitable
-- for occupying a 'Vulkan.Core10.Handles.DescriptorSet' slot either of
-- type 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER'
-- or
-- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC'.
pattern $bBUFFER_USAGE_2_UNIFORM_BUFFER_BIT_KHR :: BufferUsageFlagBits2KHR
$mBUFFER_USAGE_2_UNIFORM_BUFFER_BIT_KHR :: forall {r}.
BufferUsageFlagBits2KHR -> ((# #) -> r) -> ((# #) -> r) -> r
BUFFER_USAGE_2_UNIFORM_BUFFER_BIT_KHR = BufferUsageFlagBits2KHR 0x0000000000000010

-- | 'BUFFER_USAGE_2_STORAGE_BUFFER_BIT_KHR' specifies that the buffer /can/
-- be used in a 'Vulkan.Core10.DescriptorSet.DescriptorBufferInfo' suitable
-- for occupying a 'Vulkan.Core10.Handles.DescriptorSet' slot either of
-- type 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER'
-- or
-- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC'.
pattern $bBUFFER_USAGE_2_STORAGE_BUFFER_BIT_KHR :: BufferUsageFlagBits2KHR
$mBUFFER_USAGE_2_STORAGE_BUFFER_BIT_KHR :: forall {r}.
BufferUsageFlagBits2KHR -> ((# #) -> r) -> ((# #) -> r) -> r
BUFFER_USAGE_2_STORAGE_BUFFER_BIT_KHR = BufferUsageFlagBits2KHR 0x0000000000000020

-- | 'BUFFER_USAGE_2_INDEX_BUFFER_BIT_KHR' specifies that the buffer is
-- suitable for passing as the @buffer@ parameter to
-- 'Vulkan.Extensions.VK_KHR_maintenance5.cmdBindIndexBuffer2KHR' and
-- 'Vulkan.Core10.CommandBufferBuilding.cmdBindIndexBuffer'.
pattern $bBUFFER_USAGE_2_INDEX_BUFFER_BIT_KHR :: BufferUsageFlagBits2KHR
$mBUFFER_USAGE_2_INDEX_BUFFER_BIT_KHR :: forall {r}.
BufferUsageFlagBits2KHR -> ((# #) -> r) -> ((# #) -> r) -> r
BUFFER_USAGE_2_INDEX_BUFFER_BIT_KHR = BufferUsageFlagBits2KHR 0x0000000000000040

-- | 'BUFFER_USAGE_2_VERTEX_BUFFER_BIT_KHR' specifies that the buffer is
-- suitable for passing as an element of the @pBuffers@ array to
-- 'Vulkan.Core10.CommandBufferBuilding.cmdBindVertexBuffers'.
pattern $bBUFFER_USAGE_2_VERTEX_BUFFER_BIT_KHR :: BufferUsageFlagBits2KHR
$mBUFFER_USAGE_2_VERTEX_BUFFER_BIT_KHR :: forall {r}.
BufferUsageFlagBits2KHR -> ((# #) -> r) -> ((# #) -> r) -> r
BUFFER_USAGE_2_VERTEX_BUFFER_BIT_KHR = BufferUsageFlagBits2KHR 0x0000000000000080

-- | 'BUFFER_USAGE_2_INDIRECT_BUFFER_BIT_KHR' specifies that the buffer is
-- suitable for passing as the @buffer@ parameter to
-- 'Vulkan.Core10.CommandBufferBuilding.cmdDrawIndirect',
-- 'Vulkan.Core10.CommandBufferBuilding.cmdDrawIndexedIndirect',
-- 'Vulkan.Extensions.VK_NV_mesh_shader.cmdDrawMeshTasksIndirectNV',
-- 'Vulkan.Extensions.VK_NV_mesh_shader.cmdDrawMeshTasksIndirectCountNV',
-- 'Vulkan.Extensions.VK_EXT_mesh_shader.cmdDrawMeshTasksIndirectEXT',
-- 'Vulkan.Extensions.VK_EXT_mesh_shader.cmdDrawMeshTasksIndirectCountEXT',
-- 'Vulkan.Extensions.VK_HUAWEI_cluster_culling_shader.cmdDrawClusterIndirectHUAWEI',
-- or 'Vulkan.Core10.CommandBufferBuilding.cmdDispatchIndirect'. It is also
-- suitable for passing as the @buffer@ member of
-- 'Vulkan.Extensions.VK_NV_device_generated_commands.IndirectCommandsStreamNV',
-- or @sequencesCountBuffer@ or @sequencesIndexBuffer@ or
-- @preprocessedBuffer@ member of
-- 'Vulkan.Extensions.VK_NV_device_generated_commands.GeneratedCommandsInfoNV'
pattern $bBUFFER_USAGE_2_INDIRECT_BUFFER_BIT_KHR :: BufferUsageFlagBits2KHR
$mBUFFER_USAGE_2_INDIRECT_BUFFER_BIT_KHR :: forall {r}.
BufferUsageFlagBits2KHR -> ((# #) -> r) -> ((# #) -> r) -> r
BUFFER_USAGE_2_INDIRECT_BUFFER_BIT_KHR = BufferUsageFlagBits2KHR 0x0000000000000100

-- No documentation found for Nested "VkBufferUsageFlagBits2KHR" "VK_BUFFER_USAGE_2_MICROMAP_STORAGE_BIT_EXT"
pattern $bBUFFER_USAGE_2_MICROMAP_STORAGE_BIT_EXT :: BufferUsageFlagBits2KHR
$mBUFFER_USAGE_2_MICROMAP_STORAGE_BIT_EXT :: forall {r}.
BufferUsageFlagBits2KHR -> ((# #) -> r) -> ((# #) -> r) -> r
BUFFER_USAGE_2_MICROMAP_STORAGE_BIT_EXT = BufferUsageFlagBits2KHR 0x0000000001000000

-- No documentation found for Nested "VkBufferUsageFlagBits2KHR" "VK_BUFFER_USAGE_2_MICROMAP_BUILD_INPUT_READ_ONLY_BIT_EXT"
pattern $bBUFFER_USAGE_2_MICROMAP_BUILD_INPUT_READ_ONLY_BIT_EXT :: BufferUsageFlagBits2KHR
$mBUFFER_USAGE_2_MICROMAP_BUILD_INPUT_READ_ONLY_BIT_EXT :: forall {r}.
BufferUsageFlagBits2KHR -> ((# #) -> r) -> ((# #) -> r) -> r
BUFFER_USAGE_2_MICROMAP_BUILD_INPUT_READ_ONLY_BIT_EXT = BufferUsageFlagBits2KHR 0x0000000000800000

-- | 'BUFFER_USAGE_2_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT' specifies
-- that the buffer, when bound, /can/ be used by the implementation to
-- support push descriptors when using descriptor buffers.
pattern $bBUFFER_USAGE_2_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT :: BufferUsageFlagBits2KHR
$mBUFFER_USAGE_2_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT :: forall {r}.
BufferUsageFlagBits2KHR -> ((# #) -> r) -> ((# #) -> r) -> r
BUFFER_USAGE_2_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT = BufferUsageFlagBits2KHR 0x0000000004000000

-- | 'BUFFER_USAGE_2_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT' specifies that the
-- buffer is suitable to contain resource descriptors when bound as a
-- descriptor buffer.
pattern $bBUFFER_USAGE_2_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT :: BufferUsageFlagBits2KHR
$mBUFFER_USAGE_2_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT :: forall {r}.
BufferUsageFlagBits2KHR -> ((# #) -> r) -> ((# #) -> r) -> r
BUFFER_USAGE_2_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT = BufferUsageFlagBits2KHR 0x0000000000400000

-- | 'BUFFER_USAGE_2_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT' specifies that the
-- buffer is suitable to contain sampler and combined image sampler
-- descriptors when bound as a descriptor buffer. Buffers containing
-- combined image sampler descriptors /must/ also specify
-- 'BUFFER_USAGE_2_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT'.
pattern $bBUFFER_USAGE_2_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT :: BufferUsageFlagBits2KHR
$mBUFFER_USAGE_2_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT :: forall {r}.
BufferUsageFlagBits2KHR -> ((# #) -> r) -> ((# #) -> r) -> r
BUFFER_USAGE_2_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT = BufferUsageFlagBits2KHR 0x0000000000200000

-- | 'BUFFER_USAGE_2_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR' specifies that
-- the buffer is suitable for storage space for a
-- 'Vulkan.Extensions.Handles.AccelerationStructureKHR'.
pattern $bBUFFER_USAGE_2_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR :: BufferUsageFlagBits2KHR
$mBUFFER_USAGE_2_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR :: forall {r}.
BufferUsageFlagBits2KHR -> ((# #) -> r) -> ((# #) -> r) -> r
BUFFER_USAGE_2_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR = BufferUsageFlagBits2KHR 0x0000000000100000

-- | 'BUFFER_USAGE_2_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR'
-- specifies that the buffer is suitable for use as a read-only input to an
-- <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#acceleration-structure-building acceleration structure build>.
pattern $bBUFFER_USAGE_2_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR :: BufferUsageFlagBits2KHR
$mBUFFER_USAGE_2_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR :: forall {r}.
BufferUsageFlagBits2KHR -> ((# #) -> r) -> ((# #) -> r) -> r
BUFFER_USAGE_2_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR = BufferUsageFlagBits2KHR 0x0000000000080000

-- | 'BUFFER_USAGE_2_SHADER_DEVICE_ADDRESS_BIT_KHR' specifies that the buffer
-- /can/ be used to retrieve a buffer device address via
-- 'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.getBufferDeviceAddress'
-- and use that address to access the buffer’s memory from a shader.
pattern $bBUFFER_USAGE_2_SHADER_DEVICE_ADDRESS_BIT_KHR :: BufferUsageFlagBits2KHR
$mBUFFER_USAGE_2_SHADER_DEVICE_ADDRESS_BIT_KHR :: forall {r}.
BufferUsageFlagBits2KHR -> ((# #) -> r) -> ((# #) -> r) -> r
BUFFER_USAGE_2_SHADER_DEVICE_ADDRESS_BIT_KHR = BufferUsageFlagBits2KHR 0x0000000000020000

-- | 'BUFFER_USAGE_2_VIDEO_ENCODE_SRC_BIT_KHR' is reserved for future use.
pattern $bBUFFER_USAGE_2_VIDEO_ENCODE_SRC_BIT_KHR :: BufferUsageFlagBits2KHR
$mBUFFER_USAGE_2_VIDEO_ENCODE_SRC_BIT_KHR :: forall {r}.
BufferUsageFlagBits2KHR -> ((# #) -> r) -> ((# #) -> r) -> r
BUFFER_USAGE_2_VIDEO_ENCODE_SRC_BIT_KHR = BufferUsageFlagBits2KHR 0x0000000000010000

-- | 'BUFFER_USAGE_2_VIDEO_ENCODE_DST_BIT_KHR' specifies that the buffer
-- /can/ be used as the destination video bitstream buffer in a
-- <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#video-encode-operations video encode operation>.
pattern $bBUFFER_USAGE_2_VIDEO_ENCODE_DST_BIT_KHR :: BufferUsageFlagBits2KHR
$mBUFFER_USAGE_2_VIDEO_ENCODE_DST_BIT_KHR :: forall {r}.
BufferUsageFlagBits2KHR -> ((# #) -> r) -> ((# #) -> r) -> r
BUFFER_USAGE_2_VIDEO_ENCODE_DST_BIT_KHR = BufferUsageFlagBits2KHR 0x0000000000008000

-- | 'BUFFER_USAGE_2_VIDEO_DECODE_DST_BIT_KHR' is reserved for future use.
pattern $bBUFFER_USAGE_2_VIDEO_DECODE_DST_BIT_KHR :: BufferUsageFlagBits2KHR
$mBUFFER_USAGE_2_VIDEO_DECODE_DST_BIT_KHR :: forall {r}.
BufferUsageFlagBits2KHR -> ((# #) -> r) -> ((# #) -> r) -> r
BUFFER_USAGE_2_VIDEO_DECODE_DST_BIT_KHR = BufferUsageFlagBits2KHR 0x0000000000004000

-- | 'BUFFER_USAGE_2_VIDEO_DECODE_SRC_BIT_KHR' specifies that the buffer
-- /can/ be used as the source video bitstream buffer in a
-- <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#video-decode-operations video decode operation>.
pattern $bBUFFER_USAGE_2_VIDEO_DECODE_SRC_BIT_KHR :: BufferUsageFlagBits2KHR
$mBUFFER_USAGE_2_VIDEO_DECODE_SRC_BIT_KHR :: forall {r}.
BufferUsageFlagBits2KHR -> ((# #) -> r) -> ((# #) -> r) -> r
BUFFER_USAGE_2_VIDEO_DECODE_SRC_BIT_KHR = BufferUsageFlagBits2KHR 0x0000000000002000

-- | 'BUFFER_USAGE_2_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT' specifies
-- that the buffer is suitable for using as a counter buffer with
-- 'Vulkan.Extensions.VK_EXT_transform_feedback.cmdBeginTransformFeedbackEXT'
-- and
-- 'Vulkan.Extensions.VK_EXT_transform_feedback.cmdEndTransformFeedbackEXT'.
pattern $bBUFFER_USAGE_2_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT :: BufferUsageFlagBits2KHR
$mBUFFER_USAGE_2_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT :: forall {r}.
BufferUsageFlagBits2KHR -> ((# #) -> r) -> ((# #) -> r) -> r
BUFFER_USAGE_2_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT = BufferUsageFlagBits2KHR 0x0000000000001000

-- | 'BUFFER_USAGE_2_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT' specifies that the
-- buffer is suitable for using for binding as a transform feedback buffer
-- with
-- 'Vulkan.Extensions.VK_EXT_transform_feedback.cmdBindTransformFeedbackBuffersEXT'.
pattern $bBUFFER_USAGE_2_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT :: BufferUsageFlagBits2KHR
$mBUFFER_USAGE_2_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT :: forall {r}.
BufferUsageFlagBits2KHR -> ((# #) -> r) -> ((# #) -> r) -> r
BUFFER_USAGE_2_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT = BufferUsageFlagBits2KHR 0x0000000000000800

-- | 'BUFFER_USAGE_2_SHADER_BINDING_TABLE_BIT_KHR' specifies that the buffer
-- is suitable for use as a
-- <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#shader-binding-table Shader Binding Table>.
pattern $bBUFFER_USAGE_2_SHADER_BINDING_TABLE_BIT_KHR :: BufferUsageFlagBits2KHR
$mBUFFER_USAGE_2_SHADER_BINDING_TABLE_BIT_KHR :: forall {r}.
BufferUsageFlagBits2KHR -> ((# #) -> r) -> ((# #) -> r) -> r
BUFFER_USAGE_2_SHADER_BINDING_TABLE_BIT_KHR = BufferUsageFlagBits2KHR 0x0000000000000400

-- | 'BUFFER_USAGE_2_CONDITIONAL_RENDERING_BIT_EXT' specifies that the buffer
-- is suitable for passing as the @buffer@ parameter to
-- 'Vulkan.Extensions.VK_EXT_conditional_rendering.cmdBeginConditionalRenderingEXT'.
pattern $bBUFFER_USAGE_2_CONDITIONAL_RENDERING_BIT_EXT :: BufferUsageFlagBits2KHR
$mBUFFER_USAGE_2_CONDITIONAL_RENDERING_BIT_EXT :: forall {r}.
BufferUsageFlagBits2KHR -> ((# #) -> r) -> ((# #) -> r) -> r
BUFFER_USAGE_2_CONDITIONAL_RENDERING_BIT_EXT = BufferUsageFlagBits2KHR 0x0000000000000200

-- | 'BUFFER_USAGE_2_EXECUTION_GRAPH_SCRATCH_BIT_AMDX' specifies that the
-- buffer /can/ be used for as scratch memory for
-- <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#executiongraphs execution graph dispatch>.
pattern $bBUFFER_USAGE_2_EXECUTION_GRAPH_SCRATCH_BIT_AMDX :: BufferUsageFlagBits2KHR
$mBUFFER_USAGE_2_EXECUTION_GRAPH_SCRATCH_BIT_AMDX :: forall {r}.
BufferUsageFlagBits2KHR -> ((# #) -> r) -> ((# #) -> r) -> r
BUFFER_USAGE_2_EXECUTION_GRAPH_SCRATCH_BIT_AMDX = BufferUsageFlagBits2KHR 0x0000000002000000

conNameBufferUsageFlagBits2KHR :: String
conNameBufferUsageFlagBits2KHR :: String
conNameBufferUsageFlagBits2KHR = String
"BufferUsageFlagBits2KHR"

enumPrefixBufferUsageFlagBits2KHR :: String
enumPrefixBufferUsageFlagBits2KHR :: String
enumPrefixBufferUsageFlagBits2KHR = String
"BUFFER_USAGE_2_"

showTableBufferUsageFlagBits2KHR :: [(BufferUsageFlagBits2KHR, String)]
showTableBufferUsageFlagBits2KHR :: [(BufferUsageFlagBits2KHR, String)]
showTableBufferUsageFlagBits2KHR =
  [
    ( BufferUsageFlagBits2KHR
BUFFER_USAGE_2_TRANSFER_SRC_BIT_KHR
    , String
"TRANSFER_SRC_BIT_KHR"
    )
  ,
    ( BufferUsageFlagBits2KHR
BUFFER_USAGE_2_TRANSFER_DST_BIT_KHR
    , String
"TRANSFER_DST_BIT_KHR"
    )
  ,
    ( BufferUsageFlagBits2KHR
BUFFER_USAGE_2_UNIFORM_TEXEL_BUFFER_BIT_KHR
    , String
"UNIFORM_TEXEL_BUFFER_BIT_KHR"
    )
  ,
    ( BufferUsageFlagBits2KHR
BUFFER_USAGE_2_STORAGE_TEXEL_BUFFER_BIT_KHR
    , String
"STORAGE_TEXEL_BUFFER_BIT_KHR"
    )
  ,
    ( BufferUsageFlagBits2KHR
BUFFER_USAGE_2_UNIFORM_BUFFER_BIT_KHR
    , String
"UNIFORM_BUFFER_BIT_KHR"
    )
  ,
    ( BufferUsageFlagBits2KHR
BUFFER_USAGE_2_STORAGE_BUFFER_BIT_KHR
    , String
"STORAGE_BUFFER_BIT_KHR"
    )
  ,
    ( BufferUsageFlagBits2KHR
BUFFER_USAGE_2_INDEX_BUFFER_BIT_KHR
    , String
"INDEX_BUFFER_BIT_KHR"
    )
  ,
    ( BufferUsageFlagBits2KHR
BUFFER_USAGE_2_VERTEX_BUFFER_BIT_KHR
    , String
"VERTEX_BUFFER_BIT_KHR"
    )
  ,
    ( BufferUsageFlagBits2KHR
BUFFER_USAGE_2_INDIRECT_BUFFER_BIT_KHR
    , String
"INDIRECT_BUFFER_BIT_KHR"
    )
  ,
    ( BufferUsageFlagBits2KHR
BUFFER_USAGE_2_MICROMAP_STORAGE_BIT_EXT
    , String
"MICROMAP_STORAGE_BIT_EXT"
    )
  ,
    ( BufferUsageFlagBits2KHR
BUFFER_USAGE_2_MICROMAP_BUILD_INPUT_READ_ONLY_BIT_EXT
    , String
"MICROMAP_BUILD_INPUT_READ_ONLY_BIT_EXT"
    )
  ,
    ( BufferUsageFlagBits2KHR
BUFFER_USAGE_2_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT
    , String
"PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT"
    )
  ,
    ( BufferUsageFlagBits2KHR
BUFFER_USAGE_2_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT
    , String
"RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT"
    )
  ,
    ( BufferUsageFlagBits2KHR
BUFFER_USAGE_2_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT
    , String
"SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT"
    )
  ,
    ( BufferUsageFlagBits2KHR
BUFFER_USAGE_2_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR
    , String
"ACCELERATION_STRUCTURE_STORAGE_BIT_KHR"
    )
  ,
    ( BufferUsageFlagBits2KHR
BUFFER_USAGE_2_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR
    , String
"ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR"
    )
  ,
    ( BufferUsageFlagBits2KHR
BUFFER_USAGE_2_SHADER_DEVICE_ADDRESS_BIT_KHR
    , String
"SHADER_DEVICE_ADDRESS_BIT_KHR"
    )
  ,
    ( BufferUsageFlagBits2KHR
BUFFER_USAGE_2_VIDEO_ENCODE_SRC_BIT_KHR
    , String
"VIDEO_ENCODE_SRC_BIT_KHR"
    )
  ,
    ( BufferUsageFlagBits2KHR
BUFFER_USAGE_2_VIDEO_ENCODE_DST_BIT_KHR
    , String
"VIDEO_ENCODE_DST_BIT_KHR"
    )
  ,
    ( BufferUsageFlagBits2KHR
BUFFER_USAGE_2_VIDEO_DECODE_DST_BIT_KHR
    , String
"VIDEO_DECODE_DST_BIT_KHR"
    )
  ,
    ( BufferUsageFlagBits2KHR
BUFFER_USAGE_2_VIDEO_DECODE_SRC_BIT_KHR
    , String
"VIDEO_DECODE_SRC_BIT_KHR"
    )
  ,
    ( BufferUsageFlagBits2KHR
BUFFER_USAGE_2_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT
    , String
"TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT"
    )
  ,
    ( BufferUsageFlagBits2KHR
BUFFER_USAGE_2_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT
    , String
"TRANSFORM_FEEDBACK_BUFFER_BIT_EXT"
    )
  ,
    ( BufferUsageFlagBits2KHR
BUFFER_USAGE_2_SHADER_BINDING_TABLE_BIT_KHR
    , String
"SHADER_BINDING_TABLE_BIT_KHR"
    )
  ,
    ( BufferUsageFlagBits2KHR
BUFFER_USAGE_2_CONDITIONAL_RENDERING_BIT_EXT
    , String
"CONDITIONAL_RENDERING_BIT_EXT"
    )
  ,
    ( BufferUsageFlagBits2KHR
BUFFER_USAGE_2_EXECUTION_GRAPH_SCRATCH_BIT_AMDX
    , String
"EXECUTION_GRAPH_SCRATCH_BIT_AMDX"
    )
  ]

instance Show BufferUsageFlagBits2KHR where
  showsPrec :: Int -> BufferUsageFlagBits2KHR -> ShowS
showsPrec =
    String
-> [(BufferUsageFlagBits2KHR, String)]
-> String
-> (BufferUsageFlagBits2KHR -> Flags64)
-> (Flags64 -> ShowS)
-> Int
-> BufferUsageFlagBits2KHR
-> ShowS
forall a i.
Eq a =>
String
-> [(a, String)]
-> String
-> (a -> i)
-> (i -> ShowS)
-> Int
-> a
-> ShowS
enumShowsPrec
      String
enumPrefixBufferUsageFlagBits2KHR
      [(BufferUsageFlagBits2KHR, String)]
showTableBufferUsageFlagBits2KHR
      String
conNameBufferUsageFlagBits2KHR
      (\(BufferUsageFlagBits2KHR Flags64
x) -> Flags64
x)
      (\Flags64
x -> String -> ShowS
showString String
"0x" ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Flags64 -> ShowS
forall a. Integral a => a -> ShowS
showHex Flags64
x)

instance Read BufferUsageFlagBits2KHR where
  readPrec :: ReadPrec BufferUsageFlagBits2KHR
readPrec =
    String
-> [(BufferUsageFlagBits2KHR, String)]
-> String
-> (Flags64 -> BufferUsageFlagBits2KHR)
-> ReadPrec BufferUsageFlagBits2KHR
forall i a.
Read i =>
String -> [(a, String)] -> String -> (i -> a) -> ReadPrec a
enumReadPrec
      String
enumPrefixBufferUsageFlagBits2KHR
      [(BufferUsageFlagBits2KHR, String)]
showTableBufferUsageFlagBits2KHR
      String
conNameBufferUsageFlagBits2KHR
      Flags64 -> BufferUsageFlagBits2KHR
BufferUsageFlagBits2KHR

type AMDX_SHADER_ENQUEUE_SPEC_VERSION = 1

-- No documentation found for TopLevel "VK_AMDX_SHADER_ENQUEUE_SPEC_VERSION"
pattern AMDX_SHADER_ENQUEUE_SPEC_VERSION :: forall a . Integral a => a
pattern $bAMDX_SHADER_ENQUEUE_SPEC_VERSION :: forall a. Integral a => a
$mAMDX_SHADER_ENQUEUE_SPEC_VERSION :: forall {r} {a}.
Integral a =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
AMDX_SHADER_ENQUEUE_SPEC_VERSION = 1


type AMDX_SHADER_ENQUEUE_EXTENSION_NAME = "VK_AMDX_shader_enqueue"

-- No documentation found for TopLevel "VK_AMDX_SHADER_ENQUEUE_EXTENSION_NAME"
pattern AMDX_SHADER_ENQUEUE_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
pattern $bAMDX_SHADER_ENQUEUE_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a
$mAMDX_SHADER_ENQUEUE_EXTENSION_NAME :: forall {r} {a}.
(Eq a, IsString a) =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
AMDX_SHADER_ENQUEUE_EXTENSION_NAME = "VK_AMDX_shader_enqueue"