{-# language CPP #-}
-- | = Name
--
-- VK_ARM_render_pass_striped - device extension
--
-- == VK_ARM_render_pass_striped
--
-- [__Name String__]
--     @VK_ARM_render_pass_striped@
--
-- [__Extension Type__]
--     Device extension
--
-- [__Registered Extension Number__]
--     425
--
-- [__Revision__]
--     1
--
-- [__Ratification Status__]
--     Not ratified
--
-- [__Extension and Version Dependencies__]
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_get_physical_device_properties2 VK_KHR_get_physical_device_properties2>
--     or
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_synchronization2 VK_KHR_synchronization2>
--
-- [__Contact__]
--
--     -   Jan-Harald Fredriksen
--         <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?body=[VK_ARM_render_pass_striped] @janharaldfredriksen-arm%0A*Here describe the issue or question you have about the VK_ARM_render_pass_striped extension* >
--
-- [__Extension Proposal__]
--     <https://github.com/KhronosGroup/Vulkan-Docs/tree/main/proposals/VK_ARM_render_pass_striped.adoc VK_ARM_render_pass_striped>
--
-- == Other Extension Metadata
--
-- [__Last Modified Date__]
--     2023-11-21
--
-- [__IP Status__]
--     No known IP claims.
--
-- [__Contributors__]
--
--     -   Jan-Harald Fredriksen, Arm
--
--     -   Lisa Wu, Arm
--
--     -   Torbjorn Nilsson, Arm
--
--     -   Ying-Chieh Chen, Mediatek
--
--     -   Jim Chiu, Mediatek
--
-- == Description
--
-- This extension adds the ability to split a render pass instance into
-- stripes, and to get a notification when rendering has completed for each
-- stripe.
--
-- == New Structures
--
-- -   'RenderPassStripeInfoARM'
--
-- -   Extending
--     'Vulkan.Core13.Promoted_From_VK_KHR_synchronization2.CommandBufferSubmitInfo':
--
--     -   'RenderPassStripeSubmitInfoARM'
--
-- -   Extending
--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--     'Vulkan.Core10.Device.DeviceCreateInfo':
--
--     -   'PhysicalDeviceRenderPassStripedFeaturesARM'
--
-- -   Extending
--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2':
--
--     -   'PhysicalDeviceRenderPassStripedPropertiesARM'
--
-- -   Extending
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.RenderingInfo',
--     'Vulkan.Core10.CommandBufferBuilding.RenderPassBeginInfo':
--
--     -   'RenderPassStripeBeginInfoARM'
--
-- == New Enum Constants
--
-- -   'ARM_RENDER_PASS_STRIPED_EXTENSION_NAME'
--
-- -   'ARM_RENDER_PASS_STRIPED_SPEC_VERSION'
--
-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_RENDER_PASS_STRIPED_FEATURES_ARM'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_RENDER_PASS_STRIPED_PROPERTIES_ARM'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RENDER_PASS_STRIPE_BEGIN_INFO_ARM'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RENDER_PASS_STRIPE_INFO_ARM'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RENDER_PASS_STRIPE_SUBMIT_INFO_ARM'
--
-- == Examples
--
-- None.
--
-- == Version History
--
-- -   Revision 1, 2023-11-21
--
--     -   Initial revision
--
-- == See Also
--
-- 'PhysicalDeviceRenderPassStripedFeaturesARM',
-- 'PhysicalDeviceRenderPassStripedPropertiesARM',
-- 'RenderPassStripeBeginInfoARM', 'RenderPassStripeInfoARM',
-- 'RenderPassStripeSubmitInfoARM'
--
-- == Document Notes
--
-- For more information, see the
-- <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VK_ARM_render_pass_striped Vulkan Specification>
--
-- This page is a generated document. Fixes and changes should be made to
-- the generator scripts, not directly.
module Vulkan.Extensions.VK_ARM_render_pass_striped  ( PhysicalDeviceRenderPassStripedFeaturesARM(..)
                                                     , PhysicalDeviceRenderPassStripedPropertiesARM(..)
                                                     , RenderPassStripeInfoARM(..)
                                                     , RenderPassStripeBeginInfoARM(..)
                                                     , RenderPassStripeSubmitInfoARM(..)
                                                     , ARM_RENDER_PASS_STRIPED_SPEC_VERSION
                                                     , pattern ARM_RENDER_PASS_STRIPED_SPEC_VERSION
                                                     , ARM_RENDER_PASS_STRIPED_EXTENSION_NAME
                                                     , pattern ARM_RENDER_PASS_STRIPED_EXTENSION_NAME
                                                     ) where

import Foreign.Marshal.Alloc (allocaBytes)
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 qualified Data.Vector (imapM_)
import qualified Data.Vector (length)
import Vulkan.CStruct (FromCStruct)
import Vulkan.CStruct (FromCStruct(..))
import Vulkan.CStruct (ToCStruct)
import Vulkan.CStruct (ToCStruct(..))
import Vulkan.Zero (Zero(..))
import 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 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.Core10.FundamentalTypes (Bool32)
import Vulkan.Core10.FundamentalTypes (Extent2D)
import Vulkan.Core10.FundamentalTypes (Rect2D)
import Vulkan.Core13.Promoted_From_VK_KHR_synchronization2 (SemaphoreSubmitInfo)
import Vulkan.Core10.Enums.StructureType (StructureType)
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_RENDER_PASS_STRIPED_FEATURES_ARM))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_RENDER_PASS_STRIPED_PROPERTIES_ARM))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_RENDER_PASS_STRIPE_BEGIN_INFO_ARM))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_RENDER_PASS_STRIPE_INFO_ARM))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_RENDER_PASS_STRIPE_SUBMIT_INFO_ARM))
-- | VkPhysicalDeviceRenderPassStripedFeaturesARM - Structure describing
-- whether striped rendering can be supported by an implementation
--
-- = Members
--
-- The members of the 'PhysicalDeviceRenderPassStripedFeaturesARM'
-- structure describe the following features:
--
-- = Description
--
-- If the 'PhysicalDeviceRenderPassStripedFeaturesARM' 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. 'PhysicalDeviceRenderPassStripedFeaturesARM' /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_ARM_render_pass_striped VK_ARM_render_pass_striped>,
-- 'Vulkan.Core10.FundamentalTypes.Bool32',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data PhysicalDeviceRenderPassStripedFeaturesARM = PhysicalDeviceRenderPassStripedFeaturesARM
  { -- | #features-renderPassStriped# @renderPassStriped@ indicates that striped
    -- rendering is supported by the implementation.
    PhysicalDeviceRenderPassStripedFeaturesARM -> Bool
renderPassStriped :: Bool }
  deriving (Typeable, PhysicalDeviceRenderPassStripedFeaturesARM
-> PhysicalDeviceRenderPassStripedFeaturesARM -> Bool
(PhysicalDeviceRenderPassStripedFeaturesARM
 -> PhysicalDeviceRenderPassStripedFeaturesARM -> Bool)
-> (PhysicalDeviceRenderPassStripedFeaturesARM
    -> PhysicalDeviceRenderPassStripedFeaturesARM -> Bool)
-> Eq PhysicalDeviceRenderPassStripedFeaturesARM
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: PhysicalDeviceRenderPassStripedFeaturesARM
-> PhysicalDeviceRenderPassStripedFeaturesARM -> Bool
== :: PhysicalDeviceRenderPassStripedFeaturesARM
-> PhysicalDeviceRenderPassStripedFeaturesARM -> Bool
$c/= :: PhysicalDeviceRenderPassStripedFeaturesARM
-> PhysicalDeviceRenderPassStripedFeaturesARM -> Bool
/= :: PhysicalDeviceRenderPassStripedFeaturesARM
-> PhysicalDeviceRenderPassStripedFeaturesARM -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (PhysicalDeviceRenderPassStripedFeaturesARM)
#endif
deriving instance Show PhysicalDeviceRenderPassStripedFeaturesARM

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

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

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


-- | VkPhysicalDeviceRenderPassStripedPropertiesARM - Structure describing
-- striped rendering limits of an implementation
--
-- = Members
--
-- The members of the 'PhysicalDeviceRenderPassStripedPropertiesARM'
-- structure describe the following limits:
--
-- = Description
--
-- If the 'PhysicalDeviceRenderPassStripedPropertiesARM' 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_ARM_render_pass_striped VK_ARM_render_pass_striped>,
-- 'Vulkan.Core10.FundamentalTypes.Extent2D',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data PhysicalDeviceRenderPassStripedPropertiesARM = PhysicalDeviceRenderPassStripedPropertiesARM
  { -- | #limits-renderPassStripeGranularity# @renderPassStripeGranularity@
    -- indicates the minimum supported granularity of striped render pass
    -- regions.
    PhysicalDeviceRenderPassStripedPropertiesARM -> Extent2D
renderPassStripeGranularity :: Extent2D
  , -- | #limits-maxRenderPassStripes# @maxRenderPassStripes@ indicates the
    -- maximum number of stripes supported in striped rendering.
    PhysicalDeviceRenderPassStripedPropertiesARM -> Word32
maxRenderPassStripes :: Word32
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (PhysicalDeviceRenderPassStripedPropertiesARM)
#endif
deriving instance Show PhysicalDeviceRenderPassStripedPropertiesARM

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

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

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

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


-- | VkRenderPassStripeInfoARM - Structure specifying per rendering stripe
-- information
--
-- = Description
--
-- @stripeArea@ is the render area that is affected by this stripe of the
-- render pass instance. It /must/ be a subregion of the @renderArea@ of
-- the render pass instance.
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ARM_render_pass_striped VK_ARM_render_pass_striped>,
-- 'Vulkan.Core10.FundamentalTypes.Rect2D', 'RenderPassStripeBeginInfoARM',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data RenderPassStripeInfoARM = RenderPassStripeInfoARM
  { -- | @stripeArea@ is the stripe area, and is described in more detail below.
    RenderPassStripeInfoARM -> Rect2D
stripeArea :: Rect2D }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (RenderPassStripeInfoARM)
#endif
deriving instance Show RenderPassStripeInfoARM

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

instance FromCStruct RenderPassStripeInfoARM where
  peekCStruct :: Ptr RenderPassStripeInfoARM -> IO RenderPassStripeInfoARM
peekCStruct Ptr RenderPassStripeInfoARM
p = do
    Rect2D
stripeArea <- forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @Rect2D ((Ptr RenderPassStripeInfoARM
p Ptr RenderPassStripeInfoARM -> Int -> Ptr Rect2D
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Rect2D))
    RenderPassStripeInfoARM -> IO RenderPassStripeInfoARM
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (RenderPassStripeInfoARM -> IO RenderPassStripeInfoARM)
-> RenderPassStripeInfoARM -> IO RenderPassStripeInfoARM
forall a b. (a -> b) -> a -> b
$ Rect2D -> RenderPassStripeInfoARM
RenderPassStripeInfoARM
             Rect2D
stripeArea

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

instance Zero RenderPassStripeInfoARM where
  zero :: RenderPassStripeInfoARM
zero = Rect2D -> RenderPassStripeInfoARM
RenderPassStripeInfoARM
           Rect2D
forall a. Zero a => a
zero


-- | VkRenderPassStripeBeginInfoARM - Structure specifying striped rendering
-- information
--
-- = Description
--
-- This structure can be included in the @pNext@ chain of
-- 'Vulkan.Core10.CommandBufferBuilding.RenderPassBeginInfo' or
-- 'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.RenderingInfo' to
-- define how the render pass instance is split into stripes.
--
-- == Valid Usage
--
-- -   #VUID-VkRenderPassStripeBeginInfoARM-stripeInfoCount-09450#
--     @stripeInfoCount@ /must/ be less than or equal to
--     'PhysicalDeviceRenderPassStripedPropertiesARM'::@maxRenderPassStripes@
--
-- -   #VUID-VkRenderPassStripeBeginInfoARM-stripeArea-09451# The
--     @stripeArea@ defined by each element of @pStripeInfos@ /must/ not
--     overlap the @stripeArea@ of any other element
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkRenderPassStripeBeginInfoARM-sType-sType# @sType@ /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RENDER_PASS_STRIPE_BEGIN_INFO_ARM'
--
-- -   #VUID-VkRenderPassStripeBeginInfoARM-pStripeInfos-parameter#
--     @pStripeInfos@ /must/ be a valid pointer to an array of
--     @stripeInfoCount@ 'RenderPassStripeInfoARM' structures
--
-- -   #VUID-VkRenderPassStripeBeginInfoARM-stripeInfoCount-arraylength#
--     @stripeInfoCount@ /must/ be greater than @0@
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ARM_render_pass_striped VK_ARM_render_pass_striped>,
-- 'RenderPassStripeInfoARM',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data RenderPassStripeBeginInfoARM = RenderPassStripeBeginInfoARM
  { -- | @stripeInfoCount@ is the number of stripes in this render pass instance
    RenderPassStripeBeginInfoARM -> Word32
stripeInfoCount :: Word32
  , -- | @pStripeInfos@ is a pointer to an array of @stripeInfoCount@
    -- 'RenderPassStripeInfoARM' structures describing the stripes used by the
    -- render pass instance.
    RenderPassStripeBeginInfoARM -> Ptr RenderPassStripeInfoARM
stripeInfos :: Ptr RenderPassStripeInfoARM
  }
  deriving (Typeable, RenderPassStripeBeginInfoARM
-> RenderPassStripeBeginInfoARM -> Bool
(RenderPassStripeBeginInfoARM
 -> RenderPassStripeBeginInfoARM -> Bool)
-> (RenderPassStripeBeginInfoARM
    -> RenderPassStripeBeginInfoARM -> Bool)
-> Eq RenderPassStripeBeginInfoARM
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: RenderPassStripeBeginInfoARM
-> RenderPassStripeBeginInfoARM -> Bool
== :: RenderPassStripeBeginInfoARM
-> RenderPassStripeBeginInfoARM -> Bool
$c/= :: RenderPassStripeBeginInfoARM
-> RenderPassStripeBeginInfoARM -> Bool
/= :: RenderPassStripeBeginInfoARM
-> RenderPassStripeBeginInfoARM -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (RenderPassStripeBeginInfoARM)
#endif
deriving instance Show RenderPassStripeBeginInfoARM

instance ToCStruct RenderPassStripeBeginInfoARM where
  withCStruct :: forall b.
RenderPassStripeBeginInfoARM
-> (Ptr RenderPassStripeBeginInfoARM -> IO b) -> IO b
withCStruct RenderPassStripeBeginInfoARM
x Ptr RenderPassStripeBeginInfoARM -> IO b
f = Int -> (Ptr RenderPassStripeBeginInfoARM -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
32 ((Ptr RenderPassStripeBeginInfoARM -> IO b) -> IO b)
-> (Ptr RenderPassStripeBeginInfoARM -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr RenderPassStripeBeginInfoARM
p -> Ptr RenderPassStripeBeginInfoARM
-> RenderPassStripeBeginInfoARM -> IO b -> IO b
forall b.
Ptr RenderPassStripeBeginInfoARM
-> RenderPassStripeBeginInfoARM -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr RenderPassStripeBeginInfoARM
p RenderPassStripeBeginInfoARM
x (Ptr RenderPassStripeBeginInfoARM -> IO b
f Ptr RenderPassStripeBeginInfoARM
p)
  pokeCStruct :: forall b.
Ptr RenderPassStripeBeginInfoARM
-> RenderPassStripeBeginInfoARM -> IO b -> IO b
pokeCStruct Ptr RenderPassStripeBeginInfoARM
p RenderPassStripeBeginInfoARM{Word32
Ptr RenderPassStripeInfoARM
$sel:stripeInfoCount:RenderPassStripeBeginInfoARM :: RenderPassStripeBeginInfoARM -> Word32
$sel:stripeInfos:RenderPassStripeBeginInfoARM :: RenderPassStripeBeginInfoARM -> Ptr RenderPassStripeInfoARM
stripeInfoCount :: Word32
stripeInfos :: Ptr RenderPassStripeInfoARM
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr RenderPassStripeBeginInfoARM
p Ptr RenderPassStripeBeginInfoARM -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_RENDER_PASS_STRIPE_BEGIN_INFO_ARM)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr RenderPassStripeBeginInfoARM
p Ptr RenderPassStripeBeginInfoARM -> 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 RenderPassStripeBeginInfoARM
p Ptr RenderPassStripeBeginInfoARM -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32)) (Word32
stripeInfoCount)
    Ptr (Ptr RenderPassStripeInfoARM)
-> Ptr RenderPassStripeInfoARM -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr RenderPassStripeBeginInfoARM
p Ptr RenderPassStripeBeginInfoARM
-> Int -> Ptr (Ptr RenderPassStripeInfoARM)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr (Ptr RenderPassStripeInfoARM))) (Ptr RenderPassStripeInfoARM
stripeInfos)
    IO b
f
  cStructSize :: Int
cStructSize = Int
32
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b. Ptr RenderPassStripeBeginInfoARM -> IO b -> IO b
pokeZeroCStruct Ptr RenderPassStripeBeginInfoARM
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr RenderPassStripeBeginInfoARM
p Ptr RenderPassStripeBeginInfoARM -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_RENDER_PASS_STRIPE_BEGIN_INFO_ARM)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr RenderPassStripeBeginInfoARM
p Ptr RenderPassStripeBeginInfoARM -> 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 RenderPassStripeBeginInfoARM
p Ptr RenderPassStripeBeginInfoARM -> 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 RenderPassStripeInfoARM)
-> Ptr RenderPassStripeInfoARM -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr RenderPassStripeBeginInfoARM
p Ptr RenderPassStripeBeginInfoARM
-> Int -> Ptr (Ptr RenderPassStripeInfoARM)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr (Ptr RenderPassStripeInfoARM))) (Ptr RenderPassStripeInfoARM
forall a. Zero a => a
zero)
    IO b
