{-# language CPP #-}
-- | = Name
--
-- VK_NV_optical_flow - device extension
--
-- = VK_NV_optical_flow
--
-- [__Name String__]
--     @VK_NV_optical_flow@
--
-- [__Extension Type__]
--     Device extension
--
-- [__Registered Extension Number__]
--     465
--
-- [__Revision__]
--     1
--
-- [__Ratification Status__]
--     Not ratified
--
-- [__Extension and Version Dependencies__]
--             
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_get_physical_device_properties2 VK_KHR_get_physical_device_properties2>
--              or
--             
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#versions-1.1 Vulkan Version 1.1>
--          and
--         
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_format_feature_flags2 VK_KHR_format_feature_flags2>
--          and
--         
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_synchronization2 VK_KHR_synchronization2>
--     or
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#versions-1.3 Vulkan Version 1.3>
--
-- [__Contact__]
--
--     -   Carsten Rohde
--         <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?body=[VK_NV_optical_flow] @crohde%0A*Here describe the issue or question you have about the VK_NV_optical_flow extension* >
--
-- == Other Extension Metadata
--
-- [__Last Modified Date__]
--     2022-09-26
--
-- [__Contributors__]
--
--     -   Carsten Rohde, NVIDIA
--
--     -   Vipul Parashar, NVIDIA
--
--     -   Jeff Bolz, NVIDIA
--
--     -   Eric Werness, NVIDIA
--
-- == Description
--
-- Optical flow are fundamental algorithms in computer vision (CV) area.
-- This extension allows applications to estimate 2D displacement of pixels
-- between two frames.
--
-- This extension is designed to be used with upcoming NVIDIA Optical Flow
-- SDK Version 5 which will be available on NVIDIA Developer webpage.
--
-- == New Object Types
--
-- -   'Vulkan.Extensions.Handles.OpticalFlowSessionNV'
--
-- == New Commands
--
-- -   'bindOpticalFlowSessionImageNV'
--
-- -   'cmdOpticalFlowExecuteNV'
--
-- -   'createOpticalFlowSessionNV'
--
-- -   'destroyOpticalFlowSessionNV'
--
-- -   'getPhysicalDeviceOpticalFlowImageFormatsNV'
--
-- == New Structures
--
-- -   'OpticalFlowExecuteInfoNV'
--
-- -   'OpticalFlowImageFormatPropertiesNV'
--
-- -   'OpticalFlowSessionCreateInfoNV'
--
-- -   Extending 'OpticalFlowSessionCreateInfoNV':
--
--     -   'OpticalFlowSessionCreatePrivateDataInfoNV'
--
-- -   Extending
--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--     'Vulkan.Core10.Device.DeviceCreateInfo':
--
--     -   'PhysicalDeviceOpticalFlowFeaturesNV'
--
-- -   Extending
--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceImageFormatInfo2',
--     'Vulkan.Core10.Image.ImageCreateInfo':
--
--     -   'OpticalFlowImageFormatInfoNV'
--
-- -   Extending
--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2':
--
--     -   'PhysicalDeviceOpticalFlowPropertiesNV'
--
-- == New Enums
--
-- -   'OpticalFlowExecuteFlagBitsNV'
--
-- -   'OpticalFlowGridSizeFlagBitsNV'
--
-- -   'OpticalFlowPerformanceLevelNV'
--
-- -   'OpticalFlowSessionBindingPointNV'
--
-- -   'OpticalFlowSessionCreateFlagBitsNV'
--
-- -   'OpticalFlowUsageFlagBitsNV'
--
-- == New Bitmasks
--
-- -   'OpticalFlowExecuteFlagsNV'
--
-- -   'OpticalFlowGridSizeFlagsNV'
--
-- -   'OpticalFlowSessionCreateFlagsNV'
--
-- -   'OpticalFlowUsageFlagsNV'
--
-- == New Enum Constants
--
-- -   'NV_OPTICAL_FLOW_EXTENSION_NAME'
--
-- -   'NV_OPTICAL_FLOW_SPEC_VERSION'
--
-- -   Extending 'Vulkan.Core13.Enums.AccessFlags2.AccessFlagBits2':
--
--     -   'Vulkan.Core13.Enums.AccessFlags2.ACCESS_2_OPTICAL_FLOW_READ_BIT_NV'
--
--     -   'Vulkan.Core13.Enums.AccessFlags2.ACCESS_2_OPTICAL_FLOW_WRITE_BIT_NV'
--
-- -   Extending 'Vulkan.Core10.Enums.Format.Format':
--
--     -   'FORMAT_R16G16_S10_5_NV'
--
--     -   'Vulkan.Core10.Enums.Format.FORMAT_R16G16_SFIXED5_NV'
--
-- -   Extending
--     'Vulkan.Core13.Enums.FormatFeatureFlags2.FormatFeatureFlagBits2':
--
--     -   'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_OPTICAL_FLOW_COST_BIT_NV'
--
--     -   'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_OPTICAL_FLOW_IMAGE_BIT_NV'
--
--     -   'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_OPTICAL_FLOW_VECTOR_BIT_NV'
--
-- -   Extending 'Vulkan.Core10.Enums.ObjectType.ObjectType':
--
--     -   'Vulkan.Core10.Enums.ObjectType.OBJECT_TYPE_OPTICAL_FLOW_SESSION_NV'
--
-- -   Extending
--     'Vulkan.Core13.Enums.PipelineStageFlags2.PipelineStageFlagBits2':
--
--     -   'Vulkan.Core13.Enums.PipelineStageFlags2.PIPELINE_STAGE_2_OPTICAL_FLOW_BIT_NV'
--
-- -   Extending 'Vulkan.Core10.Enums.QueueFlagBits.QueueFlagBits':
--
--     -   'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_OPTICAL_FLOW_BIT_NV'
--
-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_OPTICAL_FLOW_EXECUTE_INFO_NV'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_OPTICAL_FLOW_IMAGE_FORMAT_INFO_NV'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_OPTICAL_FLOW_IMAGE_FORMAT_PROPERTIES_NV'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_OPTICAL_FLOW_SESSION_CREATE_INFO_NV'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_OPTICAL_FLOW_SESSION_CREATE_PRIVATE_DATA_INFO_NV'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_OPTICAL_FLOW_FEATURES_NV'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_OPTICAL_FLOW_PROPERTIES_NV'
--
-- == Examples
--
-- > // Example querying available input formats
-- > VkOpticalFlowImageFormatInfoNV ofFormatInfo = { VK_STRUCTURE_TYPE_OPTICAL_FLOW_IMAGE_FORMAT_INFO_NV };
-- > ofFormatInfo.usage = VK_OPTICAL_FLOW_USAGE_INPUT_BIT_NV;
-- >
-- > uint32_t count = 0;
-- > vkGetPhysicalDeviceOpticalFlowImageFormatsNV(physicalDevice, &ofFormatInfo, &count, NULL);
-- > VkOpticalFlowImageFormatPropertiesNV* fmt = new VkOpticalFlowImageFormatPropertiesNV[count];
-- > memset(fmt, 0, count  * sizeof(VkOpticalFlowImageFormatPropertiesNV));
-- > for (uint32_t i = 0; i < count; i++) {
-- >     fmt[i].sType = VK_STRUCTURE_TYPE_OPTICAL_FLOW_IMAGE_FORMAT_PROPERTIES_NV;
-- > }
-- > vkGetPhysicalDeviceOpticalFlowImageFormatsNV(physicalDevice, &ofFormatInfo, &count, fmt);
-- >
-- > // Pick one of the available formats
-- > VkFormat inputFormat = fmt[0].format;
-- >
-- > // Check feature support for optimal tiling
-- > VkFormatProperties3 formatProperties3 = { VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3 };
-- > VkFormatProperties2 formatProperties2 = { VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2, &formatProperties3 };
-- > vkGetPhysicalDeviceFormatProperties2(physicalDevice, inputFormat, &formatProperties2);
-- > if (!(formatProperties3.optimalTilingFeatures & VK_FORMAT_FEATURE_2_OPTICAL_FLOW_IMAGE_BIT_NV)) {
-- >     return false;
-- > }
-- >
-- > // Check support for image creation parameters
-- > VkPhysicalDeviceImageFormatInfo2 imageFormatInfo2 = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2, &ofFormatInfo };
-- > imageFormatInfo2.format = inputFormat;
-- > imageFormatInfo2.type = VK_IMAGE_TYPE_2D;
-- > imageFormatInfo2.tiling = VK_IMAGE_TILING_OPTIMAL;
-- > imageFormatInfo2.usage = VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT;
-- >
-- > VkImageFormatProperties2 imageFormatProperties2 = { VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2 };
-- > if (vkGetPhysicalDeviceImageFormatProperties2(physicalDevice, &imageFormatInfo2, &imageFormatProperties2) != VK_SUCCESS) {
-- >     return false;
-- > }
-- >
-- > VkImageCreateInfo imageCreateInfo = { VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO, &ofFormatInfo };
-- > imageCreateInfo.imageType = VK_IMAGE_TYPE_2D;
-- > imageCreateInfo.format = inputFormat;
-- > imageCreateInfo.extent = { width, height, (uint32_t)1};
-- > imageCreateInfo.mipLevels = 1;
-- > imageCreateInfo.arrayLayers = 1;
-- > imageCreateInfo.samples = VK_SAMPLE_COUNT_1_BIT;
-- > imageCreateInfo.usage = VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT;
-- > imageCreateInfo.tiling = VK_IMAGE_TILING_OPTIMAL;
-- >
-- > vkCreateImage(device, &imageCreateInfo, NULL, &input);
-- > "allocate memory, bind image, create view"
-- >
-- > "do the same for reference and output"
-- >
-- > // Create optical flow session
-- > VkOpticalFlowSessionCreateInfoNV sessionCreateInfo = { VK_STRUCTURE_TYPE_OPTICAL_FLOW_SESSION_CREATE_INFO_NV };
-- > sessionCreateInfo.width = width;
-- > sessionCreateInfo.height = height;
-- > sessionCreateInfo.imageFormat = inputFormat;
-- > sessionCreateInfo.flowVectorFormat = outputFormat;
-- > sessionCreateInfo.outputGridSize = VK_OPTICAL_FLOW_GRID_SIZE_4X4_BIT_NV;
-- > sessionCreateInfo.performanceLevel = VK_OPTICAL_FLOW_PERFORMANCE_LEVEL_SLOW_NV;
-- > VkOpticalFlowSessionNV session;
-- > vkCreateOpticalFlowSessionNV(device, &sessionCreateInfo, NULL, &session);
-- >
-- > "allocate command buffer"
-- >
-- > "transfer images to VK_PIPELINE_STAGE_2_OPTICAL_FLOW_BIT_NV"
-- > "transfer input images to VK_ACCESS_2_OPTICAL_FLOW_READ_BIT_NV and output image to VK_ACCESS_2_OPTICAL_FLOW_WRITE_BIT_NV"
-- >
-- > vkBindOpticalFlowSessionImageNV(device, session, VK_OPTICAL_FLOW_SESSION_BINDING_POINT_INPUT_NV, inputView, VK_IMAGE_LAYOUT_GENERAL);
-- > vkBindOpticalFlowSessionImageNV(device, session, VK_OPTICAL_FLOW_SESSION_BINDING_POINT_REFERENCE_NV, refView, VK_IMAGE_LAYOUT_GENERAL);
-- > vkBindOpticalFlowSessionImageNV(device, session, VK_OPTICAL_FLOW_SESSION_BINDING_POINT_FLOW_VECTOR_NV, outputView, VK_IMAGE_LAYOUT_GENERAL);
-- >
-- > VkOpticalFlowExecuteInfoNV opticalFlowExecuteInfo = { VK_STRUCTURE_TYPE_OPTICAL_FLOW_EXECUTE_INFO_NV };
-- > vkCmdOpticalFlowExecuteNV(cmd, session, &opticalFlowExecuteInfo);
-- >
-- > "submit command buffer"
--
-- == Version History
--
-- -   Revision 1, 2022-09-26 (Carsten Rohde)
--
--     -   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_NV_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_NV_optical_flow  ( getPhysicalDeviceOpticalFlowImageFormatsNV
                                             , createOpticalFlowSessionNV
                                             , withOpticalFlowSessionNV
                                             , destroyOpticalFlowSessionNV
                                             , bindOpticalFlowSessionImageNV
                                             , cmdOpticalFlowExecuteNV
                                             , pattern FORMAT_R16G16_S10_5_NV
                                             , PhysicalDeviceOpticalFlowFeaturesNV(..)
                                             , PhysicalDeviceOpticalFlowPropertiesNV(..)
                                             , OpticalFlowImageFormatInfoNV(..)
                                             , OpticalFlowImageFormatPropertiesNV(..)
                                             , OpticalFlowSessionCreateInfoNV(..)
                                             , OpticalFlowSessionCreatePrivateDataInfoNV(..)
                                             , OpticalFlowExecuteInfoNV(..)
                                             , OpticalFlowGridSizeFlagsNV
                                             , OpticalFlowGridSizeFlagBitsNV( OPTICAL_FLOW_GRID_SIZE_UNKNOWN_NV
                                                                            , OPTICAL_FLOW_GRID_SIZE_1X1_BIT_NV
                                                                            , OPTICAL_FLOW_GRID_SIZE_2X2_BIT_NV
                                                                            , OPTICAL_FLOW_GRID_SIZE_4X4_BIT_NV
                                                                            , OPTICAL_FLOW_GRID_SIZE_8X8_BIT_NV
                                                                            , ..
                                                                            )
                                             , OpticalFlowUsageFlagsNV
                                             , OpticalFlowUsageFlagBitsNV( OPTICAL_FLOW_USAGE_UNKNOWN_NV
                                                                         , OPTICAL_FLOW_USAGE_INPUT_BIT_NV
                                                                         , OPTICAL_FLOW_USAGE_OUTPUT_BIT_NV
                                                                         , OPTICAL_FLOW_USAGE_HINT_BIT_NV
                                                                         , OPTICAL_FLOW_USAGE_COST_BIT_NV
                                                                         , OPTICAL_FLOW_USAGE_GLOBAL_FLOW_BIT_NV
                                                                         , ..
                                                                         )
                                             , OpticalFlowPerformanceLevelNV( OPTICAL_FLOW_PERFORMANCE_LEVEL_UNKNOWN_NV
                                                                            , OPTICAL_FLOW_PERFORMANCE_LEVEL_SLOW_NV
                                                                            , OPTICAL_FLOW_PERFORMANCE_LEVEL_MEDIUM_NV
                                                                            , OPTICAL_FLOW_PERFORMANCE_LEVEL_FAST_NV
                                                                            , ..
                                                                            )
                                             , OpticalFlowSessionBindingPointNV( OPTICAL_FLOW_SESSION_BINDING_POINT_UNKNOWN_NV
                                                                               , OPTICAL_FLOW_SESSION_BINDING_POINT_INPUT_NV
                                                                               , OPTICAL_FLOW_SESSION_BINDING_POINT_REFERENCE_NV
                                                                               , OPTICAL_FLOW_SESSION_BINDING_POINT_HINT_NV
                                                                               , OPTICAL_FLOW_SESSION_BINDING_POINT_FLOW_VECTOR_NV
                                                                               , OPTICAL_FLOW_SESSION_BINDING_POINT_BACKWARD_FLOW_VECTOR_NV
                                                                               , OPTICAL_FLOW_SESSION_BINDING_POINT_COST_NV
                                                                               , OPTICAL_FLOW_SESSION_BINDING_POINT_BACKWARD_COST_NV
                                                                               , OPTICAL_FLOW_SESSION_BINDING_POINT_GLOBAL_FLOW_NV
                                                                               , ..
                                                                               )
                                             , OpticalFlowSessionCreateFlagsNV
                                             , OpticalFlowSessionCreateFlagBitsNV( OPTICAL_FLOW_SESSION_CREATE_ENABLE_HINT_BIT_NV
                                                                                 , OPTICAL_FLOW_SESSION_CREATE_ENABLE_COST_BIT_NV
                                                                                 , OPTICAL_FLOW_SESSION_CREATE_ENABLE_GLOBAL_FLOW_BIT_NV
                                                                                 , OPTICAL_FLOW_SESSION_CREATE_ALLOW_REGIONS_BIT_NV
                                                                                 , OPTICAL_FLOW_SESSION_CREATE_BOTH_DIRECTIONS_BIT_NV
                                                                                 , ..
                                                                                 )
                                             , OpticalFlowExecuteFlagsNV
                                             , OpticalFlowExecuteFlagBitsNV( OPTICAL_FLOW_EXECUTE_DISABLE_TEMPORAL_HINTS_BIT_NV
                                                                           , ..
                                                                           )
                                             , NV_OPTICAL_FLOW_SPEC_VERSION
                                             , pattern NV_OPTICAL_FLOW_SPEC_VERSION
                                             , NV_OPTICAL_FLOW_EXTENSION_NAME
                                             , pattern NV_OPTICAL_FLOW_EXTENSION_NAME
                                             , OpticalFlowSessionNV(..)
                                             ) where

import Data.Bits (Bits)
import Data.Bits (FiniteBits)
import Vulkan.Internal.Utils (enumReadPrec)
import Vulkan.Internal.Utils (enumShowsPrec)
import Vulkan.Internal.Utils (traceAroundEvent)
import Control.Exception.Base (bracket)
import Control.Monad (unless)
import Control.Monad.IO.Class (liftIO)
import Data.Typeable (eqT)
import Foreign.Marshal.Alloc (allocaBytes)
import Foreign.Marshal.Alloc (callocBytes)
import Foreign.Marshal.Alloc (free)
import GHC.Base (when)
import GHC.IO (throwIO)
import GHC.Ptr (castPtr)
import GHC.Ptr (nullFunPtr)
import Foreign.Ptr (nullPtr)
import Foreign.Ptr (plusPtr)
import GHC.Show (showString)
import GHC.Show (showsPrec)
import Numeric (showHex)
import 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.Type.Equality ((:~:)(Refl))
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.CStruct.Extends (forgetExtensions)
import Vulkan.NamedType ((:::))
import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
import Vulkan.Core10.FundamentalTypes (Bool32)
import Vulkan.CStruct.Extends (Chain)
import Vulkan.Core10.Handles (CommandBuffer)
import Vulkan.Core10.Handles (CommandBuffer(..))
import Vulkan.Core10.Handles (CommandBuffer(CommandBuffer))
import Vulkan.Core10.Handles (CommandBuffer_T)
import Vulkan.Core10.Handles (Device)
import Vulkan.Core10.Handles (Device(..))
import Vulkan.Core10.Handles (Device(Device))
import Vulkan.Dynamic (DeviceCmds(pVkBindOpticalFlowSessionImageNV))
import Vulkan.Dynamic (DeviceCmds(pVkCmdOpticalFlowExecuteNV))
import Vulkan.Dynamic (DeviceCmds(pVkCreateOpticalFlowSessionNV))
import Vulkan.Dynamic (DeviceCmds(pVkDestroyOpticalFlowSessionNV))
import Vulkan.Core10.Handles (Device_T)
import Vulkan.CStruct.Extends (Extends)
import Vulkan.CStruct.Extends (Extendss)
import Vulkan.CStruct.Extends (Extensible(..))
import Vulkan.Core10.FundamentalTypes (Flags)
import Vulkan.Core10.Enums.Format (Format)
import Vulkan.Core10.Enums.ImageLayout (ImageLayout)
import Vulkan.Core10.Enums.ImageLayout (ImageLayout(..))
import Vulkan.Core10.Handles (ImageView)
import Vulkan.Core10.Handles (ImageView(..))
import Vulkan.Dynamic (InstanceCmds(pVkGetPhysicalDeviceOpticalFlowImageFormatsNV))
import Vulkan.Extensions.Handles (OpticalFlowSessionNV)
import Vulkan.Extensions.Handles (OpticalFlowSessionNV(..))
import Vulkan.CStruct.Extends (PeekChain)
import Vulkan.CStruct.Extends (PeekChain(..))
import Vulkan.Core10.Handles (PhysicalDevice)
import Vulkan.Core10.Handles (PhysicalDevice(..))
import Vulkan.Core10.Handles (PhysicalDevice(PhysicalDevice))
import Vulkan.Core10.Handles (PhysicalDevice_T)
import Vulkan.CStruct.Extends (PokeChain)
import Vulkan.CStruct.Extends (PokeChain(..))
import Vulkan.Core10.FundamentalTypes (Rect2D)
import Vulkan.Core10.Enums.Result (Result)
import Vulkan.Core10.Enums.Result (Result(..))
import Vulkan.CStruct.Extends (SomeStruct)
import Vulkan.Core10.Enums.StructureType (StructureType)
import Vulkan.Exception (VulkanException(..))
import Vulkan.Core10.Enums.Format (Format(FORMAT_R16G16_SFIXED5_NV))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_OPTICAL_FLOW_EXECUTE_INFO_NV))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_OPTICAL_FLOW_IMAGE_FORMAT_INFO_NV))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_OPTICAL_FLOW_IMAGE_FORMAT_PROPERTIES_NV))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_OPTICAL_FLOW_SESSION_CREATE_INFO_NV))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_OPTICAL_FLOW_SESSION_CREATE_PRIVATE_DATA_INFO_NV))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_OPTICAL_FLOW_FEATURES_NV))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_OPTICAL_FLOW_PROPERTIES_NV))
import Vulkan.Core10.Enums.Result (Result(SUCCESS))
import Vulkan.Extensions.Handles (OpticalFlowSessionNV(..))
foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkGetPhysicalDeviceOpticalFlowImageFormatsNV
  :: FunPtr (Ptr PhysicalDevice_T -> Ptr OpticalFlowImageFormatInfoNV -> Ptr Word32 -> Ptr OpticalFlowImageFormatPropertiesNV -> IO Result) -> Ptr PhysicalDevice_T -> Ptr OpticalFlowImageFormatInfoNV -> Ptr Word32 -> Ptr OpticalFlowImageFormatPropertiesNV -> IO Result

-- | vkGetPhysicalDeviceOpticalFlowImageFormatsNV - Query image formats for
-- 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 application 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 an optical flow frame, 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
-- 'OpticalFlowImageFormatInfoNV' 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
-- 'OpticalFlowImageFormatInfoNV'::@usage@ field /must/ contain one or more
-- of the bits defined in 'OpticalFlowUsageFlagBitsNV'.
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkGetPhysicalDeviceOpticalFlowImageFormatsNV-physicalDevice-parameter#
--     @physicalDevice@ /must/ be a valid
--     'Vulkan.Core10.Handles.PhysicalDevice' handle
--
-- -   #VUID-vkGetPhysicalDeviceOpticalFlowImageFormatsNV-pOpticalFlowImageFormatInfo-parameter#
--     @pOpticalFlowImageFormatInfo@ /must/ be a valid pointer to a valid
--     'OpticalFlowImageFormatInfoNV' structure
--
-- -   #VUID-vkGetPhysicalDeviceOpticalFlowImageFormatsNV-pFormatCount-parameter#
--     @pFormatCount@ /must/ be a valid pointer to a @uint32_t@ value
--
-- -   #VUID-vkGetPhysicalDeviceOpticalFlowImageFormatsNV-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@
--     'OpticalFlowImageFormatPropertiesNV' 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_R8_UNORM' and
-- 'Vulkan.Core10.Enums.Format.FORMAT_G8_B8R8_2PLANE_420_UNORM' are
-- initially supported for images with
-- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#opticalflow-usage optical usage>
-- 'OPTICAL_FLOW_USAGE_INPUT_BIT_NV'.
--
-- 'Vulkan.Core10.Enums.Format.FORMAT_R16G16_SFIXED5_NV' is initially
-- supported for images with
-- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#opticalflow-usage optical flow usage>
-- 'OPTICAL_FLOW_USAGE_OUTPUT_BIT_NV', 'OPTICAL_FLOW_USAGE_HINT_BIT_NV' and
-- 'OPTICAL_FLOW_USAGE_GLOBAL_FLOW_BIT_NV'.
--
-- 'Vulkan.Core10.Enums.Format.FORMAT_R8_UINT' and
-- 'Vulkan.Core10.Enums.Format.FORMAT_R32_UINT' are initially supported for
-- images with
-- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#opticalflow-usage optical flow usage>
-- 'OPTICAL_FLOW_USAGE_COST_BIT_NV'. It is recommended to use
-- 'Vulkan.Core10.Enums.Format.FORMAT_R8_UINT' because of the lower
-- bandwidth.
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_optical_flow VK_NV_optical_flow>,
-- 'OpticalFlowImageFormatInfoNV', 'OpticalFlowImageFormatPropertiesNV',
-- 'Vulkan.Core10.Handles.PhysicalDevice'
getPhysicalDeviceOpticalFlowImageFormatsNV :: forall io
                                            . (MonadIO io)
                                           => -- | @physicalDevice@ is the physical device being queried.
                                              PhysicalDevice
                                           -> -- | #opticalflow-getimageformat-pOpticalFlowImageFormatInfo#
                                              -- @pOpticalFlowImageFormatInfo@ is a pointer to a
                                              -- 'OpticalFlowImageFormatInfoNV' structure specifying the optical flow
                                              -- usage for which information is returned.
                                              OpticalFlowImageFormatInfoNV
                                           -> io (Result, ("imageFormatProperties" ::: Vector OpticalFlowImageFormatPropertiesNV))
getPhysicalDeviceOpticalFlowImageFormatsNV :: forall (io :: * -> *).
MonadIO io =>
PhysicalDevice
-> OpticalFlowImageFormatInfoNV
-> io
     (Result,
      "imageFormatProperties"
      ::: Vector OpticalFlowImageFormatPropertiesNV)
getPhysicalDeviceOpticalFlowImageFormatsNV PhysicalDevice
physicalDevice
                                             OpticalFlowImageFormatInfoNV
opticalFlowImageFormatInfo = IO
  (Result,
   "imageFormatProperties"
   ::: Vector OpticalFlowImageFormatPropertiesNV)
-> io
     (Result,
      "imageFormatProperties"
      ::: Vector OpticalFlowImageFormatPropertiesNV)
forall a. IO a -> io a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Result,
    "imageFormatProperties"
    ::: Vector OpticalFlowImageFormatPropertiesNV)
 -> io
      (Result,
       "imageFormatProperties"
       ::: Vector OpticalFlowImageFormatPropertiesNV))
-> (ContT
      (Result,
       "imageFormatProperties"
       ::: Vector OpticalFlowImageFormatPropertiesNV)
      IO
      (Result,
       "imageFormatProperties"
       ::: Vector OpticalFlowImageFormatPropertiesNV)
    -> IO
         (Result,
          "imageFormatProperties"
          ::: Vector OpticalFlowImageFormatPropertiesNV))
-> ContT
     (Result,
      "imageFormatProperties"
      ::: Vector OpticalFlowImageFormatPropertiesNV)
     IO
     (Result,
      "imageFormatProperties"
      ::: Vector OpticalFlowImageFormatPropertiesNV)
-> io
     (Result,
      "imageFormatProperties"
      ::: Vector OpticalFlowImageFormatPropertiesNV)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT
  (Result,
   "imageFormatProperties"
   ::: Vector OpticalFlowImageFormatPropertiesNV)
  IO
  (Result,
   "imageFormatProperties"
   ::: Vector OpticalFlowImageFormatPropertiesNV)
-> IO
     (Result,
      "imageFormatProperties"
      ::: Vector OpticalFlowImageFormatPropertiesNV)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Result,
    "imageFormatProperties"
    ::: Vector OpticalFlowImageFormatPropertiesNV)
   IO
   (Result,
    "imageFormatProperties"
    ::: Vector OpticalFlowImageFormatPropertiesNV)
 -> io
      (Result,
       "imageFormatProperties"
       ::: Vector OpticalFlowImageFormatPropertiesNV))
-> ContT
     (Result,
      "imageFormatProperties"
      ::: Vector OpticalFlowImageFormatPropertiesNV)
     IO
     (Result,
      "imageFormatProperties"
      ::: Vector OpticalFlowImageFormatPropertiesNV)
-> io
     (Result,
      "imageFormatProperties"
      ::: Vector OpticalFlowImageFormatPropertiesNV)
forall a b. (a -> b) -> a -> b
$ do
  let vkGetPhysicalDeviceOpticalFlowImageFormatsNVPtr :: FunPtr
  (Ptr PhysicalDevice_T
   -> Ptr OpticalFlowImageFormatInfoNV
   -> Ptr Word32
   -> Ptr OpticalFlowImageFormatPropertiesNV
   -> IO Result)
vkGetPhysicalDeviceOpticalFlowImageFormatsNVPtr = InstanceCmds
-> FunPtr
     (Ptr PhysicalDevice_T
      -> Ptr OpticalFlowImageFormatInfoNV
      -> Ptr Word32
      -> Ptr OpticalFlowImageFormatPropertiesNV
      -> IO Result)
pVkGetPhysicalDeviceOpticalFlowImageFormatsNV (case PhysicalDevice
physicalDevice of PhysicalDevice{InstanceCmds
instanceCmds :: InstanceCmds
instanceCmds :: PhysicalDevice -> InstanceCmds
instanceCmds} -> InstanceCmds
instanceCmds)
  IO ()
-> ContT
     (Result,
      "imageFormatProperties"
      ::: Vector OpticalFlowImageFormatPropertiesNV)
     IO
     ()
forall (m :: * -> *) a.
Monad m =>
m a
-> ContT
     (Result,
      "imageFormatProperties"
      ::: Vector OpticalFlowImageFormatPropertiesNV)
     m
     a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO ()
 -> ContT
      (Result,
       "imageFormatProperties"
       ::: Vector OpticalFlowImageFormatPropertiesNV)
      IO
      ())
-> IO ()
-> ContT
     (Result,
      "imageFormatProperties"
      ::: Vector OpticalFlowImageFormatPropertiesNV)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr PhysicalDevice_T
   -> Ptr OpticalFlowImageFormatInfoNV
   -> Ptr Word32
   -> Ptr OpticalFlowImageFormatPropertiesNV
   -> IO Result)
vkGetPhysicalDeviceOpticalFlowImageFormatsNVPtr FunPtr
  (Ptr PhysicalDevice_T
   -> Ptr OpticalFlowImageFormatInfoNV
   -> Ptr Word32
   -> Ptr OpticalFlowImageFormatPropertiesNV
   -> IO Result)
-> FunPtr
     (Ptr PhysicalDevice_T
      -> Ptr OpticalFlowImageFormatInfoNV
      -> Ptr Word32
      -> Ptr OpticalFlowImageFormatPropertiesNV
      -> IO Result)
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr PhysicalDevice_T
   -> Ptr OpticalFlowImageFormatInfoNV
   -> Ptr Word32
   -> Ptr OpticalFlowImageFormatPropertiesNV
   -> IO Result)
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
    IOException -> IO ()
forall e a. (HasCallStack, Exception e) => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"The function pointer for vkGetPhysicalDeviceOpticalFlowImageFormatsNV is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkGetPhysicalDeviceOpticalFlowImageFormatsNV' :: Ptr PhysicalDevice_T
-> Ptr OpticalFlowImageFormatInfoNV
-> Ptr Word32
-> Ptr OpticalFlowImageFormatPropertiesNV
-> IO Result
vkGetPhysicalDeviceOpticalFlowImageFormatsNV' = FunPtr
  (Ptr PhysicalDevice_T
   -> Ptr OpticalFlowImageFormatInfoNV
   -> Ptr Word32
   -> Ptr OpticalFlowImageFormatPropertiesNV
   -> IO Result)
-> Ptr PhysicalDevice_T
-> Ptr OpticalFlowImageFormatInfoNV
-> Ptr Word32
-> Ptr OpticalFlowImageFormatPropertiesNV
-> IO Result
mkVkGetPhysicalDeviceOpticalFlowImageFormatsNV FunPtr
  (Ptr PhysicalDevice_T
   -> Ptr OpticalFlowImageFormatInfoNV
   -> Ptr Word32
   -> Ptr OpticalFlowImageFormatPropertiesNV
   -> IO Result)
vkGetPhysicalDeviceOpticalFlowImageFormatsNVPtr
  let physicalDevice' :: Ptr PhysicalDevice_T
physicalDevice' = PhysicalDevice -> Ptr PhysicalDevice_T
physicalDeviceHandle (PhysicalDevice
physicalDevice)
  pOpticalFlowImageFormatInfo <- ((Ptr OpticalFlowImageFormatInfoNV
  -> IO
       (Result,
        "imageFormatProperties"
        ::: Vector OpticalFlowImageFormatPropertiesNV))
 -> IO
      (Result,
       "imageFormatProperties"
       ::: Vector OpticalFlowImageFormatPropertiesNV))
-> ContT
     (Result,
      "imageFormatProperties"
      ::: Vector OpticalFlowImageFormatPropertiesNV)
     IO
     (Ptr OpticalFlowImageFormatInfoNV)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr OpticalFlowImageFormatInfoNV
   -> IO
        (Result,
         "imageFormatProperties"
         ::: Vector OpticalFlowImageFormatPropertiesNV))
  -> IO
       (Result,
        "imageFormatProperties"
        ::: Vector OpticalFlowImageFormatPropertiesNV))
 -> ContT
      (Result,
       "imageFormatProperties"
       ::: Vector OpticalFlowImageFormatPropertiesNV)
      IO
      (Ptr OpticalFlowImageFormatInfoNV))
-> ((Ptr OpticalFlowImageFormatInfoNV
     -> IO
          (Result,
           "imageFormatProperties"
           ::: Vector OpticalFlowImageFormatPropertiesNV))
    -> IO
         (Result,
          "imageFormatProperties"
          ::: Vector OpticalFlowImageFormatPropertiesNV))
-> ContT
     (Result,
      "imageFormatProperties"
      ::: Vector OpticalFlowImageFormatPropertiesNV)
     IO
     (Ptr OpticalFlowImageFormatInfoNV)
forall a b. (a -> b) -> a -> b
$ OpticalFlowImageFormatInfoNV
-> (Ptr OpticalFlowImageFormatInfoNV
    -> IO
         (Result,
          "imageFormatProperties"
          ::: Vector OpticalFlowImageFormatPropertiesNV))
-> IO
     (Result,
      "imageFormatProperties"
      ::: Vector OpticalFlowImageFormatPropertiesNV)
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
forall b.
OpticalFlowImageFormatInfoNV
-> (Ptr OpticalFlowImageFormatInfoNV -> IO b) -> IO b
withCStruct (OpticalFlowImageFormatInfoNV
opticalFlowImageFormatInfo)
  pPFormatCount <- ContT $ bracket (callocBytes @Word32 4) free
  r <- lift $ traceAroundEvent "vkGetPhysicalDeviceOpticalFlowImageFormatsNV" (vkGetPhysicalDeviceOpticalFlowImageFormatsNV'
                                                                                 physicalDevice'
                                                                                 pOpticalFlowImageFormatInfo
                                                                                 (pPFormatCount)
                                                                                 (nullPtr))
  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
  pFormatCount <- lift $ peek @Word32 pPFormatCount
  pPImageFormatProperties <- ContT $ bracket (callocBytes @OpticalFlowImageFormatPropertiesNV ((fromIntegral (pFormatCount)) * 24)) free
  _ <- traverse (\Int
i -> ((()
  -> IO
       (Result,
        "imageFormatProperties"
        ::: Vector OpticalFlowImageFormatPropertiesNV))
 -> IO
      (Result,
       "imageFormatProperties"
       ::: Vector OpticalFlowImageFormatPropertiesNV))
-> ContT
     (Result,
      "imageFormatProperties"
      ::: Vector OpticalFlowImageFormatPropertiesNV)
     IO
     ()
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((()
   -> IO
        (Result,
         "imageFormatProperties"
         ::: Vector OpticalFlowImageFormatPropertiesNV))
  -> IO
       (Result,
        "imageFormatProperties"
        ::: Vector OpticalFlowImageFormatPropertiesNV))
 -> ContT
      (Result,
       "imageFormatProperties"
       ::: Vector OpticalFlowImageFormatPropertiesNV)
      IO
      ())
-> ((()
     -> IO
          (Result,
           "imageFormatProperties"
           ::: Vector OpticalFlowImageFormatPropertiesNV))
    -> IO
         (Result,
          "imageFormatProperties"
          ::: Vector OpticalFlowImageFormatPropertiesNV))
-> ContT
     (Result,
      "imageFormatProperties"
      ::: Vector OpticalFlowImageFormatPropertiesNV)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr OpticalFlowImageFormatPropertiesNV
-> IO
     (Result,
      "imageFormatProperties"
      ::: Vector OpticalFlowImageFormatPropertiesNV)
-> IO
     (Result,
      "imageFormatProperties"
      ::: Vector OpticalFlowImageFormatPropertiesNV)
forall b. Ptr OpticalFlowImageFormatPropertiesNV -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> IO b -> IO b
pokeZeroCStruct (Ptr OpticalFlowImageFormatPropertiesNV
pPImageFormatProperties Ptr OpticalFlowImageFormatPropertiesNV
-> Int -> Ptr OpticalFlowImageFormatPropertiesNV
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
i Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
24) :: Ptr OpticalFlowImageFormatPropertiesNV) (IO
   (Result,
    "imageFormatProperties"
    ::: Vector OpticalFlowImageFormatPropertiesNV)
 -> IO
      (Result,
       "imageFormatProperties"
       ::: Vector OpticalFlowImageFormatPropertiesNV))
-> ((()
     -> IO
          (Result,
           "imageFormatProperties"
           ::: Vector OpticalFlowImageFormatPropertiesNV))
    -> IO
         (Result,
          "imageFormatProperties"
          ::: Vector OpticalFlowImageFormatPropertiesNV))
-> (()
    -> IO
         (Result,
          "imageFormatProperties"
          ::: Vector OpticalFlowImageFormatPropertiesNV))
-> IO
     (Result,
      "imageFormatProperties"
      ::: Vector OpticalFlowImageFormatPropertiesNV)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((()
 -> IO
      (Result,
       "imageFormatProperties"
       ::: Vector OpticalFlowImageFormatPropertiesNV))
-> ()
-> IO
     (Result,
      "imageFormatProperties"
      ::: Vector OpticalFlowImageFormatPropertiesNV)
forall a b. (a -> b) -> a -> b
$ ())) [0..(fromIntegral (pFormatCount)) - 1]
  r' <- lift $ traceAroundEvent "vkGetPhysicalDeviceOpticalFlowImageFormatsNV" (vkGetPhysicalDeviceOpticalFlowImageFormatsNV'
                                                                                  physicalDevice'
                                                                                  pOpticalFlowImageFormatInfo
                                                                                  (pPFormatCount)
                                                                                  ((pPImageFormatProperties)))
  lift $ when (r' < SUCCESS) (throwIO (VulkanException r'))
  pFormatCount' <- lift $ peek @Word32 pPFormatCount
  pImageFormatProperties' <- lift $ generateM (fromIntegral (pFormatCount')) (\Int
i -> forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @OpticalFlowImageFormatPropertiesNV (((Ptr OpticalFlowImageFormatPropertiesNV
pPImageFormatProperties) Ptr OpticalFlowImageFormatPropertiesNV
-> Int -> Ptr OpticalFlowImageFormatPropertiesNV
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
24 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr OpticalFlowImageFormatPropertiesNV)))
  pure $ ((r'), pImageFormatProperties')


foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkCreateOpticalFlowSessionNV
  :: FunPtr (Ptr Device_T -> Ptr (SomeStruct OpticalFlowSessionCreateInfoNV) -> Ptr AllocationCallbacks -> Ptr OpticalFlowSessionNV -> IO Result) -> Ptr Device_T -> Ptr (SomeStruct OpticalFlowSessionCreateInfoNV) -> Ptr AllocationCallbacks -> Ptr OpticalFlowSessionNV -> IO Result

-- | vkCreateOpticalFlowSessionNV - Creates an optical flow session object
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkCreateOpticalFlowSessionNV-device-parameter# @device@ /must/
--     be a valid 'Vulkan.Core10.Handles.Device' handle
--
-- -   #VUID-vkCreateOpticalFlowSessionNV-pCreateInfo-parameter#
--     @pCreateInfo@ /must/ be a valid pointer to a valid
--     'OpticalFlowSessionCreateInfoNV' structure
--
-- -   #VUID-vkCreateOpticalFlowSessionNV-pAllocator-parameter# If
--     @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid pointer
--     to a valid 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
--     structure
--
-- -   #VUID-vkCreateOpticalFlowSessionNV-pSession-parameter# @pSession@
--     /must/ be a valid pointer to a
--     'Vulkan.Extensions.Handles.OpticalFlowSessionNV' handle
--
-- -   #VUID-vkCreateOpticalFlowSessionNV-device-queuecount# The device
--     /must/ have been created with at least @1@ queue
--
-- == Return Codes
--
-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
--
--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
--
-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_INITIALIZATION_FAILED'
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_UNKNOWN'
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_VALIDATION_FAILED'
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_optical_flow VK_NV_optical_flow>,
-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
-- 'Vulkan.Core10.Handles.Device', 'OpticalFlowSessionCreateInfoNV',
-- 'Vulkan.Extensions.Handles.OpticalFlowSessionNV'
createOpticalFlowSessionNV :: forall a io
                            . ( Extendss OpticalFlowSessionCreateInfoNV a
                              , PokeChain a
                              , MonadIO io )
                           => -- | @device@ is the logical device that creates the optical flow session
                              -- object.
                              Device
                           -> -- | @pCreateInfo@ is a pointer to a 'OpticalFlowSessionCreateInfoNV'
                              -- structure containing parameters specifying the creation of the optical
                              -- flow session.
                              (OpticalFlowSessionCreateInfoNV a)
                           -> -- | @pAllocator@ controls host memory allocation as described in the
                              -- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#memory-allocation Memory Allocation>
                              -- chapter.
                              ("allocator" ::: Maybe AllocationCallbacks)
                           -> io (OpticalFlowSessionNV)
createOpticalFlowSessionNV :: forall (a :: [*]) (io :: * -> *).
(Extendss OpticalFlowSessionCreateInfoNV a, PokeChain a,
 MonadIO io) =>
Device
-> OpticalFlowSessionCreateInfoNV a
-> ("allocator" ::: Maybe AllocationCallbacks)
-> io OpticalFlowSessionNV
createOpticalFlowSessionNV Device
device OpticalFlowSessionCreateInfoNV a
createInfo "allocator" ::: Maybe AllocationCallbacks
allocator = IO OpticalFlowSessionNV -> io OpticalFlowSessionNV
forall a. IO a -> io a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO OpticalFlowSessionNV -> io OpticalFlowSessionNV)
-> (ContT OpticalFlowSessionNV IO OpticalFlowSessionNV
    -> IO OpticalFlowSessionNV)
-> ContT OpticalFlowSessionNV IO OpticalFlowSessionNV
-> io OpticalFlowSessionNV
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT OpticalFlowSessionNV IO OpticalFlowSessionNV
-> IO OpticalFlowSessionNV
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT OpticalFlowSessionNV IO OpticalFlowSessionNV
 -> io OpticalFlowSessionNV)
-> ContT OpticalFlowSessionNV IO OpticalFlowSessionNV
-> io OpticalFlowSessionNV
forall a b. (a -> b) -> a -> b
$ do
  let vkCreateOpticalFlowSessionNVPtr :: FunPtr
  (Ptr Device_T
   -> Ptr (SomeStruct OpticalFlowSessionCreateInfoNV)
   -> Ptr AllocationCallbacks
   -> Ptr OpticalFlowSessionNV
   -> IO Result)
vkCreateOpticalFlowSessionNVPtr = DeviceCmds
-> FunPtr
     (Ptr Device_T
      -> Ptr (SomeStruct OpticalFlowSessionCreateInfoNV)
      -> Ptr AllocationCallbacks
      -> Ptr OpticalFlowSessionNV
      -> IO Result)
pVkCreateOpticalFlowSessionNV (case Device
device of Device{DeviceCmds
deviceCmds :: DeviceCmds
deviceCmds :: Device -> DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO () -> ContT OpticalFlowSessionNV IO ()
forall (m :: * -> *) a.
Monad m =>
m a -> ContT OpticalFlowSessionNV m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT OpticalFlowSessionNV IO ())
-> IO () -> ContT OpticalFlowSessionNV IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr Device_T
   -> Ptr (SomeStruct OpticalFlowSessionCreateInfoNV)
   -> Ptr AllocationCallbacks
   -> Ptr OpticalFlowSessionNV
   -> IO Result)
vkCreateOpticalFlowSessionNVPtr FunPtr
  (Ptr Device_T
   -> Ptr (SomeStruct OpticalFlowSessionCreateInfoNV)
   -> Ptr AllocationCallbacks
   -> Ptr OpticalFlowSessionNV
   -> IO Result)
-> FunPtr
     (Ptr Device_T
      -> Ptr (SomeStruct OpticalFlowSessionCreateInfoNV)
      -> Ptr AllocationCallbacks
      -> Ptr OpticalFlowSessionNV
      -> IO Result)
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr Device_T
   -> Ptr (SomeStruct OpticalFlowSessionCreateInfoNV)
   -> Ptr AllocationCallbacks
   -> Ptr OpticalFlowSessionNV
   -> IO Result)
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
    IOException -> IO ()
forall e a. (HasCallStack, Exception e) => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"The function pointer for vkCreateOpticalFlowSessionNV is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkCreateOpticalFlowSessionNV' :: Ptr Device_T
-> Ptr (SomeStruct OpticalFlowSessionCreateInfoNV)
-> Ptr AllocationCallbacks
-> Ptr OpticalFlowSessionNV
-> IO Result
vkCreateOpticalFlowSessionNV' = FunPtr
  (Ptr Device_T
   -> Ptr (SomeStruct OpticalFlowSessionCreateInfoNV)
   -> Ptr AllocationCallbacks
   -> Ptr OpticalFlowSessionNV
   -> IO Result)
-> Ptr Device_T
-> Ptr (SomeStruct OpticalFlowSessionCreateInfoNV)
-> Ptr AllocationCallbacks
-> Ptr OpticalFlowSessionNV
-> IO Result
mkVkCreateOpticalFlowSessionNV FunPtr
  (Ptr Device_T
   -> Ptr (SomeStruct OpticalFlowSessionCreateInfoNV)
   -> Ptr AllocationCallbacks
   -> Ptr OpticalFlowSessionNV
   -> IO Result)
vkCreateOpticalFlowSessionNVPtr
  pCreateInfo <- ((Ptr (OpticalFlowSessionCreateInfoNV a)
  -> IO OpticalFlowSessionNV)
 -> IO OpticalFlowSessionNV)
-> ContT
     OpticalFlowSessionNV IO (Ptr (OpticalFlowSessionCreateInfoNV a))
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr (OpticalFlowSessionCreateInfoNV a)
   -> IO OpticalFlowSessionNV)
  -> IO OpticalFlowSessionNV)
 -> ContT
      OpticalFlowSessionNV IO (Ptr (OpticalFlowSessionCreateInfoNV a)))
-> ((Ptr (OpticalFlowSessionCreateInfoNV a)
     -> IO OpticalFlowSessionNV)
    -> IO OpticalFlowSessionNV)
-> ContT
     OpticalFlowSessionNV IO (Ptr (OpticalFlowSessionCreateInfoNV a))
forall a b. (a -> b) -> a -> b
$ OpticalFlowSessionCreateInfoNV a
-> (Ptr (OpticalFlowSessionCreateInfoNV a)
    -> IO OpticalFlowSessionNV)
-> IO OpticalFlowSessionNV
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
forall b.
OpticalFlowSessionCreateInfoNV a
-> (Ptr (OpticalFlowSessionCreateInfoNV a) -> IO b) -> IO b
withCStruct (OpticalFlowSessionCreateInfoNV a
createInfo)
  pAllocator <- case (allocator) of
    "allocator" ::: Maybe AllocationCallbacks
Nothing -> Ptr AllocationCallbacks
-> ContT OpticalFlowSessionNV IO (Ptr AllocationCallbacks)
forall a. a -> ContT OpticalFlowSessionNV IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Ptr AllocationCallbacks
forall a. Ptr a
nullPtr
    Just AllocationCallbacks
j -> ((Ptr AllocationCallbacks -> IO OpticalFlowSessionNV)
 -> IO OpticalFlowSessionNV)
-> ContT OpticalFlowSessionNV IO (Ptr AllocationCallbacks)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr AllocationCallbacks -> IO OpticalFlowSessionNV)
  -> IO OpticalFlowSessionNV)
 -> ContT OpticalFlowSessionNV IO (Ptr AllocationCallbacks))
-> ((Ptr AllocationCallbacks -> IO OpticalFlowSessionNV)
    -> IO OpticalFlowSessionNV)
-> ContT OpticalFlowSessionNV IO (Ptr AllocationCallbacks)
forall a b. (a -> b) -> a -> b
$ AllocationCallbacks
-> (Ptr AllocationCallbacks -> IO OpticalFlowSessionNV)
-> IO OpticalFlowSessionNV
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
forall b.
AllocationCallbacks -> (Ptr AllocationCallbacks -> IO b) -> IO b
withCStruct (AllocationCallbacks
j)
  pPSession <- ContT $ bracket (callocBytes @OpticalFlowSessionNV 8) free
  r <- lift $ traceAroundEvent "vkCreateOpticalFlowSessionNV" (vkCreateOpticalFlowSessionNV'
                                                                 (deviceHandle (device))
                                                                 (forgetExtensions pCreateInfo)
                                                                 pAllocator
                                                                 (pPSession))
  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
  pSession <- lift $ peek @OpticalFlowSessionNV pPSession
  pure $ (pSession)

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


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

-- | vkDestroyOpticalFlowSessionNV - Destroy optical flow session object
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkDestroyOpticalFlowSessionNV-device-parameter# @device@
--     /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
--
-- -   #VUID-vkDestroyOpticalFlowSessionNV-session-parameter# @session@
--     /must/ be a valid 'Vulkan.Extensions.Handles.OpticalFlowSessionNV'
--     handle
--
-- -   #VUID-vkDestroyOpticalFlowSessionNV-pAllocator-parameter# If
--     @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid pointer
--     to a valid 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks'
--     structure
--
-- -   #VUID-vkDestroyOpticalFlowSessionNV-session-parent# @session@ /must/
--     have been created, allocated, or retrieved from @device@
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_optical_flow VK_NV_optical_flow>,
-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
-- 'Vulkan.Core10.Handles.Device',
-- 'Vulkan.Extensions.Handles.OpticalFlowSessionNV'
destroyOpticalFlowSessionNV :: forall io
                             . (MonadIO io)
                            => -- | @device@ is the device that was used for the creation of the optical
                               -- flow session.
                               Device
                            -> -- | @session@ is the optical flow session to be destroyed.
                               OpticalFlowSessionNV
                            -> -- | @pAllocator@ controls host memory allocation as described in the
                               -- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#memory-allocation Memory Allocation>
                               -- chapter.
                               ("allocator" ::: Maybe AllocationCallbacks)
                            -> io ()
destroyOpticalFlowSessionNV :: forall (io :: * -> *).
MonadIO io =>
Device
-> OpticalFlowSessionNV
-> ("allocator" ::: Maybe AllocationCallbacks)
-> io ()
destroyOpticalFlowSessionNV Device
device OpticalFlowSessionNV
session "allocator" ::: Maybe AllocationCallbacks
allocator = IO () -> io ()
forall a. IO a -> io a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> io ())
-> (ContT () IO () -> IO ()) -> ContT () IO () -> io ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> io ()) -> ContT () IO () -> io ()
forall a b. (a -> b) -> a -> b
$ do
  let vkDestroyOpticalFlowSessionNVPtr :: FunPtr
  (Ptr Device_T
   -> OpticalFlowSessionNV -> Ptr AllocationCallbacks -> IO ())
vkDestroyOpticalFlowSessionNVPtr = DeviceCmds
-> FunPtr
     (Ptr Device_T
      -> OpticalFlowSessionNV -> Ptr AllocationCallbacks -> IO ())
pVkDestroyOpticalFlowSessionNV (case Device
device of Device{DeviceCmds
deviceCmds :: Device -> DeviceCmds
deviceCmds :: DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO () -> ContT () IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT () m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr Device_T
   -> OpticalFlowSessionNV -> Ptr AllocationCallbacks -> IO ())
vkDestroyOpticalFlowSessionNVPtr FunPtr
  (Ptr Device_T
   -> OpticalFlowSessionNV -> Ptr AllocationCallbacks -> IO ())
-> FunPtr
     (Ptr Device_T
      -> OpticalFlowSessionNV -> Ptr AllocationCallbacks -> IO ())
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr Device_T
   -> OpticalFlowSessionNV -> Ptr AllocationCallbacks -> IO ())
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
    IOException -> IO ()
forall e a. (HasCallStack, Exception e) => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"The function pointer for vkDestroyOpticalFlowSessionNV is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkDestroyOpticalFlowSessionNV' :: Ptr Device_T
-> OpticalFlowSessionNV -> Ptr AllocationCallbacks -> IO ()
vkDestroyOpticalFlowSessionNV' = FunPtr
  (Ptr Device_T
   -> OpticalFlowSessionNV -> Ptr AllocationCallbacks -> IO ())
-> Ptr Device_T
-> OpticalFlowSessionNV
-> Ptr AllocationCallbacks
-> IO ()
mkVkDestroyOpticalFlowSessionNV FunPtr
  (Ptr Device_T
   -> OpticalFlowSessionNV -> Ptr AllocationCallbacks -> IO ())
vkDestroyOpticalFlowSessionNVPtr
  pAllocator <- case ("allocator" ::: Maybe AllocationCallbacks
allocator) of
    "allocator" ::: Maybe AllocationCallbacks
Nothing -> Ptr AllocationCallbacks -> ContT () IO (Ptr AllocationCallbacks)
forall a. a -> ContT () IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Ptr AllocationCallbacks
forall a. Ptr a
nullPtr
    Just AllocationCallbacks
j -> ((Ptr AllocationCallbacks -> IO ()) -> IO ())
-> ContT () IO (Ptr AllocationCallbacks)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr AllocationCallbacks -> IO ()) -> IO ())
 -> ContT () IO (Ptr AllocationCallbacks))
-> ((Ptr AllocationCallbacks -> IO ()) -> IO ())
-> ContT () IO (Ptr AllocationCallbacks)
forall a b. (a -> b) -> a -> b
$ AllocationCallbacks -> (Ptr AllocationCallbacks -> IO ()) -> IO ()
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
forall b.
AllocationCallbacks -> (Ptr AllocationCallbacks -> IO b) -> IO b
withCStruct (AllocationCallbacks
j)
  lift $ traceAroundEvent "vkDestroyOpticalFlowSessionNV" (vkDestroyOpticalFlowSessionNV'
                                                             (deviceHandle (device))
                                                             (session)
                                                             pAllocator)
  pure $ ()


foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkBindOpticalFlowSessionImageNV
  :: FunPtr (Ptr Device_T -> OpticalFlowSessionNV -> OpticalFlowSessionBindingPointNV -> ImageView -> ImageLayout -> IO Result) -> Ptr Device_T -> OpticalFlowSessionNV -> OpticalFlowSessionBindingPointNV -> ImageView -> ImageLayout -> IO Result

-- | vkBindOpticalFlowSessionImageNV - Bind image to an optical flow session
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkBindOpticalFlowSessionImageNV-device-parameter# @device@
--     /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
--
-- -   #VUID-vkBindOpticalFlowSessionImageNV-session-parameter# @session@
--     /must/ be a valid 'Vulkan.Extensions.Handles.OpticalFlowSessionNV'
--     handle
--
-- -   #VUID-vkBindOpticalFlowSessionImageNV-bindingPoint-parameter#
--     @bindingPoint@ /must/ be a valid 'OpticalFlowSessionBindingPointNV'
--     value
--
-- -   #VUID-vkBindOpticalFlowSessionImageNV-view-parameter# If @view@ is
--     not 'Vulkan.Core10.APIConstants.NULL_HANDLE', @view@ /must/ be a
--     valid 'Vulkan.Core10.Handles.ImageView' handle
--
-- -   #VUID-vkBindOpticalFlowSessionImageNV-layout-parameter# @layout@
--     /must/ be a valid 'Vulkan.Core10.Enums.ImageLayout.ImageLayout'
--     value
--
-- -   #VUID-vkBindOpticalFlowSessionImageNV-session-parent# @session@
--     /must/ have been created, allocated, or retrieved from @device@
--
-- -   #VUID-vkBindOpticalFlowSessionImageNV-view-parent# If @view@ is a
--     valid handle, it /must/ have been created, allocated, or retrieved
--     from @device@
--
-- == Return Codes
--
-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
--
--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
--
-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_INITIALIZATION_FAILED'
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_UNKNOWN'
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_VALIDATION_FAILED'
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_optical_flow VK_NV_optical_flow>,
-- 'Vulkan.Core10.Handles.Device',
-- 'Vulkan.Core10.Enums.ImageLayout.ImageLayout',
-- 'Vulkan.Core10.Handles.ImageView', 'OpticalFlowSessionBindingPointNV',
-- 'Vulkan.Extensions.Handles.OpticalFlowSessionNV'
bindOpticalFlowSessionImageNV :: forall io
                               . (MonadIO io)
                              => -- | @device@ is the device which owns the optical flow session object
                                 -- @session@.
                                 Device
                              -> -- | @session@ is the optical flow session object to which the image view is
                                 -- to be bound.
                                 OpticalFlowSessionNV
                              -> -- | @bindingPoint@ specifies the binding point
                                 -- 'OpticalFlowSessionBindingPointNV' to which the image view is bound.
                                 OpticalFlowSessionBindingPointNV
                              -> -- | @view@ is a 'Vulkan.Core10.Handles.ImageView' to be bound.
                                 ImageView
                              -> -- | @layout@ /must/ specify the layout that the image subresources
                                 -- accessible from @view@ will be in at the time the optical flow vectors
                                 -- are calculated with 'cmdOpticalFlowExecuteNV' on a
                                 -- 'Vulkan.Core10.Handles.Device'.
                                 ImageLayout
                              -> io ()
bindOpticalFlowSessionImageNV :: forall (io :: * -> *).
MonadIO io =>
Device
-> OpticalFlowSessionNV
-> OpticalFlowSessionBindingPointNV
-> ImageView
-> ImageLayout
-> io ()
bindOpticalFlowSessionImageNV Device
device
                                OpticalFlowSessionNV
session
                                OpticalFlowSessionBindingPointNV
bindingPoint
                                ImageView
view
                                ImageLayout
layout = IO () -> io ()
forall a. IO a -> io a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> io ()) -> IO () -> io ()
forall a b. (a -> b) -> a -> b
$ do
  let vkBindOpticalFlowSessionImageNVPtr :: FunPtr
  (Ptr Device_T
   -> OpticalFlowSessionNV
   -> OpticalFlowSessionBindingPointNV
   -> ImageView
   -> ImageLayout
   -> IO Result)
vkBindOpticalFlowSessionImageNVPtr = DeviceCmds
-> FunPtr
     (Ptr Device_T
      -> OpticalFlowSessionNV
      -> OpticalFlowSessionBindingPointNV
      -> ImageView
      -> ImageLayout
      -> IO Result)
pVkBindOpticalFlowSessionImageNV (case Device
device of Device{DeviceCmds
deviceCmds :: Device -> DeviceCmds
deviceCmds :: DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr Device_T
   -> OpticalFlowSessionNV
   -> OpticalFlowSessionBindingPointNV
   -> ImageView
   -> ImageLayout
   -> IO Result)
vkBindOpticalFlowSessionImageNVPtr FunPtr
  (Ptr Device_T
   -> OpticalFlowSessionNV
   -> OpticalFlowSessionBindingPointNV
   -> ImageView
   -> ImageLayout
   -> IO Result)
-> FunPtr
     (Ptr Device_T
      -> OpticalFlowSessionNV
      -> OpticalFlowSessionBindingPointNV
      -> ImageView
      -> ImageLayout
      -> IO Result)
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr Device_T
   -> OpticalFlowSessionNV
   -> OpticalFlowSessionBindingPointNV
   -> ImageView
   -> ImageLayout
   -> IO Result)
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
    IOException -> IO ()
forall e a. (HasCallStack, Exception e) => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"The function pointer for vkBindOpticalFlowSessionImageNV is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkBindOpticalFlowSessionImageNV' :: Ptr Device_T
-> OpticalFlowSessionNV
-> OpticalFlowSessionBindingPointNV
-> ImageView
-> ImageLayout
-> IO Result
vkBindOpticalFlowSessionImageNV' = FunPtr
  (Ptr Device_T
   -> OpticalFlowSessionNV
   -> OpticalFlowSessionBindingPointNV
   -> ImageView
   -> ImageLayout
   -> IO Result)
-> Ptr Device_T
-> OpticalFlowSessionNV
-> OpticalFlowSessionBindingPointNV
-> ImageView
-> ImageLayout
-> IO Result
mkVkBindOpticalFlowSessionImageNV FunPtr
  (Ptr Device_T
   -> OpticalFlowSessionNV
   -> OpticalFlowSessionBindingPointNV
   -> ImageView
   -> ImageLayout
   -> IO Result)
vkBindOpticalFlowSessionImageNVPtr
  r <- String -> IO Result -> IO Result
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkBindOpticalFlowSessionImageNV" (Ptr Device_T
-> OpticalFlowSessionNV
-> OpticalFlowSessionBindingPointNV
-> ImageView
-> ImageLayout
-> IO Result
vkBindOpticalFlowSessionImageNV'
                                                             (Device -> Ptr Device_T
deviceHandle (Device
device))
                                                             (OpticalFlowSessionNV
session)
                                                             (OpticalFlowSessionBindingPointNV
bindingPoint)
                                                             (ImageView
view)
                                                             (ImageLayout
layout))
  when (r < SUCCESS) (throwIO (VulkanException r))


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

-- | vkCmdOpticalFlowExecuteNV - Calculate optical flow vectors
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkCmdOpticalFlowExecuteNV-commandBuffer-parameter#
--     @commandBuffer@ /must/ be a valid
--     'Vulkan.Core10.Handles.CommandBuffer' handle
--
-- -   #VUID-vkCmdOpticalFlowExecuteNV-session-parameter# @session@ /must/
--     be a valid 'Vulkan.Extensions.Handles.OpticalFlowSessionNV' handle
--
-- -   #VUID-vkCmdOpticalFlowExecuteNV-pExecuteInfo-parameter#
--     @pExecuteInfo@ /must/ be a valid pointer to a valid
--     'OpticalFlowExecuteInfoNV' structure
--
-- -   #VUID-vkCmdOpticalFlowExecuteNV-commandBuffer-recording#
--     @commandBuffer@ /must/ be in the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
--
-- -   #VUID-vkCmdOpticalFlowExecuteNV-commandBuffer-cmdpool# The
--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
--     allocated from /must/ support
--     'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_OPTICAL_FLOW_BIT_NV'
--     operations
--
-- -   #VUID-vkCmdOpticalFlowExecuteNV-renderpass# This command /must/ only
--     be called outside of a render pass instance
--
-- -   #VUID-vkCmdOpticalFlowExecuteNV-suspended# This command /must/ not
--     be called between suspended render pass instances
--
-- -   #VUID-vkCmdOpticalFlowExecuteNV-videocoding# This command /must/
--     only be called outside of a video coding scope
--
-- -   #VUID-vkCmdOpticalFlowExecuteNV-commonparent# Both of
--     @commandBuffer@, and @session@ /must/ have been created, allocated,
--     or retrieved from the same 'Vulkan.Core10.Handles.Device'
--
-- == Host Synchronization
--
-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
--     @commandBuffer@ was allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- \'
--
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------+
-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginVideoCodingKHR Video Coding Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-queueoperation-command-types Command Type> |
-- +============================================================================================================================+========================================================================================================================+=============================================================================================================================+=======================================================================================================================+========================================================================================================================================+
-- | Primary                                                                                                                    | Outside                                                                                                                | Outside                                                                                                                     | VK_QUEUE_OPTICAL_FLOW_BIT_NV                                                                                          | Action                                                                                                                                 |
-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                             |                                                                                                                       |                                                                                                                                        |
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------+
--
-- == Conditional Rendering
--
-- vkCmdOpticalFlowExecuteNV is not affected by
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing-conditional-rendering conditional rendering>
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_optical_flow VK_NV_optical_flow>,
-- 'Vulkan.Core10.Handles.CommandBuffer', 'OpticalFlowExecuteInfoNV',
-- 'Vulkan.Extensions.Handles.OpticalFlowSessionNV'
cmdOpticalFlowExecuteNV :: forall io
                         . (MonadIO io)
                        => -- | @commandBuffer@ is the command buffer into which the command will be
                           -- recorded.
                           CommandBuffer
                        -> -- | @session@ is the optical flow session object on which this command is
                           -- operating.
                           OpticalFlowSessionNV
                        -> -- | @pExecuteInfo@ Info is a pointer to a 'OpticalFlowExecuteInfoNV'.
                           OpticalFlowExecuteInfoNV
                        -> io ()
cmdOpticalFlowExecuteNV :: forall (io :: * -> *).
MonadIO io =>
CommandBuffer
-> OpticalFlowSessionNV -> OpticalFlowExecuteInfoNV -> io ()
cmdOpticalFlowExecuteNV CommandBuffer
commandBuffer
                          OpticalFlowSessionNV
session
                          OpticalFlowExecuteInfoNV
executeInfo = IO () -> io ()
forall a. IO a -> io a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> io ())
-> (ContT () IO () -> IO ()) -> ContT () IO () -> io ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> io ()) -> ContT () IO () -> io ()
forall a b. (a -> b) -> a -> b
$ do
  let vkCmdOpticalFlowExecuteNVPtr :: FunPtr
  (Ptr CommandBuffer_T
   -> OpticalFlowSessionNV -> Ptr OpticalFlowExecuteInfoNV -> IO ())
vkCmdOpticalFlowExecuteNVPtr = DeviceCmds
-> FunPtr
     (Ptr CommandBuffer_T
      -> OpticalFlowSessionNV -> Ptr OpticalFlowExecuteInfoNV -> IO ())
pVkCmdOpticalFlowExecuteNV (case CommandBuffer
commandBuffer of CommandBuffer{DeviceCmds
deviceCmds :: DeviceCmds
deviceCmds :: CommandBuffer -> DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO () -> ContT () IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT () m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr CommandBuffer_T
   -> OpticalFlowSessionNV -> Ptr OpticalFlowExecuteInfoNV -> IO ())
vkCmdOpticalFlowExecuteNVPtr FunPtr
  (Ptr CommandBuffer_T
   -> OpticalFlowSessionNV -> Ptr OpticalFlowExecuteInfoNV -> IO ())
-> FunPtr
     (Ptr CommandBuffer_T
      -> OpticalFlowSessionNV -> Ptr OpticalFlowExecuteInfoNV -> IO ())
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr CommandBuffer_T
   -> OpticalFlowSessionNV -> Ptr OpticalFlowExecuteInfoNV -> IO ())
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
    IOException -> IO ()
forall e a. (HasCallStack, Exception e) => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"The function pointer for vkCmdOpticalFlowExecuteNV is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkCmdOpticalFlowExecuteNV' :: Ptr CommandBuffer_T
-> OpticalFlowSessionNV -> Ptr OpticalFlowExecuteInfoNV -> IO ()
vkCmdOpticalFlowExecuteNV' = FunPtr
  (Ptr CommandBuffer_T
   -> OpticalFlowSessionNV -> Ptr OpticalFlowExecuteInfoNV -> IO ())
-> Ptr CommandBuffer_T
-> OpticalFlowSessionNV
-> Ptr OpticalFlowExecuteInfoNV
-> IO ()
mkVkCmdOpticalFlowExecuteNV FunPtr
  (Ptr CommandBuffer_T
   -> OpticalFlowSessionNV -> Ptr OpticalFlowExecuteInfoNV -> IO ())
vkCmdOpticalFlowExecuteNVPtr
  pExecuteInfo <- ((Ptr OpticalFlowExecuteInfoNV -> IO ()) -> IO ())
-> ContT () IO (Ptr OpticalFlowExecuteInfoNV)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr OpticalFlowExecuteInfoNV -> IO ()) -> IO ())
 -> ContT () IO (Ptr OpticalFlowExecuteInfoNV))
-> ((Ptr OpticalFlowExecuteInfoNV -> IO ()) -> IO ())
-> ContT () IO (Ptr OpticalFlowExecuteInfoNV)
forall a b. (a -> b) -> a -> b
$ OpticalFlowExecuteInfoNV
-> (Ptr OpticalFlowExecuteInfoNV -> IO ()) -> IO ()
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
forall b.
OpticalFlowExecuteInfoNV
-> (Ptr OpticalFlowExecuteInfoNV -> IO b) -> IO b
withCStruct (OpticalFlowExecuteInfoNV
executeInfo)
  lift $ traceAroundEvent "vkCmdOpticalFlowExecuteNV" (vkCmdOpticalFlowExecuteNV'
                                                         (commandBufferHandle (commandBuffer))
                                                         (session)
                                                         pExecuteInfo)
  pure $ ()


-- No documentation found for TopLevel "VK_FORMAT_R16G16_S10_5_NV"
pattern $mFORMAT_R16G16_S10_5_NV :: forall {r}. Format -> ((# #) -> r) -> ((# #) -> r) -> r
$bFORMAT_R16G16_S10_5_NV :: Format
FORMAT_R16G16_S10_5_NV = FORMAT_R16G16_SFIXED5_NV


-- | VkPhysicalDeviceOpticalFlowFeaturesNV - Structure describing the optical
-- flow features supported by the implementation
--
-- = Members
--
-- This structure describes the following feature:
--
-- = Description
--
-- If the 'PhysicalDeviceOpticalFlowFeaturesNV' 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
-- 'PhysicalDeviceOpticalFlowFeaturesNV', it /must/ add an instance of the
-- structure, with the desired feature members set to
-- 'Vulkan.Core10.FundamentalTypes.TRUE', to the @pNext@ chain of
-- 'Vulkan.Core10.Device.DeviceCreateInfo' when creating the
-- 'Vulkan.Core10.Handles.Device'.
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_optical_flow VK_NV_optical_flow>,
-- 'Vulkan.Core10.FundamentalTypes.Bool32',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data PhysicalDeviceOpticalFlowFeaturesNV = PhysicalDeviceOpticalFlowFeaturesNV
  { -- | #features-opticalFlow# @opticalFlow@ indicates whether the
    -- implementation supports optical flow.
    PhysicalDeviceOpticalFlowFeaturesNV -> Bool
opticalFlow :: Bool }
  deriving (Typeable, PhysicalDeviceOpticalFlowFeaturesNV
-> PhysicalDeviceOpticalFlowFeaturesNV -> Bool
(PhysicalDeviceOpticalFlowFeaturesNV
 -> PhysicalDeviceOpticalFlowFeaturesNV -> Bool)
-> (PhysicalDeviceOpticalFlowFeaturesNV
    -> PhysicalDeviceOpticalFlowFeaturesNV -> Bool)
-> Eq PhysicalDeviceOpticalFlowFeaturesNV
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: PhysicalDeviceOpticalFlowFeaturesNV
-> PhysicalDeviceOpticalFlowFeaturesNV -> Bool
== :: PhysicalDeviceOpticalFlowFeaturesNV
-> PhysicalDeviceOpticalFlowFeaturesNV -> Bool
$c/= :: PhysicalDeviceOpticalFlowFeaturesNV
-> PhysicalDeviceOpticalFlowFeaturesNV -> Bool
/= :: PhysicalDeviceOpticalFlowFeaturesNV
-> PhysicalDeviceOpticalFlowFeaturesNV -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (PhysicalDeviceOpticalFlowFeaturesNV)
#endif
deriving instance Show PhysicalDeviceOpticalFlowFeaturesNV

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

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

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

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


-- | VkPhysicalDeviceOpticalFlowPropertiesNV - Structure describing
-- properties supported by VK_NV_optical_flow
--
-- = Description
--
-- If the 'PhysicalDeviceOpticalFlowPropertiesNV' structure is included in
-- the @pNext@ chain of the
-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2'
-- structure passed to
-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceProperties2',
-- it is filled in with each corresponding implementation-dependent
-- property.
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_optical_flow VK_NV_optical_flow>,
-- 'Vulkan.Core10.FundamentalTypes.Bool32', 'OpticalFlowGridSizeFlagsNV',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data PhysicalDeviceOpticalFlowPropertiesNV = PhysicalDeviceOpticalFlowPropertiesNV
  { -- | #limits-supportedOutputGridSizes# @supportedOutputGridSizes@ are the
    -- supported 'OpticalFlowGridSizeFlagsNV' which can be specified in
    -- 'OpticalFlowSessionCreateInfoNV'::@outputGridSize@.
    PhysicalDeviceOpticalFlowPropertiesNV -> OpticalFlowGridSizeFlagsNV
supportedOutputGridSizes :: OpticalFlowGridSizeFlagsNV
  , -- | #limits-supportedHintGridSizes# @supportedHintGridSizes@ are the
    -- supported 'OpticalFlowGridSizeFlagsNV' which can be specified in
    -- 'OpticalFlowSessionCreateInfoNV'::@hintGridSize@.
    PhysicalDeviceOpticalFlowPropertiesNV -> OpticalFlowGridSizeFlagsNV
supportedHintGridSizes :: OpticalFlowGridSizeFlagsNV
  , -- | #limits-hintSupported# @hintSupported@ is a boolean describing whether
    -- using hint flow vector map is supported in an optical flow session.
    PhysicalDeviceOpticalFlowPropertiesNV -> Bool
hintSupported :: Bool
  , -- | #limits-costSupported# @costSupported@ is a boolean describing whether
    -- cost map generation is supported in an optical flow session.
    PhysicalDeviceOpticalFlowPropertiesNV -> Bool
costSupported :: Bool
  , -- | #limits-bidirectionalFlowSupported# @bidirectionalFlowSupported@ is a
    -- boolean describing whether bi-directional flow generation is supported
    -- in an optical flow session.
    PhysicalDeviceOpticalFlowPropertiesNV -> Bool
bidirectionalFlowSupported :: Bool
  , -- | #limits-globalFlowSupported# @globalFlowSupported@ is a boolean
    -- describing whether global flow vector map generation is supported in an
    -- optical flow session.
    PhysicalDeviceOpticalFlowPropertiesNV -> Bool
globalFlowSupported :: Bool
  , -- | #limits-minWidth# @minWidth@ is the minimum width in pixels for images
    -- used in an optical flow session.
    PhysicalDeviceOpticalFlowPropertiesNV -> Word32
minWidth :: Word32
  , -- | #limits-minHeight# @minHeight@ is the minimum height in pixels for
    -- images used in an optical flow session.
    PhysicalDeviceOpticalFlowPropertiesNV -> Word32
minHeight :: Word32
  , -- | #limits-maxWidth# @maxWidth@ is the maximum width in pixels for images
    -- used in an optical flow session.
    PhysicalDeviceOpticalFlowPropertiesNV -> Word32
maxWidth :: Word32
  , -- | #limits-maxHeight# @maxHeight@ is the maximum height in pixels for
    -- images used in an optical flow session.
    PhysicalDeviceOpticalFlowPropertiesNV -> Word32
maxHeight :: Word32
  , -- | #limits-maxNumRegionsOfInterest# @maxNumRegionsOfInterest@ is the
    -- maximum number of regions of interest which can be used in an optical
    -- flow session. If this @maxNumRegionsOfInterest@ is 0, regions of
    -- interest are not supported in an optical flow session.
    PhysicalDeviceOpticalFlowPropertiesNV -> Word32
maxNumRegionsOfInterest :: Word32
  }
  deriving (Typeable, PhysicalDeviceOpticalFlowPropertiesNV
-> PhysicalDeviceOpticalFlowPropertiesNV -> Bool
(PhysicalDeviceOpticalFlowPropertiesNV
 -> PhysicalDeviceOpticalFlowPropertiesNV -> Bool)
-> (PhysicalDeviceOpticalFlowPropertiesNV
    -> PhysicalDeviceOpticalFlowPropertiesNV -> Bool)
-> Eq PhysicalDeviceOpticalFlowPropertiesNV
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: PhysicalDeviceOpticalFlowPropertiesNV
-> PhysicalDeviceOpticalFlowPropertiesNV -> Bool
== :: PhysicalDeviceOpticalFlowPropertiesNV
-> PhysicalDeviceOpticalFlowPropertiesNV -> Bool
$c/= :: PhysicalDeviceOpticalFlowPropertiesNV
-> PhysicalDeviceOpticalFlowPropertiesNV -> Bool
/= :: PhysicalDeviceOpticalFlowPropertiesNV
-> PhysicalDeviceOpticalFlowPropertiesNV -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (PhysicalDeviceOpticalFlowPropertiesNV)
#endif
deriving instance Show PhysicalDeviceOpticalFlowPropertiesNV

instance ToCStruct PhysicalDeviceOpticalFlowPropertiesNV where
  withCStruct :: forall b.
PhysicalDeviceOpticalFlowPropertiesNV
-> (Ptr PhysicalDeviceOpticalFlowPropertiesNV -> IO b) -> IO b
withCStruct PhysicalDeviceOpticalFlowPropertiesNV
x Ptr PhysicalDeviceOpticalFlowPropertiesNV -> IO b
f = Int -> (Ptr PhysicalDeviceOpticalFlowPropertiesNV -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
64 ((Ptr PhysicalDeviceOpticalFlowPropertiesNV -> IO b) -> IO b)
-> (Ptr PhysicalDeviceOpticalFlowPropertiesNV -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr PhysicalDeviceOpticalFlowPropertiesNV
p -> Ptr PhysicalDeviceOpticalFlowPropertiesNV
-> PhysicalDeviceOpticalFlowPropertiesNV -> IO b -> IO b
forall b.
Ptr PhysicalDeviceOpticalFlowPropertiesNV
-> PhysicalDeviceOpticalFlowPropertiesNV -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr PhysicalDeviceOpticalFlowPropertiesNV
p PhysicalDeviceOpticalFlowPropertiesNV
x (Ptr PhysicalDeviceOpticalFlowPropertiesNV -> IO b
f Ptr PhysicalDeviceOpticalFlowPropertiesNV
p)
  pokeCStruct :: forall b.
Ptr PhysicalDeviceOpticalFlowPropertiesNV
-> PhysicalDeviceOpticalFlowPropertiesNV -> IO b -> IO b
pokeCStruct Ptr PhysicalDeviceOpticalFlowPropertiesNV
p PhysicalDeviceOpticalFlowPropertiesNV{Bool
Word32
OpticalFlowGridSizeFlagsNV
supportedOutputGridSizes :: PhysicalDeviceOpticalFlowPropertiesNV -> OpticalFlowGridSizeFlagsNV
supportedHintGridSizes :: PhysicalDeviceOpticalFlowPropertiesNV -> OpticalFlowGridSizeFlagsNV
hintSupported :: PhysicalDeviceOpticalFlowPropertiesNV -> Bool
costSupported :: PhysicalDeviceOpticalFlowPropertiesNV -> Bool
bidirectionalFlowSupported :: PhysicalDeviceOpticalFlowPropertiesNV -> Bool
globalFlowSupported :: PhysicalDeviceOpticalFlowPropertiesNV -> Bool
minWidth :: PhysicalDeviceOpticalFlowPropertiesNV -> Word32
minHeight :: PhysicalDeviceOpticalFlowPropertiesNV -> Word32
maxWidth :: PhysicalDeviceOpticalFlowPropertiesNV -> Word32
maxHeight :: PhysicalDeviceOpticalFlowPropertiesNV -> Word32
maxNumRegionsOfInterest :: PhysicalDeviceOpticalFlowPropertiesNV -> Word32
supportedOutputGridSizes :: OpticalFlowGridSizeFlagsNV
supportedHintGridSizes :: OpticalFlowGridSizeFlagsNV
hintSupported :: Bool
costSupported :: Bool
bidirectionalFlowSupported :: Bool
globalFlowSupported :: Bool
minWidth :: Word32
minHeight :: Word32
maxWidth :: Word32
maxHeight :: Word32
maxNumRegionsOfInterest :: Word32
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceOpticalFlowPropertiesNV
p Ptr PhysicalDeviceOpticalFlowPropertiesNV
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PHYSICAL_DEVICE_OPTICAL_FLOW_PROPERTIES_NV)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceOpticalFlowPropertiesNV
p Ptr PhysicalDeviceOpticalFlowPropertiesNV -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr OpticalFlowGridSizeFlagsNV
-> OpticalFlowGridSizeFlagsNV -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceOpticalFlowPropertiesNV
p Ptr PhysicalDeviceOpticalFlowPropertiesNV
-> Int -> Ptr OpticalFlowGridSizeFlagsNV
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr OpticalFlowGridSizeFlagsNV)) (OpticalFlowGridSizeFlagsNV
supportedOutputGridSizes)
    Ptr OpticalFlowGridSizeFlagsNV
-> OpticalFlowGridSizeFlagsNV -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceOpticalFlowPropertiesNV
p Ptr PhysicalDeviceOpticalFlowPropertiesNV
-> Int -> Ptr OpticalFlowGridSizeFlagsNV
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr OpticalFlowGridSizeFlagsNV)) (OpticalFlowGridSizeFlagsNV
supportedHintGridSizes)
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceOpticalFlowPropertiesNV
p Ptr PhysicalDeviceOpticalFlowPropertiesNV -> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
hintSupported))
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceOpticalFlowPropertiesNV
p Ptr PhysicalDeviceOpticalFlowPropertiesNV -> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
28 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
costSupported))
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceOpticalFlowPropertiesNV
p Ptr PhysicalDeviceOpticalFlowPropertiesNV -> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
bidirectionalFlowSupported))
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceOpticalFlowPropertiesNV
p Ptr PhysicalDeviceOpticalFlowPropertiesNV -> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
36 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
globalFlowSupported))
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceOpticalFlowPropertiesNV
p Ptr PhysicalDeviceOpticalFlowPropertiesNV -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr Word32)) (Word32
minWidth)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceOpticalFlowPropertiesNV
p Ptr PhysicalDeviceOpticalFlowPropertiesNV -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
44 :: Ptr Word32)) (Word32
minHeight)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceOpticalFlowPropertiesNV
p Ptr PhysicalDeviceOpticalFlowPropertiesNV -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr Word32)) (Word32
maxWidth)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceOpticalFlowPropertiesNV
p Ptr PhysicalDeviceOpticalFlowPropertiesNV -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
52 :: Ptr Word32)) (Word32
maxHeight)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceOpticalFlowPropertiesNV
p Ptr PhysicalDeviceOpticalFlowPropertiesNV -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
56 :: Ptr Word32)) (Word32
maxNumRegionsOfInterest)
    IO b
f
  cStructSize :: Int
cStructSize = Int
64
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b. Ptr PhysicalDeviceOpticalFlowPropertiesNV -> IO b -> IO b
pokeZeroCStruct Ptr PhysicalDeviceOpticalFlowPropertiesNV
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceOpticalFlowPropertiesNV
p Ptr PhysicalDeviceOpticalFlowPropertiesNV
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PHYSICAL_DEVICE_OPTICAL_FLOW_PROPERTIES_NV)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceOpticalFlowPropertiesNV
p Ptr PhysicalDeviceOpticalFlowPropertiesNV -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr OpticalFlowGridSizeFlagsNV
-> OpticalFlowGridSizeFlagsNV -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceOpticalFlowPropertiesNV
p Ptr PhysicalDeviceOpticalFlowPropertiesNV
-> Int -> Ptr OpticalFlowGridSizeFlagsNV
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr OpticalFlowGridSizeFlagsNV)) (OpticalFlowGridSizeFlagsNV
forall a. Zero a => a
zero)
    Ptr OpticalFlowGridSizeFlagsNV
-> OpticalFlowGridSizeFlagsNV -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceOpticalFlowPropertiesNV
p Ptr PhysicalDeviceOpticalFlowPropertiesNV
-> Int -> Ptr OpticalFlowGridSizeFlagsNV
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr OpticalFlowGridSizeFlagsNV)) (OpticalFlowGridSizeFlagsNV
forall a. Zero a => a
zero)
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceOpticalFlowPropertiesNV
p Ptr PhysicalDeviceOpticalFlowPropertiesNV -> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
forall a. Zero a => a
zero))
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceOpticalFlowPropertiesNV
p Ptr PhysicalDeviceOpticalFlowPropertiesNV -> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
28 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
forall a. Zero a => a
zero))
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceOpticalFlowPropertiesNV
p Ptr PhysicalDeviceOpticalFlowPropertiesNV -> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
forall a. Zero a => a
zero))
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceOpticalFlowPropertiesNV
p Ptr PhysicalDeviceOpticalFlowPropertiesNV -> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
36 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
forall a. Zero a => a
zero))
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceOpticalFlowPropertiesNV
p Ptr PhysicalDeviceOpticalFlowPropertiesNV -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceOpticalFlowPropertiesNV
p Ptr PhysicalDeviceOpticalFlowPropertiesNV -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
44 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceOpticalFlowPropertiesNV
p Ptr PhysicalDeviceOpticalFlowPropertiesNV -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
48 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceOpticalFlowPropertiesNV
p Ptr PhysicalDeviceOpticalFlowPropertiesNV -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
52 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceOpticalFlowPropertiesNV
p Ptr PhysicalDeviceOpticalFlowPropertiesNV -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
56 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct PhysicalDeviceOpticalFlowPropertiesNV where
  peekCStruct :: Ptr PhysicalDeviceOpticalFlowPropertiesNV
-> IO PhysicalDeviceOpticalFlowPropertiesNV
peekCStruct Ptr PhysicalDeviceOpticalFlowPropertiesNV
p = do
    supportedOutputGridSizes <- forall a. Storable a => Ptr a -> IO a
peek @OpticalFlowGridSizeFlagsNV ((Ptr PhysicalDeviceOpticalFlowPropertiesNV
p Ptr PhysicalDeviceOpticalFlowPropertiesNV
-> Int -> Ptr OpticalFlowGridSizeFlagsNV
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr OpticalFlowGridSizeFlagsNV))
    supportedHintGridSizes <- peek @OpticalFlowGridSizeFlagsNV ((p `plusPtr` 20 :: Ptr OpticalFlowGridSizeFlagsNV))
    hintSupported <- peek @Bool32 ((p `plusPtr` 24 :: Ptr Bool32))
    costSupported <- peek @Bool32 ((p `plusPtr` 28 :: Ptr Bool32))
    bidirectionalFlowSupported <- peek @Bool32 ((p `plusPtr` 32 :: Ptr Bool32))
    globalFlowSupported <- peek @Bool32 ((p `plusPtr` 36 :: Ptr Bool32))
    minWidth <- peek @Word32 ((p `plusPtr` 40 :: Ptr Word32))
    minHeight <- peek @Word32 ((p `plusPtr` 44 :: Ptr Word32))
    maxWidth <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32))
    maxHeight <- peek @Word32 ((p `plusPtr` 52 :: Ptr Word32))
    maxNumRegionsOfInterest <- peek @Word32 ((p `plusPtr` 56 :: Ptr Word32))
    pure $ PhysicalDeviceOpticalFlowPropertiesNV
             supportedOutputGridSizes
             supportedHintGridSizes
             (bool32ToBool hintSupported)
             (bool32ToBool costSupported)
             (bool32ToBool bidirectionalFlowSupported)
             (bool32ToBool globalFlowSupported)
             minWidth
             minHeight
             maxWidth
             maxHeight
             maxNumRegionsOfInterest

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

instance Zero PhysicalDeviceOpticalFlowPropertiesNV where
  zero :: PhysicalDeviceOpticalFlowPropertiesNV
zero = OpticalFlowGridSizeFlagsNV
-> OpticalFlowGridSizeFlagsNV
-> Bool
-> Bool
-> Bool
-> Bool
-> Word32
-> Word32
-> Word32
-> Word32
-> Word32
-> PhysicalDeviceOpticalFlowPropertiesNV
PhysicalDeviceOpticalFlowPropertiesNV
           OpticalFlowGridSizeFlagsNV
forall a. Zero a => a
zero
           OpticalFlowGridSizeFlagsNV
forall a. Zero a => a
zero
           Bool
forall a. Zero a => a
zero
           Bool
forall a. Zero a => a
zero
           Bool
forall a. Zero a => a
zero
           Bool
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero


-- | VkOpticalFlowImageFormatInfoNV - Structure describing optical flow image
-- format info
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_optical_flow VK_NV_optical_flow>,
-- 'OpticalFlowUsageFlagsNV',
-- 'Vulkan.Core10.Enums.StructureType.StructureType',
-- 'getPhysicalDeviceOpticalFlowImageFormatsNV'
data OpticalFlowImageFormatInfoNV = OpticalFlowImageFormatInfoNV
  { -- | #opticalflow-usage# @usage@ is a bitmask of 'OpticalFlowUsageFlagBitsNV'
    -- describing the intended optical flow usage of the image.
    --
    -- #VUID-VkOpticalFlowImageFormatInfoNV-usage-parameter# @usage@ /must/ be
    -- a valid combination of 'OpticalFlowUsageFlagBitsNV' values
    --
    -- #VUID-VkOpticalFlowImageFormatInfoNV-usage-requiredbitmask# @usage@
    -- /must/ not be @0@
    OpticalFlowImageFormatInfoNV -> OpticalFlowUsageFlagsNV
usage :: OpticalFlowUsageFlagsNV }
  deriving (Typeable, OpticalFlowImageFormatInfoNV
-> OpticalFlowImageFormatInfoNV -> Bool
(OpticalFlowImageFormatInfoNV
 -> OpticalFlowImageFormatInfoNV -> Bool)
-> (OpticalFlowImageFormatInfoNV
    -> OpticalFlowImageFormatInfoNV -> Bool)
-> Eq OpticalFlowImageFormatInfoNV
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: OpticalFlowImageFormatInfoNV
-> OpticalFlowImageFormatInfoNV -> Bool
== :: OpticalFlowImageFormatInfoNV
-> OpticalFlowImageFormatInfoNV -> Bool
$c/= :: OpticalFlowImageFormatInfoNV
-> OpticalFlowImageFormatInfoNV -> Bool
/= :: OpticalFlowImageFormatInfoNV
-> OpticalFlowImageFormatInfoNV -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (OpticalFlowImageFormatInfoNV)
#endif
deriving instance Show OpticalFlowImageFormatInfoNV

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

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

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

instance Zero OpticalFlowImageFormatInfoNV where
  zero :: OpticalFlowImageFormatInfoNV
zero = OpticalFlowUsageFlagsNV -> OpticalFlowImageFormatInfoNV
OpticalFlowImageFormatInfoNV
           OpticalFlowUsageFlagsNV
forall a. Zero a => a
zero


-- | VkOpticalFlowImageFormatPropertiesNV - 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_NV_optical_flow VK_NV_optical_flow>,
-- 'Vulkan.Core10.Enums.Format.Format',
-- 'Vulkan.Core10.Enums.StructureType.StructureType',
-- 'getPhysicalDeviceOpticalFlowImageFormatsNV'
data OpticalFlowImageFormatPropertiesNV = OpticalFlowImageFormatPropertiesNV
  { -- | #opticalflow-format# @format@ is a 'Vulkan.Core10.Enums.Format.Format'
    -- that specifies the format that can be used with the specified optical
    -- flow image usages.
    OpticalFlowImageFormatPropertiesNV -> Format
format :: Format }
  deriving (Typeable, OpticalFlowImageFormatPropertiesNV
-> OpticalFlowImageFormatPropertiesNV -> Bool
(OpticalFlowImageFormatPropertiesNV
 -> OpticalFlowImageFormatPropertiesNV -> Bool)
-> (OpticalFlowImageFormatPropertiesNV
    -> OpticalFlowImageFormatPropertiesNV -> Bool)
-> Eq OpticalFlowImageFormatPropertiesNV
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: OpticalFlowImageFormatPropertiesNV
-> OpticalFlowImageFormatPropertiesNV -> Bool
== :: OpticalFlowImageFormatPropertiesNV
-> OpticalFlowImageFormatPropertiesNV -> Bool
$c/= :: OpticalFlowImageFormatPropertiesNV
-> OpticalFlowImageFormatPropertiesNV -> Bool
/= :: OpticalFlowImageFormatPropertiesNV
-> OpticalFlowImageFormatPropertiesNV -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (OpticalFlowImageFormatPropertiesNV)
#endif
deriving instance Show OpticalFlowImageFormatPropertiesNV

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

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

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

instance Zero OpticalFlowImageFormatPropertiesNV where
  zero :: OpticalFlowImageFormatPropertiesNV
zero = Format -> OpticalFlowImageFormatPropertiesNV
OpticalFlowImageFormatPropertiesNV
           Format
forall a. Zero a => a
zero


-- | VkOpticalFlowSessionCreateInfoNV - Structure specifying parameters of a
-- newly created optical flow session
--
-- == Valid Usage
--
-- -   #VUID-VkOpticalFlowSessionCreateInfoNV-width-07581# @width@ /must/
--     be greater than or equal to
--     'PhysicalDeviceOpticalFlowPropertiesNV'::@minWidth@ and less than or
--     equal to 'PhysicalDeviceOpticalFlowPropertiesNV'::@maxWidth@
--
-- -   #VUID-VkOpticalFlowSessionCreateInfoNV-height-07582# @height@ /must/
--     be greater than or equal to
--     'PhysicalDeviceOpticalFlowPropertiesNV'::@minHeight@ and less than
--     or equal to 'PhysicalDeviceOpticalFlowPropertiesNV'::@maxHeight@
--
-- -   #VUID-VkOpticalFlowSessionCreateInfoNV-imageFormat-07583#
--     @imageFormat@ /must/ be one of the formats returned by
--     'getPhysicalDeviceOpticalFlowImageFormatsNV' for
--     'OPTICAL_FLOW_USAGE_INPUT_BIT_NV'
--
-- -   #VUID-VkOpticalFlowSessionCreateInfoNV-flowVectorFormat-07584#
--     @flowVectorFormat@ /must/ be one of the formats returned by
--     'getPhysicalDeviceOpticalFlowImageFormatsNV' for
--     'OPTICAL_FLOW_USAGE_OUTPUT_BIT_NV'
--
-- -   #VUID-VkOpticalFlowSessionCreateInfoNV-costFormat-07585#
--     @costFormat@ /must/ be one of the formats returned by
--     'getPhysicalDeviceOpticalFlowImageFormatsNV' for
--     'OPTICAL_FLOW_USAGE_COST_BIT_NV' if
--     'OPTICAL_FLOW_SESSION_CREATE_ENABLE_COST_BIT_NV' is set in @flags@
--
-- -   #VUID-VkOpticalFlowSessionCreateInfoNV-outputGridSize-07586#
--     @outputGridSize@ /must/ be exactly one of the bits reported in
--     'PhysicalDeviceOpticalFlowPropertiesNV'::@supportedOutputGridSizes@
--
-- -   #VUID-VkOpticalFlowSessionCreateInfoNV-hintGridSize-07587#
--     @hintGridSize@ /must/ be exactly one of the bits reported in
--     'PhysicalDeviceOpticalFlowPropertiesNV'::@supportedHintGridSizes@ if
--     'OPTICAL_FLOW_SESSION_CREATE_ENABLE_HINT_BIT_NV' is set in @flags@
--
-- -   #VUID-VkOpticalFlowSessionCreateInfoNV-flags-07588#
--     'OPTICAL_FLOW_SESSION_CREATE_ENABLE_HINT_BIT_NV' /must/ not be set
--     in @flags@ if
--     'PhysicalDeviceOpticalFlowPropertiesNV'::@hintSupported@ is
--     'Vulkan.Core10.FundamentalTypes.FALSE'
--
-- -   #VUID-VkOpticalFlowSessionCreateInfoNV-flags-07589#
--     'OPTICAL_FLOW_SESSION_CREATE_ENABLE_COST_BIT_NV' /must/ not be set
--     in @flags@ if
--     'PhysicalDeviceOpticalFlowPropertiesNV'::@costSupported@ is
--     'Vulkan.Core10.FundamentalTypes.FALSE'
--
-- -   #VUID-VkOpticalFlowSessionCreateInfoNV-flags-07590#
--     'OPTICAL_FLOW_SESSION_CREATE_ENABLE_GLOBAL_FLOW_BIT_NV' /must/ not
--     be set in @flags@ if
--     'PhysicalDeviceOpticalFlowPropertiesNV'::@globalFlowSupported@ is
--     'Vulkan.Core10.FundamentalTypes.FALSE'
--
-- -   #VUID-VkOpticalFlowSessionCreateInfoNV-flags-07591#
--     'OPTICAL_FLOW_SESSION_CREATE_ALLOW_REGIONS_BIT_NV' /must/ not be set
--     in @flags@ if
--     'PhysicalDeviceOpticalFlowPropertiesNV'::@maxNumRegionsOfInterest@
--     is 0
--
-- -   #VUID-VkOpticalFlowSessionCreateInfoNV-flags-07592#
--     'OPTICAL_FLOW_SESSION_CREATE_BOTH_DIRECTIONS_BIT_NV' /must/ not be
--     set in @flags@ if
--     'PhysicalDeviceOpticalFlowPropertiesNV'::@bidirectionalFlowSupported@
--     is 'Vulkan.Core10.FundamentalTypes.FALSE'
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkOpticalFlowSessionCreateInfoNV-sType-sType# @sType@ /must/
--     be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_OPTICAL_FLOW_SESSION_CREATE_INFO_NV'
--
-- -   #VUID-VkOpticalFlowSessionCreateInfoNV-pNext-pNext# @pNext@ /must/
--     be @NULL@ or a pointer to a valid instance of
--     'OpticalFlowSessionCreatePrivateDataInfoNV'
--
-- -   #VUID-VkOpticalFlowSessionCreateInfoNV-sType-unique# The @sType@
--     value of each structure in the @pNext@ chain /must/ be unique
--
-- -   #VUID-VkOpticalFlowSessionCreateInfoNV-imageFormat-parameter#
--     @imageFormat@ /must/ be a valid 'Vulkan.Core10.Enums.Format.Format'
--     value
--
-- -   #VUID-VkOpticalFlowSessionCreateInfoNV-flowVectorFormat-parameter#
--     @flowVectorFormat@ /must/ be a valid
--     'Vulkan.Core10.Enums.Format.Format' value
--
-- -   #VUID-VkOpticalFlowSessionCreateInfoNV-costFormat-parameter# If
--     @costFormat@ is not @0@, @costFormat@ /must/ be a valid
--     'Vulkan.Core10.Enums.Format.Format' value
--
-- -   #VUID-VkOpticalFlowSessionCreateInfoNV-outputGridSize-parameter#
--     @outputGridSize@ /must/ be a valid combination of
--     'OpticalFlowGridSizeFlagBitsNV' values
--
-- -   #VUID-VkOpticalFlowSessionCreateInfoNV-outputGridSize-requiredbitmask#
--     @outputGridSize@ /must/ not be @0@
--
-- -   #VUID-VkOpticalFlowSessionCreateInfoNV-hintGridSize-parameter#
--     @hintGridSize@ /must/ be a valid combination of
--     'OpticalFlowGridSizeFlagBitsNV' values
--
-- -   #VUID-VkOpticalFlowSessionCreateInfoNV-performanceLevel-parameter#
--     If @performanceLevel@ is not @0@, @performanceLevel@ /must/ be a
--     valid 'OpticalFlowPerformanceLevelNV' value
--
-- -   #VUID-VkOpticalFlowSessionCreateInfoNV-flags-parameter# @flags@
--     /must/ be a valid combination of
--     'OpticalFlowSessionCreateFlagBitsNV' values
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_optical_flow VK_NV_optical_flow>,
-- 'Vulkan.Core10.Enums.Format.Format', 'OpticalFlowGridSizeFlagsNV',
-- 'OpticalFlowPerformanceLevelNV', 'OpticalFlowSessionCreateFlagsNV',
-- 'Vulkan.Core10.Enums.StructureType.StructureType',
-- 'createOpticalFlowSessionNV'
data OpticalFlowSessionCreateInfoNV (es :: [Type]) = OpticalFlowSessionCreateInfoNV
  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.
    forall (es :: [*]). OpticalFlowSessionCreateInfoNV es -> Chain es
next :: Chain es
  , -- | @width@ is the width in pixels of the input or reference frame to be
    -- bound to this optical flow session.
    forall (es :: [*]). OpticalFlowSessionCreateInfoNV es -> Word32
width :: Word32
  , -- | @height@ is the height in pixels of the input or reference frame to be
    -- bound to this optical flow session.
    forall (es :: [*]). OpticalFlowSessionCreateInfoNV es -> Word32
height :: Word32
  , -- | @imageFormat@ is the 'Vulkan.Core10.Enums.Format.Format' of the input
    -- and reference frame to be bound to this optical flow session.
    forall (es :: [*]). OpticalFlowSessionCreateInfoNV es -> Format
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
    -- session.
    forall (es :: [*]). OpticalFlowSessionCreateInfoNV es -> Format
flowVectorFormat :: Format
  , -- | @costFormat@ is the 'Vulkan.Core10.Enums.Format.Format' of the cost maps
    -- to be bound to this optical flow session.
    forall (es :: [*]). OpticalFlowSessionCreateInfoNV es -> Format
costFormat :: Format
  , -- | @outputGridSize@ is exactly one bit of 'OpticalFlowGridSizeFlagsNV'
    -- specifying the grid size of the output flow and cost maps to be bound to
    -- this optical flow session. The size of the output flow and cost maps is
    -- determined by 'OpticalFlowSessionCreateInfoNV'::@width@ and
    -- 'OpticalFlowSessionCreateInfoNV'::@height@ divided by
    -- 'OpticalFlowSessionCreateInfoNV'::@outputGridSize@.
    forall (es :: [*]).
OpticalFlowSessionCreateInfoNV es -> OpticalFlowGridSizeFlagsNV
outputGridSize :: OpticalFlowGridSizeFlagsNV
  , -- | @hintGridSize@ is one exactly bit of 'OpticalFlowGridSizeFlagsNV'
    -- specifying the grid size of the hint flow vector maps to be bound to
    -- this optical flow session. The size of the hint maps is determined by
    -- 'OpticalFlowSessionCreateInfoNV'::@width@ and
    -- 'OpticalFlowSessionCreateInfoNV'::@height@ divided by
    -- 'OpticalFlowSessionCreateInfoNV'::@hintGridSize@.
    forall (es :: [*]).
OpticalFlowSessionCreateInfoNV es -> OpticalFlowGridSizeFlagsNV
hintGridSize :: OpticalFlowGridSizeFlagsNV
  , -- | @performanceLevel@ is the 'OpticalFlowPerformanceLevelNV' used for this
    -- optical flow session.
    forall (es :: [*]).
OpticalFlowSessionCreateInfoNV es -> OpticalFlowPerformanceLevelNV
performanceLevel :: OpticalFlowPerformanceLevelNV
  , -- | @flags@ are the 'OpticalFlowSessionCreateFlagsNV' used for this optical
    -- flow session.
    forall (es :: [*]).
OpticalFlowSessionCreateInfoNV es
-> OpticalFlowSessionCreateFlagsNV
flags :: OpticalFlowSessionCreateFlagsNV
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (OpticalFlowSessionCreateInfoNV (es :: [Type]))
#endif
deriving instance Show (Chain es) => Show (OpticalFlowSessionCreateInfoNV es)

instance Extensible OpticalFlowSessionCreateInfoNV where
  extensibleTypeName :: String
extensibleTypeName = String
"OpticalFlowSessionCreateInfoNV"
  setNext :: forall (ds :: [*]) (es :: [*]).
OpticalFlowSessionCreateInfoNV ds
-> Chain es -> OpticalFlowSessionCreateInfoNV es
setNext OpticalFlowSessionCreateInfoNV{Word32
Format
Chain ds
OpticalFlowSessionCreateFlagsNV
OpticalFlowPerformanceLevelNV
OpticalFlowGridSizeFlagsNV
next :: forall (es :: [*]). OpticalFlowSessionCreateInfoNV es -> Chain es
width :: forall (es :: [*]). OpticalFlowSessionCreateInfoNV es -> Word32
height :: forall (es :: [*]). OpticalFlowSessionCreateInfoNV es -> Word32
imageFormat :: forall (es :: [*]). OpticalFlowSessionCreateInfoNV es -> Format
flowVectorFormat :: forall (es :: [*]). OpticalFlowSessionCreateInfoNV es -> Format
costFormat :: forall (es :: [*]). OpticalFlowSessionCreateInfoNV es -> Format
outputGridSize :: forall (es :: [*]).
OpticalFlowSessionCreateInfoNV es -> OpticalFlowGridSizeFlagsNV
hintGridSize :: forall (es :: [*]).
OpticalFlowSessionCreateInfoNV es -> OpticalFlowGridSizeFlagsNV
performanceLevel :: forall (es :: [*]).
OpticalFlowSessionCreateInfoNV es -> OpticalFlowPerformanceLevelNV
flags :: forall (es :: [*]).
OpticalFlowSessionCreateInfoNV es
-> OpticalFlowSessionCreateFlagsNV
next :: Chain ds
width :: Word32
height :: Word32
imageFormat :: Format
flowVectorFormat :: Format
costFormat :: Format
outputGridSize :: OpticalFlowGridSizeFlagsNV
hintGridSize :: OpticalFlowGridSizeFlagsNV
performanceLevel :: OpticalFlowPerformanceLevelNV
flags :: OpticalFlowSessionCreateFlagsNV
..} Chain es
next' = OpticalFlowSessionCreateInfoNV{next :: Chain es
next = Chain es
next', Word32
Format
OpticalFlowSessionCreateFlagsNV
OpticalFlowPerformanceLevelNV
OpticalFlowGridSizeFlagsNV
width :: Word32
height :: Word32
imageFormat :: Format
flowVectorFormat :: Format
costFormat :: Format
outputGridSize :: OpticalFlowGridSizeFlagsNV
hintGridSize :: OpticalFlowGridSizeFlagsNV
performanceLevel :: OpticalFlowPerformanceLevelNV
flags :: OpticalFlowSessionCreateFlagsNV
width :: Word32
height :: Word32
imageFormat :: Format
flowVectorFormat :: Format
costFormat :: Format
outputGridSize :: OpticalFlowGridSizeFlagsNV
hintGridSize :: OpticalFlowGridSizeFlagsNV
performanceLevel :: OpticalFlowPerformanceLevelNV
flags :: OpticalFlowSessionCreateFlagsNV
..}
  getNext :: forall (es :: [*]). OpticalFlowSessionCreateInfoNV es -> Chain es
getNext OpticalFlowSessionCreateInfoNV{Word32
Format
Chain es
OpticalFlowSessionCreateFlagsNV
OpticalFlowPerformanceLevelNV
OpticalFlowGridSizeFlagsNV
next :: forall (es :: [*]). OpticalFlowSessionCreateInfoNV es -> Chain es
width :: forall (es :: [*]). OpticalFlowSessionCreateInfoNV es -> Word32
height :: forall (es :: [*]). OpticalFlowSessionCreateInfoNV es -> Word32
imageFormat :: forall (es :: [*]). OpticalFlowSessionCreateInfoNV es -> Format
flowVectorFormat :: forall (es :: [*]). OpticalFlowSessionCreateInfoNV es -> Format
costFormat :: forall (es :: [*]). OpticalFlowSessionCreateInfoNV es -> Format
outputGridSize :: forall (es :: [*]).
OpticalFlowSessionCreateInfoNV es -> OpticalFlowGridSizeFlagsNV
hintGridSize :: forall (es :: [*]).
OpticalFlowSessionCreateInfoNV es -> OpticalFlowGridSizeFlagsNV
performanceLevel :: forall (es :: [*]).
OpticalFlowSessionCreateInfoNV es -> OpticalFlowPerformanceLevelNV
flags :: forall (es :: [*]).
OpticalFlowSessionCreateInfoNV es
-> OpticalFlowSessionCreateFlagsNV
next :: Chain es
width :: Word32
height :: Word32
imageFormat :: Format
flowVectorFormat :: Format
costFormat :: Format
outputGridSize :: OpticalFlowGridSizeFlagsNV
hintGridSize :: OpticalFlowGridSizeFlagsNV
performanceLevel :: OpticalFlowPerformanceLevelNV
flags :: OpticalFlowSessionCreateFlagsNV
..} = Chain es
next
  extends :: forall e b proxy. Typeable e => proxy e -> (Extends OpticalFlowSessionCreateInfoNV e => b) -> Maybe b
  extends :: forall e b (proxy :: * -> *).
Typeable e =>
proxy e
-> (Extends OpticalFlowSessionCreateInfoNV e => b) -> Maybe b
extends proxy e
_ Extends OpticalFlowSessionCreateInfoNV e => b
f
    | Just e :~: OpticalFlowSessionCreatePrivateDataInfoNV
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @OpticalFlowSessionCreatePrivateDataInfoNV = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends OpticalFlowSessionCreateInfoNV e => b
f
    | Bool
otherwise = Maybe b
forall a. Maybe a
Nothing

instance ( Extendss OpticalFlowSessionCreateInfoNV es
         , PokeChain es ) => ToCStruct (OpticalFlowSessionCreateInfoNV es) where
  withCStruct :: forall b.
OpticalFlowSessionCreateInfoNV es
-> (Ptr (OpticalFlowSessionCreateInfoNV es) -> IO b) -> IO b
withCStruct OpticalFlowSessionCreateInfoNV es
x Ptr (OpticalFlowSessionCreateInfoNV es) -> IO b
f = Int -> (Ptr (OpticalFlowSessionCreateInfoNV es) -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
56 ((Ptr (OpticalFlowSessionCreateInfoNV es) -> IO b) -> IO b)
-> (Ptr (OpticalFlowSessionCreateInfoNV es) -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr (OpticalFlowSessionCreateInfoNV es)
p -> Ptr (OpticalFlowSessionCreateInfoNV es)
-> OpticalFlowSessionCreateInfoNV es -> IO b -> IO b
forall b.
Ptr (OpticalFlowSessionCreateInfoNV es)
-> OpticalFlowSessionCreateInfoNV es -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr (OpticalFlowSessionCreateInfoNV es)
p OpticalFlowSessionCreateInfoNV es
x (Ptr (OpticalFlowSessionCreateInfoNV es) -> IO b
f Ptr (OpticalFlowSessionCreateInfoNV es)
p)
  pokeCStruct :: forall b.
Ptr (OpticalFlowSessionCreateInfoNV es)
-> OpticalFlowSessionCreateInfoNV es -> IO b -> IO b
pokeCStruct Ptr (OpticalFlowSessionCreateInfoNV es)
p OpticalFlowSessionCreateInfoNV{Word32
Format
Chain es
OpticalFlowSessionCreateFlagsNV
OpticalFlowPerformanceLevelNV
OpticalFlowGridSizeFlagsNV
next :: forall (es :: [*]). OpticalFlowSessionCreateInfoNV es -> Chain es
width :: forall (es :: [*]). OpticalFlowSessionCreateInfoNV es -> Word32
height :: forall (es :: [*]). OpticalFlowSessionCreateInfoNV es -> Word32
imageFormat :: forall (es :: [*]). OpticalFlowSessionCreateInfoNV es -> Format
flowVectorFormat :: forall (es :: [*]). OpticalFlowSessionCreateInfoNV es -> Format
costFormat :: forall (es :: [*]). OpticalFlowSessionCreateInfoNV es -> Format
outputGridSize :: forall (es :: [*]).
OpticalFlowSessionCreateInfoNV es -> OpticalFlowGridSizeFlagsNV
hintGridSize :: forall (es :: [*]).
OpticalFlowSessionCreateInfoNV es -> OpticalFlowGridSizeFlagsNV
performanceLevel :: forall (es :: [*]).
OpticalFlowSessionCreateInfoNV es -> OpticalFlowPerformanceLevelNV
flags :: forall (es :: [*]).
OpticalFlowSessionCreateInfoNV es
-> OpticalFlowSessionCreateFlagsNV
next :: Chain es
width :: Word32
height :: Word32
imageFormat :: Format
flowVectorFormat :: Format
costFormat :: Format
outputGridSize :: OpticalFlowGridSizeFlagsNV
hintGridSize :: OpticalFlowGridSizeFlagsNV
performanceLevel :: OpticalFlowPerformanceLevelNV
flags :: OpticalFlowSessionCreateFlagsNV
..} IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (OpticalFlowSessionCreateInfoNV es)
p Ptr (OpticalFlowSessionCreateInfoNV es) -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_OPTICAL_FLOW_SESSION_CREATE_INFO_NV)
    pNext'' <- (Ptr (Chain es) -> Ptr ())
-> ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ())
forall a b. (a -> b) -> ContT b IO a -> ContT b IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Ptr (Chain es) -> Ptr ()
forall a b. Ptr a -> Ptr b
castPtr (ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ()))
-> (((Ptr (Chain es) -> IO b) -> IO b)
    -> ContT b IO (Ptr (Chain es)))
-> ((Ptr (Chain es) -> IO b) -> IO b)
-> ContT b IO (Ptr ())
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr (Chain es))
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr ()))
-> ((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr ())
forall a b. (a -> b) -> a -> b
$ Chain es -> (Ptr (Chain es) -> IO b) -> IO b
forall (es :: [*]) a.
PokeChain es =>
Chain es -> (Ptr (Chain es) -> IO a) -> IO a
forall a. Chain es -> (Ptr (Chain es) -> IO a) -> IO a
withChain (Chain es
next)
    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) (width)
    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (height)
    lift $ poke ((p `plusPtr` 24 :: Ptr Format)) (imageFormat)
    lift $ poke ((p `plusPtr` 28 :: Ptr Format)) (flowVectorFormat)
    lift $ poke ((p `plusPtr` 32 :: Ptr Format)) (costFormat)
    lift $ poke ((p `plusPtr` 36 :: Ptr OpticalFlowGridSizeFlagsNV)) (outputGridSize)
    lift $ poke ((p `plusPtr` 40 :: Ptr OpticalFlowGridSizeFlagsNV)) (hintGridSize)
    lift $ poke ((p `plusPtr` 44 :: Ptr OpticalFlowPerformanceLevelNV)) (performanceLevel)
    lift $ poke ((p `plusPtr` 48 :: Ptr OpticalFlowSessionCreateFlagsNV)) (flags)
    lift $ f
  cStructSize :: Int
cStructSize = Int
56
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b. Ptr (OpticalFlowSessionCreateInfoNV es) -> IO b -> IO b
pokeZeroCStruct Ptr (OpticalFlowSessionCreateInfoNV es)
p IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (OpticalFlowSessionCreateInfoNV es)
p Ptr (OpticalFlowSessionCreateInfoNV es) -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_OPTICAL_FLOW_SESSION_CREATE_INFO_NV)
    pNext' <- (Ptr (Chain es) -> Ptr ())
-> ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ())
forall a b. (a -> b) -> ContT b IO a -> ContT b IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Ptr (Chain es) -> Ptr ()
forall a b. Ptr a -> Ptr b
castPtr (ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ()))
-> (((Ptr (Chain es) -> IO b) -> IO b)
    -> ContT b IO (Ptr (Chain es)))
-> ((Ptr (Chain es) -> IO b) -> IO b)
-> ContT b IO (Ptr ())
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr (Chain es))
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr ()))
-> ((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr ())
forall a b. (a -> b) -> a -> b
$ forall (es :: [*]) a.
PokeChain es =>
(Ptr (Chain es) -> IO a) -> IO a
withZeroChain @es
    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
    lift $ poke ((p `plusPtr` 16 :: Ptr Word32)) (zero)
    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
    lift $ poke ((p `plusPtr` 24 :: Ptr Format)) (zero)
    lift $ poke ((p `plusPtr` 28 :: Ptr Format)) (zero)
    lift $ poke ((p `plusPtr` 36 :: Ptr OpticalFlowGridSizeFlagsNV)) (zero)
    lift $ f

instance ( Extendss OpticalFlowSessionCreateInfoNV es
         , PeekChain es ) => FromCStruct (OpticalFlowSessionCreateInfoNV es) where
  peekCStruct :: Ptr (OpticalFlowSessionCreateInfoNV es)
-> IO (OpticalFlowSessionCreateInfoNV es)
peekCStruct Ptr (OpticalFlowSessionCreateInfoNV es)
p = do
    pNext <- forall a. Storable a => Ptr a -> IO a
peek @(Ptr ()) ((Ptr (OpticalFlowSessionCreateInfoNV es)
p Ptr (OpticalFlowSessionCreateInfoNV es) -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ())))
    next <- peekChain (castPtr pNext)
    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 @OpticalFlowGridSizeFlagsNV ((p `plusPtr` 36 :: Ptr OpticalFlowGridSizeFlagsNV))
    hintGridSize <- peek @OpticalFlowGridSizeFlagsNV ((p `plusPtr` 40 :: Ptr OpticalFlowGridSizeFlagsNV))
    performanceLevel <- peek @OpticalFlowPerformanceLevelNV ((p `plusPtr` 44 :: Ptr OpticalFlowPerformanceLevelNV))
    flags <- peek @OpticalFlowSessionCreateFlagsNV ((p `plusPtr` 48 :: Ptr OpticalFlowSessionCreateFlagsNV))
    pure $ OpticalFlowSessionCreateInfoNV
             next
             width
             height
             imageFormat
             flowVectorFormat
             costFormat
             outputGridSize
             hintGridSize
             performanceLevel
             flags

instance es ~ '[] => Zero (OpticalFlowSessionCreateInfoNV es) where
  zero :: OpticalFlowSessionCreateInfoNV es
zero = Chain es
-> Word32
-> Word32
-> Format
-> Format
-> Format
-> OpticalFlowGridSizeFlagsNV
-> OpticalFlowGridSizeFlagsNV
-> OpticalFlowPerformanceLevelNV
-> OpticalFlowSessionCreateFlagsNV
-> OpticalFlowSessionCreateInfoNV es
forall (es :: [*]).
Chain es
-> Word32
-> Word32
-> Format
-> Format
-> Format
-> OpticalFlowGridSizeFlagsNV
-> OpticalFlowGridSizeFlagsNV
-> OpticalFlowPerformanceLevelNV
-> OpticalFlowSessionCreateFlagsNV
-> OpticalFlowSessionCreateInfoNV es
OpticalFlowSessionCreateInfoNV
           ()
           Word32
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero
           Format
forall a. Zero a => a
zero
           Format
forall a. Zero a => a
zero
           Format
forall a. Zero a => a
zero
           OpticalFlowGridSizeFlagsNV
forall a. Zero a => a
zero
           OpticalFlowGridSizeFlagsNV
forall a. Zero a => a
zero
           OpticalFlowPerformanceLevelNV
forall a. Zero a => a
zero
           OpticalFlowSessionCreateFlagsNV
forall a. Zero a => a
zero


-- | VkOpticalFlowSessionCreatePrivateDataInfoNV - Structure for NV internal
-- use only
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_optical_flow VK_NV_optical_flow>,
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data OpticalFlowSessionCreatePrivateDataInfoNV = OpticalFlowSessionCreatePrivateDataInfoNV
  { -- | @id@ is an identifier for data which is passed at a memory location
    -- specified in
    -- 'OpticalFlowSessionCreatePrivateDataInfoNV'::@pPrivateData@.
    OpticalFlowSessionCreatePrivateDataInfoNV -> Word32
id' :: Word32
  , -- | @size@ is the size of data in bytes which is passed at a memory location
    -- specified in
    -- 'OpticalFlowSessionCreatePrivateDataInfoNV'::@pPrivateData@.
    OpticalFlowSessionCreatePrivateDataInfoNV -> Word32
size :: Word32
  , -- | @pPrivateData@ is a pointer to NV internal data.
    --
    -- #VUID-VkOpticalFlowSessionCreatePrivateDataInfoNV-pPrivateData-parameter#
    -- @pPrivateData@ /must/ be a pointer value
    OpticalFlowSessionCreatePrivateDataInfoNV -> Ptr ()
privateData :: Ptr ()
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (OpticalFlowSessionCreatePrivateDataInfoNV)
#endif
deriving instance Show OpticalFlowSessionCreatePrivateDataInfoNV

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

instance FromCStruct OpticalFlowSessionCreatePrivateDataInfoNV where
  peekCStruct :: Ptr OpticalFlowSessionCreatePrivateDataInfoNV
-> IO OpticalFlowSessionCreatePrivateDataInfoNV
peekCStruct Ptr OpticalFlowSessionCreatePrivateDataInfoNV
p = do
    id' <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr OpticalFlowSessionCreatePrivateDataInfoNV
p Ptr OpticalFlowSessionCreatePrivateDataInfoNV -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32))
    size <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
    pPrivateData <- peek @(Ptr ()) ((p `plusPtr` 24 :: Ptr (Ptr ())))
    pure $ OpticalFlowSessionCreatePrivateDataInfoNV
             id' size pPrivateData

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

instance Zero OpticalFlowSessionCreatePrivateDataInfoNV where
  zero :: OpticalFlowSessionCreatePrivateDataInfoNV
zero = Word32
-> Word32 -> Ptr () -> OpticalFlowSessionCreatePrivateDataInfoNV
OpticalFlowSessionCreatePrivateDataInfoNV
           Word32
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero
           Ptr ()
forall a. Zero a => a
zero


-- | VkOpticalFlowExecuteInfoNV - Structure specifying parameters of an
-- optical flow vector calculation
--
-- == Valid Usage
--
-- -   #VUID-VkOpticalFlowExecuteInfoNV-regionCount-07593# @regionCount@
--     /must/ be 0 if 'OPTICAL_FLOW_SESSION_CREATE_ALLOW_REGIONS_BIT_NV'
--     was not set for 'Vulkan.Extensions.Handles.OpticalFlowSessionNV' on
--     which this command is operating
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkOpticalFlowExecuteInfoNV-sType-sType# @sType@ /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_OPTICAL_FLOW_EXECUTE_INFO_NV'
--
-- -   #VUID-VkOpticalFlowExecuteInfoNV-pNext-pNext# @pNext@ /must/ be
--     @NULL@
--
-- -   #VUID-VkOpticalFlowExecuteInfoNV-flags-parameter# @flags@ /must/ be
--     a valid combination of 'OpticalFlowExecuteFlagBitsNV' values
--
-- -   #VUID-VkOpticalFlowExecuteInfoNV-pRegions-parameter# If
--     @regionCount@ is not @0@, @pRegions@ /must/ be a valid pointer to an
--     array of @regionCount@ 'Vulkan.Core10.FundamentalTypes.Rect2D'
--     structures
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_optical_flow VK_NV_optical_flow>,
-- 'OpticalFlowExecuteFlagsNV', 'Vulkan.Core10.FundamentalTypes.Rect2D',
-- 'Vulkan.Core10.Enums.StructureType.StructureType',
-- 'cmdOpticalFlowExecuteNV'
data OpticalFlowExecuteInfoNV = OpticalFlowExecuteInfoNV
  { -- | @flags@ are the 'OpticalFlowExecuteFlagsNV' used for this command.
    OpticalFlowExecuteInfoNV -> OpticalFlowExecuteFlagsNV
flags :: OpticalFlowExecuteFlagsNV
  , -- | @pRegions@ is a pointer to @regionCount@
    -- 'Vulkan.Core10.FundamentalTypes.Rect2D' regions of interest.
    OpticalFlowExecuteInfoNV -> Vector Rect2D
regions :: Vector Rect2D
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (OpticalFlowExecuteInfoNV)
#endif
deriving instance Show OpticalFlowExecuteInfoNV

instance ToCStruct OpticalFlowExecuteInfoNV where
  withCStruct :: forall b.
OpticalFlowExecuteInfoNV
-> (Ptr OpticalFlowExecuteInfoNV -> IO b) -> IO b
withCStruct OpticalFlowExecuteInfoNV
x Ptr OpticalFlowExecuteInfoNV -> IO b
f = Int -> (Ptr OpticalFlowExecuteInfoNV -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
32 ((Ptr OpticalFlowExecuteInfoNV -> IO b) -> IO b)
-> (Ptr OpticalFlowExecuteInfoNV -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr OpticalFlowExecuteInfoNV
p -> Ptr OpticalFlowExecuteInfoNV
-> OpticalFlowExecuteInfoNV -> IO b -> IO b
forall b.
Ptr OpticalFlowExecuteInfoNV
-> OpticalFlowExecuteInfoNV -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr OpticalFlowExecuteInfoNV
p OpticalFlowExecuteInfoNV
x (Ptr OpticalFlowExecuteInfoNV -> IO b
f Ptr OpticalFlowExecuteInfoNV
p)
  pokeCStruct :: forall b.
Ptr OpticalFlowExecuteInfoNV
-> OpticalFlowExecuteInfoNV -> IO b -> IO b
pokeCStruct Ptr OpticalFlowExecuteInfoNV
p OpticalFlowExecuteInfoNV{Vector Rect2D
OpticalFlowExecuteFlagsNV
flags :: OpticalFlowExecuteInfoNV -> OpticalFlowExecuteFlagsNV
regions :: OpticalFlowExecuteInfoNV -> Vector Rect2D
flags :: OpticalFlowExecuteFlagsNV
regions :: Vector Rect2D
..} IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr OpticalFlowExecuteInfoNV
p Ptr OpticalFlowExecuteInfoNV -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_OPTICAL_FLOW_EXECUTE_INFO_NV)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr OpticalFlowExecuteInfoNV
p Ptr OpticalFlowExecuteInfoNV -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr OpticalFlowExecuteFlagsNV -> OpticalFlowExecuteFlagsNV -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr OpticalFlowExecuteInfoNV
p Ptr OpticalFlowExecuteInfoNV
-> Int -> Ptr OpticalFlowExecuteFlagsNV
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr OpticalFlowExecuteFlagsNV)) (OpticalFlowExecuteFlagsNV
flags)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr OpticalFlowExecuteInfoNV
p Ptr OpticalFlowExecuteInfoNV -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr Word32)) ((Int -> Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Vector Rect2D -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector Rect2D -> Int) -> Vector Rect2D -> Int
forall a b. (a -> b) -> a -> b
$ (Vector Rect2D
regions)) :: Word32))
    pPRegions' <- ((Ptr Rect2D -> IO b) -> IO b) -> ContT b IO (Ptr Rect2D)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr Rect2D -> IO b) -> IO b) -> ContT b IO (Ptr Rect2D))
-> ((Ptr Rect2D -> IO b) -> IO b) -> ContT b IO (Ptr Rect2D)
forall a b. (a -> b) -> a -> b
$ forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @Rect2D ((Vector Rect2D -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector Rect2D
regions)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
16)
    lift $ Data.Vector.imapM_ (\Int
i Rect2D
e -> Ptr Rect2D -> Rect2D -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr Rect2D
pPRegions' Ptr Rect2D -> Int -> Ptr Rect2D
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
16 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr Rect2D) (Rect2D
e)) (regions)
    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr Rect2D))) (pPRegions')
    lift $ f
  cStructSize :: Int
cStructSize = Int
32
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b. Ptr OpticalFlowExecuteInfoNV -> IO b -> IO b
pokeZeroCStruct Ptr OpticalFlowExecuteInfoNV
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr OpticalFlowExecuteInfoNV
p Ptr OpticalFlowExecuteInfoNV -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_OPTICAL_FLOW_EXECUTE_INFO_NV)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr OpticalFlowExecuteInfoNV
p Ptr OpticalFlowExecuteInfoNV -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    IO b
f

instance FromCStruct OpticalFlowExecuteInfoNV where
  peekCStruct :: Ptr OpticalFlowExecuteInfoNV -> IO OpticalFlowExecuteInfoNV
peekCStruct Ptr OpticalFlowExecuteInfoNV
p = do
    flags <- forall a. Storable a => Ptr a -> IO a
peek @OpticalFlowExecuteFlagsNV ((Ptr OpticalFlowExecuteInfoNV
p Ptr OpticalFlowExecuteInfoNV
-> Int -> Ptr OpticalFlowExecuteFlagsNV
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr OpticalFlowExecuteFlagsNV))
    regionCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
    pRegions <- peek @(Ptr Rect2D) ((p `plusPtr` 24 :: Ptr (Ptr Rect2D)))
    pRegions' <- generateM (fromIntegral regionCount) (\Int
i -> forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @Rect2D ((Ptr Rect2D
pRegions Ptr Rect2D -> Int -> Ptr Rect2D
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
16 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr Rect2D)))
    pure $ OpticalFlowExecuteInfoNV
             flags pRegions'

instance Zero OpticalFlowExecuteInfoNV where
  zero :: OpticalFlowExecuteInfoNV
zero = OpticalFlowExecuteFlagsNV
-> Vector Rect2D -> OpticalFlowExecuteInfoNV
OpticalFlowExecuteInfoNV
           OpticalFlowExecuteFlagsNV
forall a. Zero a => a
zero
           Vector Rect2D
forall a. Monoid a => a
mempty


type OpticalFlowGridSizeFlagsNV = OpticalFlowGridSizeFlagBitsNV

-- | VkOpticalFlowGridSizeFlagBitsNV - Bits specifying grid sizes for optical
-- flow operations
--
-- = Description
--
-- -   'OPTICAL_FLOW_GRID_SIZE_1X1_BIT_NV' specifies that grid is 1x1
--     pixel.
--
-- -   'OPTICAL_FLOW_GRID_SIZE_2X2_BIT_NV' specifies that grid is 2x2
--     pixel.
--
-- -   'OPTICAL_FLOW_GRID_SIZE_4X4_BIT_NV' specifies that grid is 4x4
--     pixel.
--
-- -   'OPTICAL_FLOW_GRID_SIZE_8X8_BIT_NV' specifies that grid is 8x8
--     pixel.
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_optical_flow VK_NV_optical_flow>,
-- 'OpticalFlowGridSizeFlagsNV'
newtype OpticalFlowGridSizeFlagBitsNV = OpticalFlowGridSizeFlagBitsNV Flags
  deriving newtype (OpticalFlowGridSizeFlagsNV -> OpticalFlowGridSizeFlagsNV -> Bool
(OpticalFlowGridSizeFlagsNV -> OpticalFlowGridSizeFlagsNV -> Bool)
-> (OpticalFlowGridSizeFlagsNV
    -> OpticalFlowGridSizeFlagsNV -> Bool)
-> Eq OpticalFlowGridSizeFlagsNV
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: OpticalFlowGridSizeFlagsNV -> OpticalFlowGridSizeFlagsNV -> Bool
== :: OpticalFlowGridSizeFlagsNV -> OpticalFlowGridSizeFlagsNV -> Bool
$c/= :: OpticalFlowGridSizeFlagsNV -> OpticalFlowGridSizeFlagsNV -> Bool
/= :: OpticalFlowGridSizeFlagsNV -> OpticalFlowGridSizeFlagsNV -> Bool
Eq, Eq OpticalFlowGridSizeFlagsNV
Eq OpticalFlowGridSizeFlagsNV =>
(OpticalFlowGridSizeFlagsNV
 -> OpticalFlowGridSizeFlagsNV -> Ordering)
-> (OpticalFlowGridSizeFlagsNV
    -> OpticalFlowGridSizeFlagsNV -> Bool)
-> (OpticalFlowGridSizeFlagsNV
    -> OpticalFlowGridSizeFlagsNV -> Bool)
-> (OpticalFlowGridSizeFlagsNV
    -> OpticalFlowGridSizeFlagsNV -> Bool)
-> (OpticalFlowGridSizeFlagsNV
    -> OpticalFlowGridSizeFlagsNV -> Bool)
-> (OpticalFlowGridSizeFlagsNV
    -> OpticalFlowGridSizeFlagsNV -> OpticalFlowGridSizeFlagsNV)
-> (OpticalFlowGridSizeFlagsNV
    -> OpticalFlowGridSizeFlagsNV -> OpticalFlowGridSizeFlagsNV)
-> Ord OpticalFlowGridSizeFlagsNV
OpticalFlowGridSizeFlagsNV -> OpticalFlowGridSizeFlagsNV -> Bool
OpticalFlowGridSizeFlagsNV
-> OpticalFlowGridSizeFlagsNV -> Ordering
OpticalFlowGridSizeFlagsNV
-> OpticalFlowGridSizeFlagsNV -> OpticalFlowGridSizeFlagsNV
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: OpticalFlowGridSizeFlagsNV
-> OpticalFlowGridSizeFlagsNV -> Ordering
compare :: OpticalFlowGridSizeFlagsNV
-> OpticalFlowGridSizeFlagsNV -> Ordering
$c< :: OpticalFlowGridSizeFlagsNV -> OpticalFlowGridSizeFlagsNV -> Bool
< :: OpticalFlowGridSizeFlagsNV -> OpticalFlowGridSizeFlagsNV -> Bool
$c<= :: OpticalFlowGridSizeFlagsNV -> OpticalFlowGridSizeFlagsNV -> Bool
<= :: OpticalFlowGridSizeFlagsNV -> OpticalFlowGridSizeFlagsNV -> Bool
$c> :: OpticalFlowGridSizeFlagsNV -> OpticalFlowGridSizeFlagsNV -> Bool
> :: OpticalFlowGridSizeFlagsNV -> OpticalFlowGridSizeFlagsNV -> Bool
$c>= :: OpticalFlowGridSizeFlagsNV -> OpticalFlowGridSizeFlagsNV -> Bool
>= :: OpticalFlowGridSizeFlagsNV -> OpticalFlowGridSizeFlagsNV -> Bool
$cmax :: OpticalFlowGridSizeFlagsNV
-> OpticalFlowGridSizeFlagsNV -> OpticalFlowGridSizeFlagsNV
max :: OpticalFlowGridSizeFlagsNV
-> OpticalFlowGridSizeFlagsNV -> OpticalFlowGridSizeFlagsNV
$cmin :: OpticalFlowGridSizeFlagsNV
-> OpticalFlowGridSizeFlagsNV -> OpticalFlowGridSizeFlagsNV
min :: OpticalFlowGridSizeFlagsNV
-> OpticalFlowGridSizeFlagsNV -> OpticalFlowGridSizeFlagsNV
Ord, Ptr OpticalFlowGridSizeFlagsNV -> IO OpticalFlowGridSizeFlagsNV
Ptr OpticalFlowGridSizeFlagsNV
-> Int -> IO OpticalFlowGridSizeFlagsNV
Ptr OpticalFlowGridSizeFlagsNV
-> Int -> OpticalFlowGridSizeFlagsNV -> IO ()
Ptr OpticalFlowGridSizeFlagsNV
-> OpticalFlowGridSizeFlagsNV -> IO ()
OpticalFlowGridSizeFlagsNV -> Int
(OpticalFlowGridSizeFlagsNV -> Int)
-> (OpticalFlowGridSizeFlagsNV -> Int)
-> (Ptr OpticalFlowGridSizeFlagsNV
    -> Int -> IO OpticalFlowGridSizeFlagsNV)
-> (Ptr OpticalFlowGridSizeFlagsNV
    -> Int -> OpticalFlowGridSizeFlagsNV -> IO ())
-> (forall b. Ptr b -> Int -> IO OpticalFlowGridSizeFlagsNV)
-> (forall b. Ptr b -> Int -> OpticalFlowGridSizeFlagsNV -> IO ())
-> (Ptr OpticalFlowGridSizeFlagsNV
    -> IO OpticalFlowGridSizeFlagsNV)
-> (Ptr OpticalFlowGridSizeFlagsNV
    -> OpticalFlowGridSizeFlagsNV -> IO ())
-> Storable OpticalFlowGridSizeFlagsNV
forall b. Ptr b -> Int -> IO OpticalFlowGridSizeFlagsNV
forall b. Ptr b -> Int -> OpticalFlowGridSizeFlagsNV -> IO ()
forall a.
(a -> Int)
-> (a -> Int)
-> (Ptr a -> Int -> IO a)
-> (Ptr a -> Int -> a -> IO ())
-> (forall b. Ptr b -> Int -> IO a)
-> (forall b. Ptr b -> Int -> a -> IO ())
-> (Ptr a -> IO a)
-> (Ptr a -> a -> IO ())
-> Storable a
$csizeOf :: OpticalFlowGridSizeFlagsNV -> Int
sizeOf :: OpticalFlowGridSizeFlagsNV -> Int
$calignment :: OpticalFlowGridSizeFlagsNV -> Int
alignment :: OpticalFlowGridSizeFlagsNV -> Int
$cpeekElemOff :: Ptr OpticalFlowGridSizeFlagsNV
-> Int -> IO OpticalFlowGridSizeFlagsNV
peekElemOff :: Ptr OpticalFlowGridSizeFlagsNV
-> Int -> IO OpticalFlowGridSizeFlagsNV
$cpokeElemOff :: Ptr OpticalFlowGridSizeFlagsNV
-> Int -> OpticalFlowGridSizeFlagsNV -> IO ()
pokeElemOff :: Ptr OpticalFlowGridSizeFlagsNV
-> Int -> OpticalFlowGridSizeFlagsNV -> IO ()
$cpeekByteOff :: forall b. Ptr b -> Int -> IO OpticalFlowGridSizeFlagsNV
peekByteOff :: forall b. Ptr b -> Int -> IO OpticalFlowGridSizeFlagsNV
$cpokeByteOff :: forall b. Ptr b -> Int -> OpticalFlowGridSizeFlagsNV -> IO ()
pokeByteOff :: forall b. Ptr b -> Int -> OpticalFlowGridSizeFlagsNV -> IO ()
$cpeek :: Ptr OpticalFlowGridSizeFlagsNV -> IO OpticalFlowGridSizeFlagsNV
peek :: Ptr OpticalFlowGridSizeFlagsNV -> IO OpticalFlowGridSizeFlagsNV
$cpoke :: Ptr OpticalFlowGridSizeFlagsNV
-> OpticalFlowGridSizeFlagsNV -> IO ()
poke :: Ptr OpticalFlowGridSizeFlagsNV
-> OpticalFlowGridSizeFlagsNV -> IO ()
Storable, OpticalFlowGridSizeFlagsNV
OpticalFlowGridSizeFlagsNV -> Zero OpticalFlowGridSizeFlagsNV
forall a. a -> Zero a
$czero :: OpticalFlowGridSizeFlagsNV
zero :: OpticalFlowGridSizeFlagsNV
Zero, Eq OpticalFlowGridSizeFlagsNV
OpticalFlowGridSizeFlagsNV
Eq OpticalFlowGridSizeFlagsNV =>
(OpticalFlowGridSizeFlagsNV
 -> OpticalFlowGridSizeFlagsNV -> OpticalFlowGridSizeFlagsNV)
-> (OpticalFlowGridSizeFlagsNV
    -> OpticalFlowGridSizeFlagsNV -> OpticalFlowGridSizeFlagsNV)
-> (OpticalFlowGridSizeFlagsNV
    -> OpticalFlowGridSizeFlagsNV -> OpticalFlowGridSizeFlagsNV)
-> (OpticalFlowGridSizeFlagsNV -> OpticalFlowGridSizeFlagsNV)
-> (OpticalFlowGridSizeFlagsNV
    -> Int -> OpticalFlowGridSizeFlagsNV)
-> (OpticalFlowGridSizeFlagsNV
    -> Int -> OpticalFlowGridSizeFlagsNV)
-> OpticalFlowGridSizeFlagsNV
-> (Int -> OpticalFlowGridSizeFlagsNV)
-> (OpticalFlowGridSizeFlagsNV
    -> Int -> OpticalFlowGridSizeFlagsNV)
-> (OpticalFlowGridSizeFlagsNV
    -> Int -> OpticalFlowGridSizeFlagsNV)
-> (OpticalFlowGridSizeFlagsNV
    -> Int -> OpticalFlowGridSizeFlagsNV)
-> (OpticalFlowGridSizeFlagsNV -> Int -> Bool)
-> (OpticalFlowGridSizeFlagsNV -> Maybe Int)
-> (OpticalFlowGridSizeFlagsNV -> Int)
-> (OpticalFlowGridSizeFlagsNV -> Bool)
-> (OpticalFlowGridSizeFlagsNV
    -> Int -> OpticalFlowGridSizeFlagsNV)
-> (OpticalFlowGridSizeFlagsNV
    -> Int -> OpticalFlowGridSizeFlagsNV)
-> (OpticalFlowGridSizeFlagsNV
    -> Int -> OpticalFlowGridSizeFlagsNV)
-> (OpticalFlowGridSizeFlagsNV
    -> Int -> OpticalFlowGridSizeFlagsNV)
-> (OpticalFlowGridSizeFlagsNV
    -> Int -> OpticalFlowGridSizeFlagsNV)
-> (OpticalFlowGridSizeFlagsNV
    -> Int -> OpticalFlowGridSizeFlagsNV)
-> (OpticalFlowGridSizeFlagsNV -> Int)
-> Bits OpticalFlowGridSizeFlagsNV
Int -> OpticalFlowGridSizeFlagsNV
OpticalFlowGridSizeFlagsNV -> Bool
OpticalFlowGridSizeFlagsNV -> Int
OpticalFlowGridSizeFlagsNV -> Maybe Int
OpticalFlowGridSizeFlagsNV -> OpticalFlowGridSizeFlagsNV
OpticalFlowGridSizeFlagsNV -> Int -> Bool
OpticalFlowGridSizeFlagsNV -> Int -> OpticalFlowGridSizeFlagsNV
OpticalFlowGridSizeFlagsNV
-> OpticalFlowGridSizeFlagsNV -> OpticalFlowGridSizeFlagsNV
forall a.
Eq a =>
(a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> a
-> (Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> Bool)
-> (a -> Maybe Int)
-> (a -> Int)
-> (a -> Bool)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int)
-> Bits a
$c.&. :: OpticalFlowGridSizeFlagsNV
-> OpticalFlowGridSizeFlagsNV -> OpticalFlowGridSizeFlagsNV
.&. :: OpticalFlowGridSizeFlagsNV
-> OpticalFlowGridSizeFlagsNV -> OpticalFlowGridSizeFlagsNV
$c.|. :: OpticalFlowGridSizeFlagsNV
-> OpticalFlowGridSizeFlagsNV -> OpticalFlowGridSizeFlagsNV
.|. :: OpticalFlowGridSizeFlagsNV
-> OpticalFlowGridSizeFlagsNV -> OpticalFlowGridSizeFlagsNV
$cxor :: OpticalFlowGridSizeFlagsNV
-> OpticalFlowGridSizeFlagsNV -> OpticalFlowGridSizeFlagsNV
xor :: OpticalFlowGridSizeFlagsNV
-> OpticalFlowGridSizeFlagsNV -> OpticalFlowGridSizeFlagsNV
$ccomplement :: OpticalFlowGridSizeFlagsNV -> OpticalFlowGridSizeFlagsNV
complement :: OpticalFlowGridSizeFlagsNV -> OpticalFlowGridSizeFlagsNV
$cshift :: OpticalFlowGridSizeFlagsNV -> Int -> OpticalFlowGridSizeFlagsNV
shift :: OpticalFlowGridSizeFlagsNV -> Int -> OpticalFlowGridSizeFlagsNV
$crotate :: OpticalFlowGridSizeFlagsNV -> Int -> OpticalFlowGridSizeFlagsNV
rotate :: OpticalFlowGridSizeFlagsNV -> Int -> OpticalFlowGridSizeFlagsNV
$czeroBits :: OpticalFlowGridSizeFlagsNV
zeroBits :: OpticalFlowGridSizeFlagsNV
$cbit :: Int -> OpticalFlowGridSizeFlagsNV
bit :: Int -> OpticalFlowGridSizeFlagsNV
$csetBit :: OpticalFlowGridSizeFlagsNV -> Int -> OpticalFlowGridSizeFlagsNV
setBit :: OpticalFlowGridSizeFlagsNV -> Int -> OpticalFlowGridSizeFlagsNV
$cclearBit :: OpticalFlowGridSizeFlagsNV -> Int -> OpticalFlowGridSizeFlagsNV
clearBit :: OpticalFlowGridSizeFlagsNV -> Int -> OpticalFlowGridSizeFlagsNV
$ccomplementBit :: OpticalFlowGridSizeFlagsNV -> Int -> OpticalFlowGridSizeFlagsNV
complementBit :: OpticalFlowGridSizeFlagsNV -> Int -> OpticalFlowGridSizeFlagsNV
$ctestBit :: OpticalFlowGridSizeFlagsNV -> Int -> Bool
testBit :: OpticalFlowGridSizeFlagsNV -> Int -> Bool
$cbitSizeMaybe :: OpticalFlowGridSizeFlagsNV -> Maybe Int
bitSizeMaybe :: OpticalFlowGridSizeFlagsNV -> Maybe Int
$cbitSize :: OpticalFlowGridSizeFlagsNV -> Int
bitSize :: OpticalFlowGridSizeFlagsNV -> Int
$cisSigned :: OpticalFlowGridSizeFlagsNV -> Bool
isSigned :: OpticalFlowGridSizeFlagsNV -> Bool
$cshiftL :: OpticalFlowGridSizeFlagsNV -> Int -> OpticalFlowGridSizeFlagsNV
shiftL :: OpticalFlowGridSizeFlagsNV -> Int -> OpticalFlowGridSizeFlagsNV
$cunsafeShiftL :: OpticalFlowGridSizeFlagsNV -> Int -> OpticalFlowGridSizeFlagsNV
unsafeShiftL :: OpticalFlowGridSizeFlagsNV -> Int -> OpticalFlowGridSizeFlagsNV
$cshiftR :: OpticalFlowGridSizeFlagsNV -> Int -> OpticalFlowGridSizeFlagsNV
shiftR :: OpticalFlowGridSizeFlagsNV -> Int -> OpticalFlowGridSizeFlagsNV
$cunsafeShiftR :: OpticalFlowGridSizeFlagsNV -> Int -> OpticalFlowGridSizeFlagsNV
unsafeShiftR :: OpticalFlowGridSizeFlagsNV -> Int -> OpticalFlowGridSizeFlagsNV
$crotateL :: OpticalFlowGridSizeFlagsNV -> Int -> OpticalFlowGridSizeFlagsNV
rotateL :: OpticalFlowGridSizeFlagsNV -> Int -> OpticalFlowGridSizeFlagsNV
$crotateR :: OpticalFlowGridSizeFlagsNV -> Int -> OpticalFlowGridSizeFlagsNV
rotateR :: OpticalFlowGridSizeFlagsNV -> Int -> OpticalFlowGridSizeFlagsNV
$cpopCount :: OpticalFlowGridSizeFlagsNV -> Int
popCount :: OpticalFlowGridSizeFlagsNV -> Int
Bits, Bits OpticalFlowGridSizeFlagsNV
Bits OpticalFlowGridSizeFlagsNV =>
(OpticalFlowGridSizeFlagsNV -> Int)
-> (OpticalFlowGridSizeFlagsNV -> Int)
-> (OpticalFlowGridSizeFlagsNV -> Int)
-> FiniteBits OpticalFlowGridSizeFlagsNV
OpticalFlowGridSizeFlagsNV -> Int
forall b.
Bits b =>
(b -> Int) -> (b -> Int) -> (b -> Int) -> FiniteBits b
$cfiniteBitSize :: OpticalFlowGridSizeFlagsNV -> Int
finiteBitSize :: OpticalFlowGridSizeFlagsNV -> Int
$ccountLeadingZeros :: OpticalFlowGridSizeFlagsNV -> Int
countLeadingZeros :: OpticalFlowGridSizeFlagsNV -> Int
$ccountTrailingZeros :: OpticalFlowGridSizeFlagsNV -> Int
countTrailingZeros :: OpticalFlowGridSizeFlagsNV -> Int
FiniteBits)

-- No documentation found for Nested "VkOpticalFlowGridSizeFlagBitsNV" "VK_OPTICAL_FLOW_GRID_SIZE_UNKNOWN_NV"
pattern $mOPTICAL_FLOW_GRID_SIZE_UNKNOWN_NV :: forall {r}.
OpticalFlowGridSizeFlagsNV -> ((# #) -> r) -> ((# #) -> r) -> r
$bOPTICAL_FLOW_GRID_SIZE_UNKNOWN_NV :: OpticalFlowGridSizeFlagsNV
OPTICAL_FLOW_GRID_SIZE_UNKNOWN_NV = OpticalFlowGridSizeFlagBitsNV 0x00000000

-- No documentation found for Nested "VkOpticalFlowGridSizeFlagBitsNV" "VK_OPTICAL_FLOW_GRID_SIZE_1X1_BIT_NV"
pattern $mOPTICAL_FLOW_GRID_SIZE_1X1_BIT_NV :: forall {r}.
OpticalFlowGridSizeFlagsNV -> ((# #) -> r) -> ((# #) -> r) -> r
$bOPTICAL_FLOW_GRID_SIZE_1X1_BIT_NV :: OpticalFlowGridSizeFlagsNV
OPTICAL_FLOW_GRID_SIZE_1X1_BIT_NV = OpticalFlowGridSizeFlagBitsNV 0x00000001

-- No documentation found for Nested "VkOpticalFlowGridSizeFlagBitsNV" "VK_OPTICAL_FLOW_GRID_SIZE_2X2_BIT_NV"
pattern $mOPTICAL_FLOW_GRID_SIZE_2X2_BIT_NV :: forall {r}.
OpticalFlowGridSizeFlagsNV -> ((# #) -> r) -> ((# #) -> r) -> r
$bOPTICAL_FLOW_GRID_SIZE_2X2_BIT_NV :: OpticalFlowGridSizeFlagsNV
OPTICAL_FLOW_GRID_SIZE_2X2_BIT_NV = OpticalFlowGridSizeFlagBitsNV 0x00000002

-- No documentation found for Nested "VkOpticalFlowGridSizeFlagBitsNV" "VK_OPTICAL_FLOW_GRID_SIZE_4X4_BIT_NV"
pattern $mOPTICAL_FLOW_GRID_SIZE_4X4_BIT_NV :: forall {r}.
OpticalFlowGridSizeFlagsNV -> ((# #) -> r) -> ((# #) -> r) -> r
$bOPTICAL_FLOW_GRID_SIZE_4X4_BIT_NV :: OpticalFlowGridSizeFlagsNV
OPTICAL_FLOW_GRID_SIZE_4X4_BIT_NV = OpticalFlowGridSizeFlagBitsNV 0x00000004

-- No documentation found for Nested "VkOpticalFlowGridSizeFlagBitsNV" "VK_OPTICAL_FLOW_GRID_SIZE_8X8_BIT_NV"
pattern $mOPTICAL_FLOW_GRID_SIZE_8X8_BIT_NV :: forall {r}.
OpticalFlowGridSizeFlagsNV -> ((# #) -> r) -> ((# #) -> r) -> r
$bOPTICAL_FLOW_GRID_SIZE_8X8_BIT_NV :: OpticalFlowGridSizeFlagsNV
OPTICAL_FLOW_GRID_SIZE_8X8_BIT_NV = OpticalFlowGridSizeFlagBitsNV 0x00000008

conNameOpticalFlowGridSizeFlagBitsNV :: String
conNameOpticalFlowGridSizeFlagBitsNV :: String
conNameOpticalFlowGridSizeFlagBitsNV = String
"OpticalFlowGridSizeFlagBitsNV"

enumPrefixOpticalFlowGridSizeFlagBitsNV :: String
enumPrefixOpticalFlowGridSizeFlagBitsNV :: String
enumPrefixOpticalFlowGridSizeFlagBitsNV = String
"OPTICAL_FLOW_GRID_SIZE_"

showTableOpticalFlowGridSizeFlagBitsNV :: [(OpticalFlowGridSizeFlagBitsNV, String)]
showTableOpticalFlowGridSizeFlagBitsNV :: [(OpticalFlowGridSizeFlagsNV, String)]
showTableOpticalFlowGridSizeFlagBitsNV =
  [
    ( OpticalFlowGridSizeFlagsNV
OPTICAL_FLOW_GRID_SIZE_UNKNOWN_NV
    , String
"UNKNOWN_NV"
    )
  ,
    ( OpticalFlowGridSizeFlagsNV
OPTICAL_FLOW_GRID_SIZE_1X1_BIT_NV
    , String
"1X1_BIT_NV"
    )
  ,
    ( OpticalFlowGridSizeFlagsNV
OPTICAL_FLOW_GRID_SIZE_2X2_BIT_NV
    , String
"2X2_BIT_NV"
    )
  ,
    ( OpticalFlowGridSizeFlagsNV
OPTICAL_FLOW_GRID_SIZE_4X4_BIT_NV
    , String
"4X4_BIT_NV"
    )
  ,
    ( OpticalFlowGridSizeFlagsNV
OPTICAL_FLOW_GRID_SIZE_8X8_BIT_NV
    , String
"8X8_BIT_NV"
    )
  ]

instance Show OpticalFlowGridSizeFlagBitsNV where
  showsPrec :: Int -> OpticalFlowGridSizeFlagsNV -> ShowS
showsPrec =
    String
-> [(OpticalFlowGridSizeFlagsNV, String)]
-> String
-> (OpticalFlowGridSizeFlagsNV -> Word32)
-> (Word32 -> ShowS)
-> Int
-> OpticalFlowGridSizeFlagsNV
-> ShowS
forall a i.
Eq a =>
String
-> [(a, String)]
-> String
-> (a -> i)
-> (i -> ShowS)
-> Int
-> a
-> ShowS
enumShowsPrec
      String
enumPrefixOpticalFlowGridSizeFlagBitsNV
      [(OpticalFlowGridSizeFlagsNV, String)]
showTableOpticalFlowGridSizeFlagBitsNV
      String
conNameOpticalFlowGridSizeFlagBitsNV
      (\(OpticalFlowGridSizeFlagBitsNV Word32
x) -> Word32
x)
      (\Word32
x -> String -> ShowS
showString String
"0x" ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Word32 -> ShowS
forall a. Integral a => a -> ShowS
showHex Word32
x)

instance Read OpticalFlowGridSizeFlagBitsNV where
  readPrec :: ReadPrec OpticalFlowGridSizeFlagsNV
readPrec =
    String
-> [(OpticalFlowGridSizeFlagsNV, String)]
-> String
-> (Word32 -> OpticalFlowGridSizeFlagsNV)
-> ReadPrec OpticalFlowGridSizeFlagsNV
forall i a.
Read i =>
String -> [(a, String)] -> String -> (i -> a) -> ReadPrec a
enumReadPrec
      String
enumPrefixOpticalFlowGridSizeFlagBitsNV
      [(OpticalFlowGridSizeFlagsNV, String)]
showTableOpticalFlowGridSizeFlagBitsNV
      String
conNameOpticalFlowGridSizeFlagBitsNV
      Word32 -> OpticalFlowGridSizeFlagsNV
OpticalFlowGridSizeFlagBitsNV

type OpticalFlowUsageFlagsNV = OpticalFlowUsageFlagBitsNV

-- | VkOpticalFlowUsageFlagBitsNV - Bits specifying usage for optical flow
-- operations
--
-- = Description
--
-- -   'OPTICAL_FLOW_USAGE_INPUT_BIT_NV' specifies that the image /can/ be
--     used as input or reference frame for an optical flow operation.
--
-- -   'OPTICAL_FLOW_USAGE_OUTPUT_BIT_NV' specifies that the image /can/ be
--     used as output flow vector map for an optical flow operation.
--
-- -   'OPTICAL_FLOW_USAGE_HINT_BIT_NV' specifies that the image /can/ be
--     used as hint flow vector map for an optical flow operation.
--
-- -   'OPTICAL_FLOW_USAGE_COST_BIT_NV' specifies that the image /can/ be
--     used as output cost map for an optical flow operation.
--
-- -   'OPTICAL_FLOW_USAGE_GLOBAL_FLOW_BIT_NV' specifies that the image
--     /can/ be used as global flow vector for an optical flow operation.
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_optical_flow VK_NV_optical_flow>,
-- 'OpticalFlowUsageFlagsNV'
newtype OpticalFlowUsageFlagBitsNV = OpticalFlowUsageFlagBitsNV Flags
  deriving newtype (OpticalFlowUsageFlagsNV -> OpticalFlowUsageFlagsNV -> Bool
(OpticalFlowUsageFlagsNV -> OpticalFlowUsageFlagsNV -> Bool)
-> (OpticalFlowUsageFlagsNV -> OpticalFlowUsageFlagsNV -> Bool)
-> Eq OpticalFlowUsageFlagsNV
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: OpticalFlowUsageFlagsNV -> OpticalFlowUsageFlagsNV -> Bool
== :: OpticalFlowUsageFlagsNV -> OpticalFlowUsageFlagsNV -> Bool
$c/= :: OpticalFlowUsageFlagsNV -> OpticalFlowUsageFlagsNV -> Bool
/= :: OpticalFlowUsageFlagsNV -> OpticalFlowUsageFlagsNV -> Bool
Eq, Eq OpticalFlowUsageFlagsNV
Eq OpticalFlowUsageFlagsNV =>
(OpticalFlowUsageFlagsNV -> OpticalFlowUsageFlagsNV -> Ordering)
-> (OpticalFlowUsageFlagsNV -> OpticalFlowUsageFlagsNV -> Bool)
-> (OpticalFlowUsageFlagsNV -> OpticalFlowUsageFlagsNV -> Bool)
-> (OpticalFlowUsageFlagsNV -> OpticalFlowUsageFlagsNV -> Bool)
-> (OpticalFlowUsageFlagsNV -> OpticalFlowUsageFlagsNV -> Bool)
-> (OpticalFlowUsageFlagsNV
    -> OpticalFlowUsageFlagsNV -> OpticalFlowUsageFlagsNV)
-> (OpticalFlowUsageFlagsNV
    -> OpticalFlowUsageFlagsNV -> OpticalFlowUsageFlagsNV)
-> Ord OpticalFlowUsageFlagsNV
OpticalFlowUsageFlagsNV -> OpticalFlowUsageFlagsNV -> Bool
OpticalFlowUsageFlagsNV -> OpticalFlowUsageFlagsNV -> Ordering
OpticalFlowUsageFlagsNV
-> OpticalFlowUsageFlagsNV -> OpticalFlowUsageFlagsNV
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: OpticalFlowUsageFlagsNV -> OpticalFlowUsageFlagsNV -> Ordering
compare :: OpticalFlowUsageFlagsNV -> OpticalFlowUsageFlagsNV -> Ordering
$c< :: OpticalFlowUsageFlagsNV -> OpticalFlowUsageFlagsNV -> Bool
< :: OpticalFlowUsageFlagsNV -> OpticalFlowUsageFlagsNV -> Bool
$c<= :: OpticalFlowUsageFlagsNV -> OpticalFlowUsageFlagsNV -> Bool
<= :: OpticalFlowUsageFlagsNV -> OpticalFlowUsageFlagsNV -> Bool
$c> :: OpticalFlowUsageFlagsNV -> OpticalFlowUsageFlagsNV -> Bool
> :: OpticalFlowUsageFlagsNV -> OpticalFlowUsageFlagsNV -> Bool
$c>= :: OpticalFlowUsageFlagsNV -> OpticalFlowUsageFlagsNV -> Bool
>= :: OpticalFlowUsageFlagsNV -> OpticalFlowUsageFlagsNV -> Bool
$cmax :: OpticalFlowUsageFlagsNV
-> OpticalFlowUsageFlagsNV -> OpticalFlowUsageFlagsNV
max :: OpticalFlowUsageFlagsNV
-> OpticalFlowUsageFlagsNV -> OpticalFlowUsageFlagsNV
$cmin :: OpticalFlowUsageFlagsNV
-> OpticalFlowUsageFlagsNV -> OpticalFlowUsageFlagsNV
min :: OpticalFlowUsageFlagsNV
-> OpticalFlowUsageFlagsNV -> OpticalFlowUsageFlagsNV
Ord, Ptr OpticalFlowUsageFlagsNV -> IO OpticalFlowUsageFlagsNV
Ptr OpticalFlowUsageFlagsNV -> Int -> IO OpticalFlowUsageFlagsNV
Ptr OpticalFlowUsageFlagsNV
-> Int -> OpticalFlowUsageFlagsNV -> IO ()
Ptr OpticalFlowUsageFlagsNV -> OpticalFlowUsageFlagsNV -> IO ()
OpticalFlowUsageFlagsNV -> Int
(OpticalFlowUsageFlagsNV -> Int)
-> (OpticalFlowUsageFlagsNV -> Int)
-> (Ptr OpticalFlowUsageFlagsNV
    -> Int -> IO OpticalFlowUsageFlagsNV)
-> (Ptr OpticalFlowUsageFlagsNV
    -> Int -> OpticalFlowUsageFlagsNV -> IO ())
-> (forall b. Ptr b -> Int -> IO OpticalFlowUsageFlagsNV)
-> (forall b. Ptr b -> Int -> OpticalFlowUsageFlagsNV -> IO ())
-> (Ptr OpticalFlowUsageFlagsNV -> IO OpticalFlowUsageFlagsNV)
-> (Ptr OpticalFlowUsageFlagsNV
    -> OpticalFlowUsageFlagsNV -> IO ())
-> Storable OpticalFlowUsageFlagsNV
forall b. Ptr b -> Int -> IO OpticalFlowUsageFlagsNV
forall b. Ptr b -> Int -> OpticalFlowUsageFlagsNV -> IO ()
forall a.
(a -> Int)
-> (a -> Int)
-> (Ptr a -> Int -> IO a)
-> (Ptr a -> Int -> a -> IO ())
-> (forall b. Ptr b -> Int -> IO a)
-> (forall b. Ptr b -> Int -> a -> IO ())
-> (Ptr a -> IO a)
-> (Ptr a -> a -> IO ())
-> Storable a
$csizeOf :: OpticalFlowUsageFlagsNV -> Int
sizeOf :: OpticalFlowUsageFlagsNV -> Int
$calignment :: OpticalFlowUsageFlagsNV -> Int
alignment :: OpticalFlowUsageFlagsNV -> Int
$cpeekElemOff :: Ptr OpticalFlowUsageFlagsNV -> Int -> IO OpticalFlowUsageFlagsNV
peekElemOff :: Ptr OpticalFlowUsageFlagsNV -> Int -> IO OpticalFlowUsageFlagsNV
$cpokeElemOff :: Ptr OpticalFlowUsageFlagsNV
-> Int -> OpticalFlowUsageFlagsNV -> IO ()
pokeElemOff :: Ptr OpticalFlowUsageFlagsNV
-> Int -> OpticalFlowUsageFlagsNV -> IO ()
$cpeekByteOff :: forall b. Ptr b -> Int -> IO OpticalFlowUsageFlagsNV
peekByteOff :: forall b. Ptr b -> Int -> IO OpticalFlowUsageFlagsNV
$cpokeByteOff :: forall b. Ptr b -> Int -> OpticalFlowUsageFlagsNV -> IO ()
pokeByteOff :: forall b. Ptr b -> Int -> OpticalFlowUsageFlagsNV -> IO ()
$cpeek :: Ptr OpticalFlowUsageFlagsNV -> IO OpticalFlowUsageFlagsNV
peek :: Ptr OpticalFlowUsageFlagsNV -> IO OpticalFlowUsageFlagsNV
$cpoke :: Ptr OpticalFlowUsageFlagsNV -> OpticalFlowUsageFlagsNV -> IO ()
poke :: Ptr OpticalFlowUsageFlagsNV -> OpticalFlowUsageFlagsNV -> IO ()
Storable, OpticalFlowUsageFlagsNV
OpticalFlowUsageFlagsNV -> Zero OpticalFlowUsageFlagsNV
forall a. a -> Zero a
$czero :: OpticalFlowUsageFlagsNV
zero :: OpticalFlowUsageFlagsNV
Zero, Eq OpticalFlowUsageFlagsNV
OpticalFlowUsageFlagsNV
Eq OpticalFlowUsageFlagsNV =>
(OpticalFlowUsageFlagsNV
 -> OpticalFlowUsageFlagsNV -> OpticalFlowUsageFlagsNV)
-> (OpticalFlowUsageFlagsNV
    -> OpticalFlowUsageFlagsNV -> OpticalFlowUsageFlagsNV)
-> (OpticalFlowUsageFlagsNV
    -> OpticalFlowUsageFlagsNV -> OpticalFlowUsageFlagsNV)
-> (OpticalFlowUsageFlagsNV -> OpticalFlowUsageFlagsNV)
-> (OpticalFlowUsageFlagsNV -> Int -> OpticalFlowUsageFlagsNV)
-> (OpticalFlowUsageFlagsNV -> Int -> OpticalFlowUsageFlagsNV)
-> OpticalFlowUsageFlagsNV
-> (Int -> OpticalFlowUsageFlagsNV)
-> (OpticalFlowUsageFlagsNV -> Int -> OpticalFlowUsageFlagsNV)
-> (OpticalFlowUsageFlagsNV -> Int -> OpticalFlowUsageFlagsNV)
-> (OpticalFlowUsageFlagsNV -> Int -> OpticalFlowUsageFlagsNV)
-> (OpticalFlowUsageFlagsNV -> Int -> Bool)
-> (OpticalFlowUsageFlagsNV -> Maybe Int)
-> (OpticalFlowUsageFlagsNV -> Int)
-> (OpticalFlowUsageFlagsNV -> Bool)
-> (OpticalFlowUsageFlagsNV -> Int -> OpticalFlowUsageFlagsNV)
-> (OpticalFlowUsageFlagsNV -> Int -> OpticalFlowUsageFlagsNV)
-> (OpticalFlowUsageFlagsNV -> Int -> OpticalFlowUsageFlagsNV)
-> (OpticalFlowUsageFlagsNV -> Int -> OpticalFlowUsageFlagsNV)
-> (OpticalFlowUsageFlagsNV -> Int -> OpticalFlowUsageFlagsNV)
-> (OpticalFlowUsageFlagsNV -> Int -> OpticalFlowUsageFlagsNV)
-> (OpticalFlowUsageFlagsNV -> Int)
-> Bits OpticalFlowUsageFlagsNV
Int -> OpticalFlowUsageFlagsNV
OpticalFlowUsageFlagsNV -> Bool
OpticalFlowUsageFlagsNV -> Int
OpticalFlowUsageFlagsNV -> Maybe Int
OpticalFlowUsageFlagsNV -> OpticalFlowUsageFlagsNV
OpticalFlowUsageFlagsNV -> Int -> Bool
OpticalFlowUsageFlagsNV -> Int -> OpticalFlowUsageFlagsNV
OpticalFlowUsageFlagsNV
-> OpticalFlowUsageFlagsNV -> OpticalFlowUsageFlagsNV
forall a.
Eq a =>
(a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> a
-> (Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> Bool)
-> (a -> Maybe Int)
-> (a -> Int)
-> (a -> Bool)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int)
-> Bits a
$c.&. :: OpticalFlowUsageFlagsNV
-> OpticalFlowUsageFlagsNV -> OpticalFlowUsageFlagsNV
.&. :: OpticalFlowUsageFlagsNV
-> OpticalFlowUsageFlagsNV -> OpticalFlowUsageFlagsNV
$c.|. :: OpticalFlowUsageFlagsNV
-> OpticalFlowUsageFlagsNV -> OpticalFlowUsageFlagsNV
.|. :: OpticalFlowUsageFlagsNV
-> OpticalFlowUsageFlagsNV -> OpticalFlowUsageFlagsNV
$cxor :: OpticalFlowUsageFlagsNV
-> OpticalFlowUsageFlagsNV -> OpticalFlowUsageFlagsNV
xor :: OpticalFlowUsageFlagsNV
-> OpticalFlowUsageFlagsNV -> OpticalFlowUsageFlagsNV
$ccomplement :: OpticalFlowUsageFlagsNV -> OpticalFlowUsageFlagsNV
complement :: OpticalFlowUsageFlagsNV -> OpticalFlowUsageFlagsNV
$cshift :: OpticalFlowUsageFlagsNV -> Int -> OpticalFlowUsageFlagsNV
shift :: OpticalFlowUsageFlagsNV -> Int -> OpticalFlowUsageFlagsNV
$crotate :: OpticalFlowUsageFlagsNV -> Int -> OpticalFlowUsageFlagsNV
rotate :: OpticalFlowUsageFlagsNV -> Int -> OpticalFlowUsageFlagsNV
$czeroBits :: OpticalFlowUsageFlagsNV
zeroBits :: OpticalFlowUsageFlagsNV
$cbit :: Int -> OpticalFlowUsageFlagsNV
bit :: Int -> OpticalFlowUsageFlagsNV
$csetBit :: OpticalFlowUsageFlagsNV -> Int -> OpticalFlowUsageFlagsNV
setBit :: OpticalFlowUsageFlagsNV -> Int -> OpticalFlowUsageFlagsNV
$cclearBit :: OpticalFlowUsageFlagsNV -> Int -> OpticalFlowUsageFlagsNV
clearBit :: OpticalFlowUsageFlagsNV -> Int -> OpticalFlowUsageFlagsNV
$ccomplementBit :: OpticalFlowUsageFlagsNV -> Int -> OpticalFlowUsageFlagsNV
complementBit :: OpticalFlowUsageFlagsNV -> Int -> OpticalFlowUsageFlagsNV
$ctestBit :: OpticalFlowUsageFlagsNV -> Int -> Bool
testBit :: OpticalFlowUsageFlagsNV -> Int -> Bool
$cbitSizeMaybe :: OpticalFlowUsageFlagsNV -> Maybe Int
bitSizeMaybe :: OpticalFlowUsageFlagsNV -> Maybe Int
$cbitSize :: OpticalFlowUsageFlagsNV -> Int
bitSize :: OpticalFlowUsageFlagsNV -> Int
$cisSigned :: OpticalFlowUsageFlagsNV -> Bool
isSigned :: OpticalFlowUsageFlagsNV -> Bool
$cshiftL :: OpticalFlowUsageFlagsNV -> Int -> OpticalFlowUsageFlagsNV
shiftL :: OpticalFlowUsageFlagsNV -> Int -> OpticalFlowUsageFlagsNV
$cunsafeShiftL :: OpticalFlowUsageFlagsNV -> Int -> OpticalFlowUsageFlagsNV
unsafeShiftL :: OpticalFlowUsageFlagsNV -> Int -> OpticalFlowUsageFlagsNV
$cshiftR :: OpticalFlowUsageFlagsNV -> Int -> OpticalFlowUsageFlagsNV
shiftR :: OpticalFlowUsageFlagsNV -> Int -> OpticalFlowUsageFlagsNV
$cunsafeShiftR :: OpticalFlowUsageFlagsNV -> Int -> OpticalFlowUsageFlagsNV
unsafeShiftR :: OpticalFlowUsageFlagsNV -> Int -> OpticalFlowUsageFlagsNV
$crotateL :: OpticalFlowUsageFlagsNV -> Int -> OpticalFlowUsageFlagsNV
rotateL :: OpticalFlowUsageFlagsNV -> Int -> OpticalFlowUsageFlagsNV
$crotateR :: OpticalFlowUsageFlagsNV -> Int -> OpticalFlowUsageFlagsNV
rotateR :: OpticalFlowUsageFlagsNV -> Int -> OpticalFlowUsageFlagsNV
$cpopCount :: OpticalFlowUsageFlagsNV -> Int
popCount :: OpticalFlowUsageFlagsNV -> Int
Bits, Bits OpticalFlowUsageFlagsNV
Bits OpticalFlowUsageFlagsNV =>
(OpticalFlowUsageFlagsNV -> Int)
-> (OpticalFlowUsageFlagsNV -> Int)
-> (OpticalFlowUsageFlagsNV -> Int)
-> FiniteBits OpticalFlowUsageFlagsNV
OpticalFlowUsageFlagsNV -> Int
forall b.
Bits b =>
(b -> Int) -> (b -> Int) -> (b -> Int) -> FiniteBits b
$cfiniteBitSize :: OpticalFlowUsageFlagsNV -> Int
finiteBitSize :: OpticalFlowUsageFlagsNV -> Int
$ccountLeadingZeros :: OpticalFlowUsageFlagsNV -> Int
countLeadingZeros :: OpticalFlowUsageFlagsNV -> Int
$ccountTrailingZeros :: OpticalFlowUsageFlagsNV -> Int
countTrailingZeros :: OpticalFlowUsageFlagsNV -> Int
FiniteBits)

-- No documentation found for Nested "VkOpticalFlowUsageFlagBitsNV" "VK_OPTICAL_FLOW_USAGE_UNKNOWN_NV"
pattern $mOPTICAL_FLOW_USAGE_UNKNOWN_NV :: forall {r}.
OpticalFlowUsageFlagsNV -> ((# #) -> r) -> ((# #) -> r) -> r
$bOPTICAL_FLOW_USAGE_UNKNOWN_NV :: OpticalFlowUsageFlagsNV
OPTICAL_FLOW_USAGE_UNKNOWN_NV = OpticalFlowUsageFlagBitsNV 0x00000000

-- No documentation found for Nested "VkOpticalFlowUsageFlagBitsNV" "VK_OPTICAL_FLOW_USAGE_INPUT_BIT_NV"
pattern $mOPTICAL_FLOW_USAGE_INPUT_BIT_NV :: forall {r}.
OpticalFlowUsageFlagsNV -> ((# #) -> r) -> ((# #) -> r) -> r
$bOPTICAL_FLOW_USAGE_INPUT_BIT_NV :: OpticalFlowUsageFlagsNV
OPTICAL_FLOW_USAGE_INPUT_BIT_NV = OpticalFlowUsageFlagBitsNV 0x00000001

-- No documentation found for Nested "VkOpticalFlowUsageFlagBitsNV" "VK_OPTICAL_FLOW_USAGE_OUTPUT_BIT_NV"
pattern $mOPTICAL_FLOW_USAGE_OUTPUT_BIT_NV :: forall {r}.
OpticalFlowUsageFlagsNV -> ((# #) -> r) -> ((# #) -> r) -> r
$bOPTICAL_FLOW_USAGE_OUTPUT_BIT_NV :: OpticalFlowUsageFlagsNV
OPTICAL_FLOW_USAGE_OUTPUT_BIT_NV = OpticalFlowUsageFlagBitsNV 0x00000002

-- No documentation found for Nested "VkOpticalFlowUsageFlagBitsNV" "VK_OPTICAL_FLOW_USAGE_HINT_BIT_NV"
pattern $mOPTICAL_FLOW_USAGE_HINT_BIT_NV :: forall {r}.
OpticalFlowUsageFlagsNV -> ((# #) -> r) -> ((# #) -> r) -> r
$bOPTICAL_FLOW_USAGE_HINT_BIT_NV :: OpticalFlowUsageFlagsNV
OPTICAL_FLOW_USAGE_HINT_BIT_NV = OpticalFlowUsageFlagBitsNV 0x00000004

-- No documentation found for Nested "VkOpticalFlowUsageFlagBitsNV" "VK_OPTICAL_FLOW_USAGE_COST_BIT_NV"
pattern $mOPTICAL_FLOW_USAGE_COST_BIT_NV :: forall {r}.
OpticalFlowUsageFlagsNV -> ((# #) -> r) -> ((# #) -> r) -> r
$bOPTICAL_FLOW_USAGE_COST_BIT_NV :: OpticalFlowUsageFlagsNV
OPTICAL_FLOW_USAGE_COST_BIT_NV = OpticalFlowUsageFlagBitsNV 0x00000008

-- No documentation found for Nested "VkOpticalFlowUsageFlagBitsNV" "VK_OPTICAL_FLOW_USAGE_GLOBAL_FLOW_BIT_NV"
pattern $mOPTICAL_FLOW_USAGE_GLOBAL_FLOW_BIT_NV :: forall {r}.
OpticalFlowUsageFlagsNV -> ((# #) -> r) -> ((# #) -> r) -> r
$bOPTICAL_FLOW_USAGE_GLOBAL_FLOW_BIT_NV :: OpticalFlowUsageFlagsNV
OPTICAL_FLOW_USAGE_GLOBAL_FLOW_BIT_NV = OpticalFlowUsageFlagBitsNV 0x00000010

conNameOpticalFlowUsageFlagBitsNV :: String
conNameOpticalFlowUsageFlagBitsNV :: String
conNameOpticalFlowUsageFlagBitsNV = String
"OpticalFlowUsageFlagBitsNV"

enumPrefixOpticalFlowUsageFlagBitsNV :: String
enumPrefixOpticalFlowUsageFlagBitsNV :: String
enumPrefixOpticalFlowUsageFlagBitsNV = String
"OPTICAL_FLOW_USAGE_"

showTableOpticalFlowUsageFlagBitsNV :: [(OpticalFlowUsageFlagBitsNV, String)]
showTableOpticalFlowUsageFlagBitsNV :: [(OpticalFlowUsageFlagsNV, String)]
showTableOpticalFlowUsageFlagBitsNV =
  [
    ( OpticalFlowUsageFlagsNV
OPTICAL_FLOW_USAGE_UNKNOWN_NV
    , String
"UNKNOWN_NV"
    )
  ,
    ( OpticalFlowUsageFlagsNV
OPTICAL_FLOW_USAGE_INPUT_BIT_NV
    , String
"INPUT_BIT_NV"
    )
  ,
    ( OpticalFlowUsageFlagsNV
OPTICAL_FLOW_USAGE_OUTPUT_BIT_NV
    , String
"OUTPUT_BIT_NV"
    )
  ,
    ( OpticalFlowUsageFlagsNV
OPTICAL_FLOW_USAGE_HINT_BIT_NV
    , String
"HINT_BIT_NV"
    )
  ,
    ( OpticalFlowUsageFlagsNV
OPTICAL_FLOW_USAGE_COST_BIT_NV
    , String
"COST_BIT_NV"
    )
  ,
    ( OpticalFlowUsageFlagsNV
OPTICAL_FLOW_USAGE_GLOBAL_FLOW_BIT_NV
    , String
"GLOBAL_FLOW_BIT_NV"
    )
  ]

instance Show OpticalFlowUsageFlagBitsNV where
  showsPrec :: Int -> OpticalFlowUsageFlagsNV -> ShowS
showsPrec =
    String
-> [(OpticalFlowUsageFlagsNV, String)]
-> String
-> (OpticalFlowUsageFlagsNV -> Word32)
-> (Word32 -> ShowS)
-> Int
-> OpticalFlowUsageFlagsNV
-> ShowS
forall a i.
Eq a =>
String
-> [(a, String)]
-> String
-> (a -> i)
-> (i -> ShowS)
-> Int
-> a
-> ShowS
enumShowsPrec
      String
enumPrefixOpticalFlowUsageFlagBitsNV
      [(OpticalFlowUsageFlagsNV, String)]
showTableOpticalFlowUsageFlagBitsNV
      String
conNameOpticalFlowUsageFlagBitsNV
      (\(OpticalFlowUsageFlagBitsNV Word32
x) -> Word32
x)
      (\Word32
x -> String -> ShowS
showString String
"0x" ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Word32 -> ShowS
forall a. Integral a => a -> ShowS
showHex Word32
x)

instance Read OpticalFlowUsageFlagBitsNV where
  readPrec :: ReadPrec OpticalFlowUsageFlagsNV
readPrec =
    String
-> [(OpticalFlowUsageFlagsNV, String)]
-> String
-> (Word32 -> OpticalFlowUsageFlagsNV)
-> ReadPrec OpticalFlowUsageFlagsNV
forall i a.
Read i =>
String -> [(a, String)] -> String -> (i -> a) -> ReadPrec a
enumReadPrec
      String
enumPrefixOpticalFlowUsageFlagBitsNV
      [(OpticalFlowUsageFlagsNV, String)]
showTableOpticalFlowUsageFlagBitsNV
      String
conNameOpticalFlowUsageFlagBitsNV
      Word32 -> OpticalFlowUsageFlagsNV
OpticalFlowUsageFlagBitsNV

-- | VkOpticalFlowPerformanceLevelNV - Optical flow performance level types
--
-- = Description
--
-- -   'OPTICAL_FLOW_PERFORMANCE_LEVEL_SLOW_NV' is a level with slower
--     performance but higher quality.
--
-- -   'OPTICAL_FLOW_PERFORMANCE_LEVEL_MEDIUM_NV' is a level with medium
--     performance and medium quality.
--
-- -   'OPTICAL_FLOW_PERFORMANCE_LEVEL_FAST_NV' 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_NV_optical_flow VK_NV_optical_flow>,
-- 'OpticalFlowSessionCreateInfoNV'
newtype OpticalFlowPerformanceLevelNV = OpticalFlowPerformanceLevelNV Int32
  deriving newtype (OpticalFlowPerformanceLevelNV
-> OpticalFlowPerformanceLevelNV -> Bool
(OpticalFlowPerformanceLevelNV
 -> OpticalFlowPerformanceLevelNV -> Bool)
-> (OpticalFlowPerformanceLevelNV
    -> OpticalFlowPerformanceLevelNV -> Bool)
-> Eq OpticalFlowPerformanceLevelNV
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: OpticalFlowPerformanceLevelNV
-> OpticalFlowPerformanceLevelNV -> Bool
== :: OpticalFlowPerformanceLevelNV
-> OpticalFlowPerformanceLevelNV -> Bool
$c/= :: OpticalFlowPerformanceLevelNV
-> OpticalFlowPerformanceLevelNV -> Bool
/= :: OpticalFlowPerformanceLevelNV
-> OpticalFlowPerformanceLevelNV -> Bool
Eq, Eq OpticalFlowPerformanceLevelNV
Eq OpticalFlowPerformanceLevelNV =>
(OpticalFlowPerformanceLevelNV
 -> OpticalFlowPerformanceLevelNV -> Ordering)
-> (OpticalFlowPerformanceLevelNV
    -> OpticalFlowPerformanceLevelNV -> Bool)
-> (OpticalFlowPerformanceLevelNV
    -> OpticalFlowPerformanceLevelNV -> Bool)
-> (OpticalFlowPerformanceLevelNV
    -> OpticalFlowPerformanceLevelNV -> Bool)
-> (OpticalFlowPerformanceLevelNV
    -> OpticalFlowPerformanceLevelNV -> Bool)
-> (OpticalFlowPerformanceLevelNV
    -> OpticalFlowPerformanceLevelNV -> OpticalFlowPerformanceLevelNV)
-> (OpticalFlowPerformanceLevelNV
    -> OpticalFlowPerformanceLevelNV -> OpticalFlowPerformanceLevelNV)
-> Ord OpticalFlowPerformanceLevelNV
OpticalFlowPerformanceLevelNV
-> OpticalFlowPerformanceLevelNV -> Bool
OpticalFlowPerformanceLevelNV
-> OpticalFlowPerformanceLevelNV -> Ordering
OpticalFlowPerformanceLevelNV
-> OpticalFlowPerformanceLevelNV -> OpticalFlowPerformanceLevelNV
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: OpticalFlowPerformanceLevelNV
-> OpticalFlowPerformanceLevelNV -> Ordering
compare :: OpticalFlowPerformanceLevelNV
-> OpticalFlowPerformanceLevelNV -> Ordering
$c< :: OpticalFlowPerformanceLevelNV
-> OpticalFlowPerformanceLevelNV -> Bool
< :: OpticalFlowPerformanceLevelNV
-> OpticalFlowPerformanceLevelNV -> Bool
$c<= :: OpticalFlowPerformanceLevelNV
-> OpticalFlowPerformanceLevelNV -> Bool
<= :: OpticalFlowPerformanceLevelNV
-> OpticalFlowPerformanceLevelNV -> Bool
$c> :: OpticalFlowPerformanceLevelNV
-> OpticalFlowPerformanceLevelNV -> Bool
> :: OpticalFlowPerformanceLevelNV
-> OpticalFlowPerformanceLevelNV -> Bool
$c>= :: OpticalFlowPerformanceLevelNV
-> OpticalFlowPerformanceLevelNV -> Bool
>= :: OpticalFlowPerformanceLevelNV
-> OpticalFlowPerformanceLevelNV -> Bool
$cmax :: OpticalFlowPerformanceLevelNV
-> OpticalFlowPerformanceLevelNV -> OpticalFlowPerformanceLevelNV
max :: OpticalFlowPerformanceLevelNV
-> OpticalFlowPerformanceLevelNV -> OpticalFlowPerformanceLevelNV
$cmin :: OpticalFlowPerformanceLevelNV
-> OpticalFlowPerformanceLevelNV -> OpticalFlowPerformanceLevelNV
min :: OpticalFlowPerformanceLevelNV
-> OpticalFlowPerformanceLevelNV -> OpticalFlowPerformanceLevelNV
Ord, Ptr OpticalFlowPerformanceLevelNV
-> IO OpticalFlowPerformanceLevelNV
Ptr OpticalFlowPerformanceLevelNV
-> Int -> IO OpticalFlowPerformanceLevelNV
Ptr OpticalFlowPerformanceLevelNV
-> Int -> OpticalFlowPerformanceLevelNV -> IO ()
Ptr OpticalFlowPerformanceLevelNV
-> OpticalFlowPerformanceLevelNV -> IO ()
OpticalFlowPerformanceLevelNV -> Int
(OpticalFlowPerformanceLevelNV -> Int)
-> (OpticalFlowPerformanceLevelNV -> Int)
-> (Ptr OpticalFlowPerformanceLevelNV
    -> Int -> IO OpticalFlowPerformanceLevelNV)
-> (Ptr OpticalFlowPerformanceLevelNV
    -> Int -> OpticalFlowPerformanceLevelNV -> IO ())
-> (forall b. Ptr b -> Int -> IO OpticalFlowPerformanceLevelNV)
-> (forall b.
    Ptr b -> Int -> OpticalFlowPerformanceLevelNV -> IO ())
-> (Ptr OpticalFlowPerformanceLevelNV
    -> IO OpticalFlowPerformanceLevelNV)
-> (Ptr OpticalFlowPerformanceLevelNV
    -> OpticalFlowPerformanceLevelNV -> IO ())
-> Storable OpticalFlowPerformanceLevelNV
forall b. Ptr b -> Int -> IO OpticalFlowPerformanceLevelNV
forall b. Ptr b -> Int -> OpticalFlowPerformanceLevelNV -> IO ()
forall a.
(a -> Int)
-> (a -> Int)
-> (Ptr a -> Int -> IO a)
-> (Ptr a -> Int -> a -> IO ())
-> (forall b. Ptr b -> Int -> IO a)
-> (forall b. Ptr b -> Int -> a -> IO ())
-> (Ptr a -> IO a)
-> (Ptr a -> a -> IO ())
-> Storable a
$csizeOf :: OpticalFlowPerformanceLevelNV -> Int
sizeOf :: OpticalFlowPerformanceLevelNV -> Int
$calignment :: OpticalFlowPerformanceLevelNV -> Int
alignment :: OpticalFlowPerformanceLevelNV -> Int
$cpeekElemOff :: Ptr OpticalFlowPerformanceLevelNV
-> Int -> IO OpticalFlowPerformanceLevelNV
peekElemOff :: Ptr OpticalFlowPerformanceLevelNV
-> Int -> IO OpticalFlowPerformanceLevelNV
$cpokeElemOff :: Ptr OpticalFlowPerformanceLevelNV
-> Int -> OpticalFlowPerformanceLevelNV -> IO ()
pokeElemOff :: Ptr OpticalFlowPerformanceLevelNV
-> Int -> OpticalFlowPerformanceLevelNV -> IO ()
$cpeekByteOff :: forall b. Ptr b -> Int -> IO OpticalFlowPerformanceLevelNV
peekByteOff :: forall b. Ptr b -> Int -> IO OpticalFlowPerformanceLevelNV
$cpokeByteOff :: forall b. Ptr b -> Int -> OpticalFlowPerformanceLevelNV -> IO ()
pokeByteOff :: forall b. Ptr b -> Int -> OpticalFlowPerformanceLevelNV -> IO ()
$cpeek :: Ptr OpticalFlowPerformanceLevelNV
-> IO OpticalFlowPerformanceLevelNV
peek :: Ptr OpticalFlowPerformanceLevelNV
-> IO OpticalFlowPerformanceLevelNV
$cpoke :: Ptr OpticalFlowPerformanceLevelNV
-> OpticalFlowPerformanceLevelNV -> IO ()
poke :: Ptr OpticalFlowPerformanceLevelNV
-> OpticalFlowPerformanceLevelNV -> IO ()
Storable, OpticalFlowPerformanceLevelNV
OpticalFlowPerformanceLevelNV -> Zero OpticalFlowPerformanceLevelNV
forall a. a -> Zero a
$czero :: OpticalFlowPerformanceLevelNV
zero :: OpticalFlowPerformanceLevelNV
Zero)

-- No documentation found for Nested "VkOpticalFlowPerformanceLevelNV" "VK_OPTICAL_FLOW_PERFORMANCE_LEVEL_UNKNOWN_NV"
pattern $mOPTICAL_FLOW_PERFORMANCE_LEVEL_UNKNOWN_NV :: forall {r}.
OpticalFlowPerformanceLevelNV -> ((# #) -> r) -> ((# #) -> r) -> r
$bOPTICAL_FLOW_PERFORMANCE_LEVEL_UNKNOWN_NV :: OpticalFlowPerformanceLevelNV
OPTICAL_FLOW_PERFORMANCE_LEVEL_UNKNOWN_NV = OpticalFlowPerformanceLevelNV 0

-- No documentation found for Nested "VkOpticalFlowPerformanceLevelNV" "VK_OPTICAL_FLOW_PERFORMANCE_LEVEL_SLOW_NV"
pattern $mOPTICAL_FLOW_PERFORMANCE_LEVEL_SLOW_NV :: forall {r}.
OpticalFlowPerformanceLevelNV -> ((# #) -> r) -> ((# #) -> r) -> r
$bOPTICAL_FLOW_PERFORMANCE_LEVEL_SLOW_NV :: OpticalFlowPerformanceLevelNV
OPTICAL_FLOW_PERFORMANCE_LEVEL_SLOW_NV = OpticalFlowPerformanceLevelNV 1

-- No documentation found for Nested "VkOpticalFlowPerformanceLevelNV" "VK_OPTICAL_FLOW_PERFORMANCE_LEVEL_MEDIUM_NV"
pattern $mOPTICAL_FLOW_PERFORMANCE_LEVEL_MEDIUM_NV :: forall {r}.
OpticalFlowPerformanceLevelNV -> ((# #) -> r) -> ((# #) -> r) -> r
$bOPTICAL_FLOW_PERFORMANCE_LEVEL_MEDIUM_NV :: OpticalFlowPerformanceLevelNV
OPTICAL_FLOW_PERFORMANCE_LEVEL_MEDIUM_NV = OpticalFlowPerformanceLevelNV 2

-- No documentation found for Nested "VkOpticalFlowPerformanceLevelNV" "VK_OPTICAL_FLOW_PERFORMANCE_LEVEL_FAST_NV"
pattern $mOPTICAL_FLOW_PERFORMANCE_LEVEL_FAST_NV :: forall {r}.
OpticalFlowPerformanceLevelNV -> ((# #) -> r) -> ((# #) -> r) -> r
$bOPTICAL_FLOW_PERFORMANCE_LEVEL_FAST_NV :: OpticalFlowPerformanceLevelNV
OPTICAL_FLOW_PERFORMANCE_LEVEL_FAST_NV = OpticalFlowPerformanceLevelNV 3

{-# COMPLETE
  OPTICAL_FLOW_PERFORMANCE_LEVEL_UNKNOWN_NV
  , OPTICAL_FLOW_PERFORMANCE_LEVEL_SLOW_NV
  , OPTICAL_FLOW_PERFORMANCE_LEVEL_MEDIUM_NV
  , OPTICAL_FLOW_PERFORMANCE_LEVEL_FAST_NV ::
    OpticalFlowPerformanceLevelNV
  #-}

conNameOpticalFlowPerformanceLevelNV :: String
conNameOpticalFlowPerformanceLevelNV :: String
conNameOpticalFlowPerformanceLevelNV = String
"OpticalFlowPerformanceLevelNV"

enumPrefixOpticalFlowPerformanceLevelNV :: String
enumPrefixOpticalFlowPerformanceLevelNV :: String
enumPrefixOpticalFlowPerformanceLevelNV = String
"OPTICAL_FLOW_PERFORMANCE_LEVEL_"

showTableOpticalFlowPerformanceLevelNV :: [(OpticalFlowPerformanceLevelNV, String)]
showTableOpticalFlowPerformanceLevelNV :: [(OpticalFlowPerformanceLevelNV, String)]
showTableOpticalFlowPerformanceLevelNV =
  [
    ( OpticalFlowPerformanceLevelNV
OPTICAL_FLOW_PERFORMANCE_LEVEL_UNKNOWN_NV
    , String
"UNKNOWN_NV"
    )
  ,
    ( OpticalFlowPerformanceLevelNV
OPTICAL_FLOW_PERFORMANCE_LEVEL_SLOW_NV
    , String
"SLOW_NV"
    )
  ,
    ( OpticalFlowPerformanceLevelNV
OPTICAL_FLOW_PERFORMANCE_LEVEL_MEDIUM_NV
    , String
"MEDIUM_NV"
    )
  ,
    ( OpticalFlowPerformanceLevelNV
OPTICAL_FLOW_PERFORMANCE_LEVEL_FAST_NV
    , String
"FAST_NV"
    )
  ]

instance Show OpticalFlowPerformanceLevelNV where
  showsPrec :: Int -> OpticalFlowPerformanceLevelNV -> ShowS
showsPrec =
    String
-> [(OpticalFlowPerformanceLevelNV, String)]
-> String
-> (OpticalFlowPerformanceLevelNV -> Int32)
-> (Int32 -> ShowS)
-> Int
-> OpticalFlowPerformanceLevelNV
-> ShowS
forall a i.
Eq a =>
String
-> [(a, String)]
-> String
-> (a -> i)
-> (i -> ShowS)
-> Int
-> a
-> ShowS
enumShowsPrec
      String
enumPrefixOpticalFlowPerformanceLevelNV
      [(OpticalFlowPerformanceLevelNV, String)]
showTableOpticalFlowPerformanceLevelNV
      String
conNameOpticalFlowPerformanceLevelNV
      (\(OpticalFlowPerformanceLevelNV Int32
x) -> Int32
x)
      (Int -> Int32 -> ShowS
forall a. Show a => Int -> a -> ShowS
showsPrec Int
11)

instance Read OpticalFlowPerformanceLevelNV where
  readPrec :: ReadPrec OpticalFlowPerformanceLevelNV
readPrec =
    String
-> [(OpticalFlowPerformanceLevelNV, String)]
-> String
-> (Int32 -> OpticalFlowPerformanceLevelNV)
-> ReadPrec OpticalFlowPerformanceLevelNV
forall i a.
Read i =>
String -> [(a, String)] -> String -> (i -> a) -> ReadPrec a
enumReadPrec
      String
enumPrefixOpticalFlowPerformanceLevelNV
      [(OpticalFlowPerformanceLevelNV, String)]
showTableOpticalFlowPerformanceLevelNV
      String
conNameOpticalFlowPerformanceLevelNV
      Int32 -> OpticalFlowPerformanceLevelNV
OpticalFlowPerformanceLevelNV

-- | VkOpticalFlowSessionBindingPointNV - Binding points of an optical flow
-- session
--
-- = Description
--
-- -   'OPTICAL_FLOW_SESSION_BINDING_POINT_INPUT_NV' specifies the binding
--     point for the input frame.
--
-- -   'OPTICAL_FLOW_SESSION_BINDING_POINT_REFERENCE_NV' specifies the
--     binding point for the input reference frame.
--
-- -   'OPTICAL_FLOW_SESSION_BINDING_POINT_HINT_NV' specifies the binding
--     point for the optional external hint flow vectors.
--
-- -   'OPTICAL_FLOW_SESSION_BINDING_POINT_FLOW_VECTOR_NV' specifies the
--     binding point for output flow vectors of default forward flow
--     calculation.
--
-- -   'OPTICAL_FLOW_SESSION_BINDING_POINT_BACKWARD_FLOW_VECTOR_NV'
--     specifies the binding point for the optional output flow vector map
--     of optional backward flow calculation.
--
-- -   'OPTICAL_FLOW_SESSION_BINDING_POINT_COST_NV' specifies the binding
--     point for the optional output cost map of default forward flow
--     calculation.
--
-- -   'OPTICAL_FLOW_SESSION_BINDING_POINT_BACKWARD_COST_NV' specifies the
--     binding point for the optional output cost map of optional backward
--     flow calculation.
--
-- -   'OPTICAL_FLOW_SESSION_BINDING_POINT_GLOBAL_FLOW_NV' specifies the
--     binding point for the optional global flow value of default forward
--     flow calculation.
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_optical_flow VK_NV_optical_flow>,
-- 'bindOpticalFlowSessionImageNV'
newtype OpticalFlowSessionBindingPointNV = OpticalFlowSessionBindingPointNV Int32
  deriving newtype (OpticalFlowSessionBindingPointNV
-> OpticalFlowSessionBindingPointNV -> Bool
(OpticalFlowSessionBindingPointNV
 -> OpticalFlowSessionBindingPointNV -> Bool)
-> (OpticalFlowSessionBindingPointNV
    -> OpticalFlowSessionBindingPointNV -> Bool)
-> Eq OpticalFlowSessionBindingPointNV
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: OpticalFlowSessionBindingPointNV
-> OpticalFlowSessionBindingPointNV -> Bool
== :: OpticalFlowSessionBindingPointNV
-> OpticalFlowSessionBindingPointNV -> Bool
$c/= :: OpticalFlowSessionBindingPointNV
-> OpticalFlowSessionBindingPointNV -> Bool
/= :: OpticalFlowSessionBindingPointNV
-> OpticalFlowSessionBindingPointNV -> Bool
Eq, Eq OpticalFlowSessionBindingPointNV
Eq OpticalFlowSessionBindingPointNV =>
(OpticalFlowSessionBindingPointNV
 -> OpticalFlowSessionBindingPointNV -> Ordering)
-> (OpticalFlowSessionBindingPointNV
    -> OpticalFlowSessionBindingPointNV -> Bool)
-> (OpticalFlowSessionBindingPointNV
    -> OpticalFlowSessionBindingPointNV -> Bool)
-> (OpticalFlowSessionBindingPointNV
    -> OpticalFlowSessionBindingPointNV -> Bool)
-> (OpticalFlowSessionBindingPointNV
    -> OpticalFlowSessionBindingPointNV -> Bool)
-> (OpticalFlowSessionBindingPointNV
    -> OpticalFlowSessionBindingPointNV
    -> OpticalFlowSessionBindingPointNV)
-> (OpticalFlowSessionBindingPointNV
    -> OpticalFlowSessionBindingPointNV
    -> OpticalFlowSessionBindingPointNV)
-> Ord OpticalFlowSessionBindingPointNV
OpticalFlowSessionBindingPointNV
-> OpticalFlowSessionBindingPointNV -> Bool
OpticalFlowSessionBindingPointNV
-> OpticalFlowSessionBindingPointNV -> Ordering
OpticalFlowSessionBindingPointNV
-> OpticalFlowSessionBindingPointNV
-> OpticalFlowSessionBindingPointNV
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: OpticalFlowSessionBindingPointNV
-> OpticalFlowSessionBindingPointNV -> Ordering
compare :: OpticalFlowSessionBindingPointNV
-> OpticalFlowSessionBindingPointNV -> Ordering
$c< :: OpticalFlowSessionBindingPointNV
-> OpticalFlowSessionBindingPointNV -> Bool
< :: OpticalFlowSessionBindingPointNV
-> OpticalFlowSessionBindingPointNV -> Bool
$c<= :: OpticalFlowSessionBindingPointNV
-> OpticalFlowSessionBindingPointNV -> Bool
<= :: OpticalFlowSessionBindingPointNV
-> OpticalFlowSessionBindingPointNV -> Bool
$c> :: OpticalFlowSessionBindingPointNV
-> OpticalFlowSessionBindingPointNV -> Bool
> :: OpticalFlowSessionBindingPointNV
-> OpticalFlowSessionBindingPointNV -> Bool
$c>= :: OpticalFlowSessionBindingPointNV
-> OpticalFlowSessionBindingPointNV -> Bool
>= :: OpticalFlowSessionBindingPointNV
-> OpticalFlowSessionBindingPointNV -> Bool
$cmax :: OpticalFlowSessionBindingPointNV
-> OpticalFlowSessionBindingPointNV
-> OpticalFlowSessionBindingPointNV
max :: OpticalFlowSessionBindingPointNV
-> OpticalFlowSessionBindingPointNV
-> OpticalFlowSessionBindingPointNV
$cmin :: OpticalFlowSessionBindingPointNV
-> OpticalFlowSessionBindingPointNV
-> OpticalFlowSessionBindingPointNV
min :: OpticalFlowSessionBindingPointNV
-> OpticalFlowSessionBindingPointNV
-> OpticalFlowSessionBindingPointNV
Ord, Ptr OpticalFlowSessionBindingPointNV
-> IO OpticalFlowSessionBindingPointNV
Ptr OpticalFlowSessionBindingPointNV
-> Int -> IO OpticalFlowSessionBindingPointNV
Ptr OpticalFlowSessionBindingPointNV
-> Int -> OpticalFlowSessionBindingPointNV -> IO ()
Ptr OpticalFlowSessionBindingPointNV
-> OpticalFlowSessionBindingPointNV -> IO ()
OpticalFlowSessionBindingPointNV -> Int
(OpticalFlowSessionBindingPointNV -> Int)
-> (OpticalFlowSessionBindingPointNV -> Int)
-> (Ptr OpticalFlowSessionBindingPointNV
    -> Int -> IO OpticalFlowSessionBindingPointNV)
-> (Ptr OpticalFlowSessionBindingPointNV
    -> Int -> OpticalFlowSessionBindingPointNV -> IO ())
-> (forall b. Ptr b -> Int -> IO OpticalFlowSessionBindingPointNV)
-> (forall b.
    Ptr b -> Int -> OpticalFlowSessionBindingPointNV -> IO ())
-> (Ptr OpticalFlowSessionBindingPointNV
    -> IO OpticalFlowSessionBindingPointNV)
-> (Ptr OpticalFlowSessionBindingPointNV
    -> OpticalFlowSessionBindingPointNV -> IO ())
-> Storable OpticalFlowSessionBindingPointNV
forall b. Ptr b -> Int -> IO OpticalFlowSessionBindingPointNV
forall b. Ptr b -> Int -> OpticalFlowSessionBindingPointNV -> IO ()
forall a.
(a -> Int)
-> (a -> Int)
-> (Ptr a -> Int -> IO a)
-> (Ptr a -> Int -> a -> IO ())
-> (forall b. Ptr b -> Int -> IO a)
-> (forall b. Ptr b -> Int -> a -> IO ())
-> (Ptr a -> IO a)
-> (Ptr a -> a -> IO ())
-> Storable a
$csizeOf :: OpticalFlowSessionBindingPointNV -> Int
sizeOf :: OpticalFlowSessionBindingPointNV -> Int
$calignment :: OpticalFlowSessionBindingPointNV -> Int
alignment :: OpticalFlowSessionBindingPointNV -> Int
$cpeekElemOff :: Ptr OpticalFlowSessionBindingPointNV
-> Int -> IO OpticalFlowSessionBindingPointNV
peekElemOff :: Ptr OpticalFlowSessionBindingPointNV
-> Int -> IO OpticalFlowSessionBindingPointNV
$cpokeElemOff :: Ptr OpticalFlowSessionBindingPointNV
-> Int -> OpticalFlowSessionBindingPointNV -> IO ()
pokeElemOff :: Ptr OpticalFlowSessionBindingPointNV
-> Int -> OpticalFlowSessionBindingPointNV -> IO ()
$cpeekByteOff :: forall b. Ptr b -> Int -> IO OpticalFlowSessionBindingPointNV
peekByteOff :: forall b. Ptr b -> Int -> IO OpticalFlowSessionBindingPointNV
$cpokeByteOff :: forall b. Ptr b -> Int -> OpticalFlowSessionBindingPointNV -> IO ()
pokeByteOff :: forall b. Ptr b -> Int -> OpticalFlowSessionBindingPointNV -> IO ()
$cpeek :: Ptr OpticalFlowSessionBindingPointNV
-> IO OpticalFlowSessionBindingPointNV
peek :: Ptr OpticalFlowSessionBindingPointNV
-> IO OpticalFlowSessionBindingPointNV
$cpoke :: Ptr OpticalFlowSessionBindingPointNV
-> OpticalFlowSessionBindingPointNV -> IO ()
poke :: Ptr OpticalFlowSessionBindingPointNV
-> OpticalFlowSessionBindingPointNV -> IO ()
Storable, OpticalFlowSessionBindingPointNV
OpticalFlowSessionBindingPointNV
-> Zero OpticalFlowSessionBindingPointNV
forall a. a -> Zero a
$czero :: OpticalFlowSessionBindingPointNV
zero :: OpticalFlowSessionBindingPointNV
Zero)

-- No documentation found for Nested "VkOpticalFlowSessionBindingPointNV" "VK_OPTICAL_FLOW_SESSION_BINDING_POINT_UNKNOWN_NV"
pattern $mOPTICAL_FLOW_SESSION_BINDING_POINT_UNKNOWN_NV :: forall {r}.
OpticalFlowSessionBindingPointNV
-> ((# #) -> r) -> ((# #) -> r) -> r
$bOPTICAL_FLOW_SESSION_BINDING_POINT_UNKNOWN_NV :: OpticalFlowSessionBindingPointNV
OPTICAL_FLOW_SESSION_BINDING_POINT_UNKNOWN_NV = OpticalFlowSessionBindingPointNV 0

-- No documentation found for Nested "VkOpticalFlowSessionBindingPointNV" "VK_OPTICAL_FLOW_SESSION_BINDING_POINT_INPUT_NV"
pattern $mOPTICAL_FLOW_SESSION_BINDING_POINT_INPUT_NV :: forall {r}.
OpticalFlowSessionBindingPointNV
-> ((# #) -> r) -> ((# #) -> r) -> r
$bOPTICAL_FLOW_SESSION_BINDING_POINT_INPUT_NV :: OpticalFlowSessionBindingPointNV
OPTICAL_FLOW_SESSION_BINDING_POINT_INPUT_NV = OpticalFlowSessionBindingPointNV 1

-- No documentation found for Nested "VkOpticalFlowSessionBindingPointNV" "VK_OPTICAL_FLOW_SESSION_BINDING_POINT_REFERENCE_NV"
pattern $mOPTICAL_FLOW_SESSION_BINDING_POINT_REFERENCE_NV :: forall {r}.
OpticalFlowSessionBindingPointNV
-> ((# #) -> r) -> ((# #) -> r) -> r
$bOPTICAL_FLOW_SESSION_BINDING_POINT_REFERENCE_NV :: OpticalFlowSessionBindingPointNV
OPTICAL_FLOW_SESSION_BINDING_POINT_REFERENCE_NV = OpticalFlowSessionBindingPointNV 2

-- No documentation found for Nested "VkOpticalFlowSessionBindingPointNV" "VK_OPTICAL_FLOW_SESSION_BINDING_POINT_HINT_NV"
pattern $mOPTICAL_FLOW_SESSION_BINDING_POINT_HINT_NV :: forall {r}.
OpticalFlowSessionBindingPointNV
-> ((# #) -> r) -> ((# #) -> r) -> r
$bOPTICAL_FLOW_SESSION_BINDING_POINT_HINT_NV :: OpticalFlowSessionBindingPointNV
OPTICAL_FLOW_SESSION_BINDING_POINT_HINT_NV = OpticalFlowSessionBindingPointNV 3

-- No documentation found for Nested "VkOpticalFlowSessionBindingPointNV" "VK_OPTICAL_FLOW_SESSION_BINDING_POINT_FLOW_VECTOR_NV"
pattern $mOPTICAL_FLOW_SESSION_BINDING_POINT_FLOW_VECTOR_NV :: forall {r}.
OpticalFlowSessionBindingPointNV
-> ((# #) -> r) -> ((# #) -> r) -> r
$bOPTICAL_FLOW_SESSION_BINDING_POINT_FLOW_VECTOR_NV :: OpticalFlowSessionBindingPointNV
OPTICAL_FLOW_SESSION_BINDING_POINT_FLOW_VECTOR_NV = OpticalFlowSessionBindingPointNV 4

-- No documentation found for Nested "VkOpticalFlowSessionBindingPointNV" "VK_OPTICAL_FLOW_SESSION_BINDING_POINT_BACKWARD_FLOW_VECTOR_NV"
pattern $mOPTICAL_FLOW_SESSION_BINDING_POINT_BACKWARD_FLOW_VECTOR_NV :: forall {r}.
OpticalFlowSessionBindingPointNV
-> ((# #) -> r) -> ((# #) -> r) -> r
$bOPTICAL_FLOW_SESSION_BINDING_POINT_BACKWARD_FLOW_VECTOR_NV :: OpticalFlowSessionBindingPointNV
OPTICAL_FLOW_SESSION_BINDING_POINT_BACKWARD_FLOW_VECTOR_NV = OpticalFlowSessionBindingPointNV 5

-- No documentation found for Nested "VkOpticalFlowSessionBindingPointNV" "VK_OPTICAL_FLOW_SESSION_BINDING_POINT_COST_NV"
pattern $mOPTICAL_FLOW_SESSION_BINDING_POINT_COST_NV :: forall {r}.
OpticalFlowSessionBindingPointNV
-> ((# #) -> r) -> ((# #) -> r) -> r
$bOPTICAL_FLOW_SESSION_BINDING_POINT_COST_NV :: OpticalFlowSessionBindingPointNV
OPTICAL_FLOW_SESSION_BINDING_POINT_COST_NV = OpticalFlowSessionBindingPointNV 6

-- No documentation found for Nested "VkOpticalFlowSessionBindingPointNV" "VK_OPTICAL_FLOW_SESSION_BINDING_POINT_BACKWARD_COST_NV"
pattern $mOPTICAL_FLOW_SESSION_BINDING_POINT_BACKWARD_COST_NV :: forall {r}.
OpticalFlowSessionBindingPointNV
-> ((# #) -> r) -> ((# #) -> r) -> r
$bOPTICAL_FLOW_SESSION_BINDING_POINT_BACKWARD_COST_NV :: OpticalFlowSessionBindingPointNV
OPTICAL_FLOW_SESSION_BINDING_POINT_BACKWARD_COST_NV = OpticalFlowSessionBindingPointNV 7

-- No documentation found for Nested "VkOpticalFlowSessionBindingPointNV" "VK_OPTICAL_FLOW_SESSION_BINDING_POINT_GLOBAL_FLOW_NV"
pattern $mOPTICAL_FLOW_SESSION_BINDING_POINT_GLOBAL_FLOW_NV :: forall {r}.
OpticalFlowSessionBindingPointNV
-> ((# #) -> r) -> ((# #) -> r) -> r
$bOPTICAL_FLOW_SESSION_BINDING_POINT_GLOBAL_FLOW_NV :: OpticalFlowSessionBindingPointNV
OPTICAL_FLOW_SESSION_BINDING_POINT_GLOBAL_FLOW_NV = OpticalFlowSessionBindingPointNV 8

{-# COMPLETE
  OPTICAL_FLOW_SESSION_BINDING_POINT_UNKNOWN_NV
  , OPTICAL_FLOW_SESSION_BINDING_POINT_INPUT_NV
  , OPTICAL_FLOW_SESSION_BINDING_POINT_REFERENCE_NV
  , OPTICAL_FLOW_SESSION_BINDING_POINT_HINT_NV
  , OPTICAL_FLOW_SESSION_BINDING_POINT_FLOW_VECTOR_NV
  , OPTICAL_FLOW_SESSION_BINDING_POINT_BACKWARD_FLOW_VECTOR_NV
  , OPTICAL_FLOW_SESSION_BINDING_POINT_COST_NV
  , OPTICAL_FLOW_SESSION_BINDING_POINT_BACKWARD_COST_NV
  , OPTICAL_FLOW_SESSION_BINDING_POINT_GLOBAL_FLOW_NV ::
    OpticalFlowSessionBindingPointNV
  #-}

conNameOpticalFlowSessionBindingPointNV :: String
conNameOpticalFlowSessionBindingPointNV :: String
conNameOpticalFlowSessionBindingPointNV = String
"OpticalFlowSessionBindingPointNV"

enumPrefixOpticalFlowSessionBindingPointNV :: String
enumPrefixOpticalFlowSessionBindingPointNV :: String
enumPrefixOpticalFlowSessionBindingPointNV = String
"OPTICAL_FLOW_SESSION_BINDING_POINT_"

showTableOpticalFlowSessionBindingPointNV :: [(OpticalFlowSessionBindingPointNV, String)]
showTableOpticalFlowSessionBindingPointNV :: [(OpticalFlowSessionBindingPointNV, String)]
showTableOpticalFlowSessionBindingPointNV =
  [
    ( OpticalFlowSessionBindingPointNV
OPTICAL_FLOW_SESSION_BINDING_POINT_UNKNOWN_NV
    , String
"UNKNOWN_NV"
    )
  ,
    ( OpticalFlowSessionBindingPointNV
OPTICAL_FLOW_SESSION_BINDING_POINT_INPUT_NV
    , String
"INPUT_NV"
    )
  ,
    ( OpticalFlowSessionBindingPointNV
OPTICAL_FLOW_SESSION_BINDING_POINT_REFERENCE_NV
    , String
"REFERENCE_NV"
    )
  ,
    ( OpticalFlowSessionBindingPointNV
OPTICAL_FLOW_SESSION_BINDING_POINT_HINT_NV
    , String
"HINT_NV"
    )
  ,
    ( OpticalFlowSessionBindingPointNV
OPTICAL_FLOW_SESSION_BINDING_POINT_FLOW_VECTOR_NV
    , String
"FLOW_VECTOR_NV"
    )
  ,
    ( OpticalFlowSessionBindingPointNV
OPTICAL_FLOW_SESSION_BINDING_POINT_BACKWARD_FLOW_VECTOR_NV
    , String
"BACKWARD_FLOW_VECTOR_NV"
    )
  ,
    ( OpticalFlowSessionBindingPointNV
OPTICAL_FLOW_SESSION_BINDING_POINT_COST_NV
    , String
"COST_NV"
    )
  ,
    ( OpticalFlowSessionBindingPointNV
OPTICAL_FLOW_SESSION_BINDING_POINT_BACKWARD_COST_NV
    , String
"BACKWARD_COST_NV"
    )
  ,
    ( OpticalFlowSessionBindingPointNV
OPTICAL_FLOW_SESSION_BINDING_POINT_GLOBAL_FLOW_NV
    , String
"GLOBAL_FLOW_NV"
    )
  ]

instance Show OpticalFlowSessionBindingPointNV where
  showsPrec :: Int -> OpticalFlowSessionBindingPointNV -> ShowS
showsPrec =
    String
-> [(OpticalFlowSessionBindingPointNV, String)]
-> String
-> (OpticalFlowSessionBindingPointNV -> Int32)
-> (Int32 -> ShowS)
-> Int
-> OpticalFlowSessionBindingPointNV
-> ShowS
forall a i.
Eq a =>
String
-> [(a, String)]
-> String
-> (a -> i)
-> (i -> ShowS)
-> Int
-> a
-> ShowS
enumShowsPrec
      String
enumPrefixOpticalFlowSessionBindingPointNV
      [(OpticalFlowSessionBindingPointNV, String)]
showTableOpticalFlowSessionBindingPointNV
      String
conNameOpticalFlowSessionBindingPointNV
      (\(OpticalFlowSessionBindingPointNV Int32
x) -> Int32
x)
      (Int -> Int32 -> ShowS
forall a. Show a => Int -> a -> ShowS
showsPrec Int
11)

instance Read OpticalFlowSessionBindingPointNV where
  readPrec :: ReadPrec OpticalFlowSessionBindingPointNV
readPrec =
    String
-> [(OpticalFlowSessionBindingPointNV, String)]
-> String
-> (Int32 -> OpticalFlowSessionBindingPointNV)
-> ReadPrec OpticalFlowSessionBindingPointNV
forall i a.
Read i =>
String -> [(a, String)] -> String -> (i -> a) -> ReadPrec a
enumReadPrec
      String
enumPrefixOpticalFlowSessionBindingPointNV
      [(OpticalFlowSessionBindingPointNV, String)]
showTableOpticalFlowSessionBindingPointNV
      String
conNameOpticalFlowSessionBindingPointNV
      Int32 -> OpticalFlowSessionBindingPointNV
OpticalFlowSessionBindingPointNV

type OpticalFlowSessionCreateFlagsNV = OpticalFlowSessionCreateFlagBitsNV

-- | VkOpticalFlowSessionCreateFlagBitsNV - Bits specifying flags for optical
-- flow session
--
-- = Description
--
-- -   'OPTICAL_FLOW_SESSION_CREATE_ENABLE_HINT_BIT_NV' specifies that a
--     'Vulkan.Core10.Handles.ImageView' with external flow vectors will be
--     used as hints in performing the motion search and /must/ be bound to
--     'OPTICAL_FLOW_SESSION_BINDING_POINT_HINT_NV'.
--
-- -   'OPTICAL_FLOW_SESSION_CREATE_ENABLE_COST_BIT_NV' specifies that the
--     cost for the forward flow is generated in a
--     'Vulkan.Core10.Handles.ImageView' which /must/ be bound to
--     'OPTICAL_FLOW_SESSION_BINDING_POINT_COST_NV'. Additionally, if
--     'OPTICAL_FLOW_SESSION_CREATE_BOTH_DIRECTIONS_BIT_NV' is also set,
--     the cost for backward flow is generated in a
--     'Vulkan.Core10.Handles.ImageView' which /must/ be bound to
--     'OPTICAL_FLOW_SESSION_BINDING_POINT_BACKWARD_COST_NV'. The cost is
--     the confidence level of the flow vector for each grid in the frame.
--     The Cost implies how (in)accurate the flow vector is. Higher cost
--     value implies the flow vector to be less accurate and vice-versa.
--
-- -   'OPTICAL_FLOW_SESSION_CREATE_ENABLE_GLOBAL_FLOW_BIT_NV' specifies
--     that a global flow vector is estimated from forward flow in a single
--     pixel 'Vulkan.Core10.Handles.ImageView' which /must/ be bound to
--     'OPTICAL_FLOW_SESSION_BINDING_POINT_GLOBAL_FLOW_NV'.
--
-- -   'OPTICAL_FLOW_SESSION_CREATE_ALLOW_REGIONS_BIT_NV' specifies that
--     regions of interest /can/ be specified in
--     'OpticalFlowExecuteInfoNV'.
--
-- -   'OPTICAL_FLOW_SESSION_CREATE_BOTH_DIRECTIONS_BIT_NV' specifies that
--     backward flow is generated in addition to forward flow which is
--     always generated.
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_optical_flow VK_NV_optical_flow>,
-- 'OpticalFlowSessionCreateFlagsNV'
newtype OpticalFlowSessionCreateFlagBitsNV = OpticalFlowSessionCreateFlagBitsNV Flags
  deriving newtype (OpticalFlowSessionCreateFlagsNV
-> OpticalFlowSessionCreateFlagsNV -> Bool
(OpticalFlowSessionCreateFlagsNV
 -> OpticalFlowSessionCreateFlagsNV -> Bool)
-> (OpticalFlowSessionCreateFlagsNV
    -> OpticalFlowSessionCreateFlagsNV -> Bool)
-> Eq OpticalFlowSessionCreateFlagsNV
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: OpticalFlowSessionCreateFlagsNV
-> OpticalFlowSessionCreateFlagsNV -> Bool
== :: OpticalFlowSessionCreateFlagsNV
-> OpticalFlowSessionCreateFlagsNV -> Bool
$c/= :: OpticalFlowSessionCreateFlagsNV
-> OpticalFlowSessionCreateFlagsNV -> Bool
/= :: OpticalFlowSessionCreateFlagsNV
-> OpticalFlowSessionCreateFlagsNV -> Bool
Eq, Eq OpticalFlowSessionCreateFlagsNV
Eq OpticalFlowSessionCreateFlagsNV =>
(OpticalFlowSessionCreateFlagsNV
 -> OpticalFlowSessionCreateFlagsNV -> Ordering)
-> (OpticalFlowSessionCreateFlagsNV
    -> OpticalFlowSessionCreateFlagsNV -> Bool)
-> (OpticalFlowSessionCreateFlagsNV
    -> OpticalFlowSessionCreateFlagsNV -> Bool)
-> (OpticalFlowSessionCreateFlagsNV
    -> OpticalFlowSessionCreateFlagsNV -> Bool)
-> (OpticalFlowSessionCreateFlagsNV
    -> OpticalFlowSessionCreateFlagsNV -> Bool)
-> (OpticalFlowSessionCreateFlagsNV
    -> OpticalFlowSessionCreateFlagsNV
    -> OpticalFlowSessionCreateFlagsNV)
-> (OpticalFlowSessionCreateFlagsNV
    -> OpticalFlowSessionCreateFlagsNV
    -> OpticalFlowSessionCreateFlagsNV)
-> Ord OpticalFlowSessionCreateFlagsNV
OpticalFlowSessionCreateFlagsNV
-> OpticalFlowSessionCreateFlagsNV -> Bool
OpticalFlowSessionCreateFlagsNV
-> OpticalFlowSessionCreateFlagsNV -> Ordering
OpticalFlowSessionCreateFlagsNV
-> OpticalFlowSessionCreateFlagsNV
-> OpticalFlowSessionCreateFlagsNV
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: OpticalFlowSessionCreateFlagsNV
-> OpticalFlowSessionCreateFlagsNV -> Ordering
compare :: OpticalFlowSessionCreateFlagsNV
-> OpticalFlowSessionCreateFlagsNV -> Ordering
$c< :: OpticalFlowSessionCreateFlagsNV
-> OpticalFlowSessionCreateFlagsNV -> Bool
< :: OpticalFlowSessionCreateFlagsNV
-> OpticalFlowSessionCreateFlagsNV -> Bool
$c<= :: OpticalFlowSessionCreateFlagsNV
-> OpticalFlowSessionCreateFlagsNV -> Bool
<= :: OpticalFlowSessionCreateFlagsNV
-> OpticalFlowSessionCreateFlagsNV -> Bool
$c> :: OpticalFlowSessionCreateFlagsNV
-> OpticalFlowSessionCreateFlagsNV -> Bool
> :: OpticalFlowSessionCreateFlagsNV
-> OpticalFlowSessionCreateFlagsNV -> Bool
$c>= :: OpticalFlowSessionCreateFlagsNV
-> OpticalFlowSessionCreateFlagsNV -> Bool
>= :: OpticalFlowSessionCreateFlagsNV
-> OpticalFlowSessionCreateFlagsNV -> Bool
$cmax :: OpticalFlowSessionCreateFlagsNV
-> OpticalFlowSessionCreateFlagsNV
-> OpticalFlowSessionCreateFlagsNV
max :: OpticalFlowSessionCreateFlagsNV
-> OpticalFlowSessionCreateFlagsNV
-> OpticalFlowSessionCreateFlagsNV
$cmin :: OpticalFlowSessionCreateFlagsNV
-> OpticalFlowSessionCreateFlagsNV
-> OpticalFlowSessionCreateFlagsNV
min :: OpticalFlowSessionCreateFlagsNV
-> OpticalFlowSessionCreateFlagsNV
-> OpticalFlowSessionCreateFlagsNV
Ord, Ptr OpticalFlowSessionCreateFlagsNV
-> IO OpticalFlowSessionCreateFlagsNV
Ptr OpticalFlowSessionCreateFlagsNV
-> Int -> IO OpticalFlowSessionCreateFlagsNV
Ptr OpticalFlowSessionCreateFlagsNV
-> Int -> OpticalFlowSessionCreateFlagsNV -> IO ()
Ptr OpticalFlowSessionCreateFlagsNV
-> OpticalFlowSessionCreateFlagsNV -> IO ()
OpticalFlowSessionCreateFlagsNV -> Int
(OpticalFlowSessionCreateFlagsNV -> Int)
-> (OpticalFlowSessionCreateFlagsNV -> Int)
-> (Ptr OpticalFlowSessionCreateFlagsNV
    -> Int -> IO OpticalFlowSessionCreateFlagsNV)
-> (Ptr OpticalFlowSessionCreateFlagsNV
    -> Int -> OpticalFlowSessionCreateFlagsNV -> IO ())
-> (forall b. Ptr b -> Int -> IO OpticalFlowSessionCreateFlagsNV)
-> (forall b.
    Ptr b -> Int -> OpticalFlowSessionCreateFlagsNV -> IO ())
-> (Ptr OpticalFlowSessionCreateFlagsNV
    -> IO OpticalFlowSessionCreateFlagsNV)
-> (Ptr OpticalFlowSessionCreateFlagsNV
    -> OpticalFlowSessionCreateFlagsNV -> IO ())
-> Storable OpticalFlowSessionCreateFlagsNV
forall b. Ptr b -> Int -> IO OpticalFlowSessionCreateFlagsNV
forall b. Ptr b -> Int -> OpticalFlowSessionCreateFlagsNV -> IO ()
forall a.
(a -> Int)
-> (a -> Int)
-> (Ptr a -> Int -> IO a)
-> (Ptr a -> Int -> a -> IO ())
-> (forall b. Ptr b -> Int -> IO a)
-> (forall b. Ptr b -> Int -> a -> IO ())
-> (Ptr a -> IO a)
-> (Ptr a -> a -> IO ())
-> Storable a
$csizeOf :: OpticalFlowSessionCreateFlagsNV -> Int
sizeOf :: OpticalFlowSessionCreateFlagsNV -> Int
$calignment :: OpticalFlowSessionCreateFlagsNV -> Int
alignment :: OpticalFlowSessionCreateFlagsNV -> Int
$cpeekElemOff :: Ptr OpticalFlowSessionCreateFlagsNV
-> Int -> IO OpticalFlowSessionCreateFlagsNV
peekElemOff :: Ptr OpticalFlowSessionCreateFlagsNV
-> Int -> IO OpticalFlowSessionCreateFlagsNV
$cpokeElemOff :: Ptr OpticalFlowSessionCreateFlagsNV
-> Int -> OpticalFlowSessionCreateFlagsNV -> IO ()
pokeElemOff :: Ptr OpticalFlowSessionCreateFlagsNV
-> Int -> OpticalFlowSessionCreateFlagsNV -> IO ()
$cpeekByteOff :: forall b. Ptr b -> Int -> IO OpticalFlowSessionCreateFlagsNV
peekByteOff :: forall b. Ptr b -> Int -> IO OpticalFlowSessionCreateFlagsNV
$cpokeByteOff :: forall b. Ptr b -> Int -> OpticalFlowSessionCreateFlagsNV -> IO ()
pokeByteOff :: forall b. Ptr b -> Int -> OpticalFlowSessionCreateFlagsNV -> IO ()
$cpeek :: Ptr OpticalFlowSessionCreateFlagsNV
-> IO OpticalFlowSessionCreateFlagsNV
peek :: Ptr OpticalFlowSessionCreateFlagsNV
-> IO OpticalFlowSessionCreateFlagsNV
$cpoke :: Ptr OpticalFlowSessionCreateFlagsNV
-> OpticalFlowSessionCreateFlagsNV -> IO ()
poke :: Ptr OpticalFlowSessionCreateFlagsNV
-> OpticalFlowSessionCreateFlagsNV -> IO ()
Storable, OpticalFlowSessionCreateFlagsNV
OpticalFlowSessionCreateFlagsNV
-> Zero OpticalFlowSessionCreateFlagsNV
forall a. a -> Zero a
$czero :: OpticalFlowSessionCreateFlagsNV
zero :: OpticalFlowSessionCreateFlagsNV
Zero, Eq OpticalFlowSessionCreateFlagsNV
OpticalFlowSessionCreateFlagsNV
Eq OpticalFlowSessionCreateFlagsNV =>
(OpticalFlowSessionCreateFlagsNV
 -> OpticalFlowSessionCreateFlagsNV
 -> OpticalFlowSessionCreateFlagsNV)
-> (OpticalFlowSessionCreateFlagsNV
    -> OpticalFlowSessionCreateFlagsNV
    -> OpticalFlowSessionCreateFlagsNV)
-> (OpticalFlowSessionCreateFlagsNV
    -> OpticalFlowSessionCreateFlagsNV
    -> OpticalFlowSessionCreateFlagsNV)
-> (OpticalFlowSessionCreateFlagsNV
    -> OpticalFlowSessionCreateFlagsNV)
-> (OpticalFlowSessionCreateFlagsNV
    -> Int -> OpticalFlowSessionCreateFlagsNV)
-> (OpticalFlowSessionCreateFlagsNV
    -> Int -> OpticalFlowSessionCreateFlagsNV)
-> OpticalFlowSessionCreateFlagsNV
-> (Int -> OpticalFlowSessionCreateFlagsNV)
-> (OpticalFlowSessionCreateFlagsNV
    -> Int -> OpticalFlowSessionCreateFlagsNV)
-> (OpticalFlowSessionCreateFlagsNV
    -> Int -> OpticalFlowSessionCreateFlagsNV)
-> (OpticalFlowSessionCreateFlagsNV
    -> Int -> OpticalFlowSessionCreateFlagsNV)
-> (OpticalFlowSessionCreateFlagsNV -> Int -> Bool)
-> (OpticalFlowSessionCreateFlagsNV -> Maybe Int)
-> (OpticalFlowSessionCreateFlagsNV -> Int)
-> (OpticalFlowSessionCreateFlagsNV -> Bool)
-> (OpticalFlowSessionCreateFlagsNV
    -> Int -> OpticalFlowSessionCreateFlagsNV)
-> (OpticalFlowSessionCreateFlagsNV
    -> Int -> OpticalFlowSessionCreateFlagsNV)
-> (OpticalFlowSessionCreateFlagsNV
    -> Int -> OpticalFlowSessionCreateFlagsNV)
-> (OpticalFlowSessionCreateFlagsNV
    -> Int -> OpticalFlowSessionCreateFlagsNV)
-> (OpticalFlowSessionCreateFlagsNV
    -> Int -> OpticalFlowSessionCreateFlagsNV)
-> (OpticalFlowSessionCreateFlagsNV
    -> Int -> OpticalFlowSessionCreateFlagsNV)
-> (OpticalFlowSessionCreateFlagsNV -> Int)
-> Bits OpticalFlowSessionCreateFlagsNV
Int -> OpticalFlowSessionCreateFlagsNV
OpticalFlowSessionCreateFlagsNV -> Bool
OpticalFlowSessionCreateFlagsNV -> Int
OpticalFlowSessionCreateFlagsNV -> Maybe Int
OpticalFlowSessionCreateFlagsNV -> OpticalFlowSessionCreateFlagsNV
OpticalFlowSessionCreateFlagsNV -> Int -> Bool
OpticalFlowSessionCreateFlagsNV
-> Int -> OpticalFlowSessionCreateFlagsNV
OpticalFlowSessionCreateFlagsNV
-> OpticalFlowSessionCreateFlagsNV
-> OpticalFlowSessionCreateFlagsNV
forall a.
Eq a =>
(a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> a
-> (Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> Bool)
-> (a -> Maybe Int)
-> (a -> Int)
-> (a -> Bool)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int)
-> Bits a
$c.&. :: OpticalFlowSessionCreateFlagsNV
-> OpticalFlowSessionCreateFlagsNV
-> OpticalFlowSessionCreateFlagsNV
.&. :: OpticalFlowSessionCreateFlagsNV
-> OpticalFlowSessionCreateFlagsNV
-> OpticalFlowSessionCreateFlagsNV
$c.|. :: OpticalFlowSessionCreateFlagsNV
-> OpticalFlowSessionCreateFlagsNV
-> OpticalFlowSessionCreateFlagsNV
.|. :: OpticalFlowSessionCreateFlagsNV
-> OpticalFlowSessionCreateFlagsNV
-> OpticalFlowSessionCreateFlagsNV
$cxor :: OpticalFlowSessionCreateFlagsNV
-> OpticalFlowSessionCreateFlagsNV
-> OpticalFlowSessionCreateFlagsNV
xor :: OpticalFlowSessionCreateFlagsNV
-> OpticalFlowSessionCreateFlagsNV
-> OpticalFlowSessionCreateFlagsNV
$ccomplement :: OpticalFlowSessionCreateFlagsNV -> OpticalFlowSessionCreateFlagsNV
complement :: OpticalFlowSessionCreateFlagsNV -> OpticalFlowSessionCreateFlagsNV
$cshift :: OpticalFlowSessionCreateFlagsNV
-> Int -> OpticalFlowSessionCreateFlagsNV
shift :: OpticalFlowSessionCreateFlagsNV
-> Int -> OpticalFlowSessionCreateFlagsNV
$crotate :: OpticalFlowSessionCreateFlagsNV
-> Int -> OpticalFlowSessionCreateFlagsNV
rotate :: OpticalFlowSessionCreateFlagsNV
-> Int -> OpticalFlowSessionCreateFlagsNV
$czeroBits :: OpticalFlowSessionCreateFlagsNV
zeroBits :: OpticalFlowSessionCreateFlagsNV
$cbit :: Int -> OpticalFlowSessionCreateFlagsNV
bit :: Int -> OpticalFlowSessionCreateFlagsNV
$csetBit :: OpticalFlowSessionCreateFlagsNV
-> Int -> OpticalFlowSessionCreateFlagsNV
setBit :: OpticalFlowSessionCreateFlagsNV
-> Int -> OpticalFlowSessionCreateFlagsNV
$cclearBit :: OpticalFlowSessionCreateFlagsNV
-> Int -> OpticalFlowSessionCreateFlagsNV
clearBit :: OpticalFlowSessionCreateFlagsNV
-> Int -> OpticalFlowSessionCreateFlagsNV
$ccomplementBit :: OpticalFlowSessionCreateFlagsNV
-> Int -> OpticalFlowSessionCreateFlagsNV
complementBit :: OpticalFlowSessionCreateFlagsNV
-> Int -> OpticalFlowSessionCreateFlagsNV
$ctestBit :: OpticalFlowSessionCreateFlagsNV -> Int -> Bool
testBit :: OpticalFlowSessionCreateFlagsNV -> Int -> Bool
$cbitSizeMaybe :: OpticalFlowSessionCreateFlagsNV -> Maybe Int
bitSizeMaybe :: OpticalFlowSessionCreateFlagsNV -> Maybe Int
$cbitSize :: OpticalFlowSessionCreateFlagsNV -> Int
bitSize :: OpticalFlowSessionCreateFlagsNV -> Int
$cisSigned :: OpticalFlowSessionCreateFlagsNV -> Bool
isSigned :: OpticalFlowSessionCreateFlagsNV -> Bool
$cshiftL :: OpticalFlowSessionCreateFlagsNV
-> Int -> OpticalFlowSessionCreateFlagsNV
shiftL :: OpticalFlowSessionCreateFlagsNV
-> Int -> OpticalFlowSessionCreateFlagsNV
$cunsafeShiftL :: OpticalFlowSessionCreateFlagsNV
-> Int -> OpticalFlowSessionCreateFlagsNV
unsafeShiftL :: OpticalFlowSessionCreateFlagsNV
-> Int -> OpticalFlowSessionCreateFlagsNV
$cshiftR :: OpticalFlowSessionCreateFlagsNV
-> Int -> OpticalFlowSessionCreateFlagsNV
shiftR :: OpticalFlowSessionCreateFlagsNV
-> Int -> OpticalFlowSessionCreateFlagsNV
$cunsafeShiftR :: OpticalFlowSessionCreateFlagsNV
-> Int -> OpticalFlowSessionCreateFlagsNV
unsafeShiftR :: OpticalFlowSessionCreateFlagsNV
-> Int -> OpticalFlowSessionCreateFlagsNV
$crotateL :: OpticalFlowSessionCreateFlagsNV
-> Int -> OpticalFlowSessionCreateFlagsNV
rotateL :: OpticalFlowSessionCreateFlagsNV
-> Int -> OpticalFlowSessionCreateFlagsNV
$crotateR :: OpticalFlowSessionCreateFlagsNV
-> Int -> OpticalFlowSessionCreateFlagsNV
rotateR :: OpticalFlowSessionCreateFlagsNV
-> Int -> OpticalFlowSessionCreateFlagsNV
$cpopCount :: OpticalFlowSessionCreateFlagsNV -> Int
popCount :: OpticalFlowSessionCreateFlagsNV -> Int
Bits, Bits OpticalFlowSessionCreateFlagsNV
Bits OpticalFlowSessionCreateFlagsNV =>
(OpticalFlowSessionCreateFlagsNV -> Int)
-> (OpticalFlowSessionCreateFlagsNV -> Int)
-> (OpticalFlowSessionCreateFlagsNV -> Int)
-> FiniteBits OpticalFlowSessionCreateFlagsNV
OpticalFlowSessionCreateFlagsNV -> Int
forall b.
Bits b =>
(b -> Int) -> (b -> Int) -> (b -> Int) -> FiniteBits b
$cfiniteBitSize :: OpticalFlowSessionCreateFlagsNV -> Int
finiteBitSize :: OpticalFlowSessionCreateFlagsNV -> Int
$ccountLeadingZeros :: OpticalFlowSessionCreateFlagsNV -> Int
countLeadingZeros :: OpticalFlowSessionCreateFlagsNV -> Int
$ccountTrailingZeros :: OpticalFlowSessionCreateFlagsNV -> Int
countTrailingZeros :: OpticalFlowSessionCreateFlagsNV -> Int
FiniteBits)

-- No documentation found for Nested "VkOpticalFlowSessionCreateFlagBitsNV" "VK_OPTICAL_FLOW_SESSION_CREATE_ENABLE_HINT_BIT_NV"
pattern $mOPTICAL_FLOW_SESSION_CREATE_ENABLE_HINT_BIT_NV :: forall {r}.
OpticalFlowSessionCreateFlagsNV
-> ((# #) -> r) -> ((# #) -> r) -> r
$bOPTICAL_FLOW_SESSION_CREATE_ENABLE_HINT_BIT_NV :: OpticalFlowSessionCreateFlagsNV
OPTICAL_FLOW_SESSION_CREATE_ENABLE_HINT_BIT_NV = OpticalFlowSessionCreateFlagBitsNV 0x00000001

-- No documentation found for Nested "VkOpticalFlowSessionCreateFlagBitsNV" "VK_OPTICAL_FLOW_SESSION_CREATE_ENABLE_COST_BIT_NV"
pattern $mOPTICAL_FLOW_SESSION_CREATE_ENABLE_COST_BIT_NV :: forall {r}.
OpticalFlowSessionCreateFlagsNV
-> ((# #) -> r) -> ((# #) -> r) -> r
$bOPTICAL_FLOW_SESSION_CREATE_ENABLE_COST_BIT_NV :: OpticalFlowSessionCreateFlagsNV
OPTICAL_FLOW_SESSION_CREATE_ENABLE_COST_BIT_NV = OpticalFlowSessionCreateFlagBitsNV 0x00000002

-- No documentation found for Nested "VkOpticalFlowSessionCreateFlagBitsNV" "VK_OPTICAL_FLOW_SESSION_CREATE_ENABLE_GLOBAL_FLOW_BIT_NV"
pattern $mOPTICAL_FLOW_SESSION_CREATE_ENABLE_GLOBAL_FLOW_BIT_NV :: forall {r}.
OpticalFlowSessionCreateFlagsNV
-> ((# #) -> r) -> ((# #) -> r) -> r
$bOPTICAL_FLOW_SESSION_CREATE_ENABLE_GLOBAL_FLOW_BIT_NV :: OpticalFlowSessionCreateFlagsNV
OPTICAL_FLOW_SESSION_CREATE_ENABLE_GLOBAL_FLOW_BIT_NV = OpticalFlowSessionCreateFlagBitsNV 0x00000004

-- No documentation found for Nested "VkOpticalFlowSessionCreateFlagBitsNV" "VK_OPTICAL_FLOW_SESSION_CREATE_ALLOW_REGIONS_BIT_NV"
pattern $mOPTICAL_FLOW_SESSION_CREATE_ALLOW_REGIONS_BIT_NV :: forall {r}.
OpticalFlowSessionCreateFlagsNV
-> ((# #) -> r) -> ((# #) -> r) -> r
$bOPTICAL_FLOW_SESSION_CREATE_ALLOW_REGIONS_BIT_NV :: OpticalFlowSessionCreateFlagsNV
OPTICAL_FLOW_SESSION_CREATE_ALLOW_REGIONS_BIT_NV = OpticalFlowSessionCreateFlagBitsNV 0x00000008

-- No documentation found for Nested "VkOpticalFlowSessionCreateFlagBitsNV" "VK_OPTICAL_FLOW_SESSION_CREATE_BOTH_DIRECTIONS_BIT_NV"
pattern $mOPTICAL_FLOW_SESSION_CREATE_BOTH_DIRECTIONS_BIT_NV :: forall {r}.
OpticalFlowSessionCreateFlagsNV
-> ((# #) -> r) -> ((# #) -> r) -> r
$bOPTICAL_FLOW_SESSION_CREATE_BOTH_DIRECTIONS_BIT_NV :: OpticalFlowSessionCreateFlagsNV
OPTICAL_FLOW_SESSION_CREATE_BOTH_DIRECTIONS_BIT_NV = OpticalFlowSessionCreateFlagBitsNV 0x00000010

conNameOpticalFlowSessionCreateFlagBitsNV :: String
conNameOpticalFlowSessionCreateFlagBitsNV :: String
conNameOpticalFlowSessionCreateFlagBitsNV = String
"OpticalFlowSessionCreateFlagBitsNV"

enumPrefixOpticalFlowSessionCreateFlagBitsNV :: String
enumPrefixOpticalFlowSessionCreateFlagBitsNV :: String
enumPrefixOpticalFlowSessionCreateFlagBitsNV = String
"OPTICAL_FLOW_SESSION_CREATE_"

showTableOpticalFlowSessionCreateFlagBitsNV :: [(OpticalFlowSessionCreateFlagBitsNV, String)]
showTableOpticalFlowSessionCreateFlagBitsNV :: [(OpticalFlowSessionCreateFlagsNV, String)]
showTableOpticalFlowSessionCreateFlagBitsNV =
  [
    ( OpticalFlowSessionCreateFlagsNV
OPTICAL_FLOW_SESSION_CREATE_ENABLE_HINT_BIT_NV
    , String
"ENABLE_HINT_BIT_NV"
    )
  ,
    ( OpticalFlowSessionCreateFlagsNV
OPTICAL_FLOW_SESSION_CREATE_ENABLE_COST_BIT_NV
    , String
"ENABLE_COST_BIT_NV"
    )
  ,
    ( OpticalFlowSessionCreateFlagsNV
OPTICAL_FLOW_SESSION_CREATE_ENABLE_GLOBAL_FLOW_BIT_NV
    , String
"ENABLE_GLOBAL_FLOW_BIT_NV"
    )
  ,
    ( OpticalFlowSessionCreateFlagsNV
OPTICAL_FLOW_SESSION_CREATE_ALLOW_REGIONS_BIT_NV
    , String
"ALLOW_REGIONS_BIT_NV"
    )
  ,
    ( OpticalFlowSessionCreateFlagsNV
OPTICAL_FLOW_SESSION_CREATE_BOTH_DIRECTIONS_BIT_NV
    , String
"BOTH_DIRECTIONS_BIT_NV"
    )
  ]

instance Show OpticalFlowSessionCreateFlagBitsNV where
  showsPrec :: Int -> OpticalFlowSessionCreateFlagsNV -> ShowS
showsPrec =
    String
-> [(OpticalFlowSessionCreateFlagsNV, String)]
-> String
-> (OpticalFlowSessionCreateFlagsNV -> Word32)
-> (Word32 -> ShowS)
-> Int
-> OpticalFlowSessionCreateFlagsNV
-> ShowS
forall a i.
Eq a =>
String
-> [(a, String)]
-> String
-> (a -> i)
-> (i -> ShowS)
-> Int
-> a
-> ShowS
enumShowsPrec
      String
enumPrefixOpticalFlowSessionCreateFlagBitsNV
      [(OpticalFlowSessionCreateFlagsNV, String)]
showTableOpticalFlowSessionCreateFlagBitsNV
      String
conNameOpticalFlowSessionCreateFlagBitsNV
      (\(OpticalFlowSessionCreateFlagBitsNV Word32
x) -> Word32
x)
      (\Word32
x -> String -> ShowS
showString String
"0x" ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Word32 -> ShowS
forall a. Integral a => a -> ShowS
showHex Word32
x)

instance Read OpticalFlowSessionCreateFlagBitsNV where
  readPrec :: ReadPrec OpticalFlowSessionCreateFlagsNV
readPrec =
    String
-> [(OpticalFlowSessionCreateFlagsNV, String)]
-> String
-> (Word32 -> OpticalFlowSessionCreateFlagsNV)
-> ReadPrec OpticalFlowSessionCreateFlagsNV
forall i a.
Read i =>
String -> [(a, String)] -> String -> (i -> a) -> ReadPrec a
enumReadPrec
      String
enumPrefixOpticalFlowSessionCreateFlagBitsNV
      [(OpticalFlowSessionCreateFlagsNV, String)]
showTableOpticalFlowSessionCreateFlagBitsNV
      String
conNameOpticalFlowSessionCreateFlagBitsNV
      Word32 -> OpticalFlowSessionCreateFlagsNV
OpticalFlowSessionCreateFlagBitsNV

type OpticalFlowExecuteFlagsNV = OpticalFlowExecuteFlagBitsNV

-- | VkOpticalFlowExecuteFlagBitsNV - Bits specifying flags for an optical
-- flow vector calculation
--
-- = Description
--
-- -   'OPTICAL_FLOW_EXECUTE_DISABLE_TEMPORAL_HINTS_BIT_NV' specifies that
--     temporal hints from previously generated flow vectors are not used.
--     If temporal hints are enabled, optical flow vectors from previous
--     'cmdOpticalFlowExecuteNV' call are automatically used as hints for
--     the current 'cmdOpticalFlowExecuteNV' 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 frame pairs).
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_optical_flow VK_NV_optical_flow>,
-- 'OpticalFlowExecuteFlagsNV'
newtype OpticalFlowExecuteFlagBitsNV = OpticalFlowExecuteFlagBitsNV Flags
  deriving newtype (OpticalFlowExecuteFlagsNV -> OpticalFlowExecuteFlagsNV -> Bool
(OpticalFlowExecuteFlagsNV -> OpticalFlowExecuteFlagsNV -> Bool)
-> (OpticalFlowExecuteFlagsNV -> OpticalFlowExecuteFlagsNV -> Bool)
-> Eq OpticalFlowExecuteFlagsNV
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: OpticalFlowExecuteFlagsNV -> OpticalFlowExecuteFlagsNV -> Bool
== :: OpticalFlowExecuteFlagsNV -> OpticalFlowExecuteFlagsNV -> Bool
$c/= :: OpticalFlowExecuteFlagsNV -> OpticalFlowExecuteFlagsNV -> Bool
/= :: OpticalFlowExecuteFlagsNV -> OpticalFlowExecuteFlagsNV -> Bool
Eq, Eq OpticalFlowExecuteFlagsNV
Eq OpticalFlowExecuteFlagsNV =>
(OpticalFlowExecuteFlagsNV
 -> OpticalFlowExecuteFlagsNV -> Ordering)
-> (OpticalFlowExecuteFlagsNV -> OpticalFlowExecuteFlagsNV -> Bool)
-> (OpticalFlowExecuteFlagsNV -> OpticalFlowExecuteFlagsNV -> Bool)
-> (OpticalFlowExecuteFlagsNV -> OpticalFlowExecuteFlagsNV -> Bool)
-> (OpticalFlowExecuteFlagsNV -> OpticalFlowExecuteFlagsNV -> Bool)
-> (OpticalFlowExecuteFlagsNV
    -> OpticalFlowExecuteFlagsNV -> OpticalFlowExecuteFlagsNV)
-> (OpticalFlowExecuteFlagsNV
    -> OpticalFlowExecuteFlagsNV -> OpticalFlowExecuteFlagsNV)
-> Ord OpticalFlowExecuteFlagsNV
OpticalFlowExecuteFlagsNV -> OpticalFlowExecuteFlagsNV -> Bool
OpticalFlowExecuteFlagsNV -> OpticalFlowExecuteFlagsNV -> Ordering
OpticalFlowExecuteFlagsNV
-> OpticalFlowExecuteFlagsNV -> OpticalFlowExecuteFlagsNV
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: OpticalFlowExecuteFlagsNV -> OpticalFlowExecuteFlagsNV -> Ordering
compare :: OpticalFlowExecuteFlagsNV -> OpticalFlowExecuteFlagsNV -> Ordering
$c< :: OpticalFlowExecuteFlagsNV -> OpticalFlowExecuteFlagsNV -> Bool
< :: OpticalFlowExecuteFlagsNV -> OpticalFlowExecuteFlagsNV -> Bool
$c<= :: OpticalFlowExecuteFlagsNV -> OpticalFlowExecuteFlagsNV -> Bool
<= :: OpticalFlowExecuteFlagsNV -> OpticalFlowExecuteFlagsNV -> Bool
$c> :: OpticalFlowExecuteFlagsNV -> OpticalFlowExecuteFlagsNV -> Bool
> :: OpticalFlowExecuteFlagsNV -> OpticalFlowExecuteFlagsNV -> Bool
$c>= :: OpticalFlowExecuteFlagsNV -> OpticalFlowExecuteFlagsNV -> Bool
>= :: OpticalFlowExecuteFlagsNV -> OpticalFlowExecuteFlagsNV -> Bool
$cmax :: OpticalFlowExecuteFlagsNV
-> OpticalFlowExecuteFlagsNV -> OpticalFlowExecuteFlagsNV
max :: OpticalFlowExecuteFlagsNV
-> OpticalFlowExecuteFlagsNV -> OpticalFlowExecuteFlagsNV
$cmin :: OpticalFlowExecuteFlagsNV
-> OpticalFlowExecuteFlagsNV -> OpticalFlowExecuteFlagsNV
min :: OpticalFlowExecuteFlagsNV
-> OpticalFlowExecuteFlagsNV -> OpticalFlowExecuteFlagsNV
Ord, Ptr OpticalFlowExecuteFlagsNV -> IO OpticalFlowExecuteFlagsNV
Ptr OpticalFlowExecuteFlagsNV
-> Int -> IO OpticalFlowExecuteFlagsNV
Ptr OpticalFlowExecuteFlagsNV
-> Int -> OpticalFlowExecuteFlagsNV -> IO ()
Ptr OpticalFlowExecuteFlagsNV -> OpticalFlowExecuteFlagsNV -> IO ()
OpticalFlowExecuteFlagsNV -> Int
(OpticalFlowExecuteFlagsNV -> Int)
-> (OpticalFlowExecuteFlagsNV -> Int)
-> (Ptr OpticalFlowExecuteFlagsNV
    -> Int -> IO OpticalFlowExecuteFlagsNV)
-> (Ptr OpticalFlowExecuteFlagsNV
    -> Int -> OpticalFlowExecuteFlagsNV -> IO ())
-> (forall b. Ptr b -> Int -> IO OpticalFlowExecuteFlagsNV)
-> (forall b. Ptr b -> Int -> OpticalFlowExecuteFlagsNV -> IO ())
-> (Ptr OpticalFlowExecuteFlagsNV -> IO OpticalFlowExecuteFlagsNV)
-> (Ptr OpticalFlowExecuteFlagsNV
    -> OpticalFlowExecuteFlagsNV -> IO ())
-> Storable OpticalFlowExecuteFlagsNV
forall b. Ptr b -> Int -> IO OpticalFlowExecuteFlagsNV
forall b. Ptr b -> Int -> OpticalFlowExecuteFlagsNV -> IO ()
forall a.
(a -> Int)
-> (a -> Int)
-> (Ptr a -> Int -> IO a)
-> (Ptr a -> Int -> a -> IO ())
-> (forall b. Ptr b -> Int -> IO a)
-> (forall b. Ptr b -> Int -> a -> IO ())
-> (Ptr a -> IO a)
-> (Ptr a -> a -> IO ())
-> Storable a
$csizeOf :: OpticalFlowExecuteFlagsNV -> Int
sizeOf :: OpticalFlowExecuteFlagsNV -> Int
$calignment :: OpticalFlowExecuteFlagsNV -> Int
alignment :: OpticalFlowExecuteFlagsNV -> Int
$cpeekElemOff :: Ptr OpticalFlowExecuteFlagsNV
-> Int -> IO OpticalFlowExecuteFlagsNV
peekElemOff :: Ptr OpticalFlowExecuteFlagsNV
-> Int -> IO OpticalFlowExecuteFlagsNV
$cpokeElemOff :: Ptr OpticalFlowExecuteFlagsNV
-> Int -> OpticalFlowExecuteFlagsNV -> IO ()
pokeElemOff :: Ptr OpticalFlowExecuteFlagsNV
-> Int -> OpticalFlowExecuteFlagsNV -> IO ()
$cpeekByteOff :: forall b. Ptr b -> Int -> IO OpticalFlowExecuteFlagsNV
peekByteOff :: forall b. Ptr b -> Int -> IO OpticalFlowExecuteFlagsNV
$cpokeByteOff :: forall b. Ptr b -> Int -> OpticalFlowExecuteFlagsNV -> IO ()
pokeByteOff :: forall b. Ptr b -> Int -> OpticalFlowExecuteFlagsNV -> IO ()
$cpeek :: Ptr OpticalFlowExecuteFlagsNV -> IO OpticalFlowExecuteFlagsNV
peek :: Ptr OpticalFlowExecuteFlagsNV -> IO OpticalFlowExecuteFlagsNV
$cpoke :: Ptr OpticalFlowExecuteFlagsNV -> OpticalFlowExecuteFlagsNV -> IO ()
poke :: Ptr OpticalFlowExecuteFlagsNV -> OpticalFlowExecuteFlagsNV -> IO ()
Storable, OpticalFlowExecuteFlagsNV
OpticalFlowExecuteFlagsNV -> Zero OpticalFlowExecuteFlagsNV
forall a. a -> Zero a
$czero :: OpticalFlowExecuteFlagsNV
zero :: OpticalFlowExecuteFlagsNV
Zero, Eq OpticalFlowExecuteFlagsNV
OpticalFlowExecuteFlagsNV
Eq OpticalFlowExecuteFlagsNV =>
(OpticalFlowExecuteFlagsNV
 -> OpticalFlowExecuteFlagsNV -> OpticalFlowExecuteFlagsNV)
-> (OpticalFlowExecuteFlagsNV
    -> OpticalFlowExecuteFlagsNV -> OpticalFlowExecuteFlagsNV)
-> (OpticalFlowExecuteFlagsNV
    -> OpticalFlowExecuteFlagsNV -> OpticalFlowExecuteFlagsNV)
-> (OpticalFlowExecuteFlagsNV -> OpticalFlowExecuteFlagsNV)
-> (OpticalFlowExecuteFlagsNV -> Int -> OpticalFlowExecuteFlagsNV)
-> (OpticalFlowExecuteFlagsNV -> Int -> OpticalFlowExecuteFlagsNV)
-> OpticalFlowExecuteFlagsNV
-> (Int -> OpticalFlowExecuteFlagsNV)
-> (OpticalFlowExecuteFlagsNV -> Int -> OpticalFlowExecuteFlagsNV)
-> (OpticalFlowExecuteFlagsNV -> Int -> OpticalFlowExecuteFlagsNV)
-> (OpticalFlowExecuteFlagsNV -> Int -> OpticalFlowExecuteFlagsNV)
-> (OpticalFlowExecuteFlagsNV -> Int -> Bool)
-> (OpticalFlowExecuteFlagsNV -> Maybe Int)
-> (OpticalFlowExecuteFlagsNV -> Int)
-> (OpticalFlowExecuteFlagsNV -> Bool)
-> (OpticalFlowExecuteFlagsNV -> Int -> OpticalFlowExecuteFlagsNV)
-> (OpticalFlowExecuteFlagsNV -> Int -> OpticalFlowExecuteFlagsNV)
-> (OpticalFlowExecuteFlagsNV -> Int -> OpticalFlowExecuteFlagsNV)
-> (OpticalFlowExecuteFlagsNV -> Int -> OpticalFlowExecuteFlagsNV)
-> (OpticalFlowExecuteFlagsNV -> Int -> OpticalFlowExecuteFlagsNV)
-> (OpticalFlowExecuteFlagsNV -> Int -> OpticalFlowExecuteFlagsNV)
-> (OpticalFlowExecuteFlagsNV -> Int)
-> Bits OpticalFlowExecuteFlagsNV
Int -> OpticalFlowExecuteFlagsNV
OpticalFlowExecuteFlagsNV -> Bool
OpticalFlowExecuteFlagsNV -> Int
OpticalFlowExecuteFlagsNV -> Maybe Int
OpticalFlowExecuteFlagsNV -> OpticalFlowExecuteFlagsNV
OpticalFlowExecuteFlagsNV -> Int -> Bool
OpticalFlowExecuteFlagsNV -> Int -> OpticalFlowExecuteFlagsNV
OpticalFlowExecuteFlagsNV
-> OpticalFlowExecuteFlagsNV -> OpticalFlowExecuteFlagsNV
forall a.
Eq a =>
(a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> a
-> (Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> Bool)
-> (a -> Maybe Int)
-> (a -> Int)
-> (a -> Bool)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int)
-> Bits a
$c.&. :: OpticalFlowExecuteFlagsNV
-> OpticalFlowExecuteFlagsNV -> OpticalFlowExecuteFlagsNV
.&. :: OpticalFlowExecuteFlagsNV
-> OpticalFlowExecuteFlagsNV -> OpticalFlowExecuteFlagsNV
$c.|. :: OpticalFlowExecuteFlagsNV
-> OpticalFlowExecuteFlagsNV -> OpticalFlowExecuteFlagsNV
.|. :: OpticalFlowExecuteFlagsNV
-> OpticalFlowExecuteFlagsNV -> OpticalFlowExecuteFlagsNV
$cxor :: OpticalFlowExecuteFlagsNV
-> OpticalFlowExecuteFlagsNV -> OpticalFlowExecuteFlagsNV
xor :: OpticalFlowExecuteFlagsNV
-> OpticalFlowExecuteFlagsNV -> OpticalFlowExecuteFlagsNV
$ccomplement :: OpticalFlowExecuteFlagsNV -> OpticalFlowExecuteFlagsNV
complement :: OpticalFlowExecuteFlagsNV -> OpticalFlowExecuteFlagsNV
$cshift :: OpticalFlowExecuteFlagsNV -> Int -> OpticalFlowExecuteFlagsNV
shift :: OpticalFlowExecuteFlagsNV -> Int -> OpticalFlowExecuteFlagsNV
$crotate :: OpticalFlowExecuteFlagsNV -> Int -> OpticalFlowExecuteFlagsNV
rotate :: OpticalFlowExecuteFlagsNV -> Int -> OpticalFlowExecuteFlagsNV
$czeroBits :: OpticalFlowExecuteFlagsNV
zeroBits :: OpticalFlowExecuteFlagsNV
$cbit :: Int -> OpticalFlowExecuteFlagsNV
bit :: Int -> OpticalFlowExecuteFlagsNV
$csetBit :: OpticalFlowExecuteFlagsNV -> Int -> OpticalFlowExecuteFlagsNV
setBit :: OpticalFlowExecuteFlagsNV -> Int -> OpticalFlowExecuteFlagsNV
$cclearBit :: OpticalFlowExecuteFlagsNV -> Int -> OpticalFlowExecuteFlagsNV
clearBit :: OpticalFlowExecuteFlagsNV -> Int -> OpticalFlowExecuteFlagsNV
$ccomplementBit :: OpticalFlowExecuteFlagsNV -> Int -> OpticalFlowExecuteFlagsNV
complementBit :: OpticalFlowExecuteFlagsNV -> Int -> OpticalFlowExecuteFlagsNV
$ctestBit :: OpticalFlowExecuteFlagsNV -> Int -> Bool
testBit :: OpticalFlowExecuteFlagsNV -> Int -> Bool
$cbitSizeMaybe :: OpticalFlowExecuteFlagsNV -> Maybe Int
bitSizeMaybe :: OpticalFlowExecuteFlagsNV -> Maybe Int
$cbitSize :: OpticalFlowExecuteFlagsNV -> Int
bitSize :: OpticalFlowExecuteFlagsNV -> Int
$cisSigned :: OpticalFlowExecuteFlagsNV -> Bool
isSigned :: OpticalFlowExecuteFlagsNV -> Bool
$cshiftL :: OpticalFlowExecuteFlagsNV -> Int -> OpticalFlowExecuteFlagsNV
shiftL :: OpticalFlowExecuteFlagsNV -> Int -> OpticalFlowExecuteFlagsNV
$cunsafeShiftL :: OpticalFlowExecuteFlagsNV -> Int -> OpticalFlowExecuteFlagsNV
unsafeShiftL :: OpticalFlowExecuteFlagsNV -> Int -> OpticalFlowExecuteFlagsNV
$cshiftR :: OpticalFlowExecuteFlagsNV -> Int -> OpticalFlowExecuteFlagsNV
shiftR :: OpticalFlowExecuteFlagsNV -> Int -> OpticalFlowExecuteFlagsNV
$cunsafeShiftR :: OpticalFlowExecuteFlagsNV -> Int -> OpticalFlowExecuteFlagsNV
unsafeShiftR :: OpticalFlowExecuteFlagsNV -> Int -> OpticalFlowExecuteFlagsNV
$crotateL :: OpticalFlowExecuteFlagsNV -> Int -> OpticalFlowExecuteFlagsNV
rotateL :: OpticalFlowExecuteFlagsNV -> Int -> OpticalFlowExecuteFlagsNV
$crotateR :: OpticalFlowExecuteFlagsNV -> Int -> OpticalFlowExecuteFlagsNV
rotateR :: OpticalFlowExecuteFlagsNV -> Int -> OpticalFlowExecuteFlagsNV
$cpopCount :: OpticalFlowExecuteFlagsNV -> Int
popCount :: OpticalFlowExecuteFlagsNV -> Int
Bits, Bits OpticalFlowExecuteFlagsNV
Bits OpticalFlowExecuteFlagsNV =>
(OpticalFlowExecuteFlagsNV -> Int)
-> (OpticalFlowExecuteFlagsNV -> Int)
-> (OpticalFlowExecuteFlagsNV -> Int)
-> FiniteBits OpticalFlowExecuteFlagsNV
OpticalFlowExecuteFlagsNV -> Int
forall b.
Bits b =>
(b -> Int) -> (b -> Int) -> (b -> Int) -> FiniteBits b
$cfiniteBitSize :: OpticalFlowExecuteFlagsNV -> Int
finiteBitSize :: OpticalFlowExecuteFlagsNV -> Int
$ccountLeadingZeros :: OpticalFlowExecuteFlagsNV -> Int
countLeadingZeros :: OpticalFlowExecuteFlagsNV -> Int
$ccountTrailingZeros :: OpticalFlowExecuteFlagsNV -> Int
countTrailingZeros :: OpticalFlowExecuteFlagsNV -> Int
FiniteBits)

-- No documentation found for Nested "VkOpticalFlowExecuteFlagBitsNV" "VK_OPTICAL_FLOW_EXECUTE_DISABLE_TEMPORAL_HINTS_BIT_NV"
pattern $mOPTICAL_FLOW_EXECUTE_DISABLE_TEMPORAL_HINTS_BIT_NV :: forall {r}.
OpticalFlowExecuteFlagsNV -> ((# #) -> r) -> ((# #) -> r) -> r
$bOPTICAL_FLOW_EXECUTE_DISABLE_TEMPORAL_HINTS_BIT_NV :: OpticalFlowExecuteFlagsNV
OPTICAL_FLOW_EXECUTE_DISABLE_TEMPORAL_HINTS_BIT_NV = OpticalFlowExecuteFlagBitsNV 0x00000001

conNameOpticalFlowExecuteFlagBitsNV :: String
conNameOpticalFlowExecuteFlagBitsNV :: String
conNameOpticalFlowExecuteFlagBitsNV = String
"OpticalFlowExecuteFlagBitsNV"

enumPrefixOpticalFlowExecuteFlagBitsNV :: String
enumPrefixOpticalFlowExecuteFlagBitsNV :: String
enumPrefixOpticalFlowExecuteFlagBitsNV = String
"OPTICAL_FLOW_EXECUTE_DISABLE_TEMPORAL_HINTS_BIT_NV"

showTableOpticalFlowExecuteFlagBitsNV :: [(OpticalFlowExecuteFlagBitsNV, String)]
showTableOpticalFlowExecuteFlagBitsNV :: [(OpticalFlowExecuteFlagsNV, String)]
showTableOpticalFlowExecuteFlagBitsNV =
  [
    ( OpticalFlowExecuteFlagsNV
OPTICAL_FLOW_EXECUTE_DISABLE_TEMPORAL_HINTS_BIT_NV
    , String
""
    )
  ]

instance Show OpticalFlowExecuteFlagBitsNV where
  showsPrec :: Int -> OpticalFlowExecuteFlagsNV -> ShowS
showsPrec =
    String
-> [(OpticalFlowExecuteFlagsNV, String)]
-> String
-> (OpticalFlowExecuteFlagsNV -> Word32)
-> (Word32 -> ShowS)
-> Int
-> OpticalFlowExecuteFlagsNV
-> ShowS
forall a i.
Eq a =>
String
-> [(a, String)]
-> String
-> (a -> i)
-> (i -> ShowS)
-> Int
-> a
-> ShowS
enumShowsPrec
      String
enumPrefixOpticalFlowExecuteFlagBitsNV
      [(OpticalFlowExecuteFlagsNV, String)]
showTableOpticalFlowExecuteFlagBitsNV
      String
conNameOpticalFlowExecuteFlagBitsNV
      (\(OpticalFlowExecuteFlagBitsNV Word32
x) -> Word32
x)
      (\Word32
x -> String -> ShowS
showString String
"0x" ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Word32 -> ShowS
forall a. Integral a => a -> ShowS
showHex Word32
x)

instance Read OpticalFlowExecuteFlagBitsNV where
  readPrec :: ReadPrec OpticalFlowExecuteFlagsNV
readPrec =
    String
-> [(OpticalFlowExecuteFlagsNV, String)]
-> String
-> (Word32 -> OpticalFlowExecuteFlagsNV)
-> ReadPrec OpticalFlowExecuteFlagsNV
forall i a.
Read i =>
String -> [(a, String)] -> String -> (i -> a) -> ReadPrec a
enumReadPrec
      String
enumPrefixOpticalFlowExecuteFlagBitsNV
      [(OpticalFlowExecuteFlagsNV, String)]
showTableOpticalFlowExecuteFlagBitsNV
      String
conNameOpticalFlowExecuteFlagBitsNV
      Word32 -> OpticalFlowExecuteFlagsNV
OpticalFlowExecuteFlagBitsNV

type NV_OPTICAL_FLOW_SPEC_VERSION = 1

-- No documentation found for TopLevel "VK_NV_OPTICAL_FLOW_SPEC_VERSION"
pattern NV_OPTICAL_FLOW_SPEC_VERSION :: forall a . Integral a => a
pattern $mNV_OPTICAL_FLOW_SPEC_VERSION :: forall {r} {a}.
Integral a =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
$bNV_OPTICAL_FLOW_SPEC_VERSION :: forall a. Integral a => a
NV_OPTICAL_FLOW_SPEC_VERSION = 1


type NV_OPTICAL_FLOW_EXTENSION_NAME = "VK_NV_optical_flow"

-- No documentation found for TopLevel "VK_NV_OPTICAL_FLOW_EXTENSION_NAME"
pattern NV_OPTICAL_FLOW_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
pattern $mNV_OPTICAL_FLOW_EXTENSION_NAME :: forall {r} {a}.
(Eq a, IsString a) =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
$bNV_OPTICAL_FLOW_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a
NV_OPTICAL_FLOW_EXTENSION_NAME = "VK_NV_optical_flow"