packages feed

vulkan-3.27: src/Vulkan/Extensions/VK_ARM_data_graph_optical_flow.hs

{-# language CPP #-}
-- | = Name
--
-- VK_ARM_data_graph_optical_flow - device extension
--
-- = VK_ARM_data_graph_optical_flow
--
-- [__Name String__]
--     @VK_ARM_data_graph_optical_flow@
--
-- [__Extension Type__]
--     Device extension
--
-- [__Registered Extension Number__]
--     632
--
-- [__Revision__]
--     1
--
-- [__Ratification Status__]
--     Not ratified
--
-- [__Extension and Version Dependencies__]
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ARM_data_graph VK_ARM_data_graph>
--
-- [__Contact__]
--
--     -   Kevin Petit
--         <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?body=[VK_ARM_data_graph_optical_flow] @kpet%0A*Here describe the issue or question you have about the VK_ARM_data_graph_optical_flow extension* >
--
-- == Other Extension Metadata
--
-- [__Last Modified Date__]
--     2026-04-08
--
-- [__Contributors__]
--
--     -   Contributors to VK_NV_optical_flow
--
--     -   Kevin Petit, Arm Ltd.
--
--     -   Jan-Harald Fredriksen, Arm Ltd.
--
--     -   Steve Suzuki, Arm Ltd.
--
--     -   Liam O’Neil, Arm Ltd.
--
-- == Description
--
-- This extension allows applications to estimate the 2D displacement of
-- pixels between two images.
--
-- == New Commands
--
-- -   'Vulkan.Extensions.VK_ARM_data_graph_instruction_set_tosa.getPhysicalDeviceQueueFamilyDataGraphEngineOperationPropertiesARM'
--
-- -   'getPhysicalDeviceQueueFamilyDataGraphOpticalFlowImageFormatsARM'
--
-- == New Structures
--
-- -   'DataGraphOpticalFlowImageFormatPropertiesARM'
--
-- -   'DataGraphPipelineSingleNodeConnectionARM'
--
-- -   'QueueFamilyDataGraphOpticalFlowPropertiesARM'
--
-- -   Extending
--     'Vulkan.Extensions.VK_ARM_data_graph.DataGraphPipelineCreateInfoARM':
--
--     -   'DataGraphPipelineOpticalFlowCreateInfoARM'
--
--     -   'DataGraphPipelineSingleNodeCreateInfoARM'
--
-- -   Extending
--     'Vulkan.Extensions.VK_ARM_data_graph.DataGraphPipelineDispatchInfoARM':
--
--     -   'DataGraphPipelineOpticalFlowDispatchInfoARM'
--
-- -   Extending
--     'Vulkan.Extensions.VK_ARM_data_graph.DataGraphPipelineResourceInfoARM':
--
--     -   'DataGraphPipelineResourceInfoImageLayoutARM'
--
-- -   Extending
--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--     'Vulkan.Core10.Device.DeviceCreateInfo':
--
--     -   'PhysicalDeviceDataGraphOpticalFlowFeaturesARM'
--
-- -   Extending
--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceImageFormatInfo2',
--     'Vulkan.Core10.Image.ImageCreateInfo':
--
--     -   'DataGraphOpticalFlowImageFormatInfoARM'
--
-- == New Enums
--
-- -   'DataGraphOpticalFlowCreateFlagBitsARM'
--
-- -   'DataGraphOpticalFlowExecuteFlagBitsARM'
--
-- -   'DataGraphOpticalFlowGridSizeFlagBitsARM'
--
-- -   'DataGraphOpticalFlowImageUsageFlagBitsARM'
--
-- -   'DataGraphOpticalFlowPerformanceLevelARM'
--
-- -   'DataGraphPipelineNodeConnectionTypeARM'
--
-- -   'DataGraphPipelineNodeTypeARM'
--
-- == New Bitmasks
--
-- -   'DataGraphOpticalFlowCreateFlagsARM'
--
-- -   'DataGraphOpticalFlowExecuteFlagsARM'
--
-- -   'DataGraphOpticalFlowGridSizeFlagsARM'
--
-- -   'DataGraphOpticalFlowImageUsageFlagsARM'
--
-- == New Enum Constants
--
-- -   'ARM_DATA_GRAPH_OPTICAL_FLOW_EXTENSION_NAME'
--
-- -   'ARM_DATA_GRAPH_OPTICAL_FLOW_SPEC_VERSION'
--
-- -   Extending 'DataGraphPipelineNodeConnectionTypeARM':
--
--     -   'DATA_GRAPH_PIPELINE_NODE_CONNECTION_TYPE_OPTICAL_FLOW_COST_ARM'
--
--     -   'DATA_GRAPH_PIPELINE_NODE_CONNECTION_TYPE_OPTICAL_FLOW_FLOW_VECTOR_ARM'
--
--     -   'DATA_GRAPH_PIPELINE_NODE_CONNECTION_TYPE_OPTICAL_FLOW_HINT_ARM'
--
--     -   'DATA_GRAPH_PIPELINE_NODE_CONNECTION_TYPE_OPTICAL_FLOW_INPUT_ARM'
--
--     -   'DATA_GRAPH_PIPELINE_NODE_CONNECTION_TYPE_OPTICAL_FLOW_REFERENCE_ARM'
--
-- -   Extending 'DataGraphPipelineNodeTypeARM':
--
--     -   'DATA_GRAPH_PIPELINE_NODE_TYPE_OPTICAL_FLOW_ARM'
--
-- -   Extending
--     'Vulkan.Extensions.VK_ARM_data_graph.DataGraphPipelineSessionBindPointARM':
--
--     -   'Vulkan.Extensions.VK_ARM_data_graph.DATA_GRAPH_PIPELINE_SESSION_BIND_POINT_OPTICAL_FLOW_CACHE_ARM'
--
-- -   Extending
--     'Vulkan.Extensions.VK_ARM_data_graph.DataGraphPipelineSessionCreateFlagBitsARM':
--
--     -   'Vulkan.Extensions.VK_ARM_data_graph.DATA_GRAPH_PIPELINE_SESSION_CREATE_OPTICAL_FLOW_CACHE_BIT_ARM'
--
-- -   Extending
--     'Vulkan.Core13.Enums.FormatFeatureFlags2.FormatFeatureFlagBits2':
--
--     -   'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_DATA_GRAPH_OPTICAL_FLOW_COST_BIT_ARM'
--
--     -   'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_DATA_GRAPH_OPTICAL_FLOW_IMAGE_BIT_ARM'
--
--     -   'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_DATA_GRAPH_OPTICAL_FLOW_VECTOR_BIT_ARM'
--
-- -   Extending
--     'Vulkan.Extensions.VK_ARM_data_graph.PhysicalDeviceDataGraphOperationTypeARM':
--
--     -   'Vulkan.Extensions.VK_ARM_data_graph.PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_TYPE_OPTICAL_FLOW_ARM'
--
-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DATA_GRAPH_OPTICAL_FLOW_IMAGE_FORMAT_INFO_ARM'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DATA_GRAPH_OPTICAL_FLOW_IMAGE_FORMAT_PROPERTIES_ARM'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_OPTICAL_FLOW_CREATE_INFO_ARM'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_OPTICAL_FLOW_DISPATCH_INFO_ARM'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_RESOURCE_INFO_IMAGE_LAYOUT_ARM'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SINGLE_NODE_CONNECTION_ARM'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SINGLE_NODE_CREATE_INFO_ARM'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_DATA_GRAPH_OPTICAL_FLOW_FEATURES_ARM'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_QUEUE_FAMILY_DATA_GRAPH_OPTICAL_FLOW_PROPERTIES_ARM'
--
-- == Version History
--
-- -   Revision 1, 2026-04-08 (Kevin Petit)
--
--     -   Internal revisions
--
-- == 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_optical_flow 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_optical_flow  ( getPhysicalDeviceQueueFamilyDataGraphOpticalFlowImageFormatsARM
                                                         , DataGraphPipelineResourceInfoImageLayoutARM(..)
                                                         , DataGraphPipelineSingleNodeConnectionARM(..)
                                                         , PhysicalDeviceDataGraphOpticalFlowFeaturesARM(..)
                                                         , QueueFamilyDataGraphOpticalFlowPropertiesARM(..)
                                                         , DataGraphOpticalFlowImageFormatInfoARM(..)
                                                         , DataGraphOpticalFlowImageFormatPropertiesARM(..)
                                                         , DataGraphPipelineSingleNodeCreateInfoARM(..)
                                                         , DataGraphPipelineOpticalFlowCreateInfoARM(..)
                                                         , DataGraphPipelineOpticalFlowDispatchInfoARM(..)
                                                         , DataGraphOpticalFlowGridSizeFlagsARM
                                                         , DataGraphOpticalFlowGridSizeFlagBitsARM( DATA_GRAPH_OPTICAL_FLOW_GRID_SIZE_UNKNOWN_ARM
                                                                                                  , DATA_GRAPH_OPTICAL_FLOW_GRID_SIZE_1X1_BIT_ARM
                                                                                                  , DATA_GRAPH_OPTICAL_FLOW_GRID_SIZE_2X2_BIT_ARM
                                                                                                  , DATA_GRAPH_OPTICAL_FLOW_GRID_SIZE_4X4_BIT_ARM
                                                                                                  , DATA_GRAPH_OPTICAL_FLOW_GRID_SIZE_8X8_BIT_ARM
                                                                                                  , ..
                                                                                                  )
                                                         , DataGraphOpticalFlowImageUsageFlagsARM
                                                         , DataGraphOpticalFlowImageUsageFlagBitsARM( DATA_GRAPH_OPTICAL_FLOW_IMAGE_USAGE_UNKNOWN_ARM
                                                                                                    , DATA_GRAPH_OPTICAL_FLOW_IMAGE_USAGE_INPUT_BIT_ARM
                                                                                                    , DATA_GRAPH_OPTICAL_FLOW_IMAGE_USAGE_OUTPUT_BIT_ARM
                                                                                                    , DATA_GRAPH_OPTICAL_FLOW_IMAGE_USAGE_HINT_BIT_ARM
                                                                                                    , DATA_GRAPH_OPTICAL_FLOW_IMAGE_USAGE_COST_BIT_ARM
                                                                                                    , ..
                                                                                                    )
                                                         , DataGraphOpticalFlowPerformanceLevelARM( DATA_GRAPH_OPTICAL_FLOW_PERFORMANCE_LEVEL_UNKNOWN_ARM
                                                                                                  , DATA_GRAPH_OPTICAL_FLOW_PERFORMANCE_LEVEL_SLOW_ARM
                                                                                                  , DATA_GRAPH_OPTICAL_FLOW_PERFORMANCE_LEVEL_MEDIUM_ARM
                                                                                                  , DATA_GRAPH_OPTICAL_FLOW_PERFORMANCE_LEVEL_FAST_ARM
                                                                                                  , ..
                                                                                                  )
                                                         , DataGraphPipelineNodeConnectionTypeARM( DATA_GRAPH_PIPELINE_NODE_CONNECTION_TYPE_OPTICAL_FLOW_COST_ARM
                                                                                                 , DATA_GRAPH_PIPELINE_NODE_CONNECTION_TYPE_OPTICAL_FLOW_FLOW_VECTOR_ARM
                                                                                                 , DATA_GRAPH_PIPELINE_NODE_CONNECTION_TYPE_OPTICAL_FLOW_HINT_ARM
                                                                                                 , DATA_GRAPH_PIPELINE_NODE_CONNECTION_TYPE_OPTICAL_FLOW_REFERENCE_ARM
                                                                                                 , DATA_GRAPH_PIPELINE_NODE_CONNECTION_TYPE_OPTICAL_FLOW_INPUT_ARM
                                                                                                 , ..
                                                                                                 )
                                                         , DataGraphPipelineNodeTypeARM( DATA_GRAPH_PIPELINE_NODE_TYPE_OPTICAL_FLOW_ARM
                                                                                       , ..
                                                                                       )
                                                         , DataGraphOpticalFlowCreateFlagsARM
                                                         , DataGraphOpticalFlowCreateFlagBitsARM( DATA_GRAPH_OPTICAL_FLOW_CREATE_ENABLE_HINT_BIT_ARM
                                                                                                , DATA_GRAPH_OPTICAL_FLOW_CREATE_ENABLE_COST_BIT_ARM
                                                                                                , DATA_GRAPH_OPTICAL_FLOW_CREATE_RESERVED_30_BIT_ARM
                                                                                                , ..
                                                                                                )
                                                         , DataGraphOpticalFlowExecuteFlagsARM
                                                         , DataGraphOpticalFlowExecuteFlagBitsARM( DATA_GRAPH_OPTICAL_FLOW_EXECUTE_DISABLE_TEMPORAL_HINTS_BIT_ARM
                                                                                                 , DATA_GRAPH_OPTICAL_FLOW_EXECUTE_INPUT_UNCHANGED_BIT_ARM
                                                                                                 , DATA_GRAPH_OPTICAL_FLOW_EXECUTE_REFERENCE_UNCHANGED_BIT_ARM
                                                                                                 , DATA_GRAPH_OPTICAL_FLOW_EXECUTE_INPUT_IS_PREVIOUS_REFERENCE_BIT_ARM
                                                                                                 , DATA_GRAPH_OPTICAL_FLOW_EXECUTE_REFERENCE_IS_PREVIOUS_INPUT_BIT_ARM
                                                                                                 , ..
                                                                                                 )
                                                         , ARM_DATA_GRAPH_OPTICAL_FLOW_SPEC_VERSION
                                                         , pattern ARM_DATA_GRAPH_OPTICAL_FLOW_SPEC_VERSION
                                                         , ARM_DATA_GRAPH_OPTICAL_FLOW_EXTENSION_NAME
                                                         , pattern ARM_DATA_GRAPH_OPTICAL_FLOW_EXTENSION_NAME
                                                         , PhysicalDeviceDataGraphProcessingEngineARM(..)
                                                         , PhysicalDeviceDataGraphOperationSupportARM(..)
                                                         , QueueFamilyDataGraphPropertiesARM(..)
                                                         , getPhysicalDeviceQueueFamilyDataGraphEngineOperationPropertiesARM
                                                         , DataGraphPipelineSessionCreateFlagBitsARM(..)
                                                         , DataGraphPipelineSessionCreateFlagsARM
                                                         , DataGraphPipelineSessionBindPointARM(..)
                                                         , PhysicalDeviceDataGraphProcessingEngineTypeARM(..)
                                                         , PhysicalDeviceDataGraphOperationTypeARM(..)
                                                         , 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.Internal.Utils (enumReadPrec)
import Vulkan.Internal.Utils (enumShowsPrec)
import Vulkan.Internal.Utils (traceAroundEvent)
import Control.Exception.Base (bracket)
import Control.Monad (unless)
import Control.Monad.IO.Class (liftIO)
import Foreign.Marshal.Alloc (allocaBytes)
import Foreign.Marshal.Alloc (callocBytes)
import Foreign.Marshal.Alloc (free)
import GHC.Base (when)
import GHC.IO (throwIO)
import GHC.Ptr (nullFunPtr)
import Foreign.Ptr (nullPtr)
import Foreign.Ptr (plusPtr)
import GHC.Show (showString)
import GHC.Show (showsPrec)
import Numeric (showHex)
import Control.Monad.Trans.Class (lift)
import Control.Monad.Trans.Cont (evalContT)
import Data.Vector (generateM)
import qualified Data.Vector (imapM_)
import qualified Data.Vector (length)
import Vulkan.CStruct (FromCStruct)
import Vulkan.CStruct (FromCStruct(..))
import Vulkan.CStruct (ToCStruct)
import Vulkan.CStruct (ToCStruct(..))
import Vulkan.Zero (Zero)
import Vulkan.Zero (Zero(..))
import Control.Monad.IO.Class (MonadIO)
import Data.String (IsString)
import Data.Typeable (Typeable)
import Foreign.Storable (Storable)
import Foreign.Storable (Storable(peek))
import Foreign.Storable (Storable(poke))
import qualified Foreign.Storable (Storable(..))
import GHC.Generics (Generic)
import GHC.IO.Exception (IOErrorType(..))
import GHC.IO.Exception (IOException(..))
import Data.Int (Int32)
import Foreign.Ptr (FunPtr)
import Foreign.Ptr (Ptr)
import GHC.Read (Read(readPrec))
import GHC.Show (Show(showsPrec))
import Data.Word (Word32)
import Data.Kind (Type)
import Control.Monad.Trans.Cont (ContT(..))
import Data.Vector (Vector)
import Vulkan.CStruct.Utils (advancePtrBytes)
import Vulkan.Core10.FundamentalTypes (bool32ToBool)
import Vulkan.Core10.FundamentalTypes (boolToBool32)
import Vulkan.NamedType ((:::))
import Vulkan.Core10.FundamentalTypes (Bool32)
import Vulkan.Core10.FundamentalTypes (Flags)
import Vulkan.Core10.Enums.Format (Format)
import Vulkan.Core10.Enums.ImageLayout (ImageLayout)
import Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceQueueFamilyDataGraphOpticalFlowImageFormatsARM))
import Vulkan.Core10.Handles (PhysicalDevice)
import Vulkan.Core10.Handles (PhysicalDevice(..))
import Vulkan.Core10.Handles (PhysicalDevice(PhysicalDevice))
import Vulkan.Core10.Handles (PhysicalDevice_T)
import Vulkan.Extensions.VK_ARM_data_graph (QueueFamilyDataGraphPropertiesARM)
import Vulkan.Core10.Enums.Result (Result)
import Vulkan.Core10.Enums.Result (Result(..))
import Vulkan.Core10.Enums.StructureType (StructureType)
import Vulkan.Exception (VulkanException(..))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DATA_GRAPH_OPTICAL_FLOW_IMAGE_FORMAT_INFO_ARM))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DATA_GRAPH_OPTICAL_FLOW_IMAGE_FORMAT_PROPERTIES_ARM))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_OPTICAL_FLOW_CREATE_INFO_ARM))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_OPTICAL_FLOW_DISPATCH_INFO_ARM))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_RESOURCE_INFO_IMAGE_LAYOUT_ARM))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SINGLE_NODE_CONNECTION_ARM))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SINGLE_NODE_CREATE_INFO_ARM))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_DATA_GRAPH_OPTICAL_FLOW_FEATURES_ARM))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_QUEUE_FAMILY_DATA_GRAPH_OPTICAL_FLOW_PROPERTIES_ARM))
import Vulkan.Core10.Enums.Result (Result(SUCCESS))
import Vulkan.Extensions.VK_ARM_data_graph_instruction_set_tosa (getPhysicalDeviceQueueFamilyDataGraphEngineOperationPropertiesARM)
import Vulkan.Extensions.VK_ARM_data_graph (DataGraphPipelineSessionBindPointARM(..))
import Vulkan.Extensions.VK_ARM_data_graph (DataGraphPipelineSessionCreateFlagBitsARM(..))
import Vulkan.Extensions.VK_ARM_data_graph (DataGraphPipelineSessionCreateFlagsARM)
import Vulkan.Core10.APIConstants (MAX_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_SET_NAME_SIZE_ARM)
import Vulkan.Extensions.VK_ARM_data_graph (PhysicalDeviceDataGraphOperationSupportARM(..))
import Vulkan.Extensions.VK_ARM_data_graph (PhysicalDeviceDataGraphOperationTypeARM(..))
import Vulkan.Extensions.VK_ARM_data_graph (PhysicalDeviceDataGraphProcessingEngineARM(..))
import Vulkan.Extensions.VK_ARM_data_graph (PhysicalDeviceDataGraphProcessingEngineTypeARM(..))
import Vulkan.Extensions.VK_ARM_data_graph (QueueFamilyDataGraphPropertiesARM(..))
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" mkVkGetPhysicalDeviceQueueFamilyDataGraphOpticalFlowImageFormatsARM
  :: FunPtr (Ptr PhysicalDevice_T -> Word32 -> Ptr QueueFamilyDataGraphPropertiesARM -> Ptr DataGraphOpticalFlowImageFormatInfoARM -> Ptr Word32 -> Ptr DataGraphOpticalFlowImageFormatPropertiesARM -> IO Result) -> Ptr PhysicalDevice_T -> Word32 -> Ptr QueueFamilyDataGraphPropertiesARM -> Ptr DataGraphOpticalFlowImageFormatInfoARM -> Ptr Word32 -> Ptr DataGraphOpticalFlowImageFormatPropertiesARM -> IO Result

