{-# LINE 1 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}

{-# LINE 2 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}

{-# LANGUAGE DataKinds             #-}
{-# LANGUAGE FlexibleContexts      #-}
{-# LANGUAGE FlexibleInstances     #-}
{-# LANGUAGE MagicHash             #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE PatternSynonyms       #-}
{-# LANGUAGE ScopedTypeVariables   #-}
{-# LANGUAGE Strict                #-}
{-# LANGUAGE TypeApplications      #-}
{-# LANGUAGE TypeFamilies          #-}
{-# LANGUAGE UndecidableInstances  #-}
module Graphics.Vulkan.Types.Struct.Clear
       (VkClearAttachment(..), VkClearColorValue(..),
        VkClearDepthStencilValue(..), VkClearRect(..), VkClearValue(..))
       where
import           Foreign.Storable                  (Storable (..))
import           GHC.Base                          (Addr#, ByteArray#, Proxy#,
                                                    byteArrayContents#,
                                                    plusAddr#, proxy#)
import           GHC.TypeLits                      (KnownNat, natVal') -- ' closing tick for hsc2hs
import           Graphics.Vulkan.Marshal
import           Graphics.Vulkan.Marshal.Internal
import           Graphics.Vulkan.Types.Enum.Image  (VkImageAspectFlags)
import           Graphics.Vulkan.Types.Struct.Rect (VkRect2D)
import           System.IO.Unsafe                  (unsafeDupablePerformIO)

-- | > typedef struct VkClearAttachment {
--   >     VkImageAspectFlags     aspectMask;
--   >     uint32_t               colorAttachment;
--   >     VkClearValue           clearValue;
--   > } VkClearAttachment;
--
--   <https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VkClearAttachment VkClearAttachment registry at www.khronos.org>
data VkClearAttachment = VkClearAttachment# Addr# ByteArray#

instance Eq VkClearAttachment where
        (VkClearAttachment# a _) == x@(VkClearAttachment# b _)
          = EQ == cmpBytes# (sizeOf x) a b

        {-# INLINE (==) #-}

instance Ord VkClearAttachment where
        (VkClearAttachment# a _) `compare` x@(VkClearAttachment# b _)
          = cmpBytes# (sizeOf x) a b

        {-# INLINE compare #-}

instance Storable VkClearAttachment where
        sizeOf ~_ = (24)
{-# LINE 52 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}

        {-# INLINE sizeOf #-}
        alignment ~_ = (4)
{-# LINE 55 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}

        {-# INLINE alignment #-}
        peek = peekVkData#

        {-# INLINE peek #-}
        poke = pokeVkData#

        {-# INLINE poke #-}

instance VulkanMarshalPrim VkClearAttachment where
        unsafeAddr (VkClearAttachment# a _) = a

        {-# INLINE unsafeAddr #-}
        unsafeByteArray (VkClearAttachment# _ b) = b

        {-# INLINE unsafeByteArray #-}
        unsafeFromByteArrayOffset off b
          = VkClearAttachment# (plusAddr# (byteArrayContents# b) off) b

        {-# INLINE unsafeFromByteArrayOffset #-}

instance VulkanMarshal VkClearAttachment where
        type StructFields VkClearAttachment =
             '["aspectMask", "colorAttachment", "clearValue"] -- ' closing tick for hsc2hs
        type CUnionType VkClearAttachment = 'False -- ' closing tick for hsc2hs
        type ReturnedOnly VkClearAttachment = 'False -- ' closing tick for hsc2hs
        type StructExtends VkClearAttachment = '[] -- ' closing tick for hsc2hs

instance {-# OVERLAPPING #-}
         HasField "aspectMask" VkClearAttachment where
        type FieldType "aspectMask" VkClearAttachment = VkImageAspectFlags
        type FieldOptional "aspectMask" VkClearAttachment = 'False -- ' closing tick for hsc2hs
        type FieldOffset "aspectMask" VkClearAttachment =
             (0)
{-# LINE 89 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}
        type FieldIsArray "aspectMask" VkClearAttachment = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

        {-# INLINE fieldOffset #-}
        fieldOffset = (0)
{-# LINE 96 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}

instance {-# OVERLAPPING #-}
         CanReadField "aspectMask" VkClearAttachment where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (0))
{-# LINE 103 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}

        {-# INLINE readField #-}
        readField p
          = peekByteOff p (0)
{-# LINE 107 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}

instance {-# OVERLAPPING #-}
         CanWriteField "aspectMask" VkClearAttachment where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (0)
{-# LINE 113 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "colorAttachment" VkClearAttachment where
        type FieldType "colorAttachment" VkClearAttachment = Word32
        type FieldOptional "colorAttachment" VkClearAttachment = 'False -- ' closing tick for hsc2hs
        type FieldOffset "colorAttachment" VkClearAttachment =
             (4)
{-# LINE 120 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}
        type FieldIsArray "colorAttachment" VkClearAttachment = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

        {-# INLINE fieldOffset #-}
        fieldOffset
          = (4)
{-# LINE 128 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}

instance {-# OVERLAPPING #-}
         CanReadField "colorAttachment" VkClearAttachment where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (4))
{-# LINE 135 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}

        {-# INLINE readField #-}
        readField p
          = peekByteOff p (4)
{-# LINE 139 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}

instance {-# OVERLAPPING #-}
         CanWriteField "colorAttachment" VkClearAttachment where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (4)
{-# LINE 145 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "clearValue" VkClearAttachment where
        type FieldType "clearValue" VkClearAttachment = VkClearValue
        type FieldOptional "clearValue" VkClearAttachment = 'False -- ' closing tick for hsc2hs
        type FieldOffset "clearValue" VkClearAttachment =
             (8)
{-# LINE 152 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}
        type FieldIsArray "clearValue" VkClearAttachment = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

        {-# INLINE fieldOffset #-}
        fieldOffset = (8)
{-# LINE 159 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}

instance {-# OVERLAPPING #-}
         CanReadField "clearValue" VkClearAttachment where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (8))
{-# LINE 166 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}

        {-# INLINE readField #-}
        readField p
          = peekByteOff p (8)
{-# LINE 170 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}

instance {-# OVERLAPPING #-}
         CanWriteField "clearValue" VkClearAttachment where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (8)
{-# LINE 176 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}

instance Show VkClearAttachment where
        showsPrec d x
          = showString "VkClearAttachment {" .
              showString "aspectMask = " .
                showsPrec d (getField @"aspectMask" x) .
                  showString ", " .
                    showString "colorAttachment = " .
                      showsPrec d (getField @"colorAttachment" x) .
                        showString ", " .
                          showString "clearValue = " .
                            showsPrec d (getField @"clearValue" x) . showChar '}'

-- | // Union allowing specification of floating point, integer, or unsigned integer color data. Actual value selected is based on image/attachment being cleared.
--
--   > typedef union VkClearColorValue {
--   >     float                  float32[4];
--   >     int32_t                int32[4];
--   >     uint32_t               uint32[4];
--   > } VkClearColorValue;
--
--   <https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VkClearColorValue VkClearColorValue registry at www.khronos.org>
data VkClearColorValue = VkClearColorValue# Addr# ByteArray#

instance Eq VkClearColorValue where
        (VkClearColorValue# a _) == x@(VkClearColorValue# b _)
          = EQ == cmpBytes# (sizeOf x) a b

        {-# INLINE (==) #-}

instance Ord VkClearColorValue where
        (VkClearColorValue# a _) `compare` x@(VkClearColorValue# b _)
          = cmpBytes# (sizeOf x) a b

        {-# INLINE compare #-}

instance Storable VkClearColorValue where
        sizeOf ~_ = (16)
{-# LINE 214 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}

        {-# INLINE sizeOf #-}
        alignment ~_ = (4)
{-# LINE 217 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}

        {-# INLINE alignment #-}
        peek = peekVkData#

        {-# INLINE peek #-}
        poke = pokeVkData#

        {-# INLINE poke #-}

instance VulkanMarshalPrim VkClearColorValue where
        unsafeAddr (VkClearColorValue# a _) = a

        {-# INLINE unsafeAddr #-}
        unsafeByteArray (VkClearColorValue# _ b) = b

        {-# INLINE unsafeByteArray #-}
        unsafeFromByteArrayOffset off b
          = VkClearColorValue# (plusAddr# (byteArrayContents# b) off) b

        {-# INLINE unsafeFromByteArrayOffset #-}

instance VulkanMarshal VkClearColorValue where
        type StructFields VkClearColorValue =
             '["float32", "int32", "uint32"] -- ' closing tick for hsc2hs
        type CUnionType VkClearColorValue = 'True -- ' closing tick for hsc2hs
        type ReturnedOnly VkClearColorValue = 'False -- ' closing tick for hsc2hs
        type StructExtends VkClearColorValue = '[] -- ' closing tick for hsc2hs

instance {-# OVERLAPPING #-} HasField "float32" VkClearColorValue
         where
        type FieldType "float32" VkClearColorValue =
             Float
{-# LINE 249 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}
        type FieldOptional "float32" VkClearColorValue = 'False -- ' closing tick for hsc2hs
        type FieldOffset "float32" VkClearColorValue =
             (0)
{-# LINE 252 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}
        type FieldIsArray "float32" VkClearColorValue = 'True -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

        {-# INLINE fieldOffset #-}
        fieldOffset = (0)
{-# LINE 259 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}

instance {-# OVERLAPPING #-}
         (KnownNat idx, IndexInBounds "float32" idx VkClearColorValue) =>
         CanReadFieldArray "float32" idx VkClearColorValue
         where
        {-# SPECIALISE instance
                       CanReadFieldArray "float32" 0 VkClearColorValue #-}

        {-# SPECIALISE instance
                       CanReadFieldArray "float32" 1 VkClearColorValue #-}

        {-# SPECIALISE instance
                       CanReadFieldArray "float32" 2 VkClearColorValue #-}

        {-# SPECIALISE instance
                       CanReadFieldArray "float32" 3 VkClearColorValue #-}
        type FieldArrayLength "float32" VkClearColorValue = 4

        {-# INLINE fieldArrayLength #-}
        fieldArrayLength = 4

        {-# INLINE getFieldArray #-}
        getFieldArray = f
          where {-# NOINLINE f #-}
                f x = unsafeDupablePerformIO (peekByteOff (unsafePtr x) off)
                off
                  = (0) +
{-# LINE 286 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}
                      sizeOf (undefined :: Float) *
{-# LINE 287 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}
                        fromInteger (natVal' (proxy# :: Proxy# idx)) -- ' closing tick for hsc2hs

        {-# INLINE readFieldArray #-}
        readFieldArray p
          = peekByteOff p
              ((0) +
{-# LINE 293 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}
                 sizeOf (undefined :: Float) *
{-# LINE 294 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}
                   fromInteger (natVal' (proxy# :: Proxy# idx))) -- ' closing tick for hsc2hs

instance {-# OVERLAPPING #-}
         (KnownNat idx, IndexInBounds "float32" idx VkClearColorValue) =>
         CanWriteFieldArray "float32" idx VkClearColorValue
         where
        {-# SPECIALISE instance
                       CanWriteFieldArray "float32" 0 VkClearColorValue #-}

        {-# SPECIALISE instance
                       CanWriteFieldArray "float32" 1 VkClearColorValue #-}

        {-# SPECIALISE instance
                       CanWriteFieldArray "float32" 2 VkClearColorValue #-}

        {-# SPECIALISE instance
                       CanWriteFieldArray "float32" 3 VkClearColorValue #-}

        {-# INLINE writeFieldArray #-}
        writeFieldArray p
          = pokeByteOff p
              ((0) +
{-# LINE 316 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}
                 sizeOf (undefined :: Float) *
{-# LINE 317 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}
                   fromInteger (natVal' (proxy# :: Proxy# idx))) -- ' closing tick for hsc2hs

instance {-# OVERLAPPING #-} HasField "int32" VkClearColorValue
         where
        type FieldType "int32" VkClearColorValue = Int32
        type FieldOptional "int32" VkClearColorValue = 'False -- ' closing tick for hsc2hs
        type FieldOffset "int32" VkClearColorValue =
             (0)
{-# LINE 325 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}
        type FieldIsArray "int32" VkClearColorValue = 'True -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

        {-# INLINE fieldOffset #-}
        fieldOffset = (0)
{-# LINE 332 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}

instance {-# OVERLAPPING #-}
         (KnownNat idx, IndexInBounds "int32" idx VkClearColorValue) =>
         CanReadFieldArray "int32" idx VkClearColorValue
         where
        {-# SPECIALISE instance
                       CanReadFieldArray "int32" 0 VkClearColorValue #-}

        {-# SPECIALISE instance
                       CanReadFieldArray "int32" 1 VkClearColorValue #-}

        {-# SPECIALISE instance
                       CanReadFieldArray "int32" 2 VkClearColorValue #-}

        {-# SPECIALISE instance
                       CanReadFieldArray "int32" 3 VkClearColorValue #-}
        type FieldArrayLength "int32" VkClearColorValue = 4

        {-# INLINE fieldArrayLength #-}
        fieldArrayLength = 4

        {-# INLINE getFieldArray #-}
        getFieldArray = f
          where {-# NOINLINE f #-}
                f x = unsafeDupablePerformIO (peekByteOff (unsafePtr x) off)
                off
                  = (0) +
{-# LINE 359 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}
                      sizeOf (undefined :: Int32) *
                        fromInteger (natVal' (proxy# :: Proxy# idx)) -- ' closing tick for hsc2hs

        {-# INLINE readFieldArray #-}
        readFieldArray p
          = peekByteOff p
              ((0) +
{-# LINE 366 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}
                 sizeOf (undefined :: Int32) *
                   fromInteger (natVal' (proxy# :: Proxy# idx))) -- ' closing tick for hsc2hs

instance {-# OVERLAPPING #-}
         (KnownNat idx, IndexInBounds "int32" idx VkClearColorValue) =>
         CanWriteFieldArray "int32" idx VkClearColorValue
         where
        {-# SPECIALISE instance
                       CanWriteFieldArray "int32" 0 VkClearColorValue #-}

        {-# SPECIALISE instance
                       CanWriteFieldArray "int32" 1 VkClearColorValue #-}

        {-# SPECIALISE instance
                       CanWriteFieldArray "int32" 2 VkClearColorValue #-}

        {-# SPECIALISE instance
                       CanWriteFieldArray "int32" 3 VkClearColorValue #-}

        {-# INLINE writeFieldArray #-}
        writeFieldArray p
          = pokeByteOff p
              ((0) +
{-# LINE 389 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}
                 sizeOf (undefined :: Int32) *
                   fromInteger (natVal' (proxy# :: Proxy# idx))) -- ' closing tick for hsc2hs

instance {-# OVERLAPPING #-} HasField "uint32" VkClearColorValue
         where
        type FieldType "uint32" VkClearColorValue = Word32
        type FieldOptional "uint32" VkClearColorValue = 'False -- ' closing tick for hsc2hs
        type FieldOffset "uint32" VkClearColorValue =
             (0)
{-# LINE 398 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}
        type FieldIsArray "uint32" VkClearColorValue = 'True -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

        {-# INLINE fieldOffset #-}
        fieldOffset = (0)
{-# LINE 405 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}

instance {-# OVERLAPPING #-}
         (KnownNat idx, IndexInBounds "uint32" idx VkClearColorValue) =>
         CanReadFieldArray "uint32" idx VkClearColorValue
         where
        {-# SPECIALISE instance
                       CanReadFieldArray "uint32" 0 VkClearColorValue #-}

        {-# SPECIALISE instance
                       CanReadFieldArray "uint32" 1 VkClearColorValue #-}

        {-# SPECIALISE instance
                       CanReadFieldArray "uint32" 2 VkClearColorValue #-}

        {-# SPECIALISE instance
                       CanReadFieldArray "uint32" 3 VkClearColorValue #-}
        type FieldArrayLength "uint32" VkClearColorValue = 4

        {-# INLINE fieldArrayLength #-}
        fieldArrayLength = 4

        {-# INLINE getFieldArray #-}
        getFieldArray = f
          where {-# NOINLINE f #-}
                f x = unsafeDupablePerformIO (peekByteOff (unsafePtr x) off)
                off
                  = (0) +
{-# LINE 432 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}
                      sizeOf (undefined :: Word32) *
                        fromInteger (natVal' (proxy# :: Proxy# idx)) -- ' closing tick for hsc2hs

        {-# INLINE readFieldArray #-}
        readFieldArray p
          = peekByteOff p
              ((0) +
{-# LINE 439 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}
                 sizeOf (undefined :: Word32) *
                   fromInteger (natVal' (proxy# :: Proxy# idx))) -- ' closing tick for hsc2hs

instance {-# OVERLAPPING #-}
         (KnownNat idx, IndexInBounds "uint32" idx VkClearColorValue) =>
         CanWriteFieldArray "uint32" idx VkClearColorValue
         where
        {-# SPECIALISE instance
                       CanWriteFieldArray "uint32" 0 VkClearColorValue #-}

        {-# SPECIALISE instance
                       CanWriteFieldArray "uint32" 1 VkClearColorValue #-}

        {-# SPECIALISE instance
                       CanWriteFieldArray "uint32" 2 VkClearColorValue #-}

        {-# SPECIALISE instance
                       CanWriteFieldArray "uint32" 3 VkClearColorValue #-}

        {-# INLINE writeFieldArray #-}
        writeFieldArray p
          = pokeByteOff p
              ((0) +
{-# LINE 462 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}
                 sizeOf (undefined :: Word32) *
                   fromInteger (natVal' (proxy# :: Proxy# idx))) -- ' closing tick for hsc2hs

instance Show VkClearColorValue where
        showsPrec d x
          = showString "VkClearColorValue {" .
              (showString "float32 = [" .
                 showsPrec d
                   (let s = sizeOf
                              (undefined :: FieldType "float32" VkClearColorValue)
                        o = fieldOffset @"float32" @VkClearColorValue
                        f i
                          = peekByteOff (unsafePtr x) i ::
                              IO (FieldType "float32" VkClearColorValue)
                      in
                      unsafeDupablePerformIO . mapM f $
                        map (\ i -> o + i * s) [0 .. 4 - 1])
                   . showChar ']')
                .
                showString ", " .
                  (showString "int32 = [" .
                     showsPrec d
                       (let s = sizeOf (undefined :: FieldType "int32" VkClearColorValue)
                            o = fieldOffset @"int32" @VkClearColorValue
                            f i
                              = peekByteOff (unsafePtr x) i ::
                                  IO (FieldType "int32" VkClearColorValue)
                          in
                          unsafeDupablePerformIO . mapM f $
                            map (\ i -> o + i * s) [0 .. 4 - 1])
                       . showChar ']')
                    .
                    showString ", " .
                      (showString "uint32 = [" .
                         showsPrec d
                           (let s = sizeOf (undefined :: FieldType "uint32" VkClearColorValue)
                                o = fieldOffset @"uint32" @VkClearColorValue
                                f i
                                  = peekByteOff (unsafePtr x) i ::
                                      IO (FieldType "uint32" VkClearColorValue)
                              in
                              unsafeDupablePerformIO . mapM f $
                                map (\ i -> o + i * s) [0 .. 4 - 1])
                           . showChar ']')
                        . showChar '}'

-- | > typedef struct VkClearDepthStencilValue {
--   >     float                  depth;
--   >     uint32_t               stencil;
--   > } VkClearDepthStencilValue;
--
--   <https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VkClearDepthStencilValue VkClearDepthStencilValue registry at www.khronos.org>
data VkClearDepthStencilValue = VkClearDepthStencilValue# Addr#
                                                          ByteArray#

instance Eq VkClearDepthStencilValue where
        (VkClearDepthStencilValue# a _) ==
          x@(VkClearDepthStencilValue# b _) = EQ == cmpBytes# (sizeOf x) a b

        {-# INLINE (==) #-}

instance Ord VkClearDepthStencilValue where
        (VkClearDepthStencilValue# a _) `compare`
          x@(VkClearDepthStencilValue# b _) = cmpBytes# (sizeOf x) a b

        {-# INLINE compare #-}

instance Storable VkClearDepthStencilValue where
        sizeOf ~_ = (8)
{-# LINE 531 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}

        {-# INLINE sizeOf #-}
        alignment ~_ = (4)
{-# LINE 534 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}

        {-# INLINE alignment #-}
        peek = peekVkData#

        {-# INLINE peek #-}
        poke = pokeVkData#

        {-# INLINE poke #-}

instance VulkanMarshalPrim VkClearDepthStencilValue where
        unsafeAddr (VkClearDepthStencilValue# a _) = a

        {-# INLINE unsafeAddr #-}
        unsafeByteArray (VkClearDepthStencilValue# _ b) = b

        {-# INLINE unsafeByteArray #-}
        unsafeFromByteArrayOffset off b
          = VkClearDepthStencilValue# (plusAddr# (byteArrayContents# b) off)
              b

        {-# INLINE unsafeFromByteArrayOffset #-}

instance VulkanMarshal VkClearDepthStencilValue where
        type StructFields VkClearDepthStencilValue = '["depth", "stencil"] -- ' closing tick for hsc2hs
        type CUnionType VkClearDepthStencilValue = 'False -- ' closing tick for hsc2hs
        type ReturnedOnly VkClearDepthStencilValue = 'False -- ' closing tick for hsc2hs
        type StructExtends VkClearDepthStencilValue = '[] -- ' closing tick for hsc2hs

instance {-# OVERLAPPING #-}
         HasField "depth" VkClearDepthStencilValue where
        type FieldType "depth" VkClearDepthStencilValue =
             Float
{-# LINE 566 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}
        type FieldOptional "depth" VkClearDepthStencilValue = 'False -- ' closing tick for hsc2hs
        type FieldOffset "depth" VkClearDepthStencilValue =
             (0)
{-# LINE 569 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}
        type FieldIsArray "depth" VkClearDepthStencilValue = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

        {-# INLINE fieldOffset #-}
        fieldOffset = (0)
{-# LINE 576 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}

instance {-# OVERLAPPING #-}
         CanReadField "depth" VkClearDepthStencilValue where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (0))
{-# LINE 583 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}

        {-# INLINE readField #-}
        readField p
          = peekByteOff p (0)
{-# LINE 587 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}

instance {-# OVERLAPPING #-}
         CanWriteField "depth" VkClearDepthStencilValue where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (0)
{-# LINE 593 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "stencil" VkClearDepthStencilValue where
        type FieldType "stencil" VkClearDepthStencilValue = Word32
        type FieldOptional "stencil" VkClearDepthStencilValue = 'False -- ' closing tick for hsc2hs
        type FieldOffset "stencil" VkClearDepthStencilValue =
             (4)
{-# LINE 600 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}
        type FieldIsArray "stencil" VkClearDepthStencilValue = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

        {-# INLINE fieldOffset #-}
        fieldOffset
          = (4)
{-# LINE 608 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}

instance {-# OVERLAPPING #-}
         CanReadField "stencil" VkClearDepthStencilValue where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (4))
{-# LINE 615 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}

        {-# INLINE readField #-}
        readField p
          = peekByteOff p (4)
{-# LINE 619 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}

instance {-# OVERLAPPING #-}
         CanWriteField "stencil" VkClearDepthStencilValue where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (4)
{-# LINE 625 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}

instance Show VkClearDepthStencilValue where
        showsPrec d x
          = showString "VkClearDepthStencilValue {" .
              showString "depth = " .
                showsPrec d (getField @"depth" x) .
                  showString ", " .
                    showString "stencil = " .
                      showsPrec d (getField @"stencil" x) . showChar '}'

-- | > typedef struct VkClearRect {
--   >     VkRect2D       rect;
--   >     uint32_t       baseArrayLayer;
--   >     uint32_t       layerCount;
--   > } VkClearRect;
--
--   <https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VkClearRect VkClearRect registry at www.khronos.org>
data VkClearRect = VkClearRect# Addr# ByteArray#

instance Eq VkClearRect where
        (VkClearRect# a _) == x@(VkClearRect# b _)
          = EQ == cmpBytes# (sizeOf x) a b

        {-# INLINE (==) #-}

instance Ord VkClearRect where
        (VkClearRect# a _) `compare` x@(VkClearRect# b _)
          = cmpBytes# (sizeOf x) a b

        {-# INLINE compare #-}

instance Storable VkClearRect where
        sizeOf ~_ = (24)
{-# LINE 658 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}

        {-# INLINE sizeOf #-}
        alignment ~_ = (4)
{-# LINE 661 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}

        {-# INLINE alignment #-}
        peek = peekVkData#

        {-# INLINE peek #-}
        poke = pokeVkData#

        {-# INLINE poke #-}

instance VulkanMarshalPrim VkClearRect where
        unsafeAddr (VkClearRect# a _) = a

        {-# INLINE unsafeAddr #-}
        unsafeByteArray (VkClearRect# _ b) = b

        {-# INLINE unsafeByteArray #-}
        unsafeFromByteArrayOffset off b
          = VkClearRect# (plusAddr# (byteArrayContents# b) off) b

        {-# INLINE unsafeFromByteArrayOffset #-}

instance VulkanMarshal VkClearRect where
        type StructFields VkClearRect =
             '["rect", "baseArrayLayer", "layerCount"] -- ' closing tick for hsc2hs
        type CUnionType VkClearRect = 'False -- ' closing tick for hsc2hs
        type ReturnedOnly VkClearRect = 'False -- ' closing tick for hsc2hs
        type StructExtends VkClearRect = '[] -- ' closing tick for hsc2hs

instance {-# OVERLAPPING #-} HasField "rect" VkClearRect where
        type FieldType "rect" VkClearRect = VkRect2D
        type FieldOptional "rect" VkClearRect = 'False -- ' closing tick for hsc2hs
        type FieldOffset "rect" VkClearRect =
             (0)
{-# LINE 694 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}
        type FieldIsArray "rect" VkClearRect = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

        {-# INLINE fieldOffset #-}
        fieldOffset = (0)
{-# LINE 701 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}

instance {-# OVERLAPPING #-} CanReadField "rect" VkClearRect where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (0))
{-# LINE 707 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}

        {-# INLINE readField #-}
        readField p = peekByteOff p (0)
{-# LINE 710 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}

instance {-# OVERLAPPING #-} CanWriteField "rect" VkClearRect where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (0)
{-# LINE 715 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}

instance {-# OVERLAPPING #-} HasField "baseArrayLayer" VkClearRect
         where
        type FieldType "baseArrayLayer" VkClearRect = Word32
        type FieldOptional "baseArrayLayer" VkClearRect = 'False -- ' closing tick for hsc2hs
        type FieldOffset "baseArrayLayer" VkClearRect =
             (16)
{-# LINE 722 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}
        type FieldIsArray "baseArrayLayer" VkClearRect = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

        {-# INLINE fieldOffset #-}
        fieldOffset = (16)
{-# LINE 729 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}

instance {-# OVERLAPPING #-}
         CanReadField "baseArrayLayer" VkClearRect where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (16))
{-# LINE 736 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}

        {-# INLINE readField #-}
        readField p
          = peekByteOff p (16)
{-# LINE 740 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}

instance {-# OVERLAPPING #-}
         CanWriteField "baseArrayLayer" VkClearRect where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (16)
{-# LINE 746 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}

instance {-# OVERLAPPING #-} HasField "layerCount" VkClearRect
         where
        type FieldType "layerCount" VkClearRect = Word32
        type FieldOptional "layerCount" VkClearRect = 'False -- ' closing tick for hsc2hs
        type FieldOffset "layerCount" VkClearRect =
             (20)
{-# LINE 753 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}
        type FieldIsArray "layerCount" VkClearRect = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

        {-# INLINE fieldOffset #-}
        fieldOffset = (20)
{-# LINE 760 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}

instance {-# OVERLAPPING #-} CanReadField "layerCount" VkClearRect
         where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (20))
{-# LINE 767 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}

        {-# INLINE readField #-}
        readField p
          = peekByteOff p (20)
{-# LINE 771 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}

instance {-# OVERLAPPING #-} CanWriteField "layerCount" VkClearRect
         where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (20)
{-# LINE 777 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}

instance Show VkClearRect where
        showsPrec d x
          = showString "VkClearRect {" .
              showString "rect = " .
                showsPrec d (getField @"rect" x) .
                  showString ", " .
                    showString "baseArrayLayer = " .
                      showsPrec d (getField @"baseArrayLayer" x) .
                        showString ", " .
                          showString "layerCount = " .
                            showsPrec d (getField @"layerCount" x) . showChar '}'

-- | // Union allowing specification of color or depth and stencil values. Actual value selected is based on attachment being cleared.
--
--   > typedef union VkClearValue {
--   >     VkClearColorValue      color;
--   >     VkClearDepthStencilValue depthStencil;
--   > } VkClearValue;
--
--   <https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VkClearValue VkClearValue registry at www.khronos.org>
data VkClearValue = VkClearValue# Addr# ByteArray#

instance Eq VkClearValue where
        (VkClearValue# a _) == x@(VkClearValue# b _)
          = EQ == cmpBytes# (sizeOf x) a b

        {-# INLINE (==) #-}

instance Ord VkClearValue where
        (VkClearValue# a _) `compare` x@(VkClearValue# b _)
          = cmpBytes# (sizeOf x) a b

        {-# INLINE compare #-}

instance Storable VkClearValue where
        sizeOf ~_ = (16)
{-# LINE 814 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}

        {-# INLINE sizeOf #-}
        alignment ~_ = (4)
{-# LINE 817 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}

        {-# INLINE alignment #-}
        peek = peekVkData#

        {-# INLINE peek #-}
        poke = pokeVkData#

        {-# INLINE poke #-}

instance VulkanMarshalPrim VkClearValue where
        unsafeAddr (VkClearValue# a _) = a

        {-# INLINE unsafeAddr #-}
        unsafeByteArray (VkClearValue# _ b) = b

        {-# INLINE unsafeByteArray #-}
        unsafeFromByteArrayOffset off b
          = VkClearValue# (plusAddr# (byteArrayContents# b) off) b

        {-# INLINE unsafeFromByteArrayOffset #-}

instance VulkanMarshal VkClearValue where
        type StructFields VkClearValue = '["color", "depthStencil"] -- ' closing tick for hsc2hs
        type CUnionType VkClearValue = 'True -- ' closing tick for hsc2hs
        type ReturnedOnly VkClearValue = 'False -- ' closing tick for hsc2hs
        type StructExtends VkClearValue = '[] -- ' closing tick for hsc2hs

instance {-# OVERLAPPING #-} HasField "color" VkClearValue where
        type FieldType "color" VkClearValue = VkClearColorValue
        type FieldOptional "color" VkClearValue = 'False -- ' closing tick for hsc2hs
        type FieldOffset "color" VkClearValue =
             (0)
{-# LINE 849 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}
        type FieldIsArray "color" VkClearValue = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

        {-# INLINE fieldOffset #-}
        fieldOffset = (0)
{-# LINE 856 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}

instance {-# OVERLAPPING #-} CanReadField "color" VkClearValue
         where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (0))
{-# LINE 863 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}

        {-# INLINE readField #-}
        readField p
          = peekByteOff p (0)
{-# LINE 867 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}

instance {-# OVERLAPPING #-} CanWriteField "color" VkClearValue
         where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (0)
{-# LINE 873 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}

instance {-# OVERLAPPING #-} HasField "depthStencil" VkClearValue
         where
        type FieldType "depthStencil" VkClearValue =
             VkClearDepthStencilValue
        type FieldOptional "depthStencil" VkClearValue = 'False -- ' closing tick for hsc2hs
        type FieldOffset "depthStencil" VkClearValue =
             (0)
{-# LINE 881 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}
        type FieldIsArray "depthStencil" VkClearValue = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

        {-# INLINE fieldOffset #-}
        fieldOffset = (0)
{-# LINE 888 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}

instance {-# OVERLAPPING #-}
         CanReadField "depthStencil" VkClearValue where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (0))
{-# LINE 895 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}

        {-# INLINE readField #-}
        readField p
          = peekByteOff p (0)
{-# LINE 899 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}

instance {-# OVERLAPPING #-}
         CanWriteField "depthStencil" VkClearValue where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (0)
{-# LINE 905 "src-gen/Graphics/Vulkan/Types/Struct/Clear.hsc" #-}

instance Show VkClearValue where
        showsPrec d x
          = showString "VkClearValue {" .
              showString "color = " .
                showsPrec d (getField @"color" x) .
                  showString ", " .
                    showString "depthStencil = " .
                      showsPrec d (getField @"depthStencil" x) . showChar '}'