f

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

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

instance Zero RenderPassStripeBeginInfoARM where
  zero :: RenderPassStripeBeginInfoARM
zero = Word32
-> Ptr RenderPassStripeInfoARM -> RenderPassStripeBeginInfoARM
RenderPassStripeBeginInfoARM
           Word32
forall a. Zero a => a
zero
           Ptr RenderPassStripeInfoARM
forall a. Zero a => a
zero


-- | VkRenderPassStripeSubmitInfoARM - Structure specifying striped rendering
-- submit information
--
-- = Description
--
-- This structure can be included in the @pNext@ chain of
-- 'Vulkan.Core13.Promoted_From_VK_KHR_synchronization2.CommandBufferSubmitInfo'
-- to provide a set of semaphores to be signaled for each striped render
-- pass instance.
--
-- The elements of @pStripeSemaphoreInfos@ are mapped to render pass
-- instances in
-- 'Vulkan.Core13.Promoted_From_VK_KHR_synchronization2.CommandBufferSubmitInfo'::@commandBuffer@
-- in submission order and in stripe order within each render pass
-- instance. Each semaphore in @pStripeSemaphoreInfos@ is signaled when the
-- implementation has completed execution of the associated stripe. In a
-- render pass instance that has multiview enabled, the stripe includes all
-- views in the view mask. In a render pass instance with @layerCount@
-- greater than 1, the stripe includes all layers.
--
-- == Valid Usage
--
-- -   #VUID-VkRenderPassStripeSubmitInfoARM-semaphore-09447# The
--     @semaphore@ member of each element of @pStripeSemaphoreInfos@ /must/
--     have been created with a
--     'Vulkan.Core12.Enums.SemaphoreType.SemaphoreType' of
--     'Vulkan.Core12.Enums.SemaphoreType.SEMAPHORE_TYPE_BINARY'
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkRenderPassStripeSubmitInfoARM-sType-sType# @sType@ /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_RENDER_PASS_STRIPE_SUBMIT_INFO_ARM'
--
-- -   #VUID-VkRenderPassStripeSubmitInfoARM-pStripeSemaphoreInfos-parameter#
--     @pStripeSemaphoreInfos@ /must/ be a valid pointer to an array of
--     @stripeSemaphoreInfoCount@ valid
--     'Vulkan.Core13.Promoted_From_VK_KHR_synchronization2.SemaphoreSubmitInfo'
--     structures
--
-- -   #VUID-VkRenderPassStripeSubmitInfoARM-stripeSemaphoreInfoCount-arraylength#
--     @stripeSemaphoreInfoCount@ /must/ be greater than @0@
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_ARM_render_pass_striped VK_ARM_render_pass_striped>,
-- 'Vulkan.Core13.Promoted_From_VK_KHR_synchronization2.SemaphoreSubmitInfo',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data RenderPassStripeSubmitInfoARM = RenderPassStripeSubmitInfoARM
  { -- | @pStripeSemaphoreInfos@ is a pointer to an array of
    -- @stripeSemaphoreInfoCount@
    -- 'Vulkan.Core13.Promoted_From_VK_KHR_synchronization2.SemaphoreSubmitInfo'
    -- structures describing the semaphores used to signal stripe completion.
    RenderPassStripeSubmitInfoARM -> Vector SemaphoreSubmitInfo
stripeSemaphoreInfos :: Vector SemaphoreSubmitInfo }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (RenderPassStripeSubmitInfoARM)
#endif
deriving instance Show RenderPassStripeSubmitInfoARM

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