-- | vkGetPhysicalDeviceQueueFamilyDataGraphOpticalFlowImageFormatsARM -
-- Query image formats for data graph optical flow
--
-- = Description
--
-- If @pImageFormatProperties@ is @NULL@, then the number of optical flow
-- properties supported for the given @physicalDevice@ is returned in
-- @pFormatCount@. Otherwise, @pFormatCount@ /must/ point to a variable set
-- by the user to the number of elements in the @pImageFormatProperties@
-- array, and on return the variable is overwritten with the number of
-- values actually written to @pImageFormatProperties@. If the value of
-- @pFormatCount@ is less than the number of optical flow properties
-- supported, at most @pFormatCount@ values will be written to
-- @pImageFormatProperties@, and 'Vulkan.Core10.Enums.Result.INCOMPLETE'
-- will be returned instead of 'Vulkan.Core10.Enums.Result.SUCCESS', to
-- indicate that not all the available values were returned. Before
-- creating an image to be used as a optical flow image, obtain the
-- supported image creation parameters by querying with
-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceFormatProperties2'
-- and
-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
-- using one of the reported formats and adding
-- 'DataGraphOpticalFlowImageFormatInfoARM' to the @pNext@ chain of
-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceImageFormatInfo2'.
-- When querying the parameters with
-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceImageFormatProperties2'
-- for images used for optical flow operations, the
-- 'DataGraphOpticalFlowImageFormatInfoARM'::@usage@ field should contain
-- one or more of the bits defined in
-- 'DataGraphOpticalFlowImageUsageFlagBitsARM'.
--
-- == Valid Usage
--
-- -   #VUID-vkGetPhysicalDeviceQueueFamilyDataGraphOpticalFlowImageFormatsARM-pQueueFamilyDataGraphProperties-09965#
--     @pQueueFamilyDataGraphProperties@ /must/ point to a structure whose
--     @operation@ member has its @name@ member equal to @OpticalFlow@
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkGetPhysicalDeviceQueueFamilyDataGraphOpticalFlowImageFormatsARM-physicalDevice-parameter#
--     @physicalDevice@ /must/ be a valid
--     'Vulkan.Core10.Handles.PhysicalDevice' handle
--
-- -   #VUID-vkGetPhysicalDeviceQueueFamilyDataGraphOpticalFlowImageFormatsARM-pQueueFamilyDataGraphProperties-parameter#
--     @pQueueFamilyDataGraphProperties@ /must/ be a valid pointer to a
--     valid
--     'Vulkan.Extensions.VK_ARM_data_graph.QueueFamilyDataGraphPropertiesARM'
--     structure
--
-- -   #VUID-vkGetPhysicalDeviceQueueFamilyDataGraphOpticalFlowImageFormatsARM-pOpticalFlowImageFormatInfo-parameter#
--     @pOpticalFlowImageFormatInfo@ /must/ be a valid pointer to a valid
--     'DataGraphOpticalFlowImageFormatInfoARM' structure
--
-- -   #VUID-vkGetPhysicalDeviceQueueFamilyDataGraphOpticalFlowImageFormatsARM-pFormatCount-parameter#
--     @pFormatCount@ /must/ be a valid pointer to a @uint32_t@ value
--
-- -   #VUID-vkGetPhysicalDeviceQueueFamilyDataGraphOpticalFlowImageFormatsARM-pImageFormatProperties-parameter#
--     If the value referenced by @pFormatCount@ is not @0@, and
--     @pImageFormatProperties@ is not @NULL@, @pImageFormatProperties@
--     /must/ be a valid pointer to an array of @pFormatCount@
--     'DataGraphOpticalFlowImageFormatPropertiesARM' 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_EXTENSION_NOT_PRESENT'
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_FORMAT_NOT_SUPPORTED'
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_INITIALIZATION_FAILED'
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_UNKNOWN'
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_VALIDATION_FAILED'
--
-- 'Vulkan.Core10.Enums.Format.FORMAT_B8G8R8A8_UNORM',
-- 'Vulkan.Core10.Enums.Format.FORMAT_R8G8B8A8_UNORM',
-- 'Vulkan.Core10.Enums.Format.FORMAT_R8G8B8_UNORM',
-- 'Vulkan.Core10.Enums.Format.FORMAT_B8G8R8_UNORM',
-- 'Vulkan.Core10.Enums.Format.FORMAT_R8_UNORM', and
-- 'Vulkan.Core10.Enums.Format.FORMAT_B10G11R11_UFLOAT_PACK32' are
-- initially supported for images with
-- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#opticalflow-usageARM optical flow usage>
-- 'DATA_GRAPH_OPTICAL_FLOW_IMAGE_USAGE_INPUT_BIT_ARM'.
--
-- 'Vulkan.Core10.Enums.Format.FORMAT_R16G16_SFLOAT' is initially supported
-- for images with
-- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#opticalflow-usageARM optical flow usage>
-- 'DATA_GRAPH_OPTICAL_FLOW_IMAGE_USAGE_OUTPUT_BIT_ARM' and
-- 'DATA_GRAPH_OPTICAL_FLOW_IMAGE_USAGE_HINT_BIT_ARM'.
--
-- 'Vulkan.Core10.Enums.Format.FORMAT_R16_UINT' is initially supported for
-- images with
-- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#opticalflow-usageARM optical flow usage>
-- 'DATA_GRAPH_OPTICAL_FLOW_IMAGE_USAGE_COST_BIT_ARM'.
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ARM_data_graph_optical_flow VK_ARM_data_graph_optical_flow>,
-- 'DataGraphOpticalFlowImageFormatInfoARM',
-- 'DataGraphOpticalFlowImageFormatPropertiesARM',
-- 'Vulkan.Core10.Handles.PhysicalDevice',
-- 'Vulkan.Extensions.VK_ARM_data_graph.QueueFamilyDataGraphPropertiesARM'
getPhysicalDeviceQueueFamilyDataGraphOpticalFlowImageFormatsARM :: forall io
                                                                 . (MonadIO io)
                                                                => -- | @physicalDevice@ is the physical device being queried.
                                                                   PhysicalDevice
                                                                -> -- | @queueFamilyIndex@ is the index of the queue family being queried.
                                                                   ("queueFamilyIndex" ::: Word32)
                                                                -> -- | @pQueueFamilyDataGraphProperties@ is a pointer to a
                                                                   -- 'Vulkan.Extensions.VK_ARM_data_graph.QueueFamilyDataGraphPropertiesARM'
                                                                   -- structure that selects the processing engine and operation set for which
                                                                   -- the properties are queried.
                                                                   QueueFamilyDataGraphPropertiesARM
                                                                -> -- | @pOpticalFlowImageFormatInfo@ is a pointer to a
                                                                   -- 'DataGraphOpticalFlowImageFormatInfoARM' structure specifying the
                                                                   -- optical flow usage for which information is returned.
                                                                   DataGraphOpticalFlowImageFormatInfoARM
                                                                -> io (Result, ("imageFormatProperties" ::: Vector DataGraphOpticalFlowImageFormatPropertiesARM))
