{-# language CPP #-}
-- | = Name
--
-- VK_KHR_maintenance4 - device extension
--
-- == VK_KHR_maintenance4
--
-- [__Name String__]
--     @VK_KHR_maintenance4@
--
-- [__Extension Type__]
--     Device extension
--
-- [__Registered Extension Number__]
--     414
--
-- [__Revision__]
--     2
--
-- [__Extension and Version Dependencies__]
--
--     -   Requires Vulkan 1.1
--
-- [__Contact__]
--
--     -   Piers Daniell
--         <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?body=[VK_KHR_maintenance4] @pdaniell-nv%0A<<Here describe the issue or question you have about the VK_KHR_maintenance4 extension>> >
--
-- == Other Extension Metadata
--
-- [__Last Modified Date__]
--     2021-10-25
--
-- [__Interactions and External Dependencies__]
--
--     -   Requires SPIR-V 1.2 for @LocalSizeId@
--
-- [__Contributors__]
--
--     -   Lionel Duc, NVIDIA
--
--     -   Jason Ekstrand, Intel
--
--     -   Spencer Fricke, Samsung
--
--     -   Tobias Hector, AMD
--
--     -   Lionel Landwerlin, Intel
--
--     -   Graeme Leese, Broadcom
--
--     -   Tom Olson, Arm
--
--     -   Stu Smith, AMD
--
--     -   Yiwei Zhang, Google
--
-- == Description
--
-- @VK_KHR_maintenance4@ adds a collection of minor features, none of which
-- would warrant an entire extension of their own.
--
-- The new features are as follows:
--
-- -   Allow the application to destroy their
--     'Vulkan.Core10.Handles.PipelineLayout' object immediately after it
--     was used to create another object. It is no longer necessary to keep
--     its handle valid while the created object is in use.
--
-- -   Add a new
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-maxBufferSize maxBufferSize>
--     implementation-defined limit for the maximum size
--     'Vulkan.Core10.Handles.Buffer' that /can/ be created.
--
-- -   Add support for the SPIR-V 1.2 @LocalSizeId@ execution mode, which
--     can be used as an alternative to @LocalSize@ to specify the local
--     workgroup size with specialization constants.
--
-- -   Add a guarantee that images created with identical creation
--     parameters will always have the same alignment requirements.
--
-- -   Add new 'getDeviceBufferMemoryRequirementsKHR',
--     'getDeviceImageMemoryRequirementsKHR', and
--     'getDeviceImageSparseMemoryRequirementsKHR' to allow the application
--     to query the image memory requirements without having to create an
--     image object and query it.
--
-- -   Relax the requirement that push constants must be initialized before
--     they are dynamically accessed.
--
-- -   Relax the interface matching rules to allow a larger output vector
--     to match with a smaller input vector, with additional values being
--     discarded.
--
-- -   Add a guarantee for buffer memory requirement that the size memory
--     requirement is never greater than the result of aligning create size
--     with the alignment memory requirement.
--
-- == New Commands
--
-- -   'getDeviceBufferMemoryRequirementsKHR'
--
-- -   'getDeviceImageMemoryRequirementsKHR'
--
-- -   'getDeviceImageSparseMemoryRequirementsKHR'
--
-- == New Structures
--
-- -   'DeviceBufferMemoryRequirementsKHR'
--
-- -   'DeviceImageMemoryRequirementsKHR'
--
-- -   Extending
--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--     'Vulkan.Core10.Device.DeviceCreateInfo':
--
--     -   'PhysicalDeviceMaintenance4FeaturesKHR'
--
-- -   Extending
--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2':
--
--     -   'PhysicalDeviceMaintenance4PropertiesKHR'
--
-- == New Enum Constants
--
-- -   'KHR_MAINTENANCE_4_EXTENSION_NAME'
--
-- -   'KHR_MAINTENANCE_4_SPEC_VERSION'
--
-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS_KHR'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS_KHR'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES_KHR'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES_KHR'
--
-- == Issues
--
-- None.
--
-- == Version History
--
-- -   Revision 1, 2021-08-18 (Piers Daniell)
--
--     -   Internal revisions
--
-- -   Revision 2, 2021-10-25 (Yiwei Zhang)
--
--     -   More guarantees on buffer memory requirements
--
-- == See Also
--
-- 'DeviceBufferMemoryRequirementsKHR', 'DeviceImageMemoryRequirementsKHR',
-- 'PhysicalDeviceMaintenance4FeaturesKHR',
-- 'PhysicalDeviceMaintenance4PropertiesKHR',
-- 'getDeviceBufferMemoryRequirementsKHR',
-- 'getDeviceImageMemoryRequirementsKHR',
-- 'getDeviceImageSparseMemoryRequirementsKHR'
--
-- == Document Notes
--
-- For more information, see the
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_maintenance4 Vulkan Specification>
--
-- This page is a generated document. Fixes and changes should be made to
-- the generator scripts, not directly.
module Vulkan.Extensions.VK_KHR_maintenance4  ( getDeviceBufferMemoryRequirementsKHR
                                              , getDeviceImageMemoryRequirementsKHR
                                              , getDeviceImageSparseMemoryRequirementsKHR
                                              , DeviceBufferMemoryRequirementsKHR(..)
                                              , DeviceImageMemoryRequirementsKHR(..)
                                              , PhysicalDeviceMaintenance4FeaturesKHR(..)
                                              , PhysicalDeviceMaintenance4PropertiesKHR(..)
                                              , KHR_MAINTENANCE_4_SPEC_VERSION
                                              , pattern KHR_MAINTENANCE_4_SPEC_VERSION
                                              , KHR_MAINTENANCE_4_EXTENSION_NAME
                                              , pattern KHR_MAINTENANCE_4_EXTENSION_NAME
                                              ) where

import Vulkan.Internal.Utils (traceAroundEvent)
import Control.Exception.Base (bracket)
import Control.Monad (unless)
import Control.Monad.IO.Class (liftIO)
import Foreign.Marshal.Alloc (allocaBytes)
import Foreign.Marshal.Alloc (callocBytes)
import Foreign.Marshal.Alloc (free)
import GHC.IO (throwIO)
import GHC.Ptr (castPtr)
import GHC.Ptr (nullFunPtr)
import Foreign.Ptr (nullPtr)
import Foreign.Ptr (plusPtr)
import Control.Monad.Trans.Class (lift)
import Control.Monad.Trans.Cont (evalContT)
import Data.Vector (generateM)
import Vulkan.CStruct (FromCStruct)
import Vulkan.CStruct (FromCStruct(..))
import Vulkan.CStruct (ToCStruct)
import Vulkan.CStruct (ToCStruct(..))
import Vulkan.Zero (Zero(..))
import Control.Monad.IO.Class (MonadIO)
import Data.String (IsString)
import Data.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 Foreign.Ptr (FunPtr)
import Foreign.Ptr (Ptr)
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.CStruct.Extends (peekSomeCStruct)
import Vulkan.CStruct.Extends (withSomeCStruct)
import Vulkan.NamedType ((:::))
import Vulkan.Core10.FundamentalTypes (Bool32)
import Vulkan.Core10.Buffer (BufferCreateInfo)
import Vulkan.Core10.Handles (Device)
import Vulkan.Core10.Handles (Device(..))
import Vulkan.Core10.Handles (Device(Device))
import Vulkan.Dynamic (DeviceCmds(pVkGetDeviceBufferMemoryRequirementsKHR))
import Vulkan.Dynamic (DeviceCmds(pVkGetDeviceImageMemoryRequirementsKHR))
import Vulkan.Dynamic (DeviceCmds(pVkGetDeviceImageSparseMemoryRequirementsKHR))
import Vulkan.Core10.FundamentalTypes (DeviceSize)
import Vulkan.Core10.Handles (Device_T)
import Vulkan.CStruct.Extends (Extendss)
import Vulkan.Core10.Enums.ImageAspectFlagBits (ImageAspectFlagBits)
import Vulkan.Core10.Image (ImageCreateInfo)
import Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2 (MemoryRequirements2)
import Vulkan.CStruct.Extends (PeekChain)
import Vulkan.CStruct.Extends (PokeChain)
import Vulkan.CStruct.Extends (SomeStruct)
import Vulkan.CStruct.Extends (SomeStruct(..))
import Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2 (SparseImageMemoryRequirements2)
import Vulkan.Core10.Enums.StructureType (StructureType)
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS_KHR))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS_KHR))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES_KHR))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES_KHR))
foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkGetDeviceBufferMemoryRequirementsKHR
  :: FunPtr (Ptr Device_T -> Ptr DeviceBufferMemoryRequirementsKHR -> Ptr (SomeStruct MemoryRequirements2) -> IO ()) -> Ptr Device_T -> Ptr DeviceBufferMemoryRequirementsKHR -> Ptr (SomeStruct MemoryRequirements2) -> IO ()

-- | vkGetDeviceBufferMemoryRequirementsKHR - Returns the memory requirements
-- for specified Vulkan object
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_maintenance4 VK_KHR_maintenance4>,
-- 'Vulkan.Core10.Handles.Device', 'DeviceBufferMemoryRequirementsKHR',
-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.MemoryRequirements2'
getDeviceBufferMemoryRequirementsKHR :: forall a io
                                      . (Extendss MemoryRequirements2 a, PokeChain a, PeekChain a, MonadIO io)
                                     => -- | @device@ is the logical device intended to own the buffer.
                                        --
                                        -- #VUID-vkGetDeviceBufferMemoryRequirementsKHR-device-parameter# @device@
                                        -- /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
                                        Device
                                     -> -- | @pInfo@ is a pointer to a 'DeviceBufferMemoryRequirementsKHR' structure
                                        -- containing parameters required for the memory requirements query.
                                        --
                                        -- #VUID-vkGetDeviceBufferMemoryRequirementsKHR-pInfo-parameter# @pInfo@
                                        -- /must/ be a valid pointer to a valid 'DeviceBufferMemoryRequirementsKHR'
                                        -- structure
                                        ("info" ::: DeviceBufferMemoryRequirementsKHR)
                                     -> io (MemoryRequirements2 a)
getDeviceBufferMemoryRequirementsKHR :: Device
-> ("info" ::: DeviceBufferMemoryRequirementsKHR)
-> io (MemoryRequirements2 a)
getDeviceBufferMemoryRequirementsKHR Device
device "info" ::: DeviceBufferMemoryRequirementsKHR
info = IO (MemoryRequirements2 a) -> io (MemoryRequirements2 a)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (MemoryRequirements2 a) -> io (MemoryRequirements2 a))
-> (ContT (MemoryRequirements2 a) IO (MemoryRequirements2 a)
    -> IO (MemoryRequirements2 a))
-> ContT (MemoryRequirements2 a) IO (MemoryRequirements2 a)
-> io (MemoryRequirements2 a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT (MemoryRequirements2 a) IO (MemoryRequirements2 a)
-> IO (MemoryRequirements2 a)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (MemoryRequirements2 a) IO (MemoryRequirements2 a)
 -> io (MemoryRequirements2 a))
-> ContT (MemoryRequirements2 a) IO (MemoryRequirements2 a)
-> io (MemoryRequirements2 a)
forall a b. (a -> b) -> a -> b
$ do
  let vkGetDeviceBufferMemoryRequirementsKHRPtr :: FunPtr
  (Ptr Device_T
   -> ("pInfo" ::: Ptr ("info" ::: DeviceBufferMemoryRequirementsKHR))
   -> ("pMemoryRequirements" ::: Ptr (SomeStruct MemoryRequirements2))
   -> IO ())
vkGetDeviceBufferMemoryRequirementsKHRPtr = DeviceCmds
-> FunPtr
     (Ptr Device_T
      -> ("pInfo" ::: Ptr ("info" ::: DeviceBufferMemoryRequirementsKHR))
      -> ("pMemoryRequirements" ::: Ptr (SomeStruct MemoryRequirements2))
      -> IO ())
