{-# language CPP #-}
-- | = Name
--
-- VK_ARM_data_graph - device extension
--
-- = VK_ARM_data_graph
--
-- [__Name String__]
--     @VK_ARM_data_graph@
--
-- [__Extension Type__]
--     Device extension
--
-- [__Registered Extension Number__]
--     508
--
-- [__Revision__]
--     1
--
-- [__Ratification Status__]
--     Not ratified
--
-- [__Extension and Version Dependencies__]
--     <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_deferred_host_operations VK_KHR_deferred_host_operations>
--
-- [__API Interactions__]
--
--     -   Interacts with VK_ARM_tensors
--
-- [__SPIR-V Dependencies__]
--
--     -   <https://htmlpreview.github.io/?https://github.com/KhronosGroup/SPIRV-Registry/blob/master/extensions/ARM/SPV_ARM_graph.html SPV_ARM_graph>
--
-- [__Contact__]
--
--     -   Kevin Petit
--         <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?body=[VK_ARM_data_graph] @kpet%0A*Here describe the issue or question you have about the VK_ARM_data_graph extension* >
--
-- == Other Extension Metadata
--
-- [__Last Modified Date__]
--     2025-06-18
--
-- [__Interactions and External Dependencies__]
--
--     -   This extension requires
--         <https://htmlpreview.github.io/?https://github.com/KhronosGroup/SPIRV-Registry/blob/master/extensions/EXT/SPV_ARM_graph.html SPV_ARM_graph>
--
--     -   This extension interacts with @VK_EXT_mutable_descriptor_type@
--
--     -   This extension interacts with @VK_EXT_pipeline_protected_access@
--
--     -   This extension interacts with @VK_ARM_tensors@
--
--     -   This extension interacts with @VK_EXT_descriptor_buffer@
--
--     -   This extension interacts with @VK_KHR_maintenance6@
--
-- [__IP Status__]
--     No known IP claims.
--
-- [__Contributors__]
--
--     -   Kévin Petit, Arm Ltd.
--
--     -   Emma Ben Yossef, Arm Ltd.
--
--     -   Stefano Bucciarelli, Arm Ltd.
--
--     -   Marco Cattani, Arm Ltd.
--
--     -   Aaron DeBattista, Arm Ltd.
--
--     -   Jan-Harald Fredriksen, Arm Ltd.
--
--     -   Einar Hov, Arm Ltd.
--
--     -   Robert Hughes, Arm Ltd.
--
--     -   Oualid Khelifi, Arm Ltd.
--
--     -   Derek Lamberti, Arm Ltd.
--
--     -   Chetan Mistry, Arm Ltd.
--
--     -   Georgios Teneketzis, Arm Ltd.
--
--     -   Matthew Netsch, Qualcomm Technologies, Inc
--
-- == Description
--
-- This extension adds support for a new type of pipeline, data graph
-- pipelines, that provide an encapsulation construct for computational
-- graphs operating on full resources (e.g. ML\/AI graphs, image processing
-- pipelines, etc). This extension only supports tensor resources and does
-- not define any operations that can be used within those graphs. These
-- operations will be defined by separate extensions.
--
-- == New Object Types
--
-- -   'Vulkan.Extensions.Handles.DataGraphPipelineSessionARM'
--
-- == New Commands
--
-- -   'bindDataGraphPipelineSessionMemoryARM'
--
-- -   'cmdDispatchDataGraphARM'
--
-- -   'createDataGraphPipelineSessionARM'
--
-- -   'createDataGraphPipelinesARM'
--
-- -   'destroyDataGraphPipelineSessionARM'
--
-- -   'getDataGraphPipelineAvailablePropertiesARM'
--
-- -   'getDataGraphPipelinePropertiesARM'
--
-- -   'getDataGraphPipelineSessionBindPointRequirementsARM'
--
-- -   'getDataGraphPipelineSessionMemoryRequirementsARM'
--
-- -   'getPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM'
--
-- -   'getPhysicalDeviceQueueFamilyDataGraphPropertiesARM'
--
-- == New Structures
--
-- -   'BindDataGraphPipelineSessionMemoryInfoARM'
--
-- -   'DataGraphPipelineConstantARM'
--
-- -   'DataGraphPipelineCreateInfoARM'
--
-- -   'DataGraphPipelineDispatchInfoARM'
--
-- -   'DataGraphPipelineInfoARM'
--
-- -   'DataGraphPipelinePropertyQueryResultARM'
--
-- -   'DataGraphPipelineResourceInfoARM'
--
-- -   'DataGraphPipelineSessionBindPointRequirementARM'
--
-- -   'DataGraphPipelineSessionBindPointRequirementsInfoARM'
--
-- -   'DataGraphPipelineSessionCreateInfoARM'
--
-- -   'DataGraphPipelineSessionMemoryRequirementsInfoARM'
--
-- -   'PhysicalDeviceDataGraphOperationSupportARM'
--
-- -   'PhysicalDeviceDataGraphProcessingEngineARM'
--
-- -   'PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM'
--
-- -   'QueueFamilyDataGraphProcessingEnginePropertiesARM'
--
-- -   'QueueFamilyDataGraphPropertiesARM'
--
-- -   Extending 'DataGraphPipelineCreateInfoARM':
--
--     -   'DataGraphPipelineCompilerControlCreateInfoARM'
--
--     -   'DataGraphPipelineIdentifierCreateInfoARM'
--
--     -   'DataGraphPipelineShaderModuleCreateInfoARM'
--
-- -   Extending 'DataGraphPipelineCreateInfoARM',
--     'Vulkan.Core10.DescriptorSet.DescriptorPoolCreateInfo',
--     'Vulkan.Core10.CommandPool.CommandPoolCreateInfo':
--
--     -   'DataGraphProcessingEngineCreateInfoARM'
--
-- -   Extending
--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--     'Vulkan.Core10.Device.DeviceCreateInfo':
--
--     -   'PhysicalDeviceDataGraphFeaturesARM'
--
-- If
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ARM_tensors VK_ARM_tensors>
-- is supported:
--
-- -   Extending 'DataGraphPipelineConstantARM':
--
--     -   'DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM'
--
-- == New Enums
--
-- -   'DataGraphPipelineDispatchFlagBitsARM'
--
-- -   'DataGraphPipelinePropertyARM'
--
-- -   'DataGraphPipelineSessionBindPointARM'
--
-- -   'DataGraphPipelineSessionBindPointTypeARM'
--
-- -   'DataGraphPipelineSessionCreateFlagBitsARM'
--
-- -   'PhysicalDeviceDataGraphOperationTypeARM'
--
-- -   'PhysicalDeviceDataGraphProcessingEngineTypeARM'
--
-- == New Bitmasks
--
-- -   'DataGraphPipelineDispatchFlagsARM'
--
-- -   'DataGraphPipelineSessionCreateFlagsARM'
--
-- == New Enum Constants
--
-- -   'ARM_DATA_GRAPH_EXTENSION_NAME'
--
-- -   'ARM_DATA_GRAPH_SPEC_VERSION'
--
-- -   'Vulkan.Core10.APIConstants.MAX_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_SET_NAME_SIZE_ARM'
--
-- -   Extending 'Vulkan.Core13.Enums.AccessFlags2.AccessFlagBits2':
--
--     -   'Vulkan.Core13.Enums.AccessFlags2.ACCESS_2_DATA_GRAPH_READ_BIT_ARM'
--
--     -   'Vulkan.Core13.Enums.AccessFlags2.ACCESS_2_DATA_GRAPH_WRITE_BIT_ARM'
--
-- -   Extending
--     'Vulkan.Core14.Enums.BufferUsageFlags2.BufferUsageFlagBits2':
--
--     -   'Vulkan.Core14.Enums.BufferUsageFlags2.BUFFER_USAGE_2_DATA_GRAPH_FOREIGN_DESCRIPTOR_BIT_ARM'
--
-- -   Extending
--     'Vulkan.Core13.Enums.FormatFeatureFlags2.FormatFeatureFlagBits2':
--
--     -   'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_TENSOR_DATA_GRAPH_BIT_ARM'
--
-- -   Extending 'Vulkan.Core10.Enums.ObjectType.ObjectType':
--
--     -   'Vulkan.Core10.Enums.ObjectType.OBJECT_TYPE_DATA_GRAPH_PIPELINE_SESSION_ARM'
--
-- -   Extending 'Vulkan.Core10.Enums.PipelineBindPoint.PipelineBindPoint':
--
--     -   'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_DATA_GRAPH_ARM'
--
-- -   Extending
--     'Vulkan.Core13.Enums.PipelineStageFlags2.PipelineStageFlagBits2':
--
--     -   'Vulkan.Core13.Enums.PipelineStageFlags2.PIPELINE_STAGE_2_DATA_GRAPH_BIT_ARM'
--
-- -   Extending 'Vulkan.Core10.Enums.QueueFlagBits.QueueFlagBits':
--
--     -   'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_DATA_GRAPH_BIT_ARM'
--
-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_BIND_DATA_GRAPH_PIPELINE_SESSION_MEMORY_INFO_ARM'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_COMPILER_CONTROL_CREATE_INFO_ARM'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_CONSTANT_ARM'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_CREATE_INFO_ARM'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_DISPATCH_INFO_ARM'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_IDENTIFIER_CREATE_INFO_ARM'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_INFO_ARM'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_PROPERTY_QUERY_RESULT_ARM'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_RESOURCE_INFO_ARM'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_REQUIREMENTS_INFO_ARM'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_REQUIREMENT_ARM'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SESSION_CREATE_INFO_ARM'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SESSION_MEMORY_REQUIREMENTS_INFO_ARM'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SHADER_MODULE_CREATE_INFO_ARM'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DATA_GRAPH_PROCESSING_ENGINE_CREATE_INFO_ARM'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_DATA_GRAPH_FEATURES_ARM'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_QUEUE_FAMILY_DATA_GRAPH_PROCESSING_ENGINE_INFO_ARM'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_QUEUE_FAMILY_DATA_GRAPH_PROCESSING_ENGINE_PROPERTIES_ARM'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_QUEUE_FAMILY_DATA_GRAPH_PROPERTIES_ARM'
--
-- -   Extending 'Vulkan.Extensions.VK_ARM_tensors.TensorUsageFlagBitsARM':
--
--     -   'Vulkan.Extensions.VK_ARM_tensors.TENSOR_USAGE_DATA_GRAPH_BIT_ARM'
--
-- If
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ARM_tensors VK_ARM_tensors>
-- is supported:
--
-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_CONSTANT_TENSOR_SEMI_STRUCTURED_SPARSITY_INFO_ARM'
--
-- == New SPIR-V Capabilities
--
-- -   <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#spirvenv-capabilities-table-GraphARM GraphARM>
--
-- == Issues
--
-- 1) Should graph pipeline resource info structures be integrated into
-- pipeline layouts? Would a new graph pipeline layout be a better fit?
--
-- __RESOLVED__: Graph pipeline resource info are passed separately at
-- pipeline creation time.
--
-- 2) Do we need a new shader stage for graph pipelines for use in creating
-- descriptor set layouts?
--
-- __RESOLVED__: Currently using
-- 'Vulkan.Core10.Enums.ShaderStageFlagBits.SHADER_STAGE_ALL'.
--
-- 3) Should this extension provide applications with a way of knowing
-- which combinations of sparsity information implementations can take
-- advantage of when processing graph constants?
--
-- __RESOLVED__: No. Describing the exact combinations is in some cases
-- complex and it is always valid for implementations to ignore the
-- sparsity information and treat the data as dense. Specific
-- implementations can provide guidance to application writers if they so
-- desire and applications are encouraged to always provide sparsity
-- information that they have.
--
-- == Version History
--
-- -   Revision 1, 2025-06-18 (Kévin Petit)
--
--     -   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_ARM_data_graph Vulkan Specification>.
--
-- This page is a generated document. Fixes and changes should be made to
-- the generator scripts, not directly.
module Vulkan.Extensions.VK_ARM_data_graph  ( createDataGraphPipelinesARM
                                            , createDataGraphPipelineSessionARM
                                            , withDataGraphPipelineSessionARM
                                            , getDataGraphPipelineSessionBindPointRequirementsARM
                                            , getDataGraphPipelineSessionMemoryRequirementsARM
                                            , bindDataGraphPipelineSessionMemoryARM
                                            , destroyDataGraphPipelineSessionARM
                                            , cmdDispatchDataGraphARM
                                            , getDataGraphPipelineAvailablePropertiesARM
                                            , getDataGraphPipelinePropertiesARM
                                            , getPhysicalDeviceQueueFamilyDataGraphPropertiesARM
                                            , getPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM
                                            , PhysicalDeviceDataGraphFeaturesARM(..)
                                            , DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM(..)
                                            , DataGraphPipelineConstantARM(..)
                                            , DataGraphPipelineResourceInfoARM(..)
                                            , DataGraphPipelineCompilerControlCreateInfoARM(..)
                                            , DataGraphPipelineCreateInfoARM(..)
                                            , DataGraphPipelineShaderModuleCreateInfoARM(..)
                                            , DataGraphPipelineSessionCreateInfoARM(..)
                                            , DataGraphPipelineSessionBindPointRequirementsInfoARM(..)
                                            , DataGraphPipelineSessionBindPointRequirementARM(..)
                                            , DataGraphPipelineSessionMemoryRequirementsInfoARM(..)
                                            , BindDataGraphPipelineSessionMemoryInfoARM(..)
                                            , DataGraphPipelineInfoARM(..)
                                            , DataGraphPipelinePropertyQueryResultARM(..)
                                            , DataGraphPipelineIdentifierCreateInfoARM(..)
                                            , DataGraphPipelineDispatchInfoARM(..)
                                            , PhysicalDeviceDataGraphProcessingEngineARM(..)
                                            , PhysicalDeviceDataGraphOperationSupportARM(..)
                                            , QueueFamilyDataGraphPropertiesARM(..)
                                            , PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM(..)
                                            , QueueFamilyDataGraphProcessingEnginePropertiesARM(..)
                                            , DataGraphProcessingEngineCreateInfoARM(..)
                                            , DataGraphPipelineSessionCreateFlagsARM
                                            , DataGraphPipelineSessionCreateFlagBitsARM( DATA_GRAPH_PIPELINE_SESSION_CREATE_PROTECTED_BIT_ARM
                                                                                       , ..
                                                                                       )
                                            , DataGraphPipelineSessionBindPointARM( DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_TRANSIENT_ARM
                                                                                  , ..
                                                                                  )
                                            , DataGraphPipelineSessionBindPointTypeARM( DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_TYPE_MEMORY_ARM
                                                                                      , ..
                                                                                      )
                                            , DataGraphPipelinePropertyARM( DATA_GRAPH_PIPELINE_PROPERTY_CREATION_LOG_ARM
                                                                          , DATA_GRAPH_PIPELINE_PROPERTY_IDENTIFIER_ARM
                                                                          , ..
                                                                          )
                                            , DataGraphPipelineDispatchFlagsARM
                                            , DataGraphPipelineDispatchFlagBitsARM(..)
                                            , PhysicalDeviceDataGraphProcessingEngineTypeARM( PHYSICAL_DEVICE_DATA_GRAPH_PROCESSING_ENGINE_TYPE_DEFAULT_ARM
                                                                                            , PHYSICAL_DEVICE_DATA_GRAPH_PROCESSING_ENGINE_TYPE_COMPUTE_QCOM
                                                                                            , PHYSICAL_DEVICE_DATA_GRAPH_PROCESSING_ENGINE_TYPE_NEURAL_QCOM
                                                                                            , ..
                                                                                            )
                                            , PhysicalDeviceDataGraphOperationTypeARM( PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_TYPE_SPIRV_EXTENDED_INSTRUCTION_SET_ARM
                                                                                     , PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_TYPE_BUILTIN_MODEL_QCOM
                                                                                     , PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_TYPE_NEURAL_MODEL_QCOM
                                                                                     , ..
                                                                                     )
                                            , ARM_DATA_GRAPH_SPEC_VERSION
                                            , pattern ARM_DATA_GRAPH_SPEC_VERSION
                                            , ARM_DATA_GRAPH_EXTENSION_NAME
                                            , pattern ARM_DATA_GRAPH_EXTENSION_NAME
                                            , DeferredOperationKHR(..)
                                            , DataGraphPipelineSessionARM(..)
                                            , TensorUsageFlagBitsARM(..)
                                            , TensorUsageFlagsARM
                                            , PipelineCreateFlags2KHR
                                            , MAX_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_SET_NAME_SIZE_ARM
                                            , pattern MAX_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_SET_NAME_SIZE_ARM
                                            ) where

import Data.Bits (Bits)
import Data.Bits (FiniteBits)
import Vulkan.CStruct.Utils (FixedArray)
import Vulkan.Internal.Utils (enumReadPrec)
import Vulkan.Internal.Utils (enumShowsPrec)
import Vulkan.Internal.Utils (traceAroundEvent)
import Control.Exception.Base (bracket)
import Control.Monad (unless)
import Control.Monad.IO.Class (liftIO)
import Data.Typeable (eqT)
import Foreign.Marshal.Alloc (allocaBytes)
import Foreign.Marshal.Alloc (callocBytes)
import Foreign.Marshal.Alloc (free)
import Foreign.Marshal.Utils (maybePeek)
import GHC.Base (when)
import GHC.IO (throwIO)
import GHC.Ptr (castPtr)
import GHC.Ptr (nullFunPtr)
import Foreign.Ptr (nullPtr)
import Foreign.Ptr (plusPtr)
import GHC.Show (showString)
import GHC.Show (showsPrec)
import Numeric (showHex)
import Data.ByteString (packCString)
import Data.ByteString (useAsCString)
import Data.Coerce (coerce)
import Control.Monad.Trans.Class (lift)
import Control.Monad.Trans.Cont (evalContT)
import Data.Vector (generateM)
import qualified Data.Vector (imapM_)
import qualified Data.Vector (length)
import qualified Data.Vector (null)
import Vulkan.CStruct (FromCStruct)
import Vulkan.CStruct (FromCStruct(..))
import Vulkan.CStruct (ToCStruct)
import Vulkan.CStruct (ToCStruct(..))
import Vulkan.Zero (Zero)
import Vulkan.Zero (Zero(..))
import Control.Monad.IO.Class (MonadIO)
import Data.String (IsString)
import Data.Type.Equality ((:~:)(Refl))
import Data.Typeable (Typeable)
import Foreign.C.Types (CChar)
import Foreign.C.Types (CSize)
import Foreign.C.Types (CSize(..))
import Foreign.C.Types (CSize(CSize))
import Foreign.Storable (Storable)
import Foreign.Storable (Storable(peek))
import Foreign.Storable (Storable(poke))
import qualified Foreign.Storable (Storable(..))
import GHC.Generics (Generic)
import GHC.IO.Exception (IOErrorType(..))
import GHC.IO.Exception (IOException(..))
import Data.Int (Int32)
import Foreign.Ptr (FunPtr)
import Foreign.Ptr (Ptr)
import GHC.Read (Read(readPrec))
import GHC.Show (Show(showsPrec))
import Data.Word (Word32)
import Data.Word (Word64)
import Data.Word (Word8)
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.Utils (pokeFixedLengthNullTerminatedByteString)
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 {-# SOURCE #-} Vulkan.Extensions.VK_QCOM_data_graph_model (DataGraphPipelineBuiltinModelCreateInfoQCOM)
import Vulkan.Extensions.Handles (DataGraphPipelineSessionARM)
import Vulkan.Extensions.Handles (DataGraphPipelineSessionARM(..))
import Vulkan.Extensions.Handles (DeferredOperationKHR)
import Vulkan.Extensions.Handles (DeferredOperationKHR(..))
import Vulkan.Core10.Handles (Device)
import Vulkan.Core10.Handles (Device(..))
import Vulkan.Core10.Handles (Device(Device))
import Vulkan.Dynamic (DeviceCmds(pVkBindDataGraphPipelineSessionMemoryARM))
import Vulkan.Dynamic (DeviceCmds(pVkCmdDispatchDataGraphARM))
import Vulkan.Dynamic (DeviceCmds(pVkCreateDataGraphPipelineSessionARM))
import Vulkan.Dynamic (DeviceCmds(pVkCreateDataGraphPipelinesARM))
import Vulkan.Dynamic (DeviceCmds(pVkDestroyDataGraphPipelineSessionARM))
import Vulkan.Dynamic (DeviceCmds(pVkGetDataGraphPipelineAvailablePropertiesARM))
import Vulkan.Dynamic (DeviceCmds(pVkGetDataGraphPipelinePropertiesARM))
import Vulkan.Dynamic (DeviceCmds(pVkGetDataGraphPipelineSessionBindPointRequirementsARM))
import Vulkan.Dynamic (DeviceCmds(pVkGetDataGraphPipelineSessionMemoryRequirementsARM))
import Vulkan.Core10.Handles (DeviceMemory)
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.Core11.Enums.ExternalMemoryHandleTypeFlagBits (ExternalMemoryHandleTypeFlags)
import Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits (ExternalSemaphoreHandleTypeFlags)
import Vulkan.Core10.FundamentalTypes (Flags64)
import Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM))
import Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM))
import Vulkan.Core10.APIConstants (MAX_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_SET_NAME_SIZE_ARM)
import Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2 (MemoryRequirements2)
import Vulkan.CStruct.Extends (PeekChain)
import Vulkan.CStruct.Extends (PeekChain(..))
import Vulkan.Core10.Handles (PhysicalDevice)
import Vulkan.Core10.Handles (PhysicalDevice(..))
import Vulkan.Core10.Handles (PhysicalDevice(PhysicalDevice))
import Vulkan.Core10.Handles (PhysicalDevice_T)
import Vulkan.Core10.Handles (Pipeline)
import Vulkan.Core10.Handles (Pipeline(..))
import Vulkan.Core10.Handles (PipelineCache)
import Vulkan.Core10.Handles (PipelineCache(..))
import Vulkan.Extensions.VK_KHR_maintenance5 (PipelineCreateFlags2KHR)
import {-# SOURCE #-} Vulkan.Core13.Promoted_From_VK_EXT_pipeline_creation_feedback (PipelineCreationFeedbackCreateInfo)
import Vulkan.Core10.Handles (PipelineLayout)
import Vulkan.CStruct.Extends (PokeChain)
import Vulkan.CStruct.Extends (PokeChain(..))
import Vulkan.Core10.Enums.Result (Result)
import Vulkan.Core10.Enums.Result (Result(..))
import Vulkan.Core10.Handles (ShaderModule)
import {-# SOURCE #-} Vulkan.Core10.Shader (ShaderModuleCreateInfo)
import Vulkan.CStruct.Extends (SomeStruct)
import Vulkan.Core10.ComputePipeline (SpecializationInfo)
import Vulkan.Core10.Enums.StructureType (StructureType)
import {-# SOURCE #-} Vulkan.Extensions.VK_ARM_tensors (TensorDescriptionARM)
import Vulkan.Exception (VulkanException(..))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_BIND_DATA_GRAPH_PIPELINE_SESSION_MEMORY_INFO_ARM))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_COMPILER_CONTROL_CREATE_INFO_ARM))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_CONSTANT_ARM))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_CONSTANT_TENSOR_SEMI_STRUCTURED_SPARSITY_INFO_ARM))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_CREATE_INFO_ARM))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_DISPATCH_INFO_ARM))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_IDENTIFIER_CREATE_INFO_ARM))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_INFO_ARM))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_PROPERTY_QUERY_RESULT_ARM))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_RESOURCE_INFO_ARM))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_REQUIREMENTS_INFO_ARM))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_REQUIREMENT_ARM))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SESSION_CREATE_INFO_ARM))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SESSION_MEMORY_REQUIREMENTS_INFO_ARM))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SHADER_MODULE_CREATE_INFO_ARM))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DATA_GRAPH_PROCESSING_ENGINE_CREATE_INFO_ARM))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_DATA_GRAPH_FEATURES_ARM))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_QUEUE_FAMILY_DATA_GRAPH_PROCESSING_ENGINE_INFO_ARM))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_QUEUE_FAMILY_DATA_GRAPH_PROCESSING_ENGINE_PROPERTIES_ARM))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_QUEUE_FAMILY_DATA_GRAPH_PROPERTIES_ARM))
import Vulkan.Core10.Enums.Result (Result(SUCCESS))
import Vulkan.Extensions.Handles (DataGraphPipelineSessionARM(..))
import Vulkan.Extensions.Handles (DeferredOperationKHR(..))
import Vulkan.Core10.APIConstants (MAX_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_SET_NAME_SIZE_ARM)
import Vulkan.Extensions.VK_KHR_maintenance5 (PipelineCreateFlags2KHR)
import Vulkan.Extensions.VK_ARM_tensors (TensorUsageFlagBitsARM(..))
import Vulkan.Extensions.VK_ARM_tensors (TensorUsageFlagsARM)
import Vulkan.Core10.APIConstants (pattern MAX_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_SET_NAME_SIZE_ARM)
foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkCreateDataGraphPipelinesARM
  :: FunPtr (Ptr Device_T -> DeferredOperationKHR -> PipelineCache -> Word32 -> Ptr (SomeStruct DataGraphPipelineCreateInfoARM) -> Ptr AllocationCallbacks -> Ptr Pipeline -> IO Result) -> Ptr Device_T -> DeferredOperationKHR -> PipelineCache -> Word32 -> Ptr (SomeStruct DataGraphPipelineCreateInfoARM) -> Ptr AllocationCallbacks -> Ptr Pipeline -> IO Result

-- | vkCreateDataGraphPipelinesARM - Create data graph pipeline objects
--
-- = Description
--
-- The implementation will create a pipeline in each element of
-- @pPipelines@ from the corresponding element of @pCreateInfos@. If the
-- creation of any pipeline fails, that pipeline will be set to
-- 'Vulkan.Core10.APIConstants.NULL_HANDLE'.
--
-- == Valid Usage
--
-- -   #VUID-vkCreateDataGraphPipelinesARM-dataGraph-09760# The
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-dataGraph dataGraph>
--     feature /must/ be enabled
--
-- -   #VUID-vkCreateDataGraphPipelinesARM-device-09927# @device@ /must/
--     support at least one queue family with the
--     'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_DATA_GRAPH_BIT_ARM'
--     capability
--
-- -   #VUID-vkCreateDataGraphPipelinesARM-deferredOperation-09761#
--     @deferredOperation@ /must/ be
--     'Vulkan.Core10.APIConstants.NULL_HANDLE'
--
-- -   #VUID-vkCreateDataGraphPipelinesARM-deferredOperation-09916# If
--     @deferredOperation@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
--     the @flags@ member of elements of @pCreateInfos@ /must/ not include
--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT'
--
-- -   #VUID-vkCreateDataGraphPipelinesARM-pNext-09928# If at least one of
--     the 'DataGraphPipelineCreateInfoARM' includes a
--     'DataGraphPipelineIdentifierCreateInfoARM' structure in its @pNext@
--     chain then @pipelineCache@ /must/ not be
--     'Vulkan.Core10.APIConstants.NULL_HANDLE'
--
-- -   #VUID-vkCreateDataGraphPipelinesARM-pipelineCache-09762# 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>
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkCreateDataGraphPipelinesARM-device-parameter# @device@
--     /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
--
-- -   #VUID-vkCreateDataGraphPipelinesARM-deferredOperation-parameter# If
--     @deferredOperation@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
--     @deferredOperation@ /must/ be a valid
--     'Vulkan.Extensions.Handles.DeferredOperationKHR' handle
--
-- -   #VUID-vkCreateDataGraphPipelinesARM-pipelineCache-parameter# If
--     @pipelineCache@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
--     @pipelineCache@ /must/ be a valid
--     'Vulkan.Core10.Handles.PipelineCache' handle
--
-- -   #VUID-vkCreateDataGraphPipelinesARM-pCreateInfos-parameter#
--     @pCreateInfos@ /must/ be a valid pointer to an array of
--     @createInfoCount@ valid 'DataGraphPipelineCreateInfoARM' structures
--
-- -   #VUID-vkCreateDataGraphPipelinesARM-pAllocator-parameter# If
--     @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid pointer
--     to a valid 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
--     structure
--
-- -   #VUID-vkCreateDataGraphPipelinesARM-pPipelines-parameter#
--     @pPipelines@ /must/ be a valid pointer to an array of
--     @createInfoCount@ 'Vulkan.Core10.Handles.Pipeline' handles
--
-- -   #VUID-vkCreateDataGraphPipelinesARM-device-queuecount# The device
--     /must/ have been created with at least @1@ queue
--
-- -   #VUID-vkCreateDataGraphPipelinesARM-createInfoCount-arraylength#
--     @createInfoCount@ /must/ be greater than @0@
--
-- -   #VUID-vkCreateDataGraphPipelinesARM-deferredOperation-parent# If
--     @deferredOperation@ is a valid handle, it /must/ have been created,
--     allocated, or retrieved from @device@
--
-- -   #VUID-vkCreateDataGraphPipelinesARM-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_ARM_data_graph VK_ARM_data_graph>,
-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
-- 'DataGraphPipelineCreateInfoARM',
-- 'Vulkan.Extensions.Handles.DeferredOperationKHR',
-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.Pipeline',
-- 'Vulkan.Core10.Handles.PipelineCache'
createDataGraphPipelinesARM :: forall io
                             . (MonadIO io)
                            => -- | @device@ is the logical device that creates the data graph pipelines.
                               Device
                            -> -- | @deferredOperation@ is 'Vulkan.Core10.APIConstants.NULL_HANDLE' or the
                               -- handle of a valid 'Vulkan.Extensions.Handles.DeferredOperationKHR'
                               -- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#deferred-host-operations-requesting request deferral>
                               -- object for this command.
                               DeferredOperationKHR
                            -> -- | @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.
                               PipelineCache
                            -> -- | @pCreateInfos@ is a pointer to an array of
                               -- 'DataGraphPipelineCreateInfoARM' structures.
                               ("createInfos" ::: Vector (SomeStruct DataGraphPipelineCreateInfoARM))
                            -> -- | @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))
createDataGraphPipelinesARM :: forall (io :: * -> *).
MonadIO io =>
Device
-> DeferredOperationKHR
-> PipelineCache
-> ("createInfos"
    ::: Vector (SomeStruct DataGraphPipelineCreateInfoARM))
-> ("allocator" ::: Maybe AllocationCallbacks)
-> io (Result, "pipelines" ::: Vector Pipeline)
createDataGraphPipelinesARM Device
device
                              DeferredOperationKHR
deferredOperation
                              PipelineCache
pipelineCache
                              "createInfos"
::: Vector (SomeStruct DataGraphPipelineCreateInfoARM)
createInfos
                              "allocator" ::: Maybe AllocationCallbacks
allocator = IO (Result, "pipelines" ::: Vector Pipeline)
-> io (Result, "pipelines" ::: Vector Pipeline)
forall a. IO a -> io a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Result, "pipelines" ::: Vector Pipeline)
 -> io (Result, "pipelines" ::: Vector Pipeline))
-> (ContT
      (Result, "pipelines" ::: Vector Pipeline)
      IO
      (Result, "pipelines" ::: Vector Pipeline)
    -> IO (Result, "pipelines" ::: Vector Pipeline))
-> ContT
     (Result, "pipelines" ::: Vector Pipeline)
     IO
     (Result, "pipelines" ::: Vector Pipeline)
-> io (Result, "pipelines" ::: Vector Pipeline)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT
  (Result, "pipelines" ::: Vector Pipeline)
  IO
  (Result, "pipelines" ::: Vector Pipeline)
-> IO (Result, "pipelines" ::: Vector Pipeline)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Result, "pipelines" ::: Vector Pipeline)
   IO
   (Result, "pipelines" ::: Vector Pipeline)
 -> io (Result, "pipelines" ::: Vector Pipeline))
-> ContT
     (Result, "pipelines" ::: Vector Pipeline)
     IO
     (Result, "pipelines" ::: Vector Pipeline)
-> io (Result, "pipelines" ::: Vector Pipeline)
forall a b. (a -> b) -> a -> b
$ do
  let vkCreateDataGraphPipelinesARMPtr :: FunPtr
  (Ptr Device_T
   -> DeferredOperationKHR
   -> PipelineCache
   -> Word32
   -> Ptr (SomeStruct DataGraphPipelineCreateInfoARM)
   -> Ptr AllocationCallbacks
   -> Ptr Pipeline
   -> IO Result)
vkCreateDataGraphPipelinesARMPtr = DeviceCmds
-> FunPtr
     (Ptr Device_T
      -> DeferredOperationKHR
      -> PipelineCache
      -> Word32
      -> Ptr (SomeStruct DataGraphPipelineCreateInfoARM)
      -> Ptr AllocationCallbacks
      -> Ptr Pipeline
      -> IO Result)
pVkCreateDataGraphPipelinesARM (case Device
device of Device{DeviceCmds
deviceCmds :: DeviceCmds
deviceCmds :: Device -> DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO () -> ContT (Result, "pipelines" ::: Vector Pipeline) IO ()
forall (m :: * -> *) a.
Monad m =>
m a -> ContT (Result, "pipelines" ::: Vector Pipeline) m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT (Result, "pipelines" ::: Vector Pipeline) IO ())
-> IO () -> ContT (Result, "pipelines" ::: Vector Pipeline) IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr Device_T
   -> DeferredOperationKHR
   -> PipelineCache
   -> Word32
   -> Ptr (SomeStruct DataGraphPipelineCreateInfoARM)
   -> Ptr AllocationCallbacks
   -> Ptr Pipeline
   -> IO Result)
vkCreateDataGraphPipelinesARMPtr FunPtr
  (Ptr Device_T
   -> DeferredOperationKHR
   -> PipelineCache
   -> Word32
   -> Ptr (SomeStruct DataGraphPipelineCreateInfoARM)
   -> Ptr AllocationCallbacks
   -> Ptr Pipeline
   -> IO Result)
-> FunPtr
     (Ptr Device_T
      -> DeferredOperationKHR
      -> PipelineCache
      -> Word32
      -> Ptr (SomeStruct DataGraphPipelineCreateInfoARM)
      -> Ptr AllocationCallbacks
      -> Ptr Pipeline
      -> IO Result)
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr Device_T
   -> DeferredOperationKHR
   -> PipelineCache
   -> Word32
   -> Ptr (SomeStruct DataGraphPipelineCreateInfoARM)
   -> Ptr AllocationCallbacks
   -> Ptr 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 vkCreateDataGraphPipelinesARM is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkCreateDataGraphPipelinesARM' :: Ptr Device_T
-> DeferredOperationKHR
-> PipelineCache
-> Word32
-> Ptr (SomeStruct DataGraphPipelineCreateInfoARM)
-> Ptr AllocationCallbacks
-> Ptr Pipeline
-> IO Result
vkCreateDataGraphPipelinesARM' = FunPtr
  (Ptr Device_T
   -> DeferredOperationKHR
   -> PipelineCache
   -> Word32
   -> Ptr (SomeStruct DataGraphPipelineCreateInfoARM)
   -> Ptr AllocationCallbacks
   -> Ptr Pipeline
   -> IO Result)
-> Ptr Device_T
-> DeferredOperationKHR
-> PipelineCache
-> Word32
-> Ptr (SomeStruct DataGraphPipelineCreateInfoARM)
-> Ptr AllocationCallbacks
-> Ptr Pipeline
-> IO Result
mkVkCreateDataGraphPipelinesARM FunPtr
  (Ptr Device_T
   -> DeferredOperationKHR
   -> PipelineCache
   -> Word32
   -> Ptr (SomeStruct DataGraphPipelineCreateInfoARM)
   -> Ptr AllocationCallbacks
   -> Ptr Pipeline
   -> IO Result)
vkCreateDataGraphPipelinesARMPtr
  pPCreateInfos <- ((Ptr (DataGraphPipelineCreateInfoARM (ZonkAny 0))
  -> IO (Result, "pipelines" ::: Vector Pipeline))
 -> IO (Result, "pipelines" ::: Vector Pipeline))
-> ContT
     (Result, "pipelines" ::: Vector Pipeline)
     IO
     (Ptr (DataGraphPipelineCreateInfoARM (ZonkAny 0)))
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr (DataGraphPipelineCreateInfoARM (ZonkAny 0))
   -> IO (Result, "pipelines" ::: Vector Pipeline))
  -> IO (Result, "pipelines" ::: Vector Pipeline))
 -> ContT
      (Result, "pipelines" ::: Vector Pipeline)
      IO
      (Ptr (DataGraphPipelineCreateInfoARM (ZonkAny 0))))
-> ((Ptr (DataGraphPipelineCreateInfoARM (ZonkAny 0))
     -> IO (Result, "pipelines" ::: Vector Pipeline))
    -> IO (Result, "pipelines" ::: Vector Pipeline))
-> ContT
     (Result, "pipelines" ::: Vector Pipeline)
     IO
     (Ptr (DataGraphPipelineCreateInfoARM (ZonkAny 0)))
forall a b. (a -> b) -> a -> b
$ forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @(DataGraphPipelineCreateInfoARM _) ((("createInfos"
 ::: Vector (SomeStruct DataGraphPipelineCreateInfoARM))
-> Int
forall a. Vector a -> Int
Data.Vector.length ("createInfos"
::: Vector (SomeStruct DataGraphPipelineCreateInfoARM)
createInfos)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
48)
  Data.Vector.imapM_ (\Int
i SomeStruct DataGraphPipelineCreateInfoARM
e -> ((() -> IO (Result, "pipelines" ::: Vector Pipeline))
 -> IO (Result, "pipelines" ::: Vector Pipeline))
-> ContT (Result, "pipelines" ::: Vector Pipeline) IO ()
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((() -> IO (Result, "pipelines" ::: Vector Pipeline))
  -> IO (Result, "pipelines" ::: Vector Pipeline))
 -> ContT (Result, "pipelines" ::: Vector Pipeline) IO ())
-> ((() -> IO (Result, "pipelines" ::: Vector Pipeline))
    -> IO (Result, "pipelines" ::: Vector Pipeline))
-> ContT (Result, "pipelines" ::: Vector Pipeline) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (SomeStruct DataGraphPipelineCreateInfoARM)
-> SomeStruct DataGraphPipelineCreateInfoARM
-> IO (Result, "pipelines" ::: Vector Pipeline)
-> IO (Result, "pipelines" ::: Vector 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 (DataGraphPipelineCreateInfoARM (ZonkAny 1))
-> Ptr (SomeStruct DataGraphPipelineCreateInfoARM)
forall (a :: [*] -> *) (es :: [*]).
Ptr (a es) -> Ptr (SomeStruct a)
forgetExtensions (Ptr (DataGraphPipelineCreateInfoARM (ZonkAny 0))
pPCreateInfos Ptr (DataGraphPipelineCreateInfoARM (ZonkAny 0))
-> Int -> Ptr (DataGraphPipelineCreateInfoARM 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 (DataGraphPipelineCreateInfoARM _))) (SomeStruct DataGraphPipelineCreateInfoARM
e) (IO (Result, "pipelines" ::: Vector Pipeline)
 -> IO (Result, "pipelines" ::: Vector Pipeline))
-> ((() -> IO (Result, "pipelines" ::: Vector Pipeline))
    -> IO (Result, "pipelines" ::: Vector Pipeline))
-> (() -> IO (Result, "pipelines" ::: Vector Pipeline))
-> IO (Result, "pipelines" ::: Vector Pipeline)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((() -> IO (Result, "pipelines" ::: Vector Pipeline))
-> () -> IO (Result, "pipelines" ::: Vector Pipeline)
forall a b. (a -> b) -> a -> b
$ ())) (createInfos)
  pAllocator <- case (allocator) of
    "allocator" ::: Maybe AllocationCallbacks
Nothing -> Ptr AllocationCallbacks
-> ContT
     (Result, "pipelines" ::: Vector Pipeline)
     IO
     (Ptr AllocationCallbacks)
forall a. a -> ContT (Result, "pipelines" ::: Vector 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 Pipeline))
 -> IO (Result, "pipelines" ::: Vector Pipeline))
-> ContT
     (Result, "pipelines" ::: Vector 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 Pipeline))
  -> IO (Result, "pipelines" ::: Vector Pipeline))
 -> ContT
      (Result, "pipelines" ::: Vector Pipeline)
      IO
      (Ptr AllocationCallbacks))
-> ((Ptr AllocationCallbacks
     -> IO (Result, "pipelines" ::: Vector Pipeline))
    -> IO (Result, "pipelines" ::: Vector Pipeline))
-> ContT
     (Result, "pipelines" ::: Vector Pipeline)
     IO
     (Ptr AllocationCallbacks)
forall a b. (a -> b) -> a -> b
$ AllocationCallbacks
-> (Ptr AllocationCallbacks
    -> IO (Result, "pipelines" ::: Vector Pipeline))
-> IO (Result, "pipelines" ::: Vector 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 "vkCreateDataGraphPipelinesARM" (vkCreateDataGraphPipelinesARM'
                                                                  (deviceHandle (device))
                                                                  (deferredOperation)
                                                                  (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 Pipeline
pPPipelines Ptr Pipeline -> Int -> Ptr Pipeline
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
8 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr Pipeline)))
  pure $ (r, pPipelines)


foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkCreateDataGraphPipelineSessionARM
  :: FunPtr (Ptr Device_T -> Ptr DataGraphPipelineSessionCreateInfoARM -> Ptr AllocationCallbacks -> Ptr DataGraphPipelineSessionARM -> IO Result) -> Ptr Device_T -> Ptr DataGraphPipelineSessionCreateInfoARM -> Ptr AllocationCallbacks -> Ptr DataGraphPipelineSessionARM -> IO Result

-- | vkCreateDataGraphPipelineSessionARM - Create a data graph pipeline
-- session
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkCreateDataGraphPipelineSessionARM-device-parameter# @device@
--     /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
--
-- -   #VUID-vkCreateDataGraphPipelineSessionARM-pCreateInfo-parameter#
--     @pCreateInfo@ /must/ be a valid pointer to a valid
--     'DataGraphPipelineSessionCreateInfoARM' structure
--
-- -   #VUID-vkCreateDataGraphPipelineSessionARM-pAllocator-parameter# If
--     @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid pointer
--     to a valid 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
--     structure
--
-- -   #VUID-vkCreateDataGraphPipelineSessionARM-pSession-parameter#
--     @pSession@ /must/ be a valid pointer to a
--     'Vulkan.Extensions.Handles.DataGraphPipelineSessionARM' handle
--
-- -   #VUID-vkCreateDataGraphPipelineSessionARM-device-queuecount# The
--     device /must/ have been created with at least @1@ queue
--
-- == 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_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_ARM_data_graph VK_ARM_data_graph>,
-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
-- 'Vulkan.Extensions.Handles.DataGraphPipelineSessionARM',
-- 'DataGraphPipelineSessionCreateInfoARM', 'Vulkan.Core10.Handles.Device'
createDataGraphPipelineSessionARM :: forall io
                                   . (MonadIO io)
                                  => -- | @device@ is the logical device that creates the data graph pipeline
                                     -- session.
                                     Device
                                  -> -- | @pCreateInfo@ is a pointer to a 'DataGraphPipelineSessionCreateInfoARM'
                                     -- structure.
                                     DataGraphPipelineSessionCreateInfoARM
                                  -> -- | @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 (DataGraphPipelineSessionARM)
createDataGraphPipelineSessionARM :: forall (io :: * -> *).
MonadIO io =>
Device
-> DataGraphPipelineSessionCreateInfoARM
-> ("allocator" ::: Maybe AllocationCallbacks)
-> io DataGraphPipelineSessionARM
createDataGraphPipelineSessionARM Device
device
                                    DataGraphPipelineSessionCreateInfoARM
createInfo
                                    "allocator" ::: Maybe AllocationCallbacks
allocator = IO DataGraphPipelineSessionARM -> io DataGraphPipelineSessionARM
forall a. IO a -> io a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO DataGraphPipelineSessionARM -> io DataGraphPipelineSessionARM)
-> (ContT
      DataGraphPipelineSessionARM IO DataGraphPipelineSessionARM
    -> IO DataGraphPipelineSessionARM)
-> ContT DataGraphPipelineSessionARM IO DataGraphPipelineSessionARM
-> io DataGraphPipelineSessionARM
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT DataGraphPipelineSessionARM IO DataGraphPipelineSessionARM
-> IO DataGraphPipelineSessionARM
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT DataGraphPipelineSessionARM IO DataGraphPipelineSessionARM
 -> io DataGraphPipelineSessionARM)
-> ContT DataGraphPipelineSessionARM IO DataGraphPipelineSessionARM
-> io DataGraphPipelineSessionARM
forall a b. (a -> b) -> a -> b
$ do
  let vkCreateDataGraphPipelineSessionARMPtr :: FunPtr
  (Ptr Device_T
   -> Ptr DataGraphPipelineSessionCreateInfoARM
   -> Ptr AllocationCallbacks
   -> Ptr DataGraphPipelineSessionARM
   -> IO Result)
vkCreateDataGraphPipelineSessionARMPtr = DeviceCmds
-> FunPtr
     (Ptr Device_T
      -> Ptr DataGraphPipelineSessionCreateInfoARM
      -> Ptr AllocationCallbacks
      -> Ptr DataGraphPipelineSessionARM
      -> IO Result)
pVkCreateDataGraphPipelineSessionARM (case Device
device of Device{DeviceCmds
deviceCmds :: Device -> DeviceCmds
deviceCmds :: DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO () -> ContT DataGraphPipelineSessionARM IO ()
forall (m :: * -> *) a.
Monad m =>
m a -> ContT DataGraphPipelineSessionARM m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT DataGraphPipelineSessionARM IO ())
-> IO () -> ContT DataGraphPipelineSessionARM IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr Device_T
   -> Ptr DataGraphPipelineSessionCreateInfoARM
   -> Ptr AllocationCallbacks
   -> Ptr DataGraphPipelineSessionARM
   -> IO Result)
vkCreateDataGraphPipelineSessionARMPtr FunPtr
  (Ptr Device_T
   -> Ptr DataGraphPipelineSessionCreateInfoARM
   -> Ptr AllocationCallbacks
   -> Ptr DataGraphPipelineSessionARM
   -> IO Result)
-> FunPtr
     (Ptr Device_T
      -> Ptr DataGraphPipelineSessionCreateInfoARM
      -> Ptr AllocationCallbacks
      -> Ptr DataGraphPipelineSessionARM
      -> IO Result)
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr Device_T
   -> Ptr DataGraphPipelineSessionCreateInfoARM
   -> Ptr AllocationCallbacks
   -> Ptr DataGraphPipelineSessionARM
   -> 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 vkCreateDataGraphPipelineSessionARM is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkCreateDataGraphPipelineSessionARM' :: Ptr Device_T
-> Ptr DataGraphPipelineSessionCreateInfoARM
-> Ptr AllocationCallbacks
-> Ptr DataGraphPipelineSessionARM
-> IO Result
vkCreateDataGraphPipelineSessionARM' = FunPtr
  (Ptr Device_T
   -> Ptr DataGraphPipelineSessionCreateInfoARM
   -> Ptr AllocationCallbacks
   -> Ptr DataGraphPipelineSessionARM
   -> IO Result)
-> Ptr Device_T
-> Ptr DataGraphPipelineSessionCreateInfoARM
-> Ptr AllocationCallbacks
-> Ptr DataGraphPipelineSessionARM
-> IO Result
mkVkCreateDataGraphPipelineSessionARM FunPtr
  (Ptr Device_T
   -> Ptr DataGraphPipelineSessionCreateInfoARM
   -> Ptr AllocationCallbacks
   -> Ptr DataGraphPipelineSessionARM
   -> IO Result)
vkCreateDataGraphPipelineSessionARMPtr
  pCreateInfo <- ((Ptr DataGraphPipelineSessionCreateInfoARM
  -> IO DataGraphPipelineSessionARM)
 -> IO DataGraphPipelineSessionARM)
-> ContT
     DataGraphPipelineSessionARM
     IO
     (Ptr DataGraphPipelineSessionCreateInfoARM)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr DataGraphPipelineSessionCreateInfoARM
   -> IO DataGraphPipelineSessionARM)
  -> IO DataGraphPipelineSessionARM)
 -> ContT
      DataGraphPipelineSessionARM
      IO
      (Ptr DataGraphPipelineSessionCreateInfoARM))
-> ((Ptr DataGraphPipelineSessionCreateInfoARM
     -> IO DataGraphPipelineSessionARM)
    -> IO DataGraphPipelineSessionARM)
-> ContT
     DataGraphPipelineSessionARM
     IO
     (Ptr DataGraphPipelineSessionCreateInfoARM)
forall a b. (a -> b) -> a -> b
$ DataGraphPipelineSessionCreateInfoARM
-> (Ptr DataGraphPipelineSessionCreateInfoARM
    -> IO DataGraphPipelineSessionARM)
-> IO DataGraphPipelineSessionARM
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
forall b.
DataGraphPipelineSessionCreateInfoARM
-> (Ptr DataGraphPipelineSessionCreateInfoARM -> IO b) -> IO b
withCStruct (DataGraphPipelineSessionCreateInfoARM
createInfo)
  pAllocator <- case (allocator) of
    "allocator" ::: Maybe AllocationCallbacks
Nothing -> Ptr AllocationCallbacks
-> ContT DataGraphPipelineSessionARM IO (Ptr AllocationCallbacks)
forall a. a -> ContT DataGraphPipelineSessionARM IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Ptr AllocationCallbacks
forall a. Ptr a
nullPtr
    Just AllocationCallbacks
j -> ((Ptr AllocationCallbacks -> IO DataGraphPipelineSessionARM)
 -> IO DataGraphPipelineSessionARM)
-> ContT DataGraphPipelineSessionARM IO (Ptr AllocationCallbacks)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr AllocationCallbacks -> IO DataGraphPipelineSessionARM)
  -> IO DataGraphPipelineSessionARM)
 -> ContT DataGraphPipelineSessionARM IO (Ptr AllocationCallbacks))
-> ((Ptr AllocationCallbacks -> IO DataGraphPipelineSessionARM)
    -> IO DataGraphPipelineSessionARM)
-> ContT DataGraphPipelineSessionARM IO (Ptr AllocationCallbacks)
forall a b. (a -> b) -> a -> b
$ AllocationCallbacks
-> (Ptr AllocationCallbacks -> IO DataGraphPipelineSessionARM)
-> IO DataGraphPipelineSessionARM
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
forall b.
AllocationCallbacks -> (Ptr AllocationCallbacks -> IO b) -> IO b
withCStruct (AllocationCallbacks
j)
  pPSession <- ContT $ bracket (callocBytes @DataGraphPipelineSessionARM 8) free
  r <- lift $ traceAroundEvent "vkCreateDataGraphPipelineSessionARM" (vkCreateDataGraphPipelineSessionARM'
                                                                        (deviceHandle (device))
                                                                        pCreateInfo
                                                                        pAllocator
                                                                        (pPSession))
  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
  pSession <- lift $ peek @DataGraphPipelineSessionARM pPSession
  pure $ (pSession)

-- | A convenience wrapper to make a compatible pair of calls to
-- 'createDataGraphPipelineSessionARM' and
-- 'destroyDataGraphPipelineSessionARM'
--
-- To ensure that 'destroyDataGraphPipelineSessionARM' is always called:
-- pass 'Control.Exception.bracket' (or the allocate function from your
-- favourite resource management library) as the last argument.
-- To just extract the pair pass '(,)' as the last argument.
--
withDataGraphPipelineSessionARM :: forall io r . MonadIO io => Device -> DataGraphPipelineSessionCreateInfoARM -> Maybe AllocationCallbacks -> (io DataGraphPipelineSessionARM -> (DataGraphPipelineSessionARM -> io ()) -> r) -> r
withDataGraphPipelineSessionARM :: forall (io :: * -> *) r.
MonadIO io =>
Device
-> DataGraphPipelineSessionCreateInfoARM
-> ("allocator" ::: Maybe AllocationCallbacks)
-> (io DataGraphPipelineSessionARM
    -> (DataGraphPipelineSessionARM -> io ()) -> r)
-> r
withDataGraphPipelineSessionARM Device
device DataGraphPipelineSessionCreateInfoARM
pCreateInfo "allocator" ::: Maybe AllocationCallbacks
pAllocator io DataGraphPipelineSessionARM
-> (DataGraphPipelineSessionARM -> io ()) -> r
b =
  io DataGraphPipelineSessionARM
-> (DataGraphPipelineSessionARM -> io ()) -> r
b (Device
-> DataGraphPipelineSessionCreateInfoARM
-> ("allocator" ::: Maybe AllocationCallbacks)
-> io DataGraphPipelineSessionARM
forall (io :: * -> *).
MonadIO io =>
Device
-> DataGraphPipelineSessionCreateInfoARM
-> ("allocator" ::: Maybe AllocationCallbacks)
-> io DataGraphPipelineSessionARM
createDataGraphPipelineSessionARM Device
device DataGraphPipelineSessionCreateInfoARM
pCreateInfo "allocator" ::: Maybe AllocationCallbacks
pAllocator)
    (\(DataGraphPipelineSessionARM
o0) -> Device
-> DataGraphPipelineSessionARM
-> ("allocator" ::: Maybe AllocationCallbacks)
-> io ()
forall (io :: * -> *).
MonadIO io =>
Device
-> DataGraphPipelineSessionARM
-> ("allocator" ::: Maybe AllocationCallbacks)
-> io ()
destroyDataGraphPipelineSessionARM Device
device DataGraphPipelineSessionARM
o0 "allocator" ::: Maybe AllocationCallbacks
pAllocator)


foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkGetDataGraphPipelineSessionBindPointRequirementsARM
  :: FunPtr (Ptr Device_T -> Ptr DataGraphPipelineSessionBindPointRequirementsInfoARM -> Ptr Word32 -> Ptr DataGraphPipelineSessionBindPointRequirementARM -> IO Result) -> Ptr Device_T -> Ptr DataGraphPipelineSessionBindPointRequirementsInfoARM -> Ptr Word32 -> Ptr DataGraphPipelineSessionBindPointRequirementARM -> IO Result

-- | vkGetDataGraphPipelineSessionBindPointRequirementsARM - Get the bind
-- point requirements of a data graph pipeline session
--
-- = Description
--
-- If @pBindPointRequirements@ is @NULL@, then the number of bind points
-- associated with the data graph pipeline session is returned in
-- @pBindPointRequirementCount@. Otherwise, @pBindPointRequirementCount@
-- /must/ point to a variable set by the user to the number of elements in
-- the @pBindPointRequirements@ array, and on return the variable is
-- overwritten with the number of structures actually written to
-- @pBindPointRequirements@. If @pBindPointRequirementCount@ is less than
-- the number of bind points associated with the data graph pipeline
-- session, at most @pBindPointRequirementCount@ structures will be
-- written, and 'Vulkan.Core10.Enums.Result.INCOMPLETE' will be returned
-- instead of 'Vulkan.Core10.Enums.Result.SUCCESS', to indicate that not
-- all the required bind points were returned.
--
-- == Valid Usage
--
-- -   #VUID-vkGetDataGraphPipelineSessionBindPointRequirementsARM-session-09783#
--     The @session@ member of @pInfo@ /must/ have been created with
--     @device@
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkGetDataGraphPipelineSessionBindPointRequirementsARM-device-parameter#
--     @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
--
-- -   #VUID-vkGetDataGraphPipelineSessionBindPointRequirementsARM-pInfo-parameter#
--     @pInfo@ /must/ be a valid pointer to a valid
--     'DataGraphPipelineSessionBindPointRequirementsInfoARM' structure
--
-- -   #VUID-vkGetDataGraphPipelineSessionBindPointRequirementsARM-pBindPointRequirementCount-parameter#
--     @pBindPointRequirementCount@ /must/ be a valid pointer to a
--     @uint32_t@ value
--
-- -   #VUID-vkGetDataGraphPipelineSessionBindPointRequirementsARM-pBindPointRequirements-parameter#
--     If the value referenced by @pBindPointRequirementCount@ is not @0@,
--     and @pBindPointRequirements@ is not @NULL@, @pBindPointRequirements@
--     /must/ be a valid pointer to an array of
--     @pBindPointRequirementCount@
--     'DataGraphPipelineSessionBindPointRequirementARM' structures
--
-- == Return Codes
--
-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
--
--     -   'Vulkan.Core10.Enums.Result.INCOMPLETE'
--
--     -   '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_ARM_data_graph VK_ARM_data_graph>,
-- 'DataGraphPipelineSessionBindPointRequirementARM',
-- 'DataGraphPipelineSessionBindPointRequirementsInfoARM',
-- 'Vulkan.Core10.Handles.Device'
getDataGraphPipelineSessionBindPointRequirementsARM :: forall io
                                                     . (MonadIO io)
                                                    => -- | @device@ is the logical device that owns the data graph pipeline
                                                       -- session.
                                                       Device
                                                    -> -- | @pInfo@ is a pointer to a
                                                       -- 'DataGraphPipelineSessionBindPointRequirementsInfoARM' structure
                                                       -- containing parameters for the bind point requirements query.
                                                       DataGraphPipelineSessionBindPointRequirementsInfoARM
                                                    -> io (Result, ("bindPointRequirements" ::: Vector DataGraphPipelineSessionBindPointRequirementARM))
getDataGraphPipelineSessionBindPointRequirementsARM :: forall (io :: * -> *).
MonadIO io =>
Device
-> DataGraphPipelineSessionBindPointRequirementsInfoARM
-> io
     (Result,
      "bindPointRequirements"
      ::: Vector DataGraphPipelineSessionBindPointRequirementARM)
getDataGraphPipelineSessionBindPointRequirementsARM Device
device
                                                      DataGraphPipelineSessionBindPointRequirementsInfoARM
info = IO
  (Result,
   "bindPointRequirements"
   ::: Vector DataGraphPipelineSessionBindPointRequirementARM)
-> io
     (Result,
      "bindPointRequirements"
      ::: Vector DataGraphPipelineSessionBindPointRequirementARM)
forall a. IO a -> io a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Result,
    "bindPointRequirements"
    ::: Vector DataGraphPipelineSessionBindPointRequirementARM)
 -> io
      (Result,
       "bindPointRequirements"
       ::: Vector DataGraphPipelineSessionBindPointRequirementARM))
-> (ContT
      (Result,
       "bindPointRequirements"
       ::: Vector DataGraphPipelineSessionBindPointRequirementARM)
      IO
      (Result,
       "bindPointRequirements"
       ::: Vector DataGraphPipelineSessionBindPointRequirementARM)
    -> IO
         (Result,
          "bindPointRequirements"
          ::: Vector DataGraphPipelineSessionBindPointRequirementARM))
-> ContT
     (Result,
      "bindPointRequirements"
      ::: Vector DataGraphPipelineSessionBindPointRequirementARM)
     IO
     (Result,
      "bindPointRequirements"
      ::: Vector DataGraphPipelineSessionBindPointRequirementARM)
-> io
     (Result,
      "bindPointRequirements"
      ::: Vector DataGraphPipelineSessionBindPointRequirementARM)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT
  (Result,
   "bindPointRequirements"
   ::: Vector DataGraphPipelineSessionBindPointRequirementARM)
  IO
  (Result,
   "bindPointRequirements"
   ::: Vector DataGraphPipelineSessionBindPointRequirementARM)
-> IO
     (Result,
      "bindPointRequirements"
      ::: Vector DataGraphPipelineSessionBindPointRequirementARM)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Result,
    "bindPointRequirements"
    ::: Vector DataGraphPipelineSessionBindPointRequirementARM)
   IO
   (Result,
    "bindPointRequirements"
    ::: Vector DataGraphPipelineSessionBindPointRequirementARM)
 -> io
      (Result,
       "bindPointRequirements"
       ::: Vector DataGraphPipelineSessionBindPointRequirementARM))
-> ContT
     (Result,
      "bindPointRequirements"
      ::: Vector DataGraphPipelineSessionBindPointRequirementARM)
     IO
     (Result,
      "bindPointRequirements"
      ::: Vector DataGraphPipelineSessionBindPointRequirementARM)
-> io
     (Result,
      "bindPointRequirements"
      ::: Vector DataGraphPipelineSessionBindPointRequirementARM)
forall a b. (a -> b) -> a -> b
$ do
  let vkGetDataGraphPipelineSessionBindPointRequirementsARMPtr :: FunPtr
  (Ptr Device_T
   -> Ptr DataGraphPipelineSessionBindPointRequirementsInfoARM
   -> Ptr Word32
   -> Ptr DataGraphPipelineSessionBindPointRequirementARM
   -> IO Result)
vkGetDataGraphPipelineSessionBindPointRequirementsARMPtr = DeviceCmds
-> FunPtr
     (Ptr Device_T
      -> Ptr DataGraphPipelineSessionBindPointRequirementsInfoARM
      -> Ptr Word32
      -> Ptr DataGraphPipelineSessionBindPointRequirementARM
      -> IO Result)
pVkGetDataGraphPipelineSessionBindPointRequirementsARM (case Device
device of Device{DeviceCmds
deviceCmds :: Device -> DeviceCmds
deviceCmds :: DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO ()
-> ContT
     (Result,
      "bindPointRequirements"
      ::: Vector DataGraphPipelineSessionBindPointRequirementARM)
     IO
     ()
forall (m :: * -> *) a.
Monad m =>
m a
-> ContT
     (Result,
      "bindPointRequirements"
      ::: Vector DataGraphPipelineSessionBindPointRequirementARM)
     m
     a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO ()
 -> ContT
      (Result,
       "bindPointRequirements"
       ::: Vector DataGraphPipelineSessionBindPointRequirementARM)
      IO
      ())
-> IO ()
-> ContT
     (Result,
      "bindPointRequirements"
      ::: Vector DataGraphPipelineSessionBindPointRequirementARM)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr Device_T
   -> Ptr DataGraphPipelineSessionBindPointRequirementsInfoARM
   -> Ptr Word32
   -> Ptr DataGraphPipelineSessionBindPointRequirementARM
   -> IO Result)
vkGetDataGraphPipelineSessionBindPointRequirementsARMPtr FunPtr
  (Ptr Device_T
   -> Ptr DataGraphPipelineSessionBindPointRequirementsInfoARM
   -> Ptr Word32
   -> Ptr DataGraphPipelineSessionBindPointRequirementARM
   -> IO Result)
-> FunPtr
     (Ptr Device_T
      -> Ptr DataGraphPipelineSessionBindPointRequirementsInfoARM
      -> Ptr Word32
      -> Ptr DataGraphPipelineSessionBindPointRequirementARM
      -> IO Result)
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr Device_T
   -> Ptr DataGraphPipelineSessionBindPointRequirementsInfoARM
   -> Ptr Word32
   -> Ptr DataGraphPipelineSessionBindPointRequirementARM
   -> 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 vkGetDataGraphPipelineSessionBindPointRequirementsARM is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkGetDataGraphPipelineSessionBindPointRequirementsARM' :: Ptr Device_T
-> Ptr DataGraphPipelineSessionBindPointRequirementsInfoARM
-> Ptr Word32
-> Ptr DataGraphPipelineSessionBindPointRequirementARM
-> IO Result
vkGetDataGraphPipelineSessionBindPointRequirementsARM' = FunPtr
  (Ptr Device_T
   -> Ptr DataGraphPipelineSessionBindPointRequirementsInfoARM
   -> Ptr Word32
   -> Ptr DataGraphPipelineSessionBindPointRequirementARM
   -> IO Result)
-> Ptr Device_T
-> Ptr DataGraphPipelineSessionBindPointRequirementsInfoARM
-> Ptr Word32
-> Ptr DataGraphPipelineSessionBindPointRequirementARM
-> IO Result
mkVkGetDataGraphPipelineSessionBindPointRequirementsARM FunPtr
  (Ptr Device_T
   -> Ptr DataGraphPipelineSessionBindPointRequirementsInfoARM
   -> Ptr Word32
   -> Ptr DataGraphPipelineSessionBindPointRequirementARM
   -> IO Result)
vkGetDataGraphPipelineSessionBindPointRequirementsARMPtr
  let device' :: Ptr Device_T
device' = Device -> Ptr Device_T
deviceHandle (Device
device)
  pInfo <- ((Ptr DataGraphPipelineSessionBindPointRequirementsInfoARM
  -> IO
       (Result,
        "bindPointRequirements"
        ::: Vector DataGraphPipelineSessionBindPointRequirementARM))
 -> IO
      (Result,
       "bindPointRequirements"
       ::: Vector DataGraphPipelineSessionBindPointRequirementARM))
-> ContT
     (Result,
      "bindPointRequirements"
      ::: Vector DataGraphPipelineSessionBindPointRequirementARM)
     IO
     (Ptr DataGraphPipelineSessionBindPointRequirementsInfoARM)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr DataGraphPipelineSessionBindPointRequirementsInfoARM
   -> IO
        (Result,
         "bindPointRequirements"
         ::: Vector DataGraphPipelineSessionBindPointRequirementARM))
  -> IO
       (Result,
        "bindPointRequirements"
        ::: Vector DataGraphPipelineSessionBindPointRequirementARM))
 -> ContT
      (Result,
       "bindPointRequirements"
       ::: Vector DataGraphPipelineSessionBindPointRequirementARM)
      IO
      (Ptr DataGraphPipelineSessionBindPointRequirementsInfoARM))
-> ((Ptr DataGraphPipelineSessionBindPointRequirementsInfoARM
     -> IO
          (Result,
           "bindPointRequirements"
           ::: Vector DataGraphPipelineSessionBindPointRequirementARM))
    -> IO
         (Result,
          "bindPointRequirements"
          ::: Vector DataGraphPipelineSessionBindPointRequirementARM))
-> ContT
     (Result,
      "bindPointRequirements"
      ::: Vector DataGraphPipelineSessionBindPointRequirementARM)
     IO
     (Ptr DataGraphPipelineSessionBindPointRequirementsInfoARM)
forall a b. (a -> b) -> a -> b
$ DataGraphPipelineSessionBindPointRequirementsInfoARM
-> (Ptr DataGraphPipelineSessionBindPointRequirementsInfoARM
    -> IO
         (Result,
          "bindPointRequirements"
          ::: Vector DataGraphPipelineSessionBindPointRequirementARM))
-> IO
     (Result,
      "bindPointRequirements"
      ::: Vector DataGraphPipelineSessionBindPointRequirementARM)
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
forall b.
DataGraphPipelineSessionBindPointRequirementsInfoARM
-> (Ptr DataGraphPipelineSessionBindPointRequirementsInfoARM
    -> IO b)
-> IO b
withCStruct (DataGraphPipelineSessionBindPointRequirementsInfoARM
info)
  pPBindPointRequirementCount <- ContT $ bracket (callocBytes @Word32 4) free
  r <- lift $ traceAroundEvent "vkGetDataGraphPipelineSessionBindPointRequirementsARM" (vkGetDataGraphPipelineSessionBindPointRequirementsARM'
                                                                                          device'
                                                                                          pInfo
                                                                                          (pPBindPointRequirementCount)
                                                                                          (nullPtr))
  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
  pBindPointRequirementCount <- lift $ peek @Word32 pPBindPointRequirementCount
  pPBindPointRequirements <- ContT $ bracket (callocBytes @DataGraphPipelineSessionBindPointRequirementARM ((fromIntegral (pBindPointRequirementCount)) * 32)) free
  _ <- traverse (\Int
i -> ((()
  -> IO
       (Result,
        "bindPointRequirements"
        ::: Vector DataGraphPipelineSessionBindPointRequirementARM))
 -> IO
      (Result,
       "bindPointRequirements"
       ::: Vector DataGraphPipelineSessionBindPointRequirementARM))
-> ContT
     (Result,
      "bindPointRequirements"
      ::: Vector DataGraphPipelineSessionBindPointRequirementARM)
     IO
     ()
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((()
   -> IO
        (Result,
         "bindPointRequirements"
         ::: Vector DataGraphPipelineSessionBindPointRequirementARM))
  -> IO
       (Result,
        "bindPointRequirements"
        ::: Vector DataGraphPipelineSessionBindPointRequirementARM))
 -> ContT
      (Result,
       "bindPointRequirements"
       ::: Vector DataGraphPipelineSessionBindPointRequirementARM)
      IO
      ())
-> ((()
     -> IO
          (Result,
           "bindPointRequirements"
           ::: Vector DataGraphPipelineSessionBindPointRequirementARM))
    -> IO
         (Result,
          "bindPointRequirements"
          ::: Vector DataGraphPipelineSessionBindPointRequirementARM))
-> ContT
     (Result,
      "bindPointRequirements"
      ::: Vector DataGraphPipelineSessionBindPointRequirementARM)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr DataGraphPipelineSessionBindPointRequirementARM
-> IO
     (Result,
      "bindPointRequirements"
      ::: Vector DataGraphPipelineSessionBindPointRequirementARM)
-> IO
     (Result,
      "bindPointRequirements"
      ::: Vector DataGraphPipelineSessionBindPointRequirementARM)
forall b.
Ptr DataGraphPipelineSessionBindPointRequirementARM -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> IO b -> IO b
pokeZeroCStruct (Ptr DataGraphPipelineSessionBindPointRequirementARM
pPBindPointRequirements Ptr DataGraphPipelineSessionBindPointRequirementARM
-> Int -> Ptr DataGraphPipelineSessionBindPointRequirementARM
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
i Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
32) :: Ptr DataGraphPipelineSessionBindPointRequirementARM) (IO
   (Result,
    "bindPointRequirements"
    ::: Vector DataGraphPipelineSessionBindPointRequirementARM)
 -> IO
      (Result,
       "bindPointRequirements"
       ::: Vector DataGraphPipelineSessionBindPointRequirementARM))
-> ((()
     -> IO
          (Result,
           "bindPointRequirements"
           ::: Vector DataGraphPipelineSessionBindPointRequirementARM))
    -> IO
         (Result,
          "bindPointRequirements"
          ::: Vector DataGraphPipelineSessionBindPointRequirementARM))
-> (()
    -> IO
         (Result,
          "bindPointRequirements"
          ::: Vector DataGraphPipelineSessionBindPointRequirementARM))
-> IO
     (Result,
      "bindPointRequirements"
      ::: Vector DataGraphPipelineSessionBindPointRequirementARM)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((()
 -> IO
      (Result,
       "bindPointRequirements"
       ::: Vector DataGraphPipelineSessionBindPointRequirementARM))
-> ()
-> IO
     (Result,
      "bindPointRequirements"
      ::: Vector DataGraphPipelineSessionBindPointRequirementARM)
forall a b. (a -> b) -> a -> b
$ ())) [0..(fromIntegral (pBindPointRequirementCount)) - 1]
  r' <- lift $ traceAroundEvent "vkGetDataGraphPipelineSessionBindPointRequirementsARM" (vkGetDataGraphPipelineSessionBindPointRequirementsARM'
                                                                                           device'
                                                                                           pInfo
                                                                                           (pPBindPointRequirementCount)
                                                                                           ((pPBindPointRequirements)))
  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
  pBindPointRequirementCount' <- lift $ peek @Word32 pPBindPointRequirementCount
  pBindPointRequirements' <- lift $ generateM (fromIntegral (pBindPointRequirementCount')) (\Int
i -> forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @DataGraphPipelineSessionBindPointRequirementARM (((Ptr DataGraphPipelineSessionBindPointRequirementARM
pPBindPointRequirements) Ptr DataGraphPipelineSessionBindPointRequirementARM
-> Int -> Ptr DataGraphPipelineSessionBindPointRequirementARM
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
32 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr DataGraphPipelineSessionBindPointRequirementARM)))
  pure $ ((r'), pBindPointRequirements')


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

-- | vkGetDataGraphPipelineSessionMemoryRequirementsARM - Get the memory
-- requirements of a data graph pipeline session
--
-- == Valid Usage
--
-- -   #VUID-vkGetDataGraphPipelineSessionMemoryRequirementsARM-session-09950#
--     The @session@ member of @pInfo@ /must/ have been created with
--     @device@
--
-- -   #VUID-vkGetDataGraphPipelineSessionMemoryRequirementsARM-bindPoint-09784#
--     The @bindPoint@ member of @pInfo@ /must/ have been returned as part
--     of a 'DataGraphPipelineSessionBindPointRequirementARM' whose
--     @bindPointType@ member is
--     'DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_TYPE_MEMORY_ARM' by a prior
--     call to 'getDataGraphPipelineSessionBindPointRequirementsARM' for
--     the @session@ member of @pInfo@
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkGetDataGraphPipelineSessionMemoryRequirementsARM-device-parameter#
--     @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
--
-- -   #VUID-vkGetDataGraphPipelineSessionMemoryRequirementsARM-pInfo-parameter#
--     @pInfo@ /must/ be a valid pointer to a valid
--     'DataGraphPipelineSessionMemoryRequirementsInfoARM' structure
--
-- -   #VUID-vkGetDataGraphPipelineSessionMemoryRequirementsARM-pMemoryRequirements-parameter#
--     @pMemoryRequirements@ /must/ be a valid pointer to a
--     'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.MemoryRequirements2'
--     structure
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ARM_data_graph VK_ARM_data_graph>,
-- 'DataGraphPipelineSessionMemoryRequirementsInfoARM',
-- 'Vulkan.Core10.Handles.Device',
-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.MemoryRequirements2'
getDataGraphPipelineSessionMemoryRequirementsARM :: forall a io
                                                  . ( Extendss MemoryRequirements2 a
                                                    , PokeChain a
                                                    , PeekChain a
                                                    , MonadIO io )
                                                 => -- | @device@ is the logical device that owns the data graph pipeline
                                                    -- session.
                                                    Device
                                                 -> -- | @pInfo@ is a pointer to a
                                                    -- 'DataGraphPipelineSessionMemoryRequirementsInfoARM' structure containing
                                                    -- parameters for the memory requirements query.
                                                    DataGraphPipelineSessionMemoryRequirementsInfoARM
                                                 -> io (MemoryRequirements2 a)
getDataGraphPipelineSessionMemoryRequirementsARM :: forall (a :: [*]) (io :: * -> *).
(Extendss MemoryRequirements2 a, PokeChain a, PeekChain a,
 MonadIO io) =>
Device
-> DataGraphPipelineSessionMemoryRequirementsInfoARM
-> io (MemoryRequirements2 a)
getDataGraphPipelineSessionMemoryRequirementsARM Device
device
                                                   DataGraphPipelineSessionMemoryRequirementsInfoARM
info = IO (MemoryRequirements2 a) -> io (MemoryRequirements2 a)
forall a. IO a -> io a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (MemoryRequirements2 a) -> io (MemoryRequirements2 a))
-> (ContT (MemoryRequirements2 a) IO (MemoryRequirements2 a)
    -> IO (MemoryRequirements2 a))
-> ContT (MemoryRequirements2 a) IO (MemoryRequirements2 a)
-> io (MemoryRequirements2 a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT (MemoryRequirements2 a) IO (MemoryRequirements2 a)
-> IO (MemoryRequirements2 a)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (MemoryRequirements2 a) IO (MemoryRequirements2 a)
 -> io (MemoryRequirements2 a))
-> ContT (MemoryRequirements2 a) IO (MemoryRequirements2 a)
-> io (MemoryRequirements2 a)
forall a b. (a -> b) -> a -> b
$ do
  let vkGetDataGraphPipelineSessionMemoryRequirementsARMPtr :: FunPtr
  (Ptr Device_T
   -> Ptr DataGraphPipelineSessionMemoryRequirementsInfoARM
   -> Ptr (SomeStruct MemoryRequirements2)
   -> IO ())
vkGetDataGraphPipelineSessionMemoryRequirementsARMPtr = DeviceCmds
-> FunPtr
     (Ptr Device_T
      -> Ptr DataGraphPipelineSessionMemoryRequirementsInfoARM
      -> Ptr (SomeStruct MemoryRequirements2)
      -> IO ())
pVkGetDataGraphPipelineSessionMemoryRequirementsARM (case Device
device of Device{DeviceCmds
deviceCmds :: Device -> DeviceCmds
deviceCmds :: DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO () -> ContT (MemoryRequirements2 a) IO ()
forall (m :: * -> *) a.
Monad m =>
m a -> ContT (MemoryRequirements2 a) m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT (MemoryRequirements2 a) IO ())
-> IO () -> ContT (MemoryRequirements2 a) IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr Device_T
   -> Ptr DataGraphPipelineSessionMemoryRequirementsInfoARM
   -> Ptr (SomeStruct MemoryRequirements2)
   -> IO ())
vkGetDataGraphPipelineSessionMemoryRequirementsARMPtr FunPtr
  (Ptr Device_T
   -> Ptr DataGraphPipelineSessionMemoryRequirementsInfoARM
   -> Ptr (SomeStruct MemoryRequirements2)
   -> IO ())
-> FunPtr
     (Ptr Device_T
      -> Ptr DataGraphPipelineSessionMemoryRequirementsInfoARM
      -> Ptr (SomeStruct MemoryRequirements2)
      -> IO ())
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr Device_T
   -> Ptr DataGraphPipelineSessionMemoryRequirementsInfoARM
   -> Ptr (SomeStruct MemoryRequirements2)
   -> IO ())
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
    IOException -> IO ()
forall e a. (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 vkGetDataGraphPipelineSessionMemoryRequirementsARM is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkGetDataGraphPipelineSessionMemoryRequirementsARM' :: Ptr Device_T
-> Ptr DataGraphPipelineSessionMemoryRequirementsInfoARM
-> Ptr (SomeStruct MemoryRequirements2)
-> IO ()
vkGetDataGraphPipelineSessionMemoryRequirementsARM' = FunPtr
  (Ptr Device_T
   -> Ptr DataGraphPipelineSessionMemoryRequirementsInfoARM
   -> Ptr (SomeStruct MemoryRequirements2)
   -> IO ())
-> Ptr Device_T
-> Ptr DataGraphPipelineSessionMemoryRequirementsInfoARM
-> Ptr (SomeStruct MemoryRequirements2)
-> IO ()
mkVkGetDataGraphPipelineSessionMemoryRequirementsARM FunPtr
  (Ptr Device_T
   -> Ptr DataGraphPipelineSessionMemoryRequirementsInfoARM
   -> Ptr (SomeStruct MemoryRequirements2)
   -> IO ())
vkGetDataGraphPipelineSessionMemoryRequirementsARMPtr
  pInfo <- ((Ptr DataGraphPipelineSessionMemoryRequirementsInfoARM
  -> IO (MemoryRequirements2 a))
 -> IO (MemoryRequirements2 a))
-> ContT
     (MemoryRequirements2 a)
     IO
     (Ptr DataGraphPipelineSessionMemoryRequirementsInfoARM)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr DataGraphPipelineSessionMemoryRequirementsInfoARM
   -> IO (MemoryRequirements2 a))
  -> IO (MemoryRequirements2 a))
 -> ContT
      (MemoryRequirements2 a)
      IO
      (Ptr DataGraphPipelineSessionMemoryRequirementsInfoARM))
-> ((Ptr DataGraphPipelineSessionMemoryRequirementsInfoARM
     -> IO (MemoryRequirements2 a))
    -> IO (MemoryRequirements2 a))
-> ContT
     (MemoryRequirements2 a)
     IO
     (Ptr DataGraphPipelineSessionMemoryRequirementsInfoARM)
forall a b. (a -> b) -> a -> b
$ DataGraphPipelineSessionMemoryRequirementsInfoARM
-> (Ptr DataGraphPipelineSessionMemoryRequirementsInfoARM
    -> IO (MemoryRequirements2 a))
-> IO (MemoryRequirements2 a)
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
forall b.
DataGraphPipelineSessionMemoryRequirementsInfoARM
-> (Ptr DataGraphPipelineSessionMemoryRequirementsInfoARM -> IO b)
-> IO b
withCStruct (DataGraphPipelineSessionMemoryRequirementsInfoARM
info)
  pPMemoryRequirements <- ContT (withZeroCStruct @(MemoryRequirements2 _))
  lift $ traceAroundEvent "vkGetDataGraphPipelineSessionMemoryRequirementsARM" (vkGetDataGraphPipelineSessionMemoryRequirementsARM'
                                                                                  (deviceHandle (device))
                                                                                  pInfo
                                                                                  (forgetExtensions (pPMemoryRequirements)))
  pMemoryRequirements <- lift $ peekCStruct @(MemoryRequirements2 _) pPMemoryRequirements
  pure $ (pMemoryRequirements)


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

-- | vkBindDataGraphPipelineSessionMemoryARM - Bind device memory to a data
-- graph pipeline session object
--
-- == 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_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_ARM_data_graph VK_ARM_data_graph>,
-- 'BindDataGraphPipelineSessionMemoryInfoARM',
-- 'Vulkan.Core10.Handles.Device'
bindDataGraphPipelineSessionMemoryARM :: forall io
                                       . (MonadIO io)
                                      => -- | @device@ is the logical device that owns the data graph pipeline session
                                         -- and memory.
                                         --
                                         -- #VUID-vkBindDataGraphPipelineSessionMemoryARM-device-parameter# @device@
                                         -- /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
                                         Device
                                      -> -- | @pBindInfos@ is a pointer to an array of
                                         -- 'BindDataGraphPipelineSessionMemoryInfoARM' structures describing graph
                                         -- pipeline sessions and memory to bind.
                                         --
                                         -- #VUID-vkBindDataGraphPipelineSessionMemoryARM-pBindInfos-parameter#
                                         -- @pBindInfos@ /must/ be a valid pointer to an array of @bindInfoCount@
                                         -- valid 'BindDataGraphPipelineSessionMemoryInfoARM' structures
                                         ("bindInfos" ::: Vector BindDataGraphPipelineSessionMemoryInfoARM)
                                      -> io ()
bindDataGraphPipelineSessionMemoryARM :: forall (io :: * -> *).
MonadIO io =>
Device
-> ("bindInfos"
    ::: Vector BindDataGraphPipelineSessionMemoryInfoARM)
-> io ()
bindDataGraphPipelineSessionMemoryARM Device
device "bindInfos" ::: Vector BindDataGraphPipelineSessionMemoryInfoARM
bindInfos = 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 vkBindDataGraphPipelineSessionMemoryARMPtr :: FunPtr
  (Ptr Device_T
   -> Word32
   -> Ptr BindDataGraphPipelineSessionMemoryInfoARM
   -> IO Result)
vkBindDataGraphPipelineSessionMemoryARMPtr = DeviceCmds
-> FunPtr
     (Ptr Device_T
      -> Word32
      -> Ptr BindDataGraphPipelineSessionMemoryInfoARM
      -> IO Result)
pVkBindDataGraphPipelineSessionMemoryARM (case Device
device of Device{DeviceCmds
deviceCmds :: Device -> DeviceCmds
deviceCmds :: DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO () -> ContT () IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT () m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr Device_T
   -> Word32
   -> Ptr BindDataGraphPipelineSessionMemoryInfoARM
   -> IO Result)
vkBindDataGraphPipelineSessionMemoryARMPtr FunPtr
  (Ptr Device_T
   -> Word32
   -> Ptr BindDataGraphPipelineSessionMemoryInfoARM
   -> IO Result)
-> FunPtr
     (Ptr Device_T
      -> Word32
      -> Ptr BindDataGraphPipelineSessionMemoryInfoARM
      -> IO Result)
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr Device_T
   -> Word32
   -> Ptr BindDataGraphPipelineSessionMemoryInfoARM
   -> 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 vkBindDataGraphPipelineSessionMemoryARM is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkBindDataGraphPipelineSessionMemoryARM' :: Ptr Device_T
-> Word32
-> Ptr BindDataGraphPipelineSessionMemoryInfoARM
-> IO Result
vkBindDataGraphPipelineSessionMemoryARM' = FunPtr
  (Ptr Device_T
   -> Word32
   -> Ptr BindDataGraphPipelineSessionMemoryInfoARM
   -> IO Result)
-> Ptr Device_T
-> Word32
-> Ptr BindDataGraphPipelineSessionMemoryInfoARM
-> IO Result
mkVkBindDataGraphPipelineSessionMemoryARM FunPtr
  (Ptr Device_T
   -> Word32
   -> Ptr BindDataGraphPipelineSessionMemoryInfoARM
   -> IO Result)
vkBindDataGraphPipelineSessionMemoryARMPtr
  pPBindInfos <- ((Ptr BindDataGraphPipelineSessionMemoryInfoARM -> IO ()) -> IO ())
-> ContT () IO (Ptr BindDataGraphPipelineSessionMemoryInfoARM)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr BindDataGraphPipelineSessionMemoryInfoARM -> IO ())
  -> IO ())
 -> ContT () IO (Ptr BindDataGraphPipelineSessionMemoryInfoARM))
-> ((Ptr BindDataGraphPipelineSessionMemoryInfoARM -> IO ())
    -> IO ())
-> ContT () IO (Ptr BindDataGraphPipelineSessionMemoryInfoARM)
forall a b. (a -> b) -> a -> b
$ forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @BindDataGraphPipelineSessionMemoryInfoARM ((("bindInfos" ::: Vector BindDataGraphPipelineSessionMemoryInfoARM)
-> Int
forall a. Vector a -> Int
Data.Vector.length ("bindInfos" ::: Vector BindDataGraphPipelineSessionMemoryInfoARM
bindInfos)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
48)
  lift $ Data.Vector.imapM_ (\Int
i BindDataGraphPipelineSessionMemoryInfoARM
e -> Ptr BindDataGraphPipelineSessionMemoryInfoARM
-> BindDataGraphPipelineSessionMemoryInfoARM -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr BindDataGraphPipelineSessionMemoryInfoARM
pPBindInfos Ptr BindDataGraphPipelineSessionMemoryInfoARM
-> Int -> Ptr BindDataGraphPipelineSessionMemoryInfoARM
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
48 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr BindDataGraphPipelineSessionMemoryInfoARM) (BindDataGraphPipelineSessionMemoryInfoARM
e)) (bindInfos)
  r <- lift $ traceAroundEvent "vkBindDataGraphPipelineSessionMemoryARM" (vkBindDataGraphPipelineSessionMemoryARM'
                                                                            (deviceHandle (device))
                                                                            ((fromIntegral (Data.Vector.length $ (bindInfos)) :: Word32))
                                                                            (pPBindInfos))
  lift $ when (r < SUCCESS) (throwIO (VulkanException r))


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

-- | vkDestroyDataGraphPipelineSessionARM - Destroy a data graph pipeline
-- session object
--
-- == Valid Usage
--
-- -   #VUID-vkDestroyDataGraphPipelineSessionARM-session-09793# All
--     submitted commands that refer to @session@ /must/ have completed
--     execution
--
-- -   #VUID-vkDestroyDataGraphPipelineSessionARM-session-09794# If
--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
--     provided when @session@ was created, a compatible set of callbacks
--     /must/ be provided here
--
-- -   #VUID-vkDestroyDataGraphPipelineSessionARM-session-09795# If no
--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
--     provided when @session@ was created, @pAllocator@ /must/ be @NULL@
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkDestroyDataGraphPipelineSessionARM-device-parameter#
--     @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
--
-- -   #VUID-vkDestroyDataGraphPipelineSessionARM-session-parameter#
--     @session@ /must/ be a valid
--     'Vulkan.Extensions.Handles.DataGraphPipelineSessionARM' handle
--
-- -   #VUID-vkDestroyDataGraphPipelineSessionARM-pAllocator-parameter# If
--     @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid pointer
--     to a valid 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
--     structure
--
-- -   #VUID-vkDestroyDataGraphPipelineSessionARM-session-parent# @session@
--     /must/ have been created, allocated, or retrieved from @device@
--
-- == Host Synchronization
--
-- -   Host access to @session@ /must/ be externally synchronized
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ARM_data_graph VK_ARM_data_graph>,
-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
-- 'Vulkan.Extensions.Handles.DataGraphPipelineSessionARM',
-- 'Vulkan.Core10.Handles.Device'
destroyDataGraphPipelineSessionARM :: forall io
                                    . (MonadIO io)
                                   => -- | @device@ is the logical device that destroys the data graph pipeline
                                      -- session.
                                      Device
                                   -> -- | @session@ is the handle of the data graph pipeline session to destroy.
                                      DataGraphPipelineSessionARM
                                   -> -- | @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 ()
destroyDataGraphPipelineSessionARM :: forall (io :: * -> *).
MonadIO io =>
Device
-> DataGraphPipelineSessionARM
-> ("allocator" ::: Maybe AllocationCallbacks)
-> io ()
destroyDataGraphPipelineSessionARM Device
device
                                     DataGraphPipelineSessionARM
session
                                     "allocator" ::: Maybe AllocationCallbacks
allocator = IO () -> io ()
forall a. IO a -> io a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> io ())
-> (ContT () IO () -> IO ()) -> ContT () IO () -> io ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> io ()) -> ContT () IO () -> io ()
forall a b. (a -> b) -> a -> b
$ do
  let vkDestroyDataGraphPipelineSessionARMPtr :: FunPtr
  (Ptr Device_T
   -> DataGraphPipelineSessionARM -> Ptr AllocationCallbacks -> IO ())
vkDestroyDataGraphPipelineSessionARMPtr = DeviceCmds
-> FunPtr
     (Ptr Device_T
      -> DataGraphPipelineSessionARM -> Ptr AllocationCallbacks -> IO ())
pVkDestroyDataGraphPipelineSessionARM (case Device
device of Device{DeviceCmds
deviceCmds :: Device -> DeviceCmds
deviceCmds :: DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO () -> ContT () IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT () m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr Device_T
   -> DataGraphPipelineSessionARM -> Ptr AllocationCallbacks -> IO ())
vkDestroyDataGraphPipelineSessionARMPtr FunPtr
  (Ptr Device_T
   -> DataGraphPipelineSessionARM -> Ptr AllocationCallbacks -> IO ())
-> FunPtr
     (Ptr Device_T
      -> DataGraphPipelineSessionARM -> Ptr AllocationCallbacks -> IO ())
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr Device_T
   -> DataGraphPipelineSessionARM -> Ptr AllocationCallbacks -> 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 vkDestroyDataGraphPipelineSessionARM is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkDestroyDataGraphPipelineSessionARM' :: Ptr Device_T
-> DataGraphPipelineSessionARM -> Ptr AllocationCallbacks -> IO ()
vkDestroyDataGraphPipelineSessionARM' = FunPtr
  (Ptr Device_T
   -> DataGraphPipelineSessionARM -> Ptr AllocationCallbacks -> IO ())
-> Ptr Device_T
-> DataGraphPipelineSessionARM
-> Ptr AllocationCallbacks
-> IO ()
mkVkDestroyDataGraphPipelineSessionARM FunPtr
  (Ptr Device_T
   -> DataGraphPipelineSessionARM -> Ptr AllocationCallbacks -> IO ())
vkDestroyDataGraphPipelineSessionARMPtr
  pAllocator <- case ("allocator" ::: Maybe AllocationCallbacks
allocator) of
    "allocator" ::: Maybe AllocationCallbacks
Nothing -> Ptr AllocationCallbacks -> ContT () IO (Ptr AllocationCallbacks)
forall a. a -> ContT () IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Ptr AllocationCallbacks
forall a. Ptr a
nullPtr
    Just AllocationCallbacks
j -> ((Ptr AllocationCallbacks -> IO ()) -> IO ())
-> ContT () IO (Ptr AllocationCallbacks)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr AllocationCallbacks -> IO ()) -> IO ())
 -> ContT () IO (Ptr AllocationCallbacks))
-> ((Ptr AllocationCallbacks -> IO ()) -> IO ())
-> ContT () IO (Ptr AllocationCallbacks)
forall a b. (a -> b) -> a -> b
$ AllocationCallbacks -> (Ptr AllocationCallbacks -> IO ()) -> IO ()
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
forall b.
AllocationCallbacks -> (Ptr AllocationCallbacks -> IO b) -> IO b
withCStruct (AllocationCallbacks
j)
  lift $ traceAroundEvent "vkDestroyDataGraphPipelineSessionARM" (vkDestroyDataGraphPipelineSessionARM'
                                                                    (deviceHandle (device))
                                                                    (session)
                                                                    pAllocator)
  pure $ ()


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

-- | vkCmdDispatchDataGraphARM - Dispatch a data graph pipeline within a
-- session
--
-- == Valid Usage
--
-- -   #VUID-vkCmdDispatchDataGraphARM-session-09796# For each of the
--     session bind point requirements returned by
--     'getDataGraphPipelineSessionBindPointRequirementsARM' for @session@,
--     'DataGraphPipelineSessionBindPointRequirementARM'::@numObjects@
--     objects /must/ have been bound to @session@
--
-- -   #VUID-vkCmdDispatchDataGraphARM-dataGraphPipeline-09951# The
--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point
--     used by this command /must/ be identical to the @dataGraphPipeline@
--     used to create @session@
--
-- -   #VUID-vkCmdDispatchDataGraphARM-None-09797# For each set /n/ that is
--     statically used by a bound data graph pipeline, a descriptor set
--     /must/ have been bound to /n/ at the same pipeline bind point, with
--     a 'Vulkan.Core10.Handles.PipelineLayout' that is compatible for set
--     /n/, with the 'Vulkan.Core10.Handles.PipelineLayout' used to create
--     the current 'Vulkan.Core10.Handles.Pipeline', as described in
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#descriptorsets-compatibility>
--
-- -   #VUID-vkCmdDispatchDataGraphARM-None-09935# Descriptors in each
--     bound descriptor set, specified via
--     'Vulkan.Core10.CommandBufferBuilding.cmdBindDescriptorSets', /must/
--     be valid as described by
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#descriptor-validity descriptor validity>
--     if they are statically used by the 'Vulkan.Core10.Handles.Pipeline'
--     bound to the pipeline bind point used by this command and the bound
--     'Vulkan.Core10.Handles.Pipeline' was not created with
--     'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT'
--
-- -   #VUID-vkCmdDispatchDataGraphARM-None-09936# 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-vkCmdDispatchDataGraphARM-None-09937# 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-vkCmdDispatchDataGraphARM-None-09938# 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-vkCmdDispatchDataGraphARM-None-09939# 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-vkCmdDispatchDataGraphARM-None-09799# A valid data graph
--     pipeline /must/ be bound to the
--     'Vulkan.Core10.Enums.PipelineBindPoint.PIPELINE_BIND_POINT_DATA_GRAPH_ARM'
--     pipeline bind point used by this command
--
-- -   #VUID-vkCmdDispatchDataGraphARM-pDescription-09930# 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 a
--     'Vulkan.Extensions.VK_ARM_tensors.TensorCreateInfoARM'::@pDescription@
--     whose @usage@ member contained
--     'Vulkan.Extensions.VK_ARM_tensors.TENSOR_USAGE_DATA_GRAPH_BIT_ARM'
--
-- -   #VUID-vkCmdDispatchDataGraphARM-pipeline-09940# If the
--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point
--     used by this command was created with a
--     'DataGraphProcessingEngineCreateInfoARM' structure in the @pNext@
--     chain of 'DataGraphPipelineCreateInfoARM' that included a foreign
--     data graph processing engine in its @pProcessingEngines@ member,
--     then all
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_TENSOR_ARM'
--     descriptors accessed as a result of this command /must/ be
--     'Vulkan.Extensions.Handles.TensorARM' objects that have been bound
--     to memory allocated with
--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExportMemoryAllocateInfo'::@handleTypes@
--     with set bits that are a subset of the bits in
--     'QueueFamilyDataGraphProcessingEnginePropertiesARM'::@foreignMemoryHandleTypes@
--     structure queried via
--     'getPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM'
--     with a @queueFamilyIndex@ matching the one the command pool used to
--     create @commandBuffer@ was created for and an identical
--     @engineType@, for all the foreign data graph processing engines that
--     were part of the 'DataGraphProcessingEngineCreateInfoARM' used to
--     create the 'Vulkan.Core10.Handles.Pipeline'
--
-- -   #VUID-vkCmdDispatchDataGraphARM-pNext-09952# If the
--     'Vulkan.Core10.Handles.Pipeline' bound to the pipeline bind point
--     used by this command was created with a
--     'DataGraphProcessingEngineCreateInfoARM' structure in the @pNext@
--     chain of 'DataGraphPipelineCreateInfoARM' that included a foreign
--     data graph processing engine in its @pProcessingEngines@ member,
--     then all @session@ bound memory /must/ have been allocated with
--     'Vulkan.Core11.Promoted_From_VK_KHR_external_memory.ExportMemoryAllocateInfo'::@handleTypes@
--     with set bits that are a subset of the bits in
--     'QueueFamilyDataGraphProcessingEnginePropertiesARM'::@foreignMemoryHandleTypes@
--     structure queried via
--     'getPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM'
--     with a @queueFamilyIndex@ matching the one the command pool used to
--     create @commandBuffer@ was created for and an identical
--     @engineType@, for all the foreign data graph processing engines that
--     were part of the 'DataGraphProcessingEngineCreateInfoARM' used to
--     create the 'Vulkan.Core10.Handles.Pipeline'
--
-- -   #VUID-vkCmdDispatchDataGraphARM-commandBuffer-09800# If
--     @commandBuffer@ is an unprotected command buffer and
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#limits-protectedNoFault protectedNoFault>
--     is not supported, any resource accessed by bound data graph
--     pipelines /must/ not be a protected resource
--
-- -   #VUID-vkCmdDispatchDataGraphARM-commandBuffer-09801# If
--     @commandBuffer@ is a protected command buffer and
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#limits-protectedNoFault protectedNoFault>
--     is not supported, any resource written to by the
--     'Vulkan.Core10.Handles.Pipeline' object bound to the bind point used
--     by this command /must/ not be an unprotected resource
--
-- -   #VUID-vkCmdDispatchDataGraphARM-commandBuffer-09941# All the
--     operations used by the bound data graph pipeline /must/ be supported
--     on the queue family for which the command pool out of which
--     @commandBuffer@ was allocated, as reported by
--     'getPhysicalDeviceQueueFamilyDataGraphPropertiesARM'
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkCmdDispatchDataGraphARM-commandBuffer-parameter#
--     @commandBuffer@ /must/ be a valid
--     'Vulkan.Core10.Handles.CommandBuffer' handle
--
-- -   #VUID-vkCmdDispatchDataGraphARM-session-parameter# @session@ /must/
--     be a valid 'Vulkan.Extensions.Handles.DataGraphPipelineSessionARM'
--     handle
--
-- -   #VUID-vkCmdDispatchDataGraphARM-pInfo-parameter# If @pInfo@ is not
--     @NULL@, @pInfo@ /must/ be a valid pointer to a valid
--     'DataGraphPipelineDispatchInfoARM' structure
--
-- -   #VUID-vkCmdDispatchDataGraphARM-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-vkCmdDispatchDataGraphARM-commandBuffer-cmdpool# The
--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
--     allocated from /must/ support
--     'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_DATA_GRAPH_BIT_ARM'
--     operations
--
-- -   #VUID-vkCmdDispatchDataGraphARM-renderpass# This command /must/ only
--     be called outside of a render pass instance
--
-- -   #VUID-vkCmdDispatchDataGraphARM-suspended# This command /must/ not
--     be called between suspended render pass instances
--
-- -   #VUID-vkCmdDispatchDataGraphARM-videocoding# This command /must/
--     only be called outside of a video coding scope
--
-- -   #VUID-vkCmdDispatchDataGraphARM-commonparent# Both of
--     @commandBuffer@, and @session@ /must/ have been created, allocated,
--     or retrieved from the same 'Vulkan.Core10.Handles.Device'
--
-- == Host Synchronization
--
-- -   Host access to @commandBuffer@ /must/ be externally synchronized
--
-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
--     @commandBuffer@ was allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- \'
--
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------+
-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginVideoCodingKHR Video Coding Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-queueoperation-command-types Command Type> |
-- +============================================================================================================================+========================================================================================================================+=============================================================================================================================+=======================================================================================================================+========================================================================================================================================+
-- | Primary                                                                                                                    | Outside                                                                                                                | Outside                                                                                                                     | VK_QUEUE_DATA_GRAPH_BIT_ARM                                                                                           | Action                                                                                                                                 |
-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                             |                                                                                                                       |                                                                                                                                        |
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------+
--
-- == Conditional Rendering
--
-- vkCmdDispatchDataGraphARM 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_ARM_data_graph VK_ARM_data_graph>,
-- 'Vulkan.Core10.Handles.CommandBuffer',
-- 'DataGraphPipelineDispatchInfoARM',
-- 'Vulkan.Extensions.Handles.DataGraphPipelineSessionARM'
cmdDispatchDataGraphARM :: forall io
                         . (MonadIO io)
                        => -- | @commandBuffer@ is the command buffer into which the command will be
                           -- recorded.
                           CommandBuffer
                        -> -- | @session@ is the 'Vulkan.Extensions.Handles.DataGraphPipelineSessionARM'
                           -- that data graph pipeline being dispatched will use.
                           DataGraphPipelineSessionARM
                        -> -- | @pInfo@ is @NULL@ or a pointer to a 'DataGraphPipelineDispatchInfoARM'
                           -- structure.
                           ("info" ::: Maybe DataGraphPipelineDispatchInfoARM)
                        -> io ()
cmdDispatchDataGraphARM :: forall (io :: * -> *).
MonadIO io =>
CommandBuffer
-> DataGraphPipelineSessionARM
-> ("info" ::: Maybe DataGraphPipelineDispatchInfoARM)
-> io ()
cmdDispatchDataGraphARM CommandBuffer
commandBuffer DataGraphPipelineSessionARM
session "info" ::: Maybe DataGraphPipelineDispatchInfoARM
info = 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 vkCmdDispatchDataGraphARMPtr :: FunPtr
  (Ptr CommandBuffer_T
   -> DataGraphPipelineSessionARM
   -> Ptr DataGraphPipelineDispatchInfoARM
   -> IO ())
vkCmdDispatchDataGraphARMPtr = DeviceCmds
-> FunPtr
     (Ptr CommandBuffer_T
      -> DataGraphPipelineSessionARM
      -> Ptr DataGraphPipelineDispatchInfoARM
      -> IO ())
pVkCmdDispatchDataGraphARM (case CommandBuffer
commandBuffer of CommandBuffer{DeviceCmds
deviceCmds :: DeviceCmds
deviceCmds :: CommandBuffer -> DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO () -> ContT () IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT () m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr CommandBuffer_T
   -> DataGraphPipelineSessionARM
   -> Ptr DataGraphPipelineDispatchInfoARM
   -> IO ())
vkCmdDispatchDataGraphARMPtr FunPtr
  (Ptr CommandBuffer_T
   -> DataGraphPipelineSessionARM
   -> Ptr DataGraphPipelineDispatchInfoARM
   -> IO ())
-> FunPtr
     (Ptr CommandBuffer_T
      -> DataGraphPipelineSessionARM
      -> Ptr DataGraphPipelineDispatchInfoARM
      -> IO ())
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr CommandBuffer_T
   -> DataGraphPipelineSessionARM
   -> Ptr DataGraphPipelineDispatchInfoARM
   -> 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 vkCmdDispatchDataGraphARM is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkCmdDispatchDataGraphARM' :: Ptr CommandBuffer_T
-> DataGraphPipelineSessionARM
-> Ptr DataGraphPipelineDispatchInfoARM
-> IO ()
vkCmdDispatchDataGraphARM' = FunPtr
  (Ptr CommandBuffer_T
   -> DataGraphPipelineSessionARM
   -> Ptr DataGraphPipelineDispatchInfoARM
   -> IO ())
-> Ptr CommandBuffer_T
-> DataGraphPipelineSessionARM
-> Ptr DataGraphPipelineDispatchInfoARM
-> IO ()
mkVkCmdDispatchDataGraphARM FunPtr
  (Ptr CommandBuffer_T
   -> DataGraphPipelineSessionARM
   -> Ptr DataGraphPipelineDispatchInfoARM
   -> IO ())
vkCmdDispatchDataGraphARMPtr
  pInfo <- case ("info" ::: Maybe DataGraphPipelineDispatchInfoARM
info) of
    "info" ::: Maybe DataGraphPipelineDispatchInfoARM
Nothing -> Ptr DataGraphPipelineDispatchInfoARM
-> ContT () IO (Ptr DataGraphPipelineDispatchInfoARM)
forall a. a -> ContT () IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Ptr DataGraphPipelineDispatchInfoARM
forall a. Ptr a
nullPtr
    Just DataGraphPipelineDispatchInfoARM
j -> ((Ptr DataGraphPipelineDispatchInfoARM -> IO ()) -> IO ())
-> ContT () IO (Ptr DataGraphPipelineDispatchInfoARM)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr DataGraphPipelineDispatchInfoARM -> IO ()) -> IO ())
 -> ContT () IO (Ptr DataGraphPipelineDispatchInfoARM))
-> ((Ptr DataGraphPipelineDispatchInfoARM -> IO ()) -> IO ())
-> ContT () IO (Ptr DataGraphPipelineDispatchInfoARM)
forall a b. (a -> b) -> a -> b
$ DataGraphPipelineDispatchInfoARM
-> (Ptr DataGraphPipelineDispatchInfoARM -> IO ()) -> IO ()
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
forall b.
DataGraphPipelineDispatchInfoARM
-> (Ptr DataGraphPipelineDispatchInfoARM -> IO b) -> IO b
withCStruct (DataGraphPipelineDispatchInfoARM
j)
  lift $ traceAroundEvent "vkCmdDispatchDataGraphARM" (vkCmdDispatchDataGraphARM'
                                                         (commandBufferHandle (commandBuffer))
                                                         (session)
                                                         pInfo)
  pure $ ()


foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkGetDataGraphPipelineAvailablePropertiesARM
  :: FunPtr (Ptr Device_T -> Ptr DataGraphPipelineInfoARM -> Ptr Word32 -> Ptr DataGraphPipelinePropertyARM -> IO Result) -> Ptr Device_T -> Ptr DataGraphPipelineInfoARM -> Ptr Word32 -> Ptr DataGraphPipelinePropertyARM -> IO Result

-- | vkGetDataGraphPipelineAvailablePropertiesARM - Query available
-- properties of a data graph pipeline
--
-- = Description
--
-- If @pProperties@ is @NULL@, then the number of properties associated
-- with the data graph pipeline is returned in @pPropertiesCount@.
-- Otherwise, @pPropertiesCount@ /must/ point to a variable set by the user
-- to the number of elements in the @pProperties@ array, and on return the
-- variable is overwritten with the number of enums actually written to
-- @pProperties@. If @pPropertiesCount@ is less than the number of
-- properties associated with the data graph pipeline, at most
-- @pPropertiesCount@ structures will be written, and
-- 'Vulkan.Core10.Enums.Result.INCOMPLETE' will be returned instead of
-- 'Vulkan.Core10.Enums.Result.SUCCESS', to indicate that not all the
-- available properties were returned.
--
-- == Valid Usage
--
-- -   #VUID-vkGetDataGraphPipelineAvailablePropertiesARM-dataGraphPipeline-09888#
--     The @dataGraphPipeline@ member of @pPipelineInfo@ /must/ have been
--     created with @device@
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkGetDataGraphPipelineAvailablePropertiesARM-device-parameter#
--     @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
--
-- -   #VUID-vkGetDataGraphPipelineAvailablePropertiesARM-pPipelineInfo-parameter#
--     @pPipelineInfo@ /must/ be a valid pointer to a valid
--     'DataGraphPipelineInfoARM' structure
--
-- -   #VUID-vkGetDataGraphPipelineAvailablePropertiesARM-pPropertiesCount-parameter#
--     @pPropertiesCount@ /must/ be a valid pointer to a @uint32_t@ value
--
-- -   #VUID-vkGetDataGraphPipelineAvailablePropertiesARM-pProperties-parameter#
--     If the value referenced by @pPropertiesCount@ is not @0@, and
--     @pProperties@ is not @NULL@, @pProperties@ /must/ be a valid pointer
--     to an array of @pPropertiesCount@ 'DataGraphPipelinePropertyARM'
--     values
--
-- == Return Codes
--
-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
--
--     -   'Vulkan.Core10.Enums.Result.INCOMPLETE'
--
--     -   '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_ARM_data_graph VK_ARM_data_graph>,
-- 'DataGraphPipelineInfoARM', 'DataGraphPipelinePropertyARM',
-- 'Vulkan.Core10.Handles.Device'
getDataGraphPipelineAvailablePropertiesARM :: forall io
                                            . (MonadIO io)
                                           => -- | @device@ is the logical device that created the data graph pipeline.
                                              Device
                                           -> -- | @pPipelineInfo@ is a 'DataGraphPipelineInfoARM' that describes the
                                              -- 'Vulkan.Core10.Handles.Pipeline' being queried.
                                              DataGraphPipelineInfoARM
                                           -> io (Result, ("properties" ::: Vector DataGraphPipelinePropertyARM))
getDataGraphPipelineAvailablePropertiesARM :: forall (io :: * -> *).
MonadIO io =>
Device
-> DataGraphPipelineInfoARM
-> io
     (Result, "properties" ::: Vector DataGraphPipelinePropertyARM)
getDataGraphPipelineAvailablePropertiesARM Device
device
                                             DataGraphPipelineInfoARM
pipelineInfo = IO (Result, "properties" ::: Vector DataGraphPipelinePropertyARM)
-> io
     (Result, "properties" ::: Vector DataGraphPipelinePropertyARM)
forall a. IO a -> io a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Result, "properties" ::: Vector DataGraphPipelinePropertyARM)
 -> io
      (Result, "properties" ::: Vector DataGraphPipelinePropertyARM))
-> (ContT
      (Result, "properties" ::: Vector DataGraphPipelinePropertyARM)
      IO
      (Result, "properties" ::: Vector DataGraphPipelinePropertyARM)
    -> IO
         (Result, "properties" ::: Vector DataGraphPipelinePropertyARM))
-> ContT
     (Result, "properties" ::: Vector DataGraphPipelinePropertyARM)
     IO
     (Result, "properties" ::: Vector DataGraphPipelinePropertyARM)
-> io
     (Result, "properties" ::: Vector DataGraphPipelinePropertyARM)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT
  (Result, "properties" ::: Vector DataGraphPipelinePropertyARM)
  IO
  (Result, "properties" ::: Vector DataGraphPipelinePropertyARM)
-> IO
     (Result, "properties" ::: Vector DataGraphPipelinePropertyARM)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Result, "properties" ::: Vector DataGraphPipelinePropertyARM)
   IO
   (Result, "properties" ::: Vector DataGraphPipelinePropertyARM)
 -> io
      (Result, "properties" ::: Vector DataGraphPipelinePropertyARM))
-> ContT
     (Result, "properties" ::: Vector DataGraphPipelinePropertyARM)
     IO
     (Result, "properties" ::: Vector DataGraphPipelinePropertyARM)
-> io
     (Result, "properties" ::: Vector DataGraphPipelinePropertyARM)
forall a b. (a -> b) -> a -> b
$ do
  let vkGetDataGraphPipelineAvailablePropertiesARMPtr :: FunPtr
  (Ptr Device_T
   -> Ptr DataGraphPipelineInfoARM
   -> Ptr Word32
   -> Ptr DataGraphPipelinePropertyARM
   -> IO Result)
vkGetDataGraphPipelineAvailablePropertiesARMPtr = DeviceCmds
-> FunPtr
     (Ptr Device_T
      -> Ptr DataGraphPipelineInfoARM
      -> Ptr Word32
      -> Ptr DataGraphPipelinePropertyARM
      -> IO Result)
pVkGetDataGraphPipelineAvailablePropertiesARM (case Device
device of Device{DeviceCmds
deviceCmds :: Device -> DeviceCmds
deviceCmds :: DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO ()
-> ContT
     (Result, "properties" ::: Vector DataGraphPipelinePropertyARM)
     IO
     ()
forall (m :: * -> *) a.
Monad m =>
m a
-> ContT
     (Result, "properties" ::: Vector DataGraphPipelinePropertyARM) m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO ()
 -> ContT
      (Result, "properties" ::: Vector DataGraphPipelinePropertyARM)
      IO
      ())
-> IO ()
-> ContT
     (Result, "properties" ::: Vector DataGraphPipelinePropertyARM)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr Device_T
   -> Ptr DataGraphPipelineInfoARM
   -> Ptr Word32
   -> Ptr DataGraphPipelinePropertyARM
   -> IO Result)
vkGetDataGraphPipelineAvailablePropertiesARMPtr FunPtr
  (Ptr Device_T
   -> Ptr DataGraphPipelineInfoARM
   -> Ptr Word32
   -> Ptr DataGraphPipelinePropertyARM
   -> IO Result)
-> FunPtr
     (Ptr Device_T
      -> Ptr DataGraphPipelineInfoARM
      -> Ptr Word32
      -> Ptr DataGraphPipelinePropertyARM
      -> IO Result)
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr Device_T
   -> Ptr DataGraphPipelineInfoARM
   -> Ptr Word32
   -> Ptr DataGraphPipelinePropertyARM
   -> 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 vkGetDataGraphPipelineAvailablePropertiesARM is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkGetDataGraphPipelineAvailablePropertiesARM' :: Ptr Device_T
-> Ptr DataGraphPipelineInfoARM
-> Ptr Word32
-> Ptr DataGraphPipelinePropertyARM
-> IO Result
vkGetDataGraphPipelineAvailablePropertiesARM' = FunPtr
  (Ptr Device_T
   -> Ptr DataGraphPipelineInfoARM
   -> Ptr Word32
   -> Ptr DataGraphPipelinePropertyARM
   -> IO Result)
-> Ptr Device_T
-> Ptr DataGraphPipelineInfoARM
-> Ptr Word32
-> Ptr DataGraphPipelinePropertyARM
-> IO Result
mkVkGetDataGraphPipelineAvailablePropertiesARM FunPtr
  (Ptr Device_T
   -> Ptr DataGraphPipelineInfoARM
   -> Ptr Word32
   -> Ptr DataGraphPipelinePropertyARM
   -> IO Result)
vkGetDataGraphPipelineAvailablePropertiesARMPtr
  let device' :: Ptr Device_T
device' = Device -> Ptr Device_T
deviceHandle (Device
device)
  pPipelineInfo <- ((Ptr DataGraphPipelineInfoARM
  -> IO
       (Result, "properties" ::: Vector DataGraphPipelinePropertyARM))
 -> IO
      (Result, "properties" ::: Vector DataGraphPipelinePropertyARM))
-> ContT
     (Result, "properties" ::: Vector DataGraphPipelinePropertyARM)
     IO
     (Ptr DataGraphPipelineInfoARM)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr DataGraphPipelineInfoARM
   -> IO
        (Result, "properties" ::: Vector DataGraphPipelinePropertyARM))
  -> IO
       (Result, "properties" ::: Vector DataGraphPipelinePropertyARM))
 -> ContT
      (Result, "properties" ::: Vector DataGraphPipelinePropertyARM)
      IO
      (Ptr DataGraphPipelineInfoARM))
-> ((Ptr DataGraphPipelineInfoARM
     -> IO
          (Result, "properties" ::: Vector DataGraphPipelinePropertyARM))
    -> IO
         (Result, "properties" ::: Vector DataGraphPipelinePropertyARM))
-> ContT
     (Result, "properties" ::: Vector DataGraphPipelinePropertyARM)
     IO
     (Ptr DataGraphPipelineInfoARM)
forall a b. (a -> b) -> a -> b
$ DataGraphPipelineInfoARM
-> (Ptr DataGraphPipelineInfoARM
    -> IO
         (Result, "properties" ::: Vector DataGraphPipelinePropertyARM))
-> IO
     (Result, "properties" ::: Vector DataGraphPipelinePropertyARM)
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
forall b.
DataGraphPipelineInfoARM
-> (Ptr DataGraphPipelineInfoARM -> IO b) -> IO b
withCStruct (DataGraphPipelineInfoARM
pipelineInfo)
  pPPropertiesCount <- ContT $ bracket (callocBytes @Word32 4) free
  r <- lift $ traceAroundEvent "vkGetDataGraphPipelineAvailablePropertiesARM" (vkGetDataGraphPipelineAvailablePropertiesARM'
                                                                                 device'
                                                                                 pPipelineInfo
                                                                                 (pPPropertiesCount)
                                                                                 (nullPtr))
  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
  pPropertiesCount <- lift $ peek @Word32 pPPropertiesCount
  pPProperties <- ContT $ bracket (callocBytes @DataGraphPipelinePropertyARM ((fromIntegral (pPropertiesCount)) * 4)) free
  r' <- lift $ traceAroundEvent "vkGetDataGraphPipelineAvailablePropertiesARM" (vkGetDataGraphPipelineAvailablePropertiesARM'
                                                                                  device'
                                                                                  pPipelineInfo
                                                                                  (pPPropertiesCount)
                                                                                  (pPProperties))
  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
  pPropertiesCount' <- lift $ peek @Word32 pPPropertiesCount
  pProperties' <- lift $ generateM (fromIntegral (pPropertiesCount')) (\Int
i -> forall a. Storable a => Ptr a -> IO a
peek @DataGraphPipelinePropertyARM ((Ptr DataGraphPipelinePropertyARM
pPProperties Ptr DataGraphPipelinePropertyARM
-> Int -> Ptr DataGraphPipelinePropertyARM
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
4 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr DataGraphPipelinePropertyARM)))
  pure $ ((r'), pProperties')


foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkGetDataGraphPipelinePropertiesARM
  :: FunPtr (Ptr Device_T -> Ptr DataGraphPipelineInfoARM -> Word32 -> Ptr DataGraphPipelinePropertyQueryResultARM -> IO Result) -> Ptr Device_T -> Ptr DataGraphPipelineInfoARM -> Word32 -> Ptr DataGraphPipelinePropertyQueryResultARM -> IO Result

-- | vkGetDataGraphPipelinePropertiesARM - Query properties of a data graph
-- pipeline
--
-- == Valid Usage
--
-- -   #VUID-vkGetDataGraphPipelinePropertiesARM-dataGraphPipeline-09802#
--     The @dataGraphPipeline@ member of @pPipelineInfo@ /must/ have been
--     created with @device@
--
-- -   #VUID-vkGetDataGraphPipelinePropertiesARM-pProperties-09889# There
--     /must/ not be two or more structures in the @pProperties@ array with
--     the same 'DataGraphPipelinePropertyQueryResultARM'::@property@
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkGetDataGraphPipelinePropertiesARM-device-parameter# @device@
--     /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
--
-- -   #VUID-vkGetDataGraphPipelinePropertiesARM-pPipelineInfo-parameter#
--     @pPipelineInfo@ /must/ be a valid pointer to a valid
--     'DataGraphPipelineInfoARM' structure
--
-- -   #VUID-vkGetDataGraphPipelinePropertiesARM-pProperties-parameter#
--     @pProperties@ /must/ be a valid pointer to an array of
--     @propertiesCount@ 'DataGraphPipelinePropertyQueryResultARM'
--     structures
--
-- -   #VUID-vkGetDataGraphPipelinePropertiesARM-propertiesCount-arraylength#
--     @propertiesCount@ /must/ be greater than @0@
--
-- == Return Codes
--
-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
--
--     -   'Vulkan.Core10.Enums.Result.INCOMPLETE'
--
--     -   '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_ARM_data_graph VK_ARM_data_graph>,
-- 'DataGraphPipelineInfoARM', 'DataGraphPipelinePropertyQueryResultARM',
-- 'Vulkan.Core10.Handles.Device'
getDataGraphPipelinePropertiesARM :: forall io
                                   . (MonadIO io)
                                  => -- | @device@ is the logical device that created the data graph pipeline.
                                     Device
                                  -> -- | @pPipelineInfo@ is a 'DataGraphPipelineInfoARM' that describes the
                                     -- 'Vulkan.Core10.Handles.Pipeline' being queried.
                                     DataGraphPipelineInfoARM
                                  -> -- | @propertiesCount@ is the length of the @pProperties@ array.
                                     ("propertiesCount" ::: Word32)
                                  -> io (Result, ("properties" ::: Vector DataGraphPipelinePropertyQueryResultARM))
getDataGraphPipelinePropertiesARM :: forall (io :: * -> *).
MonadIO io =>
Device
-> DataGraphPipelineInfoARM
-> Word32
-> io
     (Result,
      "properties" ::: Vector DataGraphPipelinePropertyQueryResultARM)
getDataGraphPipelinePropertiesARM Device
device
                                    DataGraphPipelineInfoARM
pipelineInfo
                                    Word32
propertiesCount = IO
  (Result,
   "properties" ::: Vector DataGraphPipelinePropertyQueryResultARM)
-> io
     (Result,
      "properties" ::: Vector DataGraphPipelinePropertyQueryResultARM)
forall a. IO a -> io a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Result,
    "properties" ::: Vector DataGraphPipelinePropertyQueryResultARM)
 -> io
      (Result,
       "properties" ::: Vector DataGraphPipelinePropertyQueryResultARM))
-> (ContT
      (Result,
       "properties" ::: Vector DataGraphPipelinePropertyQueryResultARM)
      IO
      (Result,
       "properties" ::: Vector DataGraphPipelinePropertyQueryResultARM)
    -> IO
         (Result,
          "properties" ::: Vector DataGraphPipelinePropertyQueryResultARM))
-> ContT
     (Result,
      "properties" ::: Vector DataGraphPipelinePropertyQueryResultARM)
     IO
     (Result,
      "properties" ::: Vector DataGraphPipelinePropertyQueryResultARM)
-> io
     (Result,
      "properties" ::: Vector DataGraphPipelinePropertyQueryResultARM)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT
  (Result,
   "properties" ::: Vector DataGraphPipelinePropertyQueryResultARM)
  IO
  (Result,
   "properties" ::: Vector DataGraphPipelinePropertyQueryResultARM)
-> IO
     (Result,
      "properties" ::: Vector DataGraphPipelinePropertyQueryResultARM)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Result,
    "properties" ::: Vector DataGraphPipelinePropertyQueryResultARM)
   IO
   (Result,
    "properties" ::: Vector DataGraphPipelinePropertyQueryResultARM)
 -> io
      (Result,
       "properties" ::: Vector DataGraphPipelinePropertyQueryResultARM))
-> ContT
     (Result,
      "properties" ::: Vector DataGraphPipelinePropertyQueryResultARM)
     IO
     (Result,
      "properties" ::: Vector DataGraphPipelinePropertyQueryResultARM)
-> io
     (Result,
      "properties" ::: Vector DataGraphPipelinePropertyQueryResultARM)
forall a b. (a -> b) -> a -> b
$ do
  let vkGetDataGraphPipelinePropertiesARMPtr :: FunPtr
  (Ptr Device_T
   -> Ptr DataGraphPipelineInfoARM
   -> Word32
   -> Ptr DataGraphPipelinePropertyQueryResultARM
   -> IO Result)
vkGetDataGraphPipelinePropertiesARMPtr = DeviceCmds
-> FunPtr
     (Ptr Device_T
      -> Ptr DataGraphPipelineInfoARM
      -> Word32
      -> Ptr DataGraphPipelinePropertyQueryResultARM
      -> IO Result)
pVkGetDataGraphPipelinePropertiesARM (case Device
device of Device{DeviceCmds
deviceCmds :: Device -> DeviceCmds
deviceCmds :: DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO ()
-> ContT
     (Result,
      "properties" ::: Vector DataGraphPipelinePropertyQueryResultARM)
     IO
     ()
forall (m :: * -> *) a.
Monad m =>
m a
-> ContT
     (Result,
      "properties" ::: Vector DataGraphPipelinePropertyQueryResultARM)
     m
     a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO ()
 -> ContT
      (Result,
       "properties" ::: Vector DataGraphPipelinePropertyQueryResultARM)
      IO
      ())
-> IO ()
-> ContT
     (Result,
      "properties" ::: Vector DataGraphPipelinePropertyQueryResultARM)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr Device_T
   -> Ptr DataGraphPipelineInfoARM
   -> Word32
   -> Ptr DataGraphPipelinePropertyQueryResultARM
   -> IO Result)
vkGetDataGraphPipelinePropertiesARMPtr FunPtr
  (Ptr Device_T
   -> Ptr DataGraphPipelineInfoARM
   -> Word32
   -> Ptr DataGraphPipelinePropertyQueryResultARM
   -> IO Result)
-> FunPtr
     (Ptr Device_T
      -> Ptr DataGraphPipelineInfoARM
      -> Word32
      -> Ptr DataGraphPipelinePropertyQueryResultARM
      -> IO Result)
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr Device_T
   -> Ptr DataGraphPipelineInfoARM
   -> Word32
   -> Ptr DataGraphPipelinePropertyQueryResultARM
   -> 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 vkGetDataGraphPipelinePropertiesARM is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkGetDataGraphPipelinePropertiesARM' :: Ptr Device_T
-> Ptr DataGraphPipelineInfoARM
-> Word32
-> Ptr DataGraphPipelinePropertyQueryResultARM
-> IO Result
vkGetDataGraphPipelinePropertiesARM' = FunPtr
  (Ptr Device_T
   -> Ptr DataGraphPipelineInfoARM
   -> Word32
   -> Ptr DataGraphPipelinePropertyQueryResultARM
   -> IO Result)
-> Ptr Device_T
-> Ptr DataGraphPipelineInfoARM
-> Word32
-> Ptr DataGraphPipelinePropertyQueryResultARM
-> IO Result
mkVkGetDataGraphPipelinePropertiesARM FunPtr
  (Ptr Device_T
   -> Ptr DataGraphPipelineInfoARM
   -> Word32
   -> Ptr DataGraphPipelinePropertyQueryResultARM
   -> IO Result)
vkGetDataGraphPipelinePropertiesARMPtr
  pPipelineInfo <- ((Ptr DataGraphPipelineInfoARM
  -> IO
       (Result,
        "properties" ::: Vector DataGraphPipelinePropertyQueryResultARM))
 -> IO
      (Result,
       "properties" ::: Vector DataGraphPipelinePropertyQueryResultARM))
-> ContT
     (Result,
      "properties" ::: Vector DataGraphPipelinePropertyQueryResultARM)
     IO
     (Ptr DataGraphPipelineInfoARM)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr DataGraphPipelineInfoARM
   -> IO
        (Result,
         "properties" ::: Vector DataGraphPipelinePropertyQueryResultARM))
  -> IO
       (Result,
        "properties" ::: Vector DataGraphPipelinePropertyQueryResultARM))
 -> ContT
      (Result,
       "properties" ::: Vector DataGraphPipelinePropertyQueryResultARM)
      IO
      (Ptr DataGraphPipelineInfoARM))
-> ((Ptr DataGraphPipelineInfoARM
     -> IO
          (Result,
           "properties" ::: Vector DataGraphPipelinePropertyQueryResultARM))
    -> IO
         (Result,
          "properties" ::: Vector DataGraphPipelinePropertyQueryResultARM))
-> ContT
     (Result,
      "properties" ::: Vector DataGraphPipelinePropertyQueryResultARM)
     IO
     (Ptr DataGraphPipelineInfoARM)
forall a b. (a -> b) -> a -> b
$ DataGraphPipelineInfoARM
-> (Ptr DataGraphPipelineInfoARM
    -> IO
         (Result,
          "properties" ::: Vector DataGraphPipelinePropertyQueryResultARM))
-> IO
     (Result,
      "properties" ::: Vector DataGraphPipelinePropertyQueryResultARM)
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
forall b.
DataGraphPipelineInfoARM
-> (Ptr DataGraphPipelineInfoARM -> IO b) -> IO b
withCStruct (DataGraphPipelineInfoARM
pipelineInfo)
  pPProperties <- ContT $ bracket (callocBytes @DataGraphPipelinePropertyQueryResultARM ((fromIntegral (propertiesCount)) * 40)) free
  _ <- traverse (\Int
i -> ((()
  -> IO
       (Result,
        "properties" ::: Vector DataGraphPipelinePropertyQueryResultARM))
 -> IO
      (Result,
       "properties" ::: Vector DataGraphPipelinePropertyQueryResultARM))
-> ContT
     (Result,
      "properties" ::: Vector DataGraphPipelinePropertyQueryResultARM)
     IO
     ()
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((()
   -> IO
        (Result,
         "properties" ::: Vector DataGraphPipelinePropertyQueryResultARM))
  -> IO
       (Result,
        "properties" ::: Vector DataGraphPipelinePropertyQueryResultARM))
 -> ContT
      (Result,
       "properties" ::: Vector DataGraphPipelinePropertyQueryResultARM)
      IO
      ())
-> ((()
     -> IO
          (Result,
           "properties" ::: Vector DataGraphPipelinePropertyQueryResultARM))
    -> IO
         (Result,
          "properties" ::: Vector DataGraphPipelinePropertyQueryResultARM))
-> ContT
     (Result,
      "properties" ::: Vector DataGraphPipelinePropertyQueryResultARM)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr DataGraphPipelinePropertyQueryResultARM
-> IO
     (Result,
      "properties" ::: Vector DataGraphPipelinePropertyQueryResultARM)
-> IO
     (Result,
      "properties" ::: Vector DataGraphPipelinePropertyQueryResultARM)
forall b.
Ptr DataGraphPipelinePropertyQueryResultARM -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> IO b -> IO b
pokeZeroCStruct (Ptr DataGraphPipelinePropertyQueryResultARM
pPProperties Ptr DataGraphPipelinePropertyQueryResultARM
-> Int -> Ptr DataGraphPipelinePropertyQueryResultARM
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
i Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
40) :: Ptr DataGraphPipelinePropertyQueryResultARM) (IO
   (Result,
    "properties" ::: Vector DataGraphPipelinePropertyQueryResultARM)
 -> IO
      (Result,
       "properties" ::: Vector DataGraphPipelinePropertyQueryResultARM))
-> ((()
     -> IO
          (Result,
           "properties" ::: Vector DataGraphPipelinePropertyQueryResultARM))
    -> IO
         (Result,
          "properties" ::: Vector DataGraphPipelinePropertyQueryResultARM))
-> (()
    -> IO
         (Result,
          "properties" ::: Vector DataGraphPipelinePropertyQueryResultARM))
-> IO
     (Result,
      "properties" ::: Vector DataGraphPipelinePropertyQueryResultARM)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((()
 -> IO
      (Result,
       "properties" ::: Vector DataGraphPipelinePropertyQueryResultARM))
-> ()
-> IO
     (Result,
      "properties" ::: Vector DataGraphPipelinePropertyQueryResultARM)
forall a b. (a -> b) -> a -> b
$ ())) [0..(fromIntegral (propertiesCount)) - 1]
  r <- lift $ traceAroundEvent "vkGetDataGraphPipelinePropertiesARM" (vkGetDataGraphPipelinePropertiesARM'
                                                                        (deviceHandle (device))
                                                                        pPipelineInfo
                                                                        (propertiesCount)
                                                                        ((pPProperties)))
  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
  pProperties <- lift $ generateM (fromIntegral (propertiesCount)) (\Int
i -> forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @DataGraphPipelinePropertyQueryResultARM (((Ptr DataGraphPipelinePropertyQueryResultARM
pPProperties) Ptr DataGraphPipelinePropertyQueryResultARM
-> Int -> Ptr DataGraphPipelinePropertyQueryResultARM
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
40 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr DataGraphPipelinePropertyQueryResultARM)))
  pure $ (r, pProperties)


foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM
  :: FunPtr (Ptr PhysicalDevice_T -> Word32 -> Ptr Word32 -> Ptr QueueFamilyDataGraphPropertiesARM -> IO Result) -> Ptr PhysicalDevice_T -> Word32 -> Ptr Word32 -> Ptr QueueFamilyDataGraphPropertiesARM -> IO Result

-- | vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM - Query the data
-- processing engines and the operations they support for a given queue
-- family of a physical device
--
-- = Description
--
-- If @pQueueFamilyDataGraphProperties@ is @NULL@, then the number of
-- properties available is returned in
-- @pQueueFamilyDataGraphPropertyCount@. Otherwise,
-- @pQueueFamilyDataGraphPropertyCount@ /must/ point to a variable set by
-- the application to the number of elements in the
-- @pQueueFamilyDataGraphProperties@ array, and on return the variable is
-- overwritten with the number of structures actually written to
-- @pQueueFamilyDataGraphProperties@. If
-- @pQueueFamilyDataGraphPropertyCount@ is less than the number of
-- properties available, at most @pQueueFamilyDataGraphPropertyCount@
-- structures will be written, and 'Vulkan.Core10.Enums.Result.INCOMPLETE'
-- will be returned instead of 'Vulkan.Core10.Enums.Result.SUCCESS', to
-- indicate that not all the available properties were returned.
--
-- If the
-- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-dataGraphModelQCOM dataGraphModel>
-- feature is supported, the implementation /must/ return at least one
-- property with engine type
-- 'PHYSICAL_DEVICE_DATA_GRAPH_PROCESSING_ENGINE_TYPE_NEURAL_QCOM' or
-- 'PHYSICAL_DEVICE_DATA_GRAPH_PROCESSING_ENGINE_TYPE_COMPUTE_QCOM'.
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM-physicalDevice-parameter#
--     @physicalDevice@ /must/ be a valid
--     'Vulkan.Core10.Handles.PhysicalDevice' handle
--
-- -   #VUID-vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM-pQueueFamilyDataGraphPropertyCount-parameter#
--     @pQueueFamilyDataGraphPropertyCount@ /must/ be a valid pointer to a
--     @uint32_t@ value
--
-- -   #VUID-vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM-pQueueFamilyDataGraphProperties-parameter#
--     If the value referenced by @pQueueFamilyDataGraphPropertyCount@ is
--     not @0@, and @pQueueFamilyDataGraphProperties@ is not @NULL@,
--     @pQueueFamilyDataGraphProperties@ /must/ be a valid pointer to an
--     array of @pQueueFamilyDataGraphPropertyCount@
--     'QueueFamilyDataGraphPropertiesARM' structures
--
-- == Return Codes
--
-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
--
--     -   'Vulkan.Core10.Enums.Result.INCOMPLETE'
--
--     -   '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_ARM_data_graph VK_ARM_data_graph>,
-- 'Vulkan.Core10.Handles.PhysicalDevice',
-- 'QueueFamilyDataGraphPropertiesARM'
getPhysicalDeviceQueueFamilyDataGraphPropertiesARM :: forall io
                                                    . (MonadIO io)
                                                   => -- | @physicalDevice@ is the physical device to query.
                                                      PhysicalDevice
                                                   -> -- | @queueFamilyIndex@ is the index of the queue family being queried.
                                                      ("queueFamilyIndex" ::: Word32)
                                                   -> io (Result, ("queueFamilyDataGraphProperties" ::: Vector QueueFamilyDataGraphPropertiesARM))
getPhysicalDeviceQueueFamilyDataGraphPropertiesARM :: forall (io :: * -> *).
MonadIO io =>
PhysicalDevice
-> Word32
-> io
     (Result,
      "queueFamilyDataGraphProperties"
      ::: Vector QueueFamilyDataGraphPropertiesARM)
getPhysicalDeviceQueueFamilyDataGraphPropertiesARM PhysicalDevice
physicalDevice
                                                     Word32
queueFamilyIndex = IO
  (Result,
   "queueFamilyDataGraphProperties"
   ::: Vector QueueFamilyDataGraphPropertiesARM)
-> io
     (Result,
      "queueFamilyDataGraphProperties"
      ::: Vector QueueFamilyDataGraphPropertiesARM)
forall a. IO a -> io a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Result,
    "queueFamilyDataGraphProperties"
    ::: Vector QueueFamilyDataGraphPropertiesARM)
 -> io
      (Result,
       "queueFamilyDataGraphProperties"
       ::: Vector QueueFamilyDataGraphPropertiesARM))
-> (ContT
      (Result,
       "queueFamilyDataGraphProperties"
       ::: Vector QueueFamilyDataGraphPropertiesARM)
      IO
      (Result,
       "queueFamilyDataGraphProperties"
       ::: Vector QueueFamilyDataGraphPropertiesARM)
    -> IO
         (Result,
          "queueFamilyDataGraphProperties"
          ::: Vector QueueFamilyDataGraphPropertiesARM))
-> ContT
     (Result,
      "queueFamilyDataGraphProperties"
      ::: Vector QueueFamilyDataGraphPropertiesARM)
     IO
     (Result,
      "queueFamilyDataGraphProperties"
      ::: Vector QueueFamilyDataGraphPropertiesARM)
-> io
     (Result,
      "queueFamilyDataGraphProperties"
      ::: Vector QueueFamilyDataGraphPropertiesARM)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT
  (Result,
   "queueFamilyDataGraphProperties"
   ::: Vector QueueFamilyDataGraphPropertiesARM)
  IO
  (Result,
   "queueFamilyDataGraphProperties"
   ::: Vector QueueFamilyDataGraphPropertiesARM)
-> IO
     (Result,
      "queueFamilyDataGraphProperties"
      ::: Vector QueueFamilyDataGraphPropertiesARM)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Result,
    "queueFamilyDataGraphProperties"
    ::: Vector QueueFamilyDataGraphPropertiesARM)
   IO
   (Result,
    "queueFamilyDataGraphProperties"
    ::: Vector QueueFamilyDataGraphPropertiesARM)
 -> io
      (Result,
       "queueFamilyDataGraphProperties"
       ::: Vector QueueFamilyDataGraphPropertiesARM))
-> ContT
     (Result,
      "queueFamilyDataGraphProperties"
      ::: Vector QueueFamilyDataGraphPropertiesARM)
     IO
     (Result,
      "queueFamilyDataGraphProperties"
      ::: Vector QueueFamilyDataGraphPropertiesARM)
-> io
     (Result,
      "queueFamilyDataGraphProperties"
      ::: Vector QueueFamilyDataGraphPropertiesARM)
forall a b. (a -> b) -> a -> b
$ do
  let vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARMPtr :: FunPtr
  (Ptr PhysicalDevice_T
   -> Word32
   -> Ptr Word32
   -> Ptr QueueFamilyDataGraphPropertiesARM
   -> IO Result)
vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARMPtr = InstanceCmds
-> FunPtr
     (Ptr PhysicalDevice_T
      -> Word32
      -> Ptr Word32
      -> Ptr QueueFamilyDataGraphPropertiesARM
      -> IO Result)
pVkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM (case PhysicalDevice
physicalDevice of PhysicalDevice{InstanceCmds
instanceCmds :: InstanceCmds
instanceCmds :: PhysicalDevice -> InstanceCmds
instanceCmds} -> InstanceCmds
instanceCmds)
  IO ()
-> ContT
     (Result,
      "queueFamilyDataGraphProperties"
      ::: Vector QueueFamilyDataGraphPropertiesARM)
     IO
     ()
forall (m :: * -> *) a.
Monad m =>
m a
-> ContT
     (Result,
      "queueFamilyDataGraphProperties"
      ::: Vector QueueFamilyDataGraphPropertiesARM)
     m
     a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO ()
 -> ContT
      (Result,
       "queueFamilyDataGraphProperties"
       ::: Vector QueueFamilyDataGraphPropertiesARM)
      IO
      ())
-> IO ()
-> ContT
     (Result,
      "queueFamilyDataGraphProperties"
      ::: Vector QueueFamilyDataGraphPropertiesARM)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr PhysicalDevice_T
   -> Word32
   -> Ptr Word32
   -> Ptr QueueFamilyDataGraphPropertiesARM
   -> IO Result)
vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARMPtr FunPtr
  (Ptr PhysicalDevice_T
   -> Word32
   -> Ptr Word32
   -> Ptr QueueFamilyDataGraphPropertiesARM
   -> IO Result)
-> FunPtr
     (Ptr PhysicalDevice_T
      -> Word32
      -> Ptr Word32
      -> Ptr QueueFamilyDataGraphPropertiesARM
      -> IO Result)
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr PhysicalDevice_T
   -> Word32
   -> Ptr Word32
   -> Ptr QueueFamilyDataGraphPropertiesARM
   -> 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 vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM' :: Ptr PhysicalDevice_T
-> Word32
-> Ptr Word32
-> Ptr QueueFamilyDataGraphPropertiesARM
-> IO Result
vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM' = FunPtr
  (Ptr PhysicalDevice_T
   -> Word32
   -> Ptr Word32
   -> Ptr QueueFamilyDataGraphPropertiesARM
   -> IO Result)
-> Ptr PhysicalDevice_T
-> Word32
-> Ptr Word32
-> Ptr QueueFamilyDataGraphPropertiesARM
-> IO Result
mkVkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM FunPtr
  (Ptr PhysicalDevice_T
   -> Word32
   -> Ptr Word32
   -> Ptr QueueFamilyDataGraphPropertiesARM
   -> IO Result)
vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARMPtr
  let physicalDevice' :: Ptr PhysicalDevice_T
physicalDevice' = PhysicalDevice -> Ptr PhysicalDevice_T
physicalDeviceHandle (PhysicalDevice
physicalDevice)
  pPQueueFamilyDataGraphPropertyCount <- ((Ptr Word32
  -> IO
       (Result,
        "queueFamilyDataGraphProperties"
        ::: Vector QueueFamilyDataGraphPropertiesARM))
 -> IO
      (Result,
       "queueFamilyDataGraphProperties"
       ::: Vector QueueFamilyDataGraphPropertiesARM))
-> ContT
     (Result,
      "queueFamilyDataGraphProperties"
      ::: Vector QueueFamilyDataGraphPropertiesARM)
     IO
     (Ptr Word32)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr Word32
   -> IO
        (Result,
         "queueFamilyDataGraphProperties"
         ::: Vector QueueFamilyDataGraphPropertiesARM))
  -> IO
       (Result,
        "queueFamilyDataGraphProperties"
        ::: Vector QueueFamilyDataGraphPropertiesARM))
 -> ContT
      (Result,
       "queueFamilyDataGraphProperties"
       ::: Vector QueueFamilyDataGraphPropertiesARM)
      IO
      (Ptr Word32))
-> ((Ptr Word32
     -> IO
          (Result,
           "queueFamilyDataGraphProperties"
           ::: Vector QueueFamilyDataGraphPropertiesARM))
    -> IO
         (Result,
          "queueFamilyDataGraphProperties"
          ::: Vector QueueFamilyDataGraphPropertiesARM))
-> ContT
     (Result,
      "queueFamilyDataGraphProperties"
      ::: Vector QueueFamilyDataGraphPropertiesARM)
     IO
     (Ptr Word32)
forall a b. (a -> b) -> a -> b
$ IO (Ptr Word32)
-> (Ptr Word32 -> IO ())
-> (Ptr Word32
    -> IO
         (Result,
          "queueFamilyDataGraphProperties"
          ::: Vector QueueFamilyDataGraphPropertiesARM))
-> IO
     (Result,
      "queueFamilyDataGraphProperties"
      ::: Vector QueueFamilyDataGraphPropertiesARM)
forall a b c. IO a -> (a -> IO b) -> (a -> IO c) -> IO c
bracket (forall a. Int -> IO (Ptr a)
callocBytes @Word32 Int
4) Ptr Word32 -> IO ()
forall a. Ptr a -> IO ()
free
  r <- lift $ traceAroundEvent "vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM" (vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM'
                                                                                         physicalDevice'
                                                                                         (queueFamilyIndex)
                                                                                         (pPQueueFamilyDataGraphPropertyCount)
                                                                                         (nullPtr))
  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
  pQueueFamilyDataGraphPropertyCount <- lift $ peek @Word32 pPQueueFamilyDataGraphPropertyCount
  pPQueueFamilyDataGraphProperties <- ContT $ bracket (callocBytes @QueueFamilyDataGraphPropertiesARM ((fromIntegral (pQueueFamilyDataGraphPropertyCount)) * 160)) free
  _ <- traverse (\Int
i -> ((()
  -> IO
       (Result,
        "queueFamilyDataGraphProperties"
        ::: Vector QueueFamilyDataGraphPropertiesARM))
 -> IO
      (Result,
       "queueFamilyDataGraphProperties"
       ::: Vector QueueFamilyDataGraphPropertiesARM))
-> ContT
     (Result,
      "queueFamilyDataGraphProperties"
      ::: Vector QueueFamilyDataGraphPropertiesARM)
     IO
     ()
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((()
   -> IO
        (Result,
         "queueFamilyDataGraphProperties"
         ::: Vector QueueFamilyDataGraphPropertiesARM))
  -> IO
       (Result,
        "queueFamilyDataGraphProperties"
        ::: Vector QueueFamilyDataGraphPropertiesARM))
 -> ContT
      (Result,
       "queueFamilyDataGraphProperties"
       ::: Vector QueueFamilyDataGraphPropertiesARM)
      IO
      ())
-> ((()
     -> IO
          (Result,
           "queueFamilyDataGraphProperties"
           ::: Vector QueueFamilyDataGraphPropertiesARM))
    -> IO
         (Result,
          "queueFamilyDataGraphProperties"
          ::: Vector QueueFamilyDataGraphPropertiesARM))
-> ContT
     (Result,
      "queueFamilyDataGraphProperties"
      ::: Vector QueueFamilyDataGraphPropertiesARM)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr QueueFamilyDataGraphPropertiesARM
-> IO
     (Result,
      "queueFamilyDataGraphProperties"
      ::: Vector QueueFamilyDataGraphPropertiesARM)
-> IO
     (Result,
      "queueFamilyDataGraphProperties"
      ::: Vector QueueFamilyDataGraphPropertiesARM)
forall b. Ptr QueueFamilyDataGraphPropertiesARM -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> IO b -> IO b
pokeZeroCStruct (Ptr QueueFamilyDataGraphPropertiesARM
pPQueueFamilyDataGraphProperties Ptr QueueFamilyDataGraphPropertiesARM
-> Int -> Ptr QueueFamilyDataGraphPropertiesARM
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
i Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
160) :: Ptr QueueFamilyDataGraphPropertiesARM) (IO
   (Result,
    "queueFamilyDataGraphProperties"
    ::: Vector QueueFamilyDataGraphPropertiesARM)
 -> IO
      (Result,
       "queueFamilyDataGraphProperties"
       ::: Vector QueueFamilyDataGraphPropertiesARM))
-> ((()
     -> IO
          (Result,
           "queueFamilyDataGraphProperties"
           ::: Vector QueueFamilyDataGraphPropertiesARM))
    -> IO
         (Result,
          "queueFamilyDataGraphProperties"
          ::: Vector QueueFamilyDataGraphPropertiesARM))
-> (()
    -> IO
         (Result,
          "queueFamilyDataGraphProperties"
          ::: Vector QueueFamilyDataGraphPropertiesARM))
-> IO
     (Result,
      "queueFamilyDataGraphProperties"
      ::: Vector QueueFamilyDataGraphPropertiesARM)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((()
 -> IO
      (Result,
       "queueFamilyDataGraphProperties"
       ::: Vector QueueFamilyDataGraphPropertiesARM))
-> ()
-> IO
     (Result,
      "queueFamilyDataGraphProperties"
      ::: Vector QueueFamilyDataGraphPropertiesARM)
forall a b. (a -> b) -> a -> b
$ ())) [0..(fromIntegral (pQueueFamilyDataGraphPropertyCount)) - 1]
  r' <- lift $ traceAroundEvent "vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM" (vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARM'
                                                                                          physicalDevice'
                                                                                          (queueFamilyIndex)
                                                                                          (pPQueueFamilyDataGraphPropertyCount)
                                                                                          ((pPQueueFamilyDataGraphProperties)))
  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
  pQueueFamilyDataGraphPropertyCount' <- lift $ peek @Word32 pPQueueFamilyDataGraphPropertyCount
  pQueueFamilyDataGraphProperties' <- lift $ generateM (fromIntegral (pQueueFamilyDataGraphPropertyCount')) (\Int
i -> forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @QueueFamilyDataGraphPropertiesARM (((Ptr QueueFamilyDataGraphPropertiesARM
pPQueueFamilyDataGraphProperties) Ptr QueueFamilyDataGraphPropertiesARM
-> Int -> Ptr QueueFamilyDataGraphPropertiesARM
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
160 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr QueueFamilyDataGraphPropertiesARM)))
  pure $ ((r'), pQueueFamilyDataGraphProperties')


foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM
  :: FunPtr (Ptr PhysicalDevice_T -> Ptr PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM -> Ptr QueueFamilyDataGraphProcessingEnginePropertiesARM -> IO ()) -> Ptr PhysicalDevice_T -> Ptr PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM -> Ptr QueueFamilyDataGraphProcessingEnginePropertiesARM -> IO ()

-- | vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM -
-- Query the properties of a data graph processing engine for a specific
-- queue family of a physical device
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ARM_data_graph VK_ARM_data_graph>,
-- 'Vulkan.Core10.Handles.PhysicalDevice',
-- 'PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM',
-- 'QueueFamilyDataGraphProcessingEnginePropertiesARM'
getPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM :: forall io
                                                                    . ( MonadIO io )
                                                                   => -- | @physicalDevice@ is the physical device to query.
                                                                      --
                                                                      -- #VUID-vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM-physicalDevice-parameter#
                                                                      -- @physicalDevice@ /must/ be a valid
                                                                      -- 'Vulkan.Core10.Handles.PhysicalDevice' handle
                                                                      PhysicalDevice
                                                                   -> -- | @pQueueFamilyDataGraphProcessingEngineInfo@ is a pointer to a
                                                                      -- 'PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM' structure
                                                                      -- that specifies the data graph processing engine and queue family to
                                                                      -- query.
                                                                      --
                                                                      -- #VUID-vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM-pQueueFamilyDataGraphProcessingEngineInfo-parameter#
                                                                      -- @pQueueFamilyDataGraphProcessingEngineInfo@ /must/ be a valid pointer to
                                                                      -- a valid 'PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM'
                                                                      -- structure
                                                                      PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
                                                                   -> io (QueueFamilyDataGraphProcessingEnginePropertiesARM)
getPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM :: forall (io :: * -> *).
MonadIO io =>
PhysicalDevice
-> PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
-> io QueueFamilyDataGraphProcessingEnginePropertiesARM
getPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM PhysicalDevice
physicalDevice
                                                                     PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
queueFamilyDataGraphProcessingEngineInfo = IO QueueFamilyDataGraphProcessingEnginePropertiesARM
-> io QueueFamilyDataGraphProcessingEnginePropertiesARM
forall a. IO a -> io a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO QueueFamilyDataGraphProcessingEnginePropertiesARM
 -> io QueueFamilyDataGraphProcessingEnginePropertiesARM)
-> (ContT
      QueueFamilyDataGraphProcessingEnginePropertiesARM
      IO
      QueueFamilyDataGraphProcessingEnginePropertiesARM
    -> IO QueueFamilyDataGraphProcessingEnginePropertiesARM)
-> ContT
     QueueFamilyDataGraphProcessingEnginePropertiesARM
     IO
     QueueFamilyDataGraphProcessingEnginePropertiesARM
-> io QueueFamilyDataGraphProcessingEnginePropertiesARM
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT
  QueueFamilyDataGraphProcessingEnginePropertiesARM
  IO
  QueueFamilyDataGraphProcessingEnginePropertiesARM
-> IO QueueFamilyDataGraphProcessingEnginePropertiesARM
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   QueueFamilyDataGraphProcessingEnginePropertiesARM
   IO
   QueueFamilyDataGraphProcessingEnginePropertiesARM
 -> io QueueFamilyDataGraphProcessingEnginePropertiesARM)
-> ContT
     QueueFamilyDataGraphProcessingEnginePropertiesARM
     IO
     QueueFamilyDataGraphProcessingEnginePropertiesARM
-> io QueueFamilyDataGraphProcessingEnginePropertiesARM
forall a b. (a -> b) -> a -> b
$ do
  let vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARMPtr :: FunPtr
  (Ptr PhysicalDevice_T
   -> Ptr PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
   -> Ptr QueueFamilyDataGraphProcessingEnginePropertiesARM
   -> IO ())
vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARMPtr = InstanceCmds
-> FunPtr
     (Ptr PhysicalDevice_T
      -> Ptr PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
      -> Ptr QueueFamilyDataGraphProcessingEnginePropertiesARM
      -> IO ())
pVkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM (case PhysicalDevice
physicalDevice of PhysicalDevice{InstanceCmds
instanceCmds :: PhysicalDevice -> InstanceCmds
instanceCmds :: InstanceCmds
instanceCmds} -> InstanceCmds
instanceCmds)
  IO ()
-> ContT QueueFamilyDataGraphProcessingEnginePropertiesARM IO ()
forall (m :: * -> *) a.
Monad m =>
m a -> ContT QueueFamilyDataGraphProcessingEnginePropertiesARM m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO ()
 -> ContT QueueFamilyDataGraphProcessingEnginePropertiesARM IO ())
-> IO ()
-> ContT QueueFamilyDataGraphProcessingEnginePropertiesARM IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr PhysicalDevice_T
   -> Ptr PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
   -> Ptr QueueFamilyDataGraphProcessingEnginePropertiesARM
   -> IO ())
vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARMPtr FunPtr
  (Ptr PhysicalDevice_T
   -> Ptr PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
   -> Ptr QueueFamilyDataGraphProcessingEnginePropertiesARM
   -> IO ())
-> FunPtr
     (Ptr PhysicalDevice_T
      -> Ptr PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
      -> Ptr QueueFamilyDataGraphProcessingEnginePropertiesARM
      -> IO ())
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr PhysicalDevice_T
   -> Ptr PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
   -> Ptr QueueFamilyDataGraphProcessingEnginePropertiesARM
   -> 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 vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM' :: Ptr PhysicalDevice_T
-> Ptr PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
-> Ptr QueueFamilyDataGraphProcessingEnginePropertiesARM
-> IO ()
vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM' = FunPtr
  (Ptr PhysicalDevice_T
   -> Ptr PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
   -> Ptr QueueFamilyDataGraphProcessingEnginePropertiesARM
   -> IO ())
-> Ptr PhysicalDevice_T
-> Ptr PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
-> Ptr QueueFamilyDataGraphProcessingEnginePropertiesARM
-> IO ()
mkVkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM FunPtr
  (Ptr PhysicalDevice_T
   -> Ptr PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
   -> Ptr QueueFamilyDataGraphProcessingEnginePropertiesARM
   -> IO ())
vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARMPtr
  pQueueFamilyDataGraphProcessingEngineInfo <- ((Ptr PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
  -> IO QueueFamilyDataGraphProcessingEnginePropertiesARM)
 -> IO QueueFamilyDataGraphProcessingEnginePropertiesARM)
-> ContT
     QueueFamilyDataGraphProcessingEnginePropertiesARM
     IO
     (Ptr PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
   -> IO QueueFamilyDataGraphProcessingEnginePropertiesARM)
  -> IO QueueFamilyDataGraphProcessingEnginePropertiesARM)
 -> ContT
      QueueFamilyDataGraphProcessingEnginePropertiesARM
      IO
      (Ptr PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM))
-> ((Ptr PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
     -> IO QueueFamilyDataGraphProcessingEnginePropertiesARM)
    -> IO QueueFamilyDataGraphProcessingEnginePropertiesARM)
-> ContT
     QueueFamilyDataGraphProcessingEnginePropertiesARM
     IO
     (Ptr PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM)
forall a b. (a -> b) -> a -> b
$ PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
-> (Ptr PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
    -> IO QueueFamilyDataGraphProcessingEnginePropertiesARM)
-> IO QueueFamilyDataGraphProcessingEnginePropertiesARM
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
forall b.
PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
-> (Ptr PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
    -> IO b)
-> IO b
withCStruct (PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
queueFamilyDataGraphProcessingEngineInfo)
  pPQueueFamilyDataGraphProcessingEngineProperties <- ContT (withZeroCStruct @QueueFamilyDataGraphProcessingEnginePropertiesARM)
  lift $ traceAroundEvent "vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM" (vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM'
                                                                                                    (physicalDeviceHandle (physicalDevice))
                                                                                                    pQueueFamilyDataGraphProcessingEngineInfo
                                                                                                    (pPQueueFamilyDataGraphProcessingEngineProperties))
  pQueueFamilyDataGraphProcessingEngineProperties <- lift $ peekCStruct @QueueFamilyDataGraphProcessingEnginePropertiesARM pPQueueFamilyDataGraphProcessingEngineProperties
  pure $ (pQueueFamilyDataGraphProcessingEngineProperties)


-- | VkPhysicalDeviceDataGraphFeaturesARM - Structure describing features to
-- control data graph pipelines
--
-- = Description
--
-- If the 'PhysicalDeviceDataGraphFeaturesARM' 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
-- 'PhysicalDeviceDataGraphFeaturesARM', 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_ARM_data_graph VK_ARM_data_graph>,
-- 'Vulkan.Core10.FundamentalTypes.Bool32',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data PhysicalDeviceDataGraphFeaturesARM = PhysicalDeviceDataGraphFeaturesARM
  { -- | #features-dataGraph# @dataGraph@ specifies whether data graph pipelines
    -- /can/ be used.
    PhysicalDeviceDataGraphFeaturesARM -> Bool
dataGraph :: Bool
  , -- | #features-dataGraphUpdateAfterBind# @dataGraphUpdateAfterBind@ specifies
    -- whether data graph pipelines /can/ be created with a
    -- 'Vulkan.Core10.Handles.PipelineLayout' that uses one or more
    -- 'Vulkan.Core10.Handles.DescriptorSetLayout' objects created with the
    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
    -- bit set.
    PhysicalDeviceDataGraphFeaturesARM -> Bool
dataGraphUpdateAfterBind :: Bool
  , -- | #features-dataGraphSpecializationConstants#
    -- @dataGraphSpecializationConstants@ specifies whether data graph
    -- pipelines /can/ be created from shader modules that use specialization
    -- constants.
    PhysicalDeviceDataGraphFeaturesARM -> Bool
dataGraphSpecializationConstants :: Bool
  , -- | #features-dataGraphDescriptorBuffer# @dataGraphDescriptorBuffer@
    -- specifies whether data graph pipelines /can/ use descriptor buffers.
    PhysicalDeviceDataGraphFeaturesARM -> Bool
dataGraphDescriptorBuffer :: Bool
  , -- | #features-dataGraphShaderModule# @dataGraphShaderModule@ specifies
    -- whether data graph pipelines /can/ be created from a shader module.
    PhysicalDeviceDataGraphFeaturesARM -> Bool
dataGraphShaderModule :: Bool
  }
  deriving (Typeable, PhysicalDeviceDataGraphFeaturesARM
-> PhysicalDeviceDataGraphFeaturesARM -> Bool
(PhysicalDeviceDataGraphFeaturesARM
 -> PhysicalDeviceDataGraphFeaturesARM -> Bool)
-> (PhysicalDeviceDataGraphFeaturesARM
    -> PhysicalDeviceDataGraphFeaturesARM -> Bool)
-> Eq PhysicalDeviceDataGraphFeaturesARM
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: PhysicalDeviceDataGraphFeaturesARM
-> PhysicalDeviceDataGraphFeaturesARM -> Bool
== :: PhysicalDeviceDataGraphFeaturesARM
-> PhysicalDeviceDataGraphFeaturesARM -> Bool
$c/= :: PhysicalDeviceDataGraphFeaturesARM
-> PhysicalDeviceDataGraphFeaturesARM -> Bool
/= :: PhysicalDeviceDataGraphFeaturesARM
-> PhysicalDeviceDataGraphFeaturesARM -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (PhysicalDeviceDataGraphFeaturesARM)
#endif
deriving instance Show PhysicalDeviceDataGraphFeaturesARM

instance ToCStruct PhysicalDeviceDataGraphFeaturesARM where
  withCStruct :: forall b.
PhysicalDeviceDataGraphFeaturesARM
-> (Ptr PhysicalDeviceDataGraphFeaturesARM -> IO b) -> IO b
withCStruct PhysicalDeviceDataGraphFeaturesARM
x Ptr PhysicalDeviceDataGraphFeaturesARM -> IO b
f = Int -> (Ptr PhysicalDeviceDataGraphFeaturesARM -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
40 ((Ptr PhysicalDeviceDataGraphFeaturesARM -> IO b) -> IO b)
-> (Ptr PhysicalDeviceDataGraphFeaturesARM -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr PhysicalDeviceDataGraphFeaturesARM
p -> Ptr PhysicalDeviceDataGraphFeaturesARM
-> PhysicalDeviceDataGraphFeaturesARM -> IO b -> IO b
forall b.
Ptr PhysicalDeviceDataGraphFeaturesARM
-> PhysicalDeviceDataGraphFeaturesARM -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr PhysicalDeviceDataGraphFeaturesARM
p PhysicalDeviceDataGraphFeaturesARM
x (Ptr PhysicalDeviceDataGraphFeaturesARM -> IO b
f Ptr PhysicalDeviceDataGraphFeaturesARM
p)
  pokeCStruct :: forall b.
Ptr PhysicalDeviceDataGraphFeaturesARM
-> PhysicalDeviceDataGraphFeaturesARM -> IO b -> IO b
pokeCStruct Ptr PhysicalDeviceDataGraphFeaturesARM
p PhysicalDeviceDataGraphFeaturesARM{Bool
dataGraph :: PhysicalDeviceDataGraphFeaturesARM -> Bool
dataGraphUpdateAfterBind :: PhysicalDeviceDataGraphFeaturesARM -> Bool
dataGraphSpecializationConstants :: PhysicalDeviceDataGraphFeaturesARM -> Bool
dataGraphDescriptorBuffer :: PhysicalDeviceDataGraphFeaturesARM -> Bool
dataGraphShaderModule :: PhysicalDeviceDataGraphFeaturesARM -> Bool
dataGraph :: Bool
dataGraphUpdateAfterBind :: Bool
dataGraphSpecializationConstants :: Bool
dataGraphDescriptorBuffer :: Bool
dataGraphShaderModule :: Bool
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDataGraphFeaturesARM
p Ptr PhysicalDeviceDataGraphFeaturesARM -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PHYSICAL_DEVICE_DATA_GRAPH_FEATURES_ARM)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDataGraphFeaturesARM
p Ptr PhysicalDeviceDataGraphFeaturesARM -> 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 PhysicalDeviceDataGraphFeaturesARM
p Ptr PhysicalDeviceDataGraphFeaturesARM -> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
dataGraph))
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDataGraphFeaturesARM
p Ptr PhysicalDeviceDataGraphFeaturesARM -> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
dataGraphUpdateAfterBind))
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDataGraphFeaturesARM
p Ptr PhysicalDeviceDataGraphFeaturesARM -> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
dataGraphSpecializationConstants))
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDataGraphFeaturesARM
p Ptr PhysicalDeviceDataGraphFeaturesARM -> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
28 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
dataGraphDescriptorBuffer))
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDataGraphFeaturesARM
p Ptr PhysicalDeviceDataGraphFeaturesARM -> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
dataGraphShaderModule))
    IO b
f
  cStructSize :: Int
cStructSize = Int
40
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b. Ptr PhysicalDeviceDataGraphFeaturesARM -> IO b -> IO b
pokeZeroCStruct Ptr PhysicalDeviceDataGraphFeaturesARM
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDataGraphFeaturesARM
p Ptr PhysicalDeviceDataGraphFeaturesARM -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PHYSICAL_DEVICE_DATA_GRAPH_FEATURES_ARM)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDataGraphFeaturesARM
p Ptr PhysicalDeviceDataGraphFeaturesARM -> 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 PhysicalDeviceDataGraphFeaturesARM
p Ptr PhysicalDeviceDataGraphFeaturesARM -> 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 PhysicalDeviceDataGraphFeaturesARM
p Ptr PhysicalDeviceDataGraphFeaturesARM -> 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))
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDataGraphFeaturesARM
p Ptr PhysicalDeviceDataGraphFeaturesARM -> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: 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 PhysicalDeviceDataGraphFeaturesARM
p Ptr PhysicalDeviceDataGraphFeaturesARM -> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
28 :: 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 PhysicalDeviceDataGraphFeaturesARM
p Ptr PhysicalDeviceDataGraphFeaturesARM -> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
forall a. Zero a => a
zero))
    IO b
f

instance FromCStruct PhysicalDeviceDataGraphFeaturesARM where
  peekCStruct :: Ptr PhysicalDeviceDataGraphFeaturesARM
-> IO PhysicalDeviceDataGraphFeaturesARM
peekCStruct Ptr PhysicalDeviceDataGraphFeaturesARM
p = do
    dataGraph <- forall a. Storable a => Ptr a -> IO a
peek @Bool32 ((Ptr PhysicalDeviceDataGraphFeaturesARM
p Ptr PhysicalDeviceDataGraphFeaturesARM -> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Bool32))
    dataGraphUpdateAfterBind <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
    dataGraphSpecializationConstants <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
    dataGraphDescriptorBuffer <- peek @Bool32 ((p `plusPtr` 28 :: Ptr Bool32))
    dataGraphShaderModule <- peek @Bool32 ((p `plusPtr` 32 :: Ptr Bool32))
    pure $ PhysicalDeviceDataGraphFeaturesARM
             (bool32ToBool dataGraph)
             (bool32ToBool dataGraphUpdateAfterBind)
             (bool32ToBool dataGraphSpecializationConstants)
             (bool32ToBool dataGraphDescriptorBuffer)
             (bool32ToBool dataGraphShaderModule)

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

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


-- | VkDataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM -
-- Structure specifying semi-structured sparsity parameters of a tensor
-- data graph pipeline constant
--
-- = Description
--
-- This extension does not provide applications with a way of knowing which
-- combinations of @dimension@, @zeroCount@, and @groupSize@ an
-- implementation /can/ take advantage of. Providing sparsity information
-- for a graph constant is always valid and recommended, regardless of the
-- specific combinations an implementation /can/ take advantage of. When
-- they /can/ not take advantage of the sparsity information,
-- implementations will ignore it and treat the data as dense.
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ARM_data_graph VK_ARM_data_graph>,
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ARM_tensors VK_ARM_tensors>,
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM = DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
  { -- | @dimension@ is the dimension of the tensor along which its data is
    -- sparse.
    DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
-> Word32
dimension :: Word32
  , -- | @zeroCount@ is the number of tensor elements that /must/ be zero in
    -- every group of @groupSize@ elements.
    DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
-> Word32
zeroCount :: Word32
  , -- | @groupSize@ is the number of tensor elements in a group.
    DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
-> Word32
groupSize :: Word32
  }
  deriving (Typeable, DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
-> DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
-> Bool
(DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
 -> DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
 -> Bool)
-> (DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
    -> DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
    -> Bool)
-> Eq DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
-> DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
-> Bool
== :: DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
-> DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
-> Bool
$c/= :: DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
-> DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
-> Bool
/= :: DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
-> DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
-> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM)
#endif
deriving instance Show DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM

instance ToCStruct DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM where
  withCStruct :: forall b.
DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
-> (Ptr
      DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
    -> IO b)
-> IO b
withCStruct DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
x Ptr DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
-> IO b
f = Int
-> (Ptr
      DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
    -> IO b)
-> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
32 ((Ptr DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
  -> IO b)
 -> IO b)
-> (Ptr
      DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
    -> IO b)
-> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
p -> Ptr DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
-> DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
-> IO b
-> IO b
forall b.
Ptr DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
-> DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
-> IO b
-> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
p DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
x (Ptr DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
-> IO b
f Ptr DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
p)
  pokeCStruct :: forall b.
Ptr DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
-> DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
-> IO b
-> IO b
pokeCStruct Ptr DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
p DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM{Word32
dimension :: DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
-> Word32
zeroCount :: DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
-> Word32
groupSize :: DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
-> Word32
dimension :: Word32
zeroCount :: Word32
groupSize :: Word32
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
p Ptr DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_CONSTANT_TENSOR_SEMI_STRUCTURED_SPARSITY_INFO_ARM)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
p Ptr DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
p Ptr DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
-> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32)) (Word32
dimension)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
p Ptr DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
-> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr Word32)) (Word32
zeroCount)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
p Ptr DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
-> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Word32)) (Word32
groupSize)
    IO b
f
  cStructSize :: Int
cStructSize = Int
32
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b.
Ptr DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
-> IO b -> IO b
pokeZeroCStruct Ptr DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
p Ptr DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_CONSTANT_TENSOR_SEMI_STRUCTURED_SPARSITY_INFO_ARM)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
p Ptr DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
p Ptr DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
-> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
p Ptr DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
-> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
p Ptr DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
-> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM where
  peekCStruct :: Ptr DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
-> IO DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
peekCStruct Ptr DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
p = do
    dimension <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
p Ptr DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
-> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32))
    zeroCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
    groupSize <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
    pure $ DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
             dimension zeroCount groupSize

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

instance Zero DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM where
  zero :: DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
zero = Word32
-> Word32
-> Word32
-> DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
           Word32
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero


-- | VkDataGraphPipelineConstantARM - Structure specifying parameters of a
-- data graph pipeline constant
--
-- = Description
--
-- The size and layout of the data pointed to by @pConstantData@ is
-- specified by a specific structure in the @pNext@ chain for each type of
-- graph constant.
--
-- For graph constants of tensor type, the layout of the data is specified
-- by a 'Vulkan.Extensions.VK_ARM_tensors.TensorDescriptionARM' structure.
-- The data /must/ be laid out according to the following members of this
-- structure:
--
-- -   'Vulkan.Extensions.VK_ARM_tensors.TensorDescriptionARM'::@tiling@
--
-- -   'Vulkan.Extensions.VK_ARM_tensors.TensorDescriptionARM'::@format@
--
-- -   'Vulkan.Extensions.VK_ARM_tensors.TensorDescriptionARM'::@dimensionCount@
--
-- -   'Vulkan.Extensions.VK_ARM_tensors.TensorDescriptionARM'::@pDimensions@
--
-- -   'Vulkan.Extensions.VK_ARM_tensors.TensorDescriptionARM'::@pStrides@
--
-- The presence of a
-- 'DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM' structure
-- in the @pNext@ chain has no impact on the expected layout of the data
-- pointed to by @pConstantData@.
--
-- == Valid Usage
--
-- -   #VUID-VkDataGraphPipelineConstantARM-pNext-09775# If the @pNext@
--     chain of this structure includes one or more
--     'DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM'
--     structures then it /must/ also include a
--     'Vulkan.Extensions.VK_ARM_tensors.TensorDescriptionARM' structure
--
-- -   #VUID-VkDataGraphPipelineConstantARM-pNext-09776# If the @pNext@
--     chain of this structure includes one or more
--     'DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM'
--     structures then, for each structure,
--     'DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM'::@dimension@
--     /must/ be less than
--     'Vulkan.Extensions.VK_ARM_tensors.TensorDescriptionARM'::@dimensionCount@
--
-- -   #VUID-VkDataGraphPipelineConstantARM-pNext-09777# If the @pNext@
--     chain of this structure includes a
--     'DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM'
--     structure then, for each structure,
--     'Vulkan.Extensions.VK_ARM_tensors.TensorDescriptionARM'::@pDimensions@['DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM'::@dimension@]
--     /must/ be a multiple of
--     'DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM'::@groupSize@
--
-- -   #VUID-VkDataGraphPipelineConstantARM-pNext-09870# If the @pNext@
--     chain of this structure includes multiple
--     'DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM'
--     structures then no two structures /may/ have their
--     'DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM'::@dimension@
--     member set to the same value
--
-- -   #VUID-VkDataGraphPipelineConstantARM-id-09850# If the @pNext@ chain
--     of this structure includes a
--     'Vulkan.Extensions.VK_ARM_tensors.TensorDescriptionARM' structure,
--     then its @usage@ member /must/ contain
--     'Vulkan.Extensions.VK_ARM_tensors.TENSOR_USAGE_DATA_GRAPH_BIT_ARM'
--
-- -   #VUID-VkDataGraphPipelineConstantARM-pNext-09917# If the @pNext@
--     chain of this structure includes a
--     'Vulkan.Extensions.VK_ARM_tensors.TensorDescriptionARM' structure,
--     then its @tiling@ member /must/ be
--     'Vulkan.Extensions.VK_ARM_tensors.TENSOR_TILING_LINEAR_ARM'
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkDataGraphPipelineConstantARM-sType-sType# @sType@ /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_CONSTANT_ARM'
--
-- -   #VUID-VkDataGraphPipelineConstantARM-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
--     'DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM' or
--     'Vulkan.Extensions.VK_ARM_tensors.TensorDescriptionARM'
--
-- -   #VUID-VkDataGraphPipelineConstantARM-sType-unique# The @sType@ value
--     of each structure in the @pNext@ chain /must/ be unique, with the
--     exception of structures of type
--     'DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM'
--
-- -   #VUID-VkDataGraphPipelineConstantARM-pConstantData-parameter#
--     @pConstantData@ /must/ be a pointer value
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ARM_data_graph VK_ARM_data_graph>,
-- 'DataGraphPipelineShaderModuleCreateInfoARM',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data DataGraphPipelineConstantARM (es :: [Type]) = DataGraphPipelineConstantARM
  { -- | @pNext@ is a pointer to a structure extending this structure.
    forall (es :: [*]). DataGraphPipelineConstantARM es -> Chain es
next :: Chain es
  , -- | @id@ is the unique identifier of the graph constant this structure
    -- describes.
    forall (es :: [*]). DataGraphPipelineConstantARM es -> Word32
id' :: Word32
  , -- | @pConstantData@ is a pointer to the data for this graph constant.
    forall (es :: [*]). DataGraphPipelineConstantARM es -> Ptr ()
constantData :: Ptr ()
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DataGraphPipelineConstantARM (es :: [Type]))
#endif
deriving instance Show (Chain es) => Show (DataGraphPipelineConstantARM es)

instance Extensible DataGraphPipelineConstantARM where
  extensibleTypeName :: String
extensibleTypeName = String
"DataGraphPipelineConstantARM"
  setNext :: forall (ds :: [*]) (es :: [*]).
DataGraphPipelineConstantARM ds
-> Chain es -> DataGraphPipelineConstantARM es
setNext DataGraphPipelineConstantARM{Word32
Ptr ()
Chain ds
next :: forall (es :: [*]). DataGraphPipelineConstantARM es -> Chain es
id' :: forall (es :: [*]). DataGraphPipelineConstantARM es -> Word32
constantData :: forall (es :: [*]). DataGraphPipelineConstantARM es -> Ptr ()
next :: Chain ds
id' :: Word32
constantData :: Ptr ()
..} Chain es
next' = DataGraphPipelineConstantARM{next :: Chain es
next = Chain es
next', Word32
Ptr ()
id' :: Word32
constantData :: Ptr ()
id' :: Word32
constantData :: Ptr ()
..}
  getNext :: forall (es :: [*]). DataGraphPipelineConstantARM es -> Chain es
getNext DataGraphPipelineConstantARM{Word32
Ptr ()
Chain es
next :: forall (es :: [*]). DataGraphPipelineConstantARM es -> Chain es
id' :: forall (es :: [*]). DataGraphPipelineConstantARM es -> Word32
constantData :: forall (es :: [*]). DataGraphPipelineConstantARM es -> Ptr ()
next :: Chain es
id' :: Word32
constantData :: Ptr ()
..} = Chain es
next
  extends :: forall e b proxy. Typeable e => proxy e -> (Extends DataGraphPipelineConstantARM e => b) -> Maybe b
  extends :: forall e b (proxy :: * -> *).
Typeable e =>
proxy e -> (Extends DataGraphPipelineConstantARM e => b) -> Maybe b
extends proxy e
_ Extends DataGraphPipelineConstantARM e => b
f
    | Just e :~: DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM
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 @DataGraphPipelineConstantTensorSemiStructuredSparsityInfoARM = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DataGraphPipelineConstantARM e => b
f
    | Just e :~: TensorDescriptionARM
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 @TensorDescriptionARM = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DataGraphPipelineConstantARM e => b
f
    | Bool
otherwise = Maybe b
forall a. Maybe a
Nothing

instance ( Extendss DataGraphPipelineConstantARM es
         , PokeChain es ) => ToCStruct (DataGraphPipelineConstantARM es) where
  withCStruct :: forall b.
DataGraphPipelineConstantARM es
-> (Ptr (DataGraphPipelineConstantARM es) -> IO b) -> IO b
withCStruct DataGraphPipelineConstantARM es
x Ptr (DataGraphPipelineConstantARM es) -> IO b
f = Int -> (Ptr (DataGraphPipelineConstantARM es) -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
32 ((Ptr (DataGraphPipelineConstantARM es) -> IO b) -> IO b)
-> (Ptr (DataGraphPipelineConstantARM es) -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr (DataGraphPipelineConstantARM es)
p -> Ptr (DataGraphPipelineConstantARM es)
-> DataGraphPipelineConstantARM es -> IO b -> IO b
forall b.
Ptr (DataGraphPipelineConstantARM es)
-> DataGraphPipelineConstantARM es -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr (DataGraphPipelineConstantARM es)
p DataGraphPipelineConstantARM es
x (Ptr (DataGraphPipelineConstantARM es) -> IO b
f Ptr (DataGraphPipelineConstantARM es)
p)
  pokeCStruct :: forall b.
Ptr (DataGraphPipelineConstantARM es)
-> DataGraphPipelineConstantARM es -> IO b -> IO b
pokeCStruct Ptr (DataGraphPipelineConstantARM es)
p DataGraphPipelineConstantARM{Word32
Ptr ()
Chain es
next :: forall (es :: [*]). DataGraphPipelineConstantARM es -> Chain es
id' :: forall (es :: [*]). DataGraphPipelineConstantARM es -> Word32
constantData :: forall (es :: [*]). DataGraphPipelineConstantARM es -> Ptr ()
next :: Chain es
id' :: Word32
constantData :: Ptr ()
..} 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 (DataGraphPipelineConstantARM es)
p Ptr (DataGraphPipelineConstantARM es) -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_CONSTANT_ARM)
    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 Word32)) (id')
    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr ()))) (constantData)
    lift $ f
  cStructSize :: Int
cStructSize = Int
32
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b. Ptr (DataGraphPipelineConstantARM es) -> IO b -> IO b
pokeZeroCStruct Ptr (DataGraphPipelineConstantARM 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 (DataGraphPipelineConstantARM es)
p Ptr (DataGraphPipelineConstantARM es) -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_CONSTANT_ARM)
    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` 16 :: Ptr Word32)) (zero)
    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr ()))) (zero)
    lift $ f

instance ( Extendss DataGraphPipelineConstantARM es
         , PeekChain es ) => FromCStruct (DataGraphPipelineConstantARM es) where
  peekCStruct :: Ptr (DataGraphPipelineConstantARM es)
-> IO (DataGraphPipelineConstantARM es)
peekCStruct Ptr (DataGraphPipelineConstantARM es)
p = do
    pNext <- forall a. Storable a => Ptr a -> IO a
peek @(Ptr ()) ((Ptr (DataGraphPipelineConstantARM es)
p Ptr (DataGraphPipelineConstantARM es) -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ())))
    next <- peekChain (castPtr pNext)
    id' <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
    pConstantData <- peek @(Ptr ()) ((p `plusPtr` 24 :: Ptr (Ptr ())))
    pure $ DataGraphPipelineConstantARM
             next id' pConstantData

instance es ~ '[] => Zero (DataGraphPipelineConstantARM es) where
  zero :: DataGraphPipelineConstantARM es
zero = Chain es -> Word32 -> Ptr () -> DataGraphPipelineConstantARM es
forall (es :: [*]).
Chain es -> Word32 -> Ptr () -> DataGraphPipelineConstantARM es
DataGraphPipelineConstantARM
           ()
           Word32
forall a. Zero a => a
zero
           Ptr ()
forall a. Zero a => a
zero


-- | VkDataGraphPipelineResourceInfoARM - Structure specifying parameters of
-- a data graph pipeline resource
--
-- == Valid Usage
--
-- -   #VUID-VkDataGraphPipelineResourceInfoARM-descriptorSet-09851# If the
--     @pNext@ chain of this structure includes a
--     'Vulkan.Extensions.VK_ARM_tensors.TensorDescriptionARM' structure,
--     then its @usage@ /must/ contain
--     'Vulkan.Extensions.VK_ARM_tensors.TENSOR_USAGE_DATA_GRAPH_BIT_ARM'
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkDataGraphPipelineResourceInfoARM-sType-sType# @sType@ /must/
--     be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_RESOURCE_INFO_ARM'
--
-- -   #VUID-VkDataGraphPipelineResourceInfoARM-pNext-pNext# @pNext@ /must/
--     be @NULL@ or a pointer to a valid instance of
--     'Vulkan.Extensions.VK_ARM_tensors.TensorDescriptionARM'
--
-- -   #VUID-VkDataGraphPipelineResourceInfoARM-sType-unique# The @sType@
--     value of each structure in the @pNext@ chain /must/ be unique
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ARM_data_graph VK_ARM_data_graph>,
-- 'DataGraphPipelineCreateInfoARM',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data DataGraphPipelineResourceInfoARM (es :: [Type]) = DataGraphPipelineResourceInfoARM
  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.
    forall (es :: [*]). DataGraphPipelineResourceInfoARM es -> Chain es
next :: Chain es
  , -- | @descriptorSet@ is the descriptor set number of the resource being
    -- described.
    forall (es :: [*]). DataGraphPipelineResourceInfoARM es -> Word32
descriptorSet :: Word32
  , -- | @binding@ is the binding number of the resource being described.
    forall (es :: [*]). DataGraphPipelineResourceInfoARM es -> Word32
binding :: Word32
  , -- | @arrayElement@ is the element in the resource array if @descriptorSet@
    -- and @binding@ identifies an array of resources or @0@ otherwise.
    forall (es :: [*]). DataGraphPipelineResourceInfoARM es -> Word32
arrayElement :: Word32
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DataGraphPipelineResourceInfoARM (es :: [Type]))
#endif
deriving instance Show (Chain es) => Show (DataGraphPipelineResourceInfoARM es)

instance Extensible DataGraphPipelineResourceInfoARM where
  extensibleTypeName :: String
extensibleTypeName = String
"DataGraphPipelineResourceInfoARM"
  setNext :: forall (ds :: [*]) (es :: [*]).
DataGraphPipelineResourceInfoARM ds
-> Chain es -> DataGraphPipelineResourceInfoARM es
setNext DataGraphPipelineResourceInfoARM{Word32
Chain ds
next :: forall (es :: [*]). DataGraphPipelineResourceInfoARM es -> Chain es
descriptorSet :: forall (es :: [*]). DataGraphPipelineResourceInfoARM es -> Word32
binding :: forall (es :: [*]). DataGraphPipelineResourceInfoARM es -> Word32
arrayElement :: forall (es :: [*]). DataGraphPipelineResourceInfoARM es -> Word32
next :: Chain ds
descriptorSet :: Word32
binding :: Word32
arrayElement :: Word32
..} Chain es
next' = DataGraphPipelineResourceInfoARM{next :: Chain es
next = Chain es
next', Word32
descriptorSet :: Word32
binding :: Word32
arrayElement :: Word32
descriptorSet :: Word32
binding :: Word32
arrayElement :: Word32
..}
  getNext :: forall (es :: [*]). DataGraphPipelineResourceInfoARM es -> Chain es
getNext DataGraphPipelineResourceInfoARM{Word32
Chain es
next :: forall (es :: [*]). DataGraphPipelineResourceInfoARM es -> Chain es
descriptorSet :: forall (es :: [*]). DataGraphPipelineResourceInfoARM es -> Word32
binding :: forall (es :: [*]). DataGraphPipelineResourceInfoARM es -> Word32
arrayElement :: forall (es :: [*]). DataGraphPipelineResourceInfoARM es -> Word32
next :: Chain es
descriptorSet :: Word32
binding :: Word32
arrayElement :: Word32
..} = Chain es
next
  extends :: forall e b proxy. Typeable e => proxy e -> (Extends DataGraphPipelineResourceInfoARM e => b) -> Maybe b
  extends :: forall e b (proxy :: * -> *).
Typeable e =>
proxy e
-> (Extends DataGraphPipelineResourceInfoARM e => b) -> Maybe b
extends proxy e
_ Extends DataGraphPipelineResourceInfoARM e => b
f
    | Just e :~: TensorDescriptionARM
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 @TensorDescriptionARM = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DataGraphPipelineResourceInfoARM e => b
f
    | Bool
otherwise = Maybe b
forall a. Maybe a
Nothing

instance ( Extendss DataGraphPipelineResourceInfoARM es
         , PokeChain es ) => ToCStruct (DataGraphPipelineResourceInfoARM es) where
  withCStruct :: forall b.
DataGraphPipelineResourceInfoARM es
-> (Ptr (DataGraphPipelineResourceInfoARM es) -> IO b) -> IO b
withCStruct DataGraphPipelineResourceInfoARM es
x Ptr (DataGraphPipelineResourceInfoARM es) -> IO b
f = Int -> (Ptr (DataGraphPipelineResourceInfoARM es) -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
32 ((Ptr (DataGraphPipelineResourceInfoARM es) -> IO b) -> IO b)
-> (Ptr (DataGraphPipelineResourceInfoARM es) -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr (DataGraphPipelineResourceInfoARM es)
p -> Ptr (DataGraphPipelineResourceInfoARM es)
-> DataGraphPipelineResourceInfoARM es -> IO b -> IO b
forall b.
Ptr (DataGraphPipelineResourceInfoARM es)
-> DataGraphPipelineResourceInfoARM es -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr (DataGraphPipelineResourceInfoARM es)
p DataGraphPipelineResourceInfoARM es
x (Ptr (DataGraphPipelineResourceInfoARM es) -> IO b
f Ptr (DataGraphPipelineResourceInfoARM es)
p)
  pokeCStruct :: forall b.
Ptr (DataGraphPipelineResourceInfoARM es)
-> DataGraphPipelineResourceInfoARM es -> IO b -> IO b
pokeCStruct Ptr (DataGraphPipelineResourceInfoARM es)
p DataGraphPipelineResourceInfoARM{Word32
Chain es
next :: forall (es :: [*]). DataGraphPipelineResourceInfoARM es -> Chain es
descriptorSet :: forall (es :: [*]). DataGraphPipelineResourceInfoARM es -> Word32
binding :: forall (es :: [*]). DataGraphPipelineResourceInfoARM es -> Word32
arrayElement :: forall (es :: [*]). DataGraphPipelineResourceInfoARM es -> Word32
next :: Chain es
descriptorSet :: Word32
binding :: Word32
arrayElement :: 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 (DataGraphPipelineResourceInfoARM es)
p Ptr (DataGraphPipelineResourceInfoARM es)
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_RESOURCE_INFO_ARM)
    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 Word32)) (descriptorSet)
    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (binding)
    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) (arrayElement)
    lift $ f
  cStructSize :: Int
cStructSize = Int
32
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b. Ptr (DataGraphPipelineResourceInfoARM es) -> IO b -> IO b
pokeZeroCStruct Ptr (DataGraphPipelineResourceInfoARM 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 (DataGraphPipelineResourceInfoARM es)
p Ptr (DataGraphPipelineResourceInfoARM es)
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_RESOURCE_INFO_ARM)
    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` 16 :: Ptr Word32)) (zero)
    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
    lift $ f

instance ( Extendss DataGraphPipelineResourceInfoARM es
         , PeekChain es ) => FromCStruct (DataGraphPipelineResourceInfoARM es) where
  peekCStruct :: Ptr (DataGraphPipelineResourceInfoARM es)
-> IO (DataGraphPipelineResourceInfoARM es)
peekCStruct Ptr (DataGraphPipelineResourceInfoARM es)
p = do
    pNext <- forall a. Storable a => Ptr a -> IO a
peek @(Ptr ()) ((Ptr (DataGraphPipelineResourceInfoARM es)
p Ptr (DataGraphPipelineResourceInfoARM es) -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ())))
    next <- peekChain (castPtr pNext)
    descriptorSet <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
    binding <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
    arrayElement <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
    pure $ DataGraphPipelineResourceInfoARM
             next descriptorSet binding arrayElement

instance es ~ '[] => Zero (DataGraphPipelineResourceInfoARM es) where
  zero :: DataGraphPipelineResourceInfoARM es
zero = Chain es
-> Word32
-> Word32
-> Word32
-> DataGraphPipelineResourceInfoARM es
forall (es :: [*]).
Chain es
-> Word32
-> Word32
-> Word32
-> DataGraphPipelineResourceInfoARM es
DataGraphPipelineResourceInfoARM
           ()
           Word32
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero


-- | VkDataGraphPipelineCompilerControlCreateInfoARM - Structure specifying
-- compiler control parameters of a newly created data graph pipeline
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ARM_data_graph VK_ARM_data_graph>,
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data DataGraphPipelineCompilerControlCreateInfoARM = DataGraphPipelineCompilerControlCreateInfoARM
  { -- | @pVendorOptions@ is a null-terminated UTF-8 string specifying
    -- implementation-specific options that affect the creation of a data graph
    -- pipeline.
    --
    -- #VUID-VkDataGraphPipelineCompilerControlCreateInfoARM-pVendorOptions-parameter#
    -- @pVendorOptions@ /must/ be a null-terminated UTF-8 string
    DataGraphPipelineCompilerControlCreateInfoARM -> ByteString
vendorOptions :: ByteString }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DataGraphPipelineCompilerControlCreateInfoARM)
#endif
deriving instance Show DataGraphPipelineCompilerControlCreateInfoARM

instance ToCStruct DataGraphPipelineCompilerControlCreateInfoARM where
  withCStruct :: forall b.
DataGraphPipelineCompilerControlCreateInfoARM
-> (Ptr DataGraphPipelineCompilerControlCreateInfoARM -> IO b)
-> IO b
withCStruct DataGraphPipelineCompilerControlCreateInfoARM
x Ptr DataGraphPipelineCompilerControlCreateInfoARM -> IO b
f = Int
-> (Ptr DataGraphPipelineCompilerControlCreateInfoARM -> IO b)
-> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
24 ((Ptr DataGraphPipelineCompilerControlCreateInfoARM -> IO b)
 -> IO b)
-> (Ptr DataGraphPipelineCompilerControlCreateInfoARM -> IO b)
-> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr DataGraphPipelineCompilerControlCreateInfoARM
p -> Ptr DataGraphPipelineCompilerControlCreateInfoARM
-> DataGraphPipelineCompilerControlCreateInfoARM -> IO b -> IO b
forall b.
Ptr DataGraphPipelineCompilerControlCreateInfoARM
-> DataGraphPipelineCompilerControlCreateInfoARM -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr DataGraphPipelineCompilerControlCreateInfoARM
p DataGraphPipelineCompilerControlCreateInfoARM
x (Ptr DataGraphPipelineCompilerControlCreateInfoARM -> IO b
f Ptr DataGraphPipelineCompilerControlCreateInfoARM
p)
  pokeCStruct :: forall b.
Ptr DataGraphPipelineCompilerControlCreateInfoARM
-> DataGraphPipelineCompilerControlCreateInfoARM -> IO b -> IO b
pokeCStruct Ptr DataGraphPipelineCompilerControlCreateInfoARM
p DataGraphPipelineCompilerControlCreateInfoARM{ByteString
vendorOptions :: DataGraphPipelineCompilerControlCreateInfoARM -> ByteString
vendorOptions :: ByteString
..} 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 DataGraphPipelineCompilerControlCreateInfoARM
p Ptr DataGraphPipelineCompilerControlCreateInfoARM
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_COMPILER_CONTROL_CREATE_INFO_ARM)
    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 DataGraphPipelineCompilerControlCreateInfoARM
p Ptr DataGraphPipelineCompilerControlCreateInfoARM
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    pVendorOptions'' <- ((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
vendorOptions)
    lift $ poke ((p `plusPtr` 16 :: Ptr (Ptr CChar))) pVendorOptions''
    lift $ f
  cStructSize :: Int
cStructSize = Int
24
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b.
Ptr DataGraphPipelineCompilerControlCreateInfoARM -> IO b -> IO b
pokeZeroCStruct Ptr DataGraphPipelineCompilerControlCreateInfoARM
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 DataGraphPipelineCompilerControlCreateInfoARM
p Ptr DataGraphPipelineCompilerControlCreateInfoARM
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_COMPILER_CONTROL_CREATE_INFO_ARM)
    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 DataGraphPipelineCompilerControlCreateInfoARM
p Ptr DataGraphPipelineCompilerControlCreateInfoARM
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    pVendorOptions'' <- ((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
forall a. Monoid a => a
mempty)
    lift $ poke ((p `plusPtr` 16 :: Ptr (Ptr CChar))) pVendorOptions''
    lift $ f

instance FromCStruct DataGraphPipelineCompilerControlCreateInfoARM where
  peekCStruct :: Ptr DataGraphPipelineCompilerControlCreateInfoARM
-> IO DataGraphPipelineCompilerControlCreateInfoARM
peekCStruct Ptr DataGraphPipelineCompilerControlCreateInfoARM
p = do
    pVendorOptions <- Ptr CChar -> IO ByteString
packCString (Ptr CChar -> IO ByteString) -> IO (Ptr CChar) -> IO ByteString
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Ptr (Ptr CChar) -> IO (Ptr CChar)
forall a. Storable a => Ptr a -> IO a
peek ((Ptr DataGraphPipelineCompilerControlCreateInfoARM
p Ptr DataGraphPipelineCompilerControlCreateInfoARM
-> Int -> Ptr (Ptr CChar)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr (Ptr CChar)))
    pure $ DataGraphPipelineCompilerControlCreateInfoARM
             pVendorOptions

instance Zero DataGraphPipelineCompilerControlCreateInfoARM where
  zero :: DataGraphPipelineCompilerControlCreateInfoARM
zero = ByteString -> DataGraphPipelineCompilerControlCreateInfoARM
DataGraphPipelineCompilerControlCreateInfoARM
           ByteString
forall a. Monoid a => a
mempty


-- | VkDataGraphPipelineCreateInfoARM - Structure specifying parameters of a
-- newly created data graph pipeline
--
-- = Description
--
-- Applications /can/ create a data graph pipeline entirely from data
-- present in a pipeline cache. This is done by including a
-- 'DataGraphPipelineIdentifierCreateInfoARM' structure in the @pNext@
-- chain. If the required data is not found in the pipeline cache, creating
-- the data graph pipeline is not possible and the implementation /must/
-- fail as specified by
-- 'Vulkan.Core10.Enums.PipelineCreateFlagBits.PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT'.
--
-- Applications /can/ create a data graph pipeline without providing a
-- pipeline cache or shader module by invoking one of the models provided
-- by the implementation. This is done by including
-- 'Vulkan.Extensions.VK_QCOM_data_graph_model.DataGraphPipelineBuiltinModelCreateInfoQCOM'
-- in the @pNext@ chain.
--
-- When an identifier or built-in model is used to create a data graph
-- pipeline, implementations /may/ fail pipeline creation with
-- 'Vulkan.Core10.Enums.Result.PIPELINE_COMPILE_REQUIRED' for any reason.
--
-- The data graph engines for this pipeline /can/ be selected by including
-- a 'DataGraphProcessingEngineCreateInfoARM' to the @pNext@ chain of this
-- structure. Otherwise,
-- 'PHYSICAL_DEVICE_DATA_GRAPH_PROCESSING_ENGINE_TYPE_DEFAULT_ARM' will be
-- used as the sole data graph engine.
--
-- The data graph operations that this pipeline uses /must/ be supported
-- for the data graph engines selected for this pipeline as retrieved by
-- 'getPhysicalDeviceQueueFamilyDataGraphPropertiesARM'.
--
-- == Valid Usage
--
-- -   #VUID-VkDataGraphPipelineCreateInfoARM-pNext-09763# One and only one
--     of the following structures /must/ be included in the @pNext@ chain:
--
--     -   'DataGraphPipelineShaderModuleCreateInfoARM'
--
--     -   'DataGraphPipelineIdentifierCreateInfoARM'
--
--     -   'Vulkan.Extensions.VK_QCOM_data_graph_model.DataGraphPipelineBuiltinModelCreateInfoQCOM'
--
-- -   #VUID-VkDataGraphPipelineCreateInfoARM-flags-09764# @flags@ /may/
--     only contain
--     'Vulkan.Extensions.VK_KHR_maintenance5.PIPELINE_CREATE_2_NO_PROTECTED_ACCESS_BIT_EXT',
--     'Vulkan.Extensions.VK_KHR_maintenance5.PIPELINE_CREATE_2_PROTECTED_ACCESS_ONLY_BIT_EXT',
--     'Vulkan.Core14.Enums.PipelineCreateFlags2.PIPELINE_CREATE_2_DISABLE_OPTIMIZATION_BIT',
--     'Vulkan.Core14.Enums.PipelineCreateFlags2.PIPELINE_CREATE_2_DESCRIPTOR_BUFFER_BIT_EXT',
--     'Vulkan.Extensions.VK_KHR_maintenance5.PIPELINE_CREATE_2_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_KHR'
--     or
--     'Vulkan.Extensions.VK_KHR_maintenance5.PIPELINE_CREATE_2_EARLY_RETURN_ON_FAILURE_BIT_KHR'
--
-- -   #VUID-VkDataGraphPipelineCreateInfoARM-layout-09767# @layout@ /must/
--     have been created with @pushConstantRangeCount@ equal to 0 and
--     @pPushConstantRanges@ equal to @NULL@
--
-- -   #VUID-VkDataGraphPipelineCreateInfoARM-dataGraphUpdateAfterBind-09768#
--     If the
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-dataGraphUpdateAfterBind dataGraphUpdateAfterBind>
--     feature is not enabled, @layout@ must not use any
--     'Vulkan.Core10.Handles.DescriptorSetLayout' object created with the
--     'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
--     bit set
--
-- -   #VUID-VkDataGraphPipelineCreateInfoARM-dataGraphDescriptorBuffer-09885#
--     If the
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-dataGraphDescriptorBuffer dataGraphDescriptorBuffer>
--     feature is not enabled, @flags@ /must/ not contain
--     'Vulkan.Core14.Enums.PipelineCreateFlags2.PIPELINE_CREATE_2_DESCRIPTOR_BUFFER_BIT_EXT'
--
-- -   #VUID-VkDataGraphPipelineCreateInfoARM-layout-09769# If a
--     'DataGraphPipelineShaderModuleCreateInfoARM' structure is included
--     in the @pNext@ chain and a
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#interfaces-resources resource variable>
--     is declared in the shader module, the corresponding descriptor
--     binding used to create @layout@ /must/ have a @descriptorType@ that
--     corresponds to the type of the
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#interfaces-resources resource variable>
--
-- -   #VUID-VkDataGraphPipelineCreateInfoARM-None-11840# If a
--     'DataGraphPipelineIdentifierCreateInfoARM' or a
--     'Vulkan.Extensions.VK_QCOM_data_graph_model.DataGraphPipelineBuiltinModelCreateInfoQCOM'
--     structure is included in the @pNext@ chain, then @flags@ /must/
--     contain
--     'Vulkan.Core14.Enums.PipelineCreateFlags2.PIPELINE_CREATE_2_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT'
--
-- -   #VUID-VkDataGraphPipelineCreateInfoARM-None-12363# If a
--     'DataGraphPipelineIdentifierCreateInfoARM' or a
--     'Vulkan.Extensions.VK_QCOM_data_graph_model.DataGraphPipelineBuiltinModelCreateInfoQCOM'
--     structure is included in the @pNext@ chain, then @resourceInfoCount@
--     /must/ be 0
--
-- -   #VUID-VkDataGraphPipelineCreateInfoARM-resourceInfoCount-12364# If
--     @resourceInfoCount@ is equal to 0, then @pResourceInfos@ /must/
--     equal @NULL@
--
-- -   #VUID-VkDataGraphPipelineCreateInfoARM-None-12365# If neither a
--     'DataGraphPipelineIdentifierCreateInfoARM' nor a
--     'Vulkan.Extensions.VK_QCOM_data_graph_model.DataGraphPipelineBuiltinModelCreateInfoQCOM'
--     structure are included in the @pNext@ chain, then
--     @resourceInfoCount@ /must/ be greater than 0
--
-- -   #VUID-VkDataGraphPipelineCreateInfoARM-dataGraphShaderModule-09886#
--     If the
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-dataGraphShaderModule dataGraphShaderModule>
--     feature is not enabled, a
--     'DataGraphPipelineShaderModuleCreateInfoARM' structure /must/ not be
--     included in the @pNext@ chain
--
-- -   #VUID-VkDataGraphPipelineCreateInfoARM-layout-09934# If a
--     'DataGraphPipelineShaderModuleCreateInfoARM' structure is included
--     in the @pNext@ chain and an array
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#interfaces-resources resource variable>
--     is declared in the shader module, 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-VkDataGraphPipelineCreateInfoARM-pipelineCreationCacheControl-09871#
--     If the
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-pipelineCreationCacheControl pipelineCreationCacheControl>
--     feature is not enabled, @flags@ /must/ not include
--     'Vulkan.Extensions.VK_KHR_maintenance5.PIPELINE_CREATE_2_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_KHR'
--     or
--     'Vulkan.Extensions.VK_KHR_maintenance5.PIPELINE_CREATE_2_EARLY_RETURN_ON_FAILURE_BIT_KHR'
--
-- -   #VUID-VkDataGraphPipelineCreateInfoARM-pSetLayouts-09770# The
--     descriptor set layouts in
--     'Vulkan.Core10.PipelineLayout.PipelineLayoutCreateInfo'::@pSetLayouts@
--     used to create @layout@ /must/ not include any
--     'Vulkan.Core10.DescriptorSet.DescriptorSetLayoutBinding' whose
--     descriptor type is
--     'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_MUTABLE_EXT'
--
-- -   #VUID-VkDataGraphPipelineCreateInfoARM-pipelineProtectedAccess-09772#
--     If the
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-pipelineProtectedAccess pipelineProtectedAccess>
--     feature is not enabled, @flags@ /must/ not include
--     'Vulkan.Extensions.VK_KHR_maintenance5.PIPELINE_CREATE_2_NO_PROTECTED_ACCESS_BIT_EXT'
--     or
--     'Vulkan.Extensions.VK_KHR_maintenance5.PIPELINE_CREATE_2_PROTECTED_ACCESS_ONLY_BIT_EXT'
--
-- -   #VUID-VkDataGraphPipelineCreateInfoARM-flags-09773# @flags@ /must/
--     not include both
--     'Vulkan.Extensions.VK_KHR_maintenance5.PIPELINE_CREATE_2_NO_PROTECTED_ACCESS_BIT_EXT'
--     and
--     'Vulkan.Extensions.VK_KHR_maintenance5.PIPELINE_CREATE_2_PROTECTED_ACCESS_ONLY_BIT_EXT'
--
-- -   #VUID-VkDataGraphPipelineCreateInfoARM-pNext-09804# If the @pNext@
--     chain includes an
--     'Vulkan.Core13.Promoted_From_VK_EXT_pipeline_creation_feedback.PipelineCreationFeedbackCreateInfo'
--     structure, then its @pipelineStageCreationFeedbackCount@ /must/ be 0
--
-- -   #VUID-VkDataGraphPipelineCreateInfoARM-pNext-09948# If a
--     'DataGraphProcessingEngineCreateInfoARM' structure is included in
--     the @pNext@ chain, each member of @pProcessingEngines@ /must/ be
--     identical to an 'QueueFamilyDataGraphPropertiesARM'::@engine@
--     retrieved from 'getPhysicalDeviceQueueFamilyDataGraphPropertiesARM'
--     with the @physicalDevice@ that was used to create @device@
--
-- -   #VUID-VkDataGraphPipelineCreateInfoARM-pNext-09949# If a
--     'DataGraphProcessingEngineCreateInfoARM' structure is not included
--     in the @pNext@ chain,
--     'PHYSICAL_DEVICE_DATA_GRAPH_PROCESSING_ENGINE_TYPE_DEFAULT_ARM'
--     /must/ be set in an 'QueueFamilyDataGraphPropertiesARM'::@engine@
--     retrieved from 'getPhysicalDeviceQueueFamilyDataGraphPropertiesARM'
--     with the @physicalDevice@ that was used to create @device@
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkDataGraphPipelineCreateInfoARM-sType-sType# @sType@ /must/
--     be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_CREATE_INFO_ARM'
--
-- -   #VUID-VkDataGraphPipelineCreateInfoARM-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_QCOM_data_graph_model.DataGraphPipelineBuiltinModelCreateInfoQCOM',
--     'DataGraphPipelineCompilerControlCreateInfoARM',
--     'DataGraphPipelineIdentifierCreateInfoARM',
--     'DataGraphPipelineShaderModuleCreateInfoARM',
--     'DataGraphProcessingEngineCreateInfoARM',
--     'Vulkan.Core13.Promoted_From_VK_EXT_pipeline_creation_feedback.PipelineCreationFeedbackCreateInfo',
--     or 'Vulkan.Core10.Shader.ShaderModuleCreateInfo'
--
-- -   #VUID-VkDataGraphPipelineCreateInfoARM-sType-unique# The @sType@
--     value of each structure in the @pNext@ chain /must/ be unique
--
-- -   #VUID-VkDataGraphPipelineCreateInfoARM-flags-parameter# @flags@
--     /must/ be a valid combination of
--     'Vulkan.Extensions.VK_KHR_maintenance5.PipelineCreateFlagBits2KHR'
--     values
--
-- -   #VUID-VkDataGraphPipelineCreateInfoARM-layout-parameter# @layout@
--     /must/ be a valid 'Vulkan.Core10.Handles.PipelineLayout' handle
--
-- -   #VUID-VkDataGraphPipelineCreateInfoARM-pResourceInfos-parameter# If
--     @resourceInfoCount@ is not @0@, @pResourceInfos@ /must/ be a valid
--     pointer to an array of @resourceInfoCount@ valid
--     'DataGraphPipelineResourceInfoARM' structures
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ARM_data_graph VK_ARM_data_graph>,
-- 'DataGraphPipelineResourceInfoARM',
-- 'Vulkan.Core14.Enums.PipelineCreateFlags2.PipelineCreateFlags2',
-- 'Vulkan.Core10.Handles.PipelineLayout',
-- 'Vulkan.Core10.Enums.StructureType.StructureType',
-- 'createDataGraphPipelinesARM'
data DataGraphPipelineCreateInfoARM (es :: [Type]) = DataGraphPipelineCreateInfoARM
  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.
    forall (es :: [*]). DataGraphPipelineCreateInfoARM es -> Chain es
next :: Chain es
  , -- | @flags@ is a bitmask of
    -- 'Vulkan.Extensions.VK_KHR_maintenance5.PipelineCreateFlagBits2KHR'
    -- specifying how the pipeline will be generated.
    forall (es :: [*]).
DataGraphPipelineCreateInfoARM es -> PipelineCreateFlags2KHR
flags :: PipelineCreateFlags2KHR
  , -- | @layout@ is the description of binding locations used by both the
    -- pipeline and descriptor sets used with the pipeline.
    forall (es :: [*]).
DataGraphPipelineCreateInfoARM es -> PipelineLayout
layout :: PipelineLayout
  , -- | @pResourceInfos@ is a pointer to an array of
    -- 'DataGraphPipelineResourceInfoARM' structures.
    forall (es :: [*]).
DataGraphPipelineCreateInfoARM es
-> Vector (SomeStruct DataGraphPipelineResourceInfoARM)
resourceInfos :: Vector (SomeStruct DataGraphPipelineResourceInfoARM)
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DataGraphPipelineCreateInfoARM (es :: [Type]))
#endif
deriving instance Show (Chain es) => Show (DataGraphPipelineCreateInfoARM es)

instance Extensible DataGraphPipelineCreateInfoARM where
  extensibleTypeName :: String
extensibleTypeName = String
"DataGraphPipelineCreateInfoARM"
  setNext :: forall (ds :: [*]) (es :: [*]).
DataGraphPipelineCreateInfoARM ds
-> Chain es -> DataGraphPipelineCreateInfoARM es
setNext DataGraphPipelineCreateInfoARM{Vector (SomeStruct DataGraphPipelineResourceInfoARM)
PipelineCreateFlags2KHR
PipelineLayout
Chain ds
next :: forall (es :: [*]). DataGraphPipelineCreateInfoARM es -> Chain es
flags :: forall (es :: [*]).
DataGraphPipelineCreateInfoARM es -> PipelineCreateFlags2KHR
layout :: forall (es :: [*]).
DataGraphPipelineCreateInfoARM es -> PipelineLayout
resourceInfos :: forall (es :: [*]).
DataGraphPipelineCreateInfoARM es
-> Vector (SomeStruct DataGraphPipelineResourceInfoARM)
next :: Chain ds
flags :: PipelineCreateFlags2KHR
layout :: PipelineLayout
resourceInfos :: Vector (SomeStruct DataGraphPipelineResourceInfoARM)
..} Chain es
next' = DataGraphPipelineCreateInfoARM{next :: Chain es
next = Chain es
next', Vector (SomeStruct DataGraphPipelineResourceInfoARM)
PipelineCreateFlags2KHR
PipelineLayout
flags :: PipelineCreateFlags2KHR
layout :: PipelineLayout
resourceInfos :: Vector (SomeStruct DataGraphPipelineResourceInfoARM)
flags :: PipelineCreateFlags2KHR
layout :: PipelineLayout
resourceInfos :: Vector (SomeStruct DataGraphPipelineResourceInfoARM)
..}
  getNext :: forall (es :: [*]). DataGraphPipelineCreateInfoARM es -> Chain es
getNext DataGraphPipelineCreateInfoARM{Vector (SomeStruct DataGraphPipelineResourceInfoARM)
PipelineCreateFlags2KHR
PipelineLayout
Chain es
next :: forall (es :: [*]). DataGraphPipelineCreateInfoARM es -> Chain es
flags :: forall (es :: [*]).
DataGraphPipelineCreateInfoARM es -> PipelineCreateFlags2KHR
layout :: forall (es :: [*]).
DataGraphPipelineCreateInfoARM es -> PipelineLayout
resourceInfos :: forall (es :: [*]).
DataGraphPipelineCreateInfoARM es
-> Vector (SomeStruct DataGraphPipelineResourceInfoARM)
next :: Chain es
flags :: PipelineCreateFlags2KHR
layout :: PipelineLayout
resourceInfos :: Vector (SomeStruct DataGraphPipelineResourceInfoARM)
..} = Chain es
next
  extends :: forall e b proxy. Typeable e => proxy e -> (Extends DataGraphPipelineCreateInfoARM e => b) -> Maybe b
  extends :: forall e b (proxy :: * -> *).
Typeable e =>
proxy e
-> (Extends DataGraphPipelineCreateInfoARM e => b) -> Maybe b
extends proxy e
_ Extends DataGraphPipelineCreateInfoARM e => b
f
    | Just e :~: DataGraphPipelineBuiltinModelCreateInfoQCOM
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 @DataGraphPipelineBuiltinModelCreateInfoQCOM = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DataGraphPipelineCreateInfoARM e => b
f
    | Just e :~: DataGraphProcessingEngineCreateInfoARM
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 @DataGraphProcessingEngineCreateInfoARM = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DataGraphPipelineCreateInfoARM e => b
f
    | Just e :~: DataGraphPipelineIdentifierCreateInfoARM
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 @DataGraphPipelineIdentifierCreateInfoARM = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DataGraphPipelineCreateInfoARM e => b
f
    | Just e :~: DataGraphPipelineShaderModuleCreateInfoARM
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 @DataGraphPipelineShaderModuleCreateInfoARM = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DataGraphPipelineCreateInfoARM e => b
f
    | Just e :~: DataGraphPipelineCompilerControlCreateInfoARM
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 @DataGraphPipelineCompilerControlCreateInfoARM = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DataGraphPipelineCreateInfoARM 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 DataGraphPipelineCreateInfoARM e => b
f
    | Just e :~: ShaderModuleCreateInfo '[]
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 @(ShaderModuleCreateInfo '[]) = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DataGraphPipelineCreateInfoARM e => b
f
    | Bool
otherwise = Maybe b
forall a. Maybe a
Nothing

instance ( Extendss DataGraphPipelineCreateInfoARM es
         , PokeChain es ) => ToCStruct (DataGraphPipelineCreateInfoARM es) where
  withCStruct :: forall b.
DataGraphPipelineCreateInfoARM es
-> (Ptr (DataGraphPipelineCreateInfoARM es) -> IO b) -> IO b
withCStruct DataGraphPipelineCreateInfoARM es
x Ptr (DataGraphPipelineCreateInfoARM es) -> IO b
f = Int -> (Ptr (DataGraphPipelineCreateInfoARM es) -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
48 ((Ptr (DataGraphPipelineCreateInfoARM es) -> IO b) -> IO b)
-> (Ptr (DataGraphPipelineCreateInfoARM es) -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr (DataGraphPipelineCreateInfoARM es)
p -> Ptr (DataGraphPipelineCreateInfoARM es)
-> DataGraphPipelineCreateInfoARM es -> IO b -> IO b
forall b.
Ptr (DataGraphPipelineCreateInfoARM es)
-> DataGraphPipelineCreateInfoARM es -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr (DataGraphPipelineCreateInfoARM es)
p DataGraphPipelineCreateInfoARM es
x (Ptr (DataGraphPipelineCreateInfoARM es) -> IO b
f Ptr (DataGraphPipelineCreateInfoARM es)
p)
  pokeCStruct :: forall b.
Ptr (DataGraphPipelineCreateInfoARM es)
-> DataGraphPipelineCreateInfoARM es -> IO b -> IO b
pokeCStruct Ptr (DataGraphPipelineCreateInfoARM es)
p DataGraphPipelineCreateInfoARM{Vector (SomeStruct DataGraphPipelineResourceInfoARM)
PipelineCreateFlags2KHR
PipelineLayout
Chain es
next :: forall (es :: [*]). DataGraphPipelineCreateInfoARM es -> Chain es
flags :: forall (es :: [*]).
DataGraphPipelineCreateInfoARM es -> PipelineCreateFlags2KHR
layout :: forall (es :: [*]).
DataGraphPipelineCreateInfoARM es -> PipelineLayout
resourceInfos :: forall (es :: [*]).
DataGraphPipelineCreateInfoARM es
-> Vector (SomeStruct DataGraphPipelineResourceInfoARM)
next :: Chain es
flags :: PipelineCreateFlags2KHR
layout :: PipelineLayout
resourceInfos :: Vector (SomeStruct DataGraphPipelineResourceInfoARM)
..} 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 (DataGraphPipelineCreateInfoARM es)
p Ptr (DataGraphPipelineCreateInfoARM es) -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_CREATE_INFO_ARM)
    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 PipelineCreateFlags2KHR)) (flags)
    lift $ poke ((p `plusPtr` 24 :: Ptr PipelineLayout)) (layout)
    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (resourceInfos)) :: Word32))
    pPResourceInfos' <- ContT $ allocaBytes @(DataGraphPipelineResourceInfoARM _) ((Data.Vector.length (resourceInfos)) * 32)
    Data.Vector.imapM_ (\Int
i SomeStruct DataGraphPipelineResourceInfoARM
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 DataGraphPipelineResourceInfoARM)
-> SomeStruct DataGraphPipelineResourceInfoARM -> 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 (DataGraphPipelineResourceInfoARM (ZonkAny 3))
-> Ptr (SomeStruct DataGraphPipelineResourceInfoARM)
forall (a :: [*] -> *) (es :: [*]).
Ptr (a es) -> Ptr (SomeStruct a)
forgetExtensions (Ptr (DataGraphPipelineResourceInfoARM (ZonkAny 2))
pPResourceInfos' Ptr (DataGraphPipelineResourceInfoARM (ZonkAny 2))
-> Int -> Ptr (DataGraphPipelineResourceInfoARM w)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
32 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr (DataGraphPipelineResourceInfoARM _))) (SomeStruct DataGraphPipelineResourceInfoARM
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
$ ())) (resourceInfos)
    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr (DataGraphPipelineResourceInfoARM _)))) (pPResourceInfos')
    lift $ f
  cStructSize :: Int
cStructSize = Int
48
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b. Ptr (DataGraphPipelineCreateInfoARM es) -> IO b -> IO b
pokeZeroCStruct Ptr (DataGraphPipelineCreateInfoARM 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 (DataGraphPipelineCreateInfoARM es)
p Ptr (DataGraphPipelineCreateInfoARM es) -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_CREATE_INFO_ARM)
    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` 24 :: Ptr PipelineLayout)) (zero)
    lift $ f

instance ( Extendss DataGraphPipelineCreateInfoARM es
         , PeekChain es ) => FromCStruct (DataGraphPipelineCreateInfoARM es) where
  peekCStruct :: Ptr (DataGraphPipelineCreateInfoARM es)
-> IO (DataGraphPipelineCreateInfoARM es)
peekCStruct Ptr (DataGraphPipelineCreateInfoARM es)
p = do
    pNext <- forall a. Storable a => Ptr a -> IO a
peek @(Ptr ()) ((Ptr (DataGraphPipelineCreateInfoARM es)
p Ptr (DataGraphPipelineCreateInfoARM es) -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ())))
    next <- peekChain (castPtr pNext)
    flags <- peek @PipelineCreateFlags2KHR ((p `plusPtr` 16 :: Ptr PipelineCreateFlags2KHR))
    layout <- peek @PipelineLayout ((p `plusPtr` 24 :: Ptr PipelineLayout))
    resourceInfoCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
    pResourceInfos <- peek @(Ptr (DataGraphPipelineResourceInfoARM _)) ((p `plusPtr` 40 :: Ptr (Ptr (DataGraphPipelineResourceInfoARM _))))
    pResourceInfos' <- generateM (fromIntegral resourceInfoCount) (\Int
i -> Ptr (SomeStruct DataGraphPipelineResourceInfoARM)
-> IO (SomeStruct DataGraphPipelineResourceInfoARM)
forall (a :: [*] -> *).
(Extensible a,
 forall (es :: [*]).
 (Extendss a es, PeekChain es) =>
 FromCStruct (a es)) =>
Ptr (SomeStruct a) -> IO (SomeStruct a)
peekSomeCStruct (Ptr (DataGraphPipelineResourceInfoARM (ZonkAny 4))
-> Ptr (SomeStruct DataGraphPipelineResourceInfoARM)
forall (a :: [*] -> *) (es :: [*]).
Ptr (a es) -> Ptr (SomeStruct a)
forgetExtensions ((Ptr (DataGraphPipelineResourceInfoARM (ZonkAny 4))
pResourceInfos Ptr (DataGraphPipelineResourceInfoARM (ZonkAny 4))
-> Int -> Ptr (DataGraphPipelineResourceInfoARM (ZonkAny 4))
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
32 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr (DataGraphPipelineResourceInfoARM _)))))
    pure $ DataGraphPipelineCreateInfoARM
             next flags layout pResourceInfos'

instance es ~ '[] => Zero (DataGraphPipelineCreateInfoARM es) where
  zero :: DataGraphPipelineCreateInfoARM es
zero = Chain es
-> PipelineCreateFlags2KHR
-> PipelineLayout
-> Vector (SomeStruct DataGraphPipelineResourceInfoARM)
-> DataGraphPipelineCreateInfoARM es
forall (es :: [*]).
Chain es
-> PipelineCreateFlags2KHR
-> PipelineLayout
-> Vector (SomeStruct DataGraphPipelineResourceInfoARM)
-> DataGraphPipelineCreateInfoARM es
DataGraphPipelineCreateInfoARM
           ()
           PipelineCreateFlags2KHR
forall a. Zero a => a
zero
           PipelineLayout
forall a. Zero a => a
zero
           Vector (SomeStruct DataGraphPipelineResourceInfoARM)
forall a. Monoid a => a
mempty


-- | VkDataGraphPipelineShaderModuleCreateInfoARM - Structure specifying
-- shader module parameters of a newly created data graph pipeline
--
-- = Description
--
-- If @module@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE', the
-- pipeline’s graph is defined by @module@. If @module@ is
-- 'Vulkan.Core10.APIConstants.NULL_HANDLE', the pipeline’s graph is
-- defined by the chained 'Vulkan.Core10.Shader.ShaderModuleCreateInfo'.
--
-- == Valid Usage
--
-- -   #VUID-VkDataGraphPipelineShaderModuleCreateInfoARM-dataGraphSpecializationConstants-09849#
--     If the
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-dataGraphSpecializationConstants dataGraphSpecializationConstants>
--     feature is not enabled then @pSpecializationInfo@ /must/ be @NULL@
--     and @module@ /must/ not contain any @OpSpec*@ instructions
--
-- -   #VUID-VkDataGraphPipelineShaderModuleCreateInfoARM-pName-09872#
--     @pName@ /must/ be the name of an @OpGraphEntryPointARM@ in @module@
--
-- -   #VUID-VkDataGraphPipelineShaderModuleCreateInfoARM-pNext-09873# If
--     the @pNext@ chain includes a
--     'Vulkan.Core10.Shader.ShaderModuleCreateInfo' structure, then
--     @module@ /must/ be 'Vulkan.Core10.APIConstants.NULL_HANDLE'
--
-- -   #VUID-VkDataGraphPipelineShaderModuleCreateInfoARM-pNext-09874# If
--     the @pNext@ chain does not include a
--     'Vulkan.Core10.Shader.ShaderModuleCreateInfo' structure, then
--     @module@ /must/ be a valid 'Vulkan.Core10.Handles.ShaderModule'
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkDataGraphPipelineShaderModuleCreateInfoARM-sType-sType#
--     @sType@ /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SHADER_MODULE_CREATE_INFO_ARM'
--
-- -   #VUID-VkDataGraphPipelineShaderModuleCreateInfoARM-module-parameter#
--     If @module@ is not 'Vulkan.Core10.APIConstants.NULL_HANDLE',
--     @module@ /must/ be a valid 'Vulkan.Core10.Handles.ShaderModule'
--     handle
--
-- -   #VUID-VkDataGraphPipelineShaderModuleCreateInfoARM-pName-parameter#
--     @pName@ /must/ be a null-terminated UTF-8 string
--
-- -   #VUID-VkDataGraphPipelineShaderModuleCreateInfoARM-pSpecializationInfo-parameter#
--     If @pSpecializationInfo@ is not @NULL@, @pSpecializationInfo@ /must/
--     be a valid pointer to a valid
--     'Vulkan.Core10.ComputePipeline.SpecializationInfo' structure
--
-- -   #VUID-VkDataGraphPipelineShaderModuleCreateInfoARM-pConstants-parameter#
--     If @constantCount@ is not @0@, and @pConstants@ is not @NULL@,
--     @pConstants@ /must/ be a valid pointer to an array of
--     @constantCount@ valid 'DataGraphPipelineConstantARM' structures
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ARM_data_graph VK_ARM_data_graph>,
-- 'DataGraphPipelineConstantARM', 'Vulkan.Core10.Handles.ShaderModule',
-- 'Vulkan.Core10.ComputePipeline.SpecializationInfo',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data DataGraphPipelineShaderModuleCreateInfoARM = DataGraphPipelineShaderModuleCreateInfoARM
  { -- | @module@ is optionally a 'Vulkan.Core10.Handles.ShaderModule' object
    -- containing the description of the graph.
    DataGraphPipelineShaderModuleCreateInfoARM -> ShaderModule
module' :: ShaderModule
  , -- | @pName@ is a pointer to a null-terminated UTF-8 string specifying the
    -- graph entry point name for this pipeline.
    DataGraphPipelineShaderModuleCreateInfoARM -> ByteString
name :: ByteString
  , -- | @pSpecializationInfo@ is a pointer to a
    -- 'Vulkan.Core10.ComputePipeline.SpecializationInfo' structure as
    -- described in
    -- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#pipelines-specialization-constants Specialization Constants>,
    -- or @NULL@.
    DataGraphPipelineShaderModuleCreateInfoARM
-> Maybe SpecializationInfo
specializationInfo :: Maybe SpecializationInfo
  , -- | @constantCount@ is the length of the @pConstants@ array.
    DataGraphPipelineShaderModuleCreateInfoARM -> Word32
constantCount :: Word32
  , -- | @pConstants@ is a pointer to an array of 'DataGraphPipelineConstantARM'
    -- structures.
    DataGraphPipelineShaderModuleCreateInfoARM
-> Vector (SomeStruct DataGraphPipelineConstantARM)
constants :: Vector (SomeStruct DataGraphPipelineConstantARM)
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DataGraphPipelineShaderModuleCreateInfoARM)
#endif
deriving instance Show DataGraphPipelineShaderModuleCreateInfoARM

instance ToCStruct DataGraphPipelineShaderModuleCreateInfoARM where
  withCStruct :: forall b.
DataGraphPipelineShaderModuleCreateInfoARM
-> (Ptr DataGraphPipelineShaderModuleCreateInfoARM -> IO b) -> IO b
withCStruct DataGraphPipelineShaderModuleCreateInfoARM
x Ptr DataGraphPipelineShaderModuleCreateInfoARM -> IO b
f = Int
-> (Ptr DataGraphPipelineShaderModuleCreateInfoARM -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
56 ((Ptr DataGraphPipelineShaderModuleCreateInfoARM -> IO b) -> IO b)
-> (Ptr DataGraphPipelineShaderModuleCreateInfoARM -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr DataGraphPipelineShaderModuleCreateInfoARM
p -> Ptr DataGraphPipelineShaderModuleCreateInfoARM
-> DataGraphPipelineShaderModuleCreateInfoARM -> IO b -> IO b
forall b.
Ptr DataGraphPipelineShaderModuleCreateInfoARM
-> DataGraphPipelineShaderModuleCreateInfoARM -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr DataGraphPipelineShaderModuleCreateInfoARM
p DataGraphPipelineShaderModuleCreateInfoARM
x (Ptr DataGraphPipelineShaderModuleCreateInfoARM -> IO b
f Ptr DataGraphPipelineShaderModuleCreateInfoARM
p)
  pokeCStruct :: forall b.
Ptr DataGraphPipelineShaderModuleCreateInfoARM
-> DataGraphPipelineShaderModuleCreateInfoARM -> IO b -> IO b
pokeCStruct Ptr DataGraphPipelineShaderModuleCreateInfoARM
p DataGraphPipelineShaderModuleCreateInfoARM{Maybe SpecializationInfo
Word32
ByteString
Vector (SomeStruct DataGraphPipelineConstantARM)
ShaderModule
module' :: DataGraphPipelineShaderModuleCreateInfoARM -> ShaderModule
name :: DataGraphPipelineShaderModuleCreateInfoARM -> ByteString
specializationInfo :: DataGraphPipelineShaderModuleCreateInfoARM
-> Maybe SpecializationInfo
constantCount :: DataGraphPipelineShaderModuleCreateInfoARM -> Word32
constants :: DataGraphPipelineShaderModuleCreateInfoARM
-> Vector (SomeStruct DataGraphPipelineConstantARM)
module' :: ShaderModule
name :: ByteString
specializationInfo :: Maybe SpecializationInfo
constantCount :: Word32
constants :: Vector (SomeStruct DataGraphPipelineConstantARM)
..} 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 DataGraphPipelineShaderModuleCreateInfoARM
p Ptr DataGraphPipelineShaderModuleCreateInfoARM
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SHADER_MODULE_CREATE_INFO_ARM)
    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 DataGraphPipelineShaderModuleCreateInfoARM
p Ptr DataGraphPipelineShaderModuleCreateInfoARM
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr ShaderModule -> ShaderModule -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DataGraphPipelineShaderModuleCreateInfoARM
p Ptr DataGraphPipelineShaderModuleCreateInfoARM
-> Int -> Ptr ShaderModule
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr ShaderModule)) (ShaderModule
module')
    pName'' <- ((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
name)
    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr CChar))) pName''
    pSpecializationInfo'' <- case (specializationInfo) of
      Maybe SpecializationInfo
Nothing -> Ptr SpecializationInfo -> ContT b IO (Ptr SpecializationInfo)
forall a. a -> ContT b IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Ptr SpecializationInfo
forall a. Ptr a
nullPtr
      Just SpecializationInfo
j -> ((Ptr SpecializationInfo -> IO b) -> IO b)
-> ContT b IO (Ptr SpecializationInfo)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr SpecializationInfo -> IO b) -> IO b)
 -> ContT b IO (Ptr SpecializationInfo))
-> ((Ptr SpecializationInfo -> IO b) -> IO b)
-> ContT b IO (Ptr SpecializationInfo)
forall a b. (a -> b) -> a -> b
$ SpecializationInfo -> (Ptr SpecializationInfo -> IO b) -> IO b
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
forall b.
SpecializationInfo -> (Ptr SpecializationInfo -> IO b) -> IO b
withCStruct (SpecializationInfo
j)
    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr SpecializationInfo))) pSpecializationInfo''
    let pConstantsLength = Vector (SomeStruct DataGraphPipelineConstantARM) -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector (SomeStruct DataGraphPipelineConstantARM) -> Int)
-> Vector (SomeStruct DataGraphPipelineConstantARM) -> Int
forall a b. (a -> b) -> a -> b
$ (Vector (SomeStruct DataGraphPipelineConstantARM)
constants)
    constantCount'' <- lift $ if (constantCount) == 0
      then pure $ fromIntegral pConstantsLength
      else do
        unless (fromIntegral pConstantsLength == (constantCount) || pConstantsLength == 0) $
          throwIO $ IOError Nothing InvalidArgument "" "pConstants must be empty or have 'constantCount' elements" Nothing Nothing
        pure (constantCount)
    lift $ poke ((p `plusPtr` 40 :: Ptr Word32)) (constantCount'')
    pConstants'' <- if Data.Vector.null (constants)
      then pure nullPtr
      else do
        pPConstants <- ContT $ allocaBytes @(DataGraphPipelineConstantARM _) (((Data.Vector.length (constants))) * 32)
        Data.Vector.imapM_ (\Int
i SomeStruct DataGraphPipelineConstantARM
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 DataGraphPipelineConstantARM)
-> SomeStruct DataGraphPipelineConstantARM -> 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 (DataGraphPipelineConstantARM (ZonkAny 6))
-> Ptr (SomeStruct DataGraphPipelineConstantARM)
forall (a :: [*] -> *) (es :: [*]).
Ptr (a es) -> Ptr (SomeStruct a)
forgetExtensions (Ptr (DataGraphPipelineConstantARM (ZonkAny 5))
pPConstants Ptr (DataGraphPipelineConstantARM (ZonkAny 5))
-> Int -> Ptr (DataGraphPipelineConstantARM w)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
32 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr (DataGraphPipelineConstantARM _))) (SomeStruct DataGraphPipelineConstantARM
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
$ ())) ((constants))
        pure $ pPConstants
    lift $ poke ((p `plusPtr` 48 :: Ptr (Ptr (DataGraphPipelineConstantARM _)))) pConstants''
    lift $ f
  cStructSize :: Int
cStructSize = Int
56
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b.
Ptr DataGraphPipelineShaderModuleCreateInfoARM -> IO b -> IO b
pokeZeroCStruct Ptr DataGraphPipelineShaderModuleCreateInfoARM
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 DataGraphPipelineShaderModuleCreateInfoARM
p Ptr DataGraphPipelineShaderModuleCreateInfoARM
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SHADER_MODULE_CREATE_INFO_ARM)
    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 DataGraphPipelineShaderModuleCreateInfoARM
p Ptr DataGraphPipelineShaderModuleCreateInfoARM
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    pName'' <- ((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
forall a. Monoid a => a
mempty)
    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr CChar))) pName''
    lift $ f

instance FromCStruct DataGraphPipelineShaderModuleCreateInfoARM where
  peekCStruct :: Ptr DataGraphPipelineShaderModuleCreateInfoARM
-> IO DataGraphPipelineShaderModuleCreateInfoARM
peekCStruct Ptr DataGraphPipelineShaderModuleCreateInfoARM
p = do
    module' <- forall a. Storable a => Ptr a -> IO a
peek @ShaderModule ((Ptr DataGraphPipelineShaderModuleCreateInfoARM
p Ptr DataGraphPipelineShaderModuleCreateInfoARM
-> Int -> Ptr ShaderModule
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr ShaderModule))
    pName <- packCString =<< peek ((p `plusPtr` 24 :: Ptr (Ptr CChar)))
    pSpecializationInfo <- peek @(Ptr SpecializationInfo) ((p `plusPtr` 32 :: Ptr (Ptr SpecializationInfo)))
    pSpecializationInfo' <- maybePeek (\Ptr SpecializationInfo
j -> forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @SpecializationInfo (Ptr SpecializationInfo
j)) pSpecializationInfo
    constantCount <- peek @Word32 ((p `plusPtr` 40 :: Ptr Word32))
    pConstants <- peek @(Ptr (DataGraphPipelineConstantARM _)) ((p `plusPtr` 48 :: Ptr (Ptr (DataGraphPipelineConstantARM _))))
    let pConstantsLength = if Ptr (DataGraphPipelineConstantARM (ZonkAny 7))
pConstants Ptr (DataGraphPipelineConstantARM (ZonkAny 7))
-> Ptr (DataGraphPipelineConstantARM (ZonkAny 7)) -> Bool
forall a. Eq a => a -> a -> Bool
== Ptr (DataGraphPipelineConstantARM (ZonkAny 7))
forall a. Ptr a
nullPtr then Int
0 else (Word32 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word32
constantCount)
    pConstants' <- generateM pConstantsLength (\Int
i -> Ptr (SomeStruct DataGraphPipelineConstantARM)
-> IO (SomeStruct DataGraphPipelineConstantARM)
forall (a :: [*] -> *).
(Extensible a,
 forall (es :: [*]).
 (Extendss a es, PeekChain es) =>
 FromCStruct (a es)) =>
Ptr (SomeStruct a) -> IO (SomeStruct a)
peekSomeCStruct (Ptr (DataGraphPipelineConstantARM (ZonkAny 7))
-> Ptr (SomeStruct DataGraphPipelineConstantARM)
forall (a :: [*] -> *) (es :: [*]).
Ptr (a es) -> Ptr (SomeStruct a)
forgetExtensions ((Ptr (DataGraphPipelineConstantARM (ZonkAny 7))
pConstants Ptr (DataGraphPipelineConstantARM (ZonkAny 7))
-> Int -> Ptr (DataGraphPipelineConstantARM (ZonkAny 7))
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
32 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr (DataGraphPipelineConstantARM _)))))
    pure $ DataGraphPipelineShaderModuleCreateInfoARM
             module' pName pSpecializationInfo' constantCount pConstants'

instance Zero DataGraphPipelineShaderModuleCreateInfoARM where
  zero :: DataGraphPipelineShaderModuleCreateInfoARM
zero = ShaderModule
-> ByteString
-> Maybe SpecializationInfo
-> Word32
-> Vector (SomeStruct DataGraphPipelineConstantARM)
-> DataGraphPipelineShaderModuleCreateInfoARM
DataGraphPipelineShaderModuleCreateInfoARM
           ShaderModule
forall a. Zero a => a
zero
           ByteString
forall a. Monoid a => a
mempty
           Maybe SpecializationInfo
forall a. Maybe a
Nothing
           Word32
forall a. Zero a => a
zero
           Vector (SomeStruct DataGraphPipelineConstantARM)
forall a. Monoid a => a
mempty


-- | VkDataGraphPipelineSessionCreateInfoARM - Structure specifying
-- parameters of a newly created data graph pipeline session
--
-- == Valid Usage
--
-- -   #VUID-VkDataGraphPipelineSessionCreateInfoARM-dataGraphPipeline-09781#
--     @dataGraphPipeline@ /must/ have been obtained via a call to
--     'createDataGraphPipelinesARM'
--
-- -   #VUID-VkDataGraphPipelineSessionCreateInfoARM-protectedMemory-09782#
--     If the
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-protectedMemory protectedMemory>
--     feature is not enabled, @flags@ /must/ not contain
--     'DATA_GRAPH_PIPELINE_SESSION_CREATE_PROTECTED_BIT_ARM'
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkDataGraphPipelineSessionCreateInfoARM-sType-sType# @sType@
--     /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SESSION_CREATE_INFO_ARM'
--
-- -   #VUID-VkDataGraphPipelineSessionCreateInfoARM-pNext-pNext# @pNext@
--     /must/ be @NULL@
--
-- -   #VUID-VkDataGraphPipelineSessionCreateInfoARM-flags-parameter#
--     @flags@ /must/ be a valid combination of
--     'DataGraphPipelineSessionCreateFlagBitsARM' values
--
-- -   #VUID-VkDataGraphPipelineSessionCreateInfoARM-dataGraphPipeline-parameter#
--     @dataGraphPipeline@ /must/ be a valid
--     'Vulkan.Core10.Handles.Pipeline' handle
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ARM_data_graph VK_ARM_data_graph>,
-- 'DataGraphPipelineSessionCreateFlagsARM',
-- 'Vulkan.Core10.Handles.Pipeline',
-- 'Vulkan.Core10.Enums.StructureType.StructureType',
-- 'createDataGraphPipelineSessionARM'
data DataGraphPipelineSessionCreateInfoARM = DataGraphPipelineSessionCreateInfoARM
  { -- | @flags@ is a bitmask of 'DataGraphPipelineSessionCreateFlagBitsARM'
    -- describing additional parameters of the session.
    DataGraphPipelineSessionCreateInfoARM
-> DataGraphPipelineSessionCreateFlagsARM
flags :: DataGraphPipelineSessionCreateFlagsARM
  , -- | @dataGraphPipeline@ is the 'Vulkan.Core10.Handles.Pipeline' handle of
    -- the data graph pipeline for which a session is being created.
    DataGraphPipelineSessionCreateInfoARM -> Pipeline
dataGraphPipeline :: Pipeline
  }
  deriving (Typeable, DataGraphPipelineSessionCreateInfoARM
-> DataGraphPipelineSessionCreateInfoARM -> Bool
(DataGraphPipelineSessionCreateInfoARM
 -> DataGraphPipelineSessionCreateInfoARM -> Bool)
-> (DataGraphPipelineSessionCreateInfoARM
    -> DataGraphPipelineSessionCreateInfoARM -> Bool)
-> Eq DataGraphPipelineSessionCreateInfoARM
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: DataGraphPipelineSessionCreateInfoARM
-> DataGraphPipelineSessionCreateInfoARM -> Bool
== :: DataGraphPipelineSessionCreateInfoARM
-> DataGraphPipelineSessionCreateInfoARM -> Bool
$c/= :: DataGraphPipelineSessionCreateInfoARM
-> DataGraphPipelineSessionCreateInfoARM -> Bool
/= :: DataGraphPipelineSessionCreateInfoARM
-> DataGraphPipelineSessionCreateInfoARM -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DataGraphPipelineSessionCreateInfoARM)
#endif
deriving instance Show DataGraphPipelineSessionCreateInfoARM

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

instance FromCStruct DataGraphPipelineSessionCreateInfoARM where
  peekCStruct :: Ptr DataGraphPipelineSessionCreateInfoARM
-> IO DataGraphPipelineSessionCreateInfoARM
peekCStruct Ptr DataGraphPipelineSessionCreateInfoARM
p = do
    flags <- forall a. Storable a => Ptr a -> IO a
peek @DataGraphPipelineSessionCreateFlagsARM ((Ptr DataGraphPipelineSessionCreateInfoARM
p Ptr DataGraphPipelineSessionCreateInfoARM
-> Int -> Ptr DataGraphPipelineSessionCreateFlagsARM
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr DataGraphPipelineSessionCreateFlagsARM))
    dataGraphPipeline <- peek @Pipeline ((p `plusPtr` 24 :: Ptr Pipeline))
    pure $ DataGraphPipelineSessionCreateInfoARM
             flags dataGraphPipeline

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

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


-- | VkDataGraphPipelineSessionBindPointRequirementsInfoARM - Structure
-- specifying info to query the bind point requirements of a data graph
-- pipeline session
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ARM_data_graph VK_ARM_data_graph>,
-- 'Vulkan.Extensions.Handles.DataGraphPipelineSessionARM',
-- 'Vulkan.Core10.Enums.StructureType.StructureType',
-- 'getDataGraphPipelineSessionBindPointRequirementsARM'
data DataGraphPipelineSessionBindPointRequirementsInfoARM = DataGraphPipelineSessionBindPointRequirementsInfoARM
  { -- | @session@ is a 'Vulkan.Extensions.Handles.DataGraphPipelineSessionARM'
    -- specifying the data graph pipeline session whose bind point requirements
    -- are being queried.
    --
    -- #VUID-VkDataGraphPipelineSessionBindPointRequirementsInfoARM-session-parameter#
    -- @session@ /must/ be a valid
    -- 'Vulkan.Extensions.Handles.DataGraphPipelineSessionARM' handle
    DataGraphPipelineSessionBindPointRequirementsInfoARM
-> DataGraphPipelineSessionARM
session :: DataGraphPipelineSessionARM }
  deriving (Typeable, DataGraphPipelineSessionBindPointRequirementsInfoARM
-> DataGraphPipelineSessionBindPointRequirementsInfoARM -> Bool
(DataGraphPipelineSessionBindPointRequirementsInfoARM
 -> DataGraphPipelineSessionBindPointRequirementsInfoARM -> Bool)
-> (DataGraphPipelineSessionBindPointRequirementsInfoARM
    -> DataGraphPipelineSessionBindPointRequirementsInfoARM -> Bool)
-> Eq DataGraphPipelineSessionBindPointRequirementsInfoARM
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: DataGraphPipelineSessionBindPointRequirementsInfoARM
-> DataGraphPipelineSessionBindPointRequirementsInfoARM -> Bool
== :: DataGraphPipelineSessionBindPointRequirementsInfoARM
-> DataGraphPipelineSessionBindPointRequirementsInfoARM -> Bool
$c/= :: DataGraphPipelineSessionBindPointRequirementsInfoARM
-> DataGraphPipelineSessionBindPointRequirementsInfoARM -> Bool
/= :: DataGraphPipelineSessionBindPointRequirementsInfoARM
-> DataGraphPipelineSessionBindPointRequirementsInfoARM -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DataGraphPipelineSessionBindPointRequirementsInfoARM)
#endif
deriving instance Show DataGraphPipelineSessionBindPointRequirementsInfoARM

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

instance FromCStruct DataGraphPipelineSessionBindPointRequirementsInfoARM where
  peekCStruct :: Ptr DataGraphPipelineSessionBindPointRequirementsInfoARM
-> IO DataGraphPipelineSessionBindPointRequirementsInfoARM
peekCStruct Ptr DataGraphPipelineSessionBindPointRequirementsInfoARM
p = do
    session <- forall a. Storable a => Ptr a -> IO a
peek @DataGraphPipelineSessionARM ((Ptr DataGraphPipelineSessionBindPointRequirementsInfoARM
p Ptr DataGraphPipelineSessionBindPointRequirementsInfoARM
-> Int -> Ptr DataGraphPipelineSessionARM
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr DataGraphPipelineSessionARM))
    pure $ DataGraphPipelineSessionBindPointRequirementsInfoARM
             session

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

instance Zero DataGraphPipelineSessionBindPointRequirementsInfoARM where
  zero :: DataGraphPipelineSessionBindPointRequirementsInfoARM
zero = DataGraphPipelineSessionARM
-> DataGraphPipelineSessionBindPointRequirementsInfoARM
DataGraphPipelineSessionBindPointRequirementsInfoARM
           DataGraphPipelineSessionARM
forall a. Zero a => a
zero


-- | VkDataGraphPipelineSessionBindPointRequirementARM - Structure specifying
-- the requirements of a bind point of a data graph pipeline session
--
-- = Description
--
-- Implementations /must/ always return 1 for @numObjects@ if @bindPoint@
-- is one of the following bind points:
--
-- -   'DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_TRANSIENT_ARM'
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkDataGraphPipelineSessionBindPointRequirementARM-sType-sType#
--     @sType@ /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_REQUIREMENT_ARM'
--
-- -   #VUID-VkDataGraphPipelineSessionBindPointRequirementARM-pNext-pNext#
--     @pNext@ /must/ be @NULL@
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ARM_data_graph VK_ARM_data_graph>,
-- 'DataGraphPipelineSessionBindPointARM',
-- 'DataGraphPipelineSessionBindPointTypeARM',
-- 'Vulkan.Core10.Enums.StructureType.StructureType',
-- 'getDataGraphPipelineSessionBindPointRequirementsARM'
data DataGraphPipelineSessionBindPointRequirementARM = DataGraphPipelineSessionBindPointRequirementARM
  { -- | @bindPoint@ is a 'DataGraphPipelineSessionBindPointARM' specifying the
    -- data graph pipeline session bind point being required.
    DataGraphPipelineSessionBindPointRequirementARM
-> DataGraphPipelineSessionBindPointARM
bindPoint :: DataGraphPipelineSessionBindPointARM
  , -- | @bindPointType@ is a 'DataGraphPipelineSessionBindPointTypeARM'
    -- specifying the type of object required for @bindPoint@.
    DataGraphPipelineSessionBindPointRequirementARM
-> DataGraphPipelineSessionBindPointTypeARM
bindPointType :: DataGraphPipelineSessionBindPointTypeARM
  , -- | @numObjects@ is the number of objects required for @bindPoint@.
    DataGraphPipelineSessionBindPointRequirementARM -> Word32
numObjects :: Word32
  }
  deriving (Typeable, DataGraphPipelineSessionBindPointRequirementARM
-> DataGraphPipelineSessionBindPointRequirementARM -> Bool
(DataGraphPipelineSessionBindPointRequirementARM
 -> DataGraphPipelineSessionBindPointRequirementARM -> Bool)
-> (DataGraphPipelineSessionBindPointRequirementARM
    -> DataGraphPipelineSessionBindPointRequirementARM -> Bool)
-> Eq DataGraphPipelineSessionBindPointRequirementARM
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: DataGraphPipelineSessionBindPointRequirementARM
-> DataGraphPipelineSessionBindPointRequirementARM -> Bool
== :: DataGraphPipelineSessionBindPointRequirementARM
-> DataGraphPipelineSessionBindPointRequirementARM -> Bool
$c/= :: DataGraphPipelineSessionBindPointRequirementARM
-> DataGraphPipelineSessionBindPointRequirementARM -> Bool
/= :: DataGraphPipelineSessionBindPointRequirementARM
-> DataGraphPipelineSessionBindPointRequirementARM -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DataGraphPipelineSessionBindPointRequirementARM)
#endif
deriving instance Show DataGraphPipelineSessionBindPointRequirementARM

instance ToCStruct DataGraphPipelineSessionBindPointRequirementARM where
  withCStruct :: forall b.
DataGraphPipelineSessionBindPointRequirementARM
-> (Ptr DataGraphPipelineSessionBindPointRequirementARM -> IO b)
-> IO b
withCStruct DataGraphPipelineSessionBindPointRequirementARM
x Ptr DataGraphPipelineSessionBindPointRequirementARM -> IO b
f = Int
-> (Ptr DataGraphPipelineSessionBindPointRequirementARM -> IO b)
-> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
32 ((Ptr DataGraphPipelineSessionBindPointRequirementARM -> IO b)
 -> IO b)
-> (Ptr DataGraphPipelineSessionBindPointRequirementARM -> IO b)
-> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr DataGraphPipelineSessionBindPointRequirementARM
p -> Ptr DataGraphPipelineSessionBindPointRequirementARM
-> DataGraphPipelineSessionBindPointRequirementARM -> IO b -> IO b
forall b.
Ptr DataGraphPipelineSessionBindPointRequirementARM
-> DataGraphPipelineSessionBindPointRequirementARM -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr DataGraphPipelineSessionBindPointRequirementARM
p DataGraphPipelineSessionBindPointRequirementARM
x (Ptr DataGraphPipelineSessionBindPointRequirementARM -> IO b
f Ptr DataGraphPipelineSessionBindPointRequirementARM
p)
  pokeCStruct :: forall b.
Ptr DataGraphPipelineSessionBindPointRequirementARM
-> DataGraphPipelineSessionBindPointRequirementARM -> IO b -> IO b
pokeCStruct Ptr DataGraphPipelineSessionBindPointRequirementARM
p DataGraphPipelineSessionBindPointRequirementARM{Word32
DataGraphPipelineSessionBindPointTypeARM
DataGraphPipelineSessionBindPointARM
bindPoint :: DataGraphPipelineSessionBindPointRequirementARM
-> DataGraphPipelineSessionBindPointARM
bindPointType :: DataGraphPipelineSessionBindPointRequirementARM
-> DataGraphPipelineSessionBindPointTypeARM
numObjects :: DataGraphPipelineSessionBindPointRequirementARM -> Word32
bindPoint :: DataGraphPipelineSessionBindPointARM
bindPointType :: DataGraphPipelineSessionBindPointTypeARM
numObjects :: Word32
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DataGraphPipelineSessionBindPointRequirementARM
p Ptr DataGraphPipelineSessionBindPointRequirementARM
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_REQUIREMENT_ARM)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DataGraphPipelineSessionBindPointRequirementARM
p Ptr DataGraphPipelineSessionBindPointRequirementARM
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr DataGraphPipelineSessionBindPointARM
-> DataGraphPipelineSessionBindPointARM -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DataGraphPipelineSessionBindPointRequirementARM
p Ptr DataGraphPipelineSessionBindPointRequirementARM
-> Int -> Ptr DataGraphPipelineSessionBindPointARM
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr DataGraphPipelineSessionBindPointARM)) (DataGraphPipelineSessionBindPointARM
bindPoint)
    Ptr DataGraphPipelineSessionBindPointTypeARM
-> DataGraphPipelineSessionBindPointTypeARM -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DataGraphPipelineSessionBindPointRequirementARM
p Ptr DataGraphPipelineSessionBindPointRequirementARM
-> Int -> Ptr DataGraphPipelineSessionBindPointTypeARM
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr DataGraphPipelineSessionBindPointTypeARM)) (DataGraphPipelineSessionBindPointTypeARM
bindPointType)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DataGraphPipelineSessionBindPointRequirementARM
p Ptr DataGraphPipelineSessionBindPointRequirementARM
-> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Word32)) (Word32
numObjects)
    IO b
f
  cStructSize :: Int
cStructSize = Int
32
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b.
Ptr DataGraphPipelineSessionBindPointRequirementARM -> IO b -> IO b
pokeZeroCStruct Ptr DataGraphPipelineSessionBindPointRequirementARM
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DataGraphPipelineSessionBindPointRequirementARM
p Ptr DataGraphPipelineSessionBindPointRequirementARM
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_REQUIREMENT_ARM)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DataGraphPipelineSessionBindPointRequirementARM
p Ptr DataGraphPipelineSessionBindPointRequirementARM
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr DataGraphPipelineSessionBindPointARM
-> DataGraphPipelineSessionBindPointARM -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DataGraphPipelineSessionBindPointRequirementARM
p Ptr DataGraphPipelineSessionBindPointRequirementARM
-> Int -> Ptr DataGraphPipelineSessionBindPointARM
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr DataGraphPipelineSessionBindPointARM)) (DataGraphPipelineSessionBindPointARM
forall a. Zero a => a
zero)
    Ptr DataGraphPipelineSessionBindPointTypeARM
-> DataGraphPipelineSessionBindPointTypeARM -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DataGraphPipelineSessionBindPointRequirementARM
p Ptr DataGraphPipelineSessionBindPointRequirementARM
-> Int -> Ptr DataGraphPipelineSessionBindPointTypeARM
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr DataGraphPipelineSessionBindPointTypeARM)) (DataGraphPipelineSessionBindPointTypeARM
forall a. Zero a => a
zero)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DataGraphPipelineSessionBindPointRequirementARM
p Ptr DataGraphPipelineSessionBindPointRequirementARM
-> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct DataGraphPipelineSessionBindPointRequirementARM where
  peekCStruct :: Ptr DataGraphPipelineSessionBindPointRequirementARM
-> IO DataGraphPipelineSessionBindPointRequirementARM
peekCStruct Ptr DataGraphPipelineSessionBindPointRequirementARM
p = do
    bindPoint <- forall a. Storable a => Ptr a -> IO a
peek @DataGraphPipelineSessionBindPointARM ((Ptr DataGraphPipelineSessionBindPointRequirementARM
p Ptr DataGraphPipelineSessionBindPointRequirementARM
-> Int -> Ptr DataGraphPipelineSessionBindPointARM
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr DataGraphPipelineSessionBindPointARM))
    bindPointType <- peek @DataGraphPipelineSessionBindPointTypeARM ((p `plusPtr` 20 :: Ptr DataGraphPipelineSessionBindPointTypeARM))
    numObjects <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
    pure $ DataGraphPipelineSessionBindPointRequirementARM
             bindPoint bindPointType numObjects

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

instance Zero DataGraphPipelineSessionBindPointRequirementARM where
  zero :: DataGraphPipelineSessionBindPointRequirementARM
zero = DataGraphPipelineSessionBindPointARM
-> DataGraphPipelineSessionBindPointTypeARM
-> Word32
-> DataGraphPipelineSessionBindPointRequirementARM
DataGraphPipelineSessionBindPointRequirementARM
           DataGraphPipelineSessionBindPointARM
forall a. Zero a => a
zero
           DataGraphPipelineSessionBindPointTypeARM
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero


-- | VkDataGraphPipelineSessionMemoryRequirementsInfoARM - Structure
-- specifying parameters to query the memory requirements of a data graph
-- pipeline session
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ARM_data_graph VK_ARM_data_graph>,
-- 'Vulkan.Extensions.Handles.DataGraphPipelineSessionARM',
-- 'DataGraphPipelineSessionBindPointARM',
-- 'Vulkan.Core10.Enums.StructureType.StructureType',
-- 'getDataGraphPipelineSessionMemoryRequirementsARM'
data DataGraphPipelineSessionMemoryRequirementsInfoARM = DataGraphPipelineSessionMemoryRequirementsInfoARM
  { -- | @session@ is the data graph pipeline session to query.
    --
    -- #VUID-VkDataGraphPipelineSessionMemoryRequirementsInfoARM-session-parameter#
    -- @session@ /must/ be a valid
    -- 'Vulkan.Extensions.Handles.DataGraphPipelineSessionARM' handle
    DataGraphPipelineSessionMemoryRequirementsInfoARM
-> DataGraphPipelineSessionARM
session :: DataGraphPipelineSessionARM
  , -- | @bindPoint@ is the bind point of a data graph pipeline session for which
    -- memory requirements are being queried.
    --
    -- #VUID-VkDataGraphPipelineSessionMemoryRequirementsInfoARM-bindPoint-parameter#
    -- @bindPoint@ /must/ be a valid 'DataGraphPipelineSessionBindPointARM'
    -- value
    DataGraphPipelineSessionMemoryRequirementsInfoARM
-> DataGraphPipelineSessionBindPointARM
bindPoint :: DataGraphPipelineSessionBindPointARM
  , -- | @objectIndex@ is the index of the object whose memory requirements are
    -- being queried.
    --
    -- #VUID-VkDataGraphPipelineSessionMemoryRequirementsInfoARM-objectIndex-09855#
    -- @objectIndex@ /must/ be less than the number of objects returned by
    -- 'getDataGraphPipelineSessionBindPointRequirementsARM' via
    -- 'DataGraphPipelineSessionBindPointRequirementARM'::@numObjects@ with
    -- 'DataGraphPipelineSessionMemoryRequirementsInfoARM'::@bindPoint@ equal
    -- to @bindPoint@
    DataGraphPipelineSessionMemoryRequirementsInfoARM -> Word32
objectIndex :: Word32
  }
  deriving (Typeable, DataGraphPipelineSessionMemoryRequirementsInfoARM
-> DataGraphPipelineSessionMemoryRequirementsInfoARM -> Bool
(DataGraphPipelineSessionMemoryRequirementsInfoARM
 -> DataGraphPipelineSessionMemoryRequirementsInfoARM -> Bool)
-> (DataGraphPipelineSessionMemoryRequirementsInfoARM
    -> DataGraphPipelineSessionMemoryRequirementsInfoARM -> Bool)
-> Eq DataGraphPipelineSessionMemoryRequirementsInfoARM
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: DataGraphPipelineSessionMemoryRequirementsInfoARM
-> DataGraphPipelineSessionMemoryRequirementsInfoARM -> Bool
== :: DataGraphPipelineSessionMemoryRequirementsInfoARM
-> DataGraphPipelineSessionMemoryRequirementsInfoARM -> Bool
$c/= :: DataGraphPipelineSessionMemoryRequirementsInfoARM
-> DataGraphPipelineSessionMemoryRequirementsInfoARM -> Bool
/= :: DataGraphPipelineSessionMemoryRequirementsInfoARM
-> DataGraphPipelineSessionMemoryRequirementsInfoARM -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DataGraphPipelineSessionMemoryRequirementsInfoARM)
#endif
deriving instance Show DataGraphPipelineSessionMemoryRequirementsInfoARM

instance ToCStruct DataGraphPipelineSessionMemoryRequirementsInfoARM where
  withCStruct :: forall b.
DataGraphPipelineSessionMemoryRequirementsInfoARM
-> (Ptr DataGraphPipelineSessionMemoryRequirementsInfoARM -> IO b)
-> IO b
withCStruct DataGraphPipelineSessionMemoryRequirementsInfoARM
x Ptr DataGraphPipelineSessionMemoryRequirementsInfoARM -> IO b
f = Int
-> (Ptr DataGraphPipelineSessionMemoryRequirementsInfoARM -> IO b)
-> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
32 ((Ptr DataGraphPipelineSessionMemoryRequirementsInfoARM -> IO b)
 -> IO b)
-> (Ptr DataGraphPipelineSessionMemoryRequirementsInfoARM -> IO b)
-> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr DataGraphPipelineSessionMemoryRequirementsInfoARM
p -> Ptr DataGraphPipelineSessionMemoryRequirementsInfoARM
-> DataGraphPipelineSessionMemoryRequirementsInfoARM
-> IO b
-> IO b
forall b.
Ptr DataGraphPipelineSessionMemoryRequirementsInfoARM
-> DataGraphPipelineSessionMemoryRequirementsInfoARM
-> IO b
-> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr DataGraphPipelineSessionMemoryRequirementsInfoARM
p DataGraphPipelineSessionMemoryRequirementsInfoARM
x (Ptr DataGraphPipelineSessionMemoryRequirementsInfoARM -> IO b
f Ptr DataGraphPipelineSessionMemoryRequirementsInfoARM
p)
  pokeCStruct :: forall b.
Ptr DataGraphPipelineSessionMemoryRequirementsInfoARM
-> DataGraphPipelineSessionMemoryRequirementsInfoARM
-> IO b
-> IO b
pokeCStruct Ptr DataGraphPipelineSessionMemoryRequirementsInfoARM
p DataGraphPipelineSessionMemoryRequirementsInfoARM{Word32
DataGraphPipelineSessionARM
DataGraphPipelineSessionBindPointARM
session :: DataGraphPipelineSessionMemoryRequirementsInfoARM
-> DataGraphPipelineSessionARM
bindPoint :: DataGraphPipelineSessionMemoryRequirementsInfoARM
-> DataGraphPipelineSessionBindPointARM
objectIndex :: DataGraphPipelineSessionMemoryRequirementsInfoARM -> Word32
session :: DataGraphPipelineSessionARM
bindPoint :: DataGraphPipelineSessionBindPointARM
objectIndex :: Word32
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DataGraphPipelineSessionMemoryRequirementsInfoARM
p Ptr DataGraphPipelineSessionMemoryRequirementsInfoARM
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SESSION_MEMORY_REQUIREMENTS_INFO_ARM)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DataGraphPipelineSessionMemoryRequirementsInfoARM
p Ptr DataGraphPipelineSessionMemoryRequirementsInfoARM
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr DataGraphPipelineSessionARM
-> DataGraphPipelineSessionARM -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DataGraphPipelineSessionMemoryRequirementsInfoARM
p Ptr DataGraphPipelineSessionMemoryRequirementsInfoARM
-> Int -> Ptr DataGraphPipelineSessionARM
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr DataGraphPipelineSessionARM)) (DataGraphPipelineSessionARM
session)
    Ptr DataGraphPipelineSessionBindPointARM
-> DataGraphPipelineSessionBindPointARM -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DataGraphPipelineSessionMemoryRequirementsInfoARM
p Ptr DataGraphPipelineSessionMemoryRequirementsInfoARM
-> Int -> Ptr DataGraphPipelineSessionBindPointARM
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr DataGraphPipelineSessionBindPointARM)) (DataGraphPipelineSessionBindPointARM
bindPoint)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DataGraphPipelineSessionMemoryRequirementsInfoARM
p Ptr DataGraphPipelineSessionMemoryRequirementsInfoARM
-> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
28 :: Ptr Word32)) (Word32
objectIndex)
    IO b
f
  cStructSize :: Int
cStructSize = Int
32
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b.
Ptr DataGraphPipelineSessionMemoryRequirementsInfoARM
-> IO b -> IO b
pokeZeroCStruct Ptr DataGraphPipelineSessionMemoryRequirementsInfoARM
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DataGraphPipelineSessionMemoryRequirementsInfoARM
p Ptr DataGraphPipelineSessionMemoryRequirementsInfoARM
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SESSION_MEMORY_REQUIREMENTS_INFO_ARM)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DataGraphPipelineSessionMemoryRequirementsInfoARM
p Ptr DataGraphPipelineSessionMemoryRequirementsInfoARM
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr DataGraphPipelineSessionARM
-> DataGraphPipelineSessionARM -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DataGraphPipelineSessionMemoryRequirementsInfoARM
p Ptr DataGraphPipelineSessionMemoryRequirementsInfoARM
-> Int -> Ptr DataGraphPipelineSessionARM
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr DataGraphPipelineSessionARM)) (DataGraphPipelineSessionARM
forall a. Zero a => a
zero)
    Ptr DataGraphPipelineSessionBindPointARM
-> DataGraphPipelineSessionBindPointARM -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DataGraphPipelineSessionMemoryRequirementsInfoARM
p Ptr DataGraphPipelineSessionMemoryRequirementsInfoARM
-> Int -> Ptr DataGraphPipelineSessionBindPointARM
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr DataGraphPipelineSessionBindPointARM)) (DataGraphPipelineSessionBindPointARM
forall a. Zero a => a
zero)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DataGraphPipelineSessionMemoryRequirementsInfoARM
p Ptr DataGraphPipelineSessionMemoryRequirementsInfoARM
-> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
28 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct DataGraphPipelineSessionMemoryRequirementsInfoARM where
  peekCStruct :: Ptr DataGraphPipelineSessionMemoryRequirementsInfoARM
-> IO DataGraphPipelineSessionMemoryRequirementsInfoARM
peekCStruct Ptr DataGraphPipelineSessionMemoryRequirementsInfoARM
p = do
    session <- forall a. Storable a => Ptr a -> IO a
peek @DataGraphPipelineSessionARM ((Ptr DataGraphPipelineSessionMemoryRequirementsInfoARM
p Ptr DataGraphPipelineSessionMemoryRequirementsInfoARM
-> Int -> Ptr DataGraphPipelineSessionARM
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr DataGraphPipelineSessionARM))
    bindPoint <- peek @DataGraphPipelineSessionBindPointARM ((p `plusPtr` 24 :: Ptr DataGraphPipelineSessionBindPointARM))
    objectIndex <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))
    pure $ DataGraphPipelineSessionMemoryRequirementsInfoARM
             session bindPoint objectIndex

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

instance Zero DataGraphPipelineSessionMemoryRequirementsInfoARM where
  zero :: DataGraphPipelineSessionMemoryRequirementsInfoARM
zero = DataGraphPipelineSessionARM
-> DataGraphPipelineSessionBindPointARM
-> Word32
-> DataGraphPipelineSessionMemoryRequirementsInfoARM
DataGraphPipelineSessionMemoryRequirementsInfoARM
           DataGraphPipelineSessionARM
forall a. Zero a => a
zero
           DataGraphPipelineSessionBindPointARM
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero


-- | VkBindDataGraphPipelineSessionMemoryInfoARM - Structure describing how
-- to bind a data graph pipeline session to memory
--
-- == Valid Usage
--
-- -   #VUID-VkBindDataGraphPipelineSessionMemoryInfoARM-session-09785#
--     @session@ /must/ not have been bound to a memory object for
--     @bindPoint@
--
-- -   #VUID-VkBindDataGraphPipelineSessionMemoryInfoARM-bindPoint-09786#
--     @bindPoint@ /must/ have been returned as part of a
--     'DataGraphPipelineSessionBindPointRequirementARM' whose
--     @bindPointType@ member is
--     'DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_TYPE_MEMORY_ARM' by a prior
--     call to 'getDataGraphPipelineSessionMemoryRequirementsARM' for
--     @session@
--
-- -   #VUID-VkBindDataGraphPipelineSessionMemoryInfoARM-memoryOffset-09787#
--     @memoryOffset@ /must/ be less than the size of @memory@
--
-- -   #VUID-VkBindDataGraphPipelineSessionMemoryInfoARM-memory-09788#
--     @memory@ must have been allocated using one of the memory types
--     allowed in the @memoryTypeBits@ member of the
--     'Vulkan.Core10.MemoryManagement.MemoryRequirements' structure
--     returned from a call to
--     'getDataGraphPipelineSessionMemoryRequirementsARM' with @session@
--
-- -   #VUID-VkBindDataGraphPipelineSessionMemoryInfoARM-memoryOffset-09789#
--     @memoryOffset@ /must/ be an integer multiple of the @alignment@
--     member of the 'Vulkan.Core10.MemoryManagement.MemoryRequirements'
--     structure returned from a call to
--     'getDataGraphPipelineSessionMemoryRequirementsARM' with @session@
--
-- -   #VUID-VkBindDataGraphPipelineSessionMemoryInfoARM-size-09790# The
--     @size@ member of the
--     'Vulkan.Core10.MemoryManagement.MemoryRequirements' structure
--     returned from a call to
--     'getDataGraphPipelineSessionMemoryRequirementsARM' with @session@
--     /must/ be less than or equal to the size of @memory@ minus
--     @memoryOffset@
--
-- -   #VUID-VkBindDataGraphPipelineSessionMemoryInfoARM-session-09791# If
--     @session@ was created with the
--     'DATA_GRAPH_PIPELINE_SESSION_CREATE_PROTECTED_BIT_ARM' bit set, the
--     session /must/ be bound to a memory object allocated with a memory
--     type that reports
--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_PROTECTED_BIT'
--
-- -   #VUID-VkBindDataGraphPipelineSessionMemoryInfoARM-session-09792# If
--     @session@ was created with the
--     'DATA_GRAPH_PIPELINE_SESSION_CREATE_PROTECTED_BIT_ARM' bit not set,
--     the session /must/ not be bound to a memory object allocated with a
--     memory type that reports
--     'Vulkan.Core10.Enums.MemoryPropertyFlagBits.MEMORY_PROPERTY_PROTECTED_BIT'
--
-- -   #VUID-VkBindDataGraphPipelineSessionMemoryInfoARM-objectIndex-09805#
--     @objectIndex@ /must/ be less than the value of @numObjects@ returned
--     by 'getDataGraphPipelineSessionBindPointRequirementsARM' for
--     @bindPoint@
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkBindDataGraphPipelineSessionMemoryInfoARM-sType-sType#
--     @sType@ /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_BIND_DATA_GRAPH_PIPELINE_SESSION_MEMORY_INFO_ARM'
--
-- -   #VUID-VkBindDataGraphPipelineSessionMemoryInfoARM-pNext-pNext#
--     @pNext@ /must/ be @NULL@
--
-- -   #VUID-VkBindDataGraphPipelineSessionMemoryInfoARM-session-parameter#
--     @session@ /must/ be a valid
--     'Vulkan.Extensions.Handles.DataGraphPipelineSessionARM' handle
--
-- -   #VUID-VkBindDataGraphPipelineSessionMemoryInfoARM-bindPoint-parameter#
--     @bindPoint@ /must/ be a valid 'DataGraphPipelineSessionBindPointARM'
--     value
--
-- -   #VUID-VkBindDataGraphPipelineSessionMemoryInfoARM-memory-parameter#
--     @memory@ /must/ be a valid 'Vulkan.Core10.Handles.DeviceMemory'
--     handle
--
-- -   #VUID-VkBindDataGraphPipelineSessionMemoryInfoARM-commonparent# Both
--     of @memory@, and @session@ /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_ARM_data_graph VK_ARM_data_graph>,
-- 'Vulkan.Extensions.Handles.DataGraphPipelineSessionARM',
-- 'DataGraphPipelineSessionBindPointARM',
-- 'Vulkan.Core10.Handles.DeviceMemory',
-- 'Vulkan.Core10.FundamentalTypes.DeviceSize',
-- 'Vulkan.Core10.Enums.StructureType.StructureType',
-- 'bindDataGraphPipelineSessionMemoryARM'
data BindDataGraphPipelineSessionMemoryInfoARM = BindDataGraphPipelineSessionMemoryInfoARM
  { -- | @session@ is the data graph pipeline session to be attached to memory.
    BindDataGraphPipelineSessionMemoryInfoARM
-> DataGraphPipelineSessionARM
session :: DataGraphPipelineSessionARM
  , -- | @bindPoint@ is the data graph pipeline session bind point to which
    -- @memory@ is to be attached.
    BindDataGraphPipelineSessionMemoryInfoARM
-> DataGraphPipelineSessionBindPointARM
bindPoint :: DataGraphPipelineSessionBindPointARM
  , -- | @objectIndex@ is the index of the object for @bindPoint@ at which
    -- @memory@ is to be attached.
    BindDataGraphPipelineSessionMemoryInfoARM -> Word32
objectIndex :: Word32
  , -- | @memory@ is a 'Vulkan.Core10.Handles.DeviceMemory' object describing the
    -- device memory to attach.
    BindDataGraphPipelineSessionMemoryInfoARM -> DeviceMemory
memory :: DeviceMemory
  , -- | @memoryOffset@ is the start offset of the resion of @memory@ which is to
    -- be bound to the data graph pipeline session.
    BindDataGraphPipelineSessionMemoryInfoARM -> Word64
memoryOffset :: DeviceSize
  }
  deriving (Typeable, BindDataGraphPipelineSessionMemoryInfoARM
-> BindDataGraphPipelineSessionMemoryInfoARM -> Bool
(BindDataGraphPipelineSessionMemoryInfoARM
 -> BindDataGraphPipelineSessionMemoryInfoARM -> Bool)
-> (BindDataGraphPipelineSessionMemoryInfoARM
    -> BindDataGraphPipelineSessionMemoryInfoARM -> Bool)
-> Eq BindDataGraphPipelineSessionMemoryInfoARM
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: BindDataGraphPipelineSessionMemoryInfoARM
-> BindDataGraphPipelineSessionMemoryInfoARM -> Bool
== :: BindDataGraphPipelineSessionMemoryInfoARM
-> BindDataGraphPipelineSessionMemoryInfoARM -> Bool
$c/= :: BindDataGraphPipelineSessionMemoryInfoARM
-> BindDataGraphPipelineSessionMemoryInfoARM -> Bool
/= :: BindDataGraphPipelineSessionMemoryInfoARM
-> BindDataGraphPipelineSessionMemoryInfoARM -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (BindDataGraphPipelineSessionMemoryInfoARM)
#endif
deriving instance Show BindDataGraphPipelineSessionMemoryInfoARM

instance ToCStruct BindDataGraphPipelineSessionMemoryInfoARM where
  withCStruct :: forall b.
BindDataGraphPipelineSessionMemoryInfoARM
-> (Ptr BindDataGraphPipelineSessionMemoryInfoARM -> IO b) -> IO b
withCStruct BindDataGraphPipelineSessionMemoryInfoARM
x Ptr BindDataGraphPipelineSessionMemoryInfoARM -> IO b
f = Int
-> (Ptr BindDataGraphPipelineSessionMemoryInfoARM -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
48 ((Ptr BindDataGraphPipelineSessionMemoryInfoARM -> IO b) -> IO b)
-> (Ptr BindDataGraphPipelineSessionMemoryInfoARM -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr BindDataGraphPipelineSessionMemoryInfoARM
p -> Ptr BindDataGraphPipelineSessionMemoryInfoARM
-> BindDataGraphPipelineSessionMemoryInfoARM -> IO b -> IO b
forall b.
Ptr BindDataGraphPipelineSessionMemoryInfoARM
-> BindDataGraphPipelineSessionMemoryInfoARM -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr BindDataGraphPipelineSessionMemoryInfoARM
p BindDataGraphPipelineSessionMemoryInfoARM
x (Ptr BindDataGraphPipelineSessionMemoryInfoARM -> IO b
f Ptr BindDataGraphPipelineSessionMemoryInfoARM
p)
  pokeCStruct :: forall b.
Ptr BindDataGraphPipelineSessionMemoryInfoARM
-> BindDataGraphPipelineSessionMemoryInfoARM -> IO b -> IO b
pokeCStruct Ptr BindDataGraphPipelineSessionMemoryInfoARM
p BindDataGraphPipelineSessionMemoryInfoARM{Word32
Word64
DeviceMemory
DataGraphPipelineSessionARM
DataGraphPipelineSessionBindPointARM
session :: BindDataGraphPipelineSessionMemoryInfoARM
-> DataGraphPipelineSessionARM
bindPoint :: BindDataGraphPipelineSessionMemoryInfoARM
-> DataGraphPipelineSessionBindPointARM
objectIndex :: BindDataGraphPipelineSessionMemoryInfoARM -> Word32
memory :: BindDataGraphPipelineSessionMemoryInfoARM -> DeviceMemory
memoryOffset :: BindDataGraphPipelineSessionMemoryInfoARM -> Word64
session :: DataGraphPipelineSessionARM
bindPoint :: DataGraphPipelineSessionBindPointARM
objectIndex :: Word32
memory :: DeviceMemory
memoryOffset :: Word64
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr BindDataGraphPipelineSessionMemoryInfoARM
p Ptr BindDataGraphPipelineSessionMemoryInfoARM
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_BIND_DATA_GRAPH_PIPELINE_SESSION_MEMORY_INFO_ARM)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr BindDataGraphPipelineSessionMemoryInfoARM
p Ptr BindDataGraphPipelineSessionMemoryInfoARM
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr DataGraphPipelineSessionARM
-> DataGraphPipelineSessionARM -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr BindDataGraphPipelineSessionMemoryInfoARM
p Ptr BindDataGraphPipelineSessionMemoryInfoARM
-> Int -> Ptr DataGraphPipelineSessionARM
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr DataGraphPipelineSessionARM)) (DataGraphPipelineSessionARM
session)
    Ptr DataGraphPipelineSessionBindPointARM
-> DataGraphPipelineSessionBindPointARM -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr BindDataGraphPipelineSessionMemoryInfoARM
p Ptr BindDataGraphPipelineSessionMemoryInfoARM
-> Int -> Ptr DataGraphPipelineSessionBindPointARM
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr DataGraphPipelineSessionBindPointARM)) (DataGraphPipelineSessionBindPointARM
bindPoint)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr BindDataGraphPipelineSessionMemoryInfoARM
p Ptr BindDataGraphPipelineSessionMemoryInfoARM -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
28 :: Ptr Word32)) (Word32
objectIndex)
    Ptr DeviceMemory -> DeviceMemory -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr BindDataGraphPipelineSessionMemoryInfoARM
p Ptr BindDataGraphPipelineSessionMemoryInfoARM
-> Int -> Ptr DeviceMemory
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr DeviceMemory)) (DeviceMemory
memory)
    Ptr Word64 -> Word64 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr BindDataGraphPipelineSessionMemoryInfoARM
p Ptr BindDataGraphPipelineSessionMemoryInfoARM -> Int -> Ptr Word64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr DeviceSize)) (Word64
memoryOffset)
    IO b
f
  cStructSize :: Int
cStructSize = Int
48
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b.
Ptr BindDataGraphPipelineSessionMemoryInfoARM -> IO b -> IO b
pokeZeroCStruct Ptr BindDataGraphPipelineSessionMemoryInfoARM
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr BindDataGraphPipelineSessionMemoryInfoARM
p Ptr BindDataGraphPipelineSessionMemoryInfoARM
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_BIND_DATA_GRAPH_PIPELINE_SESSION_MEMORY_INFO_ARM)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr BindDataGraphPipelineSessionMemoryInfoARM
p Ptr BindDataGraphPipelineSessionMemoryInfoARM
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr DataGraphPipelineSessionARM
-> DataGraphPipelineSessionARM -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr BindDataGraphPipelineSessionMemoryInfoARM
p Ptr BindDataGraphPipelineSessionMemoryInfoARM
-> Int -> Ptr DataGraphPipelineSessionARM
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr DataGraphPipelineSessionARM)) (DataGraphPipelineSessionARM
forall a. Zero a => a
zero)
    Ptr DataGraphPipelineSessionBindPointARM
-> DataGraphPipelineSessionBindPointARM -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr BindDataGraphPipelineSessionMemoryInfoARM
p Ptr BindDataGraphPipelineSessionMemoryInfoARM
-> Int -> Ptr DataGraphPipelineSessionBindPointARM
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr DataGraphPipelineSessionBindPointARM)) (DataGraphPipelineSessionBindPointARM
forall a. Zero a => a
zero)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr BindDataGraphPipelineSessionMemoryInfoARM
p Ptr BindDataGraphPipelineSessionMemoryInfoARM -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
28 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    Ptr DeviceMemory -> DeviceMemory -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr BindDataGraphPipelineSessionMemoryInfoARM
p Ptr BindDataGraphPipelineSessionMemoryInfoARM
-> Int -> Ptr DeviceMemory
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr DeviceMemory)) (DeviceMemory
forall a. Zero a => a
zero)
    Ptr Word64 -> Word64 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr BindDataGraphPipelineSessionMemoryInfoARM
p Ptr BindDataGraphPipelineSessionMemoryInfoARM -> Int -> Ptr Word64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr DeviceSize)) (Word64
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct BindDataGraphPipelineSessionMemoryInfoARM where
  peekCStruct :: Ptr BindDataGraphPipelineSessionMemoryInfoARM
-> IO BindDataGraphPipelineSessionMemoryInfoARM
peekCStruct Ptr BindDataGraphPipelineSessionMemoryInfoARM
p = do
    session <- forall a. Storable a => Ptr a -> IO a
peek @DataGraphPipelineSessionARM ((Ptr BindDataGraphPipelineSessionMemoryInfoARM
p Ptr BindDataGraphPipelineSessionMemoryInfoARM
-> Int -> Ptr DataGraphPipelineSessionARM
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr DataGraphPipelineSessionARM))
    bindPoint <- peek @DataGraphPipelineSessionBindPointARM ((p `plusPtr` 24 :: Ptr DataGraphPipelineSessionBindPointARM))
    objectIndex <- peek @Word32 ((p `plusPtr` 28 :: Ptr Word32))
    memory <- peek @DeviceMemory ((p `plusPtr` 32 :: Ptr DeviceMemory))
    memoryOffset <- peek @DeviceSize ((p `plusPtr` 40 :: Ptr DeviceSize))
    pure $ BindDataGraphPipelineSessionMemoryInfoARM
             session bindPoint objectIndex memory memoryOffset

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

instance Zero BindDataGraphPipelineSessionMemoryInfoARM where
  zero :: BindDataGraphPipelineSessionMemoryInfoARM
zero = DataGraphPipelineSessionARM
-> DataGraphPipelineSessionBindPointARM
-> Word32
-> DeviceMemory
-> Word64
-> BindDataGraphPipelineSessionMemoryInfoARM
BindDataGraphPipelineSessionMemoryInfoARM
           DataGraphPipelineSessionARM
forall a. Zero a => a
zero
           DataGraphPipelineSessionBindPointARM
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero
           DeviceMemory
forall a. Zero a => a
zero
           Word64
forall a. Zero a => a
zero


-- | VkDataGraphPipelineInfoARM - Structure describing a data graph pipeline
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ARM_data_graph VK_ARM_data_graph>,
-- 'Vulkan.Core10.Handles.Pipeline',
-- 'Vulkan.Core10.Enums.StructureType.StructureType',
-- 'getDataGraphPipelineAvailablePropertiesARM',
-- 'getDataGraphPipelinePropertiesARM'
data DataGraphPipelineInfoARM = DataGraphPipelineInfoARM
  { -- | @dataGraphPipeline@ is a 'Vulkan.Core10.Handles.Pipeline' handle.
    --
    -- #VUID-VkDataGraphPipelineInfoARM-dataGraphPipeline-09803#
    -- @dataGraphPipeline@ /must/ have been created with
    -- 'createDataGraphPipelinesARM'
    --
    -- #VUID-VkDataGraphPipelineInfoARM-dataGraphPipeline-parameter#
    -- @dataGraphPipeline@ /must/ be a valid 'Vulkan.Core10.Handles.Pipeline'
    -- handle
    DataGraphPipelineInfoARM -> Pipeline
dataGraphPipeline :: Pipeline }
  deriving (Typeable, DataGraphPipelineInfoARM -> DataGraphPipelineInfoARM -> Bool
(DataGraphPipelineInfoARM -> DataGraphPipelineInfoARM -> Bool)
-> (DataGraphPipelineInfoARM -> DataGraphPipelineInfoARM -> Bool)
-> Eq DataGraphPipelineInfoARM
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: DataGraphPipelineInfoARM -> DataGraphPipelineInfoARM -> Bool
== :: DataGraphPipelineInfoARM -> DataGraphPipelineInfoARM -> Bool
$c/= :: DataGraphPipelineInfoARM -> DataGraphPipelineInfoARM -> Bool
/= :: DataGraphPipelineInfoARM -> DataGraphPipelineInfoARM -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DataGraphPipelineInfoARM)
#endif
deriving instance Show DataGraphPipelineInfoARM

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

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

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

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


-- | VkDataGraphPipelinePropertyQueryResultARM - Structure describing a data
-- graph pipeline property query or result
--
-- = Description
--
-- If @pData@ is @NULL@, then the size, in bytes, of the property data is
-- returned in @dataSize@. Otherwise, @dataSize@ must be the size of the
-- buffer, in bytes, pointed to by @pData@ and on return @dataSize@ is
-- overwritten with the number of bytes of data actually written to @pData@
-- including any trailing NUL character. If @dataSize@ is less than the
-- size, in bytes, of the property data, at most @dataSize@ bytes of data
-- will be written to @pData@, and 'Vulkan.Core10.Enums.Result.INCOMPLETE'
-- will be returned by 'getDataGraphPipelinePropertiesARM' instead of
-- 'Vulkan.Core10.Enums.Result.SUCCESS', to indicate that not all the
-- available property data was returned. If @isText@ is
-- 'Vulkan.Core10.FundamentalTypes.TRUE' and @pData@ is not @NULL@ and
-- @dataSize@ is not zero, the last byte written to @pData@ will be a NUL
-- character.
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkDataGraphPipelinePropertyQueryResultARM-sType-sType# @sType@
--     /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_PROPERTY_QUERY_RESULT_ARM'
--
-- -   #VUID-VkDataGraphPipelinePropertyQueryResultARM-pNext-pNext# @pNext@
--     /must/ be @NULL@
--
-- -   #VUID-VkDataGraphPipelinePropertyQueryResultARM-property-parameter#
--     @property@ /must/ be a valid 'DataGraphPipelinePropertyARM' value
--
-- -   #VUID-VkDataGraphPipelinePropertyQueryResultARM-pData-parameter# If
--     @dataSize@ is not @0@, and @pData@ is not @NULL@, @pData@ /must/ be
--     a valid pointer to an array of @dataSize@ bytes
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ARM_data_graph VK_ARM_data_graph>,
-- 'Vulkan.Core10.FundamentalTypes.Bool32', 'DataGraphPipelinePropertyARM',
-- 'Vulkan.Core10.Enums.StructureType.StructureType',
-- 'getDataGraphPipelinePropertiesARM'
data DataGraphPipelinePropertyQueryResultARM = DataGraphPipelinePropertyQueryResultARM
  { -- | @property@ is a 'DataGraphPipelinePropertyARM' specifying the property
    -- of the data graph pipeline being queried.
    DataGraphPipelinePropertyQueryResultARM
-> DataGraphPipelinePropertyARM
property :: DataGraphPipelinePropertyARM
  , -- | @isText@ specifies whether the returned data is text or opaque data. If
    -- @isText@ is 'Vulkan.Core10.FundamentalTypes.TRUE' then the data returned
    -- in @pData@ is text and guaranteed to be a null-terminated UTF-8 string.
    DataGraphPipelinePropertyQueryResultARM -> Bool
isText :: Bool
  , -- | @dataSize@ is an integer related to the size, in bytes, of the data, as
    -- described below.
    DataGraphPipelinePropertyQueryResultARM -> Word64
dataSize :: Word64
  , -- | @pData@ is either @NULL@ or a pointer to a block of memory into which
    -- the implementation will return the property data.
    DataGraphPipelinePropertyQueryResultARM -> Ptr ()
data' :: Ptr ()
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DataGraphPipelinePropertyQueryResultARM)
#endif
deriving instance Show DataGraphPipelinePropertyQueryResultARM

instance ToCStruct DataGraphPipelinePropertyQueryResultARM where
  withCStruct :: forall b.
DataGraphPipelinePropertyQueryResultARM
-> (Ptr DataGraphPipelinePropertyQueryResultARM -> IO b) -> IO b
withCStruct DataGraphPipelinePropertyQueryResultARM
x Ptr DataGraphPipelinePropertyQueryResultARM -> IO b
f = Int
-> (Ptr DataGraphPipelinePropertyQueryResultARM -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
40 ((Ptr DataGraphPipelinePropertyQueryResultARM -> IO b) -> IO b)
-> (Ptr DataGraphPipelinePropertyQueryResultARM -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr DataGraphPipelinePropertyQueryResultARM
p -> Ptr DataGraphPipelinePropertyQueryResultARM
-> DataGraphPipelinePropertyQueryResultARM -> IO b -> IO b
forall b.
Ptr DataGraphPipelinePropertyQueryResultARM
-> DataGraphPipelinePropertyQueryResultARM -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr DataGraphPipelinePropertyQueryResultARM
p DataGraphPipelinePropertyQueryResultARM
x (Ptr DataGraphPipelinePropertyQueryResultARM -> IO b
f Ptr DataGraphPipelinePropertyQueryResultARM
p)
  pokeCStruct :: forall b.
Ptr DataGraphPipelinePropertyQueryResultARM
-> DataGraphPipelinePropertyQueryResultARM -> IO b -> IO b
pokeCStruct Ptr DataGraphPipelinePropertyQueryResultARM
p DataGraphPipelinePropertyQueryResultARM{Bool
Word64
Ptr ()
DataGraphPipelinePropertyARM
property :: DataGraphPipelinePropertyQueryResultARM
-> DataGraphPipelinePropertyARM
isText :: DataGraphPipelinePropertyQueryResultARM -> Bool
dataSize :: DataGraphPipelinePropertyQueryResultARM -> Word64
data' :: DataGraphPipelinePropertyQueryResultARM -> Ptr ()
property :: DataGraphPipelinePropertyARM
isText :: Bool
dataSize :: Word64
data' :: Ptr ()
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DataGraphPipelinePropertyQueryResultARM
p Ptr DataGraphPipelinePropertyQueryResultARM
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_PROPERTY_QUERY_RESULT_ARM)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DataGraphPipelinePropertyQueryResultARM
p Ptr DataGraphPipelinePropertyQueryResultARM -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr DataGraphPipelinePropertyARM
-> DataGraphPipelinePropertyARM -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DataGraphPipelinePropertyQueryResultARM
p Ptr DataGraphPipelinePropertyQueryResultARM
-> Int -> Ptr DataGraphPipelinePropertyARM
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr DataGraphPipelinePropertyARM)) (DataGraphPipelinePropertyARM
property)
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DataGraphPipelinePropertyQueryResultARM
p Ptr DataGraphPipelinePropertyQueryResultARM -> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
isText))
    Ptr CSize -> CSize -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DataGraphPipelinePropertyQueryResultARM
p Ptr DataGraphPipelinePropertyQueryResultARM -> Int -> Ptr CSize
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr CSize)) (Word64 -> CSize
CSize (Word64
dataSize))
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DataGraphPipelinePropertyQueryResultARM
p Ptr DataGraphPipelinePropertyQueryResultARM -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr (Ptr ()))) (Ptr ()
data')
    IO b
f
  cStructSize :: Int
cStructSize = Int
40
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b.
Ptr DataGraphPipelinePropertyQueryResultARM -> IO b -> IO b
pokeZeroCStruct Ptr DataGraphPipelinePropertyQueryResultARM
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DataGraphPipelinePropertyQueryResultARM
p Ptr DataGraphPipelinePropertyQueryResultARM
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_PROPERTY_QUERY_RESULT_ARM)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DataGraphPipelinePropertyQueryResultARM
p Ptr DataGraphPipelinePropertyQueryResultARM -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr DataGraphPipelinePropertyARM
-> DataGraphPipelinePropertyARM -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DataGraphPipelinePropertyQueryResultARM
p Ptr DataGraphPipelinePropertyQueryResultARM
-> Int -> Ptr DataGraphPipelinePropertyARM
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr DataGraphPipelinePropertyARM)) (DataGraphPipelinePropertyARM
forall a. Zero a => a
zero)
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DataGraphPipelinePropertyQueryResultARM
p Ptr DataGraphPipelinePropertyQueryResultARM -> 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 DataGraphPipelinePropertyQueryResultARM where
  peekCStruct :: Ptr DataGraphPipelinePropertyQueryResultARM
-> IO DataGraphPipelinePropertyQueryResultARM
peekCStruct Ptr DataGraphPipelinePropertyQueryResultARM
p = do
    property <- forall a. Storable a => Ptr a -> IO a
peek @DataGraphPipelinePropertyARM ((Ptr DataGraphPipelinePropertyQueryResultARM
p Ptr DataGraphPipelinePropertyQueryResultARM
-> Int -> Ptr DataGraphPipelinePropertyARM
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr DataGraphPipelinePropertyARM))
    isText <- peek @Bool32 ((p `plusPtr` 20 :: Ptr Bool32))
    dataSize <- peek @CSize ((p `plusPtr` 24 :: Ptr CSize))
    pData <- peek @(Ptr ()) ((p `plusPtr` 32 :: Ptr (Ptr ())))
    pure $ DataGraphPipelinePropertyQueryResultARM
             property
             (bool32ToBool isText)
             (coerce @CSize @Word64 dataSize)
             pData

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

instance Zero DataGraphPipelinePropertyQueryResultARM where
  zero :: DataGraphPipelinePropertyQueryResultARM
zero = DataGraphPipelinePropertyARM
-> Bool
-> Word64
-> Ptr ()
-> DataGraphPipelinePropertyQueryResultARM
DataGraphPipelinePropertyQueryResultARM
           DataGraphPipelinePropertyARM
forall a. Zero a => a
zero
           Bool
forall a. Zero a => a
zero
           Word64
forall a. Zero a => a
zero
           Ptr ()
forall a. Zero a => a
zero


-- | VkDataGraphPipelineIdentifierCreateInfoARM - Structure specifying an
-- identifier for the newly created data graph pipeline
--
-- = Description
--
-- The @pIdentifier@ /can/ be retrieved from the device by calling
-- 'getDataGraphPipelinePropertiesARM' and searching the results for a
-- 'DataGraphPipelinePropertyQueryResultARM' structure with @property@ set
-- to 'DATA_GRAPH_PIPELINE_PROPERTY_IDENTIFIER_ARM'.
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ARM_data_graph VK_ARM_data_graph>,
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data DataGraphPipelineIdentifierCreateInfoARM = DataGraphPipelineIdentifierCreateInfoARM
  { -- | @pIdentifier@ is a pointer to @identifierSize@ bytes of data that
    -- describe the pipeline being created.
    --
    -- #VUID-VkDataGraphPipelineIdentifierCreateInfoARM-pIdentifier-parameter#
    -- @pIdentifier@ /must/ be a valid pointer to an array of @identifierSize@
    -- @uint8_t@ values
    DataGraphPipelineIdentifierCreateInfoARM -> Vector Word8
identifier :: Vector Word8 }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DataGraphPipelineIdentifierCreateInfoARM)
#endif
deriving instance Show DataGraphPipelineIdentifierCreateInfoARM

instance ToCStruct DataGraphPipelineIdentifierCreateInfoARM where
  withCStruct :: forall b.
DataGraphPipelineIdentifierCreateInfoARM
-> (Ptr DataGraphPipelineIdentifierCreateInfoARM -> IO b) -> IO b
withCStruct DataGraphPipelineIdentifierCreateInfoARM
x Ptr DataGraphPipelineIdentifierCreateInfoARM -> IO b
f = Int
-> (Ptr DataGraphPipelineIdentifierCreateInfoARM -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
32 ((Ptr DataGraphPipelineIdentifierCreateInfoARM -> IO b) -> IO b)
-> (Ptr DataGraphPipelineIdentifierCreateInfoARM -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr DataGraphPipelineIdentifierCreateInfoARM
p -> Ptr DataGraphPipelineIdentifierCreateInfoARM
-> DataGraphPipelineIdentifierCreateInfoARM -> IO b -> IO b
forall b.
Ptr DataGraphPipelineIdentifierCreateInfoARM
-> DataGraphPipelineIdentifierCreateInfoARM -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr DataGraphPipelineIdentifierCreateInfoARM
p DataGraphPipelineIdentifierCreateInfoARM
x (Ptr DataGraphPipelineIdentifierCreateInfoARM -> IO b
f Ptr DataGraphPipelineIdentifierCreateInfoARM
p)
  pokeCStruct :: forall b.
Ptr DataGraphPipelineIdentifierCreateInfoARM
-> DataGraphPipelineIdentifierCreateInfoARM -> IO b -> IO b
pokeCStruct Ptr DataGraphPipelineIdentifierCreateInfoARM
p DataGraphPipelineIdentifierCreateInfoARM{Vector Word8
identifier :: DataGraphPipelineIdentifierCreateInfoARM -> Vector Word8
identifier :: Vector Word8
..} 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 DataGraphPipelineIdentifierCreateInfoARM
p Ptr DataGraphPipelineIdentifierCreateInfoARM
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_IDENTIFIER_CREATE_INFO_ARM)
    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 DataGraphPipelineIdentifierCreateInfoARM
p Ptr DataGraphPipelineIdentifierCreateInfoARM -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DataGraphPipelineIdentifierCreateInfoARM
p Ptr DataGraphPipelineIdentifierCreateInfoARM -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32)) ((Int -> Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Vector Word8 -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector Word8 -> Int) -> Vector Word8 -> Int
forall a b. (a -> b) -> a -> b
$ (Vector Word8
identifier)) :: Word32))
    pPIdentifier' <- ((Ptr Word8 -> IO b) -> IO b) -> ContT b IO (Ptr Word8)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr Word8 -> IO b) -> IO b) -> ContT b IO (Ptr Word8))
-> ((Ptr Word8 -> IO b) -> IO b) -> ContT b IO (Ptr Word8)
forall a b. (a -> b) -> a -> b
$ forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @Word8 (Vector Word8 -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector Word8
identifier))
    lift $ Data.Vector.imapM_ (\Int
i Word8
e -> Ptr Word8 -> Word8 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr Word8
pPIdentifier' Ptr Word8 -> Int -> Ptr Word8
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
1 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr Word8) (Word8
e)) (identifier)
    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Word8))) (pPIdentifier')
    lift $ f
  cStructSize :: Int
cStructSize = Int
32
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b.
Ptr DataGraphPipelineIdentifierCreateInfoARM -> IO b -> IO b
pokeZeroCStruct Ptr DataGraphPipelineIdentifierCreateInfoARM
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DataGraphPipelineIdentifierCreateInfoARM
p Ptr DataGraphPipelineIdentifierCreateInfoARM
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_IDENTIFIER_CREATE_INFO_ARM)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DataGraphPipelineIdentifierCreateInfoARM
p Ptr DataGraphPipelineIdentifierCreateInfoARM -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    IO b
f

instance FromCStruct DataGraphPipelineIdentifierCreateInfoARM where
  peekCStruct :: Ptr DataGraphPipelineIdentifierCreateInfoARM
-> IO DataGraphPipelineIdentifierCreateInfoARM
peekCStruct Ptr DataGraphPipelineIdentifierCreateInfoARM
p = do
    identifierSize <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr DataGraphPipelineIdentifierCreateInfoARM
p Ptr DataGraphPipelineIdentifierCreateInfoARM -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32))
    pIdentifier <- peek @(Ptr Word8) ((p `plusPtr` 24 :: Ptr (Ptr Word8)))
    pIdentifier' <- generateM (fromIntegral identifierSize) (\Int
i -> forall a. Storable a => Ptr a -> IO a
peek @Word8 ((Ptr Word8
pIdentifier Ptr Word8 -> Int -> Ptr Word8
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
1 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr Word8)))
    pure $ DataGraphPipelineIdentifierCreateInfoARM
             pIdentifier'

instance Zero DataGraphPipelineIdentifierCreateInfoARM where
  zero :: DataGraphPipelineIdentifierCreateInfoARM
zero = Vector Word8 -> DataGraphPipelineIdentifierCreateInfoARM
DataGraphPipelineIdentifierCreateInfoARM
           Vector Word8
forall a. Monoid a => a
mempty


-- | VkDataGraphPipelineDispatchInfoARM - Structure specifying parameters of
-- a data graph pipeline dispatch
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ARM_data_graph VK_ARM_data_graph>,
-- 'DataGraphPipelineDispatchFlagsARM',
-- 'Vulkan.Core10.Enums.StructureType.StructureType',
-- 'cmdDispatchDataGraphARM'
data DataGraphPipelineDispatchInfoARM = DataGraphPipelineDispatchInfoARM
  { -- | @flags@ is a bitmask of 'DataGraphPipelineDispatchFlagBitsARM'
    -- describing additional parameters of the dispatch.
    --
    -- #VUID-VkDataGraphPipelineDispatchInfoARM-flags-zerobitmask# @flags@
    -- /must/ be @0@
    DataGraphPipelineDispatchInfoARM
-> DataGraphPipelineDispatchFlagsARM
flags :: DataGraphPipelineDispatchFlagsARM }
  deriving (Typeable, DataGraphPipelineDispatchInfoARM
-> DataGraphPipelineDispatchInfoARM -> Bool
(DataGraphPipelineDispatchInfoARM
 -> DataGraphPipelineDispatchInfoARM -> Bool)
-> (DataGraphPipelineDispatchInfoARM
    -> DataGraphPipelineDispatchInfoARM -> Bool)
-> Eq DataGraphPipelineDispatchInfoARM
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: DataGraphPipelineDispatchInfoARM
-> DataGraphPipelineDispatchInfoARM -> Bool
== :: DataGraphPipelineDispatchInfoARM
-> DataGraphPipelineDispatchInfoARM -> Bool
$c/= :: DataGraphPipelineDispatchInfoARM
-> DataGraphPipelineDispatchInfoARM -> Bool
/= :: DataGraphPipelineDispatchInfoARM
-> DataGraphPipelineDispatchInfoARM -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DataGraphPipelineDispatchInfoARM)
#endif
deriving instance Show DataGraphPipelineDispatchInfoARM

instance ToCStruct DataGraphPipelineDispatchInfoARM where
  withCStruct :: forall b.
DataGraphPipelineDispatchInfoARM
-> (Ptr DataGraphPipelineDispatchInfoARM -> IO b) -> IO b
withCStruct DataGraphPipelineDispatchInfoARM
x Ptr DataGraphPipelineDispatchInfoARM -> IO b
f = Int -> (Ptr DataGraphPipelineDispatchInfoARM -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
24 ((Ptr DataGraphPipelineDispatchInfoARM -> IO b) -> IO b)
-> (Ptr DataGraphPipelineDispatchInfoARM -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr DataGraphPipelineDispatchInfoARM
p -> Ptr DataGraphPipelineDispatchInfoARM
-> DataGraphPipelineDispatchInfoARM -> IO b -> IO b
forall b.
Ptr DataGraphPipelineDispatchInfoARM
-> DataGraphPipelineDispatchInfoARM -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr DataGraphPipelineDispatchInfoARM
p DataGraphPipelineDispatchInfoARM
x (Ptr DataGraphPipelineDispatchInfoARM -> IO b
f Ptr DataGraphPipelineDispatchInfoARM
p)
  pokeCStruct :: forall b.
Ptr DataGraphPipelineDispatchInfoARM
-> DataGraphPipelineDispatchInfoARM -> IO b -> IO b
pokeCStruct Ptr DataGraphPipelineDispatchInfoARM
p DataGraphPipelineDispatchInfoARM{DataGraphPipelineDispatchFlagsARM
flags :: DataGraphPipelineDispatchInfoARM
-> DataGraphPipelineDispatchFlagsARM
flags :: DataGraphPipelineDispatchFlagsARM
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DataGraphPipelineDispatchInfoARM
p Ptr DataGraphPipelineDispatchInfoARM -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_DISPATCH_INFO_ARM)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DataGraphPipelineDispatchInfoARM
p Ptr DataGraphPipelineDispatchInfoARM -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr DataGraphPipelineDispatchFlagsARM
-> DataGraphPipelineDispatchFlagsARM -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DataGraphPipelineDispatchInfoARM
p Ptr DataGraphPipelineDispatchInfoARM
-> Int -> Ptr DataGraphPipelineDispatchFlagsARM
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr DataGraphPipelineDispatchFlagsARM)) (DataGraphPipelineDispatchFlagsARM
flags)
    IO b
f
  cStructSize :: Int
cStructSize = Int
24
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b. Ptr DataGraphPipelineDispatchInfoARM -> IO b -> IO b
pokeZeroCStruct Ptr DataGraphPipelineDispatchInfoARM
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DataGraphPipelineDispatchInfoARM
p Ptr DataGraphPipelineDispatchInfoARM -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_DISPATCH_INFO_ARM)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DataGraphPipelineDispatchInfoARM
p Ptr DataGraphPipelineDispatchInfoARM -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    IO b
f

instance FromCStruct DataGraphPipelineDispatchInfoARM where
  peekCStruct :: Ptr DataGraphPipelineDispatchInfoARM
-> IO DataGraphPipelineDispatchInfoARM
peekCStruct Ptr DataGraphPipelineDispatchInfoARM
p = do
    flags <- forall a. Storable a => Ptr a -> IO a
peek @DataGraphPipelineDispatchFlagsARM ((Ptr DataGraphPipelineDispatchInfoARM
p Ptr DataGraphPipelineDispatchInfoARM
-> Int -> Ptr DataGraphPipelineDispatchFlagsARM
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr DataGraphPipelineDispatchFlagsARM))
    pure $ DataGraphPipelineDispatchInfoARM
             flags

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

instance Zero DataGraphPipelineDispatchInfoARM where
  zero :: DataGraphPipelineDispatchInfoARM
zero = DataGraphPipelineDispatchFlagsARM
-> DataGraphPipelineDispatchInfoARM
DataGraphPipelineDispatchInfoARM
           DataGraphPipelineDispatchFlagsARM
forall a. Zero a => a
zero


-- | VkPhysicalDeviceDataGraphProcessingEngineARM - Structure describing a
-- data graph processing engine supported by a physical device
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ARM_data_graph VK_ARM_data_graph>,
-- 'Vulkan.Core10.FundamentalTypes.Bool32',
-- 'DataGraphProcessingEngineCreateInfoARM',
-- 'PhysicalDeviceDataGraphProcessingEngineTypeARM',
-- 'QueueFamilyDataGraphPropertiesARM'
data PhysicalDeviceDataGraphProcessingEngineARM = PhysicalDeviceDataGraphProcessingEngineARM
  { -- | @type@ is a 'PhysicalDeviceDataGraphProcessingEngineTypeARM' that
    -- specifies the type of the processing engine.
    PhysicalDeviceDataGraphProcessingEngineARM
-> PhysicalDeviceDataGraphProcessingEngineTypeARM
type' :: PhysicalDeviceDataGraphProcessingEngineTypeARM
  , -- | @isForeign@ specifies whether the processing engine is foreign.
    PhysicalDeviceDataGraphProcessingEngineARM -> Bool
isForeign :: Bool
  }
  deriving (Typeable, PhysicalDeviceDataGraphProcessingEngineARM
-> PhysicalDeviceDataGraphProcessingEngineARM -> Bool
(PhysicalDeviceDataGraphProcessingEngineARM
 -> PhysicalDeviceDataGraphProcessingEngineARM -> Bool)
-> (PhysicalDeviceDataGraphProcessingEngineARM
    -> PhysicalDeviceDataGraphProcessingEngineARM -> Bool)
-> Eq PhysicalDeviceDataGraphProcessingEngineARM
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: PhysicalDeviceDataGraphProcessingEngineARM
-> PhysicalDeviceDataGraphProcessingEngineARM -> Bool
== :: PhysicalDeviceDataGraphProcessingEngineARM
-> PhysicalDeviceDataGraphProcessingEngineARM -> Bool
$c/= :: PhysicalDeviceDataGraphProcessingEngineARM
-> PhysicalDeviceDataGraphProcessingEngineARM -> Bool
/= :: PhysicalDeviceDataGraphProcessingEngineARM
-> PhysicalDeviceDataGraphProcessingEngineARM -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (PhysicalDeviceDataGraphProcessingEngineARM)
#endif
deriving instance Show PhysicalDeviceDataGraphProcessingEngineARM

instance ToCStruct PhysicalDeviceDataGraphProcessingEngineARM where
  withCStruct :: forall b.
PhysicalDeviceDataGraphProcessingEngineARM
-> (Ptr PhysicalDeviceDataGraphProcessingEngineARM -> IO b) -> IO b
withCStruct PhysicalDeviceDataGraphProcessingEngineARM
x Ptr PhysicalDeviceDataGraphProcessingEngineARM -> IO b
f = Int
-> (Ptr PhysicalDeviceDataGraphProcessingEngineARM -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
8 ((Ptr PhysicalDeviceDataGraphProcessingEngineARM -> IO b) -> IO b)
-> (Ptr PhysicalDeviceDataGraphProcessingEngineARM -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr PhysicalDeviceDataGraphProcessingEngineARM
p -> Ptr PhysicalDeviceDataGraphProcessingEngineARM
-> PhysicalDeviceDataGraphProcessingEngineARM -> IO b -> IO b
forall b.
Ptr PhysicalDeviceDataGraphProcessingEngineARM
-> PhysicalDeviceDataGraphProcessingEngineARM -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr PhysicalDeviceDataGraphProcessingEngineARM
p PhysicalDeviceDataGraphProcessingEngineARM
x (Ptr PhysicalDeviceDataGraphProcessingEngineARM -> IO b
f Ptr PhysicalDeviceDataGraphProcessingEngineARM
p)
  pokeCStruct :: forall b.
Ptr PhysicalDeviceDataGraphProcessingEngineARM
-> PhysicalDeviceDataGraphProcessingEngineARM -> IO b -> IO b
pokeCStruct Ptr PhysicalDeviceDataGraphProcessingEngineARM
p PhysicalDeviceDataGraphProcessingEngineARM{Bool
PhysicalDeviceDataGraphProcessingEngineTypeARM
type' :: PhysicalDeviceDataGraphProcessingEngineARM
-> PhysicalDeviceDataGraphProcessingEngineTypeARM
isForeign :: PhysicalDeviceDataGraphProcessingEngineARM -> Bool
type' :: PhysicalDeviceDataGraphProcessingEngineTypeARM
isForeign :: Bool
..} IO b
f = do
    Ptr PhysicalDeviceDataGraphProcessingEngineTypeARM
-> PhysicalDeviceDataGraphProcessingEngineTypeARM -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDataGraphProcessingEngineARM
p Ptr PhysicalDeviceDataGraphProcessingEngineARM
-> Int -> Ptr PhysicalDeviceDataGraphProcessingEngineTypeARM
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr PhysicalDeviceDataGraphProcessingEngineTypeARM)) (PhysicalDeviceDataGraphProcessingEngineTypeARM
type')
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDataGraphProcessingEngineARM
p Ptr PhysicalDeviceDataGraphProcessingEngineARM -> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
isForeign))
    IO b
f
  cStructSize :: Int
cStructSize = Int
8
  cStructAlignment :: Int
cStructAlignment = Int
4
  pokeZeroCStruct :: forall b.
Ptr PhysicalDeviceDataGraphProcessingEngineARM -> IO b -> IO b
pokeZeroCStruct Ptr PhysicalDeviceDataGraphProcessingEngineARM
p IO b
f = do
    Ptr PhysicalDeviceDataGraphProcessingEngineTypeARM
-> PhysicalDeviceDataGraphProcessingEngineTypeARM -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDataGraphProcessingEngineARM
p Ptr PhysicalDeviceDataGraphProcessingEngineARM
-> Int -> Ptr PhysicalDeviceDataGraphProcessingEngineTypeARM
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr PhysicalDeviceDataGraphProcessingEngineTypeARM)) (PhysicalDeviceDataGraphProcessingEngineTypeARM
forall a. Zero a => a
zero)
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDataGraphProcessingEngineARM
p Ptr PhysicalDeviceDataGraphProcessingEngineARM -> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
forall a. Zero a => a
zero))
    IO b
f

instance FromCStruct PhysicalDeviceDataGraphProcessingEngineARM where
  peekCStruct :: Ptr PhysicalDeviceDataGraphProcessingEngineARM
-> IO PhysicalDeviceDataGraphProcessingEngineARM
peekCStruct Ptr PhysicalDeviceDataGraphProcessingEngineARM
p = do
    type' <- forall a. Storable a => Ptr a -> IO a
peek @PhysicalDeviceDataGraphProcessingEngineTypeARM ((Ptr PhysicalDeviceDataGraphProcessingEngineARM
p Ptr PhysicalDeviceDataGraphProcessingEngineARM
-> Int -> Ptr PhysicalDeviceDataGraphProcessingEngineTypeARM
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr PhysicalDeviceDataGraphProcessingEngineTypeARM))
    isForeign <- peek @Bool32 ((p `plusPtr` 4 :: Ptr Bool32))
    pure $ PhysicalDeviceDataGraphProcessingEngineARM
             type' (bool32ToBool isForeign)

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

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


-- | VkPhysicalDeviceDataGraphOperationSupportARM - Structure describing an
-- operation or set of operations supported by a data graph processing
-- engine
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ARM_data_graph VK_ARM_data_graph>,
-- 'Vulkan.Extensions.VK_QCOM_data_graph_model.DataGraphPipelineBuiltinModelCreateInfoQCOM',
-- 'PhysicalDeviceDataGraphOperationTypeARM',
-- 'QueueFamilyDataGraphPropertiesARM'
data PhysicalDeviceDataGraphOperationSupportARM = PhysicalDeviceDataGraphOperationSupportARM
  { -- | @operationType@ is a 'PhysicalDeviceDataGraphOperationTypeARM' enum
    -- specifying the type of the operation whose support is being described.
    PhysicalDeviceDataGraphOperationSupportARM
-> PhysicalDeviceDataGraphOperationTypeARM
operationType :: PhysicalDeviceDataGraphOperationTypeARM
  , -- | @name@ is a pointer to a null-terminated UTF-8 string specifying the
    -- name of the operation whose support is being described.
    PhysicalDeviceDataGraphOperationSupportARM -> ByteString
name :: ByteString
  , -- | @version@ is an integer specifying the version of the operation whose
    -- support is being described.
    PhysicalDeviceDataGraphOperationSupportARM -> Word32
version :: Word32
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (PhysicalDeviceDataGraphOperationSupportARM)
#endif
deriving instance Show PhysicalDeviceDataGraphOperationSupportARM

instance ToCStruct PhysicalDeviceDataGraphOperationSupportARM where
  withCStruct :: forall b.
PhysicalDeviceDataGraphOperationSupportARM
-> (Ptr PhysicalDeviceDataGraphOperationSupportARM -> IO b) -> IO b
withCStruct PhysicalDeviceDataGraphOperationSupportARM
x Ptr PhysicalDeviceDataGraphOperationSupportARM -> IO b
f = Int
-> (Ptr PhysicalDeviceDataGraphOperationSupportARM -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
136 ((Ptr PhysicalDeviceDataGraphOperationSupportARM -> IO b) -> IO b)
-> (Ptr PhysicalDeviceDataGraphOperationSupportARM -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr PhysicalDeviceDataGraphOperationSupportARM
p -> Ptr PhysicalDeviceDataGraphOperationSupportARM
-> PhysicalDeviceDataGraphOperationSupportARM -> IO b -> IO b
forall b.
Ptr PhysicalDeviceDataGraphOperationSupportARM
-> PhysicalDeviceDataGraphOperationSupportARM -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr PhysicalDeviceDataGraphOperationSupportARM
p PhysicalDeviceDataGraphOperationSupportARM
x (Ptr PhysicalDeviceDataGraphOperationSupportARM -> IO b
f Ptr PhysicalDeviceDataGraphOperationSupportARM
p)
  pokeCStruct :: forall b.
Ptr PhysicalDeviceDataGraphOperationSupportARM
-> PhysicalDeviceDataGraphOperationSupportARM -> IO b -> IO b
pokeCStruct Ptr PhysicalDeviceDataGraphOperationSupportARM
p PhysicalDeviceDataGraphOperationSupportARM{Word32
ByteString
PhysicalDeviceDataGraphOperationTypeARM
operationType :: PhysicalDeviceDataGraphOperationSupportARM
-> PhysicalDeviceDataGraphOperationTypeARM
name :: PhysicalDeviceDataGraphOperationSupportARM -> ByteString
version :: PhysicalDeviceDataGraphOperationSupportARM -> Word32
operationType :: PhysicalDeviceDataGraphOperationTypeARM
name :: ByteString
version :: Word32
..} IO b
f = do
    Ptr PhysicalDeviceDataGraphOperationTypeARM
-> PhysicalDeviceDataGraphOperationTypeARM -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDataGraphOperationSupportARM
p Ptr PhysicalDeviceDataGraphOperationSupportARM
-> Int -> Ptr PhysicalDeviceDataGraphOperationTypeARM
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr PhysicalDeviceDataGraphOperationTypeARM)) (PhysicalDeviceDataGraphOperationTypeARM
operationType)
    Ptr
  (FixedArray
     MAX_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_SET_NAME_SIZE_ARM CChar)
-> ByteString -> IO ()
forall (n :: Nat).
KnownNat n =>
Ptr (FixedArray n CChar) -> ByteString -> IO ()
pokeFixedLengthNullTerminatedByteString ((Ptr PhysicalDeviceDataGraphOperationSupportARM
p Ptr PhysicalDeviceDataGraphOperationSupportARM
-> Int
-> Ptr
     (FixedArray
        MAX_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_SET_NAME_SIZE_ARM CChar)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4 :: Ptr (FixedArray MAX_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_SET_NAME_SIZE_ARM CChar))) (ByteString
name)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDataGraphOperationSupportARM
p Ptr PhysicalDeviceDataGraphOperationSupportARM -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
132 :: Ptr Word32)) (Word32
version)
    IO b
f
  cStructSize :: Int
cStructSize = Int
136
  cStructAlignment :: Int
cStructAlignment = Int
4
  pokeZeroCStruct :: forall b.
Ptr PhysicalDeviceDataGraphOperationSupportARM -> IO b -> IO b
pokeZeroCStruct Ptr PhysicalDeviceDataGraphOperationSupportARM
p IO b
f = do
    Ptr PhysicalDeviceDataGraphOperationTypeARM
-> PhysicalDeviceDataGraphOperationTypeARM -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDataGraphOperationSupportARM
p Ptr PhysicalDeviceDataGraphOperationSupportARM
-> Int -> Ptr PhysicalDeviceDataGraphOperationTypeARM
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr PhysicalDeviceDataGraphOperationTypeARM)) (PhysicalDeviceDataGraphOperationTypeARM
forall a. Zero a => a
zero)
    Ptr
  (FixedArray
     MAX_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_SET_NAME_SIZE_ARM CChar)
-> ByteString -> IO ()
forall (n :: Nat).
KnownNat n =>
Ptr (FixedArray n CChar) -> ByteString -> IO ()
pokeFixedLengthNullTerminatedByteString ((Ptr PhysicalDeviceDataGraphOperationSupportARM
p Ptr PhysicalDeviceDataGraphOperationSupportARM
-> Int
-> Ptr
     (FixedArray
        MAX_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_SET_NAME_SIZE_ARM CChar)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4 :: Ptr (FixedArray MAX_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_SET_NAME_SIZE_ARM CChar))) (ByteString
forall a. Monoid a => a
mempty)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceDataGraphOperationSupportARM
p Ptr PhysicalDeviceDataGraphOperationSupportARM -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
132 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct PhysicalDeviceDataGraphOperationSupportARM where
  peekCStruct :: Ptr PhysicalDeviceDataGraphOperationSupportARM
-> IO PhysicalDeviceDataGraphOperationSupportARM
peekCStruct Ptr PhysicalDeviceDataGraphOperationSupportARM
p = do
    operationType <- forall a. Storable a => Ptr a -> IO a
peek @PhysicalDeviceDataGraphOperationTypeARM ((Ptr PhysicalDeviceDataGraphOperationSupportARM
p Ptr PhysicalDeviceDataGraphOperationSupportARM
-> Int -> Ptr PhysicalDeviceDataGraphOperationTypeARM
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr PhysicalDeviceDataGraphOperationTypeARM))
    name <- packCString (lowerArrayPtr ((p `plusPtr` 4 :: Ptr (FixedArray MAX_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_SET_NAME_SIZE_ARM CChar))))
    version <- peek @Word32 ((p `plusPtr` 132 :: Ptr Word32))
    pure $ PhysicalDeviceDataGraphOperationSupportARM
             operationType name version

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

instance Zero PhysicalDeviceDataGraphOperationSupportARM where
  zero :: PhysicalDeviceDataGraphOperationSupportARM
zero = PhysicalDeviceDataGraphOperationTypeARM
-> ByteString
-> Word32
-> PhysicalDeviceDataGraphOperationSupportARM
PhysicalDeviceDataGraphOperationSupportARM
           PhysicalDeviceDataGraphOperationTypeARM
forall a. Zero a => a
zero
           ByteString
forall a. Monoid a => a
mempty
           Word32
forall a. Zero a => a
zero


-- | VkQueueFamilyDataGraphPropertiesARM - Structure describing a data graph
-- processing engine and operation it supports
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ARM_data_graph VK_ARM_data_graph>,
-- 'PhysicalDeviceDataGraphOperationSupportARM',
-- 'PhysicalDeviceDataGraphProcessingEngineARM',
-- 'Vulkan.Core10.Enums.StructureType.StructureType',
-- 'getPhysicalDeviceQueueFamilyDataGraphPropertiesARM'
data QueueFamilyDataGraphPropertiesARM = QueueFamilyDataGraphPropertiesARM
  { -- | @engine@ is a 'PhysicalDeviceDataGraphProcessingEngineARM' structure
    -- describing a data graph processing engine.
    QueueFamilyDataGraphPropertiesARM
-> PhysicalDeviceDataGraphProcessingEngineARM
engine :: PhysicalDeviceDataGraphProcessingEngineARM
  , -- | @operation@ is a 'PhysicalDeviceDataGraphOperationSupportARM' structure
    -- describing one or more operations supported by a data graph processing
    -- engine.
    QueueFamilyDataGraphPropertiesARM
-> PhysicalDeviceDataGraphOperationSupportARM
operation :: PhysicalDeviceDataGraphOperationSupportARM
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (QueueFamilyDataGraphPropertiesARM)
#endif
deriving instance Show QueueFamilyDataGraphPropertiesARM

instance ToCStruct QueueFamilyDataGraphPropertiesARM where
  withCStruct :: forall b.
QueueFamilyDataGraphPropertiesARM
-> (Ptr QueueFamilyDataGraphPropertiesARM -> IO b) -> IO b
withCStruct QueueFamilyDataGraphPropertiesARM
x Ptr QueueFamilyDataGraphPropertiesARM -> IO b
f = Int -> (Ptr QueueFamilyDataGraphPropertiesARM -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
160 ((Ptr QueueFamilyDataGraphPropertiesARM -> IO b) -> IO b)
-> (Ptr QueueFamilyDataGraphPropertiesARM -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr QueueFamilyDataGraphPropertiesARM
p -> Ptr QueueFamilyDataGraphPropertiesARM
-> QueueFamilyDataGraphPropertiesARM -> IO b -> IO b
forall b.
Ptr QueueFamilyDataGraphPropertiesARM
-> QueueFamilyDataGraphPropertiesARM -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr QueueFamilyDataGraphPropertiesARM
p QueueFamilyDataGraphPropertiesARM
x (Ptr QueueFamilyDataGraphPropertiesARM -> IO b
f Ptr QueueFamilyDataGraphPropertiesARM
p)
  pokeCStruct :: forall b.
Ptr QueueFamilyDataGraphPropertiesARM
-> QueueFamilyDataGraphPropertiesARM -> IO b -> IO b
pokeCStruct Ptr QueueFamilyDataGraphPropertiesARM
p QueueFamilyDataGraphPropertiesARM{PhysicalDeviceDataGraphProcessingEngineARM
PhysicalDeviceDataGraphOperationSupportARM
engine :: QueueFamilyDataGraphPropertiesARM
-> PhysicalDeviceDataGraphProcessingEngineARM
operation :: QueueFamilyDataGraphPropertiesARM
-> PhysicalDeviceDataGraphOperationSupportARM
engine :: PhysicalDeviceDataGraphProcessingEngineARM
operation :: PhysicalDeviceDataGraphOperationSupportARM
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr QueueFamilyDataGraphPropertiesARM
p Ptr QueueFamilyDataGraphPropertiesARM -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_QUEUE_FAMILY_DATA_GRAPH_PROPERTIES_ARM)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr QueueFamilyDataGraphPropertiesARM
p Ptr QueueFamilyDataGraphPropertiesARM -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr PhysicalDeviceDataGraphProcessingEngineARM
-> PhysicalDeviceDataGraphProcessingEngineARM -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr QueueFamilyDataGraphPropertiesARM
p Ptr QueueFamilyDataGraphPropertiesARM
-> Int -> Ptr PhysicalDeviceDataGraphProcessingEngineARM
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr PhysicalDeviceDataGraphProcessingEngineARM)) (PhysicalDeviceDataGraphProcessingEngineARM
engine)
    Ptr PhysicalDeviceDataGraphOperationSupportARM
-> PhysicalDeviceDataGraphOperationSupportARM -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr QueueFamilyDataGraphPropertiesARM
p Ptr QueueFamilyDataGraphPropertiesARM
-> Int -> Ptr PhysicalDeviceDataGraphOperationSupportARM
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr PhysicalDeviceDataGraphOperationSupportARM)) (PhysicalDeviceDataGraphOperationSupportARM
operation)
    IO b
f
  cStructSize :: Int
cStructSize = Int
160
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b. Ptr QueueFamilyDataGraphPropertiesARM -> IO b -> IO b
pokeZeroCStruct Ptr QueueFamilyDataGraphPropertiesARM
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr QueueFamilyDataGraphPropertiesARM
p Ptr QueueFamilyDataGraphPropertiesARM -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_QUEUE_FAMILY_DATA_GRAPH_PROPERTIES_ARM)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr QueueFamilyDataGraphPropertiesARM
p Ptr QueueFamilyDataGraphPropertiesARM -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr PhysicalDeviceDataGraphProcessingEngineARM
-> PhysicalDeviceDataGraphProcessingEngineARM -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr QueueFamilyDataGraphPropertiesARM
p Ptr QueueFamilyDataGraphPropertiesARM
-> Int -> Ptr PhysicalDeviceDataGraphProcessingEngineARM
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr PhysicalDeviceDataGraphProcessingEngineARM)) (PhysicalDeviceDataGraphProcessingEngineARM
forall a. Zero a => a
zero)
    Ptr PhysicalDeviceDataGraphOperationSupportARM
-> PhysicalDeviceDataGraphOperationSupportARM -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr QueueFamilyDataGraphPropertiesARM
p Ptr QueueFamilyDataGraphPropertiesARM
-> Int -> Ptr PhysicalDeviceDataGraphOperationSupportARM
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr PhysicalDeviceDataGraphOperationSupportARM)) (PhysicalDeviceDataGraphOperationSupportARM
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct QueueFamilyDataGraphPropertiesARM where
  peekCStruct :: Ptr QueueFamilyDataGraphPropertiesARM
-> IO QueueFamilyDataGraphPropertiesARM
peekCStruct Ptr QueueFamilyDataGraphPropertiesARM
p = do
    engine <- forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @PhysicalDeviceDataGraphProcessingEngineARM ((Ptr QueueFamilyDataGraphPropertiesARM
p Ptr QueueFamilyDataGraphPropertiesARM
-> Int -> Ptr PhysicalDeviceDataGraphProcessingEngineARM
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr PhysicalDeviceDataGraphProcessingEngineARM))
    operation <- peekCStruct @PhysicalDeviceDataGraphOperationSupportARM ((p `plusPtr` 24 :: Ptr PhysicalDeviceDataGraphOperationSupportARM))
    pure $ QueueFamilyDataGraphPropertiesARM
             engine operation

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

instance Zero QueueFamilyDataGraphPropertiesARM where
  zero :: QueueFamilyDataGraphPropertiesARM
zero = PhysicalDeviceDataGraphProcessingEngineARM
-> PhysicalDeviceDataGraphOperationSupportARM
-> QueueFamilyDataGraphPropertiesARM
QueueFamilyDataGraphPropertiesARM
           PhysicalDeviceDataGraphProcessingEngineARM
forall a. Zero a => a
zero
           PhysicalDeviceDataGraphOperationSupportARM
forall a. Zero a => a
zero


-- | VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM - Structure
-- specifying a data graph processing engine type and queue family to query
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ARM_data_graph VK_ARM_data_graph>,
-- 'PhysicalDeviceDataGraphProcessingEngineTypeARM',
-- 'Vulkan.Core10.Enums.StructureType.StructureType',
-- 'getPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM'
data PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM = PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
  { -- | @queueFamilyIndex@ specifies the queue family being queried.
    PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM -> Word32
queueFamilyIndex :: Word32
  , -- | @engineType@ is a 'PhysicalDeviceDataGraphProcessingEngineTypeARM'
    -- specifying the engine type whose properties are being queried.
    --
    -- #VUID-VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM-engineType-parameter#
    -- @engineType@ /must/ be a valid
    -- 'PhysicalDeviceDataGraphProcessingEngineTypeARM' value
    PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
-> PhysicalDeviceDataGraphProcessingEngineTypeARM
engineType :: PhysicalDeviceDataGraphProcessingEngineTypeARM
  }
  deriving (Typeable, PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
-> PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
-> Bool
(PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
 -> PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
 -> Bool)
-> (PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
    -> PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
    -> Bool)
-> Eq PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
-> PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
-> Bool
== :: PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
-> PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
-> Bool
$c/= :: PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
-> PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
-> Bool
/= :: PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
-> PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
-> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM)
#endif
deriving instance Show PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM

instance ToCStruct PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM where
  withCStruct :: forall b.
PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
-> (Ptr PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
    -> IO b)
-> IO b
withCStruct PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
x Ptr PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
-> IO b
f = Int
-> (Ptr PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
    -> IO b)
-> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
24 ((Ptr PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
  -> IO b)
 -> IO b)
-> (Ptr PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
    -> IO b)
-> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
p -> Ptr PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
-> PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
-> IO b
-> IO b
forall b.
Ptr PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
-> PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
-> IO b
-> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
p PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
x (Ptr PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
-> IO b
f Ptr PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
p)
  pokeCStruct :: forall b.
Ptr PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
-> PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
-> IO b
-> IO b
pokeCStruct Ptr PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
p PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM{Word32
PhysicalDeviceDataGraphProcessingEngineTypeARM
queueFamilyIndex :: PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM -> Word32
engineType :: PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
-> PhysicalDeviceDataGraphProcessingEngineTypeARM
queueFamilyIndex :: Word32
engineType :: PhysicalDeviceDataGraphProcessingEngineTypeARM
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
p Ptr PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PHYSICAL_DEVICE_QUEUE_FAMILY_DATA_GRAPH_PROCESSING_ENGINE_INFO_ARM)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
p Ptr PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
p Ptr PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
-> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32)) (Word32
queueFamilyIndex)
    Ptr PhysicalDeviceDataGraphProcessingEngineTypeARM
-> PhysicalDeviceDataGraphProcessingEngineTypeARM -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
p Ptr PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
-> Int -> Ptr PhysicalDeviceDataGraphProcessingEngineTypeARM
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr PhysicalDeviceDataGraphProcessingEngineTypeARM)) (PhysicalDeviceDataGraphProcessingEngineTypeARM
engineType)
    IO b
f
  cStructSize :: Int
cStructSize = Int
24
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b.
Ptr PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
-> IO b -> IO b
pokeZeroCStruct Ptr PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
p Ptr PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PHYSICAL_DEVICE_QUEUE_FAMILY_DATA_GRAPH_PROCESSING_ENGINE_INFO_ARM)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
p Ptr PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
p Ptr PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
-> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    Ptr PhysicalDeviceDataGraphProcessingEngineTypeARM
-> PhysicalDeviceDataGraphProcessingEngineTypeARM -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
p Ptr PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
-> Int -> Ptr PhysicalDeviceDataGraphProcessingEngineTypeARM
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr PhysicalDeviceDataGraphProcessingEngineTypeARM)) (PhysicalDeviceDataGraphProcessingEngineTypeARM
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM where
  peekCStruct :: Ptr PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
-> IO PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
peekCStruct Ptr PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
p = do
    queueFamilyIndex <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
p Ptr PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
-> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32))
    engineType <- peek @PhysicalDeviceDataGraphProcessingEngineTypeARM ((p `plusPtr` 20 :: Ptr PhysicalDeviceDataGraphProcessingEngineTypeARM))
    pure $ PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
             queueFamilyIndex engineType

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

instance Zero PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM where
  zero :: PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
zero = Word32
-> PhysicalDeviceDataGraphProcessingEngineTypeARM
-> PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM
           Word32
forall a. Zero a => a
zero
           PhysicalDeviceDataGraphProcessingEngineTypeARM
forall a. Zero a => a
zero


-- | VkQueueFamilyDataGraphProcessingEnginePropertiesARM - Structure
-- describing the properties of a data graph processing engine type for a
-- given queue family
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ARM_data_graph VK_ARM_data_graph>,
-- 'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlags',
-- 'Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.ExternalSemaphoreHandleTypeFlags',
-- 'Vulkan.Core10.Enums.StructureType.StructureType',
-- 'getPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARM'
data QueueFamilyDataGraphProcessingEnginePropertiesARM = QueueFamilyDataGraphProcessingEnginePropertiesARM
  { -- | @foreignSemaphoreHandleTypes@ is a
    -- 'Vulkan.Core11.Enums.ExternalSemaphoreHandleTypeFlagBits.ExternalSemaphoreHandleTypeFlags'
    -- that describes the external semaphore handle types supported by a
    -- foreign data graph processing engine.
    QueueFamilyDataGraphProcessingEnginePropertiesARM
-> ExternalSemaphoreHandleTypeFlags
foreignSemaphoreHandleTypes :: ExternalSemaphoreHandleTypeFlags
  , -- | @foreignMemoryHandleTypes@ is a
    -- 'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.ExternalMemoryHandleTypeFlags'
    -- that describes the external memory handle types supported by a foreign
    -- data graph processing engine.
    QueueFamilyDataGraphProcessingEnginePropertiesARM
-> ExternalMemoryHandleTypeFlags
foreignMemoryHandleTypes :: ExternalMemoryHandleTypeFlags
  }
  deriving (Typeable, QueueFamilyDataGraphProcessingEnginePropertiesARM
-> QueueFamilyDataGraphProcessingEnginePropertiesARM -> Bool
(QueueFamilyDataGraphProcessingEnginePropertiesARM
 -> QueueFamilyDataGraphProcessingEnginePropertiesARM -> Bool)
-> (QueueFamilyDataGraphProcessingEnginePropertiesARM
    -> QueueFamilyDataGraphProcessingEnginePropertiesARM -> Bool)
-> Eq QueueFamilyDataGraphProcessingEnginePropertiesARM
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: QueueFamilyDataGraphProcessingEnginePropertiesARM
-> QueueFamilyDataGraphProcessingEnginePropertiesARM -> Bool
== :: QueueFamilyDataGraphProcessingEnginePropertiesARM
-> QueueFamilyDataGraphProcessingEnginePropertiesARM -> Bool
$c/= :: QueueFamilyDataGraphProcessingEnginePropertiesARM
-> QueueFamilyDataGraphProcessingEnginePropertiesARM -> Bool
/= :: QueueFamilyDataGraphProcessingEnginePropertiesARM
-> QueueFamilyDataGraphProcessingEnginePropertiesARM -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (QueueFamilyDataGraphProcessingEnginePropertiesARM)
#endif
deriving instance Show QueueFamilyDataGraphProcessingEnginePropertiesARM

instance ToCStruct QueueFamilyDataGraphProcessingEnginePropertiesARM where
  withCStruct :: forall b.
QueueFamilyDataGraphProcessingEnginePropertiesARM
-> (Ptr QueueFamilyDataGraphProcessingEnginePropertiesARM -> IO b)
-> IO b
withCStruct QueueFamilyDataGraphProcessingEnginePropertiesARM
x Ptr QueueFamilyDataGraphProcessingEnginePropertiesARM -> IO b
f = Int
-> (Ptr QueueFamilyDataGraphProcessingEnginePropertiesARM -> IO b)
-> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
24 ((Ptr QueueFamilyDataGraphProcessingEnginePropertiesARM -> IO b)
 -> IO b)
-> (Ptr QueueFamilyDataGraphProcessingEnginePropertiesARM -> IO b)
-> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr QueueFamilyDataGraphProcessingEnginePropertiesARM
p -> Ptr QueueFamilyDataGraphProcessingEnginePropertiesARM
-> QueueFamilyDataGraphProcessingEnginePropertiesARM
-> IO b
-> IO b
forall b.
Ptr QueueFamilyDataGraphProcessingEnginePropertiesARM
-> QueueFamilyDataGraphProcessingEnginePropertiesARM
-> IO b
-> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr QueueFamilyDataGraphProcessingEnginePropertiesARM
p QueueFamilyDataGraphProcessingEnginePropertiesARM
x (Ptr QueueFamilyDataGraphProcessingEnginePropertiesARM -> IO b
f Ptr QueueFamilyDataGraphProcessingEnginePropertiesARM
p)
  pokeCStruct :: forall b.
Ptr QueueFamilyDataGraphProcessingEnginePropertiesARM
-> QueueFamilyDataGraphProcessingEnginePropertiesARM
-> IO b
-> IO b
pokeCStruct Ptr QueueFamilyDataGraphProcessingEnginePropertiesARM
p QueueFamilyDataGraphProcessingEnginePropertiesARM{ExternalSemaphoreHandleTypeFlags
ExternalMemoryHandleTypeFlags
foreignSemaphoreHandleTypes :: QueueFamilyDataGraphProcessingEnginePropertiesARM
-> ExternalSemaphoreHandleTypeFlags
foreignMemoryHandleTypes :: QueueFamilyDataGraphProcessingEnginePropertiesARM
-> ExternalMemoryHandleTypeFlags
foreignSemaphoreHandleTypes :: ExternalSemaphoreHandleTypeFlags
foreignMemoryHandleTypes :: ExternalMemoryHandleTypeFlags
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr QueueFamilyDataGraphProcessingEnginePropertiesARM
p Ptr QueueFamilyDataGraphProcessingEnginePropertiesARM
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_QUEUE_FAMILY_DATA_GRAPH_PROCESSING_ENGINE_PROPERTIES_ARM)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr QueueFamilyDataGraphProcessingEnginePropertiesARM
p Ptr QueueFamilyDataGraphProcessingEnginePropertiesARM
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr ExternalSemaphoreHandleTypeFlags
-> ExternalSemaphoreHandleTypeFlags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr QueueFamilyDataGraphProcessingEnginePropertiesARM
p Ptr QueueFamilyDataGraphProcessingEnginePropertiesARM
-> Int -> Ptr ExternalSemaphoreHandleTypeFlags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr ExternalSemaphoreHandleTypeFlags)) (ExternalSemaphoreHandleTypeFlags
foreignSemaphoreHandleTypes)
    Ptr ExternalMemoryHandleTypeFlags
-> ExternalMemoryHandleTypeFlags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr QueueFamilyDataGraphProcessingEnginePropertiesARM
p Ptr QueueFamilyDataGraphProcessingEnginePropertiesARM
-> Int -> Ptr ExternalMemoryHandleTypeFlags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr ExternalMemoryHandleTypeFlags)) (ExternalMemoryHandleTypeFlags
foreignMemoryHandleTypes)
    IO b
f
  cStructSize :: Int
cStructSize = Int
24
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b.
Ptr QueueFamilyDataGraphProcessingEnginePropertiesARM
-> IO b -> IO b
pokeZeroCStruct Ptr QueueFamilyDataGraphProcessingEnginePropertiesARM
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr QueueFamilyDataGraphProcessingEnginePropertiesARM
p Ptr QueueFamilyDataGraphProcessingEnginePropertiesARM
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_QUEUE_FAMILY_DATA_GRAPH_PROCESSING_ENGINE_PROPERTIES_ARM)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr QueueFamilyDataGraphProcessingEnginePropertiesARM
p Ptr QueueFamilyDataGraphProcessingEnginePropertiesARM
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr ExternalSemaphoreHandleTypeFlags
-> ExternalSemaphoreHandleTypeFlags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr QueueFamilyDataGraphProcessingEnginePropertiesARM
p Ptr QueueFamilyDataGraphProcessingEnginePropertiesARM
-> Int -> Ptr ExternalSemaphoreHandleTypeFlags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr ExternalSemaphoreHandleTypeFlags)) (ExternalSemaphoreHandleTypeFlags
forall a. Zero a => a
zero)
    Ptr ExternalMemoryHandleTypeFlags
-> ExternalMemoryHandleTypeFlags -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr QueueFamilyDataGraphProcessingEnginePropertiesARM
p Ptr QueueFamilyDataGraphProcessingEnginePropertiesARM
-> Int -> Ptr ExternalMemoryHandleTypeFlags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr ExternalMemoryHandleTypeFlags)) (ExternalMemoryHandleTypeFlags
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct QueueFamilyDataGraphProcessingEnginePropertiesARM where
  peekCStruct :: Ptr QueueFamilyDataGraphProcessingEnginePropertiesARM
-> IO QueueFamilyDataGraphProcessingEnginePropertiesARM
peekCStruct Ptr QueueFamilyDataGraphProcessingEnginePropertiesARM
p = do
    foreignSemaphoreHandleTypes <- forall a. Storable a => Ptr a -> IO a
peek @ExternalSemaphoreHandleTypeFlags ((Ptr QueueFamilyDataGraphProcessingEnginePropertiesARM
p Ptr QueueFamilyDataGraphProcessingEnginePropertiesARM
-> Int -> Ptr ExternalSemaphoreHandleTypeFlags
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr ExternalSemaphoreHandleTypeFlags))
    foreignMemoryHandleTypes <- peek @ExternalMemoryHandleTypeFlags ((p `plusPtr` 20 :: Ptr ExternalMemoryHandleTypeFlags))
    pure $ QueueFamilyDataGraphProcessingEnginePropertiesARM
             foreignSemaphoreHandleTypes foreignMemoryHandleTypes

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

instance Zero QueueFamilyDataGraphProcessingEnginePropertiesARM where
  zero :: QueueFamilyDataGraphProcessingEnginePropertiesARM
zero = ExternalSemaphoreHandleTypeFlags
-> ExternalMemoryHandleTypeFlags
-> QueueFamilyDataGraphProcessingEnginePropertiesARM
QueueFamilyDataGraphProcessingEnginePropertiesARM
           ExternalSemaphoreHandleTypeFlags
forall a. Zero a => a
zero
           ExternalMemoryHandleTypeFlags
forall a. Zero a => a
zero


-- | VkDataGraphProcessingEngineCreateInfoARM - Structure describing a
-- collection of data graph processing engines for which the object being
-- created is specialized
--
-- == Valid Usage
--
-- -   #VUID-VkDataGraphProcessingEngineCreateInfoARM-dataGraph-09953# The
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-dataGraph dataGraph>
--     feature /must/ be enabled
--
-- -   #VUID-VkDataGraphProcessingEngineCreateInfoARM-pProcessingEngines-09918#
--     @pProcessingEngines@ /must/ not contain identical
--     'PhysicalDeviceDataGraphProcessingEngineARM' structures
--
-- -   #VUID-VkDataGraphProcessingEngineCreateInfoARM-pProcessingEngines-09956#
--     For each element of @pProcessingEngines@, its @type@ member /must/
--     be a valid 'PhysicalDeviceDataGraphProcessingEngineTypeARM' value
--
-- -   #VUID-VkDataGraphProcessingEngineCreateInfoARM-pProcessingEngines-11843#
--     If any element of @pProcessingEngines@ has a @type@ of
--     'PHYSICAL_DEVICE_DATA_GRAPH_PROCESSING_ENGINE_TYPE_NEURAL_QCOM' or
--     'PHYSICAL_DEVICE_DATA_GRAPH_PROCESSING_ENGINE_TYPE_COMPUTE_QCOM' and
--     @isForeign@ set to 'Vulkan.Core10.FundamentalTypes.TRUE',
--     @processingEngineCount@ /must/ equal @1@
--
-- -   #VUID-VkDataGraphProcessingEngineCreateInfoARM-pProcessingEngines-11844#
--     If any element of @pProcessingEngines@ has a @type@ of
--     'PHYSICAL_DEVICE_DATA_GRAPH_PROCESSING_ENGINE_TYPE_NEURAL_QCOM' or
--     'PHYSICAL_DEVICE_DATA_GRAPH_PROCESSING_ENGINE_TYPE_COMPUTE_QCOM',
--     the
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-dataGraphModelQCOM dataGraphModel>
--     feature /must/ be enabled
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkDataGraphProcessingEngineCreateInfoARM-sType-sType# @sType@
--     /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DATA_GRAPH_PROCESSING_ENGINE_CREATE_INFO_ARM'
--
-- -   #VUID-VkDataGraphProcessingEngineCreateInfoARM-pProcessingEngines-parameter#
--     @pProcessingEngines@ /must/ be a valid pointer to an array of
--     @processingEngineCount@ 'PhysicalDeviceDataGraphProcessingEngineARM'
--     structures
--
-- -   #VUID-VkDataGraphProcessingEngineCreateInfoARM-processingEngineCount-arraylength#
--     @processingEngineCount@ /must/ be greater than @0@
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ARM_data_graph VK_ARM_data_graph>,
-- 'PhysicalDeviceDataGraphProcessingEngineARM',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data DataGraphProcessingEngineCreateInfoARM = DataGraphProcessingEngineCreateInfoARM
  { -- | @processingEngineCount@ is the number of elements in
    -- @pProcessingEngines@.
    DataGraphProcessingEngineCreateInfoARM -> Word32
processingEngineCount :: Word32
  , -- | @pProcessingEngines@ is a pointer to an array of @processingEngineCount@
    -- 'PhysicalDeviceDataGraphProcessingEngineARM' structures.
    DataGraphProcessingEngineCreateInfoARM
-> Ptr PhysicalDeviceDataGraphProcessingEngineARM
processingEngines :: Ptr PhysicalDeviceDataGraphProcessingEngineARM
  }
  deriving (Typeable, DataGraphProcessingEngineCreateInfoARM
-> DataGraphProcessingEngineCreateInfoARM -> Bool
(DataGraphProcessingEngineCreateInfoARM
 -> DataGraphProcessingEngineCreateInfoARM -> Bool)
-> (DataGraphProcessingEngineCreateInfoARM
    -> DataGraphProcessingEngineCreateInfoARM -> Bool)
-> Eq DataGraphProcessingEngineCreateInfoARM
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: DataGraphProcessingEngineCreateInfoARM
-> DataGraphProcessingEngineCreateInfoARM -> Bool
== :: DataGraphProcessingEngineCreateInfoARM
-> DataGraphProcessingEngineCreateInfoARM -> Bool
$c/= :: DataGraphProcessingEngineCreateInfoARM
-> DataGraphProcessingEngineCreateInfoARM -> Bool
/= :: DataGraphProcessingEngineCreateInfoARM
-> DataGraphProcessingEngineCreateInfoARM -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DataGraphProcessingEngineCreateInfoARM)
#endif
deriving instance Show DataGraphProcessingEngineCreateInfoARM

instance ToCStruct DataGraphProcessingEngineCreateInfoARM where
  withCStruct :: forall b.
DataGraphProcessingEngineCreateInfoARM
-> (Ptr DataGraphProcessingEngineCreateInfoARM -> IO b) -> IO b
withCStruct DataGraphProcessingEngineCreateInfoARM
x Ptr DataGraphProcessingEngineCreateInfoARM -> IO b
f = Int -> (Ptr DataGraphProcessingEngineCreateInfoARM -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
32 ((Ptr DataGraphProcessingEngineCreateInfoARM -> IO b) -> IO b)
-> (Ptr DataGraphProcessingEngineCreateInfoARM -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr DataGraphProcessingEngineCreateInfoARM
p -> Ptr DataGraphProcessingEngineCreateInfoARM
-> DataGraphProcessingEngineCreateInfoARM -> IO b -> IO b
forall b.
Ptr DataGraphProcessingEngineCreateInfoARM
-> DataGraphProcessingEngineCreateInfoARM -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr DataGraphProcessingEngineCreateInfoARM
p DataGraphProcessingEngineCreateInfoARM
x (Ptr DataGraphProcessingEngineCreateInfoARM -> IO b
f Ptr DataGraphProcessingEngineCreateInfoARM
p)
  pokeCStruct :: forall b.
Ptr DataGraphProcessingEngineCreateInfoARM
-> DataGraphProcessingEngineCreateInfoARM -> IO b -> IO b
pokeCStruct Ptr DataGraphProcessingEngineCreateInfoARM
p DataGraphProcessingEngineCreateInfoARM{Word32
Ptr PhysicalDeviceDataGraphProcessingEngineARM
processingEngineCount :: DataGraphProcessingEngineCreateInfoARM -> Word32
processingEngines :: DataGraphProcessingEngineCreateInfoARM
-> Ptr PhysicalDeviceDataGraphProcessingEngineARM
processingEngineCount :: Word32
processingEngines :: Ptr PhysicalDeviceDataGraphProcessingEngineARM
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DataGraphProcessingEngineCreateInfoARM
p Ptr DataGraphProcessingEngineCreateInfoARM
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DATA_GRAPH_PROCESSING_ENGINE_CREATE_INFO_ARM)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DataGraphProcessingEngineCreateInfoARM
p Ptr DataGraphProcessingEngineCreateInfoARM -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DataGraphProcessingEngineCreateInfoARM
p Ptr DataGraphProcessingEngineCreateInfoARM -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32)) (Word32
processingEngineCount)
    Ptr (Ptr PhysicalDeviceDataGraphProcessingEngineARM)
-> Ptr PhysicalDeviceDataGraphProcessingEngineARM -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DataGraphProcessingEngineCreateInfoARM
p Ptr DataGraphProcessingEngineCreateInfoARM
-> Int -> Ptr (Ptr PhysicalDeviceDataGraphProcessingEngineARM)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr (Ptr PhysicalDeviceDataGraphProcessingEngineARM))) (Ptr PhysicalDeviceDataGraphProcessingEngineARM
processingEngines)
    IO b
f
  cStructSize :: Int
cStructSize = Int
32
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b.
Ptr DataGraphProcessingEngineCreateInfoARM -> IO b -> IO b
pokeZeroCStruct Ptr DataGraphProcessingEngineCreateInfoARM
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DataGraphProcessingEngineCreateInfoARM
p Ptr DataGraphProcessingEngineCreateInfoARM
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DATA_GRAPH_PROCESSING_ENGINE_CREATE_INFO_ARM)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DataGraphProcessingEngineCreateInfoARM
p Ptr DataGraphProcessingEngineCreateInfoARM -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DataGraphProcessingEngineCreateInfoARM
p Ptr DataGraphProcessingEngineCreateInfoARM -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    Ptr (Ptr PhysicalDeviceDataGraphProcessingEngineARM)
-> Ptr PhysicalDeviceDataGraphProcessingEngineARM -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DataGraphProcessingEngineCreateInfoARM
p Ptr DataGraphProcessingEngineCreateInfoARM
-> Int -> Ptr (Ptr PhysicalDeviceDataGraphProcessingEngineARM)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr (Ptr PhysicalDeviceDataGraphProcessingEngineARM))) (Ptr PhysicalDeviceDataGraphProcessingEngineARM
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct DataGraphProcessingEngineCreateInfoARM where
  peekCStruct :: Ptr DataGraphProcessingEngineCreateInfoARM
-> IO DataGraphProcessingEngineCreateInfoARM
peekCStruct Ptr DataGraphProcessingEngineCreateInfoARM
p = do
    processingEngineCount <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr DataGraphProcessingEngineCreateInfoARM
p Ptr DataGraphProcessingEngineCreateInfoARM -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32))
    pProcessingEngines <- peek @(Ptr PhysicalDeviceDataGraphProcessingEngineARM) ((p `plusPtr` 24 :: Ptr (Ptr PhysicalDeviceDataGraphProcessingEngineARM)))
    pure $ DataGraphProcessingEngineCreateInfoARM
             processingEngineCount pProcessingEngines

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

instance Zero DataGraphProcessingEngineCreateInfoARM where
  zero :: DataGraphProcessingEngineCreateInfoARM
zero = Word32
-> Ptr PhysicalDeviceDataGraphProcessingEngineARM
-> DataGraphProcessingEngineCreateInfoARM
DataGraphProcessingEngineCreateInfoARM
           Word32
forall a. Zero a => a
zero
           Ptr PhysicalDeviceDataGraphProcessingEngineARM
forall a. Zero a => a
zero


type DataGraphPipelineSessionCreateFlagsARM = DataGraphPipelineSessionCreateFlagBitsARM

-- | VkDataGraphPipelineSessionCreateFlagBitsARM - Bitmask specifying
-- additional parameters of a data graph pipeline session
--
-- = Description
--
-- -   'DATA_GRAPH_PIPELINE_SESSION_CREATE_PROTECTED_BIT_ARM' specifies
--     that the data graph pipeline session is backed by protected memory.
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ARM_data_graph VK_ARM_data_graph>,
-- 'DataGraphPipelineSessionCreateFlagsARM'
newtype DataGraphPipelineSessionCreateFlagBitsARM = DataGraphPipelineSessionCreateFlagBitsARM Flags64
  deriving newtype (DataGraphPipelineSessionCreateFlagsARM
-> DataGraphPipelineSessionCreateFlagsARM -> Bool
(DataGraphPipelineSessionCreateFlagsARM
 -> DataGraphPipelineSessionCreateFlagsARM -> Bool)
-> (DataGraphPipelineSessionCreateFlagsARM
    -> DataGraphPipelineSessionCreateFlagsARM -> Bool)
-> Eq DataGraphPipelineSessionCreateFlagsARM
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: DataGraphPipelineSessionCreateFlagsARM
-> DataGraphPipelineSessionCreateFlagsARM -> Bool
== :: DataGraphPipelineSessionCreateFlagsARM
-> DataGraphPipelineSessionCreateFlagsARM -> Bool
$c/= :: DataGraphPipelineSessionCreateFlagsARM
-> DataGraphPipelineSessionCreateFlagsARM -> Bool
/= :: DataGraphPipelineSessionCreateFlagsARM
-> DataGraphPipelineSessionCreateFlagsARM -> Bool
Eq, Eq DataGraphPipelineSessionCreateFlagsARM
Eq DataGraphPipelineSessionCreateFlagsARM =>
(DataGraphPipelineSessionCreateFlagsARM
 -> DataGraphPipelineSessionCreateFlagsARM -> Ordering)
-> (DataGraphPipelineSessionCreateFlagsARM
    -> DataGraphPipelineSessionCreateFlagsARM -> Bool)
-> (DataGraphPipelineSessionCreateFlagsARM
    -> DataGraphPipelineSessionCreateFlagsARM -> Bool)
-> (DataGraphPipelineSessionCreateFlagsARM
    -> DataGraphPipelineSessionCreateFlagsARM -> Bool)
-> (DataGraphPipelineSessionCreateFlagsARM
    -> DataGraphPipelineSessionCreateFlagsARM -> Bool)
-> (DataGraphPipelineSessionCreateFlagsARM
    -> DataGraphPipelineSessionCreateFlagsARM
    -> DataGraphPipelineSessionCreateFlagsARM)
-> (DataGraphPipelineSessionCreateFlagsARM
    -> DataGraphPipelineSessionCreateFlagsARM
    -> DataGraphPipelineSessionCreateFlagsARM)
-> Ord DataGraphPipelineSessionCreateFlagsARM
DataGraphPipelineSessionCreateFlagsARM
-> DataGraphPipelineSessionCreateFlagsARM -> Bool
DataGraphPipelineSessionCreateFlagsARM
-> DataGraphPipelineSessionCreateFlagsARM -> Ordering
DataGraphPipelineSessionCreateFlagsARM
-> DataGraphPipelineSessionCreateFlagsARM
-> DataGraphPipelineSessionCreateFlagsARM
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: DataGraphPipelineSessionCreateFlagsARM
-> DataGraphPipelineSessionCreateFlagsARM -> Ordering
compare :: DataGraphPipelineSessionCreateFlagsARM
-> DataGraphPipelineSessionCreateFlagsARM -> Ordering
$c< :: DataGraphPipelineSessionCreateFlagsARM
-> DataGraphPipelineSessionCreateFlagsARM -> Bool
< :: DataGraphPipelineSessionCreateFlagsARM
-> DataGraphPipelineSessionCreateFlagsARM -> Bool
$c<= :: DataGraphPipelineSessionCreateFlagsARM
-> DataGraphPipelineSessionCreateFlagsARM -> Bool
<= :: DataGraphPipelineSessionCreateFlagsARM
-> DataGraphPipelineSessionCreateFlagsARM -> Bool
$c> :: DataGraphPipelineSessionCreateFlagsARM
-> DataGraphPipelineSessionCreateFlagsARM -> Bool
> :: DataGraphPipelineSessionCreateFlagsARM
-> DataGraphPipelineSessionCreateFlagsARM -> Bool
$c>= :: DataGraphPipelineSessionCreateFlagsARM
-> DataGraphPipelineSessionCreateFlagsARM -> Bool
>= :: DataGraphPipelineSessionCreateFlagsARM
-> DataGraphPipelineSessionCreateFlagsARM -> Bool
$cmax :: DataGraphPipelineSessionCreateFlagsARM
-> DataGraphPipelineSessionCreateFlagsARM
-> DataGraphPipelineSessionCreateFlagsARM
max :: DataGraphPipelineSessionCreateFlagsARM
-> DataGraphPipelineSessionCreateFlagsARM
-> DataGraphPipelineSessionCreateFlagsARM
$cmin :: DataGraphPipelineSessionCreateFlagsARM
-> DataGraphPipelineSessionCreateFlagsARM
-> DataGraphPipelineSessionCreateFlagsARM
min :: DataGraphPipelineSessionCreateFlagsARM
-> DataGraphPipelineSessionCreateFlagsARM
-> DataGraphPipelineSessionCreateFlagsARM
Ord, Ptr DataGraphPipelineSessionCreateFlagsARM
-> IO DataGraphPipelineSessionCreateFlagsARM
Ptr DataGraphPipelineSessionCreateFlagsARM
-> Int -> IO DataGraphPipelineSessionCreateFlagsARM
Ptr DataGraphPipelineSessionCreateFlagsARM
-> Int -> DataGraphPipelineSessionCreateFlagsARM -> IO ()
Ptr DataGraphPipelineSessionCreateFlagsARM
-> DataGraphPipelineSessionCreateFlagsARM -> IO ()
DataGraphPipelineSessionCreateFlagsARM -> Int
(DataGraphPipelineSessionCreateFlagsARM -> Int)
-> (DataGraphPipelineSessionCreateFlagsARM -> Int)
-> (Ptr DataGraphPipelineSessionCreateFlagsARM
    -> Int -> IO DataGraphPipelineSessionCreateFlagsARM)
-> (Ptr DataGraphPipelineSessionCreateFlagsARM
    -> Int -> DataGraphPipelineSessionCreateFlagsARM -> IO ())
-> (forall b.
    Ptr b -> Int -> IO DataGraphPipelineSessionCreateFlagsARM)
-> (forall b.
    Ptr b -> Int -> DataGraphPipelineSessionCreateFlagsARM -> IO ())
-> (Ptr DataGraphPipelineSessionCreateFlagsARM
    -> IO DataGraphPipelineSessionCreateFlagsARM)
-> (Ptr DataGraphPipelineSessionCreateFlagsARM
    -> DataGraphPipelineSessionCreateFlagsARM -> IO ())
-> Storable DataGraphPipelineSessionCreateFlagsARM
forall b. Ptr b -> Int -> IO DataGraphPipelineSessionCreateFlagsARM
forall b.
Ptr b -> Int -> DataGraphPipelineSessionCreateFlagsARM -> IO ()
forall a.
(a -> Int)
-> (a -> Int)
-> (Ptr a -> Int -> IO a)
-> (Ptr a -> Int -> a -> IO ())
-> (forall b. Ptr b -> Int -> IO a)
-> (forall b. Ptr b -> Int -> a -> IO ())
-> (Ptr a -> IO a)
-> (Ptr a -> a -> IO ())
-> Storable a
$csizeOf :: DataGraphPipelineSessionCreateFlagsARM -> Int
sizeOf :: DataGraphPipelineSessionCreateFlagsARM -> Int
$calignment :: DataGraphPipelineSessionCreateFlagsARM -> Int
alignment :: DataGraphPipelineSessionCreateFlagsARM -> Int
$cpeekElemOff :: Ptr DataGraphPipelineSessionCreateFlagsARM
-> Int -> IO DataGraphPipelineSessionCreateFlagsARM
peekElemOff :: Ptr DataGraphPipelineSessionCreateFlagsARM
-> Int -> IO DataGraphPipelineSessionCreateFlagsARM
$cpokeElemOff :: Ptr DataGraphPipelineSessionCreateFlagsARM
-> Int -> DataGraphPipelineSessionCreateFlagsARM -> IO ()
pokeElemOff :: Ptr DataGraphPipelineSessionCreateFlagsARM
-> Int -> DataGraphPipelineSessionCreateFlagsARM -> IO ()
$cpeekByteOff :: forall b. Ptr b -> Int -> IO DataGraphPipelineSessionCreateFlagsARM
peekByteOff :: forall b. Ptr b -> Int -> IO DataGraphPipelineSessionCreateFlagsARM
$cpokeByteOff :: forall b.
Ptr b -> Int -> DataGraphPipelineSessionCreateFlagsARM -> IO ()
pokeByteOff :: forall b.
Ptr b -> Int -> DataGraphPipelineSessionCreateFlagsARM -> IO ()
$cpeek :: Ptr DataGraphPipelineSessionCreateFlagsARM
-> IO DataGraphPipelineSessionCreateFlagsARM
peek :: Ptr DataGraphPipelineSessionCreateFlagsARM
-> IO DataGraphPipelineSessionCreateFlagsARM
$cpoke :: Ptr DataGraphPipelineSessionCreateFlagsARM
-> DataGraphPipelineSessionCreateFlagsARM -> IO ()
poke :: Ptr DataGraphPipelineSessionCreateFlagsARM
-> DataGraphPipelineSessionCreateFlagsARM -> IO ()
Storable, DataGraphPipelineSessionCreateFlagsARM
DataGraphPipelineSessionCreateFlagsARM
-> Zero DataGraphPipelineSessionCreateFlagsARM
forall a. a -> Zero a
$czero :: DataGraphPipelineSessionCreateFlagsARM
zero :: DataGraphPipelineSessionCreateFlagsARM
Zero, Eq DataGraphPipelineSessionCreateFlagsARM
DataGraphPipelineSessionCreateFlagsARM
Eq DataGraphPipelineSessionCreateFlagsARM =>
(DataGraphPipelineSessionCreateFlagsARM
 -> DataGraphPipelineSessionCreateFlagsARM
 -> DataGraphPipelineSessionCreateFlagsARM)
-> (DataGraphPipelineSessionCreateFlagsARM
    -> DataGraphPipelineSessionCreateFlagsARM
    -> DataGraphPipelineSessionCreateFlagsARM)
-> (DataGraphPipelineSessionCreateFlagsARM
    -> DataGraphPipelineSessionCreateFlagsARM
    -> DataGraphPipelineSessionCreateFlagsARM)
-> (DataGraphPipelineSessionCreateFlagsARM
    -> DataGraphPipelineSessionCreateFlagsARM)
-> (DataGraphPipelineSessionCreateFlagsARM
    -> Int -> DataGraphPipelineSessionCreateFlagsARM)
-> (DataGraphPipelineSessionCreateFlagsARM
    -> Int -> DataGraphPipelineSessionCreateFlagsARM)
-> DataGraphPipelineSessionCreateFlagsARM
-> (Int -> DataGraphPipelineSessionCreateFlagsARM)
-> (DataGraphPipelineSessionCreateFlagsARM
    -> Int -> DataGraphPipelineSessionCreateFlagsARM)
-> (DataGraphPipelineSessionCreateFlagsARM
    -> Int -> DataGraphPipelineSessionCreateFlagsARM)
-> (DataGraphPipelineSessionCreateFlagsARM
    -> Int -> DataGraphPipelineSessionCreateFlagsARM)
-> (DataGraphPipelineSessionCreateFlagsARM -> Int -> Bool)
-> (DataGraphPipelineSessionCreateFlagsARM -> Maybe Int)
-> (DataGraphPipelineSessionCreateFlagsARM -> Int)
-> (DataGraphPipelineSessionCreateFlagsARM -> Bool)
-> (DataGraphPipelineSessionCreateFlagsARM
    -> Int -> DataGraphPipelineSessionCreateFlagsARM)
-> (DataGraphPipelineSessionCreateFlagsARM
    -> Int -> DataGraphPipelineSessionCreateFlagsARM)
-> (DataGraphPipelineSessionCreateFlagsARM
    -> Int -> DataGraphPipelineSessionCreateFlagsARM)
-> (DataGraphPipelineSessionCreateFlagsARM
    -> Int -> DataGraphPipelineSessionCreateFlagsARM)
-> (DataGraphPipelineSessionCreateFlagsARM
    -> Int -> DataGraphPipelineSessionCreateFlagsARM)
-> (DataGraphPipelineSessionCreateFlagsARM
    -> Int -> DataGraphPipelineSessionCreateFlagsARM)
-> (DataGraphPipelineSessionCreateFlagsARM -> Int)
-> Bits DataGraphPipelineSessionCreateFlagsARM
Int -> DataGraphPipelineSessionCreateFlagsARM
DataGraphPipelineSessionCreateFlagsARM -> Bool
DataGraphPipelineSessionCreateFlagsARM -> Int
DataGraphPipelineSessionCreateFlagsARM -> Maybe Int
DataGraphPipelineSessionCreateFlagsARM
-> DataGraphPipelineSessionCreateFlagsARM
DataGraphPipelineSessionCreateFlagsARM -> Int -> Bool
DataGraphPipelineSessionCreateFlagsARM
-> Int -> DataGraphPipelineSessionCreateFlagsARM
DataGraphPipelineSessionCreateFlagsARM
-> DataGraphPipelineSessionCreateFlagsARM
-> DataGraphPipelineSessionCreateFlagsARM
forall a.
Eq a =>
(a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> a
-> (Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> Bool)
-> (a -> Maybe Int)
-> (a -> Int)
-> (a -> Bool)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int)
-> Bits a
$c.&. :: DataGraphPipelineSessionCreateFlagsARM
-> DataGraphPipelineSessionCreateFlagsARM
-> DataGraphPipelineSessionCreateFlagsARM
.&. :: DataGraphPipelineSessionCreateFlagsARM
-> DataGraphPipelineSessionCreateFlagsARM
-> DataGraphPipelineSessionCreateFlagsARM
$c.|. :: DataGraphPipelineSessionCreateFlagsARM
-> DataGraphPipelineSessionCreateFlagsARM
-> DataGraphPipelineSessionCreateFlagsARM
.|. :: DataGraphPipelineSessionCreateFlagsARM
-> DataGraphPipelineSessionCreateFlagsARM
-> DataGraphPipelineSessionCreateFlagsARM
$cxor :: DataGraphPipelineSessionCreateFlagsARM
-> DataGraphPipelineSessionCreateFlagsARM
-> DataGraphPipelineSessionCreateFlagsARM
xor :: DataGraphPipelineSessionCreateFlagsARM
-> DataGraphPipelineSessionCreateFlagsARM
-> DataGraphPipelineSessionCreateFlagsARM
$ccomplement :: DataGraphPipelineSessionCreateFlagsARM
-> DataGraphPipelineSessionCreateFlagsARM
complement :: DataGraphPipelineSessionCreateFlagsARM
-> DataGraphPipelineSessionCreateFlagsARM
$cshift :: DataGraphPipelineSessionCreateFlagsARM
-> Int -> DataGraphPipelineSessionCreateFlagsARM
shift :: DataGraphPipelineSessionCreateFlagsARM
-> Int -> DataGraphPipelineSessionCreateFlagsARM
$crotate :: DataGraphPipelineSessionCreateFlagsARM
-> Int -> DataGraphPipelineSessionCreateFlagsARM
rotate :: DataGraphPipelineSessionCreateFlagsARM
-> Int -> DataGraphPipelineSessionCreateFlagsARM
$czeroBits :: DataGraphPipelineSessionCreateFlagsARM
zeroBits :: DataGraphPipelineSessionCreateFlagsARM
$cbit :: Int -> DataGraphPipelineSessionCreateFlagsARM
bit :: Int -> DataGraphPipelineSessionCreateFlagsARM
$csetBit :: DataGraphPipelineSessionCreateFlagsARM
-> Int -> DataGraphPipelineSessionCreateFlagsARM
setBit :: DataGraphPipelineSessionCreateFlagsARM
-> Int -> DataGraphPipelineSessionCreateFlagsARM
$cclearBit :: DataGraphPipelineSessionCreateFlagsARM
-> Int -> DataGraphPipelineSessionCreateFlagsARM
clearBit :: DataGraphPipelineSessionCreateFlagsARM
-> Int -> DataGraphPipelineSessionCreateFlagsARM
$ccomplementBit :: DataGraphPipelineSessionCreateFlagsARM
-> Int -> DataGraphPipelineSessionCreateFlagsARM
complementBit :: DataGraphPipelineSessionCreateFlagsARM
-> Int -> DataGraphPipelineSessionCreateFlagsARM
$ctestBit :: DataGraphPipelineSessionCreateFlagsARM -> Int -> Bool
testBit :: DataGraphPipelineSessionCreateFlagsARM -> Int -> Bool
$cbitSizeMaybe :: DataGraphPipelineSessionCreateFlagsARM -> Maybe Int
bitSizeMaybe :: DataGraphPipelineSessionCreateFlagsARM -> Maybe Int
$cbitSize :: DataGraphPipelineSessionCreateFlagsARM -> Int
bitSize :: DataGraphPipelineSessionCreateFlagsARM -> Int
$cisSigned :: DataGraphPipelineSessionCreateFlagsARM -> Bool
isSigned :: DataGraphPipelineSessionCreateFlagsARM -> Bool
$cshiftL :: DataGraphPipelineSessionCreateFlagsARM
-> Int -> DataGraphPipelineSessionCreateFlagsARM
shiftL :: DataGraphPipelineSessionCreateFlagsARM
-> Int -> DataGraphPipelineSessionCreateFlagsARM
$cunsafeShiftL :: DataGraphPipelineSessionCreateFlagsARM
-> Int -> DataGraphPipelineSessionCreateFlagsARM
unsafeShiftL :: DataGraphPipelineSessionCreateFlagsARM
-> Int -> DataGraphPipelineSessionCreateFlagsARM
$cshiftR :: DataGraphPipelineSessionCreateFlagsARM
-> Int -> DataGraphPipelineSessionCreateFlagsARM
shiftR :: DataGraphPipelineSessionCreateFlagsARM
-> Int -> DataGraphPipelineSessionCreateFlagsARM
$cunsafeShiftR :: DataGraphPipelineSessionCreateFlagsARM
-> Int -> DataGraphPipelineSessionCreateFlagsARM
unsafeShiftR :: DataGraphPipelineSessionCreateFlagsARM
-> Int -> DataGraphPipelineSessionCreateFlagsARM
$crotateL :: DataGraphPipelineSessionCreateFlagsARM
-> Int -> DataGraphPipelineSessionCreateFlagsARM
rotateL :: DataGraphPipelineSessionCreateFlagsARM
-> Int -> DataGraphPipelineSessionCreateFlagsARM
$crotateR :: DataGraphPipelineSessionCreateFlagsARM
-> Int -> DataGraphPipelineSessionCreateFlagsARM
rotateR :: DataGraphPipelineSessionCreateFlagsARM
-> Int -> DataGraphPipelineSessionCreateFlagsARM
$cpopCount :: DataGraphPipelineSessionCreateFlagsARM -> Int
popCount :: DataGraphPipelineSessionCreateFlagsARM -> Int
Bits, Bits DataGraphPipelineSessionCreateFlagsARM
Bits DataGraphPipelineSessionCreateFlagsARM =>
(DataGraphPipelineSessionCreateFlagsARM -> Int)
-> (DataGraphPipelineSessionCreateFlagsARM -> Int)
-> (DataGraphPipelineSessionCreateFlagsARM -> Int)
-> FiniteBits DataGraphPipelineSessionCreateFlagsARM
DataGraphPipelineSessionCreateFlagsARM -> Int
forall b.
Bits b =>
(b -> Int) -> (b -> Int) -> (b -> Int) -> FiniteBits b
$cfiniteBitSize :: DataGraphPipelineSessionCreateFlagsARM -> Int
finiteBitSize :: DataGraphPipelineSessionCreateFlagsARM -> Int
$ccountLeadingZeros :: DataGraphPipelineSessionCreateFlagsARM -> Int
countLeadingZeros :: DataGraphPipelineSessionCreateFlagsARM -> Int
$ccountTrailingZeros :: DataGraphPipelineSessionCreateFlagsARM -> Int
countTrailingZeros :: DataGraphPipelineSessionCreateFlagsARM -> Int
FiniteBits)

-- No documentation found for Nested "VkDataGraphPipelineSessionCreateFlagBitsARM" "VK_DATA_GRAPH_PIPELINE_SESSION_CREATE_PROTECTED_BIT_ARM"
pattern $mDATA_GRAPH_PIPELINE_SESSION_CREATE_PROTECTED_BIT_ARM :: forall {r}.
DataGraphPipelineSessionCreateFlagsARM
-> ((# #) -> r) -> ((# #) -> r) -> r
$bDATA_GRAPH_PIPELINE_SESSION_CREATE_PROTECTED_BIT_ARM :: DataGraphPipelineSessionCreateFlagsARM
DATA_GRAPH_PIPELINE_SESSION_CREATE_PROTECTED_BIT_ARM = DataGraphPipelineSessionCreateFlagBitsARM 0x0000000000000001

conNameDataGraphPipelineSessionCreateFlagBitsARM :: String
conNameDataGraphPipelineSessionCreateFlagBitsARM :: String
conNameDataGraphPipelineSessionCreateFlagBitsARM = String
"DataGraphPipelineSessionCreateFlagBitsARM"

enumPrefixDataGraphPipelineSessionCreateFlagBitsARM :: String
enumPrefixDataGraphPipelineSessionCreateFlagBitsARM :: String
enumPrefixDataGraphPipelineSessionCreateFlagBitsARM = String
"DATA_GRAPH_PIPELINE_SESSION_CREATE_PROTECTED_BIT_ARM"

showTableDataGraphPipelineSessionCreateFlagBitsARM :: [(DataGraphPipelineSessionCreateFlagBitsARM, String)]
showTableDataGraphPipelineSessionCreateFlagBitsARM :: [(DataGraphPipelineSessionCreateFlagsARM, String)]
showTableDataGraphPipelineSessionCreateFlagBitsARM =
  [
    ( DataGraphPipelineSessionCreateFlagsARM
DATA_GRAPH_PIPELINE_SESSION_CREATE_PROTECTED_BIT_ARM
    , String
""
    )
  ]

instance Show DataGraphPipelineSessionCreateFlagBitsARM where
  showsPrec :: Int -> DataGraphPipelineSessionCreateFlagsARM -> ShowS
showsPrec =
    String
-> [(DataGraphPipelineSessionCreateFlagsARM, String)]
-> String
-> (DataGraphPipelineSessionCreateFlagsARM -> Word64)
-> (Word64 -> ShowS)
-> Int
-> DataGraphPipelineSessionCreateFlagsARM
-> ShowS
forall a i.
Eq a =>
String
-> [(a, String)]
-> String
-> (a -> i)
-> (i -> ShowS)
-> Int
-> a
-> ShowS
enumShowsPrec
      String
enumPrefixDataGraphPipelineSessionCreateFlagBitsARM
      [(DataGraphPipelineSessionCreateFlagsARM, String)]
showTableDataGraphPipelineSessionCreateFlagBitsARM
      String
conNameDataGraphPipelineSessionCreateFlagBitsARM
      (\(DataGraphPipelineSessionCreateFlagBitsARM Word64
x) -> Word64
x)
      (\Word64
x -> String -> ShowS
showString String
"0x" ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Word64 -> ShowS
forall a. Integral a => a -> ShowS
showHex Word64
x)

instance Read DataGraphPipelineSessionCreateFlagBitsARM where
  readPrec :: ReadPrec DataGraphPipelineSessionCreateFlagsARM
readPrec =
    String
-> [(DataGraphPipelineSessionCreateFlagsARM, String)]
-> String
-> (Word64 -> DataGraphPipelineSessionCreateFlagsARM)
-> ReadPrec DataGraphPipelineSessionCreateFlagsARM
forall i a.
Read i =>
String -> [(a, String)] -> String -> (i -> a) -> ReadPrec a
enumReadPrec
      String
enumPrefixDataGraphPipelineSessionCreateFlagBitsARM
      [(DataGraphPipelineSessionCreateFlagsARM, String)]
showTableDataGraphPipelineSessionCreateFlagBitsARM
      String
conNameDataGraphPipelineSessionCreateFlagBitsARM
      Word64 -> DataGraphPipelineSessionCreateFlagsARM
DataGraphPipelineSessionCreateFlagBitsARM

-- | VkDataGraphPipelineSessionBindPointARM - Enumeration describing the bind
-- points of a data graph pipeline session
--
-- = Description
--
-- -   'DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_TRANSIENT_ARM' corresponds
--     to the transient data produced and consumed during one dispatch of a
--     data graph pipeline in a data graph pipeline session. This transient
--     data is never reused by subsequent dispatches and can safely be
--     clobbered once a 'cmdDispatchDataGraphARM' command completes
--     execution.
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ARM_data_graph VK_ARM_data_graph>,
-- 'BindDataGraphPipelineSessionMemoryInfoARM',
-- 'DataGraphPipelineSessionBindPointRequirementARM',
-- 'DataGraphPipelineSessionMemoryRequirementsInfoARM'
newtype DataGraphPipelineSessionBindPointARM = DataGraphPipelineSessionBindPointARM Int32
  deriving newtype (DataGraphPipelineSessionBindPointARM
-> DataGraphPipelineSessionBindPointARM -> Bool
(DataGraphPipelineSessionBindPointARM
 -> DataGraphPipelineSessionBindPointARM -> Bool)
-> (DataGraphPipelineSessionBindPointARM
    -> DataGraphPipelineSessionBindPointARM -> Bool)
-> Eq DataGraphPipelineSessionBindPointARM
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: DataGraphPipelineSessionBindPointARM
-> DataGraphPipelineSessionBindPointARM -> Bool
== :: DataGraphPipelineSessionBindPointARM
-> DataGraphPipelineSessionBindPointARM -> Bool
$c/= :: DataGraphPipelineSessionBindPointARM
-> DataGraphPipelineSessionBindPointARM -> Bool
/= :: DataGraphPipelineSessionBindPointARM
-> DataGraphPipelineSessionBindPointARM -> Bool
Eq, Eq DataGraphPipelineSessionBindPointARM
Eq DataGraphPipelineSessionBindPointARM =>
(DataGraphPipelineSessionBindPointARM
 -> DataGraphPipelineSessionBindPointARM -> Ordering)
-> (DataGraphPipelineSessionBindPointARM
    -> DataGraphPipelineSessionBindPointARM -> Bool)
-> (DataGraphPipelineSessionBindPointARM
    -> DataGraphPipelineSessionBindPointARM -> Bool)
-> (DataGraphPipelineSessionBindPointARM
    -> DataGraphPipelineSessionBindPointARM -> Bool)
-> (DataGraphPipelineSessionBindPointARM
    -> DataGraphPipelineSessionBindPointARM -> Bool)
-> (DataGraphPipelineSessionBindPointARM
    -> DataGraphPipelineSessionBindPointARM
    -> DataGraphPipelineSessionBindPointARM)
-> (DataGraphPipelineSessionBindPointARM
    -> DataGraphPipelineSessionBindPointARM
    -> DataGraphPipelineSessionBindPointARM)
-> Ord DataGraphPipelineSessionBindPointARM
DataGraphPipelineSessionBindPointARM
-> DataGraphPipelineSessionBindPointARM -> Bool
DataGraphPipelineSessionBindPointARM
-> DataGraphPipelineSessionBindPointARM -> Ordering
DataGraphPipelineSessionBindPointARM
-> DataGraphPipelineSessionBindPointARM
-> DataGraphPipelineSessionBindPointARM
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: DataGraphPipelineSessionBindPointARM
-> DataGraphPipelineSessionBindPointARM -> Ordering
compare :: DataGraphPipelineSessionBindPointARM
-> DataGraphPipelineSessionBindPointARM -> Ordering
$c< :: DataGraphPipelineSessionBindPointARM
-> DataGraphPipelineSessionBindPointARM -> Bool
< :: DataGraphPipelineSessionBindPointARM
-> DataGraphPipelineSessionBindPointARM -> Bool
$c<= :: DataGraphPipelineSessionBindPointARM
-> DataGraphPipelineSessionBindPointARM -> Bool
<= :: DataGraphPipelineSessionBindPointARM
-> DataGraphPipelineSessionBindPointARM -> Bool
$c> :: DataGraphPipelineSessionBindPointARM
-> DataGraphPipelineSessionBindPointARM -> Bool
> :: DataGraphPipelineSessionBindPointARM
-> DataGraphPipelineSessionBindPointARM -> Bool
$c>= :: DataGraphPipelineSessionBindPointARM
-> DataGraphPipelineSessionBindPointARM -> Bool
>= :: DataGraphPipelineSessionBindPointARM
-> DataGraphPipelineSessionBindPointARM -> Bool
$cmax :: DataGraphPipelineSessionBindPointARM
-> DataGraphPipelineSessionBindPointARM
-> DataGraphPipelineSessionBindPointARM
max :: DataGraphPipelineSessionBindPointARM
-> DataGraphPipelineSessionBindPointARM
-> DataGraphPipelineSessionBindPointARM
$cmin :: DataGraphPipelineSessionBindPointARM
-> DataGraphPipelineSessionBindPointARM
-> DataGraphPipelineSessionBindPointARM
min :: DataGraphPipelineSessionBindPointARM
-> DataGraphPipelineSessionBindPointARM
-> DataGraphPipelineSessionBindPointARM
Ord, Ptr DataGraphPipelineSessionBindPointARM
-> IO DataGraphPipelineSessionBindPointARM
Ptr DataGraphPipelineSessionBindPointARM
-> Int -> IO DataGraphPipelineSessionBindPointARM
Ptr DataGraphPipelineSessionBindPointARM
-> Int -> DataGraphPipelineSessionBindPointARM -> IO ()
Ptr DataGraphPipelineSessionBindPointARM
-> DataGraphPipelineSessionBindPointARM -> IO ()
DataGraphPipelineSessionBindPointARM -> Int
(DataGraphPipelineSessionBindPointARM -> Int)
-> (DataGraphPipelineSessionBindPointARM -> Int)
-> (Ptr DataGraphPipelineSessionBindPointARM
    -> Int -> IO DataGraphPipelineSessionBindPointARM)
-> (Ptr DataGraphPipelineSessionBindPointARM
    -> Int -> DataGraphPipelineSessionBindPointARM -> IO ())
-> (forall b.
    Ptr b -> Int -> IO DataGraphPipelineSessionBindPointARM)
-> (forall b.
    Ptr b -> Int -> DataGraphPipelineSessionBindPointARM -> IO ())
-> (Ptr DataGraphPipelineSessionBindPointARM
    -> IO DataGraphPipelineSessionBindPointARM)
-> (Ptr DataGraphPipelineSessionBindPointARM
    -> DataGraphPipelineSessionBindPointARM -> IO ())
-> Storable DataGraphPipelineSessionBindPointARM
forall b. Ptr b -> Int -> IO DataGraphPipelineSessionBindPointARM
forall b.
Ptr b -> Int -> DataGraphPipelineSessionBindPointARM -> IO ()
forall a.
(a -> Int)
-> (a -> Int)
-> (Ptr a -> Int -> IO a)
-> (Ptr a -> Int -> a -> IO ())
-> (forall b. Ptr b -> Int -> IO a)
-> (forall b. Ptr b -> Int -> a -> IO ())
-> (Ptr a -> IO a)
-> (Ptr a -> a -> IO ())
-> Storable a
$csizeOf :: DataGraphPipelineSessionBindPointARM -> Int
sizeOf :: DataGraphPipelineSessionBindPointARM -> Int
$calignment :: DataGraphPipelineSessionBindPointARM -> Int
alignment :: DataGraphPipelineSessionBindPointARM -> Int
$cpeekElemOff :: Ptr DataGraphPipelineSessionBindPointARM
-> Int -> IO DataGraphPipelineSessionBindPointARM
peekElemOff :: Ptr DataGraphPipelineSessionBindPointARM
-> Int -> IO DataGraphPipelineSessionBindPointARM
$cpokeElemOff :: Ptr DataGraphPipelineSessionBindPointARM
-> Int -> DataGraphPipelineSessionBindPointARM -> IO ()
pokeElemOff :: Ptr DataGraphPipelineSessionBindPointARM
-> Int -> DataGraphPipelineSessionBindPointARM -> IO ()
$cpeekByteOff :: forall b. Ptr b -> Int -> IO DataGraphPipelineSessionBindPointARM
peekByteOff :: forall b. Ptr b -> Int -> IO DataGraphPipelineSessionBindPointARM
$cpokeByteOff :: forall b.
Ptr b -> Int -> DataGraphPipelineSessionBindPointARM -> IO ()
pokeByteOff :: forall b.
Ptr b -> Int -> DataGraphPipelineSessionBindPointARM -> IO ()
$cpeek :: Ptr DataGraphPipelineSessionBindPointARM
-> IO DataGraphPipelineSessionBindPointARM
peek :: Ptr DataGraphPipelineSessionBindPointARM
-> IO DataGraphPipelineSessionBindPointARM
$cpoke :: Ptr DataGraphPipelineSessionBindPointARM
-> DataGraphPipelineSessionBindPointARM -> IO ()
poke :: Ptr DataGraphPipelineSessionBindPointARM
-> DataGraphPipelineSessionBindPointARM -> IO ()
Storable, DataGraphPipelineSessionBindPointARM
DataGraphPipelineSessionBindPointARM
-> Zero DataGraphPipelineSessionBindPointARM
forall a. a -> Zero a
$czero :: DataGraphPipelineSessionBindPointARM
zero :: DataGraphPipelineSessionBindPointARM
Zero)

-- No documentation found for Nested "VkDataGraphPipelineSessionBindPointARM" "VK_DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_TRANSIENT_ARM"
pattern $mDATA_GRAPH_PIPELINE_SESSION_BIND_POINT_TRANSIENT_ARM :: forall {r}.
DataGraphPipelineSessionBindPointARM
-> ((# #) -> r) -> ((# #) -> r) -> r
$bDATA_GRAPH_PIPELINE_SESSION_BIND_POINT_TRANSIENT_ARM :: DataGraphPipelineSessionBindPointARM
DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_TRANSIENT_ARM = DataGraphPipelineSessionBindPointARM 0

{-# COMPLETE DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_TRANSIENT_ARM :: DataGraphPipelineSessionBindPointARM #-}

conNameDataGraphPipelineSessionBindPointARM :: String
conNameDataGraphPipelineSessionBindPointARM :: String
conNameDataGraphPipelineSessionBindPointARM = String
"DataGraphPipelineSessionBindPointARM"

enumPrefixDataGraphPipelineSessionBindPointARM :: String
enumPrefixDataGraphPipelineSessionBindPointARM :: String
enumPrefixDataGraphPipelineSessionBindPointARM = String
"DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_TRANSIENT_ARM"

showTableDataGraphPipelineSessionBindPointARM :: [(DataGraphPipelineSessionBindPointARM, String)]
showTableDataGraphPipelineSessionBindPointARM :: [(DataGraphPipelineSessionBindPointARM, String)]
showTableDataGraphPipelineSessionBindPointARM =
  [
    ( DataGraphPipelineSessionBindPointARM
DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_TRANSIENT_ARM
    , String
""
    )
  ]

instance Show DataGraphPipelineSessionBindPointARM where
  showsPrec :: Int -> DataGraphPipelineSessionBindPointARM -> ShowS
showsPrec =
    String
-> [(DataGraphPipelineSessionBindPointARM, String)]
-> String
-> (DataGraphPipelineSessionBindPointARM -> Int32)
-> (Int32 -> ShowS)
-> Int
-> DataGraphPipelineSessionBindPointARM
-> ShowS
forall a i.
Eq a =>
String
-> [(a, String)]
-> String
-> (a -> i)
-> (i -> ShowS)
-> Int
-> a
-> ShowS
enumShowsPrec
      String
enumPrefixDataGraphPipelineSessionBindPointARM
      [(DataGraphPipelineSessionBindPointARM, String)]
showTableDataGraphPipelineSessionBindPointARM
      String
conNameDataGraphPipelineSessionBindPointARM
      (\(DataGraphPipelineSessionBindPointARM Int32
x) -> Int32
x)
      (Int -> Int32 -> ShowS
forall a. Show a => Int -> a -> ShowS
showsPrec Int
11)

instance Read DataGraphPipelineSessionBindPointARM where
  readPrec :: ReadPrec DataGraphPipelineSessionBindPointARM
readPrec =
    String
-> [(DataGraphPipelineSessionBindPointARM, String)]
-> String
-> (Int32 -> DataGraphPipelineSessionBindPointARM)
-> ReadPrec DataGraphPipelineSessionBindPointARM
forall i a.
Read i =>
String -> [(a, String)] -> String -> (i -> a) -> ReadPrec a
enumReadPrec
      String
enumPrefixDataGraphPipelineSessionBindPointARM
      [(DataGraphPipelineSessionBindPointARM, String)]
showTableDataGraphPipelineSessionBindPointARM
      String
conNameDataGraphPipelineSessionBindPointARM
      Int32 -> DataGraphPipelineSessionBindPointARM
DataGraphPipelineSessionBindPointARM

-- | VkDataGraphPipelineSessionBindPointTypeARM - Enumeration describing the
-- type of bind points of a data graph pipeline session
--
-- = Description
--
-- -   'DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_TYPE_MEMORY_ARM' corresponds
--     to a memory allocation.
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ARM_data_graph VK_ARM_data_graph>,
-- 'DataGraphPipelineSessionBindPointRequirementARM'
newtype DataGraphPipelineSessionBindPointTypeARM = DataGraphPipelineSessionBindPointTypeARM Int32
  deriving newtype (DataGraphPipelineSessionBindPointTypeARM
-> DataGraphPipelineSessionBindPointTypeARM -> Bool
(DataGraphPipelineSessionBindPointTypeARM
 -> DataGraphPipelineSessionBindPointTypeARM -> Bool)
-> (DataGraphPipelineSessionBindPointTypeARM
    -> DataGraphPipelineSessionBindPointTypeARM -> Bool)
-> Eq DataGraphPipelineSessionBindPointTypeARM
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: DataGraphPipelineSessionBindPointTypeARM
-> DataGraphPipelineSessionBindPointTypeARM -> Bool
== :: DataGraphPipelineSessionBindPointTypeARM
-> DataGraphPipelineSessionBindPointTypeARM -> Bool
$c/= :: DataGraphPipelineSessionBindPointTypeARM
-> DataGraphPipelineSessionBindPointTypeARM -> Bool
/= :: DataGraphPipelineSessionBindPointTypeARM
-> DataGraphPipelineSessionBindPointTypeARM -> Bool
Eq, Eq DataGraphPipelineSessionBindPointTypeARM
Eq DataGraphPipelineSessionBindPointTypeARM =>
(DataGraphPipelineSessionBindPointTypeARM
 -> DataGraphPipelineSessionBindPointTypeARM -> Ordering)
-> (DataGraphPipelineSessionBindPointTypeARM
    -> DataGraphPipelineSessionBindPointTypeARM -> Bool)
-> (DataGraphPipelineSessionBindPointTypeARM
    -> DataGraphPipelineSessionBindPointTypeARM -> Bool)
-> (DataGraphPipelineSessionBindPointTypeARM
    -> DataGraphPipelineSessionBindPointTypeARM -> Bool)
-> (DataGraphPipelineSessionBindPointTypeARM
    -> DataGraphPipelineSessionBindPointTypeARM -> Bool)
-> (DataGraphPipelineSessionBindPointTypeARM
    -> DataGraphPipelineSessionBindPointTypeARM
    -> DataGraphPipelineSessionBindPointTypeARM)
-> (DataGraphPipelineSessionBindPointTypeARM
    -> DataGraphPipelineSessionBindPointTypeARM
    -> DataGraphPipelineSessionBindPointTypeARM)
-> Ord DataGraphPipelineSessionBindPointTypeARM
DataGraphPipelineSessionBindPointTypeARM
-> DataGraphPipelineSessionBindPointTypeARM -> Bool
DataGraphPipelineSessionBindPointTypeARM
-> DataGraphPipelineSessionBindPointTypeARM -> Ordering
DataGraphPipelineSessionBindPointTypeARM
-> DataGraphPipelineSessionBindPointTypeARM
-> DataGraphPipelineSessionBindPointTypeARM
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: DataGraphPipelineSessionBindPointTypeARM
-> DataGraphPipelineSessionBindPointTypeARM -> Ordering
compare :: DataGraphPipelineSessionBindPointTypeARM
-> DataGraphPipelineSessionBindPointTypeARM -> Ordering
$c< :: DataGraphPipelineSessionBindPointTypeARM
-> DataGraphPipelineSessionBindPointTypeARM -> Bool
< :: DataGraphPipelineSessionBindPointTypeARM
-> DataGraphPipelineSessionBindPointTypeARM -> Bool
$c<= :: DataGraphPipelineSessionBindPointTypeARM
-> DataGraphPipelineSessionBindPointTypeARM -> Bool
<= :: DataGraphPipelineSessionBindPointTypeARM
-> DataGraphPipelineSessionBindPointTypeARM -> Bool
$c> :: DataGraphPipelineSessionBindPointTypeARM
-> DataGraphPipelineSessionBindPointTypeARM -> Bool
> :: DataGraphPipelineSessionBindPointTypeARM
-> DataGraphPipelineSessionBindPointTypeARM -> Bool
$c>= :: DataGraphPipelineSessionBindPointTypeARM
-> DataGraphPipelineSessionBindPointTypeARM -> Bool
>= :: DataGraphPipelineSessionBindPointTypeARM
-> DataGraphPipelineSessionBindPointTypeARM -> Bool
$cmax :: DataGraphPipelineSessionBindPointTypeARM
-> DataGraphPipelineSessionBindPointTypeARM
-> DataGraphPipelineSessionBindPointTypeARM
max :: DataGraphPipelineSessionBindPointTypeARM
-> DataGraphPipelineSessionBindPointTypeARM
-> DataGraphPipelineSessionBindPointTypeARM
$cmin :: DataGraphPipelineSessionBindPointTypeARM
-> DataGraphPipelineSessionBindPointTypeARM
-> DataGraphPipelineSessionBindPointTypeARM
min :: DataGraphPipelineSessionBindPointTypeARM
-> DataGraphPipelineSessionBindPointTypeARM
-> DataGraphPipelineSessionBindPointTypeARM
Ord, Ptr DataGraphPipelineSessionBindPointTypeARM
-> IO DataGraphPipelineSessionBindPointTypeARM
Ptr DataGraphPipelineSessionBindPointTypeARM
-> Int -> IO DataGraphPipelineSessionBindPointTypeARM
Ptr DataGraphPipelineSessionBindPointTypeARM
-> Int -> DataGraphPipelineSessionBindPointTypeARM -> IO ()
Ptr DataGraphPipelineSessionBindPointTypeARM
-> DataGraphPipelineSessionBindPointTypeARM -> IO ()
DataGraphPipelineSessionBindPointTypeARM -> Int
(DataGraphPipelineSessionBindPointTypeARM -> Int)
-> (DataGraphPipelineSessionBindPointTypeARM -> Int)
-> (Ptr DataGraphPipelineSessionBindPointTypeARM
    -> Int -> IO DataGraphPipelineSessionBindPointTypeARM)
-> (Ptr DataGraphPipelineSessionBindPointTypeARM
    -> Int -> DataGraphPipelineSessionBindPointTypeARM -> IO ())
-> (forall b.
    Ptr b -> Int -> IO DataGraphPipelineSessionBindPointTypeARM)
-> (forall b.
    Ptr b -> Int -> DataGraphPipelineSessionBindPointTypeARM -> IO ())
-> (Ptr DataGraphPipelineSessionBindPointTypeARM
    -> IO DataGraphPipelineSessionBindPointTypeARM)
-> (Ptr DataGraphPipelineSessionBindPointTypeARM
    -> DataGraphPipelineSessionBindPointTypeARM -> IO ())
-> Storable DataGraphPipelineSessionBindPointTypeARM
forall b.
Ptr b -> Int -> IO DataGraphPipelineSessionBindPointTypeARM
forall b.
Ptr b -> Int -> DataGraphPipelineSessionBindPointTypeARM -> IO ()
forall a.
(a -> Int)
-> (a -> Int)
-> (Ptr a -> Int -> IO a)
-> (Ptr a -> Int -> a -> IO ())
-> (forall b. Ptr b -> Int -> IO a)
-> (forall b. Ptr b -> Int -> a -> IO ())
-> (Ptr a -> IO a)
-> (Ptr a -> a -> IO ())
-> Storable a
$csizeOf :: DataGraphPipelineSessionBindPointTypeARM -> Int
sizeOf :: DataGraphPipelineSessionBindPointTypeARM -> Int
$calignment :: DataGraphPipelineSessionBindPointTypeARM -> Int
alignment :: DataGraphPipelineSessionBindPointTypeARM -> Int
$cpeekElemOff :: Ptr DataGraphPipelineSessionBindPointTypeARM
-> Int -> IO DataGraphPipelineSessionBindPointTypeARM
peekElemOff :: Ptr DataGraphPipelineSessionBindPointTypeARM
-> Int -> IO DataGraphPipelineSessionBindPointTypeARM
$cpokeElemOff :: Ptr DataGraphPipelineSessionBindPointTypeARM
-> Int -> DataGraphPipelineSessionBindPointTypeARM -> IO ()
pokeElemOff :: Ptr DataGraphPipelineSessionBindPointTypeARM
-> Int -> DataGraphPipelineSessionBindPointTypeARM -> IO ()
$cpeekByteOff :: forall b.
Ptr b -> Int -> IO DataGraphPipelineSessionBindPointTypeARM
peekByteOff :: forall b.
Ptr b -> Int -> IO DataGraphPipelineSessionBindPointTypeARM
$cpokeByteOff :: forall b.
Ptr b -> Int -> DataGraphPipelineSessionBindPointTypeARM -> IO ()
pokeByteOff :: forall b.
Ptr b -> Int -> DataGraphPipelineSessionBindPointTypeARM -> IO ()
$cpeek :: Ptr DataGraphPipelineSessionBindPointTypeARM
-> IO DataGraphPipelineSessionBindPointTypeARM
peek :: Ptr DataGraphPipelineSessionBindPointTypeARM
-> IO DataGraphPipelineSessionBindPointTypeARM
$cpoke :: Ptr DataGraphPipelineSessionBindPointTypeARM
-> DataGraphPipelineSessionBindPointTypeARM -> IO ()
poke :: Ptr DataGraphPipelineSessionBindPointTypeARM
-> DataGraphPipelineSessionBindPointTypeARM -> IO ()
Storable, DataGraphPipelineSessionBindPointTypeARM
DataGraphPipelineSessionBindPointTypeARM
-> Zero DataGraphPipelineSessionBindPointTypeARM
forall a. a -> Zero a
$czero :: DataGraphPipelineSessionBindPointTypeARM
zero :: DataGraphPipelineSessionBindPointTypeARM
Zero)

-- No documentation found for Nested "VkDataGraphPipelineSessionBindPointTypeARM" "VK_DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_TYPE_MEMORY_ARM"
pattern $mDATA_GRAPH_PIPELINE_SESSION_BIND_POINT_TYPE_MEMORY_ARM :: forall {r}.
DataGraphPipelineSessionBindPointTypeARM
-> ((# #) -> r) -> ((# #) -> r) -> r
$bDATA_GRAPH_PIPELINE_SESSION_BIND_POINT_TYPE_MEMORY_ARM :: DataGraphPipelineSessionBindPointTypeARM
DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_TYPE_MEMORY_ARM = DataGraphPipelineSessionBindPointTypeARM 0

{-# COMPLETE DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_TYPE_MEMORY_ARM :: DataGraphPipelineSessionBindPointTypeARM #-}

conNameDataGraphPipelineSessionBindPointTypeARM :: String
conNameDataGraphPipelineSessionBindPointTypeARM :: String
conNameDataGraphPipelineSessionBindPointTypeARM = String
"DataGraphPipelineSessionBindPointTypeARM"

enumPrefixDataGraphPipelineSessionBindPointTypeARM :: String
enumPrefixDataGraphPipelineSessionBindPointTypeARM :: String
enumPrefixDataGraphPipelineSessionBindPointTypeARM = String
"DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_TYPE_MEMORY_ARM"

showTableDataGraphPipelineSessionBindPointTypeARM :: [(DataGraphPipelineSessionBindPointTypeARM, String)]
showTableDataGraphPipelineSessionBindPointTypeARM :: [(DataGraphPipelineSessionBindPointTypeARM, String)]
showTableDataGraphPipelineSessionBindPointTypeARM =
  [
    ( DataGraphPipelineSessionBindPointTypeARM
DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_TYPE_MEMORY_ARM
    , String
""
    )
  ]

instance Show DataGraphPipelineSessionBindPointTypeARM where
  showsPrec :: Int -> DataGraphPipelineSessionBindPointTypeARM -> ShowS
showsPrec =
    String
-> [(DataGraphPipelineSessionBindPointTypeARM, String)]
-> String
-> (DataGraphPipelineSessionBindPointTypeARM -> Int32)
-> (Int32 -> ShowS)
-> Int
-> DataGraphPipelineSessionBindPointTypeARM
-> ShowS
forall a i.
Eq a =>
String
-> [(a, String)]
-> String
-> (a -> i)
-> (i -> ShowS)
-> Int
-> a
-> ShowS
enumShowsPrec
      String
enumPrefixDataGraphPipelineSessionBindPointTypeARM
      [(DataGraphPipelineSessionBindPointTypeARM, String)]
showTableDataGraphPipelineSessionBindPointTypeARM
      String
conNameDataGraphPipelineSessionBindPointTypeARM
      (\(DataGraphPipelineSessionBindPointTypeARM Int32
x) -> Int32
x)
      (Int -> Int32 -> ShowS
forall a. Show a => Int -> a -> ShowS
showsPrec Int
11)

instance Read DataGraphPipelineSessionBindPointTypeARM where
  readPrec :: ReadPrec DataGraphPipelineSessionBindPointTypeARM
readPrec =
    String
-> [(DataGraphPipelineSessionBindPointTypeARM, String)]
-> String
-> (Int32 -> DataGraphPipelineSessionBindPointTypeARM)
-> ReadPrec DataGraphPipelineSessionBindPointTypeARM
forall i a.
Read i =>
String -> [(a, String)] -> String -> (i -> a) -> ReadPrec a
enumReadPrec
      String
enumPrefixDataGraphPipelineSessionBindPointTypeARM
      [(DataGraphPipelineSessionBindPointTypeARM, String)]
showTableDataGraphPipelineSessionBindPointTypeARM
      String
conNameDataGraphPipelineSessionBindPointTypeARM
      Int32 -> DataGraphPipelineSessionBindPointTypeARM
DataGraphPipelineSessionBindPointTypeARM

-- | VkDataGraphPipelinePropertyARM - Enumeration describing the properties
-- of a data graph pipeline that can be queried
--
-- = Description
--
-- -   'DATA_GRAPH_PIPELINE_PROPERTY_CREATION_LOG_ARM' corresponds to a
--     human-readable log produced during the creation of a data graph
--     pipeline. It /may/ contain information about errors encountered
--     during the creation or other information generally useful for
--     debugging. This property /can/ be queried for any data graph
--     pipeline.
--
-- -   'DATA_GRAPH_PIPELINE_PROPERTY_IDENTIFIER_ARM' corresponds to an
--     opaque identifier for the data graph pipeline. It /can/ be used to
--     create a graph pipeline from a pipeline cache without the need to
--     provide any creation data beyond the identifier, using a
--     'DataGraphPipelineIdentifierCreateInfoARM' structure.
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ARM_data_graph VK_ARM_data_graph>,
-- 'DataGraphPipelinePropertyQueryResultARM',
-- 'getDataGraphPipelineAvailablePropertiesARM'
newtype DataGraphPipelinePropertyARM = DataGraphPipelinePropertyARM Int32
  deriving newtype (DataGraphPipelinePropertyARM
-> DataGraphPipelinePropertyARM -> Bool
(DataGraphPipelinePropertyARM
 -> DataGraphPipelinePropertyARM -> Bool)
-> (DataGraphPipelinePropertyARM
    -> DataGraphPipelinePropertyARM -> Bool)
-> Eq DataGraphPipelinePropertyARM
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: DataGraphPipelinePropertyARM
-> DataGraphPipelinePropertyARM -> Bool
== :: DataGraphPipelinePropertyARM
-> DataGraphPipelinePropertyARM -> Bool
$c/= :: DataGraphPipelinePropertyARM
-> DataGraphPipelinePropertyARM -> Bool
/= :: DataGraphPipelinePropertyARM
-> DataGraphPipelinePropertyARM -> Bool
Eq, Eq DataGraphPipelinePropertyARM
Eq DataGraphPipelinePropertyARM =>
(DataGraphPipelinePropertyARM
 -> DataGraphPipelinePropertyARM -> Ordering)
-> (DataGraphPipelinePropertyARM
    -> DataGraphPipelinePropertyARM -> Bool)
-> (DataGraphPipelinePropertyARM
    -> DataGraphPipelinePropertyARM -> Bool)
-> (DataGraphPipelinePropertyARM
    -> DataGraphPipelinePropertyARM -> Bool)
-> (DataGraphPipelinePropertyARM
    -> DataGraphPipelinePropertyARM -> Bool)
-> (DataGraphPipelinePropertyARM
    -> DataGraphPipelinePropertyARM -> DataGraphPipelinePropertyARM)
-> (DataGraphPipelinePropertyARM
    -> DataGraphPipelinePropertyARM -> DataGraphPipelinePropertyARM)
-> Ord DataGraphPipelinePropertyARM
DataGraphPipelinePropertyARM
-> DataGraphPipelinePropertyARM -> Bool
DataGraphPipelinePropertyARM
-> DataGraphPipelinePropertyARM -> Ordering
DataGraphPipelinePropertyARM
-> DataGraphPipelinePropertyARM -> DataGraphPipelinePropertyARM
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: DataGraphPipelinePropertyARM
-> DataGraphPipelinePropertyARM -> Ordering
compare :: DataGraphPipelinePropertyARM
-> DataGraphPipelinePropertyARM -> Ordering
$c< :: DataGraphPipelinePropertyARM
-> DataGraphPipelinePropertyARM -> Bool
< :: DataGraphPipelinePropertyARM
-> DataGraphPipelinePropertyARM -> Bool
$c<= :: DataGraphPipelinePropertyARM
-> DataGraphPipelinePropertyARM -> Bool
<= :: DataGraphPipelinePropertyARM
-> DataGraphPipelinePropertyARM -> Bool
$c> :: DataGraphPipelinePropertyARM
-> DataGraphPipelinePropertyARM -> Bool
> :: DataGraphPipelinePropertyARM
-> DataGraphPipelinePropertyARM -> Bool
$c>= :: DataGraphPipelinePropertyARM
-> DataGraphPipelinePropertyARM -> Bool
>= :: DataGraphPipelinePropertyARM
-> DataGraphPipelinePropertyARM -> Bool
$cmax :: DataGraphPipelinePropertyARM
-> DataGraphPipelinePropertyARM -> DataGraphPipelinePropertyARM
max :: DataGraphPipelinePropertyARM
-> DataGraphPipelinePropertyARM -> DataGraphPipelinePropertyARM
$cmin :: DataGraphPipelinePropertyARM
-> DataGraphPipelinePropertyARM -> DataGraphPipelinePropertyARM
min :: DataGraphPipelinePropertyARM
-> DataGraphPipelinePropertyARM -> DataGraphPipelinePropertyARM
Ord, Ptr DataGraphPipelinePropertyARM -> IO DataGraphPipelinePropertyARM
Ptr DataGraphPipelinePropertyARM
-> Int -> IO DataGraphPipelinePropertyARM
Ptr DataGraphPipelinePropertyARM
-> Int -> DataGraphPipelinePropertyARM -> IO ()
Ptr DataGraphPipelinePropertyARM
-> DataGraphPipelinePropertyARM -> IO ()
DataGraphPipelinePropertyARM -> Int
(DataGraphPipelinePropertyARM -> Int)
-> (DataGraphPipelinePropertyARM -> Int)
-> (Ptr DataGraphPipelinePropertyARM
    -> Int -> IO DataGraphPipelinePropertyARM)
-> (Ptr DataGraphPipelinePropertyARM
    -> Int -> DataGraphPipelinePropertyARM -> IO ())
-> (forall b. Ptr b -> Int -> IO DataGraphPipelinePropertyARM)
-> (forall b.
    Ptr b -> Int -> DataGraphPipelinePropertyARM -> IO ())
-> (Ptr DataGraphPipelinePropertyARM
    -> IO DataGraphPipelinePropertyARM)
-> (Ptr DataGraphPipelinePropertyARM
    -> DataGraphPipelinePropertyARM -> IO ())
-> Storable DataGraphPipelinePropertyARM
forall b. Ptr b -> Int -> IO DataGraphPipelinePropertyARM
forall b. Ptr b -> Int -> DataGraphPipelinePropertyARM -> IO ()
forall a.
(a -> Int)
-> (a -> Int)
-> (Ptr a -> Int -> IO a)
-> (Ptr a -> Int -> a -> IO ())
-> (forall b. Ptr b -> Int -> IO a)
-> (forall b. Ptr b -> Int -> a -> IO ())
-> (Ptr a -> IO a)
-> (Ptr a -> a -> IO ())
-> Storable a
$csizeOf :: DataGraphPipelinePropertyARM -> Int
sizeOf :: DataGraphPipelinePropertyARM -> Int
$calignment :: DataGraphPipelinePropertyARM -> Int
alignment :: DataGraphPipelinePropertyARM -> Int
$cpeekElemOff :: Ptr DataGraphPipelinePropertyARM
-> Int -> IO DataGraphPipelinePropertyARM
peekElemOff :: Ptr DataGraphPipelinePropertyARM
-> Int -> IO DataGraphPipelinePropertyARM
$cpokeElemOff :: Ptr DataGraphPipelinePropertyARM
-> Int -> DataGraphPipelinePropertyARM -> IO ()
pokeElemOff :: Ptr DataGraphPipelinePropertyARM
-> Int -> DataGraphPipelinePropertyARM -> IO ()
$cpeekByteOff :: forall b. Ptr b -> Int -> IO DataGraphPipelinePropertyARM
peekByteOff :: forall b. Ptr b -> Int -> IO DataGraphPipelinePropertyARM
$cpokeByteOff :: forall b. Ptr b -> Int -> DataGraphPipelinePropertyARM -> IO ()
pokeByteOff :: forall b. Ptr b -> Int -> DataGraphPipelinePropertyARM -> IO ()
$cpeek :: Ptr DataGraphPipelinePropertyARM -> IO DataGraphPipelinePropertyARM
peek :: Ptr DataGraphPipelinePropertyARM -> IO DataGraphPipelinePropertyARM
$cpoke :: Ptr DataGraphPipelinePropertyARM
-> DataGraphPipelinePropertyARM -> IO ()
poke :: Ptr DataGraphPipelinePropertyARM
-> DataGraphPipelinePropertyARM -> IO ()
Storable, DataGraphPipelinePropertyARM
DataGraphPipelinePropertyARM -> Zero DataGraphPipelinePropertyARM
forall a. a -> Zero a
$czero :: DataGraphPipelinePropertyARM
zero :: DataGraphPipelinePropertyARM
Zero)

-- No documentation found for Nested "VkDataGraphPipelinePropertyARM" "VK_DATA_GRAPH_PIPELINE_PROPERTY_CREATION_LOG_ARM"
pattern $mDATA_GRAPH_PIPELINE_PROPERTY_CREATION_LOG_ARM :: forall {r}.
DataGraphPipelinePropertyARM -> ((# #) -> r) -> ((# #) -> r) -> r
$bDATA_GRAPH_PIPELINE_PROPERTY_CREATION_LOG_ARM :: DataGraphPipelinePropertyARM
DATA_GRAPH_PIPELINE_PROPERTY_CREATION_LOG_ARM = DataGraphPipelinePropertyARM 0

-- No documentation found for Nested "VkDataGraphPipelinePropertyARM" "VK_DATA_GRAPH_PIPELINE_PROPERTY_IDENTIFIER_ARM"
pattern $mDATA_GRAPH_PIPELINE_PROPERTY_IDENTIFIER_ARM :: forall {r}.
DataGraphPipelinePropertyARM -> ((# #) -> r) -> ((# #) -> r) -> r
$bDATA_GRAPH_PIPELINE_PROPERTY_IDENTIFIER_ARM :: DataGraphPipelinePropertyARM
DATA_GRAPH_PIPELINE_PROPERTY_IDENTIFIER_ARM = DataGraphPipelinePropertyARM 1

{-# COMPLETE
  DATA_GRAPH_PIPELINE_PROPERTY_CREATION_LOG_ARM
  , DATA_GRAPH_PIPELINE_PROPERTY_IDENTIFIER_ARM ::
    DataGraphPipelinePropertyARM
  #-}

conNameDataGraphPipelinePropertyARM :: String
conNameDataGraphPipelinePropertyARM :: String
conNameDataGraphPipelinePropertyARM = String
"DataGraphPipelinePropertyARM"

enumPrefixDataGraphPipelinePropertyARM :: String
enumPrefixDataGraphPipelinePropertyARM :: String
enumPrefixDataGraphPipelinePropertyARM = String
"DATA_GRAPH_PIPELINE_PROPERTY_"

showTableDataGraphPipelinePropertyARM :: [(DataGraphPipelinePropertyARM, String)]
showTableDataGraphPipelinePropertyARM :: [(DataGraphPipelinePropertyARM, String)]
showTableDataGraphPipelinePropertyARM =
  [
    ( DataGraphPipelinePropertyARM
DATA_GRAPH_PIPELINE_PROPERTY_CREATION_LOG_ARM
    , String
"CREATION_LOG_ARM"
    )
  ,
    ( DataGraphPipelinePropertyARM
DATA_GRAPH_PIPELINE_PROPERTY_IDENTIFIER_ARM
    , String
"IDENTIFIER_ARM"
    )
  ]

instance Show DataGraphPipelinePropertyARM where
  showsPrec :: Int -> DataGraphPipelinePropertyARM -> ShowS
showsPrec =
    String
-> [(DataGraphPipelinePropertyARM, String)]
-> String
-> (DataGraphPipelinePropertyARM -> Int32)
-> (Int32 -> ShowS)
-> Int
-> DataGraphPipelinePropertyARM
-> ShowS
forall a i.
Eq a =>
String
-> [(a, String)]
-> String
-> (a -> i)
-> (i -> ShowS)
-> Int
-> a
-> ShowS
enumShowsPrec
      String
enumPrefixDataGraphPipelinePropertyARM
      [(DataGraphPipelinePropertyARM, String)]
showTableDataGraphPipelinePropertyARM
      String
conNameDataGraphPipelinePropertyARM
      (\(DataGraphPipelinePropertyARM Int32
x) -> Int32
x)
      (Int -> Int32 -> ShowS
forall a. Show a => Int -> a -> ShowS
showsPrec Int
11)

instance Read DataGraphPipelinePropertyARM where
  readPrec :: ReadPrec DataGraphPipelinePropertyARM
readPrec =
    String
-> [(DataGraphPipelinePropertyARM, String)]
-> String
-> (Int32 -> DataGraphPipelinePropertyARM)
-> ReadPrec DataGraphPipelinePropertyARM
forall i a.
Read i =>
String -> [(a, String)] -> String -> (i -> a) -> ReadPrec a
enumReadPrec
      String
enumPrefixDataGraphPipelinePropertyARM
      [(DataGraphPipelinePropertyARM, String)]
showTableDataGraphPipelinePropertyARM
      String
conNameDataGraphPipelinePropertyARM
      Int32 -> DataGraphPipelinePropertyARM
DataGraphPipelinePropertyARM

type DataGraphPipelineDispatchFlagsARM = DataGraphPipelineDispatchFlagBitsARM

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

conNameDataGraphPipelineDispatchFlagBitsARM :: String
conNameDataGraphPipelineDispatchFlagBitsARM :: String
conNameDataGraphPipelineDispatchFlagBitsARM = String
"DataGraphPipelineDispatchFlagBitsARM"

enumPrefixDataGraphPipelineDispatchFlagBitsARM :: String
enumPrefixDataGraphPipelineDispatchFlagBitsARM :: String
enumPrefixDataGraphPipelineDispatchFlagBitsARM = String
""

showTableDataGraphPipelineDispatchFlagBitsARM :: [(DataGraphPipelineDispatchFlagBitsARM, String)]
showTableDataGraphPipelineDispatchFlagBitsARM :: [(DataGraphPipelineDispatchFlagsARM, String)]
showTableDataGraphPipelineDispatchFlagBitsARM = []

instance Show DataGraphPipelineDispatchFlagBitsARM where
  showsPrec :: Int -> DataGraphPipelineDispatchFlagsARM -> ShowS
showsPrec =
    String
-> [(DataGraphPipelineDispatchFlagsARM, String)]
-> String
-> (DataGraphPipelineDispatchFlagsARM -> Word64)
-> (Word64 -> ShowS)
-> Int
-> DataGraphPipelineDispatchFlagsARM
-> ShowS
forall a i.
Eq a =>
String
-> [(a, String)]
-> String
-> (a -> i)
-> (i -> ShowS)
-> Int
-> a
-> ShowS
enumShowsPrec
      String
enumPrefixDataGraphPipelineDispatchFlagBitsARM
      [(DataGraphPipelineDispatchFlagsARM, String)]
showTableDataGraphPipelineDispatchFlagBitsARM
      String
conNameDataGraphPipelineDispatchFlagBitsARM
      (\(DataGraphPipelineDispatchFlagBitsARM Word64
x) -> Word64
x)
      (\Word64
x -> String -> ShowS
showString String
"0x" ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Word64 -> ShowS
forall a. Integral a => a -> ShowS
showHex Word64
x)

instance Read DataGraphPipelineDispatchFlagBitsARM where
  readPrec :: ReadPrec DataGraphPipelineDispatchFlagsARM
readPrec =
    String
-> [(DataGraphPipelineDispatchFlagsARM, String)]
-> String
-> (Word64 -> DataGraphPipelineDispatchFlagsARM)
-> ReadPrec DataGraphPipelineDispatchFlagsARM
forall i a.
Read i =>
String -> [(a, String)] -> String -> (i -> a) -> ReadPrec a
enumReadPrec
      String
enumPrefixDataGraphPipelineDispatchFlagBitsARM
      [(DataGraphPipelineDispatchFlagsARM, String)]
showTableDataGraphPipelineDispatchFlagBitsARM
      String
conNameDataGraphPipelineDispatchFlagBitsARM
      Word64 -> DataGraphPipelineDispatchFlagsARM
DataGraphPipelineDispatchFlagBitsARM

-- | VkPhysicalDeviceDataGraphProcessingEngineTypeARM - Enumeration
-- describing data graph processing engines
--
-- = Description
--
-- -   'PHYSICAL_DEVICE_DATA_GRAPH_PROCESSING_ENGINE_TYPE_DEFAULT_ARM'
--     corresponds to the default data graph processing engine.
--
-- -   'PHYSICAL_DEVICE_DATA_GRAPH_PROCESSING_ENGINE_TYPE_NEURAL_QCOM'
--     specifies an engine that specializes in neural processing.
--
-- -   'PHYSICAL_DEVICE_DATA_GRAPH_PROCESSING_ENGINE_TYPE_COMPUTE_QCOM'
--     specifies an engine that uses compute processing to execute data
--     graphs.
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ARM_data_graph VK_ARM_data_graph>,
-- 'PhysicalDeviceDataGraphProcessingEngineARM',
-- 'PhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARM'
newtype PhysicalDeviceDataGraphProcessingEngineTypeARM = PhysicalDeviceDataGraphProcessingEngineTypeARM Int32
  deriving newtype (PhysicalDeviceDataGraphProcessingEngineTypeARM
-> PhysicalDeviceDataGraphProcessingEngineTypeARM -> Bool
(PhysicalDeviceDataGraphProcessingEngineTypeARM
 -> PhysicalDeviceDataGraphProcessingEngineTypeARM -> Bool)
-> (PhysicalDeviceDataGraphProcessingEngineTypeARM
    -> PhysicalDeviceDataGraphProcessingEngineTypeARM -> Bool)
-> Eq PhysicalDeviceDataGraphProcessingEngineTypeARM
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: PhysicalDeviceDataGraphProcessingEngineTypeARM
-> PhysicalDeviceDataGraphProcessingEngineTypeARM -> Bool
== :: PhysicalDeviceDataGraphProcessingEngineTypeARM
-> PhysicalDeviceDataGraphProcessingEngineTypeARM -> Bool
$c/= :: PhysicalDeviceDataGraphProcessingEngineTypeARM
-> PhysicalDeviceDataGraphProcessingEngineTypeARM -> Bool
/= :: PhysicalDeviceDataGraphProcessingEngineTypeARM
-> PhysicalDeviceDataGraphProcessingEngineTypeARM -> Bool
Eq, Eq PhysicalDeviceDataGraphProcessingEngineTypeARM
Eq PhysicalDeviceDataGraphProcessingEngineTypeARM =>
(PhysicalDeviceDataGraphProcessingEngineTypeARM
 -> PhysicalDeviceDataGraphProcessingEngineTypeARM -> Ordering)
-> (PhysicalDeviceDataGraphProcessingEngineTypeARM
    -> PhysicalDeviceDataGraphProcessingEngineTypeARM -> Bool)
-> (PhysicalDeviceDataGraphProcessingEngineTypeARM
    -> PhysicalDeviceDataGraphProcessingEngineTypeARM -> Bool)
-> (PhysicalDeviceDataGraphProcessingEngineTypeARM
    -> PhysicalDeviceDataGraphProcessingEngineTypeARM -> Bool)
-> (PhysicalDeviceDataGraphProcessingEngineTypeARM
    -> PhysicalDeviceDataGraphProcessingEngineTypeARM -> Bool)
-> (PhysicalDeviceDataGraphProcessingEngineTypeARM
    -> PhysicalDeviceDataGraphProcessingEngineTypeARM
    -> PhysicalDeviceDataGraphProcessingEngineTypeARM)
-> (PhysicalDeviceDataGraphProcessingEngineTypeARM
    -> PhysicalDeviceDataGraphProcessingEngineTypeARM
    -> PhysicalDeviceDataGraphProcessingEngineTypeARM)
-> Ord PhysicalDeviceDataGraphProcessingEngineTypeARM
PhysicalDeviceDataGraphProcessingEngineTypeARM
-> PhysicalDeviceDataGraphProcessingEngineTypeARM -> Bool
PhysicalDeviceDataGraphProcessingEngineTypeARM
-> PhysicalDeviceDataGraphProcessingEngineTypeARM -> Ordering
PhysicalDeviceDataGraphProcessingEngineTypeARM
-> PhysicalDeviceDataGraphProcessingEngineTypeARM
-> PhysicalDeviceDataGraphProcessingEngineTypeARM
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: PhysicalDeviceDataGraphProcessingEngineTypeARM
-> PhysicalDeviceDataGraphProcessingEngineTypeARM -> Ordering
compare :: PhysicalDeviceDataGraphProcessingEngineTypeARM
-> PhysicalDeviceDataGraphProcessingEngineTypeARM -> Ordering
$c< :: PhysicalDeviceDataGraphProcessingEngineTypeARM
-> PhysicalDeviceDataGraphProcessingEngineTypeARM -> Bool
< :: PhysicalDeviceDataGraphProcessingEngineTypeARM
-> PhysicalDeviceDataGraphProcessingEngineTypeARM -> Bool
$c<= :: PhysicalDeviceDataGraphProcessingEngineTypeARM
-> PhysicalDeviceDataGraphProcessingEngineTypeARM -> Bool
<= :: PhysicalDeviceDataGraphProcessingEngineTypeARM
-> PhysicalDeviceDataGraphProcessingEngineTypeARM -> Bool
$c> :: PhysicalDeviceDataGraphProcessingEngineTypeARM
-> PhysicalDeviceDataGraphProcessingEngineTypeARM -> Bool
> :: PhysicalDeviceDataGraphProcessingEngineTypeARM
-> PhysicalDeviceDataGraphProcessingEngineTypeARM -> Bool
$c>= :: PhysicalDeviceDataGraphProcessingEngineTypeARM
-> PhysicalDeviceDataGraphProcessingEngineTypeARM -> Bool
>= :: PhysicalDeviceDataGraphProcessingEngineTypeARM
-> PhysicalDeviceDataGraphProcessingEngineTypeARM -> Bool
$cmax :: PhysicalDeviceDataGraphProcessingEngineTypeARM
-> PhysicalDeviceDataGraphProcessingEngineTypeARM
-> PhysicalDeviceDataGraphProcessingEngineTypeARM
max :: PhysicalDeviceDataGraphProcessingEngineTypeARM
-> PhysicalDeviceDataGraphProcessingEngineTypeARM
-> PhysicalDeviceDataGraphProcessingEngineTypeARM
$cmin :: PhysicalDeviceDataGraphProcessingEngineTypeARM
-> PhysicalDeviceDataGraphProcessingEngineTypeARM
-> PhysicalDeviceDataGraphProcessingEngineTypeARM
min :: PhysicalDeviceDataGraphProcessingEngineTypeARM
-> PhysicalDeviceDataGraphProcessingEngineTypeARM
-> PhysicalDeviceDataGraphProcessingEngineTypeARM
Ord, Ptr PhysicalDeviceDataGraphProcessingEngineTypeARM
-> IO PhysicalDeviceDataGraphProcessingEngineTypeARM
Ptr PhysicalDeviceDataGraphProcessingEngineTypeARM
-> Int -> IO PhysicalDeviceDataGraphProcessingEngineTypeARM
Ptr PhysicalDeviceDataGraphProcessingEngineTypeARM
-> Int -> PhysicalDeviceDataGraphProcessingEngineTypeARM -> IO ()
Ptr PhysicalDeviceDataGraphProcessingEngineTypeARM
-> PhysicalDeviceDataGraphProcessingEngineTypeARM -> IO ()
PhysicalDeviceDataGraphProcessingEngineTypeARM -> Int
(PhysicalDeviceDataGraphProcessingEngineTypeARM -> Int)
-> (PhysicalDeviceDataGraphProcessingEngineTypeARM -> Int)
-> (Ptr PhysicalDeviceDataGraphProcessingEngineTypeARM
    -> Int -> IO PhysicalDeviceDataGraphProcessingEngineTypeARM)
-> (Ptr PhysicalDeviceDataGraphProcessingEngineTypeARM
    -> Int -> PhysicalDeviceDataGraphProcessingEngineTypeARM -> IO ())
-> (forall b.
    Ptr b -> Int -> IO PhysicalDeviceDataGraphProcessingEngineTypeARM)
-> (forall b.
    Ptr b
    -> Int -> PhysicalDeviceDataGraphProcessingEngineTypeARM -> IO ())
-> (Ptr PhysicalDeviceDataGraphProcessingEngineTypeARM
    -> IO PhysicalDeviceDataGraphProcessingEngineTypeARM)
-> (Ptr PhysicalDeviceDataGraphProcessingEngineTypeARM
    -> PhysicalDeviceDataGraphProcessingEngineTypeARM -> IO ())
-> Storable PhysicalDeviceDataGraphProcessingEngineTypeARM
forall b.
Ptr b -> Int -> IO PhysicalDeviceDataGraphProcessingEngineTypeARM
forall b.
Ptr b
-> Int -> PhysicalDeviceDataGraphProcessingEngineTypeARM -> IO ()
forall a.
(a -> Int)
-> (a -> Int)
-> (Ptr a -> Int -> IO a)
-> (Ptr a -> Int -> a -> IO ())
-> (forall b. Ptr b -> Int -> IO a)
-> (forall b. Ptr b -> Int -> a -> IO ())
-> (Ptr a -> IO a)
-> (Ptr a -> a -> IO ())
-> Storable a
$csizeOf :: PhysicalDeviceDataGraphProcessingEngineTypeARM -> Int
sizeOf :: PhysicalDeviceDataGraphProcessingEngineTypeARM -> Int
$calignment :: PhysicalDeviceDataGraphProcessingEngineTypeARM -> Int
alignment :: PhysicalDeviceDataGraphProcessingEngineTypeARM -> Int
$cpeekElemOff :: Ptr PhysicalDeviceDataGraphProcessingEngineTypeARM
-> Int -> IO PhysicalDeviceDataGraphProcessingEngineTypeARM
peekElemOff :: Ptr PhysicalDeviceDataGraphProcessingEngineTypeARM
-> Int -> IO PhysicalDeviceDataGraphProcessingEngineTypeARM
$cpokeElemOff :: Ptr PhysicalDeviceDataGraphProcessingEngineTypeARM
-> Int -> PhysicalDeviceDataGraphProcessingEngineTypeARM -> IO ()
pokeElemOff :: Ptr PhysicalDeviceDataGraphProcessingEngineTypeARM
-> Int -> PhysicalDeviceDataGraphProcessingEngineTypeARM -> IO ()
$cpeekByteOff :: forall b.
Ptr b -> Int -> IO PhysicalDeviceDataGraphProcessingEngineTypeARM
peekByteOff :: forall b.
Ptr b -> Int -> IO PhysicalDeviceDataGraphProcessingEngineTypeARM
$cpokeByteOff :: forall b.
Ptr b
-> Int -> PhysicalDeviceDataGraphProcessingEngineTypeARM -> IO ()
pokeByteOff :: forall b.
Ptr b
-> Int -> PhysicalDeviceDataGraphProcessingEngineTypeARM -> IO ()
$cpeek :: Ptr PhysicalDeviceDataGraphProcessingEngineTypeARM
-> IO PhysicalDeviceDataGraphProcessingEngineTypeARM
peek :: Ptr PhysicalDeviceDataGraphProcessingEngineTypeARM
-> IO PhysicalDeviceDataGraphProcessingEngineTypeARM
$cpoke :: Ptr PhysicalDeviceDataGraphProcessingEngineTypeARM
-> PhysicalDeviceDataGraphProcessingEngineTypeARM -> IO ()
poke :: Ptr PhysicalDeviceDataGraphProcessingEngineTypeARM
-> PhysicalDeviceDataGraphProcessingEngineTypeARM -> IO ()
Storable, PhysicalDeviceDataGraphProcessingEngineTypeARM
PhysicalDeviceDataGraphProcessingEngineTypeARM
-> Zero PhysicalDeviceDataGraphProcessingEngineTypeARM
forall a. a -> Zero a
$czero :: PhysicalDeviceDataGraphProcessingEngineTypeARM
zero :: PhysicalDeviceDataGraphProcessingEngineTypeARM
Zero)

-- No documentation found for Nested "VkPhysicalDeviceDataGraphProcessingEngineTypeARM" "VK_PHYSICAL_DEVICE_DATA_GRAPH_PROCESSING_ENGINE_TYPE_DEFAULT_ARM"
pattern $mPHYSICAL_DEVICE_DATA_GRAPH_PROCESSING_ENGINE_TYPE_DEFAULT_ARM :: forall {r}.
PhysicalDeviceDataGraphProcessingEngineTypeARM
-> ((# #) -> r) -> ((# #) -> r) -> r
$bPHYSICAL_DEVICE_DATA_GRAPH_PROCESSING_ENGINE_TYPE_DEFAULT_ARM :: PhysicalDeviceDataGraphProcessingEngineTypeARM
PHYSICAL_DEVICE_DATA_GRAPH_PROCESSING_ENGINE_TYPE_DEFAULT_ARM = PhysicalDeviceDataGraphProcessingEngineTypeARM 0

-- No documentation found for Nested "VkPhysicalDeviceDataGraphProcessingEngineTypeARM" "VK_PHYSICAL_DEVICE_DATA_GRAPH_PROCESSING_ENGINE_TYPE_COMPUTE_QCOM"
pattern $mPHYSICAL_DEVICE_DATA_GRAPH_PROCESSING_ENGINE_TYPE_COMPUTE_QCOM :: forall {r}.
PhysicalDeviceDataGraphProcessingEngineTypeARM
-> ((# #) -> r) -> ((# #) -> r) -> r
$bPHYSICAL_DEVICE_DATA_GRAPH_PROCESSING_ENGINE_TYPE_COMPUTE_QCOM :: PhysicalDeviceDataGraphProcessingEngineTypeARM
PHYSICAL_DEVICE_DATA_GRAPH_PROCESSING_ENGINE_TYPE_COMPUTE_QCOM = PhysicalDeviceDataGraphProcessingEngineTypeARM 1000629001

-- No documentation found for Nested "VkPhysicalDeviceDataGraphProcessingEngineTypeARM" "VK_PHYSICAL_DEVICE_DATA_GRAPH_PROCESSING_ENGINE_TYPE_NEURAL_QCOM"
pattern $mPHYSICAL_DEVICE_DATA_GRAPH_PROCESSING_ENGINE_TYPE_NEURAL_QCOM :: forall {r}.
PhysicalDeviceDataGraphProcessingEngineTypeARM
-> ((# #) -> r) -> ((# #) -> r) -> r
$bPHYSICAL_DEVICE_DATA_GRAPH_PROCESSING_ENGINE_TYPE_NEURAL_QCOM :: PhysicalDeviceDataGraphProcessingEngineTypeARM
PHYSICAL_DEVICE_DATA_GRAPH_PROCESSING_ENGINE_TYPE_NEURAL_QCOM = PhysicalDeviceDataGraphProcessingEngineTypeARM 1000629000

{-# COMPLETE
  PHYSICAL_DEVICE_DATA_GRAPH_PROCESSING_ENGINE_TYPE_DEFAULT_ARM
  , PHYSICAL_DEVICE_DATA_GRAPH_PROCESSING_ENGINE_TYPE_COMPUTE_QCOM
  , PHYSICAL_DEVICE_DATA_GRAPH_PROCESSING_ENGINE_TYPE_NEURAL_QCOM ::
    PhysicalDeviceDataGraphProcessingEngineTypeARM
  #-}

conNamePhysicalDeviceDataGraphProcessingEngineTypeARM :: String
conNamePhysicalDeviceDataGraphProcessingEngineTypeARM :: String
conNamePhysicalDeviceDataGraphProcessingEngineTypeARM = String
"PhysicalDeviceDataGraphProcessingEngineTypeARM"

enumPrefixPhysicalDeviceDataGraphProcessingEngineTypeARM :: String
enumPrefixPhysicalDeviceDataGraphProcessingEngineTypeARM :: String
enumPrefixPhysicalDeviceDataGraphProcessingEngineTypeARM = String
"PHYSICAL_DEVICE_DATA_GRAPH_PROCESSING_ENGINE_TYPE_"

showTablePhysicalDeviceDataGraphProcessingEngineTypeARM :: [(PhysicalDeviceDataGraphProcessingEngineTypeARM, String)]
showTablePhysicalDeviceDataGraphProcessingEngineTypeARM :: [(PhysicalDeviceDataGraphProcessingEngineTypeARM, String)]
showTablePhysicalDeviceDataGraphProcessingEngineTypeARM =
  [
    ( PhysicalDeviceDataGraphProcessingEngineTypeARM
PHYSICAL_DEVICE_DATA_GRAPH_PROCESSING_ENGINE_TYPE_DEFAULT_ARM
    , String
"DEFAULT_ARM"
    )
  ,
    ( PhysicalDeviceDataGraphProcessingEngineTypeARM
PHYSICAL_DEVICE_DATA_GRAPH_PROCESSING_ENGINE_TYPE_COMPUTE_QCOM
    , String
"COMPUTE_QCOM"
    )
  ,
    ( PhysicalDeviceDataGraphProcessingEngineTypeARM
PHYSICAL_DEVICE_DATA_GRAPH_PROCESSING_ENGINE_TYPE_NEURAL_QCOM
    , String
"NEURAL_QCOM"
    )
  ]

instance Show PhysicalDeviceDataGraphProcessingEngineTypeARM where
  showsPrec :: Int -> PhysicalDeviceDataGraphProcessingEngineTypeARM -> ShowS
showsPrec =
    String
-> [(PhysicalDeviceDataGraphProcessingEngineTypeARM, String)]
-> String
-> (PhysicalDeviceDataGraphProcessingEngineTypeARM -> Int32)
-> (Int32 -> ShowS)
-> Int
-> PhysicalDeviceDataGraphProcessingEngineTypeARM
-> ShowS
forall a i.
Eq a =>
String
-> [(a, String)]
-> String
-> (a -> i)
-> (i -> ShowS)
-> Int
-> a
-> ShowS
enumShowsPrec
      String
enumPrefixPhysicalDeviceDataGraphProcessingEngineTypeARM
      [(PhysicalDeviceDataGraphProcessingEngineTypeARM, String)]
showTablePhysicalDeviceDataGraphProcessingEngineTypeARM
      String
conNamePhysicalDeviceDataGraphProcessingEngineTypeARM
      (\(PhysicalDeviceDataGraphProcessingEngineTypeARM Int32
x) -> Int32
x)
      (Int -> Int32 -> ShowS
forall a. Show a => Int -> a -> ShowS
showsPrec Int
11)

instance Read PhysicalDeviceDataGraphProcessingEngineTypeARM where
  readPrec :: ReadPrec PhysicalDeviceDataGraphProcessingEngineTypeARM
readPrec =
    String
-> [(PhysicalDeviceDataGraphProcessingEngineTypeARM, String)]
-> String
-> (Int32 -> PhysicalDeviceDataGraphProcessingEngineTypeARM)
-> ReadPrec PhysicalDeviceDataGraphProcessingEngineTypeARM
forall i a.
Read i =>
String -> [(a, String)] -> String -> (i -> a) -> ReadPrec a
enumReadPrec
      String
enumPrefixPhysicalDeviceDataGraphProcessingEngineTypeARM
      [(PhysicalDeviceDataGraphProcessingEngineTypeARM, String)]
showTablePhysicalDeviceDataGraphProcessingEngineTypeARM
      String
conNamePhysicalDeviceDataGraphProcessingEngineTypeARM
      Int32 -> PhysicalDeviceDataGraphProcessingEngineTypeARM
PhysicalDeviceDataGraphProcessingEngineTypeARM

-- | VkPhysicalDeviceDataGraphOperationTypeARM - Enumeration describing data
-- graph operations
--
-- = Description
--
-- -   'PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_TYPE_SPIRV_EXTENDED_INSTRUCTION_SET_ARM'
--     corresponds to operations provided by a SPIR-V extended instruction
--     set.
--
-- -   'PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_TYPE_NEURAL_MODEL_QCOM'
--     specifies an operation that executes neural models provided by the
--     application.
--
-- -   'PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_TYPE_BUILTIN_MODEL_QCOM'
--     specifies an operation that executes specialized built-in models
--     provided by the implementation.
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ARM_data_graph VK_ARM_data_graph>,
-- 'PhysicalDeviceDataGraphOperationSupportARM'
newtype PhysicalDeviceDataGraphOperationTypeARM = PhysicalDeviceDataGraphOperationTypeARM Int32
  deriving newtype (PhysicalDeviceDataGraphOperationTypeARM
-> PhysicalDeviceDataGraphOperationTypeARM -> Bool
(PhysicalDeviceDataGraphOperationTypeARM
 -> PhysicalDeviceDataGraphOperationTypeARM -> Bool)
-> (PhysicalDeviceDataGraphOperationTypeARM
    -> PhysicalDeviceDataGraphOperationTypeARM -> Bool)
-> Eq PhysicalDeviceDataGraphOperationTypeARM
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: PhysicalDeviceDataGraphOperationTypeARM
-> PhysicalDeviceDataGraphOperationTypeARM -> Bool
== :: PhysicalDeviceDataGraphOperationTypeARM
-> PhysicalDeviceDataGraphOperationTypeARM -> Bool
$c/= :: PhysicalDeviceDataGraphOperationTypeARM
-> PhysicalDeviceDataGraphOperationTypeARM -> Bool
/= :: PhysicalDeviceDataGraphOperationTypeARM
-> PhysicalDeviceDataGraphOperationTypeARM -> Bool
Eq, Eq PhysicalDeviceDataGraphOperationTypeARM
Eq PhysicalDeviceDataGraphOperationTypeARM =>
(PhysicalDeviceDataGraphOperationTypeARM
 -> PhysicalDeviceDataGraphOperationTypeARM -> Ordering)
-> (PhysicalDeviceDataGraphOperationTypeARM
    -> PhysicalDeviceDataGraphOperationTypeARM -> Bool)
-> (PhysicalDeviceDataGraphOperationTypeARM
    -> PhysicalDeviceDataGraphOperationTypeARM -> Bool)
-> (PhysicalDeviceDataGraphOperationTypeARM
    -> PhysicalDeviceDataGraphOperationTypeARM -> Bool)
-> (PhysicalDeviceDataGraphOperationTypeARM
    -> PhysicalDeviceDataGraphOperationTypeARM -> Bool)
-> (PhysicalDeviceDataGraphOperationTypeARM
    -> PhysicalDeviceDataGraphOperationTypeARM
    -> PhysicalDeviceDataGraphOperationTypeARM)
-> (PhysicalDeviceDataGraphOperationTypeARM
    -> PhysicalDeviceDataGraphOperationTypeARM
    -> PhysicalDeviceDataGraphOperationTypeARM)
-> Ord PhysicalDeviceDataGraphOperationTypeARM
PhysicalDeviceDataGraphOperationTypeARM
-> PhysicalDeviceDataGraphOperationTypeARM -> Bool
PhysicalDeviceDataGraphOperationTypeARM
-> PhysicalDeviceDataGraphOperationTypeARM -> Ordering
PhysicalDeviceDataGraphOperationTypeARM
-> PhysicalDeviceDataGraphOperationTypeARM
-> PhysicalDeviceDataGraphOperationTypeARM
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: PhysicalDeviceDataGraphOperationTypeARM
-> PhysicalDeviceDataGraphOperationTypeARM -> Ordering
compare :: PhysicalDeviceDataGraphOperationTypeARM
-> PhysicalDeviceDataGraphOperationTypeARM -> Ordering
$c< :: PhysicalDeviceDataGraphOperationTypeARM
-> PhysicalDeviceDataGraphOperationTypeARM -> Bool
< :: PhysicalDeviceDataGraphOperationTypeARM
-> PhysicalDeviceDataGraphOperationTypeARM -> Bool
$c<= :: PhysicalDeviceDataGraphOperationTypeARM
-> PhysicalDeviceDataGraphOperationTypeARM -> Bool
<= :: PhysicalDeviceDataGraphOperationTypeARM
-> PhysicalDeviceDataGraphOperationTypeARM -> Bool
$c> :: PhysicalDeviceDataGraphOperationTypeARM
-> PhysicalDeviceDataGraphOperationTypeARM -> Bool
> :: PhysicalDeviceDataGraphOperationTypeARM
-> PhysicalDeviceDataGraphOperationTypeARM -> Bool
$c>= :: PhysicalDeviceDataGraphOperationTypeARM
-> PhysicalDeviceDataGraphOperationTypeARM -> Bool
>= :: PhysicalDeviceDataGraphOperationTypeARM
-> PhysicalDeviceDataGraphOperationTypeARM -> Bool
$cmax :: PhysicalDeviceDataGraphOperationTypeARM
-> PhysicalDeviceDataGraphOperationTypeARM
-> PhysicalDeviceDataGraphOperationTypeARM
max :: PhysicalDeviceDataGraphOperationTypeARM
-> PhysicalDeviceDataGraphOperationTypeARM
-> PhysicalDeviceDataGraphOperationTypeARM
$cmin :: PhysicalDeviceDataGraphOperationTypeARM
-> PhysicalDeviceDataGraphOperationTypeARM
-> PhysicalDeviceDataGraphOperationTypeARM
min :: PhysicalDeviceDataGraphOperationTypeARM
-> PhysicalDeviceDataGraphOperationTypeARM
-> PhysicalDeviceDataGraphOperationTypeARM
Ord, Ptr PhysicalDeviceDataGraphOperationTypeARM
-> IO PhysicalDeviceDataGraphOperationTypeARM
Ptr PhysicalDeviceDataGraphOperationTypeARM
-> Int -> IO PhysicalDeviceDataGraphOperationTypeARM
Ptr PhysicalDeviceDataGraphOperationTypeARM
-> Int -> PhysicalDeviceDataGraphOperationTypeARM -> IO ()
Ptr PhysicalDeviceDataGraphOperationTypeARM
-> PhysicalDeviceDataGraphOperationTypeARM -> IO ()
PhysicalDeviceDataGraphOperationTypeARM -> Int
(PhysicalDeviceDataGraphOperationTypeARM -> Int)
-> (PhysicalDeviceDataGraphOperationTypeARM -> Int)
-> (Ptr PhysicalDeviceDataGraphOperationTypeARM
    -> Int -> IO PhysicalDeviceDataGraphOperationTypeARM)
-> (Ptr PhysicalDeviceDataGraphOperationTypeARM
    -> Int -> PhysicalDeviceDataGraphOperationTypeARM -> IO ())
-> (forall b.
    Ptr b -> Int -> IO PhysicalDeviceDataGraphOperationTypeARM)
-> (forall b.
    Ptr b -> Int -> PhysicalDeviceDataGraphOperationTypeARM -> IO ())
-> (Ptr PhysicalDeviceDataGraphOperationTypeARM
    -> IO PhysicalDeviceDataGraphOperationTypeARM)
-> (Ptr PhysicalDeviceDataGraphOperationTypeARM
    -> PhysicalDeviceDataGraphOperationTypeARM -> IO ())
-> Storable PhysicalDeviceDataGraphOperationTypeARM
forall b.
Ptr b -> Int -> IO PhysicalDeviceDataGraphOperationTypeARM
forall b.
Ptr b -> Int -> PhysicalDeviceDataGraphOperationTypeARM -> IO ()
forall a.
(a -> Int)
-> (a -> Int)
-> (Ptr a -> Int -> IO a)
-> (Ptr a -> Int -> a -> IO ())
-> (forall b. Ptr b -> Int -> IO a)
-> (forall b. Ptr b -> Int -> a -> IO ())
-> (Ptr a -> IO a)
-> (Ptr a -> a -> IO ())
-> Storable a
$csizeOf :: PhysicalDeviceDataGraphOperationTypeARM -> Int
sizeOf :: PhysicalDeviceDataGraphOperationTypeARM -> Int
$calignment :: PhysicalDeviceDataGraphOperationTypeARM -> Int
alignment :: PhysicalDeviceDataGraphOperationTypeARM -> Int
$cpeekElemOff :: Ptr PhysicalDeviceDataGraphOperationTypeARM
-> Int -> IO PhysicalDeviceDataGraphOperationTypeARM
peekElemOff :: Ptr PhysicalDeviceDataGraphOperationTypeARM
-> Int -> IO PhysicalDeviceDataGraphOperationTypeARM
$cpokeElemOff :: Ptr PhysicalDeviceDataGraphOperationTypeARM
-> Int -> PhysicalDeviceDataGraphOperationTypeARM -> IO ()
pokeElemOff :: Ptr PhysicalDeviceDataGraphOperationTypeARM
-> Int -> PhysicalDeviceDataGraphOperationTypeARM -> IO ()
$cpeekByteOff :: forall b.
Ptr b -> Int -> IO PhysicalDeviceDataGraphOperationTypeARM
peekByteOff :: forall b.
Ptr b -> Int -> IO PhysicalDeviceDataGraphOperationTypeARM
$cpokeByteOff :: forall b.
Ptr b -> Int -> PhysicalDeviceDataGraphOperationTypeARM -> IO ()
pokeByteOff :: forall b.
Ptr b -> Int -> PhysicalDeviceDataGraphOperationTypeARM -> IO ()
$cpeek :: Ptr PhysicalDeviceDataGraphOperationTypeARM
-> IO PhysicalDeviceDataGraphOperationTypeARM
peek :: Ptr PhysicalDeviceDataGraphOperationTypeARM
-> IO PhysicalDeviceDataGraphOperationTypeARM
$cpoke :: Ptr PhysicalDeviceDataGraphOperationTypeARM
-> PhysicalDeviceDataGraphOperationTypeARM -> IO ()
poke :: Ptr PhysicalDeviceDataGraphOperationTypeARM
-> PhysicalDeviceDataGraphOperationTypeARM -> IO ()
Storable, PhysicalDeviceDataGraphOperationTypeARM
PhysicalDeviceDataGraphOperationTypeARM
-> Zero PhysicalDeviceDataGraphOperationTypeARM
forall a. a -> Zero a
$czero :: PhysicalDeviceDataGraphOperationTypeARM
zero :: PhysicalDeviceDataGraphOperationTypeARM
Zero)

-- No documentation found for Nested "VkPhysicalDeviceDataGraphOperationTypeARM" "VK_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_TYPE_SPIRV_EXTENDED_INSTRUCTION_SET_ARM"
pattern $mPHYSICAL_DEVICE_DATA_GRAPH_OPERATION_TYPE_SPIRV_EXTENDED_INSTRUCTION_SET_ARM :: forall {r}.
PhysicalDeviceDataGraphOperationTypeARM
-> ((# #) -> r) -> ((# #) -> r) -> r
$bPHYSICAL_DEVICE_DATA_GRAPH_OPERATION_TYPE_SPIRV_EXTENDED_INSTRUCTION_SET_ARM :: PhysicalDeviceDataGraphOperationTypeARM
PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_TYPE_SPIRV_EXTENDED_INSTRUCTION_SET_ARM = PhysicalDeviceDataGraphOperationTypeARM 0

-- No documentation found for Nested "VkPhysicalDeviceDataGraphOperationTypeARM" "VK_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_TYPE_BUILTIN_MODEL_QCOM"
pattern $mPHYSICAL_DEVICE_DATA_GRAPH_OPERATION_TYPE_BUILTIN_MODEL_QCOM :: forall {r}.
PhysicalDeviceDataGraphOperationTypeARM
-> ((# #) -> r) -> ((# #) -> r) -> r
$bPHYSICAL_DEVICE_DATA_GRAPH_OPERATION_TYPE_BUILTIN_MODEL_QCOM :: PhysicalDeviceDataGraphOperationTypeARM
PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_TYPE_BUILTIN_MODEL_QCOM = PhysicalDeviceDataGraphOperationTypeARM 1000629001

-- No documentation found for Nested "VkPhysicalDeviceDataGraphOperationTypeARM" "VK_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_TYPE_NEURAL_MODEL_QCOM"
pattern $mPHYSICAL_DEVICE_DATA_GRAPH_OPERATION_TYPE_NEURAL_MODEL_QCOM :: forall {r}.
PhysicalDeviceDataGraphOperationTypeARM
-> ((# #) -> r) -> ((# #) -> r) -> r
$bPHYSICAL_DEVICE_DATA_GRAPH_OPERATION_TYPE_NEURAL_MODEL_QCOM :: PhysicalDeviceDataGraphOperationTypeARM
PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_TYPE_NEURAL_MODEL_QCOM = PhysicalDeviceDataGraphOperationTypeARM 1000629000

{-# COMPLETE
  PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_TYPE_SPIRV_EXTENDED_INSTRUCTION_SET_ARM
  , PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_TYPE_BUILTIN_MODEL_QCOM
  , PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_TYPE_NEURAL_MODEL_QCOM ::
    PhysicalDeviceDataGraphOperationTypeARM
  #-}

conNamePhysicalDeviceDataGraphOperationTypeARM :: String
conNamePhysicalDeviceDataGraphOperationTypeARM :: String
conNamePhysicalDeviceDataGraphOperationTypeARM = String
"PhysicalDeviceDataGraphOperationTypeARM"

enumPrefixPhysicalDeviceDataGraphOperationTypeARM :: String
enumPrefixPhysicalDeviceDataGraphOperationTypeARM :: String
enumPrefixPhysicalDeviceDataGraphOperationTypeARM = String
"PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_TYPE_"

showTablePhysicalDeviceDataGraphOperationTypeARM :: [(PhysicalDeviceDataGraphOperationTypeARM, String)]
showTablePhysicalDeviceDataGraphOperationTypeARM :: [(PhysicalDeviceDataGraphOperationTypeARM, String)]
showTablePhysicalDeviceDataGraphOperationTypeARM =
  [
    ( PhysicalDeviceDataGraphOperationTypeARM
PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_TYPE_SPIRV_EXTENDED_INSTRUCTION_SET_ARM
    , String
"SPIRV_EXTENDED_INSTRUCTION_SET_ARM"
    )
  ,
    ( PhysicalDeviceDataGraphOperationTypeARM
PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_TYPE_BUILTIN_MODEL_QCOM
    , String
"BUILTIN_MODEL_QCOM"
    )
  ,
    ( PhysicalDeviceDataGraphOperationTypeARM
PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_TYPE_NEURAL_MODEL_QCOM
    , String
"NEURAL_MODEL_QCOM"
    )
  ]

instance Show PhysicalDeviceDataGraphOperationTypeARM where
  showsPrec :: Int -> PhysicalDeviceDataGraphOperationTypeARM -> ShowS
showsPrec =
    String
-> [(PhysicalDeviceDataGraphOperationTypeARM, String)]
-> String
-> (PhysicalDeviceDataGraphOperationTypeARM -> Int32)
-> (Int32 -> ShowS)
-> Int
-> PhysicalDeviceDataGraphOperationTypeARM
-> ShowS
forall a i.
Eq a =>
String
-> [(a, String)]
-> String
-> (a -> i)
-> (i -> ShowS)
-> Int
-> a
-> ShowS
enumShowsPrec
      String
enumPrefixPhysicalDeviceDataGraphOperationTypeARM
      [(PhysicalDeviceDataGraphOperationTypeARM, String)]
showTablePhysicalDeviceDataGraphOperationTypeARM
      String
conNamePhysicalDeviceDataGraphOperationTypeARM
      (\(PhysicalDeviceDataGraphOperationTypeARM Int32
x) -> Int32
x)
      (Int -> Int32 -> ShowS
forall a. Show a => Int -> a -> ShowS
showsPrec Int
11)

instance Read PhysicalDeviceDataGraphOperationTypeARM where
  readPrec :: ReadPrec PhysicalDeviceDataGraphOperationTypeARM
readPrec =
    String
-> [(PhysicalDeviceDataGraphOperationTypeARM, String)]
-> String
-> (Int32 -> PhysicalDeviceDataGraphOperationTypeARM)
-> ReadPrec PhysicalDeviceDataGraphOperationTypeARM
forall i a.
Read i =>
String -> [(a, String)] -> String -> (i -> a) -> ReadPrec a
enumReadPrec
      String
enumPrefixPhysicalDeviceDataGraphOperationTypeARM
      [(PhysicalDeviceDataGraphOperationTypeARM, String)]
showTablePhysicalDeviceDataGraphOperationTypeARM
      String
conNamePhysicalDeviceDataGraphOperationTypeARM
      Int32 -> PhysicalDeviceDataGraphOperationTypeARM
PhysicalDeviceDataGraphOperationTypeARM

type ARM_DATA_GRAPH_SPEC_VERSION = 1

-- No documentation found for TopLevel "VK_ARM_DATA_GRAPH_SPEC_VERSION"
pattern ARM_DATA_GRAPH_SPEC_VERSION :: forall a . Integral a => a
pattern $mARM_DATA_GRAPH_SPEC_VERSION :: forall {r} {a}.
Integral a =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
$bARM_DATA_GRAPH_SPEC_VERSION :: forall a. Integral a => a
ARM_DATA_GRAPH_SPEC_VERSION = 1


type ARM_DATA_GRAPH_EXTENSION_NAME = "VK_ARM_data_graph"

-- No documentation found for TopLevel "VK_ARM_DATA_GRAPH_EXTENSION_NAME"
pattern ARM_DATA_GRAPH_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
pattern $mARM_DATA_GRAPH_EXTENSION_NAME :: forall {r} {a}.
(Eq a, IsString a) =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
$bARM_DATA_GRAPH_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a
ARM_DATA_GRAPH_EXTENSION_NAME = "VK_ARM_data_graph"