getPhysicalDeviceQueueFamilyDataGraphOpticalFlowImageFormatsARM physicalDevice
                                                                  queueFamilyIndex
                                                                  queueFamilyDataGraphProperties
                                                                  opticalFlowImageFormatInfo = liftIO . evalContT $ do
  let vkGetPhysicalDeviceQueueFamilyDataGraphOpticalFlowImageFormatsARMPtr = pVkGetPhysicalDeviceQueueFamilyDataGraphOpticalFlowImageFormatsARM (case physicalDevice of PhysicalDevice{instanceCmds} -> instanceCmds)
  lift $ unless (vkGetPhysicalDeviceQueueFamilyDataGraphOpticalFlowImageFormatsARMPtr /= nullFunPtr) $
    throwIO $ IOError Nothing InvalidArgument "" "The function pointer for vkGetPhysicalDeviceQueueFamilyDataGraphOpticalFlowImageFormatsARM is null" Nothing Nothing
  let vkGetPhysicalDeviceQueueFamilyDataGraphOpticalFlowImageFormatsARM' = mkVkGetPhysicalDeviceQueueFamilyDataGraphOpticalFlowImageFormatsARM vkGetPhysicalDeviceQueueFamilyDataGraphOpticalFlowImageFormatsARMPtr
  let physicalDevice' = physicalDeviceHandle (physicalDevice)
  pQueueFamilyDataGraphProperties <- ContT $ withCStruct (queueFamilyDataGraphProperties)
  pOpticalFlowImageFormatInfo <- ContT $ withCStruct (opticalFlowImageFormatInfo)
  pPFormatCount <- ContT $ bracket (callocBytes @Word32 4) free
  r <- lift $ traceAroundEvent "vkGetPhysicalDeviceQueueFamilyDataGraphOpticalFlowImageFormatsARM" (vkGetPhysicalDeviceQueueFamilyDataGraphOpticalFlowImageFormatsARM'
                                                                                                      physicalDevice'
                                                                                                      (queueFamilyIndex)
                                                                                                      pQueueFamilyDataGraphProperties
                                                                                                      pOpticalFlowImageFormatInfo
                                                                                                      (pPFormatCount)
                                                                                                      (nullPtr))
  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
  pFormatCount <- lift $ peek @Word32 pPFormatCount
  pPImageFormatProperties <- ContT $ bracket (callocBytes @DataGraphOpticalFlowImageFormatPropertiesARM ((fromIntegral (pFormatCount)) * 24)) free
  _ <- traverse (\i -> ContT $ pokeZeroCStruct (pPImageFormatProperties `advancePtrBytes` (i * 24) :: Ptr DataGraphOpticalFlowImageFormatPropertiesARM) . ($ ())) [0..(fromIntegral (pFormatCount)) - 1]
  r' <- lift $ traceAroundEvent "vkGetPhysicalDeviceQueueFamilyDataGraphOpticalFlowImageFormatsARM" (vkGetPhysicalDeviceQueueFamilyDataGraphOpticalFlowImageFormatsARM'
                                                                                                       physicalDevice'
                                                                                                       (queueFamilyIndex)
                                                                                                       pQueueFamilyDataGraphProperties
                                                                                                       pOpticalFlowImageFormatInfo
                                                                                                       (pPFormatCount)
                                                                                                       ((pPImageFormatProperties)))
  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
  pFormatCount' <- lift $ peek @Word32 pPFormatCount
  pImageFormatProperties' <- lift $ generateM (fromIntegral (pFormatCount')) (\i -> peekCStruct @DataGraphOpticalFlowImageFormatPropertiesARM (((pPImageFormatProperties) `advancePtrBytes` (24 * (i)) :: Ptr DataGraphOpticalFlowImageFormatPropertiesARM)))
  pure $ ((r'), pImageFormatProperties')


-- | VkDataGraphPipelineResourceInfoImageLayoutARM - Structure specifying
-- parameters of a graph pipeline image resource
--
-- == Structure Chaining
--
-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-validusage-pNext Extends the structure>]
--
--     -   'Vulkan.Extensions.VK_ARM_data_graph.DataGraphPipelineResourceInfoARM'
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ARM_data_graph_optical_flow VK_ARM_data_graph_optical_flow>,
-- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data DataGraphPipelineResourceInfoImageLayoutARM = DataGraphPipelineResourceInfoImageLayoutARM
  { -- | @layout@ specifies the layout that the image subresource accessible from
    -- the view provided as a graph pipeline resource /must/ be in at the time
    -- where the graph pipeline being created is dispatched.
    --
    -- #VUID-VkDataGraphPipelineResourceInfoImageLayoutARM-layout-parameter#
    -- @layout@ /must/ be a valid 'Vulkan.Core10.Enums.ImageLayout.ImageLayout'
    -- value
    layout :: ImageLayout }
  deriving (Typeable, Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DataGraphPipelineResourceInfoImageLayoutARM)
#endif
deriving instance Show DataGraphPipelineResourceInfoImageLayoutARM

instance ToCStruct DataGraphPipelineResourceInfoImageLayoutARM where
  withCStruct x f = allocaBytes 24 $ \p -> pokeCStruct p x (f p)
  pokeCStruct p DataGraphPipelineResourceInfoImageLayoutARM{..} f = do
    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_RESOURCE_INFO_IMAGE_LAYOUT_ARM)
    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
    poke ((p `plusPtr` 16 :: Ptr ImageLayout)) (layout)
    f
  cStructSize = 24
  cStructAlignment = 8
  pokeZeroCStruct p f = do
    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_RESOURCE_INFO_IMAGE_LAYOUT_ARM)
    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
    poke ((p `plusPtr` 16 :: Ptr ImageLayout)) (zero)
    f

instance FromCStruct DataGraphPipelineResourceInfoImageLayoutARM where
  peekCStruct p = do
    layout <- peek @ImageLayout ((p `plusPtr` 16 :: Ptr ImageLayout))
    pure $ DataGraphPipelineResourceInfoImageLayoutARM
             layout

instance Storable DataGraphPipelineResourceInfoImageLayoutARM where
  sizeOf ~_ = 24
  alignment ~_ = 8
  peek = peekCStruct
  poke ptr poked = pokeCStruct ptr poked (pure ())

instance Zero DataGraphPipelineResourceInfoImageLayoutARM where
  zero = DataGraphPipelineResourceInfoImageLayoutARM
           zero


-- | VkDataGraphPipelineSingleNodeConnectionARM - Structure describing a
-- single connection between a data graph node and the pipeline layout of a
-- graph pipeline
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ARM_data_graph_optical_flow VK_ARM_data_graph_optical_flow>,
-- 'DataGraphPipelineNodeConnectionTypeARM',
-- 'DataGraphPipelineSingleNodeCreateInfoARM',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data DataGraphPipelineSingleNodeConnectionARM = DataGraphPipelineSingleNodeConnectionARM
  { -- | @set@ is the descriptor set number of the graph pipeline layout resource
    -- to be connected to this connection point.
    set :: Word32
  , -- | @binding@ is the binding number of the graph pipeline layout resource to
    -- be connected to this connection point.
    binding :: Word32
  , -- | @connection@ is a 'DataGraphPipelineNodeConnectionTypeARM' specifying
    -- the connection point to link to a graph pipeline layout resource.
    --
    -- #VUID-VkDataGraphPipelineSingleNodeConnectionARM-connection-parameter#
    -- @connection@ /must/ be a valid 'DataGraphPipelineNodeConnectionTypeARM'
    -- value
    connection :: DataGraphPipelineNodeConnectionTypeARM
  }
  deriving (Typeable, Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DataGraphPipelineSingleNodeConnectionARM)
#endif
deriving instance Show DataGraphPipelineSingleNodeConnectionARM

instance ToCStruct DataGraphPipelineSingleNodeConnectionARM where
  withCStruct x f = allocaBytes 32 $ \p -> pokeCStruct p x (f p)
  pokeCStruct p DataGraphPipelineSingleNodeConnectionARM{..} f = do
    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SINGLE_NODE_CONNECTION_ARM)
    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
    poke ((p `plusPtr` 16 :: Ptr Word32)) (set)
    poke ((p `plusPtr` 20 :: Ptr Word32)) (binding)
    poke ((p `plusPtr` 24 :: Ptr DataGraphPipelineNodeConnectionTypeARM)) (connection)
    f
  cStructSize = 32
  cStructAlignment = 8
  pokeZeroCStruct p f = do
    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SINGLE_NODE_CONNECTION_ARM)
    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
    poke ((p `plusPtr` 24 :: Ptr DataGraphPipelineNodeConnectionTypeARM)) (zero)
    f

instance FromCStruct DataGraphPipelineSingleNodeConnectionARM where
  peekCStruct p = do
    set <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
    binding <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
    connection <- peek @DataGraphPipelineNodeConnectionTypeARM ((p `plusPtr` 24 :: Ptr DataGraphPipelineNodeConnectionTypeARM))
    pure $ DataGraphPipelineSingleNodeConnectionARM
             set binding connection

instance Storable DataGraphPipelineSingleNodeConnectionARM where
  sizeOf ~_ = 32
  alignment ~_ = 8
  peek = peekCStruct
  poke ptr poked = pokeCStruct ptr poked (pure ())

instance Zero DataGraphPipelineSingleNodeConnectionARM where
  zero = DataGraphPipelineSingleNodeConnectionARM
           zero
           zero
           zero


-- | VkPhysicalDeviceDataGraphOpticalFlowFeaturesARM - Structure describing
-- the data graph optical flow features supported by the implementation
--
-- = Members
--
-- This structure describes the following feature: * @sType@ is a
-- 'Vulkan.Core10.Enums.StructureType.StructureType' value identifying this
-- structure. * @pNext@ is @NULL@ or a pointer to a structure extending
-- this structure. * #features-dataGraphOpticalFlow# @dataGraphOpticalFlow@
-- indicates whether the implementation supports optical flow graph
-- pipelines.
--
-- If the 'PhysicalDeviceDataGraphOpticalFlowFeaturesARM' 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
-- 'PhysicalDeviceDataGraphOpticalFlowFeaturesARM', 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'.
--
-- == Structure Chaining
--
-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-validusage-pNext Extends the structures>]
--
--     -   'Vulkan.Core10.Device.DeviceCreateInfo'
--
--     -   'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2'
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ARM_data_graph_optical_flow VK_ARM_data_graph_optical_flow>,
-- 'Vulkan.Core10.FundamentalTypes.Bool32',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data PhysicalDeviceDataGraphOpticalFlowFeaturesARM = PhysicalDeviceDataGraphOpticalFlowFeaturesARM
  { -- No documentation found for Nested "VkPhysicalDeviceDataGraphOpticalFlowFeaturesARM" "dataGraphOpticalFlow"
    dataGraphOpticalFlow :: Bool }
  deriving (Typeable, Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (PhysicalDeviceDataGraphOpticalFlowFeaturesARM)
#endif
deriving instance Show PhysicalDeviceDataGraphOpticalFlowFeaturesARM

instance ToCStruct PhysicalDeviceDataGraphOpticalFlowFeaturesARM where
  withCStruct x f = allocaBytes 24 $ \p -> pokeCStruct p x (f p)
  pokeCStruct p PhysicalDeviceDataGraphOpticalFlowFeaturesARM{..} f = do
    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_DATA_GRAPH_OPTICAL_FLOW_FEATURES_ARM)
    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (dataGraphOpticalFlow))
    f
  cStructSize = 24
  cStructAlignment = 8
  pokeZeroCStruct p f = do
    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_PHYSICAL_DEVICE_DATA_GRAPH_OPTICAL_FLOW_FEATURES_ARM)
    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
    poke ((p `plusPtr` 16 :: Ptr Bool32)) (boolToBool32 (zero))
    f

instance FromCStruct PhysicalDeviceDataGraphOpticalFlowFeaturesARM where
  peekCStruct p = do
    dataGraphOpticalFlow <- peek @Bool32 ((p `plusPtr` 16 :: Ptr Bool32))
    pure $ PhysicalDeviceDataGraphOpticalFlowFeaturesARM
             (bool32ToBool dataGraphOpticalFlow)

instance Storable PhysicalDeviceDataGraphOpticalFlowFeaturesARM where
  sizeOf ~_ = 24
  alignment ~_ = 8
  peek = peekCStruct
  poke ptr poked = pokeCStruct ptr poked (pure ())

instance Zero PhysicalDeviceDataGraphOpticalFlowFeaturesARM where
  zero = PhysicalDeviceDataGraphOpticalFlowFeaturesARM
           zero


-- | VkQueueFamilyDataGraphOpticalFlowPropertiesARM - Structure describing
-- optical flow properties of a processing engine and operation set 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_optical_flow VK_ARM_data_graph_optical_flow>,
-- 'Vulkan.Core10.FundamentalTypes.Bool32',
-- 'DataGraphOpticalFlowGridSizeFlagsARM',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data QueueFamilyDataGraphOpticalFlowPropertiesARM = QueueFamilyDataGraphOpticalFlowPropertiesARM
  { -- | #limits-supportedOutputGridSizesARM# @supportedOutputGridSizes@ are the
    -- supported 'DataGraphOpticalFlowGridSizeFlagsARM' which /can/ be
    -- specified in
    -- 'DataGraphPipelineOpticalFlowCreateInfoARM'::@outputGridSize@.
    supportedOutputGridSizes :: DataGraphOpticalFlowGridSizeFlagsARM
  , -- | #limits-supportedHintGridSizesARM# @supportedHintGridSizes@ are the
    -- supported 'DataGraphOpticalFlowGridSizeFlagsARM' which /can/ be
    -- specified in
    -- 'DataGraphPipelineOpticalFlowCreateInfoARM'::@hintGridSize@.
    supportedHintGridSizes :: DataGraphOpticalFlowGridSizeFlagsARM
  , -- | #limits-hintSupportedARM# @hintSupported@ is a boolean describing
    -- whether using hint flow vector map is supported in an optical flow graph
    -- pipeline.
    hintSupported :: Bool
  , -- | #limits-costSupportedARM# @costSupported@ is a boolean describing
    -- whether cost map generation is supported in an optical flow graph
    -- pipeline.
    costSupported :: Bool
  , -- | #limits-minWidthARM# @minWidth@ is the minimum width in pixels for
    -- images used in an optical flow graph pipeline.
    minWidth :: Word32
  , -- | #limits-minHeightARM# @minHeight@ is the minimum height in pixels for
    -- images used in an optical flow graph pipeline.
    minHeight :: Word32
  , -- | #limits-maxWidthARM# @maxWidth@ is the maximum width in pixels for
    -- images used in an optical flow graph pipeline.
    maxWidth :: Word32
  , -- | #limits-maxHeightARM# @maxHeight@ is the maximum height in pixels for
    -- images used in an optical flow graph pipeline.
    maxHeight :: Word32
  }
  deriving (Typeable, Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (QueueFamilyDataGraphOpticalFlowPropertiesARM)
#endif
deriving instance Show QueueFamilyDataGraphOpticalFlowPropertiesARM

instance ToCStruct QueueFamilyDataGraphOpticalFlowPropertiesARM where
  withCStruct x f = allocaBytes 48 $ \p -> pokeCStruct p x (f p)
  pokeCStruct p QueueFamilyDataGraphOpticalFlowPropertiesARM{..} f = do
    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_QUEUE_FAMILY_DATA_GRAPH_OPTICAL_FLOW_PROPERTIES_ARM)
    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
    poke ((p `plusPtr` 16 :: Ptr DataGraphOpticalFlowGridSizeFlagsARM)) (supportedOutputGridSizes)
    poke ((p `plusPtr` 20 :: Ptr DataGraphOpticalFlowGridSizeFlagsARM)) (supportedHintGridSizes)
    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (hintSupported))
    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (costSupported))
    poke ((p `plusPtr` 32 :: Ptr Word32)) (minWidth)
    poke ((p `plusPtr` 36 :: Ptr Word32)) (minHeight)
    poke ((p `plusPtr` 40 :: Ptr Word32)) (maxWidth)
    poke ((p `plusPtr` 44 :: Ptr Word32)) (maxHeight)
    f
  cStructSize = 48
  cStructAlignment = 8
  pokeZeroCStruct p f = do
    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_QUEUE_FAMILY_DATA_GRAPH_OPTICAL_FLOW_PROPERTIES_ARM)
    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
    poke ((p `plusPtr` 16 :: Ptr DataGraphOpticalFlowGridSizeFlagsARM)) (zero)
    poke ((p `plusPtr` 20 :: Ptr DataGraphOpticalFlowGridSizeFlagsARM)) (zero)
    poke ((p `plusPtr` 24 :: Ptr Bool32)) (boolToBool32 (zero))
    poke ((p `plusPtr` 28 :: Ptr Bool32)) (boolToBool32 (zero))
    poke ((p `plusPtr` 32 :: Ptr Word32)) (zero)
    poke ((p `plusPtr` 36 :: Ptr Word32)) (zero)
    poke ((p `plusPtr` 40 :: Ptr Word32)) (zero)
    poke ((p `plusPtr` 44 :: Ptr Word32)) (zero)
    f