pVkGetDeviceBufferMemoryRequirementsKHR (case Device
device of Device{DeviceCmds
$sel:deviceCmds:Device :: Device -> DeviceCmds
deviceCmds :: DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO () -> ContT (MemoryRequirements2 a) IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT (MemoryRequirements2 a) IO ())
-> IO () -> ContT (MemoryRequirements2 a) IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr Device_T
   -> ("pInfo" ::: Ptr ("info" ::: DeviceBufferMemoryRequirementsKHR))
   -> ("pMemoryRequirements" ::: Ptr (SomeStruct MemoryRequirements2))
   -> IO ())
vkGetDeviceBufferMemoryRequirementsKHRPtr FunPtr
  (Ptr Device_T
   -> ("pInfo" ::: Ptr ("info" ::: DeviceBufferMemoryRequirementsKHR))
   -> ("pMemoryRequirements" ::: Ptr (SomeStruct MemoryRequirements2))
   -> IO ())
-> FunPtr
     (Ptr Device_T
      -> ("pInfo" ::: Ptr ("info" ::: DeviceBufferMemoryRequirementsKHR))
      -> ("pMemoryRequirements" ::: Ptr (SomeStruct MemoryRequirements2))
      -> IO ())
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr Device_T
   -> ("pInfo" ::: Ptr ("info" ::: DeviceBufferMemoryRequirementsKHR))
   -> ("pMemoryRequirements" ::: Ptr (SomeStruct MemoryRequirements2))
   -> IO ())
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
    IOException -> IO ()
forall e a. 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 vkGetDeviceBufferMemoryRequirementsKHR is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkGetDeviceBufferMemoryRequirementsKHR' :: Ptr Device_T
-> ("pInfo" ::: Ptr ("info" ::: DeviceBufferMemoryRequirementsKHR))
-> ("pMemoryRequirements" ::: Ptr (SomeStruct MemoryRequirements2))
-> IO ()
vkGetDeviceBufferMemoryRequirementsKHR' = FunPtr
  (Ptr Device_T
   -> ("pInfo" ::: Ptr ("info" ::: DeviceBufferMemoryRequirementsKHR))
   -> ("pMemoryRequirements" ::: Ptr (SomeStruct MemoryRequirements2))
   -> IO ())
-> Ptr Device_T
-> ("pInfo" ::: Ptr ("info" ::: DeviceBufferMemoryRequirementsKHR))
-> ("pMemoryRequirements" ::: Ptr (SomeStruct MemoryRequirements2))
-> IO ()
mkVkGetDeviceBufferMemoryRequirementsKHR FunPtr
  (Ptr Device_T
   -> ("pInfo" ::: Ptr ("info" ::: DeviceBufferMemoryRequirementsKHR))
   -> ("pMemoryRequirements" ::: Ptr (SomeStruct MemoryRequirements2))
   -> IO ())
vkGetDeviceBufferMemoryRequirementsKHRPtr
  "pInfo" ::: Ptr ("info" ::: DeviceBufferMemoryRequirementsKHR)
pInfo <- ((("pInfo" ::: Ptr ("info" ::: DeviceBufferMemoryRequirementsKHR))
  -> IO (MemoryRequirements2 a))
 -> IO (MemoryRequirements2 a))
-> ContT
     (MemoryRequirements2 a)
     IO
     ("pInfo" ::: Ptr ("info" ::: DeviceBufferMemoryRequirementsKHR))
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pInfo" ::: Ptr ("info" ::: DeviceBufferMemoryRequirementsKHR))
   -> IO (MemoryRequirements2 a))
  -> IO (MemoryRequirements2 a))
 -> ContT
      (MemoryRequirements2 a)
      IO
      ("pInfo" ::: Ptr ("info" ::: DeviceBufferMemoryRequirementsKHR)))
-> ((("pInfo"
      ::: Ptr ("info" ::: DeviceBufferMemoryRequirementsKHR))
     -> IO (MemoryRequirements2 a))
    -> IO (MemoryRequirements2 a))
-> ContT
     (MemoryRequirements2 a)
     IO
     ("pInfo" ::: Ptr ("info" ::: DeviceBufferMemoryRequirementsKHR))
forall a b. (a -> b) -> a -> b
$ ("info" ::: DeviceBufferMemoryRequirementsKHR)
-> (("pInfo"
     ::: Ptr ("info" ::: DeviceBufferMemoryRequirementsKHR))
    -> IO (MemoryRequirements2 a))
-> IO (MemoryRequirements2 a)
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
withCStruct ("info" ::: DeviceBufferMemoryRequirementsKHR
info)
  Ptr (MemoryRequirements2 a)
pPMemoryRequirements <- ((Ptr (MemoryRequirements2 a) -> IO (MemoryRequirements2 a))
 -> IO (MemoryRequirements2 a))
-> ContT (MemoryRequirements2 a) IO (Ptr (MemoryRequirements2 a))
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (forall b.
ToCStruct (MemoryRequirements2 a) =>
(Ptr (MemoryRequirements2 a) -> IO b) -> IO b
forall a b. ToCStruct a => (Ptr a -> IO b) -> IO b
withZeroCStruct @(MemoryRequirements2 _))
  IO () -> ContT (MemoryRequirements2 a) IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT (MemoryRequirements2 a) IO ())
-> IO () -> ContT (MemoryRequirements2 a) IO ()
forall a b. (a -> b) -> a -> b
$ String -> IO () -> IO ()
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkGetDeviceBufferMemoryRequirementsKHR" (Ptr Device_T
-> ("pInfo" ::: Ptr ("info" ::: DeviceBufferMemoryRequirementsKHR))
-> ("pMemoryRequirements" ::: Ptr (SomeStruct MemoryRequirements2))
-> IO ()
vkGetDeviceBufferMemoryRequirementsKHR' (Device -> Ptr Device_T
deviceHandle (Device
device)) "pInfo" ::: Ptr ("info" ::: DeviceBufferMemoryRequirementsKHR)
pInfo (Ptr (MemoryRequirements2 a)
-> "pMemoryRequirements" ::: Ptr (SomeStruct MemoryRequirements2)
forall (a :: [*] -> *) (es :: [*]).
Ptr (a es) -> Ptr (SomeStruct a)
forgetExtensions (Ptr (MemoryRequirements2 a)
pPMemoryRequirements)))
  MemoryRequirements2 a
pMemoryRequirements <- IO (MemoryRequirements2 a)
-> ContT (MemoryRequirements2 a) IO (MemoryRequirements2 a)
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO (MemoryRequirements2 a)
 -> ContT (MemoryRequirements2 a) IO (MemoryRequirements2 a))
-> IO (MemoryRequirements2 a)
-> ContT (MemoryRequirements2 a) IO (MemoryRequirements2 a)
forall a b. (a -> b) -> a -> b
$ Ptr (MemoryRequirements2 a) -> IO (MemoryRequirements2 a)
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @(MemoryRequirements2 _) Ptr (MemoryRequirements2 a)
pPMemoryRequirements
  MemoryRequirements2 a
-> ContT (MemoryRequirements2 a) IO (MemoryRequirements2 a)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (MemoryRequirements2 a
 -> ContT (MemoryRequirements2 a) IO (MemoryRequirements2 a))
-> MemoryRequirements2 a
-> ContT (MemoryRequirements2 a) IO (MemoryRequirements2 a)
forall a b. (a -> b) -> a -> b
$ (MemoryRequirements2 a
pMemoryRequirements)


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

-- | vkGetDeviceImageMemoryRequirementsKHR - Returns the memory requirements
-- for specified Vulkan object
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_maintenance4 VK_KHR_maintenance4>,
-- 'Vulkan.Core10.Handles.Device', 'DeviceImageMemoryRequirementsKHR',
-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.MemoryRequirements2'
getDeviceImageMemoryRequirementsKHR :: forall a io
                                     . (Extendss MemoryRequirements2 a, PokeChain a, PeekChain a, MonadIO io)
                                    => -- | @device@ is the logical device intended to own the image.
                                       --
                                       -- #VUID-vkGetDeviceImageMemoryRequirementsKHR-device-parameter# @device@
                                       -- /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
                                       Device
                                    -> -- | @pInfo@ is a pointer to a 'DeviceImageMemoryRequirementsKHR' structure
                                       -- containing parameters required for the memory requirements query.
                                       --
                                       -- #VUID-vkGetDeviceImageMemoryRequirementsKHR-pInfo-parameter# @pInfo@
                                       -- /must/ be a valid pointer to a valid 'DeviceImageMemoryRequirementsKHR'
                                       -- structure
                                       ("info" ::: DeviceImageMemoryRequirementsKHR)
                                    -> io (MemoryRequirements2 a)
getDeviceImageMemoryRequirementsKHR :: Device
-> ("info" ::: DeviceImageMemoryRequirementsKHR)
-> io (MemoryRequirements2 a)
getDeviceImageMemoryRequirementsKHR Device
device "info" ::: DeviceImageMemoryRequirementsKHR
info = IO (MemoryRequirements2 a) -> io (MemoryRequirements2 a)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (MemoryRequirements2 a) -> io (MemoryRequirements2 a))
-> (ContT (MemoryRequirements2 a) IO (MemoryRequirements2 a)
    -> IO (MemoryRequirements2 a))
-> ContT (MemoryRequirements2 a) IO (MemoryRequirements2 a)
-> io (MemoryRequirements2 a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT (MemoryRequirements2 a) IO (MemoryRequirements2 a)
-> IO (MemoryRequirements2 a)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (MemoryRequirements2 a) IO (MemoryRequirements2 a)
 -> io (MemoryRequirements2 a))
