{-# language CPP #-}
-- No documentation found for Chapter "Promoted_From_VK_EXT_inline_uniform_block"
module Vulkan.Core13.Promoted_From_VK_EXT_inline_uniform_block  ( PhysicalDeviceInlineUniformBlockFeatures(..)
                                                                , PhysicalDeviceInlineUniformBlockProperties(..)
                                                                , WriteDescriptorSetInlineUniformBlock(..)
                                                                , DescriptorPoolInlineUniformBlockCreateInfo(..)
                                                                , DescriptorType(..)
                                                                , StructureType(..)
                                                                ) where

import Foreign.Marshal.Alloc (allocaBytes)
import Foreign.Ptr (nullPtr)
import Foreign.Ptr (plusPtr)
import Vulkan.CStruct (FromCStruct)
import Vulkan.CStruct (FromCStruct(..))
import Vulkan.CStruct (ToCStruct)
import Vulkan.CStruct (ToCStruct(..))
import Vulkan.Zero (Zero(..))
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 Foreign.Ptr (Ptr)
import Data.Word (Word32)
import Data.Kind (Type)
import Vulkan.Core10.FundamentalTypes (bool32ToBool)
import Vulkan.Core10.FundamentalTypes (boolToBool32)
import Vulkan.Core10.FundamentalTypes (Bool32)
import Vulkan.Core10.Enums.StructureType (StructureType)
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK))
import Vulkan.Core10.Enums.DescriptorType (DescriptorType(..))
import Vulkan.Core10.Enums.StructureType (StructureType(..))
-- | VkPhysicalDeviceInlineUniformBlockFeatures - Structure describing inline
-- uniform block features that can be supported by an implementation
--
-- = Members
--
-- This structure describes the following features:
--
-- = Description
--
-- If the 'PhysicalDeviceInlineUniformBlockFeatures' 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. 'PhysicalDeviceInlineUniformBlockFeatures' /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_EXT_inline_uniform_block VK_EXT_inline_uniform_block>,
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_3 VK_VERSION_1_3>,
-- 'Vulkan.Core10.FundamentalTypes.Bool32',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data PhysicalDeviceInlineUniformBlockFeatures = PhysicalDeviceInlineUniformBlockFeatures
  { -- | #extension-features-inlineUniformBlock# @inlineUniformBlock@ indicates
    -- whether the implementation supports inline uniform block descriptors. If
    -- this feature is not enabled,
    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK'
    -- /must/ not be used.
    PhysicalDeviceInlineUniformBlockFeatures -> Bool
inlineUniformBlock :: Bool
  , -- | #extension-features-descriptorBindingInlineUniformBlockUpdateAfterBind#
    -- @descriptorBindingInlineUniformBlockUpdateAfterBind@ indicates whether
    -- the implementation supports updating inline uniform block descriptors
    -- after a set is bound. If this feature is not enabled,
    -- 'Vulkan.Core12.Enums.DescriptorBindingFlagBits.DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT'
    -- /must/ not be used with
    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK'.
    PhysicalDeviceInlineUniformBlockFeatures -> Bool
descriptorBindingInlineUniformBlockUpdateAfterBind :: Bool
  }
  deriving (Typeable, PhysicalDeviceInlineUniformBlockFeatures
-> PhysicalDeviceInlineUniformBlockFeatures -> Bool
(PhysicalDeviceInlineUniformBlockFeatures
 -> PhysicalDeviceInlineUniformBlockFeatures -> Bool)
-> (PhysicalDeviceInlineUniformBlockFeatures
    -> PhysicalDeviceInlineUniformBlockFeatures -> Bool)
-> Eq PhysicalDeviceInlineUniformBlockFeatures
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PhysicalDeviceInlineUniformBlockFeatures
-> PhysicalDeviceInlineUniformBlockFeatures -> Bool
$c/= :: PhysicalDeviceInlineUniformBlockFeatures
-> PhysicalDeviceInlineUniformBlockFeatures -> Bool
== :: PhysicalDeviceInlineUniformBlockFeatures
-> PhysicalDeviceInlineUniformBlockFeatures -> Bool
$c== :: PhysicalDeviceInlineUniformBlockFeatures
-> PhysicalDeviceInlineUniformBlockFeatures -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (PhysicalDeviceInlineUniformBlockFeatures)
#endif
deriving instance Show PhysicalDeviceInlineUniformBlockFeatures

instance ToCStruct PhysicalDeviceInlineUniformBlockFeatures where
  withCStruct :: forall b.
PhysicalDeviceInlineUniformBlockFeatures
-> (Ptr PhysicalDeviceInlineUniformBlockFeatures -> IO b) -> IO b
withCStruct PhysicalDeviceInlineUniformBlockFeatures
x Ptr PhysicalDeviceInlineUniformBlockFeatures -> IO b
f = Int
-> (Ptr PhysicalDeviceInlineUniformBlockFeatures -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
24 ((Ptr PhysicalDeviceInlineUniformBlockFeatures -> IO b) -> IO b)
-> (Ptr PhysicalDeviceInlineUniformBlockFeatures -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr PhysicalDeviceInlineUniformBlockFeatures
p -> Ptr PhysicalDeviceInlineUniformBlockFeatures
-> PhysicalDeviceInlineUniformBlockFeatures -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr PhysicalDeviceInlineUniformBlockFeatures
p PhysicalDeviceInlineUniformBlockFeatures
x (Ptr PhysicalDeviceInlineUniformBlockFeatures -> IO b
f Ptr PhysicalDeviceInlineUniformBlockFeatures
p)
  pokeCStruct :: forall b.
Ptr PhysicalDeviceInlineUniformBlockFeatures
-> PhysicalDeviceInlineUniformBlockFeatures -> IO b -> IO b
pokeCStruct Ptr PhysicalDeviceInlineUniformBlockFeatures
p PhysicalDeviceInlineUniformBlockFeatures{Bool
descriptorBindingInlineUniformBlockUpdateAfterBind :: Bool
inlineUniformBlock :: Bool
$sel:descriptorBindingInlineUniformBlockUpdateAfterBind:PhysicalDeviceInlineUniformBlockFeatures :: PhysicalDeviceInlineUniformBlockFeatures -> Bool
$sel:inlineUniformBlock:PhysicalDeviceInlineUniformBlockFeatures :: PhysicalDeviceInlineUniformBlockFeatures -> Bool
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceInlineUniformBlockFeatures
p Ptr PhysicalDeviceInlineUniformBlockFeatures
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceInlineUniformBlockFeatures
p Ptr PhysicalDeviceInlineUniformBlockFeatures -> 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 PhysicalDeviceInlineUniformBlockFeatures
p Ptr PhysicalDeviceInlineUniformBlockFeatures -> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
inlineUniformBlock))
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceInlineUniformBlockFeatures
p Ptr PhysicalDeviceInlineUniformBlockFeatures -> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
descriptorBindingInlineUniformBlockUpdateAfterBind))
    IO b