instance FromCStruct QueueFamilyDataGraphOpticalFlowPropertiesARM where
  peekCStruct p = do
    supportedOutputGridSizes <- peek @DataGraphOpticalFlowGridSizeFlagsARM ((p `plusPtr` 16 :: Ptr DataGraphOpticalFlowGridSizeFlagsARM))
    supportedHintGridSizes <- peek @DataGraphOpticalFlowGridSizeFlagsARM ((p `plusPtr` 20 :: Ptr DataGraphOpticalFlowGridSizeFlagsARM))
    hintSupported <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
    costSupported <- peek @Bool32 ((p `plusPtr` 28 :: Ptr Bool32))
    minWidth <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
    minHeight <- peek @Word32 ((p `plusPtr` 36 :: Ptr Word32))
    maxWidth <- peek @Word32 ((p `plusPtr` 40 :: Ptr Word32))
    maxHeight <- peek @Word32 ((p `plusPtr` 44 :: Ptr Word32))
    pure $ QueueFamilyDataGraphOpticalFlowPropertiesARM
             supportedOutputGridSizes
             supportedHintGridSizes
             (bool32ToBool hintSupported)
             (bool32ToBool costSupported)
             minWidth
             minHeight
             maxWidth
             maxHeight

instance Storable QueueFamilyDataGraphOpticalFlowPropertiesARM where
  sizeOf ~_ = 48
  alignment ~_ = 8
  peek = peekCStruct
  poke ptr poked = pokeCStruct ptr poked (pure ())

instance Zero QueueFamilyDataGraphOpticalFlowPropertiesARM where
  zero = QueueFamilyDataGraphOpticalFlowPropertiesARM
           zero
           zero
           zero
           zero
           zero
           zero
           zero
           zero


-- | VkDataGraphOpticalFlowImageFormatInfoARM - Structure describing data
-- graph optical flow image format info
--
-- == Structure Chaining
--
-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-validusage-pNext Extends the structures>]
--
--     -   'Vulkan.Core10.Image.ImageCreateInfo'
--
--     -   'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceImageFormatInfo2'
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ARM_data_graph_optical_flow VK_ARM_data_graph_optical_flow>,
-- 'DataGraphOpticalFlowImageUsageFlagsARM',
-- 'Vulkan.Core10.Enums.StructureType.StructureType',
-- 'getPhysicalDeviceQueueFamilyDataGraphOpticalFlowImageFormatsARM'
data DataGraphOpticalFlowImageFormatInfoARM = DataGraphOpticalFlowImageFormatInfoARM
  { -- | #opticalflow-usageARM# @usage@ is a bitmask of
    -- 'DataGraphOpticalFlowImageUsageFlagBitsARM' describing the intended
    -- optical flow usage of the image.
    --
    -- #VUID-VkDataGraphOpticalFlowImageFormatInfoARM-usage-parameter# @usage@
    -- /must/ be a valid combination of
    -- 'DataGraphOpticalFlowImageUsageFlagBitsARM' values
    --
    -- #VUID-VkDataGraphOpticalFlowImageFormatInfoARM-usage-requiredbitmask#
    -- @usage@ /must/ not be @0@
    usage :: DataGraphOpticalFlowImageUsageFlagsARM }
  deriving (Typeable, Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DataGraphOpticalFlowImageFormatInfoARM)
#endif
deriving instance Show DataGraphOpticalFlowImageFormatInfoARM

instance ToCStruct DataGraphOpticalFlowImageFormatInfoARM where
  withCStruct x f = allocaBytes 24 $ \p -> pokeCStruct p x (f p)
  pokeCStruct p DataGraphOpticalFlowImageFormatInfoARM{..} f = do
    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DATA_GRAPH_OPTICAL_FLOW_IMAGE_FORMAT_INFO_ARM)
    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
    poke ((p `plusPtr` 16 :: Ptr DataGraphOpticalFlowImageUsageFlagsARM)) (usage)
    f
  cStructSize = 24
  cStructAlignment = 8
  pokeZeroCStruct p f = do
    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DATA_GRAPH_OPTICAL_FLOW_IMAGE_FORMAT_INFO_ARM)
    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
    poke ((p `plusPtr` 16 :: Ptr DataGraphOpticalFlowImageUsageFlagsARM)) (zero)
    f

instance FromCStruct DataGraphOpticalFlowImageFormatInfoARM where
  peekCStruct p = do
    usage <- peek @DataGraphOpticalFlowImageUsageFlagsARM ((p `plusPtr` 16 :: Ptr DataGraphOpticalFlowImageUsageFlagsARM))
    pure $ DataGraphOpticalFlowImageFormatInfoARM
             usage

instance Storable DataGraphOpticalFlowImageFormatInfoARM where
  sizeOf ~_ = 24
  alignment ~_ = 8
  peek = peekCStruct
  poke ptr poked = pokeCStruct ptr poked (pure ())

instance Zero DataGraphOpticalFlowImageFormatInfoARM where
  zero = DataGraphOpticalFlowImageFormatInfoARM
           zero


-- | VkDataGraphOpticalFlowImageFormatPropertiesARM - Structure describing
-- properties of an optical flow image format
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ARM_data_graph_optical_flow VK_ARM_data_graph_optical_flow>,
-- 'Vulkan.Core10.Enums.Format.Format',
-- 'Vulkan.Core10.Enums.StructureType.StructureType',
-- 'getPhysicalDeviceQueueFamilyDataGraphOpticalFlowImageFormatsARM'
data DataGraphOpticalFlowImageFormatPropertiesARM = DataGraphOpticalFlowImageFormatPropertiesARM
  { -- | #opticalflow-formatARM# @format@ is a
    -- 'Vulkan.Core10.Enums.Format.Format' that specifies the format that /can/
    -- be used with the specified optical flow image usages.
    format :: Format }
  deriving (Typeable, Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DataGraphOpticalFlowImageFormatPropertiesARM)
#endif
deriving instance Show DataGraphOpticalFlowImageFormatPropertiesARM

instance ToCStruct DataGraphOpticalFlowImageFormatPropertiesARM where
  withCStruct x f = allocaBytes 24 $ \p -> pokeCStruct p x (f p)
  pokeCStruct p DataGraphOpticalFlowImageFormatPropertiesARM{..} f = do
    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DATA_GRAPH_OPTICAL_FLOW_IMAGE_FORMAT_PROPERTIES_ARM)
    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
    poke ((p `plusPtr` 16 :: Ptr Format)) (format)
    f
  cStructSize = 24
  cStructAlignment = 8
  pokeZeroCStruct p f = do
    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DATA_GRAPH_OPTICAL_FLOW_IMAGE_FORMAT_PROPERTIES_ARM)
    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
    poke ((p `plusPtr` 16 :: Ptr Format)) (zero)
    f

instance FromCStruct DataGraphOpticalFlowImageFormatPropertiesARM where
  peekCStruct p = do
    format <- peek @Format ((p `plusPtr` 16 :: Ptr Format))
    pure $ DataGraphOpticalFlowImageFormatPropertiesARM
             format

instance Storable DataGraphOpticalFlowImageFormatPropertiesARM where
  sizeOf ~_ = 24
  alignment ~_ = 8
  peek = peekCStruct
  poke ptr poked = pokeCStruct ptr poked (pure ())

instance Zero DataGraphOpticalFlowImageFormatPropertiesARM where
  zero = DataGraphOpticalFlowImageFormatPropertiesARM
           zero


-- | VkDataGraphPipelineSingleNodeCreateInfoARM - Structure specifying
-- parameters of a newly-created single fixed-function node graph pipeline
--
-- == Valid Usage
--
-- -   #VUID-VkDataGraphPipelineSingleNodeCreateInfoARM-nodeType-09963# If
--     @nodeType@ is 'DATA_GRAPH_PIPELINE_NODE_TYPE_OPTICAL_FLOW_ARM', then
--     a 'DataGraphPipelineOpticalFlowCreateInfoARM' structure /must/ be
--     included in the @pNext@ chain of this structure
--
-- -   #VUID-VkDataGraphPipelineSingleNodeCreateInfoARM-nodeType-09978# If
--     @nodeType@ is 'DATA_GRAPH_PIPELINE_NODE_TYPE_OPTICAL_FLOW_ARM', then
--     one and only 'DataGraphPipelineSingleNodeConnectionARM' structure
--     /must/ be present in the @pConnections@ array for each of the
--     following values of its @connection@ member:
--
--     -   'DATA_GRAPH_PIPELINE_NODE_CONNECTION_TYPE_OPTICAL_FLOW_INPUT_ARM'
--
--     -   'DATA_GRAPH_PIPELINE_NODE_CONNECTION_TYPE_OPTICAL_FLOW_REFERENCE_ARM'
--
--     -   'DATA_GRAPH_PIPELINE_NODE_CONNECTION_TYPE_OPTICAL_FLOW_FLOW_VECTOR_ARM'
--
-- -   #VUID-VkDataGraphPipelineSingleNodeCreateInfoARM-nodeType-09979# If
--     @nodeType@ is 'DATA_GRAPH_PIPELINE_NODE_TYPE_OPTICAL_FLOW_ARM' and
--     'DataGraphPipelineOpticalFlowCreateInfoARM'::@hintGridSize@ is not
--     0, then one and only 'DataGraphPipelineSingleNodeConnectionARM'
--     structure whose @connection@ member is
--     'DATA_GRAPH_PIPELINE_NODE_CONNECTION_TYPE_OPTICAL_FLOW_HINT_ARM'
--     /must/ be present in the @pConnections@ array
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkDataGraphPipelineSingleNodeCreateInfoARM-sType-sType#
--     @sType@ /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SINGLE_NODE_CREATE_INFO_ARM'
--
-- -   #VUID-VkDataGraphPipelineSingleNodeCreateInfoARM-nodeType-parameter#
--     @nodeType@ /must/ be a valid 'DataGraphPipelineNodeTypeARM' value
--
-- -   #VUID-VkDataGraphPipelineSingleNodeCreateInfoARM-pConnections-parameter#
--     @pConnections@ /must/ be a valid pointer to an array of
--     @connectionCount@ valid 'DataGraphPipelineSingleNodeConnectionARM'
--     structures
--
-- -   #VUID-VkDataGraphPipelineSingleNodeCreateInfoARM-connectionCount-arraylength#
--     @connectionCount@ /must/ be greater than @0@
--
-- == Structure Chaining
--
-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-validusage-pNext Extends the structure>]
--
--     -   'Vulkan.Extensions.VK_ARM_data_graph.DataGraphPipelineCreateInfoARM'
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ARM_data_graph_optical_flow VK_ARM_data_graph_optical_flow>,
-- 'DataGraphPipelineNodeTypeARM',
-- 'DataGraphPipelineSingleNodeConnectionARM',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data DataGraphPipelineSingleNodeCreateInfoARM = DataGraphPipelineSingleNodeCreateInfoARM
  { -- | @nodeType@ is a 'DataGraphPipelineNodeTypeARM' describing the type of
    -- this node.
    nodeType :: DataGraphPipelineNodeTypeARM
  , -- | @pConnections@ is a pointer to an array of @connectionCount@
    -- 'DataGraphPipelineSingleNodeConnectionARM' structures.
    connections :: Vector DataGraphPipelineSingleNodeConnectionARM
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DataGraphPipelineSingleNodeCreateInfoARM)
#endif
deriving instance Show DataGraphPipelineSingleNodeCreateInfoARM

instance ToCStruct DataGraphPipelineSingleNodeCreateInfoARM where
  withCStruct x f = allocaBytes 32 $ \p -> pokeCStruct p x (f p)
  pokeCStruct p DataGraphPipelineSingleNodeCreateInfoARM{..} f = evalContT $ do
    lift $ poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SINGLE_NODE_CREATE_INFO_ARM)
    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
    lift $ poke ((p `plusPtr` 16 :: Ptr DataGraphPipelineNodeTypeARM)) (nodeType)
    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (connections)) :: Word32))
    pPConnections' <- ContT $ allocaBytes @DataGraphPipelineSingleNodeConnectionARM ((Data.Vector.length (connections)) * 32)
    lift $ Data.Vector.imapM_ (\i e -> poke (pPConnections' `plusPtr` (32 * (i)) :: Ptr DataGraphPipelineSingleNodeConnectionARM) (e)) (connections)
    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr DataGraphPipelineSingleNodeConnectionARM))) (pPConnections')
    lift $ f
  cStructSize = 32
  cStructAlignment = 8
  pokeZeroCStruct p f = do
    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_SINGLE_NODE_CREATE_INFO_ARM)
    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
    poke ((p `plusPtr` 16 :: Ptr DataGraphPipelineNodeTypeARM)) (zero)
    f

instance FromCStruct DataGraphPipelineSingleNodeCreateInfoARM where
  peekCStruct p = do
    nodeType <- peek @DataGraphPipelineNodeTypeARM ((p `plusPtr` 16 :: Ptr DataGraphPipelineNodeTypeARM))
    connectionCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
    pConnections <- peek @(Ptr DataGraphPipelineSingleNodeConnectionARM) ((p `plusPtr` 24 :: Ptr (Ptr DataGraphPipelineSingleNodeConnectionARM)))
    pConnections' <- generateM (fromIntegral connectionCount) (\i -> peekCStruct @DataGraphPipelineSingleNodeConnectionARM ((pConnections `advancePtrBytes` (32 * (i)) :: Ptr DataGraphPipelineSingleNodeConnectionARM)))
    pure $ DataGraphPipelineSingleNodeCreateInfoARM
             nodeType pConnections'