-> ContT (MemoryRequirements2 a) IO (MemoryRequirements2 a)
-> io (MemoryRequirements2 a)
forall a b. (a -> b) -> a -> b
$ do
  let vkGetDeviceImageMemoryRequirementsKHRPtr :: FunPtr
  (Ptr Device_T
   -> ("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR))
   -> ("pMemoryRequirements" ::: Ptr (SomeStruct MemoryRequirements2))
   -> IO ())
vkGetDeviceImageMemoryRequirementsKHRPtr = DeviceCmds
-> FunPtr
     (Ptr Device_T
      -> ("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR))
      -> ("pMemoryRequirements" ::: Ptr (SomeStruct MemoryRequirements2))
      -> IO ())
pVkGetDeviceImageMemoryRequirementsKHR (case Device
device of Device{DeviceCmds
deviceCmds :: DeviceCmds
$sel:deviceCmds:Device :: Device -> DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO () -> ContT (MemoryRequirements2 a) IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT (MemoryRequirements2 a) IO ())
-> IO () -> ContT (MemoryRequirements2 a) IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr Device_T
   -> ("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR))
   -> ("pMemoryRequirements" ::: Ptr (SomeStruct MemoryRequirements2))
   -> IO ())
vkGetDeviceImageMemoryRequirementsKHRPtr FunPtr
  (Ptr Device_T
   -> ("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR))
   -> ("pMemoryRequirements" ::: Ptr (SomeStruct MemoryRequirements2))
   -> IO ())
-> FunPtr
     (Ptr Device_T
      -> ("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR))
      -> ("pMemoryRequirements" ::: Ptr (SomeStruct MemoryRequirements2))
      -> IO ())
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr Device_T
   -> ("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR))
   -> ("pMemoryRequirements" ::: Ptr (SomeStruct MemoryRequirements2))
   -> IO ())
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
    IOException -> IO ()
forall e a. 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 vkGetDeviceImageMemoryRequirementsKHR is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkGetDeviceImageMemoryRequirementsKHR' :: Ptr Device_T
-> ("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR))
-> ("pMemoryRequirements" ::: Ptr (SomeStruct MemoryRequirements2))
-> IO ()
vkGetDeviceImageMemoryRequirementsKHR' = FunPtr
  (Ptr Device_T
   -> ("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR))
   -> ("pMemoryRequirements" ::: Ptr (SomeStruct MemoryRequirements2))
   -> IO ())
-> Ptr Device_T
-> ("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR))
-> ("pMemoryRequirements" ::: Ptr (SomeStruct MemoryRequirements2))
-> IO ()
mkVkGetDeviceImageMemoryRequirementsKHR FunPtr
  (Ptr Device_T
   -> ("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR))
   -> ("pMemoryRequirements" ::: Ptr (SomeStruct MemoryRequirements2))
   -> IO ())
vkGetDeviceImageMemoryRequirementsKHRPtr
  "pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR)
pInfo <- ((("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR))
  -> IO (MemoryRequirements2 a))
 -> IO (MemoryRequirements2 a))
-> ContT
     (MemoryRequirements2 a)
     IO
     ("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR))
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR))
   -> IO (MemoryRequirements2 a))
  -> IO (MemoryRequirements2 a))
 -> ContT
      (MemoryRequirements2 a)
      IO
      ("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR)))
-> ((("pInfo"
      ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR))
     -> IO (MemoryRequirements2 a))
    -> IO (MemoryRequirements2 a))
-> ContT
     (MemoryRequirements2 a)
     IO
     ("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR))
forall a b. (a -> b) -> a -> b
$ ("info" ::: DeviceImageMemoryRequirementsKHR)
-> (("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR))
    -> IO (MemoryRequirements2 a))
-> IO (MemoryRequirements2 a)
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
withCStruct ("info" ::: DeviceImageMemoryRequirementsKHR
info)
  Ptr (MemoryRequirements2 a)
pPMemoryRequirements <- ((Ptr (MemoryRequirements2 a) -> IO (MemoryRequirements2 a))
 -> IO (MemoryRequirements2 a))
-> ContT (MemoryRequirements2 a) IO (Ptr (MemoryRequirements2 a))
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (forall b.
ToCStruct (MemoryRequirements2 a) =>
(Ptr (MemoryRequirements2 a) -> IO b) -> IO b
forall a b. ToCStruct a => (Ptr a -> IO b) -> IO b
withZeroCStruct @(MemoryRequirements2 _))
  IO () -> ContT (MemoryRequirements2 a) IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT (MemoryRequirements2 a) IO ())
-> IO () -> ContT (MemoryRequirements2 a) IO ()
forall a b. (a -> b) -> a -> b
$ String -> IO () -> IO ()
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkGetDeviceImageMemoryRequirementsKHR" (Ptr Device_T
-> ("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR))
-> ("pMemoryRequirements" ::: Ptr (SomeStruct MemoryRequirements2))
-> IO ()
vkGetDeviceImageMemoryRequirementsKHR' (Device -> Ptr Device_T
deviceHandle (Device
device)) "pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR)
pInfo (Ptr (MemoryRequirements2 a)
-> "pMemoryRequirements" ::: Ptr (SomeStruct MemoryRequirements2)
forall (a :: [*] -> *) (es :: [*]).
Ptr (a es) -> Ptr (SomeStruct a)
forgetExtensions (Ptr (MemoryRequirements2 a)
pPMemoryRequirements)))
  MemoryRequirements2 a
pMemoryRequirements <- IO (MemoryRequirements2 a)
-> ContT (MemoryRequirements2 a) IO (MemoryRequirements2 a)
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO (MemoryRequirements2 a)
 -> ContT (MemoryRequirements2 a) IO (MemoryRequirements2 a))
-> IO (MemoryRequirements2 a)
-> ContT (MemoryRequirements2 a) IO (MemoryRequirements2 a)
forall a b. (a -> b) -> a -> b
$ Ptr (MemoryRequirements2 a) -> IO (MemoryRequirements2 a)
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @(MemoryRequirements2 _) Ptr (MemoryRequirements2 a)
pPMemoryRequirements
  MemoryRequirements2 a
-> ContT (MemoryRequirements2 a) IO (MemoryRequirements2 a)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (MemoryRequirements2 a
 -> ContT (MemoryRequirements2 a) IO (MemoryRequirements2 a))
-> MemoryRequirements2 a
-> ContT (MemoryRequirements2 a) IO (MemoryRequirements2 a)
forall a b. (a -> b) -> a -> b
$ (MemoryRequirements2 a
pMemoryRequirements)


foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkGetDeviceImageSparseMemoryRequirementsKHR
  :: FunPtr (Ptr Device_T -> Ptr DeviceImageMemoryRequirementsKHR -> Ptr Word32 -> Ptr SparseImageMemoryRequirements2 -> IO ()) -> Ptr Device_T -> Ptr DeviceImageMemoryRequirementsKHR -> Ptr Word32 -> Ptr SparseImageMemoryRequirements2 -> IO ()

-- | vkGetDeviceImageSparseMemoryRequirementsKHR - Query the memory
-- requirements for a sparse image
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkGetDeviceImageSparseMemoryRequirementsKHR-device-parameter#
--     @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
--
-- -   #VUID-vkGetDeviceImageSparseMemoryRequirementsKHR-pInfo-parameter#
--     @pInfo@ /must/ be a valid pointer to a valid
--     'DeviceImageMemoryRequirementsKHR' structure
--
-- -   #VUID-vkGetDeviceImageSparseMemoryRequirementsKHR-pSparseMemoryRequirementCount-parameter#
--     @pSparseMemoryRequirementCount@ /must/ be a valid pointer to a
--     @uint32_t@ value
--
-- -   #VUID-vkGetDeviceImageSparseMemoryRequirementsKHR-pSparseMemoryRequirements-parameter#
--     If the value referenced by @pSparseMemoryRequirementCount@ is not
--     @0@, and @pSparseMemoryRequirements@ is not @NULL@,
--     @pSparseMemoryRequirements@ /must/ be a valid pointer to an array of
--     @pSparseMemoryRequirementCount@
--     'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.SparseImageMemoryRequirements2'
--     structures
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_maintenance4 VK_KHR_maintenance4>,
-- 'Vulkan.Core10.Handles.Device', 'DeviceImageMemoryRequirementsKHR',
-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_memory_requirements2.SparseImageMemoryRequirements2'
getDeviceImageSparseMemoryRequirementsKHR :: forall io
                                           . (MonadIO io)
                                          => -- | @device@ is the logical device intended to own the image.
                                             Device
                                          -> -- | @pInfo@ is a pointer to a 'DeviceImageMemoryRequirementsKHR' structure
                                             -- containing parameters required for the memory requirements query.
                                             ("info" ::: DeviceImageMemoryRequirementsKHR)
                                          -> io (("sparseMemoryRequirements" ::: Vector SparseImageMemoryRequirements2))
getDeviceImageSparseMemoryRequirementsKHR :: Device
-> ("info" ::: DeviceImageMemoryRequirementsKHR)
-> io
     ("sparseMemoryRequirements"
      ::: Vector SparseImageMemoryRequirements2)
getDeviceImageSparseMemoryRequirementsKHR Device
device "info" ::: DeviceImageMemoryRequirementsKHR
info = IO
  ("sparseMemoryRequirements"
   ::: Vector SparseImageMemoryRequirements2)
-> io
     ("sparseMemoryRequirements"
      ::: Vector SparseImageMemoryRequirements2)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   ("sparseMemoryRequirements"
    ::: Vector SparseImageMemoryRequirements2)
 -> io
      ("sparseMemoryRequirements"
       ::: Vector SparseImageMemoryRequirements2))
-> (ContT
      ("sparseMemoryRequirements"
       ::: Vector SparseImageMemoryRequirements2)
      IO
      ("sparseMemoryRequirements"
       ::: Vector SparseImageMemoryRequirements2)
    -> IO
         ("sparseMemoryRequirements"
          ::: Vector SparseImageMemoryRequirements2))
-> ContT
     ("sparseMemoryRequirements"
      ::: Vector SparseImageMemoryRequirements2)
     IO
     ("sparseMemoryRequirements"
      ::: Vector SparseImageMemoryRequirements2)
-> io
     ("sparseMemoryRequirements"
      ::: Vector SparseImageMemoryRequirements2)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT
  ("sparseMemoryRequirements"
   ::: Vector SparseImageMemoryRequirements2)
  IO
  ("sparseMemoryRequirements"
   ::: Vector SparseImageMemoryRequirements2)
-> IO
     ("sparseMemoryRequirements"
      ::: Vector SparseImageMemoryRequirements2)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   ("sparseMemoryRequirements"
    ::: Vector SparseImageMemoryRequirements2)
   IO
   ("sparseMemoryRequirements"
    ::: Vector SparseImageMemoryRequirements2)
 -> io
      ("sparseMemoryRequirements"
       ::: Vector SparseImageMemoryRequirements2))
-> ContT
     ("sparseMemoryRequirements"
      ::: Vector SparseImageMemoryRequirements2)
     IO
     ("sparseMemoryRequirements"
      ::: Vector SparseImageMemoryRequirements2)
-> io
     ("sparseMemoryRequirements"
      ::: Vector SparseImageMemoryRequirements2)
forall a b. (a -> b) -> a -> b
$ do
  let vkGetDeviceImageSparseMemoryRequirementsKHRPtr :: FunPtr
  (Ptr Device_T
   -> ("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR))
   -> ("pSparseMemoryRequirementCount" ::: Ptr Word32)
   -> ("pSparseMemoryRequirements"
       ::: Ptr SparseImageMemoryRequirements2)
   -> IO ())
vkGetDeviceImageSparseMemoryRequirementsKHRPtr = DeviceCmds
-> FunPtr
     (Ptr Device_T
      -> ("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR))
      -> ("pSparseMemoryRequirementCount" ::: Ptr Word32)
      -> ("pSparseMemoryRequirements"
          ::: Ptr SparseImageMemoryRequirements2)
      -> IO ())
pVkGetDeviceImageSparseMemoryRequirementsKHR (case Device
device of Device{DeviceCmds
deviceCmds :: DeviceCmds
$sel:deviceCmds:Device :: Device -> DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO ()
-> ContT
     ("sparseMemoryRequirements"
      ::: Vector SparseImageMemoryRequirements2)
     IO
     ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO ()
 -> ContT
      ("sparseMemoryRequirements"
       ::: Vector SparseImageMemoryRequirements2)
      IO
      ())
-> IO ()
-> ContT
     ("sparseMemoryRequirements"
      ::: Vector SparseImageMemoryRequirements2)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr Device_T
   -> ("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR))
   -> ("pSparseMemoryRequirementCount" ::: Ptr Word32)
   -> ("pSparseMemoryRequirements"
       ::: Ptr SparseImageMemoryRequirements2)
   -> IO ())
vkGetDeviceImageSparseMemoryRequirementsKHRPtr FunPtr
  (Ptr Device_T
   -> ("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR))
   -> ("pSparseMemoryRequirementCount" ::: Ptr Word32)
   -> ("pSparseMemoryRequirements"
       ::: Ptr SparseImageMemoryRequirements2)
   -> IO ())
-> FunPtr
     (Ptr Device_T
      -> ("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR))
      -> ("pSparseMemoryRequirementCount" ::: Ptr Word32)
      -> ("pSparseMemoryRequirements"
          ::: Ptr SparseImageMemoryRequirements2)
      -> IO ())
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr Device_T
   -> ("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR))
   -> ("pSparseMemoryRequirementCount" ::: Ptr Word32)
   -> ("pSparseMemoryRequirements"
       ::: Ptr SparseImageMemoryRequirements2)
   -> IO ())
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
    IOException -> IO ()
forall e a. Exception e => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"The function pointer for vkGetDeviceImageSparseMemoryRequirementsKHR is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkGetDeviceImageSparseMemoryRequirementsKHR' :: Ptr Device_T
-> ("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR))
-> ("pSparseMemoryRequirementCount" ::: Ptr Word32)
-> ("pSparseMemoryRequirements"
    ::: Ptr SparseImageMemoryRequirements2)
-> IO ()
vkGetDeviceImageSparseMemoryRequirementsKHR' = FunPtr
  (Ptr Device_T
   -> ("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR))
   -> ("pSparseMemoryRequirementCount" ::: Ptr Word32)
   -> ("pSparseMemoryRequirements"
       ::: Ptr SparseImageMemoryRequirements2)
   -> IO ())
-> Ptr Device_T
-> ("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR))
-> ("pSparseMemoryRequirementCount" ::: Ptr Word32)
-> ("pSparseMemoryRequirements"
    ::: Ptr SparseImageMemoryRequirements2)
-> IO ()
mkVkGetDeviceImageSparseMemoryRequirementsKHR FunPtr
  (Ptr Device_T
   -> ("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR))
   -> ("pSparseMemoryRequirementCount" ::: Ptr Word32)
   -> ("pSparseMemoryRequirements"
       ::: Ptr SparseImageMemoryRequirements2)
   -> IO ())
vkGetDeviceImageSparseMemoryRequirementsKHRPtr
  let device' :: Ptr Device_T
device' = Device -> Ptr Device_T
deviceHandle (Device
device)
  "pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR)
pInfo <- ((("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR))
  -> IO
       ("sparseMemoryRequirements"
        ::: Vector SparseImageMemoryRequirements2))
 -> IO
      ("sparseMemoryRequirements"
       ::: Vector SparseImageMemoryRequirements2))
-> ContT
     ("sparseMemoryRequirements"
      ::: Vector SparseImageMemoryRequirements2)
     IO
     ("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR))
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR))
   -> IO
        ("sparseMemoryRequirements"
         ::: Vector SparseImageMemoryRequirements2))
  -> IO
       ("sparseMemoryRequirements"
        ::: Vector SparseImageMemoryRequirements2))
 -> ContT
      ("sparseMemoryRequirements"
       ::: Vector SparseImageMemoryRequirements2)
      IO
      ("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR)))
-> ((("pInfo"
      ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR))
     -> IO
          ("sparseMemoryRequirements"
           ::: Vector SparseImageMemoryRequirements2))
    -> IO
         ("sparseMemoryRequirements"
          ::: Vector SparseImageMemoryRequirements2))
-> ContT
     ("sparseMemoryRequirements"
      ::: Vector SparseImageMemoryRequirements2)
     IO
     ("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR))
forall a b. (a -> b) -> a -> b
$ ("info" ::: DeviceImageMemoryRequirementsKHR)
-> (("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR))
    -> IO
         ("sparseMemoryRequirements"
          ::: Vector SparseImageMemoryRequirements2))
-> IO
     ("sparseMemoryRequirements"
      ::: Vector SparseImageMemoryRequirements2)
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
withCStruct ("info" ::: DeviceImageMemoryRequirementsKHR
info)
  "pSparseMemoryRequirementCount" ::: Ptr Word32
pPSparseMemoryRequirementCount <- ((("pSparseMemoryRequirementCount" ::: Ptr Word32)
  -> IO
       ("sparseMemoryRequirements"
        ::: Vector SparseImageMemoryRequirements2))
 -> IO
      ("sparseMemoryRequirements"
       ::: Vector SparseImageMemoryRequirements2))
-> ContT
     ("sparseMemoryRequirements"
      ::: Vector SparseImageMemoryRequirements2)
     IO
     ("pSparseMemoryRequirementCount" ::: Ptr Word32)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pSparseMemoryRequirementCount" ::: Ptr Word32)
   -> IO
        ("sparseMemoryRequirements"
         ::: Vector SparseImageMemoryRequirements2))
  -> IO
       ("sparseMemoryRequirements"
        ::: Vector SparseImageMemoryRequirements2))
 -> ContT
      ("sparseMemoryRequirements"
       ::: Vector SparseImageMemoryRequirements2)
      IO
      ("pSparseMemoryRequirementCount" ::: Ptr Word32))
-> ((("pSparseMemoryRequirementCount" ::: Ptr Word32)
     -> IO
          ("sparseMemoryRequirements"
           ::: Vector SparseImageMemoryRequirements2))
    -> IO
         ("sparseMemoryRequirements"
          ::: Vector SparseImageMemoryRequirements2))
-> ContT
     ("sparseMemoryRequirements"
      ::: Vector SparseImageMemoryRequirements2)
     IO
     ("pSparseMemoryRequirementCount" ::: Ptr Word32)
forall a b. (a -> b) -> a -> b
$ IO ("pSparseMemoryRequirementCount" ::: Ptr Word32)
-> (("pSparseMemoryRequirementCount" ::: Ptr Word32) -> IO ())
-> (("pSparseMemoryRequirementCount" ::: Ptr Word32)
    -> IO
         ("sparseMemoryRequirements"
          ::: Vector SparseImageMemoryRequirements2))
-> IO
     ("sparseMemoryRequirements"
      ::: Vector SparseImageMemoryRequirements2)
forall a b c. IO a -> (a -> IO b) -> (a -> IO c) -> IO c
bracket (Int -> IO ("pSparseMemoryRequirementCount" ::: Ptr Word32)
forall a. Int -> IO (Ptr a)
callocBytes @Word32 Int
4) ("pSparseMemoryRequirementCount" ::: Ptr Word32) -> IO ()
forall a. Ptr a -> IO ()
free
  IO ()
-> ContT
     ("sparseMemoryRequirements"
      ::: Vector SparseImageMemoryRequirements2)
     IO
     ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO ()
 -> ContT
      ("sparseMemoryRequirements"
       ::: Vector SparseImageMemoryRequirements2)
      IO
      ())
-> IO ()
-> ContT
     ("sparseMemoryRequirements"
      ::: Vector SparseImageMemoryRequirements2)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ String -> IO () -> IO ()
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkGetDeviceImageSparseMemoryRequirementsKHR" (Ptr Device_T
-> ("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR))
-> ("pSparseMemoryRequirementCount" ::: Ptr Word32)
-> ("pSparseMemoryRequirements"
    ::: Ptr SparseImageMemoryRequirements2)
-> IO ()
vkGetDeviceImageSparseMemoryRequirementsKHR' Ptr Device_T
device' "pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR)
pInfo ("pSparseMemoryRequirementCount" ::: Ptr Word32
pPSparseMemoryRequirementCount) ("pSparseMemoryRequirements" ::: Ptr SparseImageMemoryRequirements2
forall a. Ptr a
nullPtr))
  Word32
pSparseMemoryRequirementCount <- IO Word32
-> ContT
     ("sparseMemoryRequirements"
      ::: Vector SparseImageMemoryRequirements2)
     IO
     Word32
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO Word32
 -> ContT
      ("sparseMemoryRequirements"
       ::: Vector SparseImageMemoryRequirements2)
      IO
      Word32)
-> IO Word32
-> ContT
     ("sparseMemoryRequirements"
      ::: Vector SparseImageMemoryRequirements2)
     IO
     Word32
forall a b. (a -> b) -> a -> b
$ ("pSparseMemoryRequirementCount" ::: Ptr Word32) -> IO Word32
forall a. Storable a => Ptr a -> IO a
peek @Word32 "pSparseMemoryRequirementCount" ::: Ptr Word32
pPSparseMemoryRequirementCount
  "pSparseMemoryRequirements" ::: Ptr SparseImageMemoryRequirements2
pPSparseMemoryRequirements <- ((("pSparseMemoryRequirements"
   ::: Ptr SparseImageMemoryRequirements2)
  -> IO
       ("sparseMemoryRequirements"
        ::: Vector SparseImageMemoryRequirements2))
 -> IO
      ("sparseMemoryRequirements"
       ::: Vector SparseImageMemoryRequirements2))
-> ContT
     ("sparseMemoryRequirements"
      ::: Vector SparseImageMemoryRequirements2)
     IO
     ("pSparseMemoryRequirements"
      ::: Ptr SparseImageMemoryRequirements2)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pSparseMemoryRequirements"
    ::: Ptr SparseImageMemoryRequirements2)
   -> IO
        ("sparseMemoryRequirements"
         ::: Vector SparseImageMemoryRequirements2))
  -> IO
       ("sparseMemoryRequirements"
        ::: Vector SparseImageMemoryRequirements2))
 -> ContT
      ("sparseMemoryRequirements"
       ::: Vector SparseImageMemoryRequirements2)
      IO
      ("pSparseMemoryRequirements"
       ::: Ptr SparseImageMemoryRequirements2))
-> ((("pSparseMemoryRequirements"
      ::: Ptr SparseImageMemoryRequirements2)
     -> IO
          ("sparseMemoryRequirements"
           ::: Vector SparseImageMemoryRequirements2))
    -> IO
         ("sparseMemoryRequirements"
          ::: Vector SparseImageMemoryRequirements2))
-> ContT
     ("sparseMemoryRequirements"
      ::: Vector SparseImageMemoryRequirements2)
     IO
     ("pSparseMemoryRequirements"
      ::: Ptr SparseImageMemoryRequirements2)
forall a b. (a -> b) -> a -> b
$ IO
  ("pSparseMemoryRequirements"
   ::: Ptr SparseImageMemoryRequirements2)
-> (("pSparseMemoryRequirements"
     ::: Ptr SparseImageMemoryRequirements2)
    -> IO ())
-> (("pSparseMemoryRequirements"
     ::: Ptr SparseImageMemoryRequirements2)
    -> IO
         ("sparseMemoryRequirements"
          ::: Vector SparseImageMemoryRequirements2))
-> IO
     ("sparseMemoryRequirements"
      ::: Vector SparseImageMemoryRequirements2)
forall a b c. IO a -> (a -> IO b) -> (a -> IO c) -> IO c
bracket (Int
-> IO
     ("pSparseMemoryRequirements"
      ::: Ptr SparseImageMemoryRequirements2)
forall a. Int -> IO (Ptr a)
callocBytes @SparseImageMemoryRequirements2 ((Word32 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Word32
pSparseMemoryRequirementCount)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
64)) ("pSparseMemoryRequirements"
 ::: Ptr SparseImageMemoryRequirements2)
-> IO ()
forall a. Ptr a -> IO ()
free
  [()]
_ <- (Int
 -> ContT
      ("sparseMemoryRequirements"
       ::: Vector SparseImageMemoryRequirements2)
      IO
      ())
-> [Int]
-> ContT
     ("sparseMemoryRequirements"
      ::: Vector SparseImageMemoryRequirements2)
     IO
     [()]
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
traverse (\Int
i -> ((()
  -> IO
       ("sparseMemoryRequirements"
        ::: Vector SparseImageMemoryRequirements2))
 -> IO
      ("sparseMemoryRequirements"
       ::: Vector SparseImageMemoryRequirements2))
-> ContT
     ("sparseMemoryRequirements"
      ::: Vector SparseImageMemoryRequirements2)
     IO
     ()
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((()
   -> IO
        ("sparseMemoryRequirements"
         ::: Vector SparseImageMemoryRequirements2))
  -> IO
       ("sparseMemoryRequirements"
        ::: Vector SparseImageMemoryRequirements2))
 -> ContT
      ("sparseMemoryRequirements"
       ::: Vector SparseImageMemoryRequirements2)
      IO
      ())
-> ((()
     -> IO
          ("sparseMemoryRequirements"
           ::: Vector SparseImageMemoryRequirements2))
    -> IO
         ("sparseMemoryRequirements"
          ::: Vector SparseImageMemoryRequirements2))
-> ContT
     ("sparseMemoryRequirements"
      ::: Vector SparseImageMemoryRequirements2)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ ("pSparseMemoryRequirements"
 ::: Ptr SparseImageMemoryRequirements2)
-> IO
     ("sparseMemoryRequirements"
      ::: Vector SparseImageMemoryRequirements2)
-> IO
     ("sparseMemoryRequirements"
      ::: Vector SparseImageMemoryRequirements2)
forall a b. ToCStruct a => Ptr a -> IO b -> IO b
pokeZeroCStruct ("pSparseMemoryRequirements" ::: Ptr SparseImageMemoryRequirements2
pPSparseMemoryRequirements ("pSparseMemoryRequirements"
 ::: Ptr SparseImageMemoryRequirements2)
-> Int
-> "pSparseMemoryRequirements"
   ::: Ptr SparseImageMemoryRequirements2
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
i Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
64) :: Ptr SparseImageMemoryRequirements2) (IO
   ("sparseMemoryRequirements"
    ::: Vector SparseImageMemoryRequirements2)
 -> IO
      ("sparseMemoryRequirements"
       ::: Vector SparseImageMemoryRequirements2))
-> ((()
     -> IO
          ("sparseMemoryRequirements"
           ::: Vector SparseImageMemoryRequirements2))
    -> IO
         ("sparseMemoryRequirements"
          ::: Vector SparseImageMemoryRequirements2))
-> (()
    -> IO
         ("sparseMemoryRequirements"
          ::: Vector SparseImageMemoryRequirements2))
-> IO
     ("sparseMemoryRequirements"
      ::: Vector SparseImageMemoryRequirements2)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((()
 -> IO
      ("sparseMemoryRequirements"
       ::: Vector SparseImageMemoryRequirements2))
-> ()
-> IO
     ("sparseMemoryRequirements"
      ::: Vector SparseImageMemoryRequirements2)
forall a b. (a -> b) -> a -> b
$ ())) [Int
0..(Word32 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Word32
pSparseMemoryRequirementCount)) Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1]
  IO ()
-> ContT
     ("sparseMemoryRequirements"
      ::: Vector SparseImageMemoryRequirements2)
     IO
     ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO ()
 -> ContT
      ("sparseMemoryRequirements"
       ::: Vector SparseImageMemoryRequirements2)
      IO
      ())
