{-# language CPP #-}
-- | = Name
--
-- VK_EXT_frame_boundary - device extension
--
-- = VK_EXT_frame_boundary
--
-- [__Name String__]
--     @VK_EXT_frame_boundary@
--
-- [__Extension Type__]
--     Device extension
--
-- [__Registered Extension Number__]
--     376
--
-- [__Revision__]
--     1
--
-- [__Ratification Status__]
--     Ratified
--
-- [__Extension and Version Dependencies__]
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_get_physical_device_properties2 VK_KHR_get_physical_device_properties2>
--     or
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#versions-1.1 Vulkan Version 1.1>
--
-- [__Contact__]
--
--     -   James Fitzpatrick
--         <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?body=[VK_EXT_frame_boundary] @jamesfitzpatrick%0A*Here describe the issue or question you have about the VK_EXT_frame_boundary extension* >
--
-- [__Extension Proposal__]
--     <https://github.com/KhronosGroup/Vulkan-Docs/tree/main/proposals/VK_EXT_frame_boundary.adoc VK_EXT_frame_boundary>
--
-- == Other Extension Metadata
--
-- [__Last Modified Date__]
--     2023-06-14
--
-- [__Contributors__]
--
--     -   James Fitzpatrick, Imagination Technologies
--
--     -   Hugues Evrard, Google
--
--     -   Melih Yasin Yalcin, Google
--
--     -   Andrew Garrard, Imagination Technologies
--
--     -   Jan-Harald Fredriksen, Arm
--
--     -   Vassili Nikolaev, NVIDIA
--
--     -   Ting Wei, Huawei
--
-- == Description
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_frame_boundary VK_EXT_frame_boundary>
-- is a device extension that helps __tools__ (such as debuggers) to group
-- queue submissions per frames in non-trivial scenarios, typically when
-- 'Vulkan.Extensions.VK_KHR_swapchain.queuePresentKHR' is not a relevant
-- frame boundary delimiter.
--
-- == New Structures
--
-- -   Extending
--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--     'Vulkan.Core10.Device.DeviceCreateInfo':
--
--     -   'PhysicalDeviceFrameBoundaryFeaturesEXT'
--
-- -   Extending 'Vulkan.Core10.Queue.SubmitInfo',
--     'Vulkan.Core13.Promoted_From_VK_KHR_synchronization2.SubmitInfo2',
--     'Vulkan.Extensions.VK_KHR_swapchain.PresentInfoKHR',
--     'Vulkan.Core10.SparseResourceMemoryManagement.BindSparseInfo':
--
--     -   'FrameBoundaryEXT'
--
-- == New Enums
--
-- -   'FrameBoundaryFlagBitsEXT'
--
-- == New Bitmasks
--
-- -   'FrameBoundaryFlagsEXT'
--
-- == New Enum Constants
--
-- -   'EXT_FRAME_BOUNDARY_EXTENSION_NAME'
--
-- -   'EXT_FRAME_BOUNDARY_SPEC_VERSION'
--
-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_FRAME_BOUNDARY_EXT'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAME_BOUNDARY_FEATURES_EXT'
--
-- == Version History
--
-- -   Revision 0, 2022-01-14 (Hugues Evard)
--
--     -   Initial proposal
--
-- -   Revision 1, 2023-06-14 (James Fitzpatrick)
--
--     -   Initial draft
--
-- == See Also
--
-- No cross-references are available
--
-- == Document Notes
--
-- For more information, see the
-- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#VK_EXT_frame_boundary Vulkan Specification>.
--
-- This page is a generated document. Fixes and changes should be made to
-- the generator scripts, not directly.
module Vulkan.Extensions.VK_EXT_frame_boundary  ( FrameBoundaryEXT(..)
                                                , PhysicalDeviceFrameBoundaryFeaturesEXT(..)
                                                , FrameBoundaryFlagsEXT
                                                , FrameBoundaryFlagBitsEXT( FRAME_BOUNDARY_FRAME_END_BIT_EXT
                                                                          , ..
                                                                          )
                                                , EXT_FRAME_BOUNDARY_SPEC_VERSION
                                                , pattern EXT_FRAME_BOUNDARY_SPEC_VERSION
                                                , EXT_FRAME_BOUNDARY_EXTENSION_NAME
                                                , pattern EXT_FRAME_BOUNDARY_EXTENSION_NAME
                                                ) where

import Data.Bits (Bits)
import Data.Bits (FiniteBits)
import Vulkan.Internal.Utils (enumReadPrec)
import Vulkan.Internal.Utils (enumShowsPrec)
import Control.Monad (unless)
import Foreign.Marshal.Alloc (allocaBytes)
import GHC.IO (throwIO)
import Foreign.Ptr (nullPtr)
import Foreign.Ptr (plusPtr)
import GHC.Show (showString)
import Numeric (showHex)
import Data.Coerce (coerce)
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 qualified Data.Vector (null)
import Vulkan.CStruct (FromCStruct)
import Vulkan.CStruct (FromCStruct(..))
import Vulkan.CStruct (ToCStruct)
import Vulkan.CStruct (ToCStruct(..))
import Vulkan.Zero (Zero)
import Vulkan.Zero (Zero(..))
import Data.String (IsString)
import Data.Typeable (Typeable)
import Foreign.C.Types (CSize)
import Foreign.C.Types (CSize(..))
import Foreign.C.Types (CSize(CSize))
import Foreign.Storable (Storable)
import Foreign.Storable (Storable(peek))
import Foreign.Storable (Storable(poke))
import qualified Foreign.Storable (Storable(..))
import GHC.Generics (Generic)
import GHC.IO.Exception (IOErrorType(..))
import GHC.IO.Exception (IOException(..))
import Foreign.Ptr (Ptr)
import GHC.Read (Read(readPrec))
import GHC.Show (Show(showsPrec))
import Data.Word (Word32)
import Data.Word (Word64)
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.Handles (Buffer)
import Vulkan.Core10.FundamentalTypes (Flags)
import Vulkan.Core10.Handles (Image)
import Vulkan.Core10.Enums.StructureType (StructureType)
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_FRAME_BOUNDARY_EXT))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAME_BOUNDARY_FEATURES_EXT))
-- | VkFrameBoundaryEXT - Add frame boundary information to queue submissions
--
-- = Description
--
-- The application /can/ associate frame boundary information to a queue
-- submission call by adding a 'FrameBoundaryEXT' structure to the @pNext@
-- chain of
-- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#devsandqueues-submission queue submission>,
-- 'Vulkan.Extensions.VK_KHR_swapchain.PresentInfoKHR', or
-- 'Vulkan.Core10.SparseResourceMemoryManagement.BindSparseInfo'.
--
-- The frame identifier is used to associate one or more queue submissions
-- to a frame. It is meant to be unique within a frame lifetime, i.e. it is
-- possible (though not recommended) to reuse frame identifiers, as long as
-- any two frames that may have overlapping queue submissions (as in the
-- example above) use different frame identifiers.
--
-- Since the concept of frame is application-dependent, there is no way to
-- validate the use of frame identifier. It is good practice to use a
-- monotonically increasing counter as the frame identifier and not reuse
-- identifiers between frames.
--
-- The @pImages@ and @pBuffers@ arrays contain a list of images and buffers
-- which store the “end result” of the frame. As the concept of frame is
-- application-dependent, not all frames /may/ produce their results in
-- images or buffers, yet this is a sufficiently common case to be handled
-- by 'FrameBoundaryEXT'. Note that no extra information, such as image
-- layout is being provided, since the images are meant to be used by tools
-- which would already be tracking this required information. Having the
-- possibility of passing a list of end-result images makes
-- 'FrameBoundaryEXT' as expressive as
-- 'Vulkan.Extensions.VK_KHR_swapchain.queuePresentKHR', which is often the
-- default frame boundary delimiter.
--
-- The application /can/ also associate arbitrary extra information via tag
-- data using @tagName@, @tagSize@ and @pTag@. This extra information is
-- typically tool-specific.
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkFrameBoundaryEXT-sType-sType# @sType@ /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_FRAME_BOUNDARY_EXT'
--
-- -   #VUID-VkFrameBoundaryEXT-flags-parameter# @flags@ /must/ be a valid
--     combination of 'FrameBoundaryFlagBitsEXT' values
--
-- -   #VUID-VkFrameBoundaryEXT-pImages-parameter# If @imageCount@ is not
--     @0@, and @pImages@ is not @NULL@, @pImages@ /must/ be a valid
--     pointer to an array of @imageCount@ valid
--     'Vulkan.Core10.Handles.Image' handles
--
-- -   #VUID-VkFrameBoundaryEXT-pBuffers-parameter# If @bufferCount@ is not
--     @0@, and @pBuffers@ is not @NULL@, @pBuffers@ /must/ be a valid
--     pointer to an array of @bufferCount@ valid
--     'Vulkan.Core10.Handles.Buffer' handles
--
-- -   #VUID-VkFrameBoundaryEXT-pTag-parameter# If @tagSize@ is not @0@,
--     and @pTag@ is not @NULL@, @pTag@ /must/ be a valid pointer to an
--     array of @tagSize@ bytes
--
-- -   #VUID-VkFrameBoundaryEXT-commonparent# Both of the elements of
--     @pBuffers@, and the elements of @pImages@ that are valid handles of
--     non-ignored parameters /must/ have been created, allocated, or
--     retrieved from the same 'Vulkan.Core10.Handles.Device'
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_frame_boundary VK_EXT_frame_boundary>,
-- 'Vulkan.Core10.Handles.Buffer', 'FrameBoundaryFlagsEXT',
-- 'Vulkan.Core10.Handles.Image',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data FrameBoundaryEXT = FrameBoundaryEXT
  { -- | @flags@ is a bitmask of 'FrameBoundaryFlagBitsEXT' that can flag the
    -- last submission of a frame identifier.
    FrameBoundaryEXT -> FrameBoundaryFlagsEXT
flags :: FrameBoundaryFlagsEXT
  , -- | @frameID@ is the frame identifier.
    FrameBoundaryEXT -> Word64
frameID :: Word64
  , -- | @imageCount@ is the number of images that store frame results.
    FrameBoundaryEXT -> Word32
imageCount :: Word32
  , -- | @pImages@ is a pointer to an array of VkImage objects with imageCount
    -- entries.
    FrameBoundaryEXT -> Vector Image
images :: Vector Image
  , -- | @bufferCount@ is the number of buffers the store the frame results.
    FrameBoundaryEXT -> Word32
bufferCount :: Word32
  , -- | @pBuffers@ is a pointer to an array of VkBuffer objects with bufferCount
    -- entries.
    FrameBoundaryEXT -> Vector Buffer
buffers :: Vector Buffer
  , -- | @tagName@ is a numerical identifier for tag data.
    FrameBoundaryEXT -> Word64
tagName :: Word64
  , -- | @tagSize@ is the number of bytes of tag data.
    FrameBoundaryEXT -> Word64
tagSize :: Word64
  , -- | @pTag@ is a pointer to an array of @tagSize@ bytes containing tag data.
    FrameBoundaryEXT -> Ptr ()
tag :: Ptr ()
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (FrameBoundaryEXT)
#endif
deriving instance Show FrameBoundaryEXT

instance ToCStruct FrameBoundaryEXT where
  withCStruct :: forall b.
FrameBoundaryEXT -> (Ptr FrameBoundaryEXT -> IO b) -> IO b
withCStruct FrameBoundaryEXT
x Ptr FrameBoundaryEXT -> IO b
f = Int -> (Ptr FrameBoundaryEXT -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
88 ((Ptr FrameBoundaryEXT -> IO b) -> IO b)
-> (Ptr FrameBoundaryEXT -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr FrameBoundaryEXT
p -> Ptr FrameBoundaryEXT -> FrameBoundaryEXT -> IO b -> IO b
forall b. Ptr FrameBoundaryEXT -> FrameBoundaryEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr FrameBoundaryEXT
p FrameBoundaryEXT
x (Ptr FrameBoundaryEXT -> IO b
f Ptr FrameBoundaryEXT
p)
  pokeCStruct :: forall b. Ptr FrameBoundaryEXT -> FrameBoundaryEXT -> IO b -> IO b
pokeCStruct Ptr FrameBoundaryEXT
p FrameBoundaryEXT{Word32
Word64
Ptr ()
Vector Image
Vector Buffer
FrameBoundaryFlagsEXT
flags :: FrameBoundaryEXT -> FrameBoundaryFlagsEXT
frameID :: FrameBoundaryEXT -> Word64
imageCount :: FrameBoundaryEXT -> Word32
images :: FrameBoundaryEXT -> Vector Image
bufferCount :: FrameBoundaryEXT -> Word32
buffers :: FrameBoundaryEXT -> Vector Buffer
tagName :: FrameBoundaryEXT -> Word64
tagSize :: FrameBoundaryEXT -> Word64
tag :: FrameBoundaryEXT -> Ptr ()
flags :: FrameBoundaryFlagsEXT
frameID :: Word64
imageCount :: Word32
images :: Vector Image
bufferCount :: Word32
buffers :: Vector Buffer
tagName :: Word64
tagSize :: Word64
tag :: Ptr ()
..} 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 FrameBoundaryEXT
p Ptr FrameBoundaryEXT -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_FRAME_BOUNDARY_EXT)
    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 FrameBoundaryEXT
p Ptr FrameBoundaryEXT -> 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 FrameBoundaryFlagsEXT -> FrameBoundaryFlagsEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr FrameBoundaryEXT
p Ptr FrameBoundaryEXT -> Int -> Ptr FrameBoundaryFlagsEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr FrameBoundaryFlagsEXT)) (FrameBoundaryFlagsEXT
flags)
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Word64 -> Word64 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr FrameBoundaryEXT
p Ptr FrameBoundaryEXT -> Int -> Ptr Word64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Word64)) (Word64
frameID)
    let pImagesLength :: Int