f
  cStructSize :: Int
cStructSize = Int
24
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b.
Ptr PhysicalDeviceInlineUniformBlockFeatures -> IO b -> IO b
pokeZeroCStruct Ptr PhysicalDeviceInlineUniformBlockFeatures
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceInlineUniformBlockFeatures
p Ptr PhysicalDeviceInlineUniformBlockFeatures
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceInlineUniformBlockFeatures
p Ptr PhysicalDeviceInlineUniformBlockFeatures -> 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 PhysicalDeviceInlineUniformBlockFeatures
p Ptr PhysicalDeviceInlineUniformBlockFeatures -> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
forall a. Zero a => a
zero))
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceInlineUniformBlockFeatures
p Ptr PhysicalDeviceInlineUniformBlockFeatures -> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
forall a. Zero a => a
zero))
    IO b
f

instance FromCStruct PhysicalDeviceInlineUniformBlockFeatures where
  peekCStruct :: Ptr PhysicalDeviceInlineUniformBlockFeatures
-> IO PhysicalDeviceInlineUniformBlockFeatures
peekCStruct Ptr PhysicalDeviceInlineUniformBlockFeatures
p = do
    Bool32
inlineUniformBlock <- forall a. Storable a => Ptr a -> IO a
peek @Bool32 ((Ptr PhysicalDeviceInlineUniformBlockFeatures
p Ptr PhysicalDeviceInlineUniformBlockFeatures -> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Bool32))
    Bool32