instance Zero DataGraphPipelineSingleNodeCreateInfoARM where
  zero = DataGraphPipelineSingleNodeCreateInfoARM
           zero
           mempty


-- | VkDataGraphPipelineOpticalFlowCreateInfoARM - Structure specifying the
-- parameters of a newly-created optical flow graph pipeline
--
-- == Valid Usage
--
-- -   #VUID-VkDataGraphPipelineOpticalFlowCreateInfoARM-width-09966#
--     @width@ /must/ be greater than or equal to
--     'QueueFamilyDataGraphOpticalFlowPropertiesARM'::@minWidth@ and less
--     than or equal to
--     'QueueFamilyDataGraphOpticalFlowPropertiesARM'::@maxWidth@
--
-- -   #VUID-VkDataGraphPipelineOpticalFlowCreateInfoARM-height-09967#
--     @height@ /must/ be greater than or equal to
--     'QueueFamilyDataGraphOpticalFlowPropertiesARM'::@minHeight@ and less
--     than or equal to
--     'QueueFamilyDataGraphOpticalFlowPropertiesARM'::@maxHeight@
--
-- -   #VUID-VkDataGraphPipelineOpticalFlowCreateInfoARM-imageFormat-09968#
--     @imageFormat@ /must/ be one of the formats returned by
--     'getPhysicalDeviceQueueFamilyDataGraphOpticalFlowImageFormatsARM'
--     for 'DATA_GRAPH_OPTICAL_FLOW_IMAGE_USAGE_INPUT_BIT_ARM'
--
-- -   #VUID-VkDataGraphPipelineOpticalFlowCreateInfoARM-flowVectorFormat-09969#
--     @flowVectorFormat@ /must/ be one of the formats returned by
--     'getPhysicalDeviceQueueFamilyDataGraphOpticalFlowImageFormatsARM'
--     for 'DATA_GRAPH_OPTICAL_FLOW_IMAGE_USAGE_OUTPUT_BIT_ARM'
--
-- -   #VUID-VkDataGraphPipelineOpticalFlowCreateInfoARM-costFormat-09970#
--     @costFormat@ /must/ be one of the formats returned by
--     'getPhysicalDeviceQueueFamilyDataGraphOpticalFlowImageFormatsARM'
--     for 'DATA_GRAPH_OPTICAL_FLOW_IMAGE_USAGE_COST_BIT_ARM' if
--     'DATA_GRAPH_OPTICAL_FLOW_CREATE_ENABLE_COST_BIT_ARM' is set in
--     @flags@
--
-- -   #VUID-VkDataGraphPipelineOpticalFlowCreateInfoARM-outputGridSize-09971#
--     @outputGridSize@ /must/ be exactly one of the bits reported in
--     'QueueFamilyDataGraphOpticalFlowPropertiesARM'::@supportedOutputGridSizes@
--
-- -   #VUID-VkDataGraphPipelineOpticalFlowCreateInfoARM-hintGridSize-09972#
--     @hintGridSize@ /must/ be 0 or exactly one of the bits reported in
--     'QueueFamilyDataGraphOpticalFlowPropertiesARM'::@supportedHintGridSizes@
--     if 'DATA_GRAPH_OPTICAL_FLOW_CREATE_ENABLE_HINT_BIT_ARM' is set in
--     @flags@
--
-- -   #VUID-VkDataGraphPipelineOpticalFlowCreateInfoARM-hintGridSize-09973#
--     @hintGridSize@ /must/ be the same as @outputGridSize@ if
--     @hintGridSize@ is not 0
--
-- -   #VUID-VkDataGraphPipelineOpticalFlowCreateInfoARM-flags-09974#
--     'DATA_GRAPH_OPTICAL_FLOW_CREATE_ENABLE_HINT_BIT_ARM' /must/ not be
--     set in @flags@ if
--     'QueueFamilyDataGraphOpticalFlowPropertiesARM'::@hintSupported@ is
--     'Vulkan.Core10.FundamentalTypes.FALSE'
--
-- -   #VUID-VkDataGraphPipelineOpticalFlowCreateInfoARM-flags-09975#
--     'DATA_GRAPH_OPTICAL_FLOW_CREATE_ENABLE_COST_BIT_ARM' /must/ not be
--     set in @flags@ if
--     'QueueFamilyDataGraphOpticalFlowPropertiesARM'::@costSupported@ is
--     'Vulkan.Core10.FundamentalTypes.FALSE'
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkDataGraphPipelineOpticalFlowCreateInfoARM-sType-sType#
--     @sType@ /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_OPTICAL_FLOW_CREATE_INFO_ARM'
--
-- -   #VUID-VkDataGraphPipelineOpticalFlowCreateInfoARM-imageFormat-parameter#
--     @imageFormat@ /must/ be a valid 'Vulkan.Core10.Enums.Format.Format'
--     value
--
-- -   #VUID-VkDataGraphPipelineOpticalFlowCreateInfoARM-flowVectorFormat-parameter#
--     @flowVectorFormat@ /must/ be a valid
--     'Vulkan.Core10.Enums.Format.Format' value
--
-- -   #VUID-VkDataGraphPipelineOpticalFlowCreateInfoARM-costFormat-parameter#
--     If @costFormat@ is not @0@, @costFormat@ /must/ be a valid
--     'Vulkan.Core10.Enums.Format.Format' value
--
-- -   #VUID-VkDataGraphPipelineOpticalFlowCreateInfoARM-performanceLevel-parameter#
--     If @performanceLevel@ is not @0@, @performanceLevel@ /must/ be a
--     valid 'DataGraphOpticalFlowPerformanceLevelARM' value
--
-- -   #VUID-VkDataGraphPipelineOpticalFlowCreateInfoARM-flags-parameter#
--     @flags@ /must/ be a valid combination of
--     'DataGraphOpticalFlowCreateFlagBitsARM' values
--
-- == Structure Chaining
--
-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-validusage-pNext Extends the structure>]
--
--     -   'Vulkan.Extensions.VK_ARM_data_graph.DataGraphPipelineCreateInfoARM'
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ARM_data_graph_optical_flow VK_ARM_data_graph_optical_flow>,
-- 'DataGraphOpticalFlowCreateFlagsARM',
-- 'DataGraphOpticalFlowGridSizeFlagsARM',
-- 'DataGraphOpticalFlowPerformanceLevelARM',
-- 'Vulkan.Core10.Enums.Format.Format',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data DataGraphPipelineOpticalFlowCreateInfoARM = DataGraphPipelineOpticalFlowCreateInfoARM
  { -- | @width@ is the width in pixels of the input or reference image to be
    -- bound to this optical flow pipeline.
    width :: Word32
  , -- | @height@ is the height in pixels of the input or reference image to be
    -- bound to this optical flow pipeline.
    height :: Word32
  , -- | @imageFormat@ is the 'Vulkan.Core10.Enums.Format.Format' of the input
    -- and reference image to be bound to this optical flow pipeline.
    imageFormat :: Format
  , -- | @flowVectorFormat@ is the 'Vulkan.Core10.Enums.Format.Format' of the
    -- flow vector maps (output or hint) to be bound to this optical flow
    -- pipeline.
    flowVectorFormat :: Format
  , -- | @costFormat@ is the 'Vulkan.Core10.Enums.Format.Format' of the cost maps
    -- to be bound to this optical flow pipeline.
    costFormat :: Format
  , -- | @outputGridSize@ is exactly one bit of
    -- 'DataGraphOpticalFlowGridSizeFlagsARM' specifying the grid size of the
    -- output flow and cost maps to be bound to this optical flow pipeline. The
    -- size of the output flow and cost maps is a function of the input image
    -- dimensions and @outputGridSize@ and is calculated as follows:
    -- OutputWidth = ⌈ @width@ \/ OutputGridWidth ⌉
    -- OutputHeight = ⌈ @height@ \/ OutputGridHeight ⌉
    -- where OutputGridWidth and OutputGridHeight are determined by
    -- @outputGridSize@.
    outputGridSize :: DataGraphOpticalFlowGridSizeFlagsARM
  , -- | @hintGridSize@ is one exactly bit of
    -- 'DataGraphOpticalFlowGridSizeFlagsARM' specifying the grid size of the
    -- hint flow vector map to be bound to this optical flow pipeline. The size
    -- of the hint maps is a function of the input image dimensions and
    -- @hintGridSize@ and is calculated as follows:
    -- HintWidth = ⌈ @width@ \/ HintGridWidth ⌉
    -- HintHeight = ⌈ @height@ \/ HintGridHeight ⌉
    -- where HintGridWidth and HintGridHeight are determined by @hintGridSize@.
    hintGridSize :: DataGraphOpticalFlowGridSizeFlagsARM
  , -- | @performanceLevel@ is the 'DataGraphOpticalFlowPerformanceLevelARM' used
    -- for this optical flow pipeline.
    performanceLevel :: DataGraphOpticalFlowPerformanceLevelARM
  , -- | @flags@ are the 'DataGraphOpticalFlowCreateFlagsARM' used for this
    -- optical flow pipeline.
    flags :: DataGraphOpticalFlowCreateFlagsARM
  }
  deriving (Typeable, Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DataGraphPipelineOpticalFlowCreateInfoARM)
#endif
deriving instance Show DataGraphPipelineOpticalFlowCreateInfoARM

instance ToCStruct DataGraphPipelineOpticalFlowCreateInfoARM where
  withCStruct x f = allocaBytes 56 $ \p -> pokeCStruct p x (f p)
  pokeCStruct p DataGraphPipelineOpticalFlowCreateInfoARM{..} f = do
    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_OPTICAL_FLOW_CREATE_INFO_ARM)
    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
    poke ((p `plusPtr` 16 :: Ptr Word32)) (width)
    poke ((p `plusPtr` 20 :: Ptr Word32)) (height)
    poke ((p `plusPtr` 24 :: Ptr Format)) (imageFormat)
    poke ((p `plusPtr` 28 :: Ptr Format)) (flowVectorFormat)
    poke ((p `plusPtr` 32 :: Ptr Format)) (costFormat)
    poke ((p `plusPtr` 36 :: Ptr DataGraphOpticalFlowGridSizeFlagsARM)) (outputGridSize)
    poke ((p `plusPtr` 40 :: Ptr DataGraphOpticalFlowGridSizeFlagsARM)) (hintGridSize)
    poke ((p `plusPtr` 44 :: Ptr DataGraphOpticalFlowPerformanceLevelARM)) (performanceLevel)
    poke ((p `plusPtr` 48 :: Ptr DataGraphOpticalFlowCreateFlagsARM)) (flags)
    f
  cStructSize = 56
  cStructAlignment = 8
  pokeZeroCStruct p f = do
    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_OPTICAL_FLOW_CREATE_INFO_ARM)
    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
    poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
    poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
    poke ((p `plusPtr` 24 :: Ptr Format)) (zero)
    poke ((p `plusPtr` 28 :: Ptr Format)) (zero)
    poke ((p `plusPtr` 36 :: Ptr DataGraphOpticalFlowGridSizeFlagsARM)) (zero)
    poke ((p `plusPtr` 40 :: Ptr DataGraphOpticalFlowGridSizeFlagsARM)) (zero)
    f

instance FromCStruct DataGraphPipelineOpticalFlowCreateInfoARM where
  peekCStruct p = do
    width <- peek @Word32 ((p `plusPtr` 16 :: Ptr Word32))
    height <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
    imageFormat <- peek @Format ((p `plusPtr` 24 :: Ptr Format))
    flowVectorFormat <- peek @Format ((p `plusPtr` 28 :: Ptr Format))
    costFormat <- peek @Format ((p `plusPtr` 32 :: Ptr Format))
    outputGridSize <- peek @DataGraphOpticalFlowGridSizeFlagsARM ((p `plusPtr` 36 :: Ptr DataGraphOpticalFlowGridSizeFlagsARM))
    hintGridSize <- peek @DataGraphOpticalFlowGridSizeFlagsARM ((p `plusPtr` 40 :: Ptr DataGraphOpticalFlowGridSizeFlagsARM))
    performanceLevel <- peek @DataGraphOpticalFlowPerformanceLevelARM ((p `plusPtr` 44 :: Ptr DataGraphOpticalFlowPerformanceLevelARM))
    flags <- peek @DataGraphOpticalFlowCreateFlagsARM ((p `plusPtr` 48 :: Ptr DataGraphOpticalFlowCreateFlagsARM))
    pure $ DataGraphPipelineOpticalFlowCreateInfoARM
             width
             height
             imageFormat
             flowVectorFormat
             costFormat
             outputGridSize
             hintGridSize
             performanceLevel
             flags

instance Storable DataGraphPipelineOpticalFlowCreateInfoARM where
  sizeOf ~_ = 56
  alignment ~_ = 8
  peek = peekCStruct
  poke ptr poked = pokeCStruct ptr poked (pure ())

instance Zero DataGraphPipelineOpticalFlowCreateInfoARM where
  zero = DataGraphPipelineOpticalFlowCreateInfoARM
           zero
           zero
           zero
           zero
           zero
           zero
           zero
           zero
           zero


-- | VkDataGraphPipelineOpticalFlowDispatchInfoARM - Structure specifying
-- parameters of a optical flow vector calculation
--
-- == Structure Chaining
--
-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-validusage-pNext Extends the structure>]
--
--     -   'Vulkan.Extensions.VK_ARM_data_graph.DataGraphPipelineDispatchInfoARM'
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ARM_data_graph_optical_flow VK_ARM_data_graph_optical_flow>,
-- 'DataGraphOpticalFlowExecuteFlagsARM',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data DataGraphPipelineOpticalFlowDispatchInfoARM = DataGraphPipelineOpticalFlowDispatchInfoARM
  { -- | @flags@ are the 'DataGraphOpticalFlowExecuteFlagsARM' used for this
    -- command.
    --
    -- #VUID-VkDataGraphPipelineOpticalFlowDispatchInfoARM-flags-parameter#
    -- @flags@ /must/ be a valid combination of
    -- 'DataGraphOpticalFlowExecuteFlagBitsARM' values
    flags :: DataGraphOpticalFlowExecuteFlagsARM
  , -- | @meanFlowL1NormHint@ is an integer used to hint to the implementation
    -- that the mean L1 norm of flow vectors is expected to be centered around
    -- this value (in number of pixels of the input image). The implementation
    -- may use this value to influence how flow vectors are computed. Different
    -- values may result in different flow vectors and will affect the cost of
    -- computing the flow vectors. A value of 0 means that the application does
    -- not wish to provide a hint.
    --
    -- #VUID-VkDataGraphPipelineOpticalFlowDispatchInfoARM-meanFlowL1NormHint-09976#
    -- @meanFlowL1NormHint@, when different from 0, /must/ be less than or
    -- equal to the maximum of the width or height of the input image provided
    -- at pipeline creation time via
    -- 'DataGraphPipelineOpticalFlowCreateInfoARM'::@width@ or
    -- 'DataGraphPipelineOpticalFlowCreateInfoARM'::@height@, respectively
    meanFlowL1NormHint :: Word32
  }
  deriving (Typeable, Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DataGraphPipelineOpticalFlowDispatchInfoARM)