pImagesLength = Vector Image -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector Image -> Int) -> Vector Image -> Int
forall a b. (a -> b) -> a -> b
$ (Vector Image
images)
    imageCount'' <- IO Word32 -> ContT b IO Word32
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 Word32 -> ContT b IO Word32) -> IO Word32 -> ContT b IO Word32
forall a b. (a -> b) -> a -> b
$ if (Word32
imageCount) Word32 -> Word32 -> Bool
forall a. Eq a => a -> a -> Bool
== Word32
0
      then Word32 -> IO Word32
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Word32 -> IO Word32) -> Word32 -> IO Word32
forall a b. (a -> b) -> a -> b
$ Int -> Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
pImagesLength
      else do
        Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Int -> Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
pImagesLength Word32 -> Word32 -> Bool
forall a. Eq a => a -> a -> Bool
== (Word32
imageCount) Bool -> Bool -> Bool
|| Int
pImagesLength Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
0) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
          IOException -> IO ()
forall e a. (HasCallStack, Exception e) => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"pImages must be empty or have 'imageCount' elements" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
        Word32 -> IO Word32
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Word32
imageCount)
    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) (imageCount'')
    pImages'' <- if Data.Vector.null (images)
      then pure nullPtr
      else do
        pPImages <- ContT $ allocaBytes @Image (((Data.Vector.length (images))) * 8)
        lift $ Data.Vector.imapM_ (\Int
i Image
e -> Ptr Image -> Image -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr Image
pPImages Ptr Image -> Int -> Ptr Image
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
8 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr Image) (Image
e)) ((images))
        pure $ pPImages
    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr Image))) pImages''
    let pBuffersLength = Vector Buffer -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector Buffer -> Int) -> Vector Buffer -> Int