descriptorBindingInlineUniformBlockUpdateAfterBind <- forall a. Storable a => Ptr a -> IO a
peek @Bool32 ((Ptr PhysicalDeviceInlineUniformBlockFeatures
p Ptr PhysicalDeviceInlineUniformBlockFeatures -> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr Bool32))
    PhysicalDeviceInlineUniformBlockFeatures
-> IO PhysicalDeviceInlineUniformBlockFeatures
forall (f :: * -> *) a. Applicative f => a -> f a
pure (PhysicalDeviceInlineUniformBlockFeatures
 -> IO PhysicalDeviceInlineUniformBlockFeatures)
-> PhysicalDeviceInlineUniformBlockFeatures
-> IO PhysicalDeviceInlineUniformBlockFeatures
forall a b. (a -> b) -> a -> b
$ Bool -> Bool -> PhysicalDeviceInlineUniformBlockFeatures
PhysicalDeviceInlineUniformBlockFeatures
             (Bool32 -> Bool
bool32ToBool Bool32
inlineUniformBlock)
             (Bool32 -> Bool
bool32ToBool Bool32
descriptorBindingInlineUniformBlockUpdateAfterBind)

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

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


-- | VkPhysicalDeviceInlineUniformBlockProperties - Structure describing
-- inline uniform block properties that can be supported by an
-- implementation
--
-- = Description
--
-- If the 'PhysicalDeviceInlineUniformBlockProperties' 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_EXT_inline_uniform_block VK_EXT_inline_uniform_block>,
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_3 VK_VERSION_1_3>,
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data PhysicalDeviceInlineUniformBlockProperties = PhysicalDeviceInlineUniformBlockProperties
  { -- | #extension-limits-maxInlineUniformBlockSize# @maxInlineUniformBlockSize@
    -- is the maximum size in bytes of an
    -- <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#descriptorsets-inlineuniformblock inline uniform block>
    -- binding.
    PhysicalDeviceInlineUniformBlockProperties -> Word32
maxInlineUniformBlockSize :: Word32
  , -- No documentation found for Nested "VkPhysicalDeviceInlineUniformBlockProperties" "maxPerStageDescriptorInlineUniformBlocks"
    PhysicalDeviceInlineUniformBlockProperties -> Word32
maxPerStageDescriptorInlineUniformBlocks :: Word32
  , -- | #extension-limits-maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks#
    -- @maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks@ is similar to
    -- @maxPerStageDescriptorInlineUniformBlocks@ but counts descriptor
    -- bindings from descriptor sets created with or without the
    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
    -- bit set.
    PhysicalDeviceInlineUniformBlockProperties -> Word32
maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks :: Word32
  , -- | #extension-limits-maxDescriptorSetInlineUniformBlocks#
    -- @maxDescriptorSetInlineUniformBlocks@ is the maximum number of inline
    -- uniform block bindings that /can/ be included in descriptor bindings in
    -- a pipeline layout across all pipeline shader stages and descriptor set
    -- numbers. Descriptor bindings with a descriptor type of
    -- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK'
    -- count against this limit. Only descriptor bindings in descriptor set
    -- layouts created without the
    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
    -- bit set count against this limit.
    PhysicalDeviceInlineUniformBlockProperties -> Word32
maxDescriptorSetInlineUniformBlocks :: Word32
  , -- | #extension-limits-maxDescriptorSetUpdateAfterBindInlineUniformBlocks#
    -- @maxDescriptorSetUpdateAfterBindInlineUniformBlocks@ is similar to
    -- @maxDescriptorSetInlineUniformBlocks@ but counts descriptor bindings
    -- from descriptor sets created with or without the
    -- 'Vulkan.Core10.Enums.DescriptorSetLayoutCreateFlagBits.DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT'
    -- bit set.
    PhysicalDeviceInlineUniformBlockProperties -> Word32
maxDescriptorSetUpdateAfterBindInlineUniformBlocks :: Word32
  }
  deriving (Typeable, PhysicalDeviceInlineUniformBlockProperties
-> PhysicalDeviceInlineUniformBlockProperties -> Bool
(PhysicalDeviceInlineUniformBlockProperties
 -> PhysicalDeviceInlineUniformBlockProperties -> Bool)
-> (PhysicalDeviceInlineUniformBlockProperties
    -> PhysicalDeviceInlineUniformBlockProperties -> Bool)
-> Eq PhysicalDeviceInlineUniformBlockProperties
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PhysicalDeviceInlineUniformBlockProperties
-> PhysicalDeviceInlineUniformBlockProperties -> Bool
$c/= :: PhysicalDeviceInlineUniformBlockProperties
-> PhysicalDeviceInlineUniformBlockProperties -> Bool
== :: PhysicalDeviceInlineUniformBlockProperties
-> PhysicalDeviceInlineUniformBlockProperties -> Bool
$c== :: PhysicalDeviceInlineUniformBlockProperties
-> PhysicalDeviceInlineUniformBlockProperties -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (PhysicalDeviceInlineUniformBlockProperties)
#endif
deriving instance Show PhysicalDeviceInlineUniformBlockProperties

instance ToCStruct PhysicalDeviceInlineUniformBlockProperties where
  withCStruct :: forall b.
PhysicalDeviceInlineUniformBlockProperties
-> (Ptr PhysicalDeviceInlineUniformBlockProperties -> IO b) -> IO b
withCStruct PhysicalDeviceInlineUniformBlockProperties
x Ptr PhysicalDeviceInlineUniformBlockProperties -> IO b
f = Int
-> (Ptr PhysicalDeviceInlineUniformBlockProperties -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
40 ((Ptr PhysicalDeviceInlineUniformBlockProperties -> IO b) -> IO b)
-> (Ptr PhysicalDeviceInlineUniformBlockProperties -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr PhysicalDeviceInlineUniformBlockProperties
p -> Ptr PhysicalDeviceInlineUniformBlockProperties
-> PhysicalDeviceInlineUniformBlockProperties -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr PhysicalDeviceInlineUniformBlockProperties
p PhysicalDeviceInlineUniformBlockProperties
x (Ptr PhysicalDeviceInlineUniformBlockProperties -> IO b
f Ptr PhysicalDeviceInlineUniformBlockProperties
p)
  pokeCStruct :: forall b.
Ptr PhysicalDeviceInlineUniformBlockProperties
-> PhysicalDeviceInlineUniformBlockProperties -> IO b -> IO b
pokeCStruct Ptr PhysicalDeviceInlineUniformBlockProperties
p PhysicalDeviceInlineUniformBlockProperties{Word32
maxDescriptorSetUpdateAfterBindInlineUniformBlocks :: Word32
maxDescriptorSetInlineUniformBlocks :: Word32
maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks :: Word32
maxPerStageDescriptorInlineUniformBlocks :: Word32
maxInlineUniformBlockSize :: Word32
$sel:maxDescriptorSetUpdateAfterBindInlineUniformBlocks:PhysicalDeviceInlineUniformBlockProperties :: PhysicalDeviceInlineUniformBlockProperties -> Word32
$sel:maxDescriptorSetInlineUniformBlocks:PhysicalDeviceInlineUniformBlockProperties :: PhysicalDeviceInlineUniformBlockProperties -> Word32
$sel:maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks:PhysicalDeviceInlineUniformBlockProperties :: PhysicalDeviceInlineUniformBlockProperties -> Word32
$sel:maxPerStageDescriptorInlineUniformBlocks:PhysicalDeviceInlineUniformBlockProperties :: PhysicalDeviceInlineUniformBlockProperties -> Word32
$sel:maxInlineUniformBlockSize:PhysicalDeviceInlineUniformBlockProperties :: PhysicalDeviceInlineUniformBlockProperties -> Word32
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceInlineUniformBlockProperties
p Ptr PhysicalDeviceInlineUniformBlockProperties
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceInlineUniformBlockProperties
p Ptr PhysicalDeviceInlineUniformBlockProperties
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceInlineUniformBlockProperties
p Ptr PhysicalDeviceInlineUniformBlockProperties -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32)) (Word32
maxInlineUniformBlockSize)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceInlineUniformBlockProperties
p Ptr PhysicalDeviceInlineUniformBlockProperties -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr Word32)) (Word32
maxPerStageDescriptorInlineUniformBlocks)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceInlineUniformBlockProperties
p Ptr PhysicalDeviceInlineUniformBlockProperties -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Word32)) (Word32
maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceInlineUniformBlockProperties
p Ptr PhysicalDeviceInlineUniformBlockProperties -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
28 :: Ptr Word32)) (Word32
maxDescriptorSetInlineUniformBlocks)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceInlineUniformBlockProperties
p Ptr PhysicalDeviceInlineUniformBlockProperties -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr Word32)) (Word32
maxDescriptorSetUpdateAfterBindInlineUniformBlocks)
    IO b