#endif
deriving instance Show DataGraphPipelineOpticalFlowDispatchInfoARM

instance ToCStruct DataGraphPipelineOpticalFlowDispatchInfoARM where
  withCStruct x f = allocaBytes 24 $ \p -> pokeCStruct p x (f p)
  pokeCStruct p DataGraphPipelineOpticalFlowDispatchInfoARM{..} f = do
    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_OPTICAL_FLOW_DISPATCH_INFO_ARM)
    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
    poke ((p `plusPtr` 16 :: Ptr DataGraphOpticalFlowExecuteFlagsARM)) (flags)
    poke ((p `plusPtr` 20 :: Ptr Word32)) (meanFlowL1NormHint)
    f
  cStructSize = 24
  cStructAlignment = 8
  pokeZeroCStruct p f = do
    poke ((p `plusPtr` 0 :: Ptr StructureType)) (STRUCTURE_TYPE_DATA_GRAPH_PIPELINE_OPTICAL_FLOW_DISPATCH_INFO_ARM)
    poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) (nullPtr)
    f

instance FromCStruct DataGraphPipelineOpticalFlowDispatchInfoARM where
  peekCStruct p = do
    flags <- peek @DataGraphOpticalFlowExecuteFlagsARM ((p `plusPtr` 16 :: Ptr DataGraphOpticalFlowExecuteFlagsARM))
    meanFlowL1NormHint <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
    pure $ DataGraphPipelineOpticalFlowDispatchInfoARM
             flags meanFlowL1NormHint

instance Storable DataGraphPipelineOpticalFlowDispatchInfoARM where
  sizeOf ~_ = 24
  alignment ~_ = 8
  peek = peekCStruct
  poke ptr poked = pokeCStruct ptr poked (pure ())

instance Zero DataGraphPipelineOpticalFlowDispatchInfoARM where
  zero = DataGraphPipelineOpticalFlowDispatchInfoARM
           zero
           zero


type DataGraphOpticalFlowGridSizeFlagsARM = DataGraphOpticalFlowGridSizeFlagBitsARM

-- | VkDataGraphOpticalFlowGridSizeFlagBitsARM - Bits specifying grid sizes
-- for optical flow operations
--
-- = Description
--
-- -   'DATA_GRAPH_OPTICAL_FLOW_GRID_SIZE_1X1_BIT_ARM' specifies that grid
--     is 1x1 pixel.
--
-- -   'DATA_GRAPH_OPTICAL_FLOW_GRID_SIZE_2X2_BIT_ARM' specifies that grid
--     is 2x2 pixel.
--
-- -   'DATA_GRAPH_OPTICAL_FLOW_GRID_SIZE_4X4_BIT_ARM' specifies that grid
--     is 4x4 pixel.
--
-- -   'DATA_GRAPH_OPTICAL_FLOW_GRID_SIZE_8X8_BIT_ARM' specifies that grid
--     is 8x8 pixel.
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ARM_data_graph_optical_flow VK_ARM_data_graph_optical_flow>,
-- 'DataGraphOpticalFlowGridSizeFlagsARM'
newtype DataGraphOpticalFlowGridSizeFlagBitsARM = DataGraphOpticalFlowGridSizeFlagBitsARM Flags
  deriving newtype (Eq, Ord, Storable, Zero, Bits, FiniteBits)

-- No documentation found for Nested "VkDataGraphOpticalFlowGridSizeFlagBitsARM" "VK_DATA_GRAPH_OPTICAL_FLOW_GRID_SIZE_UNKNOWN_ARM"
pattern DATA_GRAPH_OPTICAL_FLOW_GRID_SIZE_UNKNOWN_ARM = DataGraphOpticalFlowGridSizeFlagBitsARM 0x00000000

-- No documentation found for Nested "VkDataGraphOpticalFlowGridSizeFlagBitsARM" "VK_DATA_GRAPH_OPTICAL_FLOW_GRID_SIZE_1X1_BIT_ARM"
pattern DATA_GRAPH_OPTICAL_FLOW_GRID_SIZE_1X1_BIT_ARM = DataGraphOpticalFlowGridSizeFlagBitsARM 0x00000001

-- No documentation found for Nested "VkDataGraphOpticalFlowGridSizeFlagBitsARM" "VK_DATA_GRAPH_OPTICAL_FLOW_GRID_SIZE_2X2_BIT_ARM"
pattern DATA_GRAPH_OPTICAL_FLOW_GRID_SIZE_2X2_BIT_ARM = DataGraphOpticalFlowGridSizeFlagBitsARM 0x00000002

-- No documentation found for Nested "VkDataGraphOpticalFlowGridSizeFlagBitsARM" "VK_DATA_GRAPH_OPTICAL_FLOW_GRID_SIZE_4X4_BIT_ARM"
pattern DATA_GRAPH_OPTICAL_FLOW_GRID_SIZE_4X4_BIT_ARM = DataGraphOpticalFlowGridSizeFlagBitsARM 0x00000004

-- No documentation found for Nested "VkDataGraphOpticalFlowGridSizeFlagBitsARM" "VK_DATA_GRAPH_OPTICAL_FLOW_GRID_SIZE_8X8_BIT_ARM"
pattern DATA_GRAPH_OPTICAL_FLOW_GRID_SIZE_8X8_BIT_ARM = DataGraphOpticalFlowGridSizeFlagBitsARM 0x00000008

conNameDataGraphOpticalFlowGridSizeFlagBitsARM :: String
conNameDataGraphOpticalFlowGridSizeFlagBitsARM = "DataGraphOpticalFlowGridSizeFlagBitsARM"

enumPrefixDataGraphOpticalFlowGridSizeFlagBitsARM :: String
enumPrefixDataGraphOpticalFlowGridSizeFlagBitsARM = "DATA_GRAPH_OPTICAL_FLOW_GRID_SIZE_"

showTableDataGraphOpticalFlowGridSizeFlagBitsARM :: [(DataGraphOpticalFlowGridSizeFlagBitsARM, String)]
showTableDataGraphOpticalFlowGridSizeFlagBitsARM =
  [
    ( DATA_GRAPH_OPTICAL_FLOW_GRID_SIZE_UNKNOWN_ARM
    , "UNKNOWN_ARM"
    )
  ,
    ( DATA_GRAPH_OPTICAL_FLOW_GRID_SIZE_1X1_BIT_ARM
    , "1X1_BIT_ARM"
    )
  ,
    ( DATA_GRAPH_OPTICAL_FLOW_GRID_SIZE_2X2_BIT_ARM
    , "2X2_BIT_ARM"
    )
  ,
    ( DATA_GRAPH_OPTICAL_FLOW_GRID_SIZE_4X4_BIT_ARM
    , "4X4_BIT_ARM"
    )
  ,
    ( DATA_GRAPH_OPTICAL_FLOW_GRID_SIZE_8X8_BIT_ARM
    , "8X8_BIT_ARM"
    )
  ]

instance Show DataGraphOpticalFlowGridSizeFlagBitsARM where
  showsPrec =
    enumShowsPrec
      enumPrefixDataGraphOpticalFlowGridSizeFlagBitsARM
      showTableDataGraphOpticalFlowGridSizeFlagBitsARM
      conNameDataGraphOpticalFlowGridSizeFlagBitsARM
      (\(DataGraphOpticalFlowGridSizeFlagBitsARM x) -> x)
      (\x -> showString "0x" . showHex x)

instance Read DataGraphOpticalFlowGridSizeFlagBitsARM where
  readPrec =
    enumReadPrec
      enumPrefixDataGraphOpticalFlowGridSizeFlagBitsARM
      showTableDataGraphOpticalFlowGridSizeFlagBitsARM
      conNameDataGraphOpticalFlowGridSizeFlagBitsARM
      DataGraphOpticalFlowGridSizeFlagBitsARM

type DataGraphOpticalFlowImageUsageFlagsARM = DataGraphOpticalFlowImageUsageFlagBitsARM

-- | VkDataGraphOpticalFlowImageUsageFlagBitsARM - Bits specifying image
-- usage for optical flow operations
--
-- = Description
--
-- -   'DATA_GRAPH_OPTICAL_FLOW_IMAGE_USAGE_INPUT_BIT_ARM' specifies that
--     the image /can/ be used as input or reference image for an optical
--     flow operation.
--
-- -   'DATA_GRAPH_OPTICAL_FLOW_IMAGE_USAGE_OUTPUT_BIT_ARM' specifies that
--     the image /can/ be used as output flow vector map for an optical
--     flow operation.
--
-- -   'DATA_GRAPH_OPTICAL_FLOW_IMAGE_USAGE_HINT_BIT_ARM' specifies that
--     the image /can/ be used as hint flow vector map for an optical flow
--     operation.
--
-- -   'DATA_GRAPH_OPTICAL_FLOW_IMAGE_USAGE_COST_BIT_ARM' specifies that
--     the image /can/ be used as output cost map for an optical flow
--     operation.
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ARM_data_graph_optical_flow VK_ARM_data_graph_optical_flow>,
-- 'DataGraphOpticalFlowImageUsageFlagsARM'
newtype DataGraphOpticalFlowImageUsageFlagBitsARM = DataGraphOpticalFlowImageUsageFlagBitsARM Flags
  deriving newtype (Eq, Ord, Storable, Zero, Bits, FiniteBits)

-- No documentation found for Nested "VkDataGraphOpticalFlowImageUsageFlagBitsARM" "VK_DATA_GRAPH_OPTICAL_FLOW_IMAGE_USAGE_UNKNOWN_ARM"
pattern DATA_GRAPH_OPTICAL_FLOW_IMAGE_USAGE_UNKNOWN_ARM = DataGraphOpticalFlowImageUsageFlagBitsARM 0x00000000

-- No documentation found for Nested "VkDataGraphOpticalFlowImageUsageFlagBitsARM" "VK_DATA_GRAPH_OPTICAL_FLOW_IMAGE_USAGE_INPUT_BIT_ARM"
pattern DATA_GRAPH_OPTICAL_FLOW_IMAGE_USAGE_INPUT_BIT_ARM = DataGraphOpticalFlowImageUsageFlagBitsARM 0x00000001

-- No documentation found for Nested "VkDataGraphOpticalFlowImageUsageFlagBitsARM" "VK_DATA_GRAPH_OPTICAL_FLOW_IMAGE_USAGE_OUTPUT_BIT_ARM"
pattern DATA_GRAPH_OPTICAL_FLOW_IMAGE_USAGE_OUTPUT_BIT_ARM = DataGraphOpticalFlowImageUsageFlagBitsARM 0x00000002

-- No documentation found for Nested "VkDataGraphOpticalFlowImageUsageFlagBitsARM" "VK_DATA_GRAPH_OPTICAL_FLOW_IMAGE_USAGE_HINT_BIT_ARM"
pattern DATA_GRAPH_OPTICAL_FLOW_IMAGE_USAGE_HINT_BIT_ARM = DataGraphOpticalFlowImageUsageFlagBitsARM 0x00000004

-- No documentation found for Nested "VkDataGraphOpticalFlowImageUsageFlagBitsARM" "VK_DATA_GRAPH_OPTICAL_FLOW_IMAGE_USAGE_COST_BIT_ARM"
pattern DATA_GRAPH_OPTICAL_FLOW_IMAGE_USAGE_COST_BIT_ARM = DataGraphOpticalFlowImageUsageFlagBitsARM 0x00000008

conNameDataGraphOpticalFlowImageUsageFlagBitsARM :: String
conNameDataGraphOpticalFlowImageUsageFlagBitsARM = "DataGraphOpticalFlowImageUsageFlagBitsARM"

enumPrefixDataGraphOpticalFlowImageUsageFlagBitsARM :: String
enumPrefixDataGraphOpticalFlowImageUsageFlagBitsARM = "DATA_GRAPH_OPTICAL_FLOW_IMAGE_USAGE_"

showTableDataGraphOpticalFlowImageUsageFlagBitsARM :: [(DataGraphOpticalFlowImageUsageFlagBitsARM, String)]
showTableDataGraphOpticalFlowImageUsageFlagBitsARM =
  [
    ( DATA_GRAPH_OPTICAL_FLOW_IMAGE_USAGE_UNKNOWN_ARM
    , "UNKNOWN_ARM"
    )
  ,
    ( DATA_GRAPH_OPTICAL_FLOW_IMAGE_USAGE_INPUT_BIT_ARM
    , "INPUT_BIT_ARM"
    )
  ,
    ( DATA_GRAPH_OPTICAL_FLOW_IMAGE_USAGE_OUTPUT_BIT_ARM
    , "OUTPUT_BIT_ARM"
    )
  ,
    ( DATA_GRAPH_OPTICAL_FLOW_IMAGE_USAGE_HINT_BIT_ARM
    , "HINT_BIT_ARM"
    )
  ,
    ( DATA_GRAPH_OPTICAL_FLOW_IMAGE_USAGE_COST_BIT_ARM
    , "COST_BIT_ARM"
    )
  ]

instance Show DataGraphOpticalFlowImageUsageFlagBitsARM where
  showsPrec =
    enumShowsPrec
      enumPrefixDataGraphOpticalFlowImageUsageFlagBitsARM
      showTableDataGraphOpticalFlowImageUsageFlagBitsARM
      conNameDataGraphOpticalFlowImageUsageFlagBitsARM
      (\(DataGraphOpticalFlowImageUsageFlagBitsARM x) -> x)
      (\x -> showString "0x" . showHex x)

instance Read DataGraphOpticalFlowImageUsageFlagBitsARM where
  readPrec =
    enumReadPrec
      enumPrefixDataGraphOpticalFlowImageUsageFlagBitsARM
      showTableDataGraphOpticalFlowImageUsageFlagBitsARM
      conNameDataGraphOpticalFlowImageUsageFlagBitsARM
      DataGraphOpticalFlowImageUsageFlagBitsARM