forall a b. (a -> b) -> a -> b
$ (Vector Buffer
buffers)
    bufferCount'' <- lift $ if (bufferCount) == 0
      then pure $ fromIntegral pBuffersLength
      else do
        unless (fromIntegral pBuffersLength == (bufferCount) || pBuffersLength == 0) $
          throwIO $ IOError Nothing InvalidArgument "" "pBuffers must be empty or have 'bufferCount' elements" Nothing Nothing
        pure (bufferCount)
    lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) (bufferCount'')
    pBuffers'' <- if Data.Vector.null (buffers)
      then pure nullPtr
      else do
        pPBuffers <- ContT $ allocaBytes @Buffer (((Data.Vector.length (buffers))) * 8)
        lift $ Data.Vector.imapM_ (\Int
i Buffer
e -> Ptr Buffer -> Buffer -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr Buffer
pPBuffers Ptr Buffer -> Int -> Ptr Buffer
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
8 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr Buffer) (Buffer
e)) ((buffers))
        pure $ pPBuffers
    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr Buffer))) pBuffers''
    lift $ poke ((p `plusPtr` 64 :: Ptr Word64)) (tagName)
    lift $ poke ((p `plusPtr` 72 :: Ptr CSize)) (CSize (tagSize))
    lift $ poke ((p `plusPtr` 80 :: Ptr (Ptr ()))) (tag)
    lift $ f
  cStructSize :: Int