f
  cStructSize :: Int
cStructSize = Int
40
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b.
Ptr PhysicalDeviceInlineUniformBlockProperties -> IO b -> IO b
pokeZeroCStruct Ptr PhysicalDeviceInlineUniformBlockProperties
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceInlineUniformBlockProperties
p Ptr PhysicalDeviceInlineUniformBlockProperties
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceInlineUniformBlockProperties
p Ptr PhysicalDeviceInlineUniformBlockProperties
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceInlineUniformBlockProperties
p Ptr PhysicalDeviceInlineUniformBlockProperties -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceInlineUniformBlockProperties
p Ptr PhysicalDeviceInlineUniformBlockProperties -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceInlineUniformBlockProperties
p Ptr PhysicalDeviceInlineUniformBlockProperties -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceInlineUniformBlockProperties
p Ptr PhysicalDeviceInlineUniformBlockProperties -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
28 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceInlineUniformBlockProperties
p Ptr PhysicalDeviceInlineUniformBlockProperties -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct PhysicalDeviceInlineUniformBlockProperties where
  peekCStruct :: Ptr PhysicalDeviceInlineUniformBlockProperties
-> IO PhysicalDeviceInlineUniformBlockProperties
peekCStruct Ptr PhysicalDeviceInlineUniformBlockProperties
p = do
    Word32