-- | VkDataGraphOpticalFlowPerformanceLevelARM - Optical flow performance
-- level types
--
-- = Description
--
-- -   'DATA_GRAPH_OPTICAL_FLOW_PERFORMANCE_LEVEL_SLOW_ARM' is a level with
--     slower performance but higher quality.
--
-- -   'DATA_GRAPH_OPTICAL_FLOW_PERFORMANCE_LEVEL_MEDIUM_ARM' is a level
--     with medium performance and medium quality.
--
-- -   'DATA_GRAPH_OPTICAL_FLOW_PERFORMANCE_LEVEL_FAST_ARM' is a preset
--     with higher performance but lower quality.
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ARM_data_graph_optical_flow VK_ARM_data_graph_optical_flow>,
-- 'DataGraphPipelineOpticalFlowCreateInfoARM'
newtype DataGraphOpticalFlowPerformanceLevelARM = DataGraphOpticalFlowPerformanceLevelARM Int32
  deriving newtype (Eq, Ord, Storable, Zero)

-- No documentation found for Nested "VkDataGraphOpticalFlowPerformanceLevelARM" "VK_DATA_GRAPH_OPTICAL_FLOW_PERFORMANCE_LEVEL_UNKNOWN_ARM"
pattern DATA_GRAPH_OPTICAL_FLOW_PERFORMANCE_LEVEL_UNKNOWN_ARM = DataGraphOpticalFlowPerformanceLevelARM 0

-- No documentation found for Nested "VkDataGraphOpticalFlowPerformanceLevelARM" "VK_DATA_GRAPH_OPTICAL_FLOW_PERFORMANCE_LEVEL_SLOW_ARM"
pattern DATA_GRAPH_OPTICAL_FLOW_PERFORMANCE_LEVEL_SLOW_ARM = DataGraphOpticalFlowPerformanceLevelARM 1

-- No documentation found for Nested "VkDataGraphOpticalFlowPerformanceLevelARM" "VK_DATA_GRAPH_OPTICAL_FLOW_PERFORMANCE_LEVEL_MEDIUM_ARM"
pattern DATA_GRAPH_OPTICAL_FLOW_PERFORMANCE_LEVEL_MEDIUM_ARM = DataGraphOpticalFlowPerformanceLevelARM 2

-- No documentation found for Nested "VkDataGraphOpticalFlowPerformanceLevelARM" "VK_DATA_GRAPH_OPTICAL_FLOW_PERFORMANCE_LEVEL_FAST_ARM"
pattern DATA_GRAPH_OPTICAL_FLOW_PERFORMANCE_LEVEL_FAST_ARM = DataGraphOpticalFlowPerformanceLevelARM 3