cStructSize = Int
88
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b. Ptr FrameBoundaryEXT -> IO b -> IO b
pokeZeroCStruct Ptr FrameBoundaryEXT
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr FrameBoundaryEXT
p Ptr FrameBoundaryEXT -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_FRAME_BOUNDARY_EXT)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr FrameBoundaryEXT
p Ptr FrameBoundaryEXT -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr Word64 -> Word64 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr FrameBoundaryEXT
p Ptr FrameBoundaryEXT -> Int -> Ptr Word64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Word64)) (Word64
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct FrameBoundaryEXT where
  peekCStruct :: Ptr FrameBoundaryEXT -> IO FrameBoundaryEXT
peekCStruct Ptr FrameBoundaryEXT
p = do
    flags <- forall a. Storable a => Ptr a -> IO a
peek @FrameBoundaryFlagsEXT ((Ptr FrameBoundaryEXT
p Ptr FrameBoundaryEXT -> Int -> Ptr FrameBoundaryFlagsEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr FrameBoundaryFlagsEXT))
    frameID <- peek @Word64 ((p `plusPtr` 24 :: Ptr Word64))
    imageCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
    pImages <- peek @(Ptr Image) ((p `plusPtr` 40 :: Ptr (Ptr Image)))
    let pImagesLength = if Ptr Image
pImages Ptr Image -> Ptr Image -> Bool
forall a. Eq a => a -> a -> Bool
== Ptr Image
forall a. Ptr a
nullPtr then Int
0 else (Word32 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word32
imageCount)
    pImages' <- generateM pImagesLength (\Int
i -> forall a. Storable a => Ptr a -> IO a
peek @Image ((Ptr Image
pImages Ptr Image -> Int -> Ptr Image
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
8 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr Image)))
    bufferCount <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32))
    pBuffers <- peek @(Ptr Buffer) ((p `plusPtr` 56 :: Ptr (Ptr Buffer)))
    let pBuffersLength = if Ptr Buffer
pBuffers Ptr Buffer -> Ptr Buffer -> Bool
forall a. Eq a => a -> a -> Bool
== Ptr Buffer
forall a. Ptr a
nullPtr then Int
0 else (Word32 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word32
bufferCount)
    pBuffers' <- generateM pBuffersLength (\Int
i -> forall a. Storable a => Ptr a -> IO a
peek @Buffer ((Ptr Buffer
pBuffers Ptr Buffer -> Int -> Ptr Buffer
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
8 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr Buffer)))
    tagName <- peek @Word64 ((p `plusPtr` 64 :: Ptr Word64))
    tagSize <- peek @CSize ((p `plusPtr` 72 :: Ptr CSize))
    pTag <- peek @(Ptr ()) ((p `plusPtr` 80 :: Ptr (Ptr ())))
    pure $ FrameBoundaryEXT
             flags
             frameID
             imageCount
             pImages'
             bufferCount
             pBuffers'
             tagName
             (coerce @CSize @Word64 tagSize)
             pTag

instance Zero FrameBoundaryEXT where
  zero :: FrameBoundaryEXT
zero = FrameBoundaryFlagsEXT
-> Word64
-> Word32
-> Vector Image
-> Word32
-> Vector Buffer
-> Word64
-> Word64
-> Ptr ()
-> FrameBoundaryEXT
FrameBoundaryEXT
           FrameBoundaryFlagsEXT
forall a. Zero a => a
zero
           Word64
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero
           Vector Image
forall a. Monoid a => a
mempty
           Word32
forall a. Zero a => a
zero
           Vector Buffer
forall a. Monoid a => a
mempty
           Word64
forall a. Zero a => a
zero
           Word64
forall a. Zero a => a
zero
           Ptr ()
forall a. Zero a => a
zero