maxInlineUniformBlockSize <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr PhysicalDeviceInlineUniformBlockProperties
p Ptr PhysicalDeviceInlineUniformBlockProperties -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32))
    Word32
maxPerStageDescriptorInlineUniformBlocks <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr PhysicalDeviceInlineUniformBlockProperties
p Ptr PhysicalDeviceInlineUniformBlockProperties -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr Word32))
    Word32
maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr PhysicalDeviceInlineUniformBlockProperties
p Ptr PhysicalDeviceInlineUniformBlockProperties -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Word32))
    Word32
maxDescriptorSetInlineUniformBlocks <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr PhysicalDeviceInlineUniformBlockProperties
p Ptr PhysicalDeviceInlineUniformBlockProperties -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
28 :: Ptr Word32))
    Word32
maxDescriptorSetUpdateAfterBindInlineUniformBlocks <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr PhysicalDeviceInlineUniformBlockProperties
p Ptr PhysicalDeviceInlineUniformBlockProperties -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr Word32))
    PhysicalDeviceInlineUniformBlockProperties
-> IO PhysicalDeviceInlineUniformBlockProperties
forall (f :: * -> *) a. Applicative f => a -> f a
pure (PhysicalDeviceInlineUniformBlockProperties
 -> IO PhysicalDeviceInlineUniformBlockProperties)
-> PhysicalDeviceInlineUniformBlockProperties
-> IO PhysicalDeviceInlineUniformBlockProperties
forall a b. (a -> b) -> a -> b
$ Word32
-> Word32
-> Word32
-> Word32
-> Word32
-> PhysicalDeviceInlineUniformBlockProperties
PhysicalDeviceInlineUniformBlockProperties
             Word32
maxInlineUniformBlockSize
             Word32
maxPerStageDescriptorInlineUniformBlocks
             Word32
maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks
             Word32
maxDescriptorSetInlineUniformBlocks
             Word32
maxDescriptorSetUpdateAfterBindInlineUniformBlocks

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

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