{-# COMPLETE
  DATA_GRAPH_OPTICAL_FLOW_PERFORMANCE_LEVEL_UNKNOWN_ARM
  , DATA_GRAPH_OPTICAL_FLOW_PERFORMANCE_LEVEL_SLOW_ARM
  , DATA_GRAPH_OPTICAL_FLOW_PERFORMANCE_LEVEL_MEDIUM_ARM
  , DATA_GRAPH_OPTICAL_FLOW_PERFORMANCE_LEVEL_FAST_ARM ::
    DataGraphOpticalFlowPerformanceLevelARM
  #-}

conNameDataGraphOpticalFlowPerformanceLevelARM :: String
conNameDataGraphOpticalFlowPerformanceLevelARM = "DataGraphOpticalFlowPerformanceLevelARM"

enumPrefixDataGraphOpticalFlowPerformanceLevelARM :: String
enumPrefixDataGraphOpticalFlowPerformanceLevelARM = "DATA_GRAPH_OPTICAL_FLOW_PERFORMANCE_LEVEL_"

showTableDataGraphOpticalFlowPerformanceLevelARM :: [(DataGraphOpticalFlowPerformanceLevelARM, String)]
showTableDataGraphOpticalFlowPerformanceLevelARM =
  [
    ( DATA_GRAPH_OPTICAL_FLOW_PERFORMANCE_LEVEL_UNKNOWN_ARM
    , "UNKNOWN_ARM"
    )
  ,
    ( DATA_GRAPH_OPTICAL_FLOW_PERFORMANCE_LEVEL_SLOW_ARM
    , "SLOW_ARM"
    )
  ,
    ( DATA_GRAPH_OPTICAL_FLOW_PERFORMANCE_LEVEL_MEDIUM_ARM
    , "MEDIUM_ARM"
    )
  ,
    ( DATA_GRAPH_OPTICAL_FLOW_PERFORMANCE_LEVEL_FAST_ARM
    , "FAST_ARM"
    )
  ]

instance Show DataGraphOpticalFlowPerformanceLevelARM where
  showsPrec =
    enumShowsPrec
      enumPrefixDataGraphOpticalFlowPerformanceLevelARM
      showTableDataGraphOpticalFlowPerformanceLevelARM
      conNameDataGraphOpticalFlowPerformanceLevelARM
      (\(DataGraphOpticalFlowPerformanceLevelARM x) -> x)
      (showsPrec 11)

instance Read DataGraphOpticalFlowPerformanceLevelARM where
  readPrec =
    enumReadPrec
      enumPrefixDataGraphOpticalFlowPerformanceLevelARM
      showTableDataGraphOpticalFlowPerformanceLevelARM
      conNameDataGraphOpticalFlowPerformanceLevelARM
      DataGraphOpticalFlowPerformanceLevelARM

-- | VkDataGraphPipelineNodeConnectionTypeARM - Connection points for a
-- fixed-function data graph node
--
-- = Description
--
-- -   'DATA_GRAPH_PIPELINE_NODE_CONNECTION_TYPE_OPTICAL_FLOW_INPUT_ARM'
--     specifies the connection point for the input image of an optical
--     flow node.
--
-- -   'DATA_GRAPH_PIPELINE_NODE_CONNECTION_TYPE_OPTICAL_FLOW_REFERENCE_ARM'
--     specifies the connection point for the input reference image of an
--     optical flow node.
--
-- -   'DATA_GRAPH_PIPELINE_NODE_CONNECTION_TYPE_OPTICAL_FLOW_HINT_ARM'
--     specifies the connection point for the optional external hint flow
--     vector map of an optical flow node.
--
-- -   'DATA_GRAPH_PIPELINE_NODE_CONNECTION_TYPE_OPTICAL_FLOW_FLOW_VECTOR_ARM'
--     specifies the connection point for the output flow vector map of an
--     optical flow node.
--
-- -   'DATA_GRAPH_PIPELINE_NODE_CONNECTION_TYPE_OPTICAL_FLOW_COST_ARM'
--     specifies the connection point for the optional output cost map of
--     an optical flow node.
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ARM_data_graph_optical_flow VK_ARM_data_graph_optical_flow>,
-- 'DataGraphPipelineSingleNodeConnectionARM'
newtype DataGraphPipelineNodeConnectionTypeARM = DataGraphPipelineNodeConnectionTypeARM Int32
  deriving newtype (Eq, Ord, Storable, Zero)

-- Note that the zero instance does not produce a valid value, passing 'zero' to Vulkan will result in an error

-- No documentation found for Nested "VkDataGraphPipelineNodeConnectionTypeARM" "VK_DATA_GRAPH_PIPELINE_NODE_CONNECTION_TYPE_OPTICAL_FLOW_COST_ARM"
pattern DATA_GRAPH_PIPELINE_NODE_CONNECTION_TYPE_OPTICAL_FLOW_COST_ARM = DataGraphPipelineNodeConnectionTypeARM 1000631004

-- No documentation found for Nested "VkDataGraphPipelineNodeConnectionTypeARM" "VK_DATA_GRAPH_PIPELINE_NODE_CONNECTION_TYPE_OPTICAL_FLOW_FLOW_VECTOR_ARM"
pattern DATA_GRAPH_PIPELINE_NODE_CONNECTION_TYPE_OPTICAL_FLOW_FLOW_VECTOR_ARM = DataGraphPipelineNodeConnectionTypeARM 1000631003

-- No documentation found for Nested "VkDataGraphPipelineNodeConnectionTypeARM" "VK_DATA_GRAPH_PIPELINE_NODE_CONNECTION_TYPE_OPTICAL_FLOW_HINT_ARM"
pattern DATA_GRAPH_PIPELINE_NODE_CONNECTION_TYPE_OPTICAL_FLOW_HINT_ARM = DataGraphPipelineNodeConnectionTypeARM 1000631002

-- No documentation found for Nested "VkDataGraphPipelineNodeConnectionTypeARM" "VK_DATA_GRAPH_PIPELINE_NODE_CONNECTION_TYPE_OPTICAL_FLOW_REFERENCE_ARM"
pattern DATA_GRAPH_PIPELINE_NODE_CONNECTION_TYPE_OPTICAL_FLOW_REFERENCE_ARM = DataGraphPipelineNodeConnectionTypeARM 1000631001

-- No documentation found for Nested "VkDataGraphPipelineNodeConnectionTypeARM" "VK_DATA_GRAPH_PIPELINE_NODE_CONNECTION_TYPE_OPTICAL_FLOW_INPUT_ARM"
pattern DATA_GRAPH_PIPELINE_NODE_CONNECTION_TYPE_OPTICAL_FLOW_INPUT_ARM = DataGraphPipelineNodeConnectionTypeARM 1000631000

{-# COMPLETE
  DATA_GRAPH_PIPELINE_NODE_CONNECTION_TYPE_OPTICAL_FLOW_COST_ARM
  , DATA_GRAPH_PIPELINE_NODE_CONNECTION_TYPE_OPTICAL_FLOW_FLOW_VECTOR_ARM
  , DATA_GRAPH_PIPELINE_NODE_CONNECTION_TYPE_OPTICAL_FLOW_HINT_ARM
  , DATA_GRAPH_PIPELINE_NODE_CONNECTION_TYPE_OPTICAL_FLOW_REFERENCE_ARM
  , DATA_GRAPH_PIPELINE_NODE_CONNECTION_TYPE_OPTICAL_FLOW_INPUT_ARM ::
    DataGraphPipelineNodeConnectionTypeARM
  #-}

conNameDataGraphPipelineNodeConnectionTypeARM :: String
conNameDataGraphPipelineNodeConnectionTypeARM = "DataGraphPipelineNodeConnectionTypeARM"

enumPrefixDataGraphPipelineNodeConnectionTypeARM :: String
enumPrefixDataGraphPipelineNodeConnectionTypeARM = "DATA_GRAPH_PIPELINE_NODE_CONNECTION_TYPE_OPTICAL_FLOW_"

showTableDataGraphPipelineNodeConnectionTypeARM :: [(DataGraphPipelineNodeConnectionTypeARM, String)]
showTableDataGraphPipelineNodeConnectionTypeARM =
  [
    ( DATA_GRAPH_PIPELINE_NODE_CONNECTION_TYPE_OPTICAL_FLOW_COST_ARM
    , "COST_ARM"
    )
  ,
    ( DATA_GRAPH_PIPELINE_NODE_CONNECTION_TYPE_OPTICAL_FLOW_FLOW_VECTOR_ARM
    , "FLOW_VECTOR_ARM"
    )
  ,
    ( DATA_GRAPH_PIPELINE_NODE_CONNECTION_TYPE_OPTICAL_FLOW_HINT_ARM
    , "HINT_ARM"
    )
  ,
    ( DATA_GRAPH_PIPELINE_NODE_CONNECTION_TYPE_OPTICAL_FLOW_REFERENCE_ARM
    , "REFERENCE_ARM"
    )
  ,
    ( DATA_GRAPH_PIPELINE_NODE_CONNECTION_TYPE_OPTICAL_FLOW_INPUT_ARM
    , "INPUT_ARM"
    )
  ]

instance Show DataGraphPipelineNodeConnectionTypeARM where
  showsPrec =
    enumShowsPrec
      enumPrefixDataGraphPipelineNodeConnectionTypeARM
      showTableDataGraphPipelineNodeConnectionTypeARM
      conNameDataGraphPipelineNodeConnectionTypeARM
      (\(DataGraphPipelineNodeConnectionTypeARM x) -> x)
      (showsPrec 11)

instance Read DataGraphPipelineNodeConnectionTypeARM where
  readPrec =
    enumReadPrec
      enumPrefixDataGraphPipelineNodeConnectionTypeARM
      showTableDataGraphPipelineNodeConnectionTypeARM
      conNameDataGraphPipelineNodeConnectionTypeARM
      DataGraphPipelineNodeConnectionTypeARM

-- | VkDataGraphPipelineNodeTypeARM - Enumeration describing the type of a
-- data graph pipeline node
--
-- = Description
--
-- -   'DATA_GRAPH_PIPELINE_NODE_TYPE_OPTICAL_FLOW_ARM' corresponds to an
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#graphs-operations-opticalflow optical flow node>.
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ARM_data_graph_optical_flow VK_ARM_data_graph_optical_flow>,
-- 'DataGraphPipelineSingleNodeCreateInfoARM'
newtype DataGraphPipelineNodeTypeARM = DataGraphPipelineNodeTypeARM Int32
  deriving newtype (Eq, Ord, Storable, Zero)

-- Note that the zero instance does not produce a valid value, passing 'zero' to Vulkan will result in an error

-- No documentation found for Nested "VkDataGraphPipelineNodeTypeARM" "VK_DATA_GRAPH_PIPELINE_NODE_TYPE_OPTICAL_FLOW_ARM"
pattern DATA_GRAPH_PIPELINE_NODE_TYPE_OPTICAL_FLOW_ARM = DataGraphPipelineNodeTypeARM 1000631000

{-# COMPLETE DATA_GRAPH_PIPELINE_NODE_TYPE_OPTICAL_FLOW_ARM :: DataGraphPipelineNodeTypeARM #-}

conNameDataGraphPipelineNodeTypeARM :: String
conNameDataGraphPipelineNodeTypeARM = "DataGraphPipelineNodeTypeARM"

enumPrefixDataGraphPipelineNodeTypeARM :: String
enumPrefixDataGraphPipelineNodeTypeARM = "DATA_GRAPH_PIPELINE_NODE_TYPE_OPTICAL_FLOW_ARM"

showTableDataGraphPipelineNodeTypeARM :: [(DataGraphPipelineNodeTypeARM, String)]
showTableDataGraphPipelineNodeTypeARM =
  [
    ( DATA_GRAPH_PIPELINE_NODE_TYPE_OPTICAL_FLOW_ARM
    , ""
    )
  ]

instance Show DataGraphPipelineNodeTypeARM where
  showsPrec =
    enumShowsPrec
      enumPrefixDataGraphPipelineNodeTypeARM
      showTableDataGraphPipelineNodeTypeARM
      conNameDataGraphPipelineNodeTypeARM
      (\(DataGraphPipelineNodeTypeARM x) -> x)
      (showsPrec 11)

instance Read DataGraphPipelineNodeTypeARM where
  readPrec =
    enumReadPrec
      enumPrefixDataGraphPipelineNodeTypeARM
      showTableDataGraphPipelineNodeTypeARM
      conNameDataGraphPipelineNodeTypeARM
      DataGraphPipelineNodeTypeARM

type DataGraphOpticalFlowCreateFlagsARM = DataGraphOpticalFlowCreateFlagBitsARM

-- | VkDataGraphOpticalFlowCreateFlagBitsARM - Bits specifying flags for
-- newly created optical flow data graph node
--
-- = Description
--
-- -   'DATA_GRAPH_OPTICAL_FLOW_CREATE_ENABLE_HINT_BIT_ARM' specifies that
--     a 'Vulkan.Core10.Handles.ImageView' with external flow vector map
--     will be used as hints in performing the motion search and /must/ be
--     connected to
--     'DATA_GRAPH_PIPELINE_NODE_CONNECTION_TYPE_OPTICAL_FLOW_HINT_ARM'.
--
-- -   'DATA_GRAPH_OPTICAL_FLOW_CREATE_ENABLE_COST_BIT_ARM' specifies that
--     the cost for the forward flow is generated in a
--     'Vulkan.Core10.Handles.ImageView' which /must/ be connected to
--     'DATA_GRAPH_PIPELINE_NODE_CONNECTION_TYPE_OPTICAL_FLOW_COST_ARM'.
--     The cost is the confidence level of the flow vector for each grid in
--     the image. The cost implies how (in)accurate the flow vector is.
--     Higher cost value implies the flow vector to be less accurate and
--     vice-versa.
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ARM_data_graph_optical_flow VK_ARM_data_graph_optical_flow>,
-- 'DataGraphOpticalFlowCreateFlagsARM'
newtype DataGraphOpticalFlowCreateFlagBitsARM = DataGraphOpticalFlowCreateFlagBitsARM Flags
  deriving newtype (Eq, Ord, Storable, Zero, Bits, FiniteBits)

-- No documentation found for Nested "VkDataGraphOpticalFlowCreateFlagBitsARM" "VK_DATA_GRAPH_OPTICAL_FLOW_CREATE_ENABLE_HINT_BIT_ARM"
pattern DATA_GRAPH_OPTICAL_FLOW_CREATE_ENABLE_HINT_BIT_ARM = DataGraphOpticalFlowCreateFlagBitsARM 0x00000001

-- No documentation found for Nested "VkDataGraphOpticalFlowCreateFlagBitsARM" "VK_DATA_GRAPH_OPTICAL_FLOW_CREATE_ENABLE_COST_BIT_ARM"
pattern DATA_GRAPH_OPTICAL_FLOW_CREATE_ENABLE_COST_BIT_ARM = DataGraphOpticalFlowCreateFlagBitsARM 0x00000002

-- No documentation found for Nested "VkDataGraphOpticalFlowCreateFlagBitsARM" "VK_DATA_GRAPH_OPTICAL_FLOW_CREATE_RESERVED_30_BIT_ARM"
pattern DATA_GRAPH_OPTICAL_FLOW_CREATE_RESERVED_30_BIT_ARM = DataGraphOpticalFlowCreateFlagBitsARM 0x40000000

conNameDataGraphOpticalFlowCreateFlagBitsARM :: String
conNameDataGraphOpticalFlowCreateFlagBitsARM = "DataGraphOpticalFlowCreateFlagBitsARM"

enumPrefixDataGraphOpticalFlowCreateFlagBitsARM :: String
enumPrefixDataGraphOpticalFlowCreateFlagBitsARM = "DATA_GRAPH_OPTICAL_FLOW_CREATE_"

showTableDataGraphOpticalFlowCreateFlagBitsARM :: [(DataGraphOpticalFlowCreateFlagBitsARM, String)]
showTableDataGraphOpticalFlowCreateFlagBitsARM =
  [
    ( DATA_GRAPH_OPTICAL_FLOW_CREATE_ENABLE_HINT_BIT_ARM
    , "ENABLE_HINT_BIT_ARM"
    )
  ,
    ( DATA_GRAPH_OPTICAL_FLOW_CREATE_ENABLE_COST_BIT_ARM
    , "ENABLE_COST_BIT_ARM"
    )
  ,
    ( DATA_GRAPH_OPTICAL_FLOW_CREATE_RESERVED_30_BIT_ARM
    , "RESERVED_30_BIT_ARM"
    )
  ]

instance Show DataGraphOpticalFlowCreateFlagBitsARM where
  showsPrec =
    enumShowsPrec
      enumPrefixDataGraphOpticalFlowCreateFlagBitsARM
      showTableDataGraphOpticalFlowCreateFlagBitsARM
      conNameDataGraphOpticalFlowCreateFlagBitsARM
      (\(DataGraphOpticalFlowCreateFlagBitsARM x) -> x)
      (\x -> showString "0x" . showHex x)

instance Read DataGraphOpticalFlowCreateFlagBitsARM where
  readPrec =
    enumReadPrec
      enumPrefixDataGraphOpticalFlowCreateFlagBitsARM
      showTableDataGraphOpticalFlowCreateFlagBitsARM
      conNameDataGraphOpticalFlowCreateFlagBitsARM
      DataGraphOpticalFlowCreateFlagBitsARM

type DataGraphOpticalFlowExecuteFlagsARM = DataGraphOpticalFlowExecuteFlagBitsARM

-- | VkDataGraphOpticalFlowExecuteFlagBitsARM - Bits specifying flags for a
-- optical flow vector calculation
--
-- = Description
--
-- -   'DATA_GRAPH_OPTICAL_FLOW_EXECUTE_DISABLE_TEMPORAL_HINTS_BIT_ARM'
--     specifies that temporal hints from previously generated flow vector
--     map are not used. If temporal hints are enabled, the optical flow
--     vector map from previous
--     'Vulkan.Extensions.VK_ARM_data_graph.cmdDispatchDataGraphARM' calls
--     in the same graph pipeline session /may/ be automatically used as
--     hints for the current
--     'Vulkan.Extensions.VK_ARM_data_graph.cmdDispatchDataGraphARM' call,
--     to take advantage of temporal correlation in a video sequence.
--     Temporal hints should be disabled if there is a-priori knowledge of
--     no temporal correlation (e.g. a scene change, independent successive
--     image pairs).
--
-- -   'DATA_GRAPH_OPTICAL_FLOW_EXECUTE_INPUT_UNCHANGED_BIT_ARM' specifies
--     that the contents of the input image are the same as in the
--     previously executed
--     'Vulkan.Extensions.VK_ARM_data_graph.cmdDispatchDataGraphARM' call
--     in the same graph pipeline session.
--
-- -   'DATA_GRAPH_OPTICAL_FLOW_EXECUTE_REFERENCE_UNCHANGED_BIT_ARM'
--     specifies that the contents of the reference image are the same as
--     in the previously executed
--     'Vulkan.Extensions.VK_ARM_data_graph.cmdDispatchDataGraphARM' call
--     in the same graph pipeline session.
--
-- -   'DATA_GRAPH_OPTICAL_FLOW_EXECUTE_INPUT_IS_PREVIOUS_REFERENCE_BIT_ARM'
--     specifies that the contents of the input image are the same as the
--     contents of the reference image in the previously executed
--     'Vulkan.Extensions.VK_ARM_data_graph.cmdDispatchDataGraphARM' call
--     in the same graph pipeline session.
--
-- -   'DATA_GRAPH_OPTICAL_FLOW_EXECUTE_REFERENCE_IS_PREVIOUS_INPUT_BIT_ARM'
--     specifies that the contents of the reference image are the same as
--     the contents of the input image in the previously executed
--     'Vulkan.Extensions.VK_ARM_data_graph.cmdDispatchDataGraphARM' call
--     in the same graph pipeline session.
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ARM_data_graph_optical_flow VK_ARM_data_graph_optical_flow>,
-- 'DataGraphOpticalFlowExecuteFlagsARM'
newtype DataGraphOpticalFlowExecuteFlagBitsARM = DataGraphOpticalFlowExecuteFlagBitsARM Flags
  deriving newtype (Eq, Ord, Storable, Zero, Bits, FiniteBits)

-- No documentation found for Nested "VkDataGraphOpticalFlowExecuteFlagBitsARM" "VK_DATA_GRAPH_OPTICAL_FLOW_EXECUTE_DISABLE_TEMPORAL_HINTS_BIT_ARM"
pattern DATA_GRAPH_OPTICAL_FLOW_EXECUTE_DISABLE_TEMPORAL_HINTS_BIT_ARM = DataGraphOpticalFlowExecuteFlagBitsARM 0x00000001

-- No documentation found for Nested "VkDataGraphOpticalFlowExecuteFlagBitsARM" "VK_DATA_GRAPH_OPTICAL_FLOW_EXECUTE_INPUT_UNCHANGED_BIT_ARM"
pattern DATA_GRAPH_OPTICAL_FLOW_EXECUTE_INPUT_UNCHANGED_BIT_ARM = DataGraphOpticalFlowExecuteFlagBitsARM 0x00000002

-- No documentation found for Nested "VkDataGraphOpticalFlowExecuteFlagBitsARM" "VK_DATA_GRAPH_OPTICAL_FLOW_EXECUTE_REFERENCE_UNCHANGED_BIT_ARM"
pattern DATA_GRAPH_OPTICAL_FLOW_EXECUTE_REFERENCE_UNCHANGED_BIT_ARM = DataGraphOpticalFlowExecuteFlagBitsARM 0x00000004

-- No documentation found for Nested "VkDataGraphOpticalFlowExecuteFlagBitsARM" "VK_DATA_GRAPH_OPTICAL_FLOW_EXECUTE_INPUT_IS_PREVIOUS_REFERENCE_BIT_ARM"
pattern DATA_GRAPH_OPTICAL_FLOW_EXECUTE_INPUT_IS_PREVIOUS_REFERENCE_BIT_ARM = DataGraphOpticalFlowExecuteFlagBitsARM 0x00000008

-- No documentation found for Nested "VkDataGraphOpticalFlowExecuteFlagBitsARM" "VK_DATA_GRAPH_OPTICAL_FLOW_EXECUTE_REFERENCE_IS_PREVIOUS_INPUT_BIT_ARM"
pattern DATA_GRAPH_OPTICAL_FLOW_EXECUTE_REFERENCE_IS_PREVIOUS_INPUT_BIT_ARM = DataGraphOpticalFlowExecuteFlagBitsARM 0x00000010

conNameDataGraphOpticalFlowExecuteFlagBitsARM :: String
conNameDataGraphOpticalFlowExecuteFlagBitsARM = "DataGraphOpticalFlowExecuteFlagBitsARM"

enumPrefixDataGraphOpticalFlowExecuteFlagBitsARM :: String
enumPrefixDataGraphOpticalFlowExecuteFlagBitsARM = "DATA_GRAPH_OPTICAL_FLOW_EXECUTE_"

showTableDataGraphOpticalFlowExecuteFlagBitsARM :: [(DataGraphOpticalFlowExecuteFlagBitsARM, String)]
showTableDataGraphOpticalFlowExecuteFlagBitsARM =
  [
    ( DATA_GRAPH_OPTICAL_FLOW_EXECUTE_DISABLE_TEMPORAL_HINTS_BIT_ARM
    , "DISABLE_TEMPORAL_HINTS_BIT_ARM"
    )
  ,
    ( DATA_GRAPH_OPTICAL_FLOW_EXECUTE_INPUT_UNCHANGED_BIT_ARM
    , "INPUT_UNCHANGED_BIT_ARM"
    )
  ,
    ( DATA_GRAPH_OPTICAL_FLOW_EXECUTE_REFERENCE_UNCHANGED_BIT_ARM
    , "REFERENCE_UNCHANGED_BIT_ARM"
    )
  ,
    ( DATA_GRAPH_OPTICAL_FLOW_EXECUTE_INPUT_IS_PREVIOUS_REFERENCE_BIT_ARM
    , "INPUT_IS_PREVIOUS_REFERENCE_BIT_ARM"
    )
  ,
    ( DATA_GRAPH_OPTICAL_FLOW_EXECUTE_REFERENCE_IS_PREVIOUS_INPUT_BIT_ARM
    , "REFERENCE_IS_PREVIOUS_INPUT_BIT_ARM"
    )
  ]

instance Show DataGraphOpticalFlowExecuteFlagBitsARM where
  showsPrec =
    enumShowsPrec
      enumPrefixDataGraphOpticalFlowExecuteFlagBitsARM
      showTableDataGraphOpticalFlowExecuteFlagBitsARM
      conNameDataGraphOpticalFlowExecuteFlagBitsARM
      (\(DataGraphOpticalFlowExecuteFlagBitsARM x) -> x)
      (\x -> showString "0x" . showHex x)

instance Read DataGraphOpticalFlowExecuteFlagBitsARM where
  readPrec =
    enumReadPrec
      enumPrefixDataGraphOpticalFlowExecuteFlagBitsARM
      showTableDataGraphOpticalFlowExecuteFlagBitsARM
      conNameDataGraphOpticalFlowExecuteFlagBitsARM
      DataGraphOpticalFlowExecuteFlagBitsARM

type ARM_DATA_GRAPH_OPTICAL_FLOW_SPEC_VERSION = 1

-- No documentation found for TopLevel "VK_ARM_DATA_GRAPH_OPTICAL_FLOW_SPEC_VERSION"
pattern ARM_DATA_GRAPH_OPTICAL_FLOW_SPEC_VERSION :: forall a . Integral a => a
pattern ARM_DATA_GRAPH_OPTICAL_FLOW_SPEC_VERSION = 1


type ARM_DATA_GRAPH_OPTICAL_FLOW_EXTENSION_NAME = "VK_ARM_data_graph_optical_flow"

-- No documentation found for TopLevel "VK_ARM_DATA_GRAPH_OPTICAL_FLOW_EXTENSION_NAME"
pattern ARM_DATA_GRAPH_OPTICAL_FLOW_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
pattern ARM_DATA_GRAPH_OPTICAL_FLOW_EXTENSION_NAME = "VK_ARM_data_graph_optical_flow"