{-# 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__] -- 2 -- -- [__Ratification Status__] -- Not ratified -- -- [__Extension and Version Dependencies__] -- -- <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_spirv_1_4 VK_KHR_spirv_1_4> -- and -- -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_extended_dynamic_state VK_EXT_extended_dynamic_state> -- or -- -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#versions-1.3 Vulkan Version 1.3> -- and -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_maintenance5 VK_KHR_maintenance5> -- and -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_pipeline_library VK_KHR_pipeline_library> -- -- - __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_EXT_mesh_shader -- -- - 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__] -- 2024-07-17 -- -- [__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 mesh and -- 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 -- 'Vulkan.Extensions.VK_KHR_maintenance5.BufferUsageFlagBits2KHR': -- -- - 'Vulkan.Extensions.VK_KHR_maintenance5.BUFFER_USAGE_2_EXECUTION_GRAPH_SCRATCH_BIT_AMDX' -- -- - Extending -- 'Vulkan.Extensions.VK_KHR_maintenance5.PipelineCreateFlagBits2KHR': -- -- - 'Vulkan.Extensions.VK_KHR_maintenance5.PIPELINE_CREATE_2_EXECUTION_GRAPH_BIT_AMDX' -- -- == Version History -- -- - Revision 2, 2024-07-17 (Tobias Hector) -- -- - Add mesh nodes -- -- - Revision 1, 2021-07-22 (Tobias Hector) -- -- - Initial revision -- -- == See Also -- -- No cross-references are available -- -- == Document Notes -- -- For more information, see the -- <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VK_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(..) , AMDX_SHADER_ENQUEUE_SPEC_VERSION , pattern AMDX_SHADER_ENQUEUE_SPEC_VERSION , AMDX_SHADER_ENQUEUE_EXTENSION_NAME , pattern AMDX_SHADER_ENQUEUE_EXTENSION_NAME , PipelineLibraryCreateInfoKHR(..) , BufferUsageFlagBits2KHR(..) , BufferUsageFlags2KHR , PipelineCreateFlagBits2KHR(..) , PipelineCreateFlags2KHR , SHADER_INDEX_UNUSED_AMDX , pattern SHADER_INDEX_UNUSED_AMDX ) where import Vulkan.CStruct.Utils (FixedArray) 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 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 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 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.Utils (lowerArrayPtr) 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.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_maintenance5 (BufferUsageFlagBits2KHR(..)) import Vulkan.Extensions.VK_KHR_maintenance5 (BufferUsageFlags2KHR) import Vulkan.Extensions.VK_KHR_maintenance5 (PipelineCreateFlagBits2KHR(..)) import Vulkan.Extensions.VK_KHR_maintenance5 (PipelineCreateFlags2KHR) 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 logical device 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 logical device 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> -- -- - #VUID-vkCreateExecutionGraphPipelinesAMDX-pNext-09616# If -- 'Vulkan.Extensions.VK_KHR_pipeline_binary.PipelineBinaryInfoKHR'::@binaryCount@ -- is not @0@ for any element of @pCreateInfos@, @pipelineCache@ /must/ -- be 'Vulkan.Core10.APIConstants.NULL_HANDLE' -- -- - #VUID-vkCreateExecutionGraphPipelinesAMDX-pNext-09617# If a -- 'Vulkan.Extensions.VK_KHR_maintenance5.PipelineCreateFlags2CreateInfoKHR' -- structure with the -- 'Vulkan.Extensions.VK_KHR_maintenance5.PIPELINE_CREATE_2_CAPTURE_DATA_BIT_KHR' -- flag set is included in the @pNext@ chain of any element of -- @pCreateInfos@, @pipelineCache@ /must/ be -- 'Vulkan.Core10.APIConstants.NULL_HANDLE' -- -- - #VUID-vkCreateExecutionGraphPipelinesAMDX-binaryCount-09620# If -- 'Vulkan.Extensions.VK_KHR_pipeline_binary.PipelineBinaryInfoKHR'::@binaryCount@ -- is not @0@ for any element of @pCreateInfos@, -- 'Vulkan.Core13.Enums.PipelineCreationFeedbackFlagBits.PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT' -- /must/ not be set in the @flags@ of that element -- -- - #VUID-vkCreateExecutionGraphPipelinesAMDX-binaryCount-09621# If -- 'Vulkan.Extensions.VK_KHR_pipeline_binary.PipelineBinaryInfoKHR'::@binaryCount@ -- is not @0@ for any element of @pCreateInfos@, -- 'Vulkan.Core13.Enums.PipelineCreationFeedbackFlagBits.PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT' -- /must/ not be set in the @flags@ of that element -- -- - #VUID-vkCreateExecutionGraphPipelinesAMDX-binaryCount-09622# If -- 'Vulkan.Extensions.VK_KHR_pipeline_binary.PipelineBinaryInfoKHR'::@binaryCount@ -- is not @0@ for any element of @pCreateInfos@, -- 'Vulkan.Extensions.VK_EXT_pipeline_creation_cache_control.PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT' -- /must/ not be set in the @flags@ of that element -- -- == 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 -> Pipeline -> DeviceAddress -> DeviceSize -> IO ()) -> Ptr CommandBuffer_T -> Pipeline -> DeviceAddress -> DeviceSize -> IO () -- | vkCmdInitializeGraphScratchMemoryAMDX - Initialize scratch memory for an -- execution graph -- -- = Description -- -- This command /must/ be called before using @scratch@ to dispatch the -- bound execution graph pipeline. -- -- Execution of this command /may/ modify any memory locations in the range -- [@scratch@,@scratch@ + @scratchSize@). 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-10185# @scratch@ -- /must/ be the device address of an allocated memory range at least -- as large as @scratchSize@ -- -- - #VUID-vkCmdInitializeGraphScratchMemoryAMDX-scratchSize-10186# -- @scratchSize@ /must/ be greater than or equal to -- 'ExecutionGraphPipelineScratchSizeAMDX'::@minSize@ returned by -- 'getExecutionGraphPipelineScratchSizeAMDX' for the 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-executionGraph-parameter# -- @executionGraph@ /must/ be a valid 'Vulkan.Core10.Handles.Pipeline' -- 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-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' -- -- - #VUID-vkCmdInitializeGraphScratchMemoryAMDX-commonparent# Both of -- @commandBuffer@, and @executionGraph@ /must/ have been created, -- allocated, or retrieved from the same 'Vulkan.Core10.Handles.Device' -- -- == 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 | Both | 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', -- 'Vulkan.Core10.FundamentalTypes.DeviceSize', -- 'Vulkan.Core10.Handles.Pipeline' cmdInitializeGraphScratchMemoryAMDX :: forall io . (MonadIO io) => -- | @commandBuffer@ is the command buffer into which the command will be -- recorded. CommandBuffer -> -- | @executionGraph@ is the execution graph pipeline to initialize the -- scratch memory for. ("executionGraph" ::: Pipeline) -> -- | @scratch@ is the address of scratch memory to be initialized. ("scratch" ::: DeviceAddress) -> -- | @scratchSize@ is a range in bytes of scratch memory to be initialized. ("scratchSize" ::: DeviceSize) -> io () cmdInitializeGraphScratchMemoryAMDX :: forall (io :: * -> *). MonadIO io => CommandBuffer -> ("executionGraph" ::: Pipeline) -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> io () cmdInitializeGraphScratchMemoryAMDX CommandBuffer commandBuffer "executionGraph" ::: Pipeline executionGraph "scratch" ::: DeviceAddress scratch "scratch" ::: DeviceAddress scratchSize = 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 -> ("executionGraph" ::: Pipeline) -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> IO ()) vkCmdInitializeGraphScratchMemoryAMDXPtr = DeviceCmds -> FunPtr (Ptr CommandBuffer_T -> ("executionGraph" ::: Pipeline) -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> 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 -> ("executionGraph" ::: Pipeline) -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> IO ()) vkCmdInitializeGraphScratchMemoryAMDXPtr FunPtr (Ptr CommandBuffer_T -> ("executionGraph" ::: Pipeline) -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> IO ()) -> FunPtr (Ptr CommandBuffer_T -> ("executionGraph" ::: Pipeline) -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> IO ()) -> Bool forall a. Eq a => a -> a -> Bool /= FunPtr (Ptr CommandBuffer_T -> ("executionGraph" ::: Pipeline) -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> 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 -> ("executionGraph" ::: Pipeline) -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> IO () vkCmdInitializeGraphScratchMemoryAMDX' = FunPtr (Ptr CommandBuffer_T -> ("executionGraph" ::: Pipeline) -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> IO ()) -> Ptr CommandBuffer_T -> ("executionGraph" ::: Pipeline) -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> IO () mkVkCmdInitializeGraphScratchMemoryAMDX FunPtr (Ptr CommandBuffer_T -> ("executionGraph" ::: Pipeline) -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> IO ()) vkCmdInitializeGraphScratchMemoryAMDXPtr String -> IO () -> IO () forall a. String -> IO a -> IO a traceAroundEvent String "vkCmdInitializeGraphScratchMemoryAMDX" (Ptr CommandBuffer_T -> ("executionGraph" ::: Pipeline) -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> IO () vkCmdInitializeGraphScratchMemoryAMDX' (CommandBuffer -> Ptr CommandBuffer_T commandBufferHandle (CommandBuffer commandBuffer)) ("executionGraph" ::: Pipeline executionGraph) ("scratch" ::: DeviceAddress scratch) ("scratch" ::: DeviceAddress scratchSize)) () -> 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 -> DeviceSize -> Ptr DispatchGraphCountInfoAMDX -> IO ()) -> Ptr CommandBuffer_T -> DeviceAddress -> DeviceSize -> 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. -- There are no rasterization order guarantees between separately -- dispatched graphics nodes, though individual primitives within a single -- dispatch do adhere to rasterization order. Draw calls executed before or -- after the execution graph also execute relative to each graphics node -- with respect to rasterization order. -- -- 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@ + @scratchSize@). 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. -- -- This command -- <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#executiongraphs-meshnodes-statecapture captures command buffer state> -- for mesh nodes similarly to draw commands. -- -- == 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', -- @reductionMode@ equal to -- 'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE', -- and @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE' -- is used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of -- this command, then the image view’s -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features> -- /must/ contain -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT' -- -- - #VUID-vkCmdDispatchGraphAMDX-magFilter-09598# If a -- 'Vulkan.Core10.Handles.Sampler' created with @magFilter@ or -- @minFilter@ equal to 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' and -- @reductionMode@ equal to either -- 'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN' -- or -- 'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX' -- is used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of -- this command, then the image view’s -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features> -- /must/ contain -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT' -- -- - #VUID-vkCmdDispatchGraphAMDX-mipmapMode-04770# If a -- 'Vulkan.Core10.Handles.Sampler' created with @mipmapMode@ equal to -- 'Vulkan.Core10.Enums.SamplerMipmapMode.SAMPLER_MIPMAP_MODE_LINEAR', -- @reductionMode@ equal to -- 'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE', -- and @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE' -- is used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of -- this command, then the image view’s -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features> -- /must/ contain -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT' -- -- - #VUID-vkCmdDispatchGraphAMDX-mipmapMode-09599# If a -- 'Vulkan.Core10.Handles.Sampler' created with @mipmapMode@ equal to -- 'Vulkan.Core10.Enums.SamplerMipmapMode.SAMPLER_MIPMAP_MODE_LINEAR' -- and @reductionMode@ equal to either -- 'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN' -- or -- 'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX' -- is used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of -- this command, then the image view’s -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features> -- /must/ contain -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT' -- -- - #VUID-vkCmdDispatchGraphAMDX-unnormalizedCoordinates-09635# If a -- 'Vulkan.Core10.Handles.Sampler' created with -- @unnormalizedCoordinates@ equal to -- 'Vulkan.Core10.FundamentalTypes.TRUE' is used to sample a -- 'Vulkan.Core10.Handles.ImageView' as a result of this command, then -- the image view’s @levelCount@ and @layerCount@ /must/ be 1 -- -- - #VUID-vkCmdDispatchGraphAMDX-unnormalizedCoordinates-09636# If a -- 'Vulkan.Core10.Handles.Sampler' created with -- @unnormalizedCoordinates@ equal to -- 'Vulkan.Core10.FundamentalTypes.TRUE' is used to sample a -- 'Vulkan.Core10.Handles.ImageView' as a result of this command, then -- the image view’s @viewType@ /must/ be -- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D' or -- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D' -- -- - #VUID-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-cubicRangeClamp cubicRangeClamp> -- feature is not enabled, then any 'Vulkan.Core10.Handles.ImageView' -- being sampled with 'Vulkan.Core10.Enums.Filter.FILTER_CUBIC_EXT' as -- a result of this command /must/ not have a -- 'Vulkan.Core12.Promoted_From_VK_EXT_sampler_filter_minmax.SamplerReductionModeCreateInfo'::@reductionMode@ -- equal to -- 'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM' -- -- - #VUID-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-selectableCubicWeights selectableCubicWeights> -- feature is not enabled, then any 'Vulkan.Core10.Handles.ImageView' -- being sampled with 'Vulkan.Core10.Enums.Filter.FILTER_CUBIC_EXT' as -- a result of this command /must/ have -- 'Vulkan.Extensions.VK_QCOM_filter_cubic_weights.SamplerCubicWeightsCreateInfoQCOM'::@cubicWeights@ -- equal to -- 'Vulkan.Extensions.VK_QCOM_filter_cubic_weights.CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM' -- -- - #VUID-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-None-10068# For each array of resources -- that is used by -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding a bound shader>, -- the indices used to access members of the array /must/ be less than -- the descriptor count for the identified binding in the descriptor -- sets used by this command -- -- - #VUID-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 -- specified statically in the 'Vulkan.Core10.Handles.Pipeline' object -- bound to the pipeline bind point used by this command, since that -- pipeline was bound -- -- - #VUID-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> -- feature is enabled, either a valid pipeline /must/ be bound to the -- pipeline bind point used by this command, or a valid combination of -- valid and 'Vulkan.Core10.APIConstants.NULL_HANDLE' shader objects -- /must/ be bound to every supported shader stage corresponding to the -- pipeline bind point used by this command -- -- - #VUID-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#spirvenv-image-dimensions ???> -- -- - #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-None-09600# If a descriptor with type -- equal to any of -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM', -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM', -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE', -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE', -- or -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT' -- is accessed as a result of this command, the image subresource -- identified by that descriptor /must/ be in the image layout -- identified when the descriptor was written -- -- - #VUID-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-10192# @scratch@ /must/ be the -- device address of an allocated memory range at least as large as -- @scratchSize@ -- -- - #VUID-vkCmdDispatchGraphAMDX-scratchSize-10193# @scratchSize@ /must/ -- be greater than or equal to -- 'ExecutionGraphPipelineScratchSizeAMDX'::@minSize@ returned by -- 'getExecutionGraphPipelineScratchSizeAMDX' for the 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 -- 'Vulkan.Extensions.VK_KHR_maintenance5.BUFFER_USAGE_2_EXECUTION_GRAPH_SCRATCH_BIT_AMDX' -- flag -- -- - #VUID-vkCmdDispatchGraphAMDX-scratch-10194# The device memory range -- [@scratch@,@scratch@ -- @scratchSize@] /must/ have been initialized with -- 'cmdInitializeGraphScratchMemoryAMDX' using the 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-None-10195# If the bound execution -- graph pipeline includes draw nodes, this command /must/ be called -- within a render pass instance that is compatible with the graphics -- pipeline used to create each of those nodes -- -- - #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 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-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 | Both | 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', -- 'Vulkan.Core10.FundamentalTypes.DeviceSize', -- 'DispatchGraphCountInfoAMDX' cmdDispatchGraphAMDX :: forall io . (MonadIO io) => -- | @commandBuffer@ is the command buffer into which the command will be -- recorded. CommandBuffer -> -- | @scratch@ is the address of scratch memory to be used. ("scratch" ::: DeviceAddress) -> -- | @scratchSize@ is a range in bytes of scratch memory to be used. ("scratchSize" ::: DeviceSize) -> -- | @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 -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> DispatchGraphCountInfoAMDX -> io () cmdDispatchGraphAMDX CommandBuffer commandBuffer "scratch" ::: DeviceAddress scratch "scratch" ::: DeviceAddress scratchSize 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 -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> Ptr DispatchGraphCountInfoAMDX -> IO ()) vkCmdDispatchGraphAMDXPtr = DeviceCmds -> FunPtr (Ptr CommandBuffer_T -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> 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 -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> Ptr DispatchGraphCountInfoAMDX -> IO ()) vkCmdDispatchGraphAMDXPtr FunPtr (Ptr CommandBuffer_T -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> Ptr DispatchGraphCountInfoAMDX -> IO ()) -> FunPtr (Ptr CommandBuffer_T -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> Ptr DispatchGraphCountInfoAMDX -> IO ()) -> Bool forall a. Eq a => a -> a -> Bool /= FunPtr (Ptr CommandBuffer_T -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> 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 -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> Ptr DispatchGraphCountInfoAMDX -> IO () vkCmdDispatchGraphAMDX' = FunPtr (Ptr CommandBuffer_T -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> Ptr DispatchGraphCountInfoAMDX -> IO ()) -> Ptr CommandBuffer_T -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> Ptr DispatchGraphCountInfoAMDX -> IO () mkVkCmdDispatchGraphAMDX FunPtr (Ptr CommandBuffer_T -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> 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 -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> Ptr DispatchGraphCountInfoAMDX -> IO () vkCmdDispatchGraphAMDX' (CommandBuffer -> Ptr CommandBuffer_T commandBufferHandle (CommandBuffer commandBuffer)) ("scratch" ::: DeviceAddress scratch) ("scratch" ::: DeviceAddress scratchSize) 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 -> DeviceSize -> Ptr DispatchGraphCountInfoAMDX -> IO ()) -> Ptr CommandBuffer_T -> DeviceAddress -> DeviceSize -> 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. -- There are no rasterization order guarantees between separately -- dispatched graphics nodes, though individual primitives within a single -- dispatch do adhere to rasterization order. Draw calls executed before or -- after the execution graph also execute relative to each graphics node -- with respect to rasterization order. -- -- 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@ + @scratchSize@). 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. -- -- This command -- <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#executiongraphs-meshnodes-statecapture captures command buffer state> -- for mesh nodes similarly to draw commands. -- -- == 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', -- @reductionMode@ equal to -- 'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE', -- and @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE' -- is used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of -- this command, then the image view’s -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features> -- /must/ contain -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT' -- -- - #VUID-vkCmdDispatchGraphIndirectAMDX-magFilter-09598# If a -- 'Vulkan.Core10.Handles.Sampler' created with @magFilter@ or -- @minFilter@ equal to 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' and -- @reductionMode@ equal to either -- 'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN' -- or -- 'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX' -- is used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of -- this command, then the image view’s -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features> -- /must/ contain -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT' -- -- - #VUID-vkCmdDispatchGraphIndirectAMDX-mipmapMode-04770# If a -- 'Vulkan.Core10.Handles.Sampler' created with @mipmapMode@ equal to -- 'Vulkan.Core10.Enums.SamplerMipmapMode.SAMPLER_MIPMAP_MODE_LINEAR', -- @reductionMode@ equal to -- 'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE', -- and @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE' -- is used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of -- this command, then the image view’s -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features> -- /must/ contain -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT' -- -- - #VUID-vkCmdDispatchGraphIndirectAMDX-mipmapMode-09599# If a -- 'Vulkan.Core10.Handles.Sampler' created with @mipmapMode@ equal to -- 'Vulkan.Core10.Enums.SamplerMipmapMode.SAMPLER_MIPMAP_MODE_LINEAR' -- and @reductionMode@ equal to either -- 'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN' -- or -- 'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX' -- is used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of -- this command, then the image view’s -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features> -- /must/ contain -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT' -- -- - #VUID-vkCmdDispatchGraphIndirectAMDX-unnormalizedCoordinates-09635# -- If a 'Vulkan.Core10.Handles.Sampler' created with -- @unnormalizedCoordinates@ equal to -- 'Vulkan.Core10.FundamentalTypes.TRUE' is used to sample a -- 'Vulkan.Core10.Handles.ImageView' as a result of this command, then -- the image view’s @levelCount@ and @layerCount@ /must/ be 1 -- -- - #VUID-vkCmdDispatchGraphIndirectAMDX-unnormalizedCoordinates-09636# -- If a 'Vulkan.Core10.Handles.Sampler' created with -- @unnormalizedCoordinates@ equal to -- 'Vulkan.Core10.FundamentalTypes.TRUE' is used to sample a -- 'Vulkan.Core10.Handles.ImageView' as a result of this command, then -- the image view’s @viewType@ /must/ be -- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D' or -- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D' -- -- - #VUID-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-cubicRangeClamp cubicRangeClamp> -- feature is not enabled, then any 'Vulkan.Core10.Handles.ImageView' -- being sampled with 'Vulkan.Core10.Enums.Filter.FILTER_CUBIC_EXT' as -- a result of this command /must/ not have a -- 'Vulkan.Core12.Promoted_From_VK_EXT_sampler_filter_minmax.SamplerReductionModeCreateInfo'::@reductionMode@ -- equal to -- 'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM' -- -- - #VUID-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-selectableCubicWeights selectableCubicWeights> -- feature is not enabled, then any 'Vulkan.Core10.Handles.ImageView' -- being sampled with 'Vulkan.Core10.Enums.Filter.FILTER_CUBIC_EXT' as -- a result of this command /must/ have -- 'Vulkan.Extensions.VK_QCOM_filter_cubic_weights.SamplerCubicWeightsCreateInfoQCOM'::@cubicWeights@ -- equal to -- 'Vulkan.Extensions.VK_QCOM_filter_cubic_weights.CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM' -- -- - #VUID-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-None-10068# For each array of -- resources that is used by -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding a bound shader>, -- the indices used to access members of the array /must/ be less than -- the descriptor count for the identified binding in the descriptor -- sets used by this command -- -- - #VUID-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 specified statically in the 'Vulkan.Core10.Handles.Pipeline' -- object bound to the pipeline bind point used by this command, since -- that pipeline was bound -- -- - #VUID-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> -- feature is enabled, either a valid pipeline /must/ be bound to the -- pipeline bind point used by this command, or a valid combination of -- valid and 'Vulkan.Core10.APIConstants.NULL_HANDLE' shader objects -- /must/ be bound to every supported shader stage corresponding to the -- pipeline bind point used by this command -- -- - #VUID-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#spirvenv-image-dimensions ???> -- -- - #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-None-09600# If a descriptor -- with type equal to any of -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM', -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM', -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE', -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE', -- or -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT' -- is accessed as a result of this command, the image subresource -- identified by that descriptor /must/ be in the image layout -- identified when the descriptor was written -- -- - #VUID-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-10192# @scratch@ /must/ -- be the device address of an allocated memory range at least as large -- as @scratchSize@ -- -- - #VUID-vkCmdDispatchGraphIndirectAMDX-scratchSize-10193# -- @scratchSize@ /must/ be greater than or equal to -- 'ExecutionGraphPipelineScratchSizeAMDX'::@minSize@ returned by -- 'getExecutionGraphPipelineScratchSizeAMDX' for the 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 -- 'Vulkan.Extensions.VK_KHR_maintenance5.BUFFER_USAGE_2_EXECUTION_GRAPH_SCRATCH_BIT_AMDX' -- flag -- -- - #VUID-vkCmdDispatchGraphIndirectAMDX-scratch-10194# The device -- memory range [@scratch@,@scratch@ -- @scratchSize@] /must/ have been initialized with -- 'cmdInitializeGraphScratchMemoryAMDX' using the 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-None-10195# If the bound -- execution graph pipeline includes draw nodes, this command /must/ be -- called within a render pass instance that is compatible with the -- graphics pipeline used to create each of those nodes -- -- - #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 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-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 | Both | 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', -- 'Vulkan.Core10.FundamentalTypes.DeviceSize', -- 'DispatchGraphCountInfoAMDX' cmdDispatchGraphIndirectAMDX :: forall io . (MonadIO io) => -- | @commandBuffer@ is the command buffer into which the command will be -- recorded. CommandBuffer -> -- | @scratch@ is the address of scratch memory to be used. ("scratch" ::: DeviceAddress) -> -- | @scratchSize@ is a range in bytes of scratch memory to be used. ("scratchSize" ::: DeviceSize) -> -- | @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 -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> DispatchGraphCountInfoAMDX -> io () cmdDispatchGraphIndirectAMDX CommandBuffer commandBuffer "scratch" ::: DeviceAddress scratch "scratch" ::: DeviceAddress scratchSize 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 -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> Ptr DispatchGraphCountInfoAMDX -> IO ()) vkCmdDispatchGraphIndirectAMDXPtr = DeviceCmds -> FunPtr (Ptr CommandBuffer_T -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> 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 -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> Ptr DispatchGraphCountInfoAMDX -> IO ()) vkCmdDispatchGraphIndirectAMDXPtr FunPtr (Ptr CommandBuffer_T -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> Ptr DispatchGraphCountInfoAMDX -> IO ()) -> FunPtr (Ptr CommandBuffer_T -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> Ptr DispatchGraphCountInfoAMDX -> IO ()) -> Bool forall a. Eq a => a -> a -> Bool /= FunPtr (Ptr CommandBuffer_T -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> 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 -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> Ptr DispatchGraphCountInfoAMDX -> IO () vkCmdDispatchGraphIndirectAMDX' = FunPtr (Ptr CommandBuffer_T -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> Ptr DispatchGraphCountInfoAMDX -> IO ()) -> Ptr CommandBuffer_T -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> Ptr DispatchGraphCountInfoAMDX -> IO () mkVkCmdDispatchGraphIndirectAMDX FunPtr (Ptr CommandBuffer_T -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> 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 -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> Ptr DispatchGraphCountInfoAMDX -> IO () vkCmdDispatchGraphIndirectAMDX' (CommandBuffer -> Ptr CommandBuffer_T commandBufferHandle (CommandBuffer commandBuffer)) ("scratch" ::: DeviceAddress scratch) ("scratch" ::: DeviceAddress scratchSize) 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 -> DeviceSize -> DeviceAddress -> IO ()) -> Ptr CommandBuffer_T -> DeviceAddress -> DeviceSize -> 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@ + @scratchSize@). 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', -- @reductionMode@ equal to -- 'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE', -- and @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE' -- is used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of -- this command, then the image view’s -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features> -- /must/ contain -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT' -- -- - #VUID-vkCmdDispatchGraphIndirectCountAMDX-magFilter-09598# If a -- 'Vulkan.Core10.Handles.Sampler' created with @magFilter@ or -- @minFilter@ equal to 'Vulkan.Core10.Enums.Filter.FILTER_LINEAR' and -- @reductionMode@ equal to either -- 'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN' -- or -- 'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX' -- is used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of -- this command, then the image view’s -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features> -- /must/ contain -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT' -- -- - #VUID-vkCmdDispatchGraphIndirectCountAMDX-mipmapMode-04770# If a -- 'Vulkan.Core10.Handles.Sampler' created with @mipmapMode@ equal to -- 'Vulkan.Core10.Enums.SamplerMipmapMode.SAMPLER_MIPMAP_MODE_LINEAR', -- @reductionMode@ equal to -- 'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE', -- and @compareEnable@ equal to 'Vulkan.Core10.FundamentalTypes.FALSE' -- is used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of -- this command, then the image view’s -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features> -- /must/ contain -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT' -- -- - #VUID-vkCmdDispatchGraphIndirectCountAMDX-mipmapMode-09599# If a -- 'Vulkan.Core10.Handles.Sampler' created with @mipmapMode@ equal to -- 'Vulkan.Core10.Enums.SamplerMipmapMode.SAMPLER_MIPMAP_MODE_LINEAR' -- and @reductionMode@ equal to either -- 'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MIN' -- or -- 'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_MAX' -- is used to sample a 'Vulkan.Core10.Handles.ImageView' as a result of -- this command, then the image view’s -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-view-format-features format features> -- /must/ contain -- 'Vulkan.Core10.Enums.FormatFeatureFlagBits.FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT' -- -- - #VUID-vkCmdDispatchGraphIndirectCountAMDX-unnormalizedCoordinates-09635# -- If a 'Vulkan.Core10.Handles.Sampler' created with -- @unnormalizedCoordinates@ equal to -- 'Vulkan.Core10.FundamentalTypes.TRUE' is used to sample a -- 'Vulkan.Core10.Handles.ImageView' as a result of this command, then -- the image view’s @levelCount@ and @layerCount@ /must/ be 1 -- -- - #VUID-vkCmdDispatchGraphIndirectCountAMDX-unnormalizedCoordinates-09636# -- If a 'Vulkan.Core10.Handles.Sampler' created with -- @unnormalizedCoordinates@ equal to -- 'Vulkan.Core10.FundamentalTypes.TRUE' is used to sample a -- 'Vulkan.Core10.Handles.ImageView' as a result of this command, then -- the image view’s @viewType@ /must/ be -- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_1D' or -- 'Vulkan.Core10.Enums.ImageViewType.IMAGE_VIEW_TYPE_2D' -- -- - #VUID-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-cubicRangeClamp cubicRangeClamp> -- feature is not enabled, then any 'Vulkan.Core10.Handles.ImageView' -- being sampled with 'Vulkan.Core10.Enums.Filter.FILTER_CUBIC_EXT' as -- a result of this command /must/ not have a -- 'Vulkan.Core12.Promoted_From_VK_EXT_sampler_filter_minmax.SamplerReductionModeCreateInfo'::@reductionMode@ -- equal to -- 'Vulkan.Core12.Enums.SamplerReductionMode.SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM' -- -- - #VUID-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-selectableCubicWeights selectableCubicWeights> -- feature is not enabled, then any 'Vulkan.Core10.Handles.ImageView' -- being sampled with 'Vulkan.Core10.Enums.Filter.FILTER_CUBIC_EXT' as -- a result of this command /must/ have -- 'Vulkan.Extensions.VK_QCOM_filter_cubic_weights.SamplerCubicWeightsCreateInfoQCOM'::@cubicWeights@ -- equal to -- 'Vulkan.Extensions.VK_QCOM_filter_cubic_weights.CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM' -- -- - #VUID-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-None-10068# For each array -- of resources that is used by -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding a bound shader>, -- the indices used to access members of the array /must/ be less than -- the descriptor count for the identified binding in the descriptor -- sets used by this command -- -- - #VUID-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 specified statically in the -- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind -- point used by this command, since that pipeline was bound -- -- - #VUID-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> -- feature is enabled, either a valid pipeline /must/ be bound to the -- pipeline bind point used by this command, or a valid combination of -- valid and 'Vulkan.Core10.APIConstants.NULL_HANDLE' shader objects -- /must/ be bound to every supported shader stage corresponding to the -- pipeline bind point used by this command -- -- - #VUID-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#spirvenv-image-dimensions ???> -- -- - #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-None-09600# If a -- descriptor with type equal to any of -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM', -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM', -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE', -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE', -- or -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INPUT_ATTACHMENT' -- is accessed as a result of this command, the image subresource -- identified by that descriptor /must/ be in the image layout -- identified when the descriptor was written -- -- - #VUID-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-10192# @scratch@ -- /must/ be the device address of an allocated memory range at least -- as large as @scratchSize@ -- -- - #VUID-vkCmdDispatchGraphIndirectCountAMDX-scratchSize-10193# -- @scratchSize@ /must/ be greater than or equal to -- 'ExecutionGraphPipelineScratchSizeAMDX'::@minSize@ returned by -- 'getExecutionGraphPipelineScratchSizeAMDX' for the 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 -- 'Vulkan.Extensions.VK_KHR_maintenance5.BUFFER_USAGE_2_EXECUTION_GRAPH_SCRATCH_BIT_AMDX' -- flag -- -- - #VUID-vkCmdDispatchGraphIndirectCountAMDX-scratch-10194# The device -- memory range [@scratch@,@scratch@ -- @scratchSize@] /must/ have been initialized with -- 'cmdInitializeGraphScratchMemoryAMDX' using the 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-None-10195# If the bound -- execution graph pipeline includes draw nodes, this command /must/ be -- called within a render pass instance that is compatible with the -- graphics pipeline used to create each of those nodes -- -- - #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 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-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 | Both | 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', -- 'Vulkan.Core10.FundamentalTypes.DeviceSize' cmdDispatchGraphIndirectCountAMDX :: forall io . (MonadIO io) => -- | @commandBuffer@ is the command buffer into which the command will be -- recorded. CommandBuffer -> -- | @scratch@ is the address of scratch memory to be used. ("scratch" ::: DeviceAddress) -> -- | @scratchSize@ is a range in bytes of scratch memory to be used. ("scratchSize" ::: DeviceSize) -> -- | @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 -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> io () cmdDispatchGraphIndirectCountAMDX CommandBuffer commandBuffer "scratch" ::: DeviceAddress scratch "scratch" ::: DeviceAddress scratchSize "scratch" ::: DeviceAddress 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 -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> IO ()) vkCmdDispatchGraphIndirectCountAMDXPtr = DeviceCmds -> FunPtr (Ptr CommandBuffer_T -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> 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 -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> IO ()) vkCmdDispatchGraphIndirectCountAMDXPtr FunPtr (Ptr CommandBuffer_T -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> IO ()) -> FunPtr (Ptr CommandBuffer_T -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> IO ()) -> Bool forall a. Eq a => a -> a -> Bool /= FunPtr (Ptr CommandBuffer_T -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> 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 -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> IO () vkCmdDispatchGraphIndirectCountAMDX' = FunPtr (Ptr CommandBuffer_T -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> IO ()) -> Ptr CommandBuffer_T -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> IO () mkVkCmdDispatchGraphIndirectCountAMDX FunPtr (Ptr CommandBuffer_T -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> IO ()) vkCmdDispatchGraphIndirectCountAMDXPtr String -> IO () -> IO () forall a. String -> IO a -> IO a traceAroundEvent String "vkCmdDispatchGraphIndirectCountAMDX" (Ptr CommandBuffer_T -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> IO () vkCmdDispatchGraphIndirectCountAMDX' (CommandBuffer -> Ptr CommandBuffer_T commandBufferHandle (CommandBuffer commandBuffer)) ("scratch" ::: DeviceAddress scratch) ("scratch" ::: DeviceAddress scratchSize) ("scratch" ::: DeviceAddress 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 , -- | #limits-maxExecutionGraphWorkgroupCount# -- @maxExecutionGraphWorkgroupCount@[3] is the maximum number of local -- workgroups that a shader /can/ be dispatched with in X, Y, and Z -- dimensions, respectively. PhysicalDeviceShaderEnqueuePropertiesAMDX -> ("nodeIndex" ::: Word32, "nodeIndex" ::: Word32, "nodeIndex" ::: Word32) maxExecutionGraphWorkgroupCount :: (Word32, Word32, Word32) , -- | #limits-maxExecutionGraphWorkgroups# @maxExecutionGraphWorkgroups@ is -- the total number of local workgroups that a shader /can/ be dispatched -- with. PhysicalDeviceShaderEnqueuePropertiesAMDX -> "nodeIndex" ::: Word32 maxExecutionGraphWorkgroups :: 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 56 ((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 ("nodeIndex" ::: Word32, "nodeIndex" ::: Word32, "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 $sel:maxExecutionGraphWorkgroupCount:PhysicalDeviceShaderEnqueuePropertiesAMDX :: PhysicalDeviceShaderEnqueuePropertiesAMDX -> ("nodeIndex" ::: Word32, "nodeIndex" ::: Word32, "nodeIndex" ::: Word32) $sel:maxExecutionGraphWorkgroups:PhysicalDeviceShaderEnqueuePropertiesAMDX :: PhysicalDeviceShaderEnqueuePropertiesAMDX -> "nodeIndex" ::: Word32 maxExecutionGraphDepth :: "nodeIndex" ::: Word32 maxExecutionGraphShaderOutputNodes :: "nodeIndex" ::: Word32 maxExecutionGraphShaderPayloadSize :: "nodeIndex" ::: Word32 maxExecutionGraphShaderPayloadCount :: "nodeIndex" ::: Word32 executionGraphDispatchAddressAlignment :: "nodeIndex" ::: Word32 maxExecutionGraphWorkgroupCount :: ("nodeIndex" ::: Word32, "nodeIndex" ::: Word32, "nodeIndex" ::: Word32) maxExecutionGraphWorkgroups :: "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) let pMaxExecutionGraphWorkgroupCount' :: Ptr ("nodeIndex" ::: Word32) pMaxExecutionGraphWorkgroupCount' = Ptr (FixedArray 3 ("nodeIndex" ::: Word32)) -> Ptr ("nodeIndex" ::: Word32) forall a (n :: Nat). Ptr (FixedArray n a) -> Ptr a lowerArrayPtr ((Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX p Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX -> Int -> Ptr (FixedArray 3 ("nodeIndex" ::: Word32)) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 36 :: Ptr (FixedArray 3 Word32))) case (("nodeIndex" ::: Word32, "nodeIndex" ::: Word32, "nodeIndex" ::: Word32) maxExecutionGraphWorkgroupCount) of ("nodeIndex" ::: Word32 e0, "nodeIndex" ::: Word32 e1, "nodeIndex" ::: Word32 e2) -> do Ptr ("nodeIndex" ::: Word32) -> ("nodeIndex" ::: Word32) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke (Ptr ("nodeIndex" ::: Word32) pMaxExecutionGraphWorkgroupCount' :: Ptr Word32) ("nodeIndex" ::: Word32 e0) Ptr ("nodeIndex" ::: Word32) -> ("nodeIndex" ::: Word32) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke (Ptr ("nodeIndex" ::: Word32) pMaxExecutionGraphWorkgroupCount' Ptr ("nodeIndex" ::: Word32) -> Int -> Ptr ("nodeIndex" ::: Word32) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 4 :: Ptr Word32) ("nodeIndex" ::: Word32 e1) Ptr ("nodeIndex" ::: Word32) -> ("nodeIndex" ::: Word32) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke (Ptr ("nodeIndex" ::: Word32) pMaxExecutionGraphWorkgroupCount' Ptr ("nodeIndex" ::: Word32) -> Int -> Ptr ("nodeIndex" ::: Word32) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 8 :: Ptr Word32) ("nodeIndex" ::: Word32 e2) 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 48 :: Ptr Word32)) ("nodeIndex" ::: Word32 maxExecutionGraphWorkgroups) IO b f cStructSize :: Int cStructSize = Int 56 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) let pMaxExecutionGraphWorkgroupCount' :: Ptr ("nodeIndex" ::: Word32) pMaxExecutionGraphWorkgroupCount' = Ptr (FixedArray 3 ("nodeIndex" ::: Word32)) -> Ptr ("nodeIndex" ::: Word32) forall a (n :: Nat). Ptr (FixedArray n a) -> Ptr a lowerArrayPtr ((Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX p Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX -> Int -> Ptr (FixedArray 3 ("nodeIndex" ::: Word32)) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 36 :: Ptr (FixedArray 3 Word32))) case (("nodeIndex" ::: Word32 forall a. Zero a => a zero, "nodeIndex" ::: Word32 forall a. Zero a => a zero, "nodeIndex" ::: Word32 forall a. Zero a => a zero)) of ("nodeIndex" ::: Word32 e0, "nodeIndex" ::: Word32 e1, "nodeIndex" ::: Word32 e2) -> do Ptr ("nodeIndex" ::: Word32) -> ("nodeIndex" ::: Word32) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke (Ptr ("nodeIndex" ::: Word32) pMaxExecutionGraphWorkgroupCount' :: Ptr Word32) ("nodeIndex" ::: Word32 e0) Ptr ("nodeIndex" ::: Word32) -> ("nodeIndex" ::: Word32) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke (Ptr ("nodeIndex" ::: Word32) pMaxExecutionGraphWorkgroupCount' Ptr ("nodeIndex" ::: Word32) -> Int -> Ptr ("nodeIndex" ::: Word32) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 4 :: Ptr Word32) ("nodeIndex" ::: Word32 e1) Ptr ("nodeIndex" ::: Word32) -> ("nodeIndex" ::: Word32) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke (Ptr ("nodeIndex" ::: Word32) pMaxExecutionGraphWorkgroupCount' Ptr ("nodeIndex" ::: Word32) -> Int -> Ptr ("nodeIndex" ::: Word32) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 8 :: Ptr Word32) ("nodeIndex" ::: Word32 e2) 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 48 :: 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)) let pmaxExecutionGraphWorkgroupCount :: Ptr ("nodeIndex" ::: Word32) pmaxExecutionGraphWorkgroupCount = forall a (n :: Nat). Ptr (FixedArray n a) -> Ptr a lowerArrayPtr @Word32 ((Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX p Ptr PhysicalDeviceShaderEnqueuePropertiesAMDX -> Int -> Ptr (FixedArray 3 ("nodeIndex" ::: Word32)) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 36 :: Ptr (FixedArray 3 Word32))) "nodeIndex" ::: Word32 maxExecutionGraphWorkgroupCount0 <- forall a. Storable a => Ptr a -> IO a peek @Word32 ((Ptr ("nodeIndex" ::: Word32) pmaxExecutionGraphWorkgroupCount Ptr ("nodeIndex" ::: Word32) -> Int -> Ptr ("nodeIndex" ::: Word32) forall a. Ptr a -> Int -> Ptr a `advancePtrBytes` Int 0 :: Ptr Word32)) "nodeIndex" ::: Word32 maxExecutionGraphWorkgroupCount1 <- forall a. Storable a => Ptr a -> IO a peek @Word32 ((Ptr ("nodeIndex" ::: Word32) pmaxExecutionGraphWorkgroupCount Ptr ("nodeIndex" ::: Word32) -> Int -> Ptr ("nodeIndex" ::: Word32) forall a. Ptr a -> Int -> Ptr a `advancePtrBytes` Int 4 :: Ptr Word32)) "nodeIndex" ::: Word32 maxExecutionGraphWorkgroupCount2 <- forall a. Storable a => Ptr a -> IO a peek @Word32 ((Ptr ("nodeIndex" ::: Word32) pmaxExecutionGraphWorkgroupCount Ptr ("nodeIndex" ::: Word32) -> Int -> Ptr ("nodeIndex" ::: Word32) forall a. Ptr a -> Int -> Ptr a `advancePtrBytes` Int 8 :: Ptr Word32)) "nodeIndex" ::: Word32 maxExecutionGraphWorkgroups <- 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 48 :: 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) -> ("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 (( "nodeIndex" ::: Word32 maxExecutionGraphWorkgroupCount0 , "nodeIndex" ::: Word32 maxExecutionGraphWorkgroupCount1 , "nodeIndex" ::: Word32 maxExecutionGraphWorkgroupCount2 )) "nodeIndex" ::: Word32 maxExecutionGraphWorkgroups instance Storable PhysicalDeviceShaderEnqueuePropertiesAMDX where sizeOf :: PhysicalDeviceShaderEnqueuePropertiesAMDX -> Int sizeOf ~PhysicalDeviceShaderEnqueuePropertiesAMDX _ = Int 56 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) -> ("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 ("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 , -- | #features-shaderMeshEnqueue# @shaderMeshEnqueue@ indicates whether the -- implementation supports -- <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#executiongraphs-meshnodes mesh nodes in execution graphs>. PhysicalDeviceShaderEnqueueFeaturesAMDX -> Bool shaderMeshEnqueue :: 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 $sel:shaderMeshEnqueue:PhysicalDeviceShaderEnqueueFeaturesAMDX :: PhysicalDeviceShaderEnqueueFeaturesAMDX -> Bool shaderEnqueue :: Bool shaderMeshEnqueue :: 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)) 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 20 :: Ptr Bool32)) (Bool -> Bool32 boolToBool32 (Bool shaderMeshEnqueue)) 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)) 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 20 :: 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)) Bool32 shaderMeshEnqueue <- 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 20 :: 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 -> Bool -> PhysicalDeviceShaderEnqueueFeaturesAMDX PhysicalDeviceShaderEnqueueFeaturesAMDX (Bool32 -> Bool bool32ToBool Bool32 shaderEnqueue) (Bool32 -> Bool bool32ToBool Bool32 shaderMeshEnqueue) 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 -> Bool -> PhysicalDeviceShaderEnqueueFeaturesAMDX PhysicalDeviceShaderEnqueueFeaturesAMDX Bool forall a. Zero a => a zero 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. -- For any graphics pipeline libraries, only the name and index of the -- vertex or mesh shader stage is linked directly to the graph as a node - -- other shader stages in the pipeline will be executed after those shader -- stages as normal. Task shaders cannot be included in a graphics pipeline -- used for a draw node. -- -- 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-None-09497# If the -- @pNext@ chain does not include a -- 'Vulkan.Extensions.VK_KHR_maintenance5.PipelineCreateFlags2CreateInfoKHR' -- structure, @flags@ /must/ be a valid combination of -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PipelineCreateFlagBits' -- values -- -- - #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 the shader stage -- -- - #VUID-VkExecutionGraphPipelineCreateInfoAMDX-layout-10069# If a push -- constant block is declared in a shader, the block must be contained -- inside the push constant range in @layout@ that matches the stage -- -- - #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> -- feature 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-flags-11007# If @flags@ -- includes -- 'Vulkan.Extensions.VK_KHR_maintenance5.PIPELINE_CREATE_2_INDIRECT_BINDABLE_BIT_EXT', -- then the -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-deviceGeneratedCommands ::deviceGeneratedCommands> -- feature /must/ be enabled -- -- - #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->pLibraries@ /must/ be either a compute pipeline, an -- execution graph pipeline, or a graphics pipeline -- -- - #VUID-VkExecutionGraphPipelineCreateInfoAMDX-pLibraryInfo-10181# If -- @pLibraryInfo@ is not @NULL@, each element of -- @pLibraryInfo->pLibraries@ that is a compute pipeline or a graphics -- pipeline /must/ have been created with -- 'Vulkan.Extensions.VK_KHR_maintenance5.PIPELINE_CREATE_2_EXECUTION_GRAPH_BIT_AMDX' -- set -- -- - #VUID-VkExecutionGraphPipelineCreateInfoAMDX-shaderMeshEnqueue-10182# -- If the -- <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#features-shaderMeshEnqueue shaderMeshEnqueue> -- feature is not enabled, and @pLibraryInfo->pLibraries@ is not -- @NULL@, @pLibraryInfo->pLibraries@ /must/ not contain any graphics -- pipelines -- -- - #VUID-VkExecutionGraphPipelineCreateInfoAMDX-pLibraryInfo-10183# Any -- element of @pLibraryInfo->pLibraries@ identifying a graphics -- pipeline /must/ have been created with -- <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#pipelines-graphics-subsets-complete all possible state subsets> -- -- - #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 -- -- - #VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-10184# If @flags@ -- does not include -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_LIBRARY_BIT_KHR', -- and an output payload declared in any shader in the pipeline does -- not have a @PayloadNodeSparseArrayAMDX@ decoration, there /must/ be -- a node in the graph corresponding to every index from 0 to its -- @PayloadNodeArraySizeAMDX@ decoration -- -- == 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-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 PipelineLayout "executionGraph" ::: Pipeline 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 PipelineLayout "executionGraph" ::: Pipeline $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 PipelineLayout "executionGraph" ::: Pipeline 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 PipelineLayout "executionGraph" ::: Pipeline 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. -- -- Shaders with the same name /must/ be of the same type - e.g. a compute -- and graphics shader, or even two compute shaders where one is coalescing -- and the other is not, cannot share the same name. -- -- == 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 -- -- = Description -- -- Applications /can/ use any amount of scratch memory greater than -- @minSize@ for dispatching a graph, however only the values equal to -- @minSize@ + an integer multiple of @sizeGranularity@ will be used. -- Greater values /may/ result in higher performance, up to @maxSize@ which -- indicates the most memory that an implementation can use effectively. -- -- == 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 { -- | @minSize@ indicates the minimum scratch space required for dispatching -- the queried execution graph. ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX) -> "scratch" ::: DeviceAddress minSize :: DeviceSize , -- | @maxSize@ indicates the maximum scratch space that can be used for -- dispatching the queried execution graph. ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX) -> "scratch" ::: DeviceAddress maxSize :: DeviceSize , -- | @sizeGranularity@ indicates the granularity at which the scratch space -- can be increased from @minSize@. ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX) -> "scratch" ::: DeviceAddress sizeGranularity :: 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 40 ((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{"scratch" ::: DeviceAddress $sel:minSize:ExecutionGraphPipelineScratchSizeAMDX :: ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX) -> "scratch" ::: DeviceAddress $sel:maxSize:ExecutionGraphPipelineScratchSizeAMDX :: ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX) -> "scratch" ::: DeviceAddress $sel:sizeGranularity:ExecutionGraphPipelineScratchSizeAMDX :: ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX) -> "scratch" ::: DeviceAddress minSize :: "scratch" ::: DeviceAddress maxSize :: "scratch" ::: DeviceAddress sizeGranularity :: "scratch" ::: DeviceAddress ..} 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 ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX) p Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX) -> Int -> Ptr ("scratch" ::: DeviceAddress) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 16 :: Ptr DeviceSize)) ("scratch" ::: DeviceAddress minSize) Ptr ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX) p Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX) -> Int -> Ptr ("scratch" ::: DeviceAddress) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 24 :: Ptr DeviceSize)) ("scratch" ::: DeviceAddress maxSize) Ptr ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX) p Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX) -> Int -> Ptr ("scratch" ::: DeviceAddress) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 32 :: Ptr DeviceSize)) ("scratch" ::: DeviceAddress sizeGranularity) IO b f cStructSize :: Int cStructSize = Int 40 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 ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX) p Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX) -> Int -> Ptr ("scratch" ::: DeviceAddress) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 16 :: Ptr DeviceSize)) ("scratch" ::: DeviceAddress forall a. Zero a => a zero) Ptr ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX) p Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX) -> Int -> Ptr ("scratch" ::: DeviceAddress) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 24 :: Ptr DeviceSize)) ("scratch" ::: DeviceAddress forall a. Zero a => a zero) Ptr ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX) p Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX) -> Int -> Ptr ("scratch" ::: DeviceAddress) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 32 :: Ptr DeviceSize)) ("scratch" ::: DeviceAddress 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 "scratch" ::: DeviceAddress minSize <- forall a. Storable a => Ptr a -> IO a peek @DeviceSize ((Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX) p Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX) -> Int -> Ptr ("scratch" ::: DeviceAddress) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 16 :: Ptr DeviceSize)) "scratch" ::: DeviceAddress maxSize <- forall a. Storable a => Ptr a -> IO a peek @DeviceSize ((Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX) p Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX) -> Int -> Ptr ("scratch" ::: DeviceAddress) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 24 :: Ptr DeviceSize)) "scratch" ::: DeviceAddress sizeGranularity <- forall a. Storable a => Ptr a -> IO a peek @DeviceSize ((Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX) p Ptr ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX) -> Int -> Ptr ("scratch" ::: DeviceAddress) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 32 :: 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 $ ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> "sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX ExecutionGraphPipelineScratchSizeAMDX "scratch" ::: DeviceAddress minSize "scratch" ::: DeviceAddress maxSize "scratch" ::: DeviceAddress sizeGranularity instance Storable ExecutionGraphPipelineScratchSizeAMDX where sizeOf :: ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX) -> Int sizeOf ~"sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX _ = Int 40 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 = ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> "sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX ExecutionGraphPipelineScratchSizeAMDX "scratch" ::: DeviceAddress forall a. Zero a => a zero "scratch" ::: DeviceAddress forall a. Zero a => a zero "scratch" ::: DeviceAddress 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 -> "scratch" ::: DeviceAddress 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 "scratch" ::: DeviceAddress DeviceOrHostAddressConstAMDX $sel:nodeIndex:DispatchGraphInfoAMDX :: DispatchGraphInfoAMDX -> "nodeIndex" ::: Word32 $sel:payloadCount:DispatchGraphInfoAMDX :: DispatchGraphInfoAMDX -> "nodeIndex" ::: Word32 $sel:payloads:DispatchGraphInfoAMDX :: DispatchGraphInfoAMDX -> DeviceOrHostAddressConstAMDX $sel:payloadStride:DispatchGraphInfoAMDX :: DispatchGraphInfoAMDX -> "scratch" ::: DeviceAddress nodeIndex :: "nodeIndex" ::: Word32 payloadCount :: "nodeIndex" ::: Word32 payloads :: DeviceOrHostAddressConstAMDX payloadStride :: "scratch" ::: DeviceAddress ..} 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 ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr DispatchGraphInfoAMDX p Ptr DispatchGraphInfoAMDX -> Int -> Ptr ("scratch" ::: DeviceAddress) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 16 :: Ptr Word64)) ("scratch" ::: DeviceAddress 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 ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr DispatchGraphInfoAMDX p Ptr DispatchGraphInfoAMDX -> Int -> Ptr ("scratch" ::: DeviceAddress) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 16 :: Ptr Word64)) ("scratch" ::: DeviceAddress 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 -> ("scratch" ::: DeviceAddress) -> 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 "scratch" ::: DeviceAddress 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 -> "scratch" ::: DeviceAddress 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 "scratch" ::: DeviceAddress DeviceOrHostAddressConstAMDX $sel:count:DispatchGraphCountInfoAMDX :: DispatchGraphCountInfoAMDX -> "nodeIndex" ::: Word32 $sel:infos:DispatchGraphCountInfoAMDX :: DispatchGraphCountInfoAMDX -> DeviceOrHostAddressConstAMDX $sel:stride:DispatchGraphCountInfoAMDX :: DispatchGraphCountInfoAMDX -> "scratch" ::: DeviceAddress count :: "nodeIndex" ::: Word32 infos :: DeviceOrHostAddressConstAMDX stride :: "scratch" ::: DeviceAddress ..} 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 ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr DispatchGraphCountInfoAMDX p Ptr DispatchGraphCountInfoAMDX -> Int -> Ptr ("scratch" ::: DeviceAddress) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 16 :: Ptr Word64)) ("scratch" ::: DeviceAddress 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 ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke ((Ptr DispatchGraphCountInfoAMDX p Ptr DispatchGraphCountInfoAMDX -> Int -> Ptr ("scratch" ::: DeviceAddress) forall a b. Ptr a -> Int -> Ptr b `plusPtr` Int 16 :: Ptr Word64)) ("scratch" ::: DeviceAddress 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 -> ("scratch" ::: DeviceAddress) -> DispatchGraphCountInfoAMDX DispatchGraphCountInfoAMDX "nodeIndex" ::: Word32 forall a. Zero a => a zero DeviceOrHostAddressConstAMDX forall a. Zero a => a zero "scratch" ::: DeviceAddress 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 "scratch" ::: DeviceAddress 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 ("scratch" ::: DeviceAddress) -> ("scratch" ::: DeviceAddress) -> IO () forall a. Storable a => Ptr a -> a -> IO () poke (forall a b. Ptr a -> Ptr b castPtr @_ @DeviceAddress Ptr DeviceOrHostAddressConstAMDX p) ("scratch" ::: DeviceAddress 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 = ("scratch" ::: DeviceAddress) -> DeviceOrHostAddressConstAMDX DeviceAddressConstAMDX "scratch" ::: DeviceAddress forall a. Zero a => a zero type AMDX_SHADER_ENQUEUE_SPEC_VERSION = 2 -- No documentation found for TopLevel "VK_AMDX_SHADER_ENQUEUE_SPEC_VERSION" pattern AMDX_SHADER_ENQUEUE_SPEC_VERSION :: forall a . Integral a => a pattern $mAMDX_SHADER_ENQUEUE_SPEC_VERSION :: forall {r} {a}. Integral a => a -> ((# #) -> r) -> ((# #) -> r) -> r $bAMDX_SHADER_ENQUEUE_SPEC_VERSION :: forall a. Integral a => a AMDX_SHADER_ENQUEUE_SPEC_VERSION = 2 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 $mAMDX_SHADER_ENQUEUE_EXTENSION_NAME :: forall {r} {a}. (Eq a, IsString a) => a -> ((# #) -> r) -> ((# #) -> r) -> r $bAMDX_SHADER_ENQUEUE_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a AMDX_SHADER_ENQUEUE_EXTENSION_NAME = "VK_AMDX_shader_enqueue"