-- | VkWriteDescriptorSetInlineUniformBlock - Structure specifying inline
-- uniform block data
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_inline_uniform_block VK_EXT_inline_uniform_block>,
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_3 VK_VERSION_1_3>,
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data WriteDescriptorSetInlineUniformBlock = WriteDescriptorSetInlineUniformBlock
  { -- | @dataSize@ is the number of bytes of inline uniform block data pointed
    -- to by @pData@.
    --
    -- #VUID-VkWriteDescriptorSetInlineUniformBlock-dataSize-02222# @dataSize@
    -- /must/ be an integer multiple of @4@
    --
    -- #VUID-VkWriteDescriptorSetInlineUniformBlock-dataSize-arraylength#
    -- @dataSize@ /must/ be greater than @0@
    WriteDescriptorSetInlineUniformBlock -> Word32
dataSize :: Word32
  , -- | @pData@ is a pointer to @dataSize@ number of bytes of data to write to
    -- the inline uniform block.
    --
    -- #VUID-VkWriteDescriptorSetInlineUniformBlock-pData-parameter# @pData@
    -- /must/ be a valid pointer to an array of @dataSize@ bytes
    WriteDescriptorSetInlineUniformBlock -> Ptr ()
data' :: Ptr ()
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (WriteDescriptorSetInlineUniformBlock)
#endif
deriving instance Show WriteDescriptorSetInlineUniformBlock

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

instance FromCStruct WriteDescriptorSetInlineUniformBlock where
  peekCStruct :: Ptr WriteDescriptorSetInlineUniformBlock
-> IO WriteDescriptorSetInlineUniformBlock
peekCStruct Ptr WriteDescriptorSetInlineUniformBlock
p = do
    Word32
dataSize <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr WriteDescriptorSetInlineUniformBlock
p Ptr WriteDescriptorSetInlineUniformBlock -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32))
    Ptr ()
pData <- forall a. Storable a => Ptr a -> IO a
peek @(Ptr ()) ((Ptr WriteDescriptorSetInlineUniformBlock
p Ptr WriteDescriptorSetInlineUniformBlock -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr (Ptr ())))
    WriteDescriptorSetInlineUniformBlock
-> IO WriteDescriptorSetInlineUniformBlock
forall (f :: * -> *) a. Applicative f => a -> f a
pure (WriteDescriptorSetInlineUniformBlock
 -> IO WriteDescriptorSetInlineUniformBlock)
-> WriteDescriptorSetInlineUniformBlock
-> IO WriteDescriptorSetInlineUniformBlock
forall a b. (a -> b) -> a -> b
$ Word32 -> Ptr () -> WriteDescriptorSetInlineUniformBlock
WriteDescriptorSetInlineUniformBlock
             Word32
dataSize Ptr ()
pData

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

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


-- | VkDescriptorPoolInlineUniformBlockCreateInfo - Structure specifying the
-- maximum number of inline uniform block bindings of a newly created
-- descriptor pool
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_inline_uniform_block VK_EXT_inline_uniform_block>,
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_3 VK_VERSION_1_3>,
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data DescriptorPoolInlineUniformBlockCreateInfo = DescriptorPoolInlineUniformBlockCreateInfo
  { -- | @maxInlineUniformBlockBindings@ is the number of inline uniform block
    -- bindings to allocate.
    DescriptorPoolInlineUniformBlockCreateInfo -> Word32
maxInlineUniformBlockBindings :: Word32 }
  deriving (Typeable, DescriptorPoolInlineUniformBlockCreateInfo
-> DescriptorPoolInlineUniformBlockCreateInfo -> Bool
(DescriptorPoolInlineUniformBlockCreateInfo
 -> DescriptorPoolInlineUniformBlockCreateInfo -> Bool)
-> (DescriptorPoolInlineUniformBlockCreateInfo
    -> DescriptorPoolInlineUniformBlockCreateInfo -> Bool)
-> Eq DescriptorPoolInlineUniformBlockCreateInfo
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescriptorPoolInlineUniformBlockCreateInfo
-> DescriptorPoolInlineUniformBlockCreateInfo -> Bool
$c/= :: DescriptorPoolInlineUniformBlockCreateInfo
-> DescriptorPoolInlineUniformBlockCreateInfo -> Bool
== :: DescriptorPoolInlineUniformBlockCreateInfo
-> DescriptorPoolInlineUniformBlockCreateInfo -> Bool
$c== :: DescriptorPoolInlineUniformBlockCreateInfo
-> DescriptorPoolInlineUniformBlockCreateInfo -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DescriptorPoolInlineUniformBlockCreateInfo)
#endif
deriving instance Show DescriptorPoolInlineUniformBlockCreateInfo

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

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

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

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