-> IO ()
-> ContT
     ("sparseMemoryRequirements"
      ::: Vector SparseImageMemoryRequirements2)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ String -> IO () -> IO ()
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkGetDeviceImageSparseMemoryRequirementsKHR" (Ptr Device_T
-> ("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR))
-> ("pSparseMemoryRequirementCount" ::: Ptr Word32)
-> ("pSparseMemoryRequirements"
    ::: Ptr SparseImageMemoryRequirements2)
-> IO ()
vkGetDeviceImageSparseMemoryRequirementsKHR' Ptr Device_T
device' "pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR)
pInfo ("pSparseMemoryRequirementCount" ::: Ptr Word32
pPSparseMemoryRequirementCount) (("pSparseMemoryRequirements" ::: Ptr SparseImageMemoryRequirements2
pPSparseMemoryRequirements)))
  Word32
pSparseMemoryRequirementCount' <- IO Word32
-> ContT
     ("sparseMemoryRequirements"
      ::: Vector SparseImageMemoryRequirements2)
     IO
     Word32
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO Word32
 -> ContT
      ("sparseMemoryRequirements"
       ::: Vector SparseImageMemoryRequirements2)
      IO
      Word32)
-> IO Word32
-> ContT
     ("sparseMemoryRequirements"
      ::: Vector SparseImageMemoryRequirements2)
     IO
     Word32