-- | VkPhysicalDeviceFrameBoundaryFeaturesEXT - Structure describing the
-- frame boundary features that can be supported by an implementation
--
-- = Members
--
-- This structure describes the following feature:
--
-- = Description
--
-- If the 'PhysicalDeviceFrameBoundaryFeaturesEXT' structure is included in
-- the @pNext@ chain of the
-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2'
-- structure passed to
-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceFeatures2',
-- it is filled in to indicate whether each corresponding feature is
-- supported. If the application wishes to use a
-- 'Vulkan.Core10.Handles.Device' with any features described by
-- 'PhysicalDeviceFrameBoundaryFeaturesEXT', it /must/ add an instance of
-- the structure, with the desired feature members set to
-- 'Vulkan.Core10.FundamentalTypes.TRUE', to the @pNext@ chain of
-- 'Vulkan.Core10.Device.DeviceCreateInfo' when creating the
-- 'Vulkan.Core10.Handles.Device'.
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_frame_boundary VK_EXT_frame_boundary>,
-- 'Vulkan.Core10.FundamentalTypes.Bool32',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data PhysicalDeviceFrameBoundaryFeaturesEXT = PhysicalDeviceFrameBoundaryFeaturesEXT
  { -- | #features-frameBoundary# @frameBoundary@ indicates whether the
    -- implementation supports frame boundary information.
    PhysicalDeviceFrameBoundaryFeaturesEXT -> Bool
frameBoundary :: Bool }
  deriving (Typeable, PhysicalDeviceFrameBoundaryFeaturesEXT
-> PhysicalDeviceFrameBoundaryFeaturesEXT -> Bool
(PhysicalDeviceFrameBoundaryFeaturesEXT
 -> PhysicalDeviceFrameBoundaryFeaturesEXT -> Bool)
-> (PhysicalDeviceFrameBoundaryFeaturesEXT
    -> PhysicalDeviceFrameBoundaryFeaturesEXT -> Bool)
-> Eq PhysicalDeviceFrameBoundaryFeaturesEXT
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: PhysicalDeviceFrameBoundaryFeaturesEXT
-> PhysicalDeviceFrameBoundaryFeaturesEXT -> Bool
== :: PhysicalDeviceFrameBoundaryFeaturesEXT
-> PhysicalDeviceFrameBoundaryFeaturesEXT -> Bool
$c/= :: PhysicalDeviceFrameBoundaryFeaturesEXT
-> PhysicalDeviceFrameBoundaryFeaturesEXT -> Bool
/= :: PhysicalDeviceFrameBoundaryFeaturesEXT
-> PhysicalDeviceFrameBoundaryFeaturesEXT -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (PhysicalDeviceFrameBoundaryFeaturesEXT)
#endif
deriving instance Show PhysicalDeviceFrameBoundaryFeaturesEXT

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

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

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


type FrameBoundaryFlagsEXT = FrameBoundaryFlagBitsEXT

-- | VkFrameBoundaryFlagBitsEXT - Bitmask specifying whether a queue
-- submission is the last one for a given frame
--
-- = Description
--
-- -   'FRAME_BOUNDARY_FRAME_END_BIT_EXT' specifies that this queue
--     submission is the last one for this frame, i.e. once this queue
--     submission has terminated, then the work for this frame is
--     completed.
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_frame_boundary VK_EXT_frame_boundary>,
-- 'FrameBoundaryFlagsEXT'
newtype FrameBoundaryFlagBitsEXT = FrameBoundaryFlagBitsEXT Flags
  deriving newtype (FrameBoundaryFlagsEXT -> FrameBoundaryFlagsEXT -> Bool
(FrameBoundaryFlagsEXT -> FrameBoundaryFlagsEXT -> Bool)
-> (FrameBoundaryFlagsEXT -> FrameBoundaryFlagsEXT -> Bool)
-> Eq FrameBoundaryFlagsEXT
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: FrameBoundaryFlagsEXT -> FrameBoundaryFlagsEXT -> Bool
== :: FrameBoundaryFlagsEXT -> FrameBoundaryFlagsEXT -> Bool
$c/= :: FrameBoundaryFlagsEXT -> FrameBoundaryFlagsEXT -> Bool
/= :: FrameBoundaryFlagsEXT -> FrameBoundaryFlagsEXT -> Bool
Eq, Eq FrameBoundaryFlagsEXT
Eq FrameBoundaryFlagsEXT =>
(FrameBoundaryFlagsEXT -> FrameBoundaryFlagsEXT -> Ordering)
-> (FrameBoundaryFlagsEXT -> FrameBoundaryFlagsEXT -> Bool)
-> (FrameBoundaryFlagsEXT -> FrameBoundaryFlagsEXT -> Bool)
-> (FrameBoundaryFlagsEXT -> FrameBoundaryFlagsEXT -> Bool)
-> (FrameBoundaryFlagsEXT -> FrameBoundaryFlagsEXT -> Bool)
-> (FrameBoundaryFlagsEXT
    -> FrameBoundaryFlagsEXT -> FrameBoundaryFlagsEXT)
-> (FrameBoundaryFlagsEXT
    -> FrameBoundaryFlagsEXT -> FrameBoundaryFlagsEXT)
-> Ord FrameBoundaryFlagsEXT
FrameBoundaryFlagsEXT -> FrameBoundaryFlagsEXT -> Bool
FrameBoundaryFlagsEXT -> FrameBoundaryFlagsEXT -> Ordering
FrameBoundaryFlagsEXT
-> FrameBoundaryFlagsEXT -> FrameBoundaryFlagsEXT
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: FrameBoundaryFlagsEXT -> FrameBoundaryFlagsEXT -> Ordering
compare :: FrameBoundaryFlagsEXT -> FrameBoundaryFlagsEXT -> Ordering
$c< :: FrameBoundaryFlagsEXT -> FrameBoundaryFlagsEXT -> Bool
< :: FrameBoundaryFlagsEXT -> FrameBoundaryFlagsEXT -> Bool
$c<= :: FrameBoundaryFlagsEXT -> FrameBoundaryFlagsEXT -> Bool
<= :: FrameBoundaryFlagsEXT -> FrameBoundaryFlagsEXT -> Bool
$c> :: FrameBoundaryFlagsEXT -> FrameBoundaryFlagsEXT -> Bool
> :: FrameBoundaryFlagsEXT -> FrameBoundaryFlagsEXT -> Bool
$c>= :: FrameBoundaryFlagsEXT -> FrameBoundaryFlagsEXT -> Bool
>= :: FrameBoundaryFlagsEXT -> FrameBoundaryFlagsEXT -> Bool
$cmax :: FrameBoundaryFlagsEXT
-> FrameBoundaryFlagsEXT -> FrameBoundaryFlagsEXT
max :: FrameBoundaryFlagsEXT
-> FrameBoundaryFlagsEXT -> FrameBoundaryFlagsEXT
$cmin :: FrameBoundaryFlagsEXT
-> FrameBoundaryFlagsEXT -> FrameBoundaryFlagsEXT
min :: FrameBoundaryFlagsEXT
-> FrameBoundaryFlagsEXT -> FrameBoundaryFlagsEXT
Ord, Ptr FrameBoundaryFlagsEXT -> IO FrameBoundaryFlagsEXT
Ptr FrameBoundaryFlagsEXT -> Int -> IO FrameBoundaryFlagsEXT
Ptr FrameBoundaryFlagsEXT -> Int -> FrameBoundaryFlagsEXT -> IO ()
Ptr FrameBoundaryFlagsEXT -> FrameBoundaryFlagsEXT -> IO ()
FrameBoundaryFlagsEXT -> Int
(FrameBoundaryFlagsEXT -> Int)
-> (FrameBoundaryFlagsEXT -> Int)
-> (Ptr FrameBoundaryFlagsEXT -> Int -> IO FrameBoundaryFlagsEXT)
-> (Ptr FrameBoundaryFlagsEXT
    -> Int -> FrameBoundaryFlagsEXT -> IO ())
-> (forall b. Ptr b -> Int -> IO FrameBoundaryFlagsEXT)
-> (forall b. Ptr b -> Int -> FrameBoundaryFlagsEXT -> IO ())
-> (Ptr FrameBoundaryFlagsEXT -> IO FrameBoundaryFlagsEXT)
-> (Ptr FrameBoundaryFlagsEXT -> FrameBoundaryFlagsEXT -> IO ())
-> Storable FrameBoundaryFlagsEXT
forall b. Ptr b -> Int -> IO FrameBoundaryFlagsEXT
forall b. Ptr b -> Int -> FrameBoundaryFlagsEXT -> IO ()
forall a.
(a -> Int)
-> (a -> Int)
-> (Ptr a -> Int -> IO a)
-> (Ptr a -> Int -> a -> IO ())
-> (forall b. Ptr b -> Int -> IO a)
-> (forall b. Ptr b -> Int -> a -> IO ())
-> (Ptr a -> IO a)
-> (Ptr a -> a -> IO ())
-> Storable a
$csizeOf :: FrameBoundaryFlagsEXT -> Int
sizeOf :: FrameBoundaryFlagsEXT -> Int
$calignment :: FrameBoundaryFlagsEXT -> Int
alignment :: FrameBoundaryFlagsEXT -> Int
$cpeekElemOff :: Ptr FrameBoundaryFlagsEXT -> Int -> IO FrameBoundaryFlagsEXT
peekElemOff :: Ptr FrameBoundaryFlagsEXT -> Int -> IO FrameBoundaryFlagsEXT
$cpokeElemOff :: Ptr FrameBoundaryFlagsEXT -> Int -> FrameBoundaryFlagsEXT -> IO ()
pokeElemOff :: Ptr FrameBoundaryFlagsEXT -> Int -> FrameBoundaryFlagsEXT -> IO ()
$cpeekByteOff :: forall b. Ptr b -> Int -> IO FrameBoundaryFlagsEXT
peekByteOff :: forall b. Ptr b -> Int -> IO FrameBoundaryFlagsEXT
$cpokeByteOff :: forall b. Ptr b -> Int -> FrameBoundaryFlagsEXT -> IO ()
pokeByteOff :: forall b. Ptr b -> Int -> FrameBoundaryFlagsEXT -> IO ()
$cpeek :: Ptr FrameBoundaryFlagsEXT -> IO FrameBoundaryFlagsEXT
peek :: Ptr FrameBoundaryFlagsEXT -> IO FrameBoundaryFlagsEXT
$cpoke :: Ptr FrameBoundaryFlagsEXT -> FrameBoundaryFlagsEXT -> IO ()
poke :: Ptr FrameBoundaryFlagsEXT -> FrameBoundaryFlagsEXT -> IO ()
Storable, FrameBoundaryFlagsEXT
FrameBoundaryFlagsEXT -> Zero FrameBoundaryFlagsEXT
forall a. a -> Zero a
$czero :: FrameBoundaryFlagsEXT
zero :: FrameBoundaryFlagsEXT
Zero, Eq FrameBoundaryFlagsEXT
FrameBoundaryFlagsEXT
Eq FrameBoundaryFlagsEXT =>
(FrameBoundaryFlagsEXT
 -> FrameBoundaryFlagsEXT -> FrameBoundaryFlagsEXT)
-> (FrameBoundaryFlagsEXT
    -> FrameBoundaryFlagsEXT -> FrameBoundaryFlagsEXT)
-> (FrameBoundaryFlagsEXT
    -> FrameBoundaryFlagsEXT -> FrameBoundaryFlagsEXT)
-> (FrameBoundaryFlagsEXT -> FrameBoundaryFlagsEXT)
-> (FrameBoundaryFlagsEXT -> Int -> FrameBoundaryFlagsEXT)
-> (FrameBoundaryFlagsEXT -> Int -> FrameBoundaryFlagsEXT)
-> FrameBoundaryFlagsEXT
-> (Int -> FrameBoundaryFlagsEXT)
-> (FrameBoundaryFlagsEXT -> Int -> FrameBoundaryFlagsEXT)
-> (FrameBoundaryFlagsEXT -> Int -> FrameBoundaryFlagsEXT)
-> (FrameBoundaryFlagsEXT -> Int -> FrameBoundaryFlagsEXT)
-> (FrameBoundaryFlagsEXT -> Int -> Bool)
-> (FrameBoundaryFlagsEXT -> Maybe Int)
-> (FrameBoundaryFlagsEXT -> Int)
-> (FrameBoundaryFlagsEXT -> Bool)
-> (FrameBoundaryFlagsEXT -> Int -> FrameBoundaryFlagsEXT)
-> (FrameBoundaryFlagsEXT -> Int -> FrameBoundaryFlagsEXT)
-> (FrameBoundaryFlagsEXT -> Int -> FrameBoundaryFlagsEXT)
-> (FrameBoundaryFlagsEXT -> Int -> FrameBoundaryFlagsEXT)
-> (FrameBoundaryFlagsEXT -> Int -> FrameBoundaryFlagsEXT)
-> (FrameBoundaryFlagsEXT -> Int -> FrameBoundaryFlagsEXT)
-> (FrameBoundaryFlagsEXT -> Int)
-> Bits FrameBoundaryFlagsEXT
Int -> FrameBoundaryFlagsEXT
FrameBoundaryFlagsEXT -> Bool
FrameBoundaryFlagsEXT -> Int
FrameBoundaryFlagsEXT -> Maybe Int
FrameBoundaryFlagsEXT -> FrameBoundaryFlagsEXT
FrameBoundaryFlagsEXT -> Int -> Bool
FrameBoundaryFlagsEXT -> Int -> FrameBoundaryFlagsEXT
FrameBoundaryFlagsEXT
-> FrameBoundaryFlagsEXT -> FrameBoundaryFlagsEXT
forall a.
Eq a =>
(a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> a
-> (Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> Bool)
-> (a -> Maybe Int)
-> (a -> Int)
-> (a -> Bool)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int)
-> Bits a
$c.&. :: FrameBoundaryFlagsEXT
-> FrameBoundaryFlagsEXT -> FrameBoundaryFlagsEXT
.&. :: FrameBoundaryFlagsEXT
-> FrameBoundaryFlagsEXT -> FrameBoundaryFlagsEXT
$c.|. :: FrameBoundaryFlagsEXT
-> FrameBoundaryFlagsEXT -> FrameBoundaryFlagsEXT
.|. :: FrameBoundaryFlagsEXT
-> FrameBoundaryFlagsEXT -> FrameBoundaryFlagsEXT
$cxor :: FrameBoundaryFlagsEXT
-> FrameBoundaryFlagsEXT -> FrameBoundaryFlagsEXT
xor :: FrameBoundaryFlagsEXT
-> FrameBoundaryFlagsEXT -> FrameBoundaryFlagsEXT
$ccomplement :: FrameBoundaryFlagsEXT -> FrameBoundaryFlagsEXT
complement :: FrameBoundaryFlagsEXT -> FrameBoundaryFlagsEXT
$cshift :: FrameBoundaryFlagsEXT -> Int -> FrameBoundaryFlagsEXT
shift :: FrameBoundaryFlagsEXT -> Int -> FrameBoundaryFlagsEXT
$crotate :: FrameBoundaryFlagsEXT -> Int -> FrameBoundaryFlagsEXT
rotate :: FrameBoundaryFlagsEXT -> Int -> FrameBoundaryFlagsEXT
$czeroBits :: FrameBoundaryFlagsEXT
zeroBits :: FrameBoundaryFlagsEXT
$cbit :: Int -> FrameBoundaryFlagsEXT
bit :: Int -> FrameBoundaryFlagsEXT
$csetBit :: FrameBoundaryFlagsEXT -> Int -> FrameBoundaryFlagsEXT
setBit :: FrameBoundaryFlagsEXT -> Int -> FrameBoundaryFlagsEXT
$cclearBit :: FrameBoundaryFlagsEXT -> Int -> FrameBoundaryFlagsEXT
clearBit :: FrameBoundaryFlagsEXT -> Int -> FrameBoundaryFlagsEXT
$ccomplementBit :: FrameBoundaryFlagsEXT -> Int -> FrameBoundaryFlagsEXT
complementBit :: FrameBoundaryFlagsEXT -> Int -> FrameBoundaryFlagsEXT
$ctestBit :: FrameBoundaryFlagsEXT -> Int -> Bool
testBit :: FrameBoundaryFlagsEXT -> Int -> Bool
$cbitSizeMaybe :: FrameBoundaryFlagsEXT -> Maybe Int
bitSizeMaybe :: FrameBoundaryFlagsEXT -> Maybe Int
$cbitSize :: FrameBoundaryFlagsEXT -> Int
bitSize :: FrameBoundaryFlagsEXT -> Int
$cisSigned :: FrameBoundaryFlagsEXT -> Bool
isSigned :: FrameBoundaryFlagsEXT -> Bool
$cshiftL :: FrameBoundaryFlagsEXT -> Int -> FrameBoundaryFlagsEXT
shiftL :: FrameBoundaryFlagsEXT -> Int -> FrameBoundaryFlagsEXT
$cunsafeShiftL :: FrameBoundaryFlagsEXT -> Int -> FrameBoundaryFlagsEXT
unsafeShiftL :: FrameBoundaryFlagsEXT -> Int -> FrameBoundaryFlagsEXT
$cshiftR :: FrameBoundaryFlagsEXT -> Int -> FrameBoundaryFlagsEXT
shiftR :: FrameBoundaryFlagsEXT -> Int -> FrameBoundaryFlagsEXT
$cunsafeShiftR :: FrameBoundaryFlagsEXT -> Int -> FrameBoundaryFlagsEXT
unsafeShiftR :: FrameBoundaryFlagsEXT -> Int -> FrameBoundaryFlagsEXT
$crotateL :: FrameBoundaryFlagsEXT -> Int -> FrameBoundaryFlagsEXT
rotateL :: FrameBoundaryFlagsEXT -> Int -> FrameBoundaryFlagsEXT
$crotateR :: FrameBoundaryFlagsEXT -> Int -> FrameBoundaryFlagsEXT
rotateR :: FrameBoundaryFlagsEXT -> Int -> FrameBoundaryFlagsEXT
$cpopCount :: FrameBoundaryFlagsEXT -> Int
popCount :: FrameBoundaryFlagsEXT -> Int
Bits, Bits FrameBoundaryFlagsEXT
Bits FrameBoundaryFlagsEXT =>
(FrameBoundaryFlagsEXT -> Int)
-> (FrameBoundaryFlagsEXT -> Int)
-> (FrameBoundaryFlagsEXT -> Int)
-> FiniteBits FrameBoundaryFlagsEXT
FrameBoundaryFlagsEXT -> Int
forall b.
Bits b =>
(b -> Int) -> (b -> Int) -> (b -> Int) -> FiniteBits b
$cfiniteBitSize :: FrameBoundaryFlagsEXT -> Int
finiteBitSize :: FrameBoundaryFlagsEXT -> Int
$ccountLeadingZeros :: FrameBoundaryFlagsEXT -> Int
countLeadingZeros :: FrameBoundaryFlagsEXT -> Int
$ccountTrailingZeros :: FrameBoundaryFlagsEXT -> Int
countTrailingZeros :: FrameBoundaryFlagsEXT -> Int
FiniteBits)

-- No documentation found for Nested "VkFrameBoundaryFlagBitsEXT" "VK_FRAME_BOUNDARY_FRAME_END_BIT_EXT"
pattern $mFRAME_BOUNDARY_FRAME_END_BIT_EXT :: forall {r}.
FrameBoundaryFlagsEXT -> ((# #) -> r) -> ((# #) -> r) -> r
$bFRAME_BOUNDARY_FRAME_END_BIT_EXT :: FrameBoundaryFlagsEXT
FRAME_BOUNDARY_FRAME_END_BIT_EXT = FrameBoundaryFlagBitsEXT 0x00000001

conNameFrameBoundaryFlagBitsEXT :: String
conNameFrameBoundaryFlagBitsEXT :: String
conNameFrameBoundaryFlagBitsEXT = String
"FrameBoundaryFlagBitsEXT"

enumPrefixFrameBoundaryFlagBitsEXT :: String
enumPrefixFrameBoundaryFlagBitsEXT :: String
enumPrefixFrameBoundaryFlagBitsEXT = String
"FRAME_BOUNDARY_FRAME_END_BIT_EXT"

showTableFrameBoundaryFlagBitsEXT :: [(FrameBoundaryFlagBitsEXT, String)]
showTableFrameBoundaryFlagBitsEXT :: [(FrameBoundaryFlagsEXT, String)]
showTableFrameBoundaryFlagBitsEXT = [(FrameBoundaryFlagsEXT
FRAME_BOUNDARY_FRAME_END_BIT_EXT, String
"")]

instance Show FrameBoundaryFlagBitsEXT where
  showsPrec :: Int -> FrameBoundaryFlagsEXT -> ShowS
showsPrec =
    String
-> [(FrameBoundaryFlagsEXT, String)]
-> String
-> (FrameBoundaryFlagsEXT -> Word32)
-> (Word32 -> ShowS)
-> Int
-> FrameBoundaryFlagsEXT
-> ShowS
forall a i.
Eq a =>
String
-> [(a, String)]
-> String
-> (a -> i)
-> (i -> ShowS)
-> Int
-> a
-> ShowS
enumShowsPrec
      String
enumPrefixFrameBoundaryFlagBitsEXT
      [(FrameBoundaryFlagsEXT, String)]
showTableFrameBoundaryFlagBitsEXT
      String
conNameFrameBoundaryFlagBitsEXT
      (\(FrameBoundaryFlagBitsEXT Word32
x) -> Word32
x)
      (\Word32
x -> String -> ShowS
showString String
"0x" ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Word32 -> ShowS
forall a. Integral a => a -> ShowS
showHex Word32
x)

instance Read FrameBoundaryFlagBitsEXT where
  readPrec :: ReadPrec FrameBoundaryFlagsEXT
readPrec =
    String
-> [(FrameBoundaryFlagsEXT, String)]
-> String
-> (Word32 -> FrameBoundaryFlagsEXT)
-> ReadPrec FrameBoundaryFlagsEXT
forall i a.
Read i =>
String -> [(a, String)] -> String -> (i -> a) -> ReadPrec a
enumReadPrec
      String
enumPrefixFrameBoundaryFlagBitsEXT
      [(FrameBoundaryFlagsEXT, String)]
showTableFrameBoundaryFlagBitsEXT
      String
conNameFrameBoundaryFlagBitsEXT
      Word32 -> FrameBoundaryFlagsEXT
FrameBoundaryFlagBitsEXT

type EXT_FRAME_BOUNDARY_SPEC_VERSION = 1

-- No documentation found for TopLevel "VK_EXT_FRAME_BOUNDARY_SPEC_VERSION"
pattern EXT_FRAME_BOUNDARY_SPEC_VERSION :: forall a . Integral a => a
pattern $mEXT_FRAME_BOUNDARY_SPEC_VERSION :: forall {r} {a}.
Integral a =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
$bEXT_FRAME_BOUNDARY_SPEC_VERSION :: forall a. Integral a => a
EXT_FRAME_BOUNDARY_SPEC_VERSION = 1


type EXT_FRAME_BOUNDARY_EXTENSION_NAME = "VK_EXT_frame_boundary"

-- No documentation found for TopLevel "VK_EXT_FRAME_BOUNDARY_EXTENSION_NAME"
pattern EXT_FRAME_BOUNDARY_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
pattern $mEXT_FRAME_BOUNDARY_EXTENSION_NAME :: forall {r} {a}.
(Eq a, IsString a) =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
$bEXT_FRAME_BOUNDARY_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a
EXT_FRAME_BOUNDARY_EXTENSION_NAME = "VK_EXT_frame_boundary"