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

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

{-# LANGUAGE DataKinds             #-}
{-# LANGUAGE FlexibleInstances     #-}
{-# LANGUAGE MagicHash             #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE Strict                #-}
{-# LANGUAGE TypeApplications      #-}
{-# LANGUAGE TypeFamilies          #-}
module Graphics.Vulkan.Types.Struct.Subpass
       (VkSubpassDependency(..), VkSubpassDescription(..),
        VkSubpassSampleLocationsEXT(..))
       where
import           Foreign.Storable                            (Storable (..))
import           GHC.Base                                    (Addr#, ByteArray#,
                                                              byteArrayContents#,
                                                              plusAddr#)
import           Graphics.Vulkan.Marshal
import           Graphics.Vulkan.Marshal.Internal
import           Graphics.Vulkan.Types.Enum.AccessFlags      (VkAccessFlags)
import           Graphics.Vulkan.Types.Enum.DependencyFlags  (VkDependencyFlags)
import           Graphics.Vulkan.Types.Enum.Pipeline         (VkPipelineBindPoint,
                                                              VkPipelineStageFlags)
import           Graphics.Vulkan.Types.Enum.Subpass          (VkSubpassDescriptionFlags)
import           Graphics.Vulkan.Types.Struct.Attachment     (VkAttachmentReference)
import           Graphics.Vulkan.Types.Struct.SampleLocation (VkSampleLocationsInfoEXT)
import           System.IO.Unsafe                            (unsafeDupablePerformIO)

-- | > typedef struct VkSubpassDependency {
--   >     uint32_t               srcSubpass;
--   >     uint32_t               dstSubpass;
--   >     VkPipelineStageFlags   srcStageMask;
--   >     VkPipelineStageFlags   dstStageMask;
--   >     VkAccessFlags          srcAccessMask;
--   >     VkAccessFlags          dstAccessMask;
--   >     VkDependencyFlags      dependencyFlags;
--   > } VkSubpassDependency;
--
--   <https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VkSubpassDependency VkSubpassDependency registry at www.khronos.org>
data VkSubpassDependency = VkSubpassDependency# Addr# ByteArray#

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

        {-# INLINE (==) #-}

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

        {-# INLINE compare #-}

instance Storable VkSubpassDependency where
        sizeOf ~_ = (28)
{-# LINE 56 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

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

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

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

        {-# INLINE poke #-}

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

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

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

        {-# INLINE unsafeFromByteArrayOffset #-}

instance VulkanMarshal VkSubpassDependency where
        type StructFields VkSubpassDependency =
             '["srcSubpass", "dstSubpass", "srcStageMask", "dstStageMask", -- ' closing tick for hsc2hs
               "srcAccessMask", "dstAccessMask", "dependencyFlags"]
        type CUnionType VkSubpassDependency = 'False -- ' closing tick for hsc2hs
        type ReturnedOnly VkSubpassDependency = 'False -- ' closing tick for hsc2hs
        type StructExtends VkSubpassDependency = '[] -- ' closing tick for hsc2hs

instance {-# OVERLAPPING #-}
         HasField "srcSubpass" VkSubpassDependency where
        type FieldType "srcSubpass" VkSubpassDependency = Word32
        type FieldOptional "srcSubpass" VkSubpassDependency = 'False -- ' closing tick for hsc2hs
        type FieldOffset "srcSubpass" VkSubpassDependency =
             (0)
{-# LINE 94 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}
        type FieldIsArray "srcSubpass" VkSubpassDependency = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "srcSubpass" VkSubpassDependency where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (0))
{-# LINE 108 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "srcSubpass" VkSubpassDependency where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (0)
{-# LINE 118 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "dstSubpass" VkSubpassDependency where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (4))
{-# LINE 139 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "dstSubpass" VkSubpassDependency where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (4)
{-# LINE 149 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "srcStageMask" VkSubpassDependency where
        type FieldType "srcStageMask" VkSubpassDependency =
             VkPipelineStageFlags
        type FieldOptional "srcStageMask" VkSubpassDependency = 'False -- ' closing tick for hsc2hs
        type FieldOffset "srcStageMask" VkSubpassDependency =
             (8)
{-# LINE 157 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}
        type FieldIsArray "srcStageMask" VkSubpassDependency = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "srcStageMask" VkSubpassDependency where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (8))
{-# LINE 172 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "srcStageMask" VkSubpassDependency where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (8)
{-# LINE 182 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "dstStageMask" VkSubpassDependency where
        type FieldType "dstStageMask" VkSubpassDependency =
             VkPipelineStageFlags
        type FieldOptional "dstStageMask" VkSubpassDependency = 'False -- ' closing tick for hsc2hs
        type FieldOffset "dstStageMask" VkSubpassDependency =
             (12)
{-# LINE 190 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}
        type FieldIsArray "dstStageMask" VkSubpassDependency = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

        {-# INLINE fieldOffset #-}
        fieldOffset
          = (12)
{-# LINE 198 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

instance {-# OVERLAPPING #-}
         CanReadField "dstStageMask" VkSubpassDependency where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (12))
{-# LINE 205 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

        {-# INLINE readField #-}
        readField p
          = peekByteOff p (12)
{-# LINE 209 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

instance {-# OVERLAPPING #-}
         CanWriteField "dstStageMask" VkSubpassDependency where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (12)
{-# LINE 215 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "srcAccessMask" VkSubpassDependency where
        type FieldType "srcAccessMask" VkSubpassDependency = VkAccessFlags
        type FieldOptional "srcAccessMask" VkSubpassDependency = 'True -- ' closing tick for hsc2hs
        type FieldOffset "srcAccessMask" VkSubpassDependency =
             (16)
{-# LINE 222 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}
        type FieldIsArray "srcAccessMask" VkSubpassDependency = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = True

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

instance {-# OVERLAPPING #-}
         CanReadField "srcAccessMask" VkSubpassDependency where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (16))
{-# LINE 237 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "srcAccessMask" VkSubpassDependency where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (16)
{-# LINE 247 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "dstAccessMask" VkSubpassDependency where
        type FieldType "dstAccessMask" VkSubpassDependency = VkAccessFlags
        type FieldOptional "dstAccessMask" VkSubpassDependency = 'True -- ' closing tick for hsc2hs
        type FieldOffset "dstAccessMask" VkSubpassDependency =
             (20)
{-# LINE 254 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}
        type FieldIsArray "dstAccessMask" VkSubpassDependency = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = True

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

instance {-# OVERLAPPING #-}
         CanReadField "dstAccessMask" VkSubpassDependency where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (20))
{-# LINE 269 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "dstAccessMask" VkSubpassDependency where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (20)
{-# LINE 279 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "dependencyFlags" VkSubpassDependency where
        type FieldType "dependencyFlags" VkSubpassDependency =
             VkDependencyFlags
        type FieldOptional "dependencyFlags" VkSubpassDependency = 'True -- ' closing tick for hsc2hs
        type FieldOffset "dependencyFlags" VkSubpassDependency =
             (24)
{-# LINE 287 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}
        type FieldIsArray "dependencyFlags" VkSubpassDependency = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = True

        {-# INLINE fieldOffset #-}
        fieldOffset
          = (24)
{-# LINE 295 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

instance {-# OVERLAPPING #-}
         CanReadField "dependencyFlags" VkSubpassDependency where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (24))
{-# LINE 302 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

        {-# INLINE readField #-}
        readField p
          = peekByteOff p (24)
{-# LINE 306 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

instance {-# OVERLAPPING #-}
         CanWriteField "dependencyFlags" VkSubpassDependency where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (24)
{-# LINE 312 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

instance Show VkSubpassDependency where
        showsPrec d x
          = showString "VkSubpassDependency {" .
              showString "srcSubpass = " .
                showsPrec d (getField @"srcSubpass" x) .
                  showString ", " .
                    showString "dstSubpass = " .
                      showsPrec d (getField @"dstSubpass" x) .
                        showString ", " .
                          showString "srcStageMask = " .
                            showsPrec d (getField @"srcStageMask" x) .
                              showString ", " .
                                showString "dstStageMask = " .
                                  showsPrec d (getField @"dstStageMask" x) .
                                    showString ", " .
                                      showString "srcAccessMask = " .
                                        showsPrec d (getField @"srcAccessMask" x) .
                                          showString ", " .
                                            showString "dstAccessMask = " .
                                              showsPrec d (getField @"dstAccessMask" x) .
                                                showString ", " .
                                                  showString "dependencyFlags = " .
                                                    showsPrec d (getField @"dependencyFlags" x) .
                                                      showChar '}'

-- | > typedef struct VkSubpassDescription {
--   >     VkSubpassDescriptionFlags flags;
--   >     VkPipelineBindPoint    pipelineBindPoint;
--   >     uint32_t               inputAttachmentCount;
--   >     const VkAttachmentReference* pInputAttachments;
--   >     uint32_t               colorAttachmentCount;
--   >     const VkAttachmentReference* pColorAttachments;
--   >     const VkAttachmentReference* pResolveAttachments;
--   >     const VkAttachmentReference* pDepthStencilAttachment;
--   >     uint32_t               preserveAttachmentCount;
--   >     const uint32_t* pPreserveAttachments;
--   > } VkSubpassDescription;
--
--   <https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VkSubpassDescription VkSubpassDescription registry at www.khronos.org>
data VkSubpassDescription = VkSubpassDescription# Addr# ByteArray#

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

        {-# INLINE (==) #-}

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

        {-# INLINE compare #-}

instance Storable VkSubpassDescription where
        sizeOf ~_ = (72)
{-# LINE 368 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

        {-# INLINE sizeOf #-}
        alignment ~_ = (8)
{-# LINE 371 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

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

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

        {-# INLINE poke #-}

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

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

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

        {-# INLINE unsafeFromByteArrayOffset #-}

instance VulkanMarshal VkSubpassDescription where
        type StructFields VkSubpassDescription =
             '["flags", "pipelineBindPoint", "inputAttachmentCount", -- ' closing tick for hsc2hs
               "pInputAttachments", "colorAttachmentCount", "pColorAttachments",
               "pResolveAttachments", "pDepthStencilAttachment",
               "preserveAttachmentCount", "pPreserveAttachments"]
        type CUnionType VkSubpassDescription = 'False -- ' closing tick for hsc2hs
        type ReturnedOnly VkSubpassDescription = 'False -- ' closing tick for hsc2hs
        type StructExtends VkSubpassDescription = '[] -- ' closing tick for hsc2hs

instance {-# OVERLAPPING #-} HasField "flags" VkSubpassDescription
         where
        type FieldType "flags" VkSubpassDescription =
             VkSubpassDescriptionFlags
        type FieldOptional "flags" VkSubpassDescription = 'True -- ' closing tick for hsc2hs
        type FieldOffset "flags" VkSubpassDescription =
             (0)
{-# LINE 409 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}
        type FieldIsArray "flags" VkSubpassDescription = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = True

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

instance {-# OVERLAPPING #-}
         CanReadField "flags" VkSubpassDescription where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (0))
{-# LINE 423 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "flags" VkSubpassDescription where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (0)
{-# LINE 433 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "pipelineBindPoint" VkSubpassDescription where
        type FieldType "pipelineBindPoint" VkSubpassDescription =
             VkPipelineBindPoint
        type FieldOptional "pipelineBindPoint" VkSubpassDescription =
             'False -- ' closing tick for hsc2hs
        type FieldOffset "pipelineBindPoint" VkSubpassDescription =
             (4)
{-# LINE 442 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}
        type FieldIsArray "pipelineBindPoint" VkSubpassDescription = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "pipelineBindPoint" VkSubpassDescription where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (4))
{-# LINE 457 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "pipelineBindPoint" VkSubpassDescription where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (4)
{-# LINE 467 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "inputAttachmentCount" VkSubpassDescription where
        type FieldType "inputAttachmentCount" VkSubpassDescription = Word32
        type FieldOptional "inputAttachmentCount" VkSubpassDescription =
             'True -- ' closing tick for hsc2hs
        type FieldOffset "inputAttachmentCount" VkSubpassDescription =
             (8)
{-# LINE 475 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}
        type FieldIsArray "inputAttachmentCount" VkSubpassDescription =
             'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = True

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

instance {-# OVERLAPPING #-}
         CanReadField "inputAttachmentCount" VkSubpassDescription where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (8))
{-# LINE 491 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "inputAttachmentCount" VkSubpassDescription where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (8)
{-# LINE 501 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "pInputAttachments" VkSubpassDescription where
        type FieldType "pInputAttachments" VkSubpassDescription =
             Ptr VkAttachmentReference
        type FieldOptional "pInputAttachments" VkSubpassDescription =
             'False -- ' closing tick for hsc2hs
        type FieldOffset "pInputAttachments" VkSubpassDescription =
             (16)
{-# LINE 510 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}
        type FieldIsArray "pInputAttachments" VkSubpassDescription = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "pInputAttachments" VkSubpassDescription where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (16))
{-# LINE 525 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "pInputAttachments" VkSubpassDescription where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (16)
{-# LINE 535 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "colorAttachmentCount" VkSubpassDescription where
        type FieldType "colorAttachmentCount" VkSubpassDescription = Word32
        type FieldOptional "colorAttachmentCount" VkSubpassDescription =
             'True -- ' closing tick for hsc2hs
        type FieldOffset "colorAttachmentCount" VkSubpassDescription =
             (24)
{-# LINE 543 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}
        type FieldIsArray "colorAttachmentCount" VkSubpassDescription =
             'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = True

        {-# INLINE fieldOffset #-}
        fieldOffset
          = (24)
{-# LINE 552 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

instance {-# OVERLAPPING #-}
         CanReadField "colorAttachmentCount" VkSubpassDescription where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (24))
{-# LINE 559 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

        {-# INLINE readField #-}
        readField p
          = peekByteOff p (24)
{-# LINE 563 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

instance {-# OVERLAPPING #-}
         CanWriteField "colorAttachmentCount" VkSubpassDescription where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (24)
{-# LINE 569 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "pColorAttachments" VkSubpassDescription where
        type FieldType "pColorAttachments" VkSubpassDescription =
             Ptr VkAttachmentReference
        type FieldOptional "pColorAttachments" VkSubpassDescription =
             'False -- ' closing tick for hsc2hs
        type FieldOffset "pColorAttachments" VkSubpassDescription =
             (32)
{-# LINE 578 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}
        type FieldIsArray "pColorAttachments" VkSubpassDescription = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

        {-# INLINE fieldOffset #-}
        fieldOffset
          = (32)
{-# LINE 586 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

instance {-# OVERLAPPING #-}
         CanReadField "pColorAttachments" VkSubpassDescription where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (32))
{-# LINE 593 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

        {-# INLINE readField #-}
        readField p
          = peekByteOff p (32)
{-# LINE 597 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

instance {-# OVERLAPPING #-}
         CanWriteField "pColorAttachments" VkSubpassDescription where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (32)
{-# LINE 603 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "pResolveAttachments" VkSubpassDescription where
        type FieldType "pResolveAttachments" VkSubpassDescription =
             Ptr VkAttachmentReference
        type FieldOptional "pResolveAttachments" VkSubpassDescription =
             'True -- ' closing tick for hsc2hs
        type FieldOffset "pResolveAttachments" VkSubpassDescription =
             (40)
{-# LINE 612 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}
        type FieldIsArray "pResolveAttachments" VkSubpassDescription =
             'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = True

        {-# INLINE fieldOffset #-}
        fieldOffset
          = (40)
{-# LINE 621 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

instance {-# OVERLAPPING #-}
         CanReadField "pResolveAttachments" VkSubpassDescription where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (40))
{-# LINE 628 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

        {-# INLINE readField #-}
        readField p
          = peekByteOff p (40)
{-# LINE 632 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

instance {-# OVERLAPPING #-}
         CanWriteField "pResolveAttachments" VkSubpassDescription where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (40)
{-# LINE 638 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "pDepthStencilAttachment" VkSubpassDescription where
        type FieldType "pDepthStencilAttachment" VkSubpassDescription =
             Ptr VkAttachmentReference
        type FieldOptional "pDepthStencilAttachment" VkSubpassDescription =
             'True -- ' closing tick for hsc2hs
        type FieldOffset "pDepthStencilAttachment" VkSubpassDescription =
             (48)
{-# LINE 647 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}
        type FieldIsArray "pDepthStencilAttachment" VkSubpassDescription =
             'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = True

        {-# INLINE fieldOffset #-}
        fieldOffset
          = (48)
{-# LINE 656 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

instance {-# OVERLAPPING #-}
         CanReadField "pDepthStencilAttachment" VkSubpassDescription where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (48))
{-# LINE 663 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

        {-# INLINE readField #-}
        readField p
          = peekByteOff p (48)
{-# LINE 667 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

instance {-# OVERLAPPING #-}
         CanWriteField "pDepthStencilAttachment" VkSubpassDescription where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (48)
{-# LINE 673 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "preserveAttachmentCount" VkSubpassDescription where
        type FieldType "preserveAttachmentCount" VkSubpassDescription =
             Word32
        type FieldOptional "preserveAttachmentCount" VkSubpassDescription =
             'True -- ' closing tick for hsc2hs
        type FieldOffset "preserveAttachmentCount" VkSubpassDescription =
             (56)
{-# LINE 682 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}
        type FieldIsArray "preserveAttachmentCount" VkSubpassDescription =
             'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = True

        {-# INLINE fieldOffset #-}
        fieldOffset
          = (56)
{-# LINE 691 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

instance {-# OVERLAPPING #-}
         CanReadField "preserveAttachmentCount" VkSubpassDescription where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (56))
{-# LINE 698 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

        {-# INLINE readField #-}
        readField p
          = peekByteOff p (56)
{-# LINE 702 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

instance {-# OVERLAPPING #-}
         CanWriteField "preserveAttachmentCount" VkSubpassDescription where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (56)
{-# LINE 708 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "pPreserveAttachments" VkSubpassDescription where
        type FieldType "pPreserveAttachments" VkSubpassDescription =
             Ptr Word32
        type FieldOptional "pPreserveAttachments" VkSubpassDescription =
             'False -- ' closing tick for hsc2hs
        type FieldOffset "pPreserveAttachments" VkSubpassDescription =
             (64)
{-# LINE 717 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}
        type FieldIsArray "pPreserveAttachments" VkSubpassDescription =
             'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

        {-# INLINE fieldOffset #-}
        fieldOffset
          = (64)
{-# LINE 726 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

instance {-# OVERLAPPING #-}
         CanReadField "pPreserveAttachments" VkSubpassDescription where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (64))
{-# LINE 733 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

        {-# INLINE readField #-}
        readField p
          = peekByteOff p (64)
{-# LINE 737 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

instance {-# OVERLAPPING #-}
         CanWriteField "pPreserveAttachments" VkSubpassDescription where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (64)
{-# LINE 743 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

instance Show VkSubpassDescription where
        showsPrec d x
          = showString "VkSubpassDescription {" .
              showString "flags = " .
                showsPrec d (getField @"flags" x) .
                  showString ", " .
                    showString "pipelineBindPoint = " .
                      showsPrec d (getField @"pipelineBindPoint" x) .
                        showString ", " .
                          showString "inputAttachmentCount = " .
                            showsPrec d (getField @"inputAttachmentCount" x) .
                              showString ", " .
                                showString "pInputAttachments = " .
                                  showsPrec d (getField @"pInputAttachments" x) .
                                    showString ", " .
                                      showString "colorAttachmentCount = " .
                                        showsPrec d (getField @"colorAttachmentCount" x) .
                                          showString ", " .
                                            showString "pColorAttachments = " .
                                              showsPrec d (getField @"pColorAttachments" x) .
                                                showString ", " .
                                                  showString "pResolveAttachments = " .
                                                    showsPrec d (getField @"pResolveAttachments" x)
                                                      .
                                                      showString ", " .
                                                        showString "pDepthStencilAttachment = " .
                                                          showsPrec d
                                                            (getField @"pDepthStencilAttachment" x)
                                                            .
                                                            showString ", " .
                                                              showString
                                                                "preserveAttachmentCount = "
                                                                .
                                                                showsPrec d
                                                                  (getField
                                                                     @"preserveAttachmentCount"
                                                                     x)
                                                                  .
                                                                  showString ", " .
                                                                    showString
                                                                      "pPreserveAttachments = "
                                                                      .
                                                                      showsPrec d
                                                                        (getField
                                                                           @"pPreserveAttachments"
                                                                           x)
                                                                        . showChar '}'

-- | > typedef struct VkSubpassSampleLocationsEXT {
--   >     uint32_t                         subpassIndex;
--   >     VkSampleLocationsInfoEXT         sampleLocationsInfo;
--   > } VkSubpassSampleLocationsEXT;
--
--   <https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VkSubpassSampleLocationsEXT VkSubpassSampleLocationsEXT registry at www.khronos.org>
data VkSubpassSampleLocationsEXT = VkSubpassSampleLocationsEXT# Addr#
                                                                ByteArray#

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

        {-# INLINE (==) #-}

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

        {-# INLINE compare #-}

instance Storable VkSubpassSampleLocationsEXT where
        sizeOf ~_ = (48)
{-# LINE 816 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

        {-# INLINE sizeOf #-}
        alignment ~_ = (8)
{-# LINE 819 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

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

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

        {-# INLINE poke #-}

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

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

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

        {-# INLINE unsafeFromByteArrayOffset #-}

instance VulkanMarshal VkSubpassSampleLocationsEXT where
        type StructFields VkSubpassSampleLocationsEXT =
             '["subpassIndex", "sampleLocationsInfo"] -- ' closing tick for hsc2hs
        type CUnionType VkSubpassSampleLocationsEXT = 'False -- ' closing tick for hsc2hs
        type ReturnedOnly VkSubpassSampleLocationsEXT = 'False -- ' closing tick for hsc2hs
        type StructExtends VkSubpassSampleLocationsEXT = '[] -- ' closing tick for hsc2hs

instance {-# OVERLAPPING #-}
         HasField "subpassIndex" VkSubpassSampleLocationsEXT where
        type FieldType "subpassIndex" VkSubpassSampleLocationsEXT = Word32
        type FieldOptional "subpassIndex" VkSubpassSampleLocationsEXT =
             'False -- ' closing tick for hsc2hs
        type FieldOffset "subpassIndex" VkSubpassSampleLocationsEXT =
             (0)
{-# LINE 856 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}
        type FieldIsArray "subpassIndex" VkSubpassSampleLocationsEXT =
             'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "subpassIndex" VkSubpassSampleLocationsEXT where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (0))
{-# LINE 872 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "subpassIndex" VkSubpassSampleLocationsEXT where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (0)
{-# LINE 882 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "sampleLocationsInfo" VkSubpassSampleLocationsEXT where
        type FieldType "sampleLocationsInfo" VkSubpassSampleLocationsEXT =
             VkSampleLocationsInfoEXT
        type FieldOptional "sampleLocationsInfo"
               VkSubpassSampleLocationsEXT
             = 'False -- ' closing tick for hsc2hs
        type FieldOffset "sampleLocationsInfo" VkSubpassSampleLocationsEXT
             =
             (8)
{-# LINE 893 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}
        type FieldIsArray "sampleLocationsInfo" VkSubpassSampleLocationsEXT
             = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "sampleLocationsInfo" VkSubpassSampleLocationsEXT
         where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (8))
{-# LINE 910 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "sampleLocationsInfo" VkSubpassSampleLocationsEXT
         where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (8)
{-# LINE 921 "src-gen/Graphics/Vulkan/Types/Struct/Subpass.hsc" #-}

instance Show VkSubpassSampleLocationsEXT where
        showsPrec d x
          = showString "VkSubpassSampleLocationsEXT {" .
              showString "subpassIndex = " .
                showsPrec d (getField @"subpassIndex" x) .
                  showString ", " .
                    showString "sampleLocationsInfo = " .
                      showsPrec d (getField @"sampleLocationsInfo" x) . showChar '}'