{-# 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_VERSION_1_4 -- -- - Interacts with VK_EXT_mesh_shader -- -- - Interacts with VK_KHR_maintenance5 -- -- [__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.ComputePipeline.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> -- or -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#versions-1.4 Vulkan Version 1.4> -- is supported: -- -- - Extending -- 'Vulkan.Core14.Enums.BufferUsageFlags2.BufferUsageFlagBits2': -- -- - 'Vulkan.Core14.Enums.BufferUsageFlags2.BUFFER_USAGE_2_EXECUTION_GRAPH_SCRATCH_BIT_AMDX' -- -- - Extending -- 'Vulkan.Core14.Enums.PipelineCreateFlags2.PipelineCreateFlagBits2': -- -- - 'Vulkan.Core14.Enums.PipelineCreateFlags2.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/latest/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(..) , 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.ComputePipeline (PipelineShaderStageCreateInfo) import Vulkan.CStruct.Extends (PokeChain) import Vulkan.CStruct.Extends (PokeChain(..)) import Vulkan.Core10.Enums.Result (Result) import Vulkan.Core10.Enums.Result (Result(..)) import Vulkan.CStruct.Extends (SomeStruct) import Vulkan.Core10.Enums.StructureType (StructureType) import Vulkan.Exception (VulkanException(..)) import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_EXECUTION_GRAPH_PIPELINE_CREATE_INFO_AMDX)) import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_EXECUTION_GRAPH_PIPELINE_SCRATCH_SIZE_AMDX)) import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ENQUEUE_FEATURES_AMDX)) import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ENQUEUE_PROPERTIES_AMDX)) import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_NODE_CREATE_INFO_AMDX)) import Vulkan.Core10.Enums.Result (Result(SUCCESS)) import Vulkan.Extensions.VK_KHR_pipeline_library (PipelineLibraryCreateInfoKHR(..)) import Vulkan.Core10.APIConstants (SHADER_INDEX_UNUSED_AMDX) import Vulkan.Core10.APIConstants (pattern SHADER_INDEX_UNUSED_AMDX) foreign import ccall #if !defined(SAFE_FOREIGN_CALLS) unsafe #endif "dynamic" mkVkGetExecutionGraphPipelineScratchSizeAMDX :: FunPtr (Ptr Device_T -> Pipeline -> Ptr ExecutionGraphPipelineScratchSizeAMDX -> IO Result) -> Ptr Device_T -> Pipeline -> Ptr ExecutionGraphPipelineScratchSizeAMDX -> IO Result -- | vkGetExecutionGraphPipelineScratchSizeAMDX - Query scratch space -- required to dispatch an execution graph -- -- = Description -- -- After this function returns, information about the scratch space -- required will be returned in @pSizeInfo@. -- -- == Return Codes -- -- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>] -- -- - 'Vulkan.Core10.Enums.Result.SUCCESS' -- -- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>] -- -- - 'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY' -- -- - 'Vulkan.Core10.Enums.Result.ERROR_UNKNOWN' -- -- - 'Vulkan.Core10.Enums.Result.ERROR_VALIDATION_FAILED' -- -- = 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 deviceCmds :: 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. (HasCallStack, 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 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) r <- lift $ traceAroundEvent "vkGetExecutionGraphPipelineScratchSizeAMDX" (vkGetExecutionGraphPipelineScratchSizeAMDX' (deviceHandle (device)) (executionGraph) (pPSizeInfo)) lift $ when (r < SUCCESS) (throwIO (VulkanException r)) pSizeInfo <- lift $ peekCStruct @ExecutionGraphPipelineScratchSizeAMDX pPSizeInfo pure $ (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' -- -- - 'Vulkan.Core10.Enums.Result.ERROR_UNKNOWN' -- -- - 'Vulkan.Core10.Enums.Result.ERROR_VALIDATION_FAILED' -- -- = 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 deviceCmds :: 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. (HasCallStack, 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 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) pPNodeIndex <- ContT $ bracket (callocBytes @Word32 4) free r <- lift $ traceAroundEvent "vkGetExecutionGraphPipelineNodeIndexAMDX" (vkGetExecutionGraphPipelineNodeIndexAMDX' (deviceHandle (device)) (executionGraph) pNodeInfo (pPNodeIndex)) lift $ when (r < SUCCESS) (throwIO (VulkanException r)) pNodeIndex <- lift $ peek @Word32 pPNodeIndex pure $ (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/latest/html/vkspec.html#pipelines-multiple Multiple Pipeline Creation>. -- -- == Valid Usage -- -- - #VUID-vkCreateExecutionGraphPipelinesAMDX-shaderEnqueue-09124# The -- <https://registry.khronos.org/vulkan/specs/latest/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/latest/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.Core14.Enums.PipelineCreateFlags2.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 -- -- - #VUID-vkCreateExecutionGraphPipelinesAMDX-pCreateInfos-11414# If any -- element of @pCreateInfos@ sets -- 'Vulkan.Core14.Enums.PipelineCreateFlags2.PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT' -- and includes embedded sampler mappings, there /must/ be less than -- (<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxSamplerAllocationCount maxSamplerAllocationCount> -- - -- (<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-minSamplerHeapReservedRangeWithEmbedded minSamplerHeapReservedRangeWithEmbedded> -- \/ -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-samplerDescriptorSize samplerDescriptorSize>)) -- 'Vulkan.Core10.Handles.Sampler' objects currently created on the -- device -- -- - #VUID-vkCreateExecutionGraphPipelinesAMDX-pCreateInfos-11429# If any -- element of @pCreateInfos@ sets -- 'Vulkan.Core14.Enums.PipelineCreateFlags2.PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT' -- and includes embedded sampler mappings, this command /must/ not -- cause the total number of unique embedded samplers in pipelines and -- shaders on this device to exceed -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxDescriptorHeapEmbeddedSamplers maxDescriptorHeapEmbeddedSamplers> -- -- == 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.Extensions.VK_EXT_pipeline_creation_cache_control.PIPELINE_COMPILE_REQUIRED_EXT' -- -- - '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_DEVICE_MEMORY' -- -- - 'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY' -- -- - 'Vulkan.Core10.Enums.Result.ERROR_UNKNOWN' -- -- - 'Vulkan.Core10.Enums.Result.ERROR_VALIDATION_FAILED' -- -- = 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/latest/html/vkspec.html#pipelines-cache pipeline cache> -- object, in which case use of that cache is enabled for the duration of -- the command. The implementation /must/ not access this object outside of -- the duration of this 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/latest/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 deviceCmds :: 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. (HasCallStack, 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 pPCreateInfos <- ((Ptr (ExecutionGraphPipelineCreateInfoAMDX (ZonkAny 0)) -> IO (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))) -> IO (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))) -> ContT (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline)) IO (Ptr (ExecutionGraphPipelineCreateInfoAMDX (ZonkAny 0))) forall {k} (r :: k) (m :: k -> *) a. ((a -> m r) -> m r) -> ContT r m a ContT (((Ptr (ExecutionGraphPipelineCreateInfoAMDX (ZonkAny 0)) -> IO (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))) -> IO (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))) -> ContT (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline)) IO (Ptr (ExecutionGraphPipelineCreateInfoAMDX (ZonkAny 0)))) -> ((Ptr (ExecutionGraphPipelineCreateInfoAMDX (ZonkAny 0)) -> IO (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))) -> IO (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline))) -> ContT (Result, "pipelines" ::: Vector ("executionGraph" ::: Pipeline)) IO (Ptr (ExecutionGraphPipelineCreateInfoAMDX (ZonkAny 0))) 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) 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 (ZonkAny 1)) -> Ptr (SomeStruct ExecutionGraphPipelineCreateInfoAMDX) forall (a :: [*] -> *) (es :: [*]). Ptr (a es) -> Ptr (SomeStruct a) forgetExtensions (Ptr (ExecutionGraphPipelineCreateInfoAMDX (ZonkAny 0)) pPCreateInfos Ptr (ExecutionGraphPipelineCreateInfoAMDX (ZonkAny 0)) -> 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) pAllocator <- case (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) pPPipelines <- ContT $ bracket (callocBytes @Pipeline ((fromIntegral ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32))) * 8)) free r <- lift $ traceAroundEvent "vkCreateExecutionGraphPipelinesAMDX" (vkCreateExecutionGraphPipelinesAMDX' (deviceHandle (device)) (pipelineCache) ((fromIntegral (Data.Vector.length $ (createInfos)) :: Word32)) (forgetExtensions (pPCreateInfos)) pAllocator (pPPipelines)) lift $ when (r < SUCCESS) (throwIO (VulkanException r)) pPipelines <- lift $ generateM (fromIntegral ((fromIntegral (Data.Vector.length $ (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))) pure $ (r, 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-scratch-parameter# -- @scratch@ /must/ be a valid -- 'Vulkan.Core10.FundamentalTypes.DeviceAddress' value -- -- - #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 -- 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT', or -- 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT' operations -- -- - #VUID-vkCmdInitializeGraphScratchMemoryAMDX-suspended# This command -- /must/ not be called between suspended render pass instances -- -- - #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 | VK_QUEUE_COMPUTE_BIT | Action | -- | | | | VK_QUEUE_GRAPHICS_BIT | | -- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------+ -- -- == Conditional Rendering -- -- vkCmdInitializeGraphScratchMemoryAMDX is not affected by -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-conditional-rendering conditional rendering> -- -- = 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 deviceCmds :: 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. (HasCallStack, 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/latest/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-None-08609# 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-08610# 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 sampler /must/ not be used with any of the SPIR-V -- @OpImageSample*@ or @OpImageSparseSample*@ instructions with -- @ImplicitLod@, @Dref@ or @Proj@ in their name -- -- - #VUID-vkCmdDispatchGraphAMDX-None-08611# 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 sampler /must/ not be used with any of the SPIR-V -- @OpImageSample*@ or @OpImageSparseSample*@ instructions that -- includes a LOD bias or any offset values -- -- - #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# If a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding a bound shader> -- was created as a 'Vulkan.Extensions.Handles.ShaderEXT' without the -- 'Vulkan.Extensions.VK_EXT_shader_object.SHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXT' -- flag or as part of a pipeline without the -- 'Vulkan.Core14.Enums.PipelineCreateFlags2.PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT' -- flag, and that shader statically uses a set /n/, 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# If a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding a bound shader> -- was created as a 'Vulkan.Extensions.Handles.ShaderEXT' without the -- 'Vulkan.Extensions.VK_EXT_shader_object.SHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXT' -- flag or as part of a pipeline without the -- 'Vulkan.Core14.Enums.PipelineCreateFlags2.PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT' -- flag, and that shader statically uses a push constant value, that -- value /must/ have been set for the same pipeline bind point, with a -- 'Vulkan.Core10.Handles.PipelineLayout' that is -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility 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' -- -- - #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 a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding a bound shader> -- was created as a 'Vulkan.Extensions.Handles.ShaderEXT' without the -- 'Vulkan.Extensions.VK_EXT_shader_object.SHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXT' -- flag or as part of a pipeline without the -- 'Vulkan.Core14.Enums.PipelineCreateFlags2.PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT' -- flag, and that shader statically uses a push constant value, that -- value /must/ have been set for the same pipeline bind point, with a -- 'Vulkan.Core10.Handles.PipelineLayout' that is -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility 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' -- -- - #VUID-vkCmdDispatchGraphAMDX-None-08114# Descriptors in each bound -- descriptor set, specified via -- 'Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets', /must/ -- be valid if they are accessed as described by -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptor-validity descriptor validity> -- 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-imageLayout-00344# If an image -- descriptor is accessed by a shader, the -- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout' /must/ match the -- subresource accessible from the 'Vulkan.Core10.Handles.ImageView' as -- defined by the -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-layouts-matching-rule image layout matching rules> -- -- - #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-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.Core14.Enums.PipelineRobustnessBufferBehavior.PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS' -- or -- 'Vulkan.Core14.Enums.PipelineRobustnessBufferBehavior.PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2' -- 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.Core14.Enums.PipelineRobustnessBufferBehavior.PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS' -- or -- 'Vulkan.Core14.Enums.PipelineRobustnessBufferBehavior.PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2' -- 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-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' or -- 'Vulkan.Core10.Handles.BufferView' 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 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' 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' 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-OpImageSampleWeightedQCOM-06971# If -- @OpImageSampleWeightedQCOM@ 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-OpImageSampleWeightedQCOM-06972# If -- @OpImageSampleWeightedQCOM@ 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-OpImageSampleWeightedQCOM-06977# If -- @OpImageSampleWeightedQCOM@, @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-OpImageSampleWeightedQCOM-06978# If any -- command other than @OpImageSampleWeightedQCOM@, -- @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, all image subresources -- identified by that descriptor /must/ be in the image layout -- identified when the descriptor was written -- -- - #VUID-vkCmdDispatchGraphAMDX-commandBuffer-10746# The -- 'Vulkan.Core10.Handles.DeviceMemory' object allocated from a -- 'Vulkan.Core10.DeviceInitialization.MemoryHeap' with the -- 'Vulkan.Core10.Enums.MemoryHeapFlagBits.MEMORY_HEAP_TILE_MEMORY_BIT_QCOM' -- property that is bound to a resource accessed as a result of this -- command /must/ be the active bound -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-bind-tile-memory bound tile memory object> -- in @commandBuffer@ -- -- - #VUID-vkCmdDispatchGraphAMDX-None-10678# If this command is recorded -- inside a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-tile-shading tile shading render pass> -- instance, the stages corresponding to the pipeline bind point used -- by this command /must/ only include -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_VERTEX_BIT', -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_FRAGMENT_BIT', -- and\/or -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_COMPUTE_BIT' -- -- - #VUID-vkCmdDispatchGraphAMDX-None-10679# If this command is recorded -- where -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-per-tile-execution-model per-tile execution model> -- is enabled, there /must/ be no access to any image while the image -- was be transitioned to the -- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT' -- layout -- -- - #VUID-vkCmdDispatchGraphAMDX-pDescription-09900# If a -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_TENSOR_ARM' -- descriptor is accessed as a result of this command, then the -- underlying 'Vulkan.Extensions.Handles.TensorARM' object /must/ have -- been created with the -- 'Vulkan.Extensions.VK_ARM_tensors.TENSOR_USAGE_SHADER_BIT_ARM' usage -- flag set -- -- - #VUID-vkCmdDispatchGraphAMDX-dimensionCount-09905# If a -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_TENSOR_ARM' -- descriptor is accessed as a result of this command, then the @Rank@ -- of the @OpTypeTensorARM@ of the tensor resource variable /must/ be -- equal to the @dimensionCount@ provided via -- 'Vulkan.Extensions.VK_ARM_tensors.TensorCreateInfoARM'::@pDescription@ -- when creating the underlying 'Vulkan.Extensions.Handles.TensorARM' -- object -- -- - #VUID-vkCmdDispatchGraphAMDX-OpTypeTensorARM-09906# If a -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_TENSOR_ARM' -- descriptor is accessed as a result of this command, then the element -- type of the @OpTypeTensorARM@ of the tensor resource variable /must/ -- be -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#spirvenv-tensor-formats compatible> -- with the 'Vulkan.Core10.Enums.Format.Format' of the -- 'Vulkan.Extensions.Handles.TensorViewARM' used for the access -- -- - #VUID-vkCmdDispatchGraphAMDX-None-11297# If a pipeline is bound to -- the pipeline bind point used by this command, or shader is bound to -- a shader stage used by this command, and it was created with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT', -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT', -- and a shader accesses a @OpTypeStruct@ decorated with @Block@ or -- @BufferBlock@ using that mapping, the calculated offset for the -- resource heap /must/ be a multiple of -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-bufferDescriptorAlignment bufferDescriptorAlignment> -- -- - #VUID-vkCmdDispatchGraphAMDX-None-11298# If a pipeline is bound to -- the pipeline bind point used by this command, or shader is bound to -- a shader stage used by this command, and it was created with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT', -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT', -- and a shader accesses an @OpTypeImage@ or @OpTypeSampledImage@ using -- that mapping, the calculated offset for the resource heap /must/ be -- a multiple of -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-imageDescriptorAlignment imageDescriptorAlignment> -- -- - #VUID-vkCmdDispatchGraphAMDX-None-11299# If a pipeline is bound to -- the pipeline bind point used by this command, or shader is bound to -- a shader stage used by this command, and it was created with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT', -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT', -- and a shader accesses an @OpTypeSampler@ or @OpTypeSampledImage@ -- using that mapping, the calculated offset for the sampler heap -- /must/ be a multiple of -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-samplerDescriptorAlignment samplerDescriptorAlignment> -- -- - #VUID-vkCmdDispatchGraphAMDX-None-11397# If a pipeline is bound to -- the pipeline bind point used by this command, or shader is bound to -- a shader stage used by this command, and it was created with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT', -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT', -- and a shader accesses an @OpTypeTensorARM@ using that mapping, the -- calculated offset for the resource heap /must/ be a multiple of -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-tensorDescriptorAlignment tensorDescriptorAlignment> -- -- - #VUID-vkCmdDispatchGraphAMDX-None-11300# If a pipeline is bound to -- the pipeline bind point used by this command, or shader is bound to -- a shader stage used by this command, and it was created with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT' -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT', -- and a shader accesses a resource using that mapping, the value of -- the address at the expected location in push data /must/ be a -- multiple of 4 -- -- - #VUID-vkCmdDispatchGraphAMDX-None-11301# If a pipeline is bound to -- the pipeline bind point used by this command, or shader is bound to -- a shader stage used by this command, and it was created with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT' -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT', -- and a shader accesses a resource using that mapping, the value of -- the address at the expected location in push data /must/ be a valid -- 'Vulkan.Core10.FundamentalTypes.DeviceAddress' backed by physical -- memory at every offset specified by each mapping -- -- - #VUID-vkCmdDispatchGraphAMDX-None-11302# If a pipeline is bound to -- the pipeline bind point used by this command, or shader is bound to -- a shader stage used by this command, and it was created with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT', -- and a shader accesses a resource using that mapping, the value of -- the address at the expected location in push data /must/ be a valid -- 'Vulkan.Core10.FundamentalTypes.DeviceAddress' -- -- - #VUID-vkCmdDispatchGraphAMDX-None-11304# If a pipeline is bound to -- the pipeline bind point used by this command, or shader is bound to -- a shader stage used by this command, and it was created with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT', -- and a shader accesses a resource using that mapping, the value of -- the address at the expected location in push data /must/ be a -- multiple of 8 -- -- - #VUID-vkCmdDispatchGraphAMDX-None-11305# If a pipeline is bound to -- the pipeline bind point used by this command, or shader is bound to -- a shader stage used by this command, and it was created with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT', -- and a shader accesses a resource using that mapping, the value of -- the address at the expected location in push data /must/ be a valid -- 'Vulkan.Core10.FundamentalTypes.DeviceAddress' backed by physical -- memory at every offset specified by each mapping -- -- - #VUID-vkCmdDispatchGraphAMDX-None-11306# If a pipeline is bound to -- the pipeline bind point used by this command, or shader is bound to -- a shader stage used by this command, and it was created with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT', -- and a shader accesses a resource using that mapping, the value of -- the address pointed to by the address in push data /must/ be a valid -- 'Vulkan.Core10.FundamentalTypes.DeviceAddress' -- -- - #VUID-vkCmdDispatchGraphAMDX-None-11308# For each -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps descriptor heap> -- that is statically used by -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding a bound shader>, -- either directly or via a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping>, -- a valid descriptor heap /must/ be bound -- -- - #VUID-vkCmdDispatchGraphAMDX-None-11309# If a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding bound shader> -- was created as a 'Vulkan.Extensions.Handles.ShaderEXT' with the -- 'Vulkan.Extensions.VK_EXT_shader_object.SHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXT' -- flag or as part of a pipeline with the -- 'Vulkan.Core14.Enums.PipelineCreateFlags2.PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT' -- flag, execution of this command /must/ not result in any descriptor -- read accessing data outside of the user range of the respective heap -- bound by @vkCmdBind*HeapEXT@ commands -- -- - #VUID-vkCmdDispatchGraphAMDX-None-11372# If any stage of the -- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind -- point used by this command accesses a uniform buffer or uniform -- texel buffer through a descriptor in the bound resource heap, that -- stage was created without enabling either -- 'Vulkan.Core14.Enums.PipelineRobustnessBufferBehavior.PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS' -- or -- 'Vulkan.Core14.Enums.PipelineRobustnessBufferBehavior.PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2' -- for @uniformBuffers@, the -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess2 robustBufferAccess2> -- feature is not enabled, 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 descriptor specified via -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DeviceAddressRangeEXT' -- when the descriptor was written -- -- - #VUID-vkCmdDispatchGraphAMDX-None-11373# If any stage of the -- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind -- point used by this command accesses a storage buffer or storage -- texel buffer through a descriptor in the bound resource heap, that -- stage was created without enabling either -- 'Vulkan.Core14.Enums.PipelineRobustnessBufferBehavior.PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS' -- or -- 'Vulkan.Core14.Enums.PipelineRobustnessBufferBehavior.PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2' -- for @storageBuffers@, the -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess2 robustBufferAccess2> -- feature is not enabled, 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 descriptor specified by -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DeviceAddressRangeEXT' -- when the descriptor was written -- -- - #VUID-vkCmdDispatchGraphAMDX-None-11374# If the -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess2 robustBufferAccess2> -- feature is not enabled, 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, uniform texel buffer, storage buffer, or storage texel -- buffer, that shader /must/ not access values outside of the range of -- the buffer as specified by -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DeviceAddressRangeEXT' -- when the descriptor was written -- -- - #VUID-vkCmdDispatchGraphAMDX-pBindInfo-11375# If any -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding bound shader> -- uses an embedded sampler via a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping>, -- the value of @pBindInfo->reservedRangeSize@ set for -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.cmdBindSamplerHeapEXT' -- /must/ be greater than or equal to -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-minSamplerHeapReservedRangeWithEmbedded minSamplerHeapReservedRangeWithEmbedded> -- -- - #VUID-vkCmdDispatchGraphAMDX-None-11376# If a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding bound shader> -- was created as a 'Vulkan.Extensions.Handles.ShaderEXT' with the -- 'Vulkan.Extensions.VK_EXT_shader_object.SHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXT' -- flag or as part of a pipeline with the -- 'Vulkan.Core14.Enums.PipelineCreateFlags2.PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT' -- flag, and that shader statically uses a push constant value, that -- value /must/ have been set by -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.cmdPushDataEXT' -- -- - #VUID-vkCmdDispatchGraphAMDX-None-11398# If a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding bound shader> -- was created with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_PUSH_DATA_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_DATA_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_RESOURCE_HEAP_DATA_EXT', -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT', -- and a shader accesses a resource using that mapping, the access -- /must/ not be -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-execution-memory-access-bounds out of bounds> -- -- - #VUID-vkCmdDispatchGraphAMDX-None-11437# If a pipeline is bound to -- the pipeline bind point used by this command, or shader is bound to -- a shader stage used by this command, and it was created with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT', -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT', -- and a shader accesses a resource using that mapping, the buffer from -- which the address in push data was queried /must/ have been created -- with the -- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_UNIFORM_BUFFER_BIT' -- usage flag set -- -- - #VUID-vkCmdDispatchGraphAMDX-None-11438# If a pipeline is bound to -- the pipeline bind point used by this command, or shader is bound to -- a shader stage used by this command, and it was created with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT', -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT', -- and a shader accesses a uniform buffer using that mapping, the -- address that the uniform buffer is mapped to /must/ have been -- queried from a buffer created with the -- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_UNIFORM_BUFFER_BIT' -- usage flag set -- -- - #VUID-vkCmdDispatchGraphAMDX-None-11441# If a pipeline is bound to -- the pipeline bind point used by this command, or shader is bound to -- a shader stage used by this command, and it was created with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT', -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT', -- and a shader accesses a uniform buffer using that mapping, the -- address that the uniform buffer is mapped to /must/ be aligned to -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-minUniformBufferOffsetAlignment minUniformBufferOffsetAlignment> -- -- - #VUID-vkCmdDispatchGraphAMDX-None-11439# If a pipeline is bound to -- the pipeline bind point used by this command, or shader is bound to -- a shader stage used by this command, and it was created with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT', -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT', -- and a shader accesses a storage buffer using that mapping, the -- address that the storage buffer is mapped to /must/ have been -- queried from a buffer created with the -- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_STORAGE_BUFFER_BIT' -- usage flag set -- -- - #VUID-vkCmdDispatchGraphAMDX-None-11442# If a pipeline is bound to -- the pipeline bind point used by this command, or shader is bound to -- a shader stage used by this command, and it was created with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT', -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT', -- and a shader accesses a storage buffer using that mapping, the -- address that the storage buffer is mapped to /must/ be aligned to -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-minStorageBufferOffsetAlignment minStorageBufferOffsetAlignment> -- -- - #VUID-vkCmdDispatchGraphAMDX-None-11485# If a pipeline is bound to -- the pipeline bind point used by this command, or shader is bound to -- a shader stage used by this command, and it was created with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT', -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT', -- and a shader accesses an acceleration structure using that mapping, -- the address that the acceleration structure is mapped to /must/ be -- an acceleration structure address retrieved from a -- 'Vulkan.Extensions.Handles.AccelerationStructureKHR' object via -- 'Vulkan.Extensions.VK_KHR_acceleration_structure.getAccelerationStructureDeviceAddressKHR' -- or handle retrieved from a -- 'Vulkan.Extensions.Handles.AccelerationStructureNV' object via -- 'Vulkan.Extensions.VK_NV_ray_tracing.getAccelerationStructureHandleNV' -- -- - #VUID-vkCmdDispatchGraphAMDX-index-11450# If a shader uses a sampler -- descriptor to sample an image as a result of this command, and that -- sampler descriptor uses a custom border color with an index defined -- by -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.SamplerCustomBorderColorIndexCreateInfoEXT', -- the value of -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.SamplerCustomBorderColorIndexCreateInfoEXT'::@index@ -- /must/ have been registered before this command was recorded, and -- still be registered during the sampling operation, with an -- identically defined color -- -- - #VUID-vkCmdDispatchGraphAMDX-protectedNoFault-11455# If -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-protectedNoFault protectedNoFault> -- is not supported, a pipeline is bound to the pipeline bind point -- used by this command, or a shader is bound to a shader stage used by -- this command, and it was created with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT', -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT', -- the address that the resource is mapped to /must/ have been queried -- from a buffer created without the -- 'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_PROTECTED_BIT' -- create flag set -- -- - #VUID-vkCmdDispatchGraphAMDX-protectedNoFault-11456# If -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-protectedNoFault protectedNoFault> -- is not supported, a pipeline is bound to the pipeline bind point -- used by this command, or a shader is bound to a shader stage used by -- this command, and it was created with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT' -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT', -- the address of the indirect memory /must/ have been queried from a -- buffer created without the -- 'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_PROTECTED_BIT' -- create flag set -- -- - #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.Core14.Enums.BufferUsageFlags2.BUFFER_USAGE_2_EXECUTION_GRAPH_SCRATCH_BIT_AMDX' -- usage flags set -- -- - #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-scratch-parameter# @scratch@ /must/ be -- a valid 'Vulkan.Core10.FundamentalTypes.DeviceAddress' value -- -- - #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 -- 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT', or -- 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT' operations -- -- - #VUID-vkCmdDispatchGraphAMDX-suspended# This command /must/ not be -- called between suspended render pass instances -- -- - #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 | VK_QUEUE_COMPUTE_BIT | Action | -- | | | | VK_QUEUE_GRAPHICS_BIT | | -- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------+ -- -- == Conditional Rendering -- -- vkCmdDispatchGraphAMDX is affected by -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-conditional-rendering conditional rendering> -- -- = 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 deviceCmds :: 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. (HasCallStack, 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 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) lift $ traceAroundEvent "vkCmdDispatchGraphAMDX" (vkCmdDispatchGraphAMDX' (commandBufferHandle (commandBuffer)) (scratch) (scratchSize) pCountInfo) pure $ () 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/latest/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-None-08609# 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-08610# 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 sampler /must/ not be used with any of the SPIR-V -- @OpImageSample*@ or @OpImageSparseSample*@ instructions with -- @ImplicitLod@, @Dref@ or @Proj@ in their name -- -- - #VUID-vkCmdDispatchGraphIndirectAMDX-None-08611# 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 sampler /must/ not be used with any of the SPIR-V -- @OpImageSample*@ or @OpImageSparseSample*@ instructions that -- includes a LOD bias or any offset values -- -- - #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# If a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding a bound shader> -- was created as a 'Vulkan.Extensions.Handles.ShaderEXT' without the -- 'Vulkan.Extensions.VK_EXT_shader_object.SHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXT' -- flag or as part of a pipeline without the -- 'Vulkan.Core14.Enums.PipelineCreateFlags2.PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT' -- flag, and that shader statically uses a set /n/, 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# If a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding a bound shader> -- was created as a 'Vulkan.Extensions.Handles.ShaderEXT' without the -- 'Vulkan.Extensions.VK_EXT_shader_object.SHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXT' -- flag or as part of a pipeline without the -- 'Vulkan.Core14.Enums.PipelineCreateFlags2.PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT' -- flag, and that shader statically uses a push constant value, that -- value /must/ have been set for the same pipeline bind point, with a -- 'Vulkan.Core10.Handles.PipelineLayout' that is -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility 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' -- -- - #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 a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding a bound shader> -- was created as a 'Vulkan.Extensions.Handles.ShaderEXT' without the -- 'Vulkan.Extensions.VK_EXT_shader_object.SHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXT' -- flag or as part of a pipeline without the -- 'Vulkan.Core14.Enums.PipelineCreateFlags2.PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT' -- flag, and that shader statically uses a push constant value, that -- value /must/ have been set for the same pipeline bind point, with a -- 'Vulkan.Core10.Handles.PipelineLayout' that is -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility 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' -- -- - #VUID-vkCmdDispatchGraphIndirectAMDX-None-08114# Descriptors in each -- bound descriptor set, specified via -- 'Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets', /must/ -- be valid if they are accessed as described by -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptor-validity descriptor validity> -- 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-imageLayout-00344# If an image -- descriptor is accessed by a shader, the -- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout' /must/ match the -- subresource accessible from the 'Vulkan.Core10.Handles.ImageView' as -- defined by the -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-layouts-matching-rule image layout matching rules> -- -- - #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-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.Core14.Enums.PipelineRobustnessBufferBehavior.PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS' -- or -- 'Vulkan.Core14.Enums.PipelineRobustnessBufferBehavior.PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2' -- 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.Core14.Enums.PipelineRobustnessBufferBehavior.PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS' -- or -- 'Vulkan.Core14.Enums.PipelineRobustnessBufferBehavior.PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2' -- 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-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' or -- 'Vulkan.Core10.Handles.BufferView' 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 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' 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' 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-OpImageSampleWeightedQCOM-06971# -- If @OpImageSampleWeightedQCOM@ 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-OpImageSampleWeightedQCOM-06972# -- If @OpImageSampleWeightedQCOM@ 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-OpImageSampleWeightedQCOM-06977# -- If @OpImageSampleWeightedQCOM@, @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-OpImageSampleWeightedQCOM-06978# -- If any command other than @OpImageSampleWeightedQCOM@, -- @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, all image subresources -- identified by that descriptor /must/ be in the image layout -- identified when the descriptor was written -- -- - #VUID-vkCmdDispatchGraphIndirectAMDX-commandBuffer-10746# The -- 'Vulkan.Core10.Handles.DeviceMemory' object allocated from a -- 'Vulkan.Core10.DeviceInitialization.MemoryHeap' with the -- 'Vulkan.Core10.Enums.MemoryHeapFlagBits.MEMORY_HEAP_TILE_MEMORY_BIT_QCOM' -- property that is bound to a resource accessed as a result of this -- command /must/ be the active bound -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-bind-tile-memory bound tile memory object> -- in @commandBuffer@ -- -- - #VUID-vkCmdDispatchGraphIndirectAMDX-None-10678# If this command is -- recorded inside a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-tile-shading tile shading render pass> -- instance, the stages corresponding to the pipeline bind point used -- by this command /must/ only include -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_VERTEX_BIT', -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_FRAGMENT_BIT', -- and\/or -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_COMPUTE_BIT' -- -- - #VUID-vkCmdDispatchGraphIndirectAMDX-None-10679# If this command is -- recorded where -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-per-tile-execution-model per-tile execution model> -- is enabled, there /must/ be no access to any image while the image -- was be transitioned to the -- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT' -- layout -- -- - #VUID-vkCmdDispatchGraphIndirectAMDX-pDescription-09900# If a -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_TENSOR_ARM' -- descriptor is accessed as a result of this command, then the -- underlying 'Vulkan.Extensions.Handles.TensorARM' object /must/ have -- been created with the -- 'Vulkan.Extensions.VK_ARM_tensors.TENSOR_USAGE_SHADER_BIT_ARM' usage -- flag set -- -- - #VUID-vkCmdDispatchGraphIndirectAMDX-dimensionCount-09905# If a -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_TENSOR_ARM' -- descriptor is accessed as a result of this command, then the @Rank@ -- of the @OpTypeTensorARM@ of the tensor resource variable /must/ be -- equal to the @dimensionCount@ provided via -- 'Vulkan.Extensions.VK_ARM_tensors.TensorCreateInfoARM'::@pDescription@ -- when creating the underlying 'Vulkan.Extensions.Handles.TensorARM' -- object -- -- - #VUID-vkCmdDispatchGraphIndirectAMDX-OpTypeTensorARM-09906# If a -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_TENSOR_ARM' -- descriptor is accessed as a result of this command, then the element -- type of the @OpTypeTensorARM@ of the tensor resource variable /must/ -- be -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#spirvenv-tensor-formats compatible> -- with the 'Vulkan.Core10.Enums.Format.Format' of the -- 'Vulkan.Extensions.Handles.TensorViewARM' used for the access -- -- - #VUID-vkCmdDispatchGraphIndirectAMDX-None-11297# If a pipeline is -- bound to the pipeline bind point used by this command, or shader is -- bound to a shader stage used by this command, and it was created -- with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT', -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT', -- and a shader accesses a @OpTypeStruct@ decorated with @Block@ or -- @BufferBlock@ using that mapping, the calculated offset for the -- resource heap /must/ be a multiple of -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-bufferDescriptorAlignment bufferDescriptorAlignment> -- -- - #VUID-vkCmdDispatchGraphIndirectAMDX-None-11298# If a pipeline is -- bound to the pipeline bind point used by this command, or shader is -- bound to a shader stage used by this command, and it was created -- with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT', -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT', -- and a shader accesses an @OpTypeImage@ or @OpTypeSampledImage@ using -- that mapping, the calculated offset for the resource heap /must/ be -- a multiple of -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-imageDescriptorAlignment imageDescriptorAlignment> -- -- - #VUID-vkCmdDispatchGraphIndirectAMDX-None-11299# If a pipeline is -- bound to the pipeline bind point used by this command, or shader is -- bound to a shader stage used by this command, and it was created -- with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT', -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT', -- and a shader accesses an @OpTypeSampler@ or @OpTypeSampledImage@ -- using that mapping, the calculated offset for the sampler heap -- /must/ be a multiple of -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-samplerDescriptorAlignment samplerDescriptorAlignment> -- -- - #VUID-vkCmdDispatchGraphIndirectAMDX-None-11397# If a pipeline is -- bound to the pipeline bind point used by this command, or shader is -- bound to a shader stage used by this command, and it was created -- with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT', -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT', -- and a shader accesses an @OpTypeTensorARM@ using that mapping, the -- calculated offset for the resource heap /must/ be a multiple of -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-tensorDescriptorAlignment tensorDescriptorAlignment> -- -- - #VUID-vkCmdDispatchGraphIndirectAMDX-None-11300# If a pipeline is -- bound to the pipeline bind point used by this command, or shader is -- bound to a shader stage used by this command, and it was created -- with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT' -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT', -- and a shader accesses a resource using that mapping, the value of -- the address at the expected location in push data /must/ be a -- multiple of 4 -- -- - #VUID-vkCmdDispatchGraphIndirectAMDX-None-11301# If a pipeline is -- bound to the pipeline bind point used by this command, or shader is -- bound to a shader stage used by this command, and it was created -- with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT' -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT', -- and a shader accesses a resource using that mapping, the value of -- the address at the expected location in push data /must/ be a valid -- 'Vulkan.Core10.FundamentalTypes.DeviceAddress' backed by physical -- memory at every offset specified by each mapping -- -- - #VUID-vkCmdDispatchGraphIndirectAMDX-None-11302# If a pipeline is -- bound to the pipeline bind point used by this command, or shader is -- bound to a shader stage used by this command, and it was created -- with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT', -- and a shader accesses a resource using that mapping, the value of -- the address at the expected location in push data /must/ be a valid -- 'Vulkan.Core10.FundamentalTypes.DeviceAddress' -- -- - #VUID-vkCmdDispatchGraphIndirectAMDX-None-11304# If a pipeline is -- bound to the pipeline bind point used by this command, or shader is -- bound to a shader stage used by this command, and it was created -- with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT', -- and a shader accesses a resource using that mapping, the value of -- the address at the expected location in push data /must/ be a -- multiple of 8 -- -- - #VUID-vkCmdDispatchGraphIndirectAMDX-None-11305# If a pipeline is -- bound to the pipeline bind point used by this command, or shader is -- bound to a shader stage used by this command, and it was created -- with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT', -- and a shader accesses a resource using that mapping, the value of -- the address at the expected location in push data /must/ be a valid -- 'Vulkan.Core10.FundamentalTypes.DeviceAddress' backed by physical -- memory at every offset specified by each mapping -- -- - #VUID-vkCmdDispatchGraphIndirectAMDX-None-11306# If a pipeline is -- bound to the pipeline bind point used by this command, or shader is -- bound to a shader stage used by this command, and it was created -- with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT', -- and a shader accesses a resource using that mapping, the value of -- the address pointed to by the address in push data /must/ be a valid -- 'Vulkan.Core10.FundamentalTypes.DeviceAddress' -- -- - #VUID-vkCmdDispatchGraphIndirectAMDX-None-11308# For each -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps descriptor heap> -- that is statically used by -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding a bound shader>, -- either directly or via a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping>, -- a valid descriptor heap /must/ be bound -- -- - #VUID-vkCmdDispatchGraphIndirectAMDX-None-11309# If a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding bound shader> -- was created as a 'Vulkan.Extensions.Handles.ShaderEXT' with the -- 'Vulkan.Extensions.VK_EXT_shader_object.SHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXT' -- flag or as part of a pipeline with the -- 'Vulkan.Core14.Enums.PipelineCreateFlags2.PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT' -- flag, execution of this command /must/ not result in any descriptor -- read accessing data outside of the user range of the respective heap -- bound by @vkCmdBind*HeapEXT@ commands -- -- - #VUID-vkCmdDispatchGraphIndirectAMDX-None-11372# If any stage of the -- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind -- point used by this command accesses a uniform buffer or uniform -- texel buffer through a descriptor in the bound resource heap, that -- stage was created without enabling either -- 'Vulkan.Core14.Enums.PipelineRobustnessBufferBehavior.PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS' -- or -- 'Vulkan.Core14.Enums.PipelineRobustnessBufferBehavior.PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2' -- for @uniformBuffers@, the -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess2 robustBufferAccess2> -- feature is not enabled, 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 descriptor specified via -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DeviceAddressRangeEXT' -- when the descriptor was written -- -- - #VUID-vkCmdDispatchGraphIndirectAMDX-None-11373# If any stage of the -- 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline bind -- point used by this command accesses a storage buffer or storage -- texel buffer through a descriptor in the bound resource heap, that -- stage was created without enabling either -- 'Vulkan.Core14.Enums.PipelineRobustnessBufferBehavior.PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS' -- or -- 'Vulkan.Core14.Enums.PipelineRobustnessBufferBehavior.PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2' -- for @storageBuffers@, the -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess2 robustBufferAccess2> -- feature is not enabled, 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 descriptor specified by -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DeviceAddressRangeEXT' -- when the descriptor was written -- -- - #VUID-vkCmdDispatchGraphIndirectAMDX-None-11374# If the -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess2 robustBufferAccess2> -- feature is not enabled, 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, uniform texel buffer, storage buffer, or storage texel -- buffer, that shader /must/ not access values outside of the range of -- the buffer as specified by -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DeviceAddressRangeEXT' -- when the descriptor was written -- -- - #VUID-vkCmdDispatchGraphIndirectAMDX-pBindInfo-11375# If any -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding bound shader> -- uses an embedded sampler via a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping>, -- the value of @pBindInfo->reservedRangeSize@ set for -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.cmdBindSamplerHeapEXT' -- /must/ be greater than or equal to -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-minSamplerHeapReservedRangeWithEmbedded minSamplerHeapReservedRangeWithEmbedded> -- -- - #VUID-vkCmdDispatchGraphIndirectAMDX-None-11376# If a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding bound shader> -- was created as a 'Vulkan.Extensions.Handles.ShaderEXT' with the -- 'Vulkan.Extensions.VK_EXT_shader_object.SHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXT' -- flag or as part of a pipeline with the -- 'Vulkan.Core14.Enums.PipelineCreateFlags2.PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT' -- flag, and that shader statically uses a push constant value, that -- value /must/ have been set by -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.cmdPushDataEXT' -- -- - #VUID-vkCmdDispatchGraphIndirectAMDX-None-11398# If a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding bound shader> -- was created with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_PUSH_DATA_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_DATA_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_RESOURCE_HEAP_DATA_EXT', -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT', -- and a shader accesses a resource using that mapping, the access -- /must/ not be -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-execution-memory-access-bounds out of bounds> -- -- - #VUID-vkCmdDispatchGraphIndirectAMDX-None-11437# If a pipeline is -- bound to the pipeline bind point used by this command, or shader is -- bound to a shader stage used by this command, and it was created -- with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT', -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT', -- and a shader accesses a resource using that mapping, the buffer from -- which the address in push data was queried /must/ have been created -- with the -- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_UNIFORM_BUFFER_BIT' -- usage flag set -- -- - #VUID-vkCmdDispatchGraphIndirectAMDX-None-11438# If a pipeline is -- bound to the pipeline bind point used by this command, or shader is -- bound to a shader stage used by this command, and it was created -- with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT', -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT', -- and a shader accesses a uniform buffer using that mapping, the -- address that the uniform buffer is mapped to /must/ have been -- queried from a buffer created with the -- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_UNIFORM_BUFFER_BIT' -- usage flag set -- -- - #VUID-vkCmdDispatchGraphIndirectAMDX-None-11441# If a pipeline is -- bound to the pipeline bind point used by this command, or shader is -- bound to a shader stage used by this command, and it was created -- with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT', -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT', -- and a shader accesses a uniform buffer using that mapping, the -- address that the uniform buffer is mapped to /must/ be aligned to -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-minUniformBufferOffsetAlignment minUniformBufferOffsetAlignment> -- -- - #VUID-vkCmdDispatchGraphIndirectAMDX-None-11439# If a pipeline is -- bound to the pipeline bind point used by this command, or shader is -- bound to a shader stage used by this command, and it was created -- with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT', -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT', -- and a shader accesses a storage buffer using that mapping, the -- address that the storage buffer is mapped to /must/ have been -- queried from a buffer created with the -- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_STORAGE_BUFFER_BIT' -- usage flag set -- -- - #VUID-vkCmdDispatchGraphIndirectAMDX-None-11442# If a pipeline is -- bound to the pipeline bind point used by this command, or shader is -- bound to a shader stage used by this command, and it was created -- with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT', -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT', -- and a shader accesses a storage buffer using that mapping, the -- address that the storage buffer is mapped to /must/ be aligned to -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-minStorageBufferOffsetAlignment minStorageBufferOffsetAlignment> -- -- - #VUID-vkCmdDispatchGraphIndirectAMDX-None-11485# If a pipeline is -- bound to the pipeline bind point used by this command, or shader is -- bound to a shader stage used by this command, and it was created -- with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT', -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT', -- and a shader accesses an acceleration structure using that mapping, -- the address that the acceleration structure is mapped to /must/ be -- an acceleration structure address retrieved from a -- 'Vulkan.Extensions.Handles.AccelerationStructureKHR' object via -- 'Vulkan.Extensions.VK_KHR_acceleration_structure.getAccelerationStructureDeviceAddressKHR' -- or handle retrieved from a -- 'Vulkan.Extensions.Handles.AccelerationStructureNV' object via -- 'Vulkan.Extensions.VK_NV_ray_tracing.getAccelerationStructureHandleNV' -- -- - #VUID-vkCmdDispatchGraphIndirectAMDX-index-11450# If a shader uses a -- sampler descriptor to sample an image as a result of this command, -- and that sampler descriptor uses a custom border color with an index -- defined by -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.SamplerCustomBorderColorIndexCreateInfoEXT', -- the value of -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.SamplerCustomBorderColorIndexCreateInfoEXT'::@index@ -- /must/ have been registered before this command was recorded, and -- still be registered during the sampling operation, with an -- identically defined color -- -- - #VUID-vkCmdDispatchGraphIndirectAMDX-protectedNoFault-11455# If -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-protectedNoFault protectedNoFault> -- is not supported, a pipeline is bound to the pipeline bind point -- used by this command, or a shader is bound to a shader stage used by -- this command, and it was created with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT', -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT', -- the address that the resource is mapped to /must/ have been queried -- from a buffer created without the -- 'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_PROTECTED_BIT' -- create flag set -- -- - #VUID-vkCmdDispatchGraphIndirectAMDX-protectedNoFault-11456# If -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-protectedNoFault protectedNoFault> -- is not supported, a pipeline is bound to the pipeline bind point -- used by this command, or a shader is bound to a shader stage used by -- this command, and it was created with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT' -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT', -- the address of the indirect memory /must/ have been queried from a -- buffer created without the -- 'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_PROTECTED_BIT' -- create flag set -- -- - #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.Core14.Enums.BufferUsageFlags2.BUFFER_USAGE_2_EXECUTION_GRAPH_SCRATCH_BIT_AMDX' -- usage flags set -- -- - #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' -- usage flag set -- -- - #VUID-vkCmdDispatchGraphIndirectAMDX-pCountInfo-09152# -- @pCountInfo->infos@ /must/ be a multiple of -- <https://registry.khronos.org/vulkan/specs/latest/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' -- usage flag set -- -- - #VUID-vkCmdDispatchGraphIndirectAMDX-pCountInfo-09156# For each -- 'DispatchGraphInfoAMDX' structure in @pCountInfo->infos@, @payloads@ -- /must/ be a multiple of -- <https://registry.khronos.org/vulkan/specs/latest/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-scratch-parameter# @scratch@ -- /must/ be a valid 'Vulkan.Core10.FundamentalTypes.DeviceAddress' -- value -- -- - #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 -- 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT', or -- 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT' operations -- -- - #VUID-vkCmdDispatchGraphIndirectAMDX-suspended# This command /must/ -- not be called between suspended render pass instances -- -- - #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 | VK_QUEUE_COMPUTE_BIT | Action | -- | | | | VK_QUEUE_GRAPHICS_BIT | | -- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------+ -- -- == Conditional Rendering -- -- vkCmdDispatchGraphIndirectAMDX is affected by -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-conditional-rendering conditional rendering> -- -- = 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 deviceCmds :: 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. (HasCallStack, 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 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) lift $ traceAroundEvent "vkCmdDispatchGraphIndirectAMDX" (vkCmdDispatchGraphIndirectAMDX' (commandBufferHandle (commandBuffer)) (scratch) (scratchSize) pCountInfo) pure $ () 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-None-08609# 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-08610# 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 sampler /must/ not be used with any of the SPIR-V -- @OpImageSample*@ or @OpImageSparseSample*@ instructions with -- @ImplicitLod@, @Dref@ or @Proj@ in their name -- -- - #VUID-vkCmdDispatchGraphIndirectCountAMDX-None-08611# 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 sampler /must/ not be used with any of the SPIR-V -- @OpImageSample*@ or @OpImageSparseSample*@ instructions that -- includes a LOD bias or any offset values -- -- - #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# If a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding a bound shader> -- was created as a 'Vulkan.Extensions.Handles.ShaderEXT' without the -- 'Vulkan.Extensions.VK_EXT_shader_object.SHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXT' -- flag or as part of a pipeline without the -- 'Vulkan.Core14.Enums.PipelineCreateFlags2.PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT' -- flag, and that shader statically uses a set /n/, 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# If a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding a bound shader> -- was created as a 'Vulkan.Extensions.Handles.ShaderEXT' without the -- 'Vulkan.Extensions.VK_EXT_shader_object.SHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXT' -- flag or as part of a pipeline without the -- 'Vulkan.Core14.Enums.PipelineCreateFlags2.PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT' -- flag, and that shader statically uses a push constant value, that -- value /must/ have been set for the same pipeline bind point, with a -- 'Vulkan.Core10.Handles.PipelineLayout' that is -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility 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' -- -- - #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 a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding a bound shader> -- was created as a 'Vulkan.Extensions.Handles.ShaderEXT' without the -- 'Vulkan.Extensions.VK_EXT_shader_object.SHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXT' -- flag or as part of a pipeline without the -- 'Vulkan.Core14.Enums.PipelineCreateFlags2.PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT' -- flag, and that shader statically uses a push constant value, that -- value /must/ have been set for the same pipeline bind point, with a -- 'Vulkan.Core10.Handles.PipelineLayout' that is -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-compatibility 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' -- -- - #VUID-vkCmdDispatchGraphIndirectCountAMDX-None-08114# Descriptors in -- each bound descriptor set, specified via -- 'Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets', /must/ -- be valid if they are accessed as described by -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptor-validity descriptor validity> -- 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-imageLayout-00344# If an -- image descriptor is accessed by a shader, the -- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout' /must/ match the -- subresource accessible from the 'Vulkan.Core10.Handles.ImageView' as -- defined by the -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#resources-image-layouts-matching-rule image layout matching rules> -- -- - #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-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.Core14.Enums.PipelineRobustnessBufferBehavior.PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS' -- or -- 'Vulkan.Core14.Enums.PipelineRobustnessBufferBehavior.PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2' -- 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.Core14.Enums.PipelineRobustnessBufferBehavior.PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS' -- or -- 'Vulkan.Core14.Enums.PipelineRobustnessBufferBehavior.PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2' -- 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-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' or -- 'Vulkan.Core10.Handles.BufferView' 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 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' 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' 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-OpImageSampleWeightedQCOM-06971# -- If @OpImageSampleWeightedQCOM@ 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-OpImageSampleWeightedQCOM-06972# -- If @OpImageSampleWeightedQCOM@ 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-OpImageSampleWeightedQCOM-06977# -- If @OpImageSampleWeightedQCOM@, @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-OpImageSampleWeightedQCOM-06978# -- If any command other than @OpImageSampleWeightedQCOM@, -- @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, all image subresources -- identified by that descriptor /must/ be in the image layout -- identified when the descriptor was written -- -- - #VUID-vkCmdDispatchGraphIndirectCountAMDX-commandBuffer-10746# The -- 'Vulkan.Core10.Handles.DeviceMemory' object allocated from a -- 'Vulkan.Core10.DeviceInitialization.MemoryHeap' with the -- 'Vulkan.Core10.Enums.MemoryHeapFlagBits.MEMORY_HEAP_TILE_MEMORY_BIT_QCOM' -- property that is bound to a resource accessed as a result of this -- command /must/ be the active bound -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#memory-bind-tile-memory bound tile memory object> -- in @commandBuffer@ -- -- - #VUID-vkCmdDispatchGraphIndirectCountAMDX-None-10678# If this -- command is recorded inside a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-tile-shading tile shading render pass> -- instance, the stages corresponding to the pipeline bind point used -- by this command /must/ only include -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_VERTEX_BIT', -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_FRAGMENT_BIT', -- and\/or -- 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_COMPUTE_BIT' -- -- - #VUID-vkCmdDispatchGraphIndirectCountAMDX-None-10679# If this -- command is recorded where -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#renderpass-per-tile-execution-model per-tile execution model> -- is enabled, there /must/ be no access to any image while the image -- was be transitioned to the -- 'Vulkan.Core10.Enums.ImageLayout.IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT' -- layout -- -- - #VUID-vkCmdDispatchGraphIndirectCountAMDX-pDescription-09900# If a -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_TENSOR_ARM' -- descriptor is accessed as a result of this command, then the -- underlying 'Vulkan.Extensions.Handles.TensorARM' object /must/ have -- been created with the -- 'Vulkan.Extensions.VK_ARM_tensors.TENSOR_USAGE_SHADER_BIT_ARM' usage -- flag set -- -- - #VUID-vkCmdDispatchGraphIndirectCountAMDX-dimensionCount-09905# If a -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_TENSOR_ARM' -- descriptor is accessed as a result of this command, then the @Rank@ -- of the @OpTypeTensorARM@ of the tensor resource variable /must/ be -- equal to the @dimensionCount@ provided via -- 'Vulkan.Extensions.VK_ARM_tensors.TensorCreateInfoARM'::@pDescription@ -- when creating the underlying 'Vulkan.Extensions.Handles.TensorARM' -- object -- -- - #VUID-vkCmdDispatchGraphIndirectCountAMDX-OpTypeTensorARM-09906# If -- a 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_TENSOR_ARM' -- descriptor is accessed as a result of this command, then the element -- type of the @OpTypeTensorARM@ of the tensor resource variable /must/ -- be -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#spirvenv-tensor-formats compatible> -- with the 'Vulkan.Core10.Enums.Format.Format' of the -- 'Vulkan.Extensions.Handles.TensorViewARM' used for the access -- -- - #VUID-vkCmdDispatchGraphIndirectCountAMDX-None-11297# If a pipeline -- is bound to the pipeline bind point used by this command, or shader -- is bound to a shader stage used by this command, and it was created -- with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT', -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT', -- and a shader accesses a @OpTypeStruct@ decorated with @Block@ or -- @BufferBlock@ using that mapping, the calculated offset for the -- resource heap /must/ be a multiple of -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-bufferDescriptorAlignment bufferDescriptorAlignment> -- -- - #VUID-vkCmdDispatchGraphIndirectCountAMDX-None-11298# If a pipeline -- is bound to the pipeline bind point used by this command, or shader -- is bound to a shader stage used by this command, and it was created -- with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT', -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT', -- and a shader accesses an @OpTypeImage@ or @OpTypeSampledImage@ using -- that mapping, the calculated offset for the resource heap /must/ be -- a multiple of -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-imageDescriptorAlignment imageDescriptorAlignment> -- -- - #VUID-vkCmdDispatchGraphIndirectCountAMDX-None-11299# If a pipeline -- is bound to the pipeline bind point used by this command, or shader -- is bound to a shader stage used by this command, and it was created -- with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT', -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT', -- and a shader accesses an @OpTypeSampler@ or @OpTypeSampledImage@ -- using that mapping, the calculated offset for the sampler heap -- /must/ be a multiple of -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-samplerDescriptorAlignment samplerDescriptorAlignment> -- -- - #VUID-vkCmdDispatchGraphIndirectCountAMDX-None-11397# If a pipeline -- is bound to the pipeline bind point used by this command, or shader -- is bound to a shader stage used by this command, and it was created -- with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT', -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT', -- and a shader accesses an @OpTypeTensorARM@ using that mapping, the -- calculated offset for the resource heap /must/ be a multiple of -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-tensorDescriptorAlignment tensorDescriptorAlignment> -- -- - #VUID-vkCmdDispatchGraphIndirectCountAMDX-None-11300# If a pipeline -- is bound to the pipeline bind point used by this command, or shader -- is bound to a shader stage used by this command, and it was created -- with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT' -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT', -- and a shader accesses a resource using that mapping, the value of -- the address at the expected location in push data /must/ be a -- multiple of 4 -- -- - #VUID-vkCmdDispatchGraphIndirectCountAMDX-None-11301# If a pipeline -- is bound to the pipeline bind point used by this command, or shader -- is bound to a shader stage used by this command, and it was created -- with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT' -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT', -- and a shader accesses a resource using that mapping, the value of -- the address at the expected location in push data /must/ be a valid -- 'Vulkan.Core10.FundamentalTypes.DeviceAddress' backed by physical -- memory at every offset specified by each mapping -- -- - #VUID-vkCmdDispatchGraphIndirectCountAMDX-None-11302# If a pipeline -- is bound to the pipeline bind point used by this command, or shader -- is bound to a shader stage used by this command, and it was created -- with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT', -- and a shader accesses a resource using that mapping, the value of -- the address at the expected location in push data /must/ be a valid -- 'Vulkan.Core10.FundamentalTypes.DeviceAddress' -- -- - #VUID-vkCmdDispatchGraphIndirectCountAMDX-None-11304# If a pipeline -- is bound to the pipeline bind point used by this command, or shader -- is bound to a shader stage used by this command, and it was created -- with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT', -- and a shader accesses a resource using that mapping, the value of -- the address at the expected location in push data /must/ be a -- multiple of 8 -- -- - #VUID-vkCmdDispatchGraphIndirectCountAMDX-None-11305# If a pipeline -- is bound to the pipeline bind point used by this command, or shader -- is bound to a shader stage used by this command, and it was created -- with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT', -- and a shader accesses a resource using that mapping, the value of -- the address at the expected location in push data /must/ be a valid -- 'Vulkan.Core10.FundamentalTypes.DeviceAddress' backed by physical -- memory at every offset specified by each mapping -- -- - #VUID-vkCmdDispatchGraphIndirectCountAMDX-None-11306# If a pipeline -- is bound to the pipeline bind point used by this command, or shader -- is bound to a shader stage used by this command, and it was created -- with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT', -- and a shader accesses a resource using that mapping, the value of -- the address pointed to by the address in push data /must/ be a valid -- 'Vulkan.Core10.FundamentalTypes.DeviceAddress' -- -- - #VUID-vkCmdDispatchGraphIndirectCountAMDX-None-11308# For each -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps descriptor heap> -- that is statically used by -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding a bound shader>, -- either directly or via a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping>, -- a valid descriptor heap /must/ be bound -- -- - #VUID-vkCmdDispatchGraphIndirectCountAMDX-None-11309# If a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding bound shader> -- was created as a 'Vulkan.Extensions.Handles.ShaderEXT' with the -- 'Vulkan.Extensions.VK_EXT_shader_object.SHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXT' -- flag or as part of a pipeline with the -- 'Vulkan.Core14.Enums.PipelineCreateFlags2.PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT' -- flag, execution of this command /must/ not result in any descriptor -- read accessing data outside of the user range of the respective heap -- bound by @vkCmdBind*HeapEXT@ commands -- -- - #VUID-vkCmdDispatchGraphIndirectCountAMDX-None-11372# If any stage -- of the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline -- bind point used by this command accesses a uniform buffer or uniform -- texel buffer through a descriptor in the bound resource heap, that -- stage was created without enabling either -- 'Vulkan.Core14.Enums.PipelineRobustnessBufferBehavior.PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS' -- or -- 'Vulkan.Core14.Enums.PipelineRobustnessBufferBehavior.PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2' -- for @uniformBuffers@, the -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess2 robustBufferAccess2> -- feature is not enabled, 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 descriptor specified via -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DeviceAddressRangeEXT' -- when the descriptor was written -- -- - #VUID-vkCmdDispatchGraphIndirectCountAMDX-None-11373# If any stage -- of the 'Vulkan.Core10.Handles.Pipeline' object bound to the pipeline -- bind point used by this command accesses a storage buffer or storage -- texel buffer through a descriptor in the bound resource heap, that -- stage was created without enabling either -- 'Vulkan.Core14.Enums.PipelineRobustnessBufferBehavior.PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS' -- or -- 'Vulkan.Core14.Enums.PipelineRobustnessBufferBehavior.PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2' -- for @storageBuffers@, the -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess2 robustBufferAccess2> -- feature is not enabled, 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 descriptor specified by -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DeviceAddressRangeEXT' -- when the descriptor was written -- -- - #VUID-vkCmdDispatchGraphIndirectCountAMDX-None-11374# If the -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-robustBufferAccess2 robustBufferAccess2> -- feature is not enabled, 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, uniform texel buffer, storage buffer, or storage texel -- buffer, that shader /must/ not access values outside of the range of -- the buffer as specified by -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DeviceAddressRangeEXT' -- when the descriptor was written -- -- - #VUID-vkCmdDispatchGraphIndirectCountAMDX-pBindInfo-11375# If any -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding bound shader> -- uses an embedded sampler via a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping>, -- the value of @pBindInfo->reservedRangeSize@ set for -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.cmdBindSamplerHeapEXT' -- /must/ be greater than or equal to -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-minSamplerHeapReservedRangeWithEmbedded minSamplerHeapReservedRangeWithEmbedded> -- -- - #VUID-vkCmdDispatchGraphIndirectCountAMDX-None-11376# If a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding bound shader> -- was created as a 'Vulkan.Extensions.Handles.ShaderEXT' with the -- 'Vulkan.Extensions.VK_EXT_shader_object.SHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXT' -- flag or as part of a pipeline with the -- 'Vulkan.Core14.Enums.PipelineCreateFlags2.PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT' -- flag, and that shader statically uses a push constant value, that -- value /must/ have been set by -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.cmdPushDataEXT' -- -- - #VUID-vkCmdDispatchGraphIndirectCountAMDX-None-11398# If a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-binding bound shader> -- was created with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_PUSH_DATA_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_DATA_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_RESOURCE_HEAP_DATA_EXT', -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT', -- and a shader accesses a resource using that mapping, the access -- /must/ not be -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-execution-memory-access-bounds out of bounds> -- -- - #VUID-vkCmdDispatchGraphIndirectCountAMDX-None-11437# If a pipeline -- is bound to the pipeline bind point used by this command, or shader -- is bound to a shader stage used by this command, and it was created -- with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT', -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT', -- and a shader accesses a resource using that mapping, the buffer from -- which the address in push data was queried /must/ have been created -- with the -- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_UNIFORM_BUFFER_BIT' -- usage flag set -- -- - #VUID-vkCmdDispatchGraphIndirectCountAMDX-None-11438# If a pipeline -- is bound to the pipeline bind point used by this command, or shader -- is bound to a shader stage used by this command, and it was created -- with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT', -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT', -- and a shader accesses a uniform buffer using that mapping, the -- address that the uniform buffer is mapped to /must/ have been -- queried from a buffer created with the -- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_UNIFORM_BUFFER_BIT' -- usage flag set -- -- - #VUID-vkCmdDispatchGraphIndirectCountAMDX-None-11441# If a pipeline -- is bound to the pipeline bind point used by this command, or shader -- is bound to a shader stage used by this command, and it was created -- with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT', -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT', -- and a shader accesses a uniform buffer using that mapping, the -- address that the uniform buffer is mapped to /must/ be aligned to -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-minUniformBufferOffsetAlignment minUniformBufferOffsetAlignment> -- -- - #VUID-vkCmdDispatchGraphIndirectCountAMDX-None-11439# If a pipeline -- is bound to the pipeline bind point used by this command, or shader -- is bound to a shader stage used by this command, and it was created -- with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT', -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT', -- and a shader accesses a storage buffer using that mapping, the -- address that the storage buffer is mapped to /must/ have been -- queried from a buffer created with the -- 'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_STORAGE_BUFFER_BIT' -- usage flag set -- -- - #VUID-vkCmdDispatchGraphIndirectCountAMDX-None-11442# If a pipeline -- is bound to the pipeline bind point used by this command, or shader -- is bound to a shader stage used by this command, and it was created -- with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT', -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT', -- and a shader accesses a storage buffer using that mapping, the -- address that the storage buffer is mapped to /must/ be aligned to -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-minStorageBufferOffsetAlignment minStorageBufferOffsetAlignment> -- -- - #VUID-vkCmdDispatchGraphIndirectCountAMDX-None-11485# If a pipeline -- is bound to the pipeline bind point used by this command, or shader -- is bound to a shader stage used by this command, and it was created -- with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT', -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT', -- and a shader accesses an acceleration structure using that mapping, -- the address that the acceleration structure is mapped to /must/ be -- an acceleration structure address retrieved from a -- 'Vulkan.Extensions.Handles.AccelerationStructureKHR' object via -- 'Vulkan.Extensions.VK_KHR_acceleration_structure.getAccelerationStructureDeviceAddressKHR' -- or handle retrieved from a -- 'Vulkan.Extensions.Handles.AccelerationStructureNV' object via -- 'Vulkan.Extensions.VK_NV_ray_tracing.getAccelerationStructureHandleNV' -- -- - #VUID-vkCmdDispatchGraphIndirectCountAMDX-index-11450# If a shader -- uses a sampler descriptor to sample an image as a result of this -- command, and that sampler descriptor uses a custom border color with -- an index defined by -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.SamplerCustomBorderColorIndexCreateInfoEXT', -- the value of -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.SamplerCustomBorderColorIndexCreateInfoEXT'::@index@ -- /must/ have been registered before this command was recorded, and -- still be registered during the sampling operation, with an -- identically defined color -- -- - #VUID-vkCmdDispatchGraphIndirectCountAMDX-protectedNoFault-11455# If -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-protectedNoFault protectedNoFault> -- is not supported, a pipeline is bound to the pipeline bind point -- used by this command, or a shader is bound to a shader stage used by -- this command, and it was created with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT', -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT', -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT', -- the address that the resource is mapped to /must/ have been queried -- from a buffer created without the -- 'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_PROTECTED_BIT' -- create flag set -- -- - #VUID-vkCmdDispatchGraphIndirectCountAMDX-protectedNoFault-11456# If -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-protectedNoFault protectedNoFault> -- is not supported, a pipeline is bound to the pipeline bind point -- used by this command, or a shader is bound to a shader stage used by -- this command, and it was created with a -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorheaps-bindings descriptor mapping> -- using -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT' -- or -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT', -- the address of the indirect memory /must/ have been queried from a -- buffer created without the -- 'Vulkan.Core10.Enums.BufferCreateFlagBits.BUFFER_CREATE_PROTECTED_BIT' -- create flag set -- -- - #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.Core14.Enums.BufferUsageFlags2.BUFFER_USAGE_2_EXECUTION_GRAPH_SCRATCH_BIT_AMDX' -- usage flags set -- -- - #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' -- usage flag set -- -- - #VUID-vkCmdDispatchGraphIndirectCountAMDX-countInfo-09161# -- @countInfo@ /must/ be a multiple of -- <https://registry.khronos.org/vulkan/specs/latest/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' -- usage flag set -- -- - #VUID-vkCmdDispatchGraphIndirectCountAMDX-countInfo-09164# -- @countInfo->infos@ /must/ be a multiple of -- <https://registry.khronos.org/vulkan/specs/latest/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' -- usage flag set -- -- - #VUID-vkCmdDispatchGraphIndirectCountAMDX-countInfo-09168# For each -- 'DispatchGraphInfoAMDX' structure in @countInfo->infos@, @payloads@ -- /must/ be a multiple of -- <https://registry.khronos.org/vulkan/specs/latest/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-scratch-parameter# -- @scratch@ /must/ be a valid -- 'Vulkan.Core10.FundamentalTypes.DeviceAddress' value -- -- - #VUID-vkCmdDispatchGraphIndirectCountAMDX-countInfo-parameter# -- @countInfo@ /must/ be a valid -- 'Vulkan.Core10.FundamentalTypes.DeviceAddress' value -- -- - #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 -- 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_COMPUTE_BIT', or -- 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_GRAPHICS_BIT' operations -- -- - #VUID-vkCmdDispatchGraphIndirectCountAMDX-suspended# This command -- /must/ not be called between suspended render pass instances -- -- - #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 | VK_QUEUE_COMPUTE_BIT | Action | -- | | | | VK_QUEUE_GRAPHICS_BIT | | -- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------+ -- -- == Conditional Rendering -- -- vkCmdDispatchGraphIndirectCountAMDX is affected by -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-conditional-rendering conditional rendering> -- -- = 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 deviceCmds :: 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. (HasCallStack, 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) maxExecutionGraphDepth :: PhysicalDeviceShaderEnqueuePropertiesAMDX -> "nodeIndex" ::: Word32 maxExecutionGraphShaderOutputNodes :: PhysicalDeviceShaderEnqueuePropertiesAMDX -> "nodeIndex" ::: Word32 maxExecutionGraphShaderPayloadSize :: PhysicalDeviceShaderEnqueuePropertiesAMDX -> "nodeIndex" ::: Word32 maxExecutionGraphShaderPayloadCount :: PhysicalDeviceShaderEnqueuePropertiesAMDX -> "nodeIndex" ::: Word32 executionGraphDispatchAddressAlignment :: PhysicalDeviceShaderEnqueuePropertiesAMDX -> "nodeIndex" ::: Word32 maxExecutionGraphWorkgroupCount :: PhysicalDeviceShaderEnqueuePropertiesAMDX -> ("nodeIndex" ::: Word32, "nodeIndex" ::: Word32, "nodeIndex" ::: Word32) maxExecutionGraphWorkgroups :: 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 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)) maxExecutionGraphShaderOutputNodes <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32)) maxExecutionGraphShaderPayloadSize <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32)) maxExecutionGraphShaderPayloadCount <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32)) executionGraphDispatchAddressAlignment <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32)) let 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))) maxExecutionGraphWorkgroupCount0 <- peek @Word32 ((pmaxExecutionGraphWorkgroupCount `advancePtrBytes` 0 :: Ptr Word32)) maxExecutionGraphWorkgroupCount1 <- peek @Word32 ((pmaxExecutionGraphWorkgroupCount `advancePtrBytes` 4 :: Ptr Word32)) maxExecutionGraphWorkgroupCount2 <- peek @Word32 ((pmaxExecutionGraphWorkgroupCount `advancePtrBytes` 8 :: Ptr Word32)) maxExecutionGraphWorkgroups <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32)) pure $ PhysicalDeviceShaderEnqueuePropertiesAMDX maxExecutionGraphDepth maxExecutionGraphShaderOutputNodes maxExecutionGraphShaderPayloadSize maxExecutionGraphShaderPayloadCount executionGraphDispatchAddressAlignment (( maxExecutionGraphWorkgroupCount0 , maxExecutionGraphWorkgroupCount1 , maxExecutionGraphWorkgroupCount2 )) 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. If the application wishes to use a -- 'Vulkan.Core10.Handles.Device' with any features described by -- 'PhysicalDeviceShaderEnqueueFeaturesAMDX', it /must/ add an instance of -- the structure, with the desired feature members set to -- 'Vulkan.Core10.FundamentalTypes.TRUE', to the @pNext@ chain of -- 'Vulkan.Core10.Device.DeviceCreateInfo' when creating the -- 'Vulkan.Core10.Handles.Device'. -- -- == 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/latest/html/vkspec.html#executiongraphs execution graphs>. PhysicalDeviceShaderEnqueueFeaturesAMDX -> Bool shaderEnqueue :: Bool , -- | #features-shaderMeshEnqueue# @shaderMeshEnqueue@ indicates whether the -- implementation supports -- <https://registry.khronos.org/vulkan/specs/latest/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 shaderEnqueue :: PhysicalDeviceShaderEnqueueFeaturesAMDX -> Bool shaderMeshEnqueue :: 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 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)) shaderMeshEnqueue <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32)) pure $ PhysicalDeviceShaderEnqueueFeaturesAMDX (bool32ToBool shaderEnqueue) (bool32ToBool 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/latest/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.Core14.Promoted_From_VK_KHR_maintenance5Roadmap.PipelineCreateFlags2CreateInfo' -- 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 and @layout@ is not -- 'Vulkan.Core10.APIConstants.NULL_HANDLE', 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 and @layout@ is not -- 'Vulkan.Core10.APIConstants.NULL_HANDLE', 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 variable> -- is declared in a shader and @layout@ is not -- 'Vulkan.Core10.APIConstants.NULL_HANDLE', the corresponding -- descriptor set 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 variable> -- is declared in a shader, @layout@ is not -- 'Vulkan.Core10.APIConstants.NULL_HANDLE', and the descriptor type is -- not -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_MUTABLE_EXT', -- the corresponding descriptor set 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 variable> -- is declared in a shader as an array and @layout@ is not -- 'Vulkan.Core10.APIConstants.NULL_HANDLE', the corresponding -- descriptor binding used to create @layout@ /must/ have a -- @descriptorCount@ that is greater than or equal to the length of the -- array -- -- - #VUID-VkExecutionGraphPipelineCreateInfoAMDX-None-10391# 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 of descriptors, then the -- descriptor type of that variable /must/ not be -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK' -- -- - #VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-11798# If -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-shader64BitIndexing shader64BitIndexing> -- feature is not enabled, @flags@ /must/ not contain -- 'Vulkan.Core14.Enums.PipelineCreateFlags2.PIPELINE_CREATE_2_64_BIT_INDEXING_BIT_EXT' -- -- - #VUID-VkExecutionGraphPipelineCreateInfoAMDX-pipelineCreationCacheControl-02878# -- 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' -- nor -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT' -- -- - #VUID-VkExecutionGraphPipelineCreateInfoAMDX-pipelineProtectedAccess-07368# -- If the -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-pipelineProtectedAccess pipelineProtectedAccess> -- feature is not enabled, @flags@ /must/ not include -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT' -- nor -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT' -- -- - #VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-07369# @flags@ -- /must/ not include both -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT' -- and -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT' -- -- - #VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-11311# If -- 'Vulkan.Extensions.VK_KHR_maintenance5.PipelineCreateFlags2CreateInfoKHR'::@flags@ -- includes -- 'Vulkan.Core14.Enums.PipelineCreateFlags2.PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT', -- @layout@ /must/ be 'Vulkan.Core10.APIConstants.NULL_HANDLE' -- -- - #VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-11312# If -- 'Vulkan.Extensions.VK_KHR_maintenance5.PipelineCreateFlags2CreateInfoKHR'::@flags@ -- includes -- 'Vulkan.Core14.Enums.PipelineCreateFlags2.PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT', -- all shader variables in the -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#interfaces-resources shader resource interface> -- with a 'Vulkan.Core10.Handles.DescriptorSet' and @Binding@ -- decoration /must/ have a mapping declared in -- 'Vulkan.Extensions.VK_EXT_descriptor_heap.ShaderDescriptorSetAndBindingMappingInfoEXT'::pMappings -- -- - #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.Core14.Enums.PipelineCreateFlags2.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-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/latest/html/vkspec.html#interfaces Shader Interfaces> -- chapter -- -- - #VUID-VkExecutionGraphPipelineCreateInfoAMDX-layout-09130# If -- @layout@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', it /must/ -- be -- <https://registry.khronos.org/vulkan/specs/latest/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@ and @layout@ is not -- 'Vulkan.Core10.APIConstants.NULL_HANDLE', each element of -- @pLibraryInfo->pLibraries@ /must/ have been created with a @layout@ -- that is compatible with the @layout@ in this pipeline -- -- - #VUID-VkExecutionGraphPipelineCreateInfoAMDX-layout-09132# If -- @layout@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', 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.Core14.Enums.PipelineCreateFlags2.PIPELINE_CREATE_2_EXECUTION_GRAPH_BIT_AMDX' -- set -- -- - #VUID-VkExecutionGraphPipelineCreateInfoAMDX-shaderMeshEnqueue-10182# -- If the -- <https://registry.khronos.org/vulkan/specs/latest/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/latest/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 -- -- - #VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-12334# @flags@ -- /must/ not include -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT' -- nor -- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT' -- -- - #VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-11271# If -- 'Vulkan.Extensions.VK_KHR_maintenance5.PipelineCreateFlags2CreateInfoKHR'::@flags@ -- includes -- 'Vulkan.Core14.Enums.PipelineCreateFlags2.PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT', -- all libraries linked to this pipeline /must/ also have that flag set -- -- - #VUID-VkExecutionGraphPipelineCreateInfoAMDX-flags-11272# If -- 'Vulkan.Extensions.VK_KHR_maintenance5.PipelineCreateFlags2CreateInfoKHR'::@flags@ -- does not include -- 'Vulkan.Core14.Enums.PipelineCreateFlags2.PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT', -- all libraries linked to this pipeline /must/ also not have that flag -- set -- -- - #VUID-VkExecutionGraphPipelineCreateInfoAMDX-None-11363# If -- 'Vulkan.Extensions.VK_KHR_maintenance5.PipelineCreateFlags2CreateInfoKHR'::@flags@ -- does not include -- 'Vulkan.Core14.Enums.PipelineCreateFlags2.PIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXT', -- @layout@ /must/ not be 'Vulkan.Core10.APIConstants.NULL_HANDLE' -- -- == 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 structure 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.ComputePipeline.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# If -- @layout@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @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.ComputePipeline.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.ComputePipeline.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. The implementation -- /must/ not access this object outside of the duration of the command -- this structure is passed to. 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 next :: forall (es :: [*]). ExecutionGraphPipelineCreateInfoAMDX es -> Chain es flags :: forall (es :: [*]). ExecutionGraphPipelineCreateInfoAMDX es -> PipelineCreateFlags stageCount :: forall (es :: [*]). ExecutionGraphPipelineCreateInfoAMDX es -> "nodeIndex" ::: Word32 stages :: forall (es :: [*]). ExecutionGraphPipelineCreateInfoAMDX es -> Vector (SomeStruct PipelineShaderStageCreateInfo) libraryInfo :: forall (es :: [*]). ExecutionGraphPipelineCreateInfoAMDX es -> Maybe PipelineLibraryCreateInfoKHR layout :: forall (es :: [*]). ExecutionGraphPipelineCreateInfoAMDX es -> PipelineLayout basePipelineHandle :: forall (es :: [*]). ExecutionGraphPipelineCreateInfoAMDX es -> "executionGraph" ::: Pipeline basePipelineIndex :: 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{next :: Chain es next = Chain es next', Int32 Maybe PipelineLibraryCreateInfoKHR "nodeIndex" ::: Word32 Vector (SomeStruct PipelineShaderStageCreateInfo) PipelineCreateFlags PipelineLayout "executionGraph" ::: Pipeline flags :: PipelineCreateFlags stageCount :: "nodeIndex" ::: Word32 stages :: Vector (SomeStruct PipelineShaderStageCreateInfo) libraryInfo :: Maybe PipelineLibraryCreateInfoKHR layout :: PipelineLayout basePipelineHandle :: "executionGraph" ::: Pipeline basePipelineIndex :: 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 next :: forall (es :: [*]). ExecutionGraphPipelineCreateInfoAMDX es -> Chain es flags :: forall (es :: [*]). ExecutionGraphPipelineCreateInfoAMDX es -> PipelineCreateFlags stageCount :: forall (es :: [*]). ExecutionGraphPipelineCreateInfoAMDX es -> "nodeIndex" ::: Word32 stages :: forall (es :: [*]). ExecutionGraphPipelineCreateInfoAMDX es -> Vector (SomeStruct PipelineShaderStageCreateInfo) libraryInfo :: forall (es :: [*]). ExecutionGraphPipelineCreateInfoAMDX es -> Maybe PipelineLibraryCreateInfoKHR layout :: forall (es :: [*]). ExecutionGraphPipelineCreateInfoAMDX es -> PipelineLayout basePipelineHandle :: forall (es :: [*]). ExecutionGraphPipelineCreateInfoAMDX es -> "executionGraph" ::: Pipeline basePipelineIndex :: 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 next :: forall (es :: [*]). ExecutionGraphPipelineCreateInfoAMDX es -> Chain es flags :: forall (es :: [*]). ExecutionGraphPipelineCreateInfoAMDX es -> PipelineCreateFlags stageCount :: forall (es :: [*]). ExecutionGraphPipelineCreateInfoAMDX es -> "nodeIndex" ::: Word32 stages :: forall (es :: [*]). ExecutionGraphPipelineCreateInfoAMDX es -> Vector (SomeStruct PipelineShaderStageCreateInfo) libraryInfo :: forall (es :: [*]). ExecutionGraphPipelineCreateInfoAMDX es -> Maybe PipelineLibraryCreateInfoKHR layout :: forall (es :: [*]). ExecutionGraphPipelineCreateInfoAMDX es -> PipelineLayout basePipelineHandle :: forall (es :: [*]). ExecutionGraphPipelineCreateInfoAMDX es -> "executionGraph" ::: Pipeline basePipelineIndex :: 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) 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) lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'' lift $ poke ((p `plusPtr` 16 :: Ptr PipelineCreateFlags)) (flags) let 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) stageCount'' <- lift $ if (stageCount) == 0 then pure $ fromIntegral pStagesLength else do unless (fromIntegral pStagesLength == (stageCount) || pStagesLength == 0) $ throwIO $ IOError Nothing InvalidArgument "" "pStages must be empty or have 'stageCount' elements" Nothing Nothing pure (stageCount) lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (stageCount'') pStages'' <- if Data.Vector.null (stages) then pure nullPtr else do pPStages <- ContT $ allocaBytes @(PipelineShaderStageCreateInfo _) (((Data.Vector.length (stages))) * 48) 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 (ZonkAny 3)) -> Ptr (SomeStruct PipelineShaderStageCreateInfo) forall (a :: [*] -> *) (es :: [*]). Ptr (a es) -> Ptr (SomeStruct a) forgetExtensions (Ptr (PipelineShaderStageCreateInfo (ZonkAny 2)) pPStages Ptr (PipelineShaderStageCreateInfo (ZonkAny 2)) -> 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 $ ())) ((stages)) pure $ pPStages lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr (PipelineShaderStageCreateInfo _)))) pStages'' pLibraryInfo'' <- case (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) lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr PipelineLibraryCreateInfoKHR))) pLibraryInfo'' lift $ poke ((p `plusPtr` 40 :: Ptr PipelineLayout)) (layout) lift $ poke ((p `plusPtr` 48 :: Ptr Pipeline)) (basePipelineHandle) lift $ poke ((p `plusPtr` 56 :: Ptr Int32)) (basePipelineIndex) lift $ 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) 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 lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext' lift $ poke ((p `plusPtr` 56 :: Ptr Int32)) (zero) lift $ f instance ( Extendss ExecutionGraphPipelineCreateInfoAMDX es , PeekChain es ) => FromCStruct (ExecutionGraphPipelineCreateInfoAMDX es) where peekCStruct :: Ptr (ExecutionGraphPipelineCreateInfoAMDX es) -> IO (ExecutionGraphPipelineCreateInfoAMDX es) peekCStruct Ptr (ExecutionGraphPipelineCreateInfoAMDX es) p = do 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 ()))) next <- peekChain (castPtr pNext) flags <- peek @PipelineCreateFlags ((p `plusPtr` 16 :: Ptr PipelineCreateFlags)) stageCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32)) pStages <- peek @(Ptr (PipelineShaderStageCreateInfo _)) ((p `plusPtr` 24 :: Ptr (Ptr (PipelineShaderStageCreateInfo _)))) let pStagesLength = if Ptr (PipelineShaderStageCreateInfo (ZonkAny 4)) pStages Ptr (PipelineShaderStageCreateInfo (ZonkAny 4)) -> Ptr (PipelineShaderStageCreateInfo (ZonkAny 4)) -> Bool forall a. Eq a => a -> a -> Bool == Ptr (PipelineShaderStageCreateInfo (ZonkAny 4)) 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) pStages' <- generateM 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 (ZonkAny 4)) -> Ptr (SomeStruct PipelineShaderStageCreateInfo) forall (a :: [*] -> *) (es :: [*]). Ptr (a es) -> Ptr (SomeStruct a) forgetExtensions ((Ptr (PipelineShaderStageCreateInfo (ZonkAny 4)) pStages Ptr (PipelineShaderStageCreateInfo (ZonkAny 4)) -> Int -> Ptr (PipelineShaderStageCreateInfo (ZonkAny 4)) forall a. Ptr a -> Int -> Ptr a `advancePtrBytes` (Int 48 Int -> Int -> Int forall a. Num a => a -> a -> a * (Int i)) :: Ptr (PipelineShaderStageCreateInfo _))))) pLibraryInfo <- peek @(Ptr PipelineLibraryCreateInfoKHR) ((p `plusPtr` 32 :: Ptr (Ptr PipelineLibraryCreateInfoKHR))) pLibraryInfo' <- maybePeek (\Ptr PipelineLibraryCreateInfoKHR j -> forall a. FromCStruct a => Ptr a -> IO a peekCStruct @PipelineLibraryCreateInfoKHR (Ptr PipelineLibraryCreateInfoKHR j)) pLibraryInfo layout <- peek @PipelineLayout ((p `plusPtr` 40 :: Ptr PipelineLayout)) basePipelineHandle <- peek @Pipeline ((p `plusPtr` 48 :: Ptr Pipeline)) basePipelineIndex <- peek @Int32 ((p `plusPtr` 56 :: Ptr Int32)) pure $ ExecutionGraphPipelineCreateInfoAMDX next flags stageCount pStages' pLibraryInfo' layout basePipelineHandle 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.ComputePipeline.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 name :: ("nodeInfo" ::: PipelineShaderStageNodeCreateInfoAMDX) -> Maybe ByteString index :: ("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) 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) lift $ poke ((p `plusPtr` 16 :: Ptr (Ptr CChar))) pName'' lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) (index) lift $ 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 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))) pName' <- maybePeek (\Ptr CChar j -> Ptr CChar -> IO ByteString packCString (Ptr CChar j)) pName index <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32)) pure $ PipelineShaderStageNodeCreateInfoAMDX pName' 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 minSize :: ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX) -> "scratch" ::: DeviceAddress maxSize :: ("sizeInfo" ::: ExecutionGraphPipelineScratchSizeAMDX) -> "scratch" ::: DeviceAddress sizeGranularity :: ("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 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)) maxSize <- peek @DeviceSize ((p `plusPtr` 24 :: Ptr DeviceSize)) sizeGranularity <- peek @DeviceSize ((p `plusPtr` 32 :: Ptr DeviceSize)) pure $ ExecutionGraphPipelineScratchSizeAMDX minSize maxSize 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/latest/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 nodeIndex :: DispatchGraphInfoAMDX -> "nodeIndex" ::: Word32 payloadCount :: DispatchGraphInfoAMDX -> "nodeIndex" ::: Word32 payloads :: DispatchGraphInfoAMDX -> DeviceOrHostAddressConstAMDX payloadStride :: 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 count :: DispatchGraphCountInfoAMDX -> "nodeIndex" ::: Word32 infos :: DispatchGraphCountInfoAMDX -> DeviceOrHostAddressConstAMDX stride :: 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"