instance FromCStruct RenderPassStripeSubmitInfoARM where
  peekCStruct :: Ptr RenderPassStripeSubmitInfoARM
-> IO RenderPassStripeSubmitInfoARM
peekCStruct Ptr RenderPassStripeSubmitInfoARM
p = do
    Word32
stripeSemaphoreInfoCount <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr RenderPassStripeSubmitInfoARM
p Ptr RenderPassStripeSubmitInfoARM -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32))
    Ptr SemaphoreSubmitInfo
pStripeSemaphoreInfos <- forall a. Storable a => Ptr a -> IO a
peek @(Ptr SemaphoreSubmitInfo) ((Ptr RenderPassStripeSubmitInfoARM
p Ptr RenderPassStripeSubmitInfoARM
-> Int -> Ptr (Ptr SemaphoreSubmitInfo)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr (Ptr SemaphoreSubmitInfo)))
    Vector SemaphoreSubmitInfo
pStripeSemaphoreInfos' <- Int
-> (Int -> IO SemaphoreSubmitInfo)
-> IO (Vector SemaphoreSubmitInfo)
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
stripeSemaphoreInfoCount) (\Int
i -> forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @SemaphoreSubmitInfo ((Ptr SemaphoreSubmitInfo
pStripeSemaphoreInfos Ptr SemaphoreSubmitInfo -> Int -> Ptr SemaphoreSubmitInfo
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
48 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr SemaphoreSubmitInfo)))
    RenderPassStripeSubmitInfoARM -> IO RenderPassStripeSubmitInfoARM
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (RenderPassStripeSubmitInfoARM -> IO RenderPassStripeSubmitInfoARM)
-> RenderPassStripeSubmitInfoARM
-> IO RenderPassStripeSubmitInfoARM
forall a b. (a -> b) -> a -> b
$ Vector SemaphoreSubmitInfo -> RenderPassStripeSubmitInfoARM
RenderPassStripeSubmitInfoARM
             Vector SemaphoreSubmitInfo
