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

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

{-# LANGUAGE DataKinds             #-}
{-# LANGUAGE FlexibleInstances     #-}
{-# LANGUAGE MagicHash             #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE Strict                #-}
{-# LANGUAGE TypeApplications      #-}
{-# LANGUAGE TypeFamilies          #-}
module Graphics.Vulkan.Types.Struct.FramebufferCreateInfo
       (VkFramebufferCreateInfo(..)) 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.Bitmasks           (VkFramebufferCreateFlags)
import           Graphics.Vulkan.Types.Enum.StructureType (VkStructureType)
import           Graphics.Vulkan.Types.Handles            (VkImageView,
                                                           VkRenderPass)
import           System.IO.Unsafe                         (unsafeDupablePerformIO)

-- | > typedef struct VkFramebufferCreateInfo {
--   >     VkStructureType sType;
--   >     const void*            pNext;
--   >     VkFramebufferCreateFlags    flags;
--   >     VkRenderPass           renderPass;
--   >     uint32_t               attachmentCount;
--   >     const VkImageView*     pAttachments;
--   >     uint32_t               width;
--   >     uint32_t               height;
--   >     uint32_t               layers;
--   > } VkFramebufferCreateInfo;
--
--   <https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VkFramebufferCreateInfo VkFramebufferCreateInfo registry at www.khronos.org>
data VkFramebufferCreateInfo = VkFramebufferCreateInfo# Addr#
                                                        ByteArray#

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

        {-# INLINE (==) #-}

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

        {-# INLINE compare #-}

instance Storable VkFramebufferCreateInfo where
        sizeOf ~_ = (64)
{-# LINE 54 "src-gen/Graphics/Vulkan/Types/Struct/FramebufferCreateInfo.hsc" #-}

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

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

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

        {-# INLINE poke #-}

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

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

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

        {-# INLINE unsafeFromByteArrayOffset #-}

instance VulkanMarshal VkFramebufferCreateInfo where
        type StructFields VkFramebufferCreateInfo =
             '["sType", "pNext", "flags", "renderPass", "attachmentCount", -- ' closing tick for hsc2hs
               "pAttachments", "width", "height", "layers"]
        type CUnionType VkFramebufferCreateInfo = 'False -- ' closing tick for hsc2hs
        type ReturnedOnly VkFramebufferCreateInfo = 'False -- ' closing tick for hsc2hs
        type StructExtends VkFramebufferCreateInfo = '[] -- ' closing tick for hsc2hs

instance {-# OVERLAPPING #-}
         HasField "sType" VkFramebufferCreateInfo where
        type FieldType "sType" VkFramebufferCreateInfo = VkStructureType
        type FieldOptional "sType" VkFramebufferCreateInfo = 'False -- ' closing tick for hsc2hs
        type FieldOffset "sType" VkFramebufferCreateInfo =
             (0)
{-# LINE 92 "src-gen/Graphics/Vulkan/Types/Struct/FramebufferCreateInfo.hsc" #-}
        type FieldIsArray "sType" VkFramebufferCreateInfo = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "sType" VkFramebufferCreateInfo where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (0))
{-# LINE 106 "src-gen/Graphics/Vulkan/Types/Struct/FramebufferCreateInfo.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "sType" VkFramebufferCreateInfo where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (0)
{-# LINE 116 "src-gen/Graphics/Vulkan/Types/Struct/FramebufferCreateInfo.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "pNext" VkFramebufferCreateInfo where
        type FieldType "pNext" VkFramebufferCreateInfo = Ptr Void
        type FieldOptional "pNext" VkFramebufferCreateInfo = 'False -- ' closing tick for hsc2hs
        type FieldOffset "pNext" VkFramebufferCreateInfo =
             (8)
{-# LINE 123 "src-gen/Graphics/Vulkan/Types/Struct/FramebufferCreateInfo.hsc" #-}
        type FieldIsArray "pNext" VkFramebufferCreateInfo = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "pNext" VkFramebufferCreateInfo where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (8))
{-# LINE 137 "src-gen/Graphics/Vulkan/Types/Struct/FramebufferCreateInfo.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "pNext" VkFramebufferCreateInfo where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (8)
{-# LINE 147 "src-gen/Graphics/Vulkan/Types/Struct/FramebufferCreateInfo.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "flags" VkFramebufferCreateInfo where
        type FieldType "flags" VkFramebufferCreateInfo =
             VkFramebufferCreateFlags
        type FieldOptional "flags" VkFramebufferCreateInfo = 'True -- ' closing tick for hsc2hs
        type FieldOffset "flags" VkFramebufferCreateInfo =
             (16)
{-# LINE 155 "src-gen/Graphics/Vulkan/Types/Struct/FramebufferCreateInfo.hsc" #-}
        type FieldIsArray "flags" VkFramebufferCreateInfo = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = True

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

instance {-# OVERLAPPING #-}
         CanReadField "flags" VkFramebufferCreateInfo where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (16))
{-# LINE 169 "src-gen/Graphics/Vulkan/Types/Struct/FramebufferCreateInfo.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "flags" VkFramebufferCreateInfo where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (16)
{-# LINE 179 "src-gen/Graphics/Vulkan/Types/Struct/FramebufferCreateInfo.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "renderPass" VkFramebufferCreateInfo where
        type FieldType "renderPass" VkFramebufferCreateInfo = VkRenderPass
        type FieldOptional "renderPass" VkFramebufferCreateInfo = 'False -- ' closing tick for hsc2hs
        type FieldOffset "renderPass" VkFramebufferCreateInfo =
             (24)
{-# LINE 186 "src-gen/Graphics/Vulkan/Types/Struct/FramebufferCreateInfo.hsc" #-}
        type FieldIsArray "renderPass" VkFramebufferCreateInfo = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "renderPass" VkFramebufferCreateInfo where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (24))
{-# LINE 201 "src-gen/Graphics/Vulkan/Types/Struct/FramebufferCreateInfo.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "renderPass" VkFramebufferCreateInfo where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (24)
{-# LINE 211 "src-gen/Graphics/Vulkan/Types/Struct/FramebufferCreateInfo.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "attachmentCount" VkFramebufferCreateInfo where
        type FieldType "attachmentCount" VkFramebufferCreateInfo = Word32
        type FieldOptional "attachmentCount" VkFramebufferCreateInfo =
             'True -- ' closing tick for hsc2hs
        type FieldOffset "attachmentCount" VkFramebufferCreateInfo =
             (32)
{-# LINE 219 "src-gen/Graphics/Vulkan/Types/Struct/FramebufferCreateInfo.hsc" #-}
        type FieldIsArray "attachmentCount" VkFramebufferCreateInfo =
             'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = True

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

instance {-# OVERLAPPING #-}
         CanReadField "attachmentCount" VkFramebufferCreateInfo where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (32))
{-# LINE 235 "src-gen/Graphics/Vulkan/Types/Struct/FramebufferCreateInfo.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "attachmentCount" VkFramebufferCreateInfo where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (32)
{-# LINE 245 "src-gen/Graphics/Vulkan/Types/Struct/FramebufferCreateInfo.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "pAttachments" VkFramebufferCreateInfo where
        type FieldType "pAttachments" VkFramebufferCreateInfo =
             Ptr VkImageView
        type FieldOptional "pAttachments" VkFramebufferCreateInfo = 'False -- ' closing tick for hsc2hs
        type FieldOffset "pAttachments" VkFramebufferCreateInfo =
             (40)
{-# LINE 253 "src-gen/Graphics/Vulkan/Types/Struct/FramebufferCreateInfo.hsc" #-}
        type FieldIsArray "pAttachments" VkFramebufferCreateInfo = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "pAttachments" VkFramebufferCreateInfo where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (40))
{-# LINE 268 "src-gen/Graphics/Vulkan/Types/Struct/FramebufferCreateInfo.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "pAttachments" VkFramebufferCreateInfo where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (40)
{-# LINE 278 "src-gen/Graphics/Vulkan/Types/Struct/FramebufferCreateInfo.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "width" VkFramebufferCreateInfo where
        type FieldType "width" VkFramebufferCreateInfo = Word32
        type FieldOptional "width" VkFramebufferCreateInfo = 'False -- ' closing tick for hsc2hs
        type FieldOffset "width" VkFramebufferCreateInfo =
             (48)
{-# LINE 285 "src-gen/Graphics/Vulkan/Types/Struct/FramebufferCreateInfo.hsc" #-}
        type FieldIsArray "width" VkFramebufferCreateInfo = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "width" VkFramebufferCreateInfo where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (48))
{-# LINE 299 "src-gen/Graphics/Vulkan/Types/Struct/FramebufferCreateInfo.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "width" VkFramebufferCreateInfo where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (48)
{-# LINE 309 "src-gen/Graphics/Vulkan/Types/Struct/FramebufferCreateInfo.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "height" VkFramebufferCreateInfo where
        type FieldType "height" VkFramebufferCreateInfo = Word32
        type FieldOptional "height" VkFramebufferCreateInfo = 'False -- ' closing tick for hsc2hs
        type FieldOffset "height" VkFramebufferCreateInfo =
             (52)
{-# LINE 316 "src-gen/Graphics/Vulkan/Types/Struct/FramebufferCreateInfo.hsc" #-}
        type FieldIsArray "height" VkFramebufferCreateInfo = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

        {-# INLINE fieldOffset #-}
        fieldOffset = (52)
{-# LINE 323 "src-gen/Graphics/Vulkan/Types/Struct/FramebufferCreateInfo.hsc" #-}

instance {-# OVERLAPPING #-}
         CanReadField "height" VkFramebufferCreateInfo where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (52))
{-# LINE 330 "src-gen/Graphics/Vulkan/Types/Struct/FramebufferCreateInfo.hsc" #-}

        {-# INLINE readField #-}
        readField p
          = peekByteOff p (52)
{-# LINE 334 "src-gen/Graphics/Vulkan/Types/Struct/FramebufferCreateInfo.hsc" #-}

instance {-# OVERLAPPING #-}
         CanWriteField "height" VkFramebufferCreateInfo where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (52)
{-# LINE 340 "src-gen/Graphics/Vulkan/Types/Struct/FramebufferCreateInfo.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "layers" VkFramebufferCreateInfo where
        type FieldType "layers" VkFramebufferCreateInfo = Word32
        type FieldOptional "layers" VkFramebufferCreateInfo = 'False -- ' closing tick for hsc2hs
        type FieldOffset "layers" VkFramebufferCreateInfo =
             (56)
{-# LINE 347 "src-gen/Graphics/Vulkan/Types/Struct/FramebufferCreateInfo.hsc" #-}
        type FieldIsArray "layers" VkFramebufferCreateInfo = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "layers" VkFramebufferCreateInfo where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (56))
{-# LINE 361 "src-gen/Graphics/Vulkan/Types/Struct/FramebufferCreateInfo.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "layers" VkFramebufferCreateInfo where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (56)
{-# LINE 371 "src-gen/Graphics/Vulkan/Types/Struct/FramebufferCreateInfo.hsc" #-}

instance Show VkFramebufferCreateInfo where
        showsPrec d x
          = showString "VkFramebufferCreateInfo {" .
              showString "sType = " .
                showsPrec d (getField @"sType" x) .
                  showString ", " .
                    showString "pNext = " .
                      showsPrec d (getField @"pNext" x) .
                        showString ", " .
                          showString "flags = " .
                            showsPrec d (getField @"flags" x) .
                              showString ", " .
                                showString "renderPass = " .
                                  showsPrec d (getField @"renderPass" x) .
                                    showString ", " .
                                      showString "attachmentCount = " .
                                        showsPrec d (getField @"attachmentCount" x) .
                                          showString ", " .
                                            showString "pAttachments = " .
                                              showsPrec d (getField @"pAttachments" x) .
                                                showString ", " .
                                                  showString "width = " .
                                                    showsPrec d (getField @"width" x) .
                                                      showString ", " .
                                                        showString "height = " .
                                                          showsPrec d (getField @"height" x) .
                                                            showString ", " .
                                                              showString "layers = " .
                                                                showsPrec d (getField @"layers" x) .
                                                                  showChar '}'