forall a b. (a -> b) -> a -> b
$ ("pSparseMemoryRequirementCount" ::: Ptr Word32) -> IO Word32
forall a. Storable a => Ptr a -> IO a
peek @Word32 "pSparseMemoryRequirementCount" ::: Ptr Word32
pPSparseMemoryRequirementCount
  "sparseMemoryRequirements"
::: Vector SparseImageMemoryRequirements2
pSparseMemoryRequirements' <- IO
  ("sparseMemoryRequirements"
   ::: Vector SparseImageMemoryRequirements2)
-> ContT
     ("sparseMemoryRequirements"
      ::: Vector SparseImageMemoryRequirements2)
     IO
     ("sparseMemoryRequirements"
      ::: Vector SparseImageMemoryRequirements2)
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO
   ("sparseMemoryRequirements"
    ::: Vector SparseImageMemoryRequirements2)
 -> ContT
      ("sparseMemoryRequirements"
       ::: Vector SparseImageMemoryRequirements2)
      IO
      ("sparseMemoryRequirements"
       ::: Vector SparseImageMemoryRequirements2))
-> IO
     ("sparseMemoryRequirements"
      ::: Vector SparseImageMemoryRequirements2)
-> ContT
     ("sparseMemoryRequirements"
      ::: Vector SparseImageMemoryRequirements2)
     IO
     ("sparseMemoryRequirements"
      ::: Vector SparseImageMemoryRequirements2)
forall a b. (a -> b) -> a -> b
$ Int
-> (Int -> IO SparseImageMemoryRequirements2)
-> IO
     ("sparseMemoryRequirements"
      ::: Vector SparseImageMemoryRequirements2)
forall (m :: * -> *) a.
Monad m =>
Int -> (Int -> m a) -> m (Vector a)
generateM (Word32 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Word32
pSparseMemoryRequirementCount')) (\Int
i -> ("pSparseMemoryRequirements"
 ::: Ptr SparseImageMemoryRequirements2)
-> IO SparseImageMemoryRequirements2
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @SparseImageMemoryRequirements2 ((("pSparseMemoryRequirements" ::: Ptr SparseImageMemoryRequirements2
pPSparseMemoryRequirements) ("pSparseMemoryRequirements"
 ::: Ptr SparseImageMemoryRequirements2)
-> Int
-> "pSparseMemoryRequirements"
   ::: Ptr SparseImageMemoryRequirements2
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
64 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr SparseImageMemoryRequirements2)))
  ("sparseMemoryRequirements"
 ::: Vector SparseImageMemoryRequirements2)
-> ContT
     ("sparseMemoryRequirements"
      ::: Vector SparseImageMemoryRequirements2)
     IO
     ("sparseMemoryRequirements"
      ::: Vector SparseImageMemoryRequirements2)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (("sparseMemoryRequirements"
  ::: Vector SparseImageMemoryRequirements2)
 -> ContT
      ("sparseMemoryRequirements"
       ::: Vector SparseImageMemoryRequirements2)
      IO
      ("sparseMemoryRequirements"
       ::: Vector SparseImageMemoryRequirements2))
-> ("sparseMemoryRequirements"
    ::: Vector SparseImageMemoryRequirements2)
-> ContT
     ("sparseMemoryRequirements"
      ::: Vector SparseImageMemoryRequirements2)
     IO
     ("sparseMemoryRequirements"
      ::: Vector SparseImageMemoryRequirements2)
forall a b. (a -> b) -> a -> b
$ ("sparseMemoryRequirements"
::: Vector SparseImageMemoryRequirements2
pSparseMemoryRequirements')


-- | VkDeviceBufferMemoryRequirementsKHR - (None)
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_maintenance4 VK_KHR_maintenance4>,
-- 'Vulkan.Core10.Buffer.BufferCreateInfo',
-- 'Vulkan.Core10.Enums.StructureType.StructureType',
-- 'getDeviceBufferMemoryRequirementsKHR'
data DeviceBufferMemoryRequirementsKHR = DeviceBufferMemoryRequirementsKHR
  { -- | @pCreateInfo@ is a pointer to a 'Vulkan.Core10.Buffer.BufferCreateInfo'
    -- structure containing parameters affecting creation of the buffer to
    -- query.
    --
    -- #VUID-VkDeviceBufferMemoryRequirementsKHR-pCreateInfo-parameter#
    -- @pCreateInfo@ /must/ be a valid pointer to a valid
    -- 'Vulkan.Core10.Buffer.BufferCreateInfo' structure
    ("info" ::: DeviceBufferMemoryRequirementsKHR)
-> SomeStruct BufferCreateInfo
createInfo :: SomeStruct BufferCreateInfo }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DeviceBufferMemoryRequirementsKHR)
#endif
deriving instance Show DeviceBufferMemoryRequirementsKHR

instance ToCStruct DeviceBufferMemoryRequirementsKHR where
  withCStruct :: ("info" ::: DeviceBufferMemoryRequirementsKHR)
-> (("pInfo"
     ::: Ptr ("info" ::: DeviceBufferMemoryRequirementsKHR))
    -> IO b)
-> IO b
withCStruct "info" ::: DeviceBufferMemoryRequirementsKHR
x ("pInfo" ::: Ptr ("info" ::: DeviceBufferMemoryRequirementsKHR))
-> IO b
f = Int
-> (("pInfo"
     ::: Ptr ("info" ::: DeviceBufferMemoryRequirementsKHR))
    -> IO b)
-> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
24 ((("pInfo" ::: Ptr ("info" ::: DeviceBufferMemoryRequirementsKHR))
  -> IO b)
 -> IO b)
-> (("pInfo"
     ::: Ptr ("info" ::: DeviceBufferMemoryRequirementsKHR))
    -> IO b)
-> IO b
forall a b. (a -> b) -> a -> b
$ \"pInfo" ::: Ptr ("info" ::: DeviceBufferMemoryRequirementsKHR)
p -> ("pInfo" ::: Ptr ("info" ::: DeviceBufferMemoryRequirementsKHR))
-> ("info" ::: DeviceBufferMemoryRequirementsKHR) -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct "pInfo" ::: Ptr ("info" ::: DeviceBufferMemoryRequirementsKHR)
p "info" ::: DeviceBufferMemoryRequirementsKHR
x (("pInfo" ::: Ptr ("info" ::: DeviceBufferMemoryRequirementsKHR))
-> IO b
f "pInfo" ::: Ptr ("info" ::: DeviceBufferMemoryRequirementsKHR)
p)
  pokeCStruct :: ("pInfo" ::: Ptr ("info" ::: DeviceBufferMemoryRequirementsKHR))