pStripeSemaphoreInfos'

instance Zero RenderPassStripeSubmitInfoARM where
  zero :: RenderPassStripeSubmitInfoARM
zero = Vector SemaphoreSubmitInfo -> RenderPassStripeSubmitInfoARM
RenderPassStripeSubmitInfoARM
           Vector SemaphoreSubmitInfo
forall a. Monoid a => a
mempty


type ARM_RENDER_PASS_STRIPED_SPEC_VERSION = 1

-- No documentation found for TopLevel "VK_ARM_RENDER_PASS_STRIPED_SPEC_VERSION"
pattern ARM_RENDER_PASS_STRIPED_SPEC_VERSION :: forall a . Integral a => a
pattern $bARM_RENDER_PASS_STRIPED_SPEC_VERSION :: forall a. Integral a => a
$mARM_RENDER_PASS_STRIPED_SPEC_VERSION :: forall {r} {a}.
Integral a =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
ARM_RENDER_PASS_STRIPED_SPEC_VERSION = 1


type ARM_RENDER_PASS_STRIPED_EXTENSION_NAME = "VK_ARM_render_pass_striped"

-- No documentation found for TopLevel "VK_ARM_RENDER_PASS_STRIPED_EXTENSION_NAME"
pattern ARM_RENDER_PASS_STRIPED_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
pattern $bARM_RENDER_PASS_STRIPED_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a
$mARM_RENDER_PASS_STRIPED_EXTENSION_NAME :: forall {r} {a}.
(Eq a, IsString a) =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
ARM_RENDER_PASS_STRIPED_EXTENSION_NAME = "VK_ARM_render_pass_striped"