-> ("info" ::: DeviceBufferMemoryRequirementsKHR) -> IO b -> IO b
pokeCStruct "pInfo" ::: Ptr ("info" ::: DeviceBufferMemoryRequirementsKHR)
p DeviceBufferMemoryRequirementsKHR{SomeStruct BufferCreateInfo
createInfo :: SomeStruct BufferCreateInfo
$sel:createInfo:DeviceBufferMemoryRequirementsKHR :: ("info" ::: DeviceBufferMemoryRequirementsKHR)
-> SomeStruct BufferCreateInfo
..} 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 (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 (("pInfo" ::: Ptr ("info" ::: DeviceBufferMemoryRequirementsKHR)
p ("pInfo" ::: Ptr ("info" ::: DeviceBufferMemoryRequirementsKHR))
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS_KHR)
    IO () -> ContT b IO ()
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 (("pInfo" ::: Ptr ("info" ::: DeviceBufferMemoryRequirementsKHR)
p ("pInfo" ::: Ptr ("info" ::: DeviceBufferMemoryRequirementsKHR))
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr (BufferCreateInfo '[])
pCreateInfo'' <- ((Ptr (BufferCreateInfo '[]) -> IO b) -> IO b)
-> ContT b IO (Ptr (BufferCreateInfo '[]))
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT @_ @_ @(Ptr (BufferCreateInfo '[])) (((Ptr (BufferCreateInfo '[]) -> IO b) -> IO b)
 -> ContT b IO (Ptr (BufferCreateInfo '[])))
-> ((Ptr (BufferCreateInfo '[]) -> IO b) -> IO b)
-> ContT b IO (Ptr (BufferCreateInfo '[]))
forall a b. (a -> b) -> a -> b
$ \Ptr (BufferCreateInfo '[]) -> IO b
cont -> SomeStruct BufferCreateInfo
-> (forall (es :: [*]).
    (Extendss BufferCreateInfo es, PokeChain es) =>
    Ptr (BufferCreateInfo es) -> IO b)
-> IO b
forall (a :: [*] -> *) b.
(forall (es :: [*]).
 (Extendss a es, PokeChain es) =>
 ToCStruct (a es)) =>
SomeStruct a
-> (forall (es :: [*]).
    (Extendss a es, PokeChain es) =>
    Ptr (a es) -> IO b)
-> IO b
withSomeCStruct @BufferCreateInfo (SomeStruct BufferCreateInfo
createInfo) (Ptr (BufferCreateInfo '[]) -> IO b
cont (Ptr (BufferCreateInfo '[]) -> IO b)
-> (Ptr (BufferCreateInfo es) -> Ptr (BufferCreateInfo '[]))
-> Ptr (BufferCreateInfo es)
-> IO b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Ptr (BufferCreateInfo es) -> Ptr (BufferCreateInfo '[])
forall a b. Ptr a -> Ptr b
castPtr)
    IO () -> ContT b IO ()
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 (BufferCreateInfo '[]))
-> Ptr (BufferCreateInfo '[]) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pInfo" ::: Ptr ("info" ::: DeviceBufferMemoryRequirementsKHR)
p ("pInfo" ::: Ptr ("info" ::: DeviceBufferMemoryRequirementsKHR))
-> Int -> Ptr (Ptr (BufferCreateInfo _))
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr (Ptr (BufferCreateInfo _)))) Ptr (BufferCreateInfo '[])
pCreateInfo''
    IO b -> ContT b IO b
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO b -> ContT b IO b) -> IO b -> ContT b IO b
forall a b. (a -> b) -> a -> b
$ IO b
f
  cStructSize :: Int
cStructSize = Int
24
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: ("pInfo" ::: Ptr ("info" ::: DeviceBufferMemoryRequirementsKHR))
-> IO b -> IO b
pokeZeroCStruct "pInfo" ::: Ptr ("info" ::: DeviceBufferMemoryRequirementsKHR)
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 (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 (("pInfo" ::: Ptr ("info" ::: DeviceBufferMemoryRequirementsKHR)
p ("pInfo" ::: Ptr ("info" ::: DeviceBufferMemoryRequirementsKHR))
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS_KHR)
    IO () -> ContT b IO ()
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 (("pInfo" ::: Ptr ("info" ::: DeviceBufferMemoryRequirementsKHR)
p ("pInfo" ::: Ptr ("info" ::: DeviceBufferMemoryRequirementsKHR))
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr (BufferCreateInfo '[])
pCreateInfo'' <- ((Ptr (BufferCreateInfo '[]) -> IO b) -> IO b)
-> ContT b IO (Ptr (BufferCreateInfo '[]))
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT @_ @_ @(Ptr (BufferCreateInfo '[])) (((Ptr (BufferCreateInfo '[]) -> IO b) -> IO b)
 -> ContT b IO (Ptr (BufferCreateInfo '[])))
-> ((Ptr (BufferCreateInfo '[]) -> IO b) -> IO b)
-> ContT b IO (Ptr (BufferCreateInfo '[]))
forall a b. (a -> b) -> a -> b
$ \Ptr (BufferCreateInfo '[]) -> IO b
cont -> SomeStruct BufferCreateInfo
-> (forall (es :: [*]).
    (Extendss BufferCreateInfo es, PokeChain es) =>
    Ptr (BufferCreateInfo es) -> IO b)
-> IO b
forall (a :: [*] -> *) b.
(forall (es :: [*]).
 (Extendss a es, PokeChain es) =>
 ToCStruct (a es)) =>
SomeStruct a
-> (forall (es :: [*]).
    (Extendss a es, PokeChain es) =>
    Ptr (a es) -> IO b)
-> IO b
withSomeCStruct @BufferCreateInfo ((BufferCreateInfo '[] -> SomeStruct BufferCreateInfo
forall (a :: [*] -> *) (es :: [*]).
(Extendss a es, PokeChain es, Show (Chain es)) =>
a es -> SomeStruct a
SomeStruct BufferCreateInfo '[]
forall a. Zero a => a
zero)) (Ptr (BufferCreateInfo '[]) -> IO b
cont (Ptr (BufferCreateInfo '[]) -> IO b)
-> (Ptr (BufferCreateInfo es) -> Ptr (BufferCreateInfo '[]))
-> Ptr (BufferCreateInfo es)
-> IO b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Ptr (BufferCreateInfo es) -> Ptr (BufferCreateInfo '[])
forall a b. Ptr a -> Ptr b
castPtr)
    IO () -> ContT b IO ()
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 (BufferCreateInfo '[]))
-> Ptr (BufferCreateInfo '[]) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pInfo" ::: Ptr ("info" ::: DeviceBufferMemoryRequirementsKHR)
p ("pInfo" ::: Ptr ("info" ::: DeviceBufferMemoryRequirementsKHR))
-> Int -> Ptr (Ptr (BufferCreateInfo _))
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr (Ptr (BufferCreateInfo _)))) Ptr (BufferCreateInfo '[])
pCreateInfo''
    IO b -> ContT b IO b
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO b -> ContT b IO b) -> IO b -> ContT b IO b
forall a b. (a -> b) -> a -> b
$ IO b
f

instance FromCStruct DeviceBufferMemoryRequirementsKHR where
  peekCStruct :: ("pInfo" ::: Ptr ("info" ::: DeviceBufferMemoryRequirementsKHR))
-> IO ("info" ::: DeviceBufferMemoryRequirementsKHR)
peekCStruct "pInfo" ::: Ptr ("info" ::: DeviceBufferMemoryRequirementsKHR)
p = do
    SomeStruct BufferCreateInfo
pCreateInfo <- Ptr (SomeStruct BufferCreateInfo)
-> IO (SomeStruct BufferCreateInfo)
forall (a :: [*] -> *).
(Extensible a,
 forall (es :: [*]).
 (Extendss a es, PeekChain es) =>
 FromCStruct (a es)) =>
Ptr (SomeStruct a) -> IO (SomeStruct a)
peekSomeCStruct (Ptr (SomeStruct BufferCreateInfo)
 -> IO (SomeStruct BufferCreateInfo))
-> (Ptr (BufferCreateInfo Any)
    -> Ptr (SomeStruct BufferCreateInfo))
-> Ptr (BufferCreateInfo Any)
-> IO (SomeStruct BufferCreateInfo)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Ptr (BufferCreateInfo Any) -> Ptr (SomeStruct BufferCreateInfo)
forall (a :: [*] -> *) (es :: [*]).
Ptr (a es) -> Ptr (SomeStruct a)
forgetExtensions (Ptr (BufferCreateInfo Any) -> IO (SomeStruct BufferCreateInfo))
-> IO (Ptr (BufferCreateInfo Any))
-> IO (SomeStruct BufferCreateInfo)
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Ptr (Ptr (BufferCreateInfo Any)) -> IO (Ptr (BufferCreateInfo Any))
forall a. Storable a => Ptr a -> IO a
peek (("pInfo" ::: Ptr ("info" ::: DeviceBufferMemoryRequirementsKHR)
p ("pInfo" ::: Ptr ("info" ::: DeviceBufferMemoryRequirementsKHR))
-> Int -> Ptr (Ptr (BufferCreateInfo _))
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr (Ptr (BufferCreateInfo _))))
    ("info" ::: DeviceBufferMemoryRequirementsKHR)
-> IO ("info" ::: DeviceBufferMemoryRequirementsKHR)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (("info" ::: DeviceBufferMemoryRequirementsKHR)
 -> IO ("info" ::: DeviceBufferMemoryRequirementsKHR))
-> ("info" ::: DeviceBufferMemoryRequirementsKHR)
-> IO ("info" ::: DeviceBufferMemoryRequirementsKHR)
forall a b. (a -> b) -> a -> b
$ SomeStruct BufferCreateInfo
-> "info" ::: DeviceBufferMemoryRequirementsKHR
DeviceBufferMemoryRequirementsKHR
             SomeStruct BufferCreateInfo
pCreateInfo

instance Zero DeviceBufferMemoryRequirementsKHR where
  zero :: "info" ::: DeviceBufferMemoryRequirementsKHR
zero = SomeStruct BufferCreateInfo
-> "info" ::: DeviceBufferMemoryRequirementsKHR
DeviceBufferMemoryRequirementsKHR
           (BufferCreateInfo '[] -> SomeStruct BufferCreateInfo
forall (a :: [*] -> *) (es :: [*]).
(Extendss a es, PokeChain es, Show (Chain es)) =>
a es -> SomeStruct a
SomeStruct BufferCreateInfo '[]
forall a. Zero a => a
zero)


-- | VkDeviceImageMemoryRequirementsKHR - (None)
--
-- == Valid Usage
--
-- -   #VUID-VkDeviceImageMemoryRequirementsKHR-pCreateInfo-06416# The
--     @pCreateInfo@::@pNext@ chain /must/ not contain a
--     'Vulkan.Extensions.VK_KHR_swapchain.ImageSwapchainCreateInfoKHR'
--     structure
--
-- -   #VUID-VkDeviceImageMemoryRequirementsKHR-pCreateInfo-06417# If
--     @pCreateInfo@::@flags@ has
--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_DISJOINT_BIT'
--     set then @planAspect@ /must/ not be zero
--
-- -   #VUID-VkDeviceImageMemoryRequirementsKHR-pCreateInfo-06418# If
--     @pCreateInfo@::@flags@ has
--     'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT'
--     set then @planAspect@ /must/ not be zero
--
-- -   #VUID-VkDeviceImageMemoryRequirementsKHR-pCreateInfo-06419# If
--     @pCreateInfo@::@flags@ has
--     'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_DISJOINT_BIT'
--     set and if the @pCreateInfo@::@tiling@ is
--     'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_LINEAR' or
--     'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_OPTIMAL', then
--     @planeAspect@ /must/ be a single valid /format plane/ for the image
--     (that is, for a two-plane image @planeAspect@ /must/ be
--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT'
--     or
--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT',
--     and for a three-plane image @planeAspect@ /must/ be
--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',
--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT'
--     or
--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT')
--
-- -   #VUID-VkDeviceImageMemoryRequirementsKHR-pCreateInfo-06420# If
--     @pCreateInfo@::@flags@ has
--     'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT'
--     set and the @pCreateInfo@::@tiling@ is
--     'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT',
--     then @planeAspect@ /must/ be a single valid /memory plane/ for the
--     image (that is, @aspectMask@ /must/ specify a plane index that is
--     less than the
--     'Vulkan.Extensions.VK_EXT_image_drm_format_modifier.DrmFormatModifierPropertiesEXT'::@drmFormatModifierPlaneCount@
--     associated with the image’s @format@ and
--     'Vulkan.Extensions.VK_EXT_image_drm_format_modifier.ImageDrmFormatModifierPropertiesEXT'::@drmFormatModifier@)
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkDeviceImageMemoryRequirementsKHR-sType-sType# @sType@ /must/
--     be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS_KHR'
--
-- -   #VUID-VkDeviceImageMemoryRequirementsKHR-pNext-pNext# @pNext@ /must/
--     be @NULL@
--
-- -   #VUID-VkDeviceImageMemoryRequirementsKHR-pCreateInfo-parameter#
--     @pCreateInfo@ /must/ be a valid pointer to a valid
--     'Vulkan.Core10.Image.ImageCreateInfo' structure
--
-- -   #VUID-VkDeviceImageMemoryRequirementsKHR-planeAspect-parameter#
--     @planeAspect@ /must/ be a valid
--     'Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlagBits' value
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_maintenance4 VK_KHR_maintenance4>,
-- 'Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlagBits',
-- 'Vulkan.Core10.Image.ImageCreateInfo',
-- 'Vulkan.Core10.Enums.StructureType.StructureType',
-- 'getDeviceImageMemoryRequirementsKHR',
-- 'getDeviceImageSparseMemoryRequirementsKHR'
data DeviceImageMemoryRequirementsKHR = DeviceImageMemoryRequirementsKHR
  { -- | @pCreateInfo@ is a pointer to a 'Vulkan.Core10.Image.ImageCreateInfo'
    -- structure containing parameters affecting creation of the image to
    -- query.
    ("info" ::: DeviceImageMemoryRequirementsKHR)
-> SomeStruct ImageCreateInfo
createInfo :: SomeStruct ImageCreateInfo
  , -- | @planeAspect@ is a
    -- 'Vulkan.Core10.Enums.ImageAspectFlagBits.ImageAspectFlagBits' value
    -- specifying the aspect corresponding to the image plane to query. This
    -- parameter is ignored unless @pCreateInfo@::@flags@ has
    -- 'Vulkan.Core10.Enums.ImageCreateFlagBits.IMAGE_CREATE_DISJOINT_BIT' or
    -- 'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT'
    -- set.
    ("info" ::: DeviceImageMemoryRequirementsKHR)
-> ImageAspectFlagBits
planeAspect :: ImageAspectFlagBits
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DeviceImageMemoryRequirementsKHR)
#endif
deriving instance Show DeviceImageMemoryRequirementsKHR

instance ToCStruct DeviceImageMemoryRequirementsKHR where
  withCStruct :: ("info" ::: DeviceImageMemoryRequirementsKHR)
-> (("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR))
    -> IO b)
-> IO b
withCStruct "info" ::: DeviceImageMemoryRequirementsKHR
x ("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR))
-> IO b
f = Int
-> (("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR))
    -> IO b)
-> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
32 ((("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR))
  -> IO b)
 -> IO b)
-> (("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR))
    -> IO b)
-> IO b
forall a b. (a -> b) -> a -> b
$ \"pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR)
p -> ("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR))
-> ("info" ::: DeviceImageMemoryRequirementsKHR) -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct "pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR)
p "info" ::: DeviceImageMemoryRequirementsKHR
x (("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR))
-> IO b
f "pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR)
p)
  pokeCStruct :: ("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR))
-> ("info" ::: DeviceImageMemoryRequirementsKHR) -> IO b -> IO b
pokeCStruct "pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR)
p DeviceImageMemoryRequirementsKHR{ImageAspectFlagBits
SomeStruct ImageCreateInfo
planeAspect :: ImageAspectFlagBits
createInfo :: SomeStruct ImageCreateInfo
$sel:planeAspect:DeviceImageMemoryRequirementsKHR :: ("info" ::: DeviceImageMemoryRequirementsKHR)
-> ImageAspectFlagBits
$sel:createInfo:DeviceImageMemoryRequirementsKHR :: ("info" ::: DeviceImageMemoryRequirementsKHR)
-> SomeStruct ImageCreateInfo
..} 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 (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 (("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR)
p ("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR))
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS_KHR)
    IO () -> ContT b IO ()
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 (("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR)
p ("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR))
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr (ImageCreateInfo '[])
pCreateInfo'' <- ((Ptr (ImageCreateInfo '[]) -> IO b) -> IO b)
-> ContT b IO (Ptr (ImageCreateInfo '[]))
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT @_ @_ @(Ptr (ImageCreateInfo '[])) (((Ptr (ImageCreateInfo '[]) -> IO b) -> IO b)
 -> ContT b IO (Ptr (ImageCreateInfo '[])))
-> ((Ptr (ImageCreateInfo '[]) -> IO b) -> IO b)
-> ContT b IO (Ptr (ImageCreateInfo '[]))
forall a b. (a -> b) -> a -> b
$ \Ptr (ImageCreateInfo '[]) -> IO b
cont -> SomeStruct ImageCreateInfo
-> (forall (es :: [*]).
    (Extendss ImageCreateInfo es, PokeChain es) =>
    Ptr (ImageCreateInfo es) -> IO b)
-> IO b
forall (a :: [*] -> *) b.
(forall (es :: [*]).
 (Extendss a es, PokeChain es) =>
 ToCStruct (a es)) =>
SomeStruct a
-> (forall (es :: [*]).
    (Extendss a es, PokeChain es) =>
    Ptr (a es) -> IO b)
-> IO b
withSomeCStruct @ImageCreateInfo (SomeStruct ImageCreateInfo
createInfo) (Ptr (ImageCreateInfo '[]) -> IO b
cont (Ptr (ImageCreateInfo '[]) -> IO b)
-> (Ptr (ImageCreateInfo es) -> Ptr (ImageCreateInfo '[]))
-> Ptr (ImageCreateInfo es)
-> IO b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Ptr (ImageCreateInfo es) -> Ptr (ImageCreateInfo '[])
forall a b. Ptr a -> Ptr b
castPtr)
    IO () -> ContT b IO ()
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 (ImageCreateInfo '[]))
-> Ptr (ImageCreateInfo '[]) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR)
p ("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR))
-> Int -> Ptr (Ptr (ImageCreateInfo _))
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr (Ptr (ImageCreateInfo _)))) Ptr (ImageCreateInfo '[])
pCreateInfo''
    IO () -> ContT b IO ()
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 ImageAspectFlagBits -> ImageAspectFlagBits -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR)
p ("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR))
-> Int -> Ptr ImageAspectFlagBits
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr ImageAspectFlagBits)) (ImageAspectFlagBits
planeAspect)
    IO b -> ContT b IO b
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO b -> ContT b IO b) -> IO b -> ContT b IO b
forall a b. (a -> b) -> a -> b
$ IO b
f
  cStructSize :: Int
cStructSize = Int
32
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: ("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR))
-> IO b -> IO b
pokeZeroCStruct "pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR)
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 (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 (("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR)
p ("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR))
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS_KHR)
    IO () -> ContT b IO ()
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 (("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR)
p ("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR))
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr (ImageCreateInfo '[])
pCreateInfo'' <- ((Ptr (ImageCreateInfo '[]) -> IO b) -> IO b)
-> ContT b IO (Ptr (ImageCreateInfo '[]))
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT @_ @_ @(Ptr (ImageCreateInfo '[])) (((Ptr (ImageCreateInfo '[]) -> IO b) -> IO b)
 -> ContT b IO (Ptr (ImageCreateInfo '[])))
-> ((Ptr (ImageCreateInfo '[]) -> IO b) -> IO b)
-> ContT b IO (Ptr (ImageCreateInfo '[]))
forall a b. (a -> b) -> a -> b
$ \Ptr (ImageCreateInfo '[]) -> IO b
cont -> SomeStruct ImageCreateInfo
-> (forall (es :: [*]).
    (Extendss ImageCreateInfo es, PokeChain es) =>
    Ptr (ImageCreateInfo es) -> IO b)
-> IO b
forall (a :: [*] -> *) b.
(forall (es :: [*]).
 (Extendss a es, PokeChain es) =>
 ToCStruct (a es)) =>
SomeStruct a
-> (forall (es :: [*]).
    (Extendss a es, PokeChain es) =>
    Ptr (a es) -> IO b)
-> IO b
withSomeCStruct @ImageCreateInfo ((ImageCreateInfo '[] -> SomeStruct ImageCreateInfo
forall (a :: [*] -> *) (es :: [*]).
(Extendss a es, PokeChain es, Show (Chain es)) =>
a es -> SomeStruct a
SomeStruct ImageCreateInfo '[]
forall a. Zero a => a
zero)) (Ptr (ImageCreateInfo '[]) -> IO b
cont (Ptr (ImageCreateInfo '[]) -> IO b)
-> (Ptr (ImageCreateInfo es) -> Ptr (ImageCreateInfo '[]))
-> Ptr (ImageCreateInfo es)
-> IO b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Ptr (ImageCreateInfo es) -> Ptr (ImageCreateInfo '[])
forall a b. Ptr a -> Ptr b
castPtr)
    IO () -> ContT b IO ()
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 (ImageCreateInfo '[]))
-> Ptr (ImageCreateInfo '[]) -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR)
p ("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR))
-> Int -> Ptr (Ptr (ImageCreateInfo _))
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr (Ptr (ImageCreateInfo _)))) Ptr (ImageCreateInfo '[])
pCreateInfo''
    IO () -> ContT b IO ()
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 ImageAspectFlagBits -> ImageAspectFlagBits -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR)
p ("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR))
-> Int -> Ptr ImageAspectFlagBits
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr ImageAspectFlagBits)) (ImageAspectFlagBits
forall a. Zero a => a
zero)
    IO b -> ContT b IO b
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO b -> ContT b IO b) -> IO b -> ContT b IO b
forall a b. (a -> b) -> a -> b
$ IO b
f

instance FromCStruct DeviceImageMemoryRequirementsKHR where
  peekCStruct :: ("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR))
-> IO ("info" ::: DeviceImageMemoryRequirementsKHR)
peekCStruct "pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR)
p = do
    SomeStruct ImageCreateInfo
pCreateInfo <- Ptr (SomeStruct ImageCreateInfo) -> IO (SomeStruct ImageCreateInfo)
forall (a :: [*] -> *).
(Extensible a,
 forall (es :: [*]).
 (Extendss a es, PeekChain es) =>
 FromCStruct (a es)) =>
Ptr (SomeStruct a) -> IO (SomeStruct a)
peekSomeCStruct (Ptr (SomeStruct ImageCreateInfo)
 -> IO (SomeStruct ImageCreateInfo))
-> (Ptr (ImageCreateInfo Any) -> Ptr (SomeStruct ImageCreateInfo))
-> Ptr (ImageCreateInfo Any)
-> IO (SomeStruct ImageCreateInfo)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Ptr (ImageCreateInfo Any) -> Ptr (SomeStruct ImageCreateInfo)
forall (a :: [*] -> *) (es :: [*]).
Ptr (a es) -> Ptr (SomeStruct a)
forgetExtensions (Ptr (ImageCreateInfo Any) -> IO (SomeStruct ImageCreateInfo))
-> IO (Ptr (ImageCreateInfo Any))
-> IO (SomeStruct ImageCreateInfo)
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Ptr (Ptr (ImageCreateInfo Any)) -> IO (Ptr (ImageCreateInfo Any))
forall a. Storable a => Ptr a -> IO a
peek (("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR)
p ("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR))
-> Int -> Ptr (Ptr (ImageCreateInfo _))
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr (Ptr (ImageCreateInfo _))))
    ImageAspectFlagBits
planeAspect <- Ptr ImageAspectFlagBits -> IO ImageAspectFlagBits
forall a. Storable a => Ptr a -> IO a
peek @ImageAspectFlagBits (("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR)
p ("pInfo" ::: Ptr ("info" ::: DeviceImageMemoryRequirementsKHR))
-> Int -> Ptr ImageAspectFlagBits
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr ImageAspectFlagBits))
    ("info" ::: DeviceImageMemoryRequirementsKHR)
-> IO ("info" ::: DeviceImageMemoryRequirementsKHR)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (("info" ::: DeviceImageMemoryRequirementsKHR)
 -> IO ("info" ::: DeviceImageMemoryRequirementsKHR))
-> ("info" ::: DeviceImageMemoryRequirementsKHR)
-> IO ("info" ::: DeviceImageMemoryRequirementsKHR)
forall a b. (a -> b) -> a -> b
$ SomeStruct ImageCreateInfo
-> ImageAspectFlagBits
-> "info" ::: DeviceImageMemoryRequirementsKHR
DeviceImageMemoryRequirementsKHR
             SomeStruct ImageCreateInfo
pCreateInfo ImageAspectFlagBits
planeAspect

instance Zero DeviceImageMemoryRequirementsKHR where
  zero :: "info" ::: DeviceImageMemoryRequirementsKHR
zero = SomeStruct ImageCreateInfo
-> ImageAspectFlagBits
-> "info" ::: DeviceImageMemoryRequirementsKHR
DeviceImageMemoryRequirementsKHR
           (ImageCreateInfo '[] -> SomeStruct ImageCreateInfo
forall (a :: [*] -> *) (es :: [*]).
(Extendss a es, PokeChain es, Show (Chain es)) =>
a es -> SomeStruct a
SomeStruct ImageCreateInfo '[]
forall a. Zero a => a
zero)
           ImageAspectFlagBits
forall a. Zero a => a
zero


-- | VkPhysicalDeviceMaintenance4FeaturesKHR - Structure describing whether
-- the implementation supports maintenance4 functionality
--
-- = Members
--
-- This structure describes the following features:
--
-- = Description
--
-- If the 'PhysicalDeviceMaintenance4FeaturesKHR' 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. 'PhysicalDeviceMaintenance4FeaturesKHR' /can/ also be used in
-- the @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo' to
-- selectively enable these features.
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_maintenance4 VK_KHR_maintenance4>,
-- 'Vulkan.Core10.FundamentalTypes.Bool32',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data PhysicalDeviceMaintenance4FeaturesKHR = PhysicalDeviceMaintenance4FeaturesKHR
  { -- | #features-maintenance4# @maintenance4@ indicates that the implementation
    -- supports the following:
    --
    -- -   The application /may/ destroy a
    --     'Vulkan.Core10.Handles.PipelineLayout' object immediately after
    --     using it to create another object.
    --
    -- -   @LocalSizeId@ /can/ be used as an alternative to @LocalSize@ to
    --     specify the local workgroup size with specialization constants.
    --
    -- -   Images created with identical creation parameters will always have
    --     the same alignment requirements.
    --
    -- -   The size memory requirement of a buffer or image is never greater
    --     than that of another buffer or image created with a greater or equal
    --     size.
    --
    -- -   Push constants do not have to be initialized before they are
    --     dynamically accessed.
    --
    -- -   The interface matching rules allow a larger output vector to match
    --     with a smaller input vector, with additional values being discarded.
    PhysicalDeviceMaintenance4FeaturesKHR -> Bool
maintenance4 :: Bool }
  deriving (Typeable, PhysicalDeviceMaintenance4FeaturesKHR
-> PhysicalDeviceMaintenance4FeaturesKHR -> Bool
(PhysicalDeviceMaintenance4FeaturesKHR
 -> PhysicalDeviceMaintenance4FeaturesKHR -> Bool)
-> (PhysicalDeviceMaintenance4FeaturesKHR
    -> PhysicalDeviceMaintenance4FeaturesKHR -> Bool)
-> Eq PhysicalDeviceMaintenance4FeaturesKHR
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PhysicalDeviceMaintenance4FeaturesKHR
-> PhysicalDeviceMaintenance4FeaturesKHR -> Bool
$c/= :: PhysicalDeviceMaintenance4FeaturesKHR
-> PhysicalDeviceMaintenance4FeaturesKHR -> Bool
== :: PhysicalDeviceMaintenance4FeaturesKHR
-> PhysicalDeviceMaintenance4FeaturesKHR -> Bool
$c== :: PhysicalDeviceMaintenance4FeaturesKHR
-> PhysicalDeviceMaintenance4FeaturesKHR -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (PhysicalDeviceMaintenance4FeaturesKHR)
#endif
deriving instance Show PhysicalDeviceMaintenance4FeaturesKHR

instance ToCStruct PhysicalDeviceMaintenance4FeaturesKHR where
  withCStruct :: PhysicalDeviceMaintenance4FeaturesKHR
-> (Ptr PhysicalDeviceMaintenance4FeaturesKHR -> IO b) -> IO b
withCStruct PhysicalDeviceMaintenance4FeaturesKHR
x Ptr PhysicalDeviceMaintenance4FeaturesKHR -> IO b
f = Int -> (Ptr PhysicalDeviceMaintenance4FeaturesKHR -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
24 ((Ptr PhysicalDeviceMaintenance4FeaturesKHR -> IO b) -> IO b)
-> (Ptr PhysicalDeviceMaintenance4FeaturesKHR -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr PhysicalDeviceMaintenance4FeaturesKHR
p -> Ptr PhysicalDeviceMaintenance4FeaturesKHR
-> PhysicalDeviceMaintenance4FeaturesKHR -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr PhysicalDeviceMaintenance4FeaturesKHR
p PhysicalDeviceMaintenance4FeaturesKHR
x (Ptr PhysicalDeviceMaintenance4FeaturesKHR -> IO b
f Ptr PhysicalDeviceMaintenance4FeaturesKHR
p)
  pokeCStruct :: Ptr PhysicalDeviceMaintenance4FeaturesKHR
-> PhysicalDeviceMaintenance4FeaturesKHR -> IO b -> IO b
pokeCStruct Ptr PhysicalDeviceMaintenance4FeaturesKHR
p PhysicalDeviceMaintenance4FeaturesKHR{Bool
maintenance4 :: Bool
$sel:maintenance4:PhysicalDeviceMaintenance4FeaturesKHR :: PhysicalDeviceMaintenance4FeaturesKHR -> Bool
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceMaintenance4FeaturesKHR
p Ptr PhysicalDeviceMaintenance4FeaturesKHR
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES_KHR)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceMaintenance4FeaturesKHR
p Ptr PhysicalDeviceMaintenance4FeaturesKHR -> 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 PhysicalDeviceMaintenance4FeaturesKHR
p Ptr PhysicalDeviceMaintenance4FeaturesKHR -> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
maintenance4))
    IO b
f
  cStructSize :: Int
cStructSize = Int
24
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: Ptr PhysicalDeviceMaintenance4FeaturesKHR -> IO b -> IO b
pokeZeroCStruct Ptr PhysicalDeviceMaintenance4FeaturesKHR
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceMaintenance4FeaturesKHR
p Ptr PhysicalDeviceMaintenance4FeaturesKHR
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES_KHR)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceMaintenance4FeaturesKHR
p Ptr PhysicalDeviceMaintenance4FeaturesKHR -> 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 PhysicalDeviceMaintenance4FeaturesKHR
p Ptr PhysicalDeviceMaintenance4FeaturesKHR -> 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 PhysicalDeviceMaintenance4FeaturesKHR where
  peekCStruct :: Ptr PhysicalDeviceMaintenance4FeaturesKHR
-> IO PhysicalDeviceMaintenance4FeaturesKHR
peekCStruct Ptr PhysicalDeviceMaintenance4FeaturesKHR
p = do
    Bool32
maintenance4 <- Ptr Bool32 -> IO Bool32
forall a. Storable a => Ptr a -> IO a
peek @Bool32 ((Ptr PhysicalDeviceMaintenance4FeaturesKHR
p Ptr PhysicalDeviceMaintenance4FeaturesKHR -> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Bool32))
    PhysicalDeviceMaintenance4FeaturesKHR
-> IO PhysicalDeviceMaintenance4FeaturesKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure (PhysicalDeviceMaintenance4FeaturesKHR
 -> IO PhysicalDeviceMaintenance4FeaturesKHR)
-> PhysicalDeviceMaintenance4FeaturesKHR
-> IO PhysicalDeviceMaintenance4FeaturesKHR
forall a b. (a -> b) -> a -> b
$ Bool -> PhysicalDeviceMaintenance4FeaturesKHR
PhysicalDeviceMaintenance4FeaturesKHR
             (Bool32 -> Bool
bool32ToBool Bool32
maintenance4)

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

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


-- | VkPhysicalDeviceMaintenance4PropertiesKHR - Structure describing various
-- implementation-defined properties introduced with VK_KHR_maintenance4
--
-- = Description
--
-- If the 'PhysicalDeviceMaintenance4PropertiesKHR' 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_KHR_maintenance4 VK_KHR_maintenance4>,
-- 'Vulkan.Core10.FundamentalTypes.DeviceSize',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data PhysicalDeviceMaintenance4PropertiesKHR = PhysicalDeviceMaintenance4PropertiesKHR
  { -- | #limits-maxBufferSize# @maxBufferSize@ is the maximum size
    -- 'Vulkan.Core10.Handles.Buffer' that /can/ be created.
    PhysicalDeviceMaintenance4PropertiesKHR -> DeviceSize
maxBufferSize :: DeviceSize }
  deriving (Typeable, PhysicalDeviceMaintenance4PropertiesKHR
-> PhysicalDeviceMaintenance4PropertiesKHR -> Bool
(PhysicalDeviceMaintenance4PropertiesKHR
 -> PhysicalDeviceMaintenance4PropertiesKHR -> Bool)
-> (PhysicalDeviceMaintenance4PropertiesKHR
    -> PhysicalDeviceMaintenance4PropertiesKHR -> Bool)
-> Eq PhysicalDeviceMaintenance4PropertiesKHR
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PhysicalDeviceMaintenance4PropertiesKHR
-> PhysicalDeviceMaintenance4PropertiesKHR -> Bool
$c/= :: PhysicalDeviceMaintenance4PropertiesKHR
-> PhysicalDeviceMaintenance4PropertiesKHR -> Bool
== :: PhysicalDeviceMaintenance4PropertiesKHR
-> PhysicalDeviceMaintenance4PropertiesKHR -> Bool
$c== :: PhysicalDeviceMaintenance4PropertiesKHR
-> PhysicalDeviceMaintenance4PropertiesKHR -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (PhysicalDeviceMaintenance4PropertiesKHR)
#endif
deriving instance Show PhysicalDeviceMaintenance4PropertiesKHR

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

instance FromCStruct PhysicalDeviceMaintenance4PropertiesKHR where
  peekCStruct :: Ptr PhysicalDeviceMaintenance4PropertiesKHR
-> IO PhysicalDeviceMaintenance4PropertiesKHR
peekCStruct Ptr PhysicalDeviceMaintenance4PropertiesKHR
p = do
    DeviceSize
maxBufferSize <- Ptr DeviceSize -> IO DeviceSize
forall a. Storable a => Ptr a -> IO a
peek @DeviceSize ((Ptr PhysicalDeviceMaintenance4PropertiesKHR
p Ptr PhysicalDeviceMaintenance4PropertiesKHR
-> Int -> Ptr DeviceSize
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr DeviceSize))
    PhysicalDeviceMaintenance4PropertiesKHR
-> IO PhysicalDeviceMaintenance4PropertiesKHR
forall (f :: * -> *) a. Applicative f => a -> f a
pure (PhysicalDeviceMaintenance4PropertiesKHR
 -> IO PhysicalDeviceMaintenance4PropertiesKHR)
-> PhysicalDeviceMaintenance4PropertiesKHR
-> IO PhysicalDeviceMaintenance4PropertiesKHR
forall a b. (a -> b) -> a -> b
$ DeviceSize -> PhysicalDeviceMaintenance4PropertiesKHR
PhysicalDeviceMaintenance4PropertiesKHR
             DeviceSize
maxBufferSize

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

instance Zero PhysicalDeviceMaintenance4PropertiesKHR where
  zero :: PhysicalDeviceMaintenance4PropertiesKHR
zero = DeviceSize -> PhysicalDeviceMaintenance4PropertiesKHR
PhysicalDeviceMaintenance4PropertiesKHR
           DeviceSize
forall a. Zero a => a
zero


type KHR_MAINTENANCE_4_SPEC_VERSION = 2

-- No documentation found for TopLevel "VK_KHR_MAINTENANCE_4_SPEC_VERSION"
pattern KHR_MAINTENANCE_4_SPEC_VERSION :: forall a . Integral a => a
pattern $bKHR_MAINTENANCE_4_SPEC_VERSION :: a
$mKHR_MAINTENANCE_4_SPEC_VERSION :: forall r a. Integral a => a -> (Void# -> r) -> (Void# -> r) -> r
KHR_MAINTENANCE_4_SPEC_VERSION = 2


type KHR_MAINTENANCE_4_EXTENSION_NAME = "VK_KHR_maintenance4"

-- No documentation found for TopLevel "VK_KHR_MAINTENANCE_4_EXTENSION_NAME"
pattern KHR_MAINTENANCE_4_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
pattern $bKHR_MAINTENANCE_4_EXTENSION_NAME :: a
$mKHR_MAINTENANCE_4_EXTENSION_NAME :: forall r a.
(Eq a, IsString a) =>
a -> (Void# -> r) -> (Void# -> r) -> r
KHR_MAINTENANCE_4_EXTENSION_NAME = "VK_KHR_maintenance4"