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

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

{-# LANGUAGE DataKinds             #-}
{-# LANGUAGE FlexibleInstances     #-}
{-# LANGUAGE MagicHash             #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE Strict                #-}
{-# LANGUAGE TypeApplications      #-}
{-# LANGUAGE TypeFamilies          #-}
module Graphics.Vulkan.Types.Struct.Sparse
       (VkSparseBufferMemoryBindInfo(..),
        VkSparseImageFormatProperties(..),
        VkSparseImageFormatProperties2(..),
        VkSparseImageFormatProperties2KHR, VkSparseImageMemoryBind(..),
        VkSparseImageMemoryBindInfo(..),
        VkSparseImageMemoryRequirements(..),
        VkSparseImageMemoryRequirements2(..),
        VkSparseImageMemoryRequirements2KHR,
        VkSparseImageOpaqueMemoryBindInfo(..), VkSparseMemoryBind(..))
       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.BaseTypes          (VkDeviceSize)
import           Graphics.Vulkan.Types.Enum.Image         (VkImageAspectFlags)
import           Graphics.Vulkan.Types.Enum.Sparse        (VkSparseImageFormatFlags,
                                                           VkSparseMemoryBindFlags)
import           Graphics.Vulkan.Types.Enum.StructureType (VkStructureType)
import           Graphics.Vulkan.Types.Handles            (VkBuffer,
                                                           VkDeviceMemory,
                                                           VkImage)
import           Graphics.Vulkan.Types.Struct.Extent      (VkExtent3D)
import           Graphics.Vulkan.Types.Struct.Image       (VkImageSubresource)
import           Graphics.Vulkan.Types.Struct.Offset      (VkOffset3D)
import           System.IO.Unsafe                         (unsafeDupablePerformIO)

-- | > typedef struct VkSparseBufferMemoryBindInfo {
--   >     VkBuffer buffer;
--   >     uint32_t               bindCount;
--   >     const VkSparseMemoryBind* pBinds;
--   > } VkSparseBufferMemoryBindInfo;
--
--   <https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VkSparseBufferMemoryBindInfo VkSparseBufferMemoryBindInfo registry at www.khronos.org>
data VkSparseBufferMemoryBindInfo = VkSparseBufferMemoryBindInfo# Addr#
                                                                  ByteArray#

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

        {-# INLINE (==) #-}

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

        {-# INLINE compare #-}

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

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

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

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

        {-# INLINE poke #-}

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

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

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

        {-# INLINE unsafeFromByteArrayOffset #-}

instance VulkanMarshal VkSparseBufferMemoryBindInfo where
        type StructFields VkSparseBufferMemoryBindInfo =
             '["buffer", "bindCount", "pBinds"] -- ' closing tick for hsc2hs
        type CUnionType VkSparseBufferMemoryBindInfo = 'False -- ' closing tick for hsc2hs
        type ReturnedOnly VkSparseBufferMemoryBindInfo = 'False -- ' closing tick for hsc2hs
        type StructExtends VkSparseBufferMemoryBindInfo = '[] -- ' closing tick for hsc2hs

instance {-# OVERLAPPING #-}
         HasField "buffer" VkSparseBufferMemoryBindInfo where
        type FieldType "buffer" VkSparseBufferMemoryBindInfo = VkBuffer
        type FieldOptional "buffer" VkSparseBufferMemoryBindInfo = 'False -- ' closing tick for hsc2hs
        type FieldOffset "buffer" VkSparseBufferMemoryBindInfo =
             (0)
{-# LINE 105 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}
        type FieldIsArray "buffer" VkSparseBufferMemoryBindInfo = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "buffer" VkSparseBufferMemoryBindInfo where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (0))
{-# LINE 120 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "buffer" VkSparseBufferMemoryBindInfo where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (0)
{-# LINE 130 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "bindCount" VkSparseBufferMemoryBindInfo where
        type FieldType "bindCount" VkSparseBufferMemoryBindInfo = Word32
        type FieldOptional "bindCount" VkSparseBufferMemoryBindInfo =
             'False -- ' closing tick for hsc2hs
        type FieldOffset "bindCount" VkSparseBufferMemoryBindInfo =
             (8)
{-# LINE 138 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}
        type FieldIsArray "bindCount" VkSparseBufferMemoryBindInfo = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "bindCount" VkSparseBufferMemoryBindInfo where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (8))
{-# LINE 153 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "bindCount" VkSparseBufferMemoryBindInfo where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (8)
{-# LINE 163 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "pBinds" VkSparseBufferMemoryBindInfo where
        type FieldType "pBinds" VkSparseBufferMemoryBindInfo =
             Ptr VkSparseMemoryBind
        type FieldOptional "pBinds" VkSparseBufferMemoryBindInfo = 'False -- ' closing tick for hsc2hs
        type FieldOffset "pBinds" VkSparseBufferMemoryBindInfo =
             (16)
{-# LINE 171 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}
        type FieldIsArray "pBinds" VkSparseBufferMemoryBindInfo = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "pBinds" VkSparseBufferMemoryBindInfo where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (16))
{-# LINE 186 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "pBinds" VkSparseBufferMemoryBindInfo where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (16)
{-# LINE 196 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

instance Show VkSparseBufferMemoryBindInfo where
        showsPrec d x
          = showString "VkSparseBufferMemoryBindInfo {" .
              showString "buffer = " .
                showsPrec d (getField @"buffer" x) .
                  showString ", " .
                    showString "bindCount = " .
                      showsPrec d (getField @"bindCount" x) .
                        showString ", " .
                          showString "pBinds = " .
                            showsPrec d (getField @"pBinds" x) . showChar '}'

-- | > typedef struct VkSparseImageFormatProperties {
--   >     VkImageAspectFlags     aspectMask;
--   >     VkExtent3D             imageGranularity;
--   >     VkSparseImageFormatFlags flags;
--   > } VkSparseImageFormatProperties;
--
--   <https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VkSparseImageFormatProperties VkSparseImageFormatProperties registry at www.khronos.org>
data VkSparseImageFormatProperties = VkSparseImageFormatProperties# Addr#
                                                                    ByteArray#

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

        {-# INLINE (==) #-}

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

        {-# INLINE compare #-}

instance Storable VkSparseImageFormatProperties where
        sizeOf ~_ = (20)
{-# LINE 234 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

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

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

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

        {-# INLINE poke #-}

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

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

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

        {-# INLINE unsafeFromByteArrayOffset #-}

instance VulkanMarshal VkSparseImageFormatProperties where
        type StructFields VkSparseImageFormatProperties =
             '["aspectMask", "imageGranularity", "flags"] -- ' closing tick for hsc2hs
        type CUnionType VkSparseImageFormatProperties = 'False -- ' closing tick for hsc2hs
        type ReturnedOnly VkSparseImageFormatProperties = 'True -- ' closing tick for hsc2hs
        type StructExtends VkSparseImageFormatProperties = '[] -- ' closing tick for hsc2hs

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

        {-# INLINE fieldOptional #-}
        fieldOptional = True

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

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

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

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

instance {-# OVERLAPPING #-}
         HasField "imageGranularity" VkSparseImageFormatProperties where
        type FieldType "imageGranularity" VkSparseImageFormatProperties =
             VkExtent3D
        type FieldOptional "imageGranularity" VkSparseImageFormatProperties
             = 'False -- ' closing tick for hsc2hs
        type FieldOffset "imageGranularity" VkSparseImageFormatProperties =
             (4)
{-# LINE 311 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}
        type FieldIsArray "imageGranularity" VkSparseImageFormatProperties
             = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "imageGranularity" VkSparseImageFormatProperties where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (4))
{-# LINE 327 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "imageGranularity" VkSparseImageFormatProperties
         where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (4)
{-# LINE 338 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

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

        {-# INLINE fieldOptional #-}
        fieldOptional = True

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

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

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

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

instance Show VkSparseImageFormatProperties where
        showsPrec d x
          = showString "VkSparseImageFormatProperties {" .
              showString "aspectMask = " .
                showsPrec d (getField @"aspectMask" x) .
                  showString ", " .
                    showString "imageGranularity = " .
                      showsPrec d (getField @"imageGranularity" x) .
                        showString ", " .
                          showString "flags = " .
                            showsPrec d (getField @"flags" x) . showChar '}'

-- | > typedef struct VkSparseImageFormatProperties2 {
--   >     VkStructureType sType;
--   >     void*                            pNext;
--   >     VkSparseImageFormatProperties    properties;
--   > } VkSparseImageFormatProperties2;
--
--   <https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VkSparseImageFormatProperties2 VkSparseImageFormatProperties2 registry at www.khronos.org>
data VkSparseImageFormatProperties2 = VkSparseImageFormatProperties2# Addr#
                                                                      ByteArray#

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

        {-# INLINE (==) #-}

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

        {-# INLINE compare #-}

instance Storable VkSparseImageFormatProperties2 where
        sizeOf ~_ = (40)
{-# LINE 409 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

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

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

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

        {-# INLINE poke #-}

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

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

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

        {-# INLINE unsafeFromByteArrayOffset #-}

instance VulkanMarshal VkSparseImageFormatProperties2 where
        type StructFields VkSparseImageFormatProperties2 =
             '["sType", "pNext", "properties"] -- ' closing tick for hsc2hs
        type CUnionType VkSparseImageFormatProperties2 = 'False -- ' closing tick for hsc2hs
        type ReturnedOnly VkSparseImageFormatProperties2 = 'True -- ' closing tick for hsc2hs
        type StructExtends VkSparseImageFormatProperties2 = '[] -- ' closing tick for hsc2hs

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

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

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

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

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

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

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

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

instance {-# OVERLAPPING #-}
         HasField "properties" VkSparseImageFormatProperties2 where
        type FieldType "properties" VkSparseImageFormatProperties2 =
             VkSparseImageFormatProperties
        type FieldOptional "properties" VkSparseImageFormatProperties2 =
             'False -- ' closing tick for hsc2hs
        type FieldOffset "properties" VkSparseImageFormatProperties2 =
             (16)
{-# LINE 516 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}
        type FieldIsArray "properties" VkSparseImageFormatProperties2 =
             'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "properties" VkSparseImageFormatProperties2 where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (16))
{-# LINE 532 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "properties" VkSparseImageFormatProperties2 where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (16)
{-# LINE 542 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

instance Show VkSparseImageFormatProperties2 where
        showsPrec d x
          = showString "VkSparseImageFormatProperties2 {" .
              showString "sType = " .
                showsPrec d (getField @"sType" x) .
                  showString ", " .
                    showString "pNext = " .
                      showsPrec d (getField @"pNext" x) .
                        showString ", " .
                          showString "properties = " .
                            showsPrec d (getField @"properties" x) . showChar '}'

-- | Alias for `VkSparseImageFormatProperties2`
type VkSparseImageFormatProperties2KHR =
     VkSparseImageFormatProperties2

-- | > typedef struct VkSparseImageMemoryBind {
--   >     VkImageSubresource     subresource;
--   >     VkOffset3D             offset;
--   >     VkExtent3D             extent;
--   >     VkDeviceMemory         memory;
--   >     VkDeviceSize           memoryOffset;
--   >     VkSparseMemoryBindFlagsflags;
--   > } VkSparseImageMemoryBind;
--
--   <https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VkSparseImageMemoryBind VkSparseImageMemoryBind registry at www.khronos.org>
data VkSparseImageMemoryBind = VkSparseImageMemoryBind# Addr#
                                                        ByteArray#

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

        {-# INLINE (==) #-}

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

        {-# INLINE compare #-}

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

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

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

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

        {-# INLINE poke #-}

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

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

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

        {-# INLINE unsafeFromByteArrayOffset #-}

instance VulkanMarshal VkSparseImageMemoryBind where
        type StructFields VkSparseImageMemoryBind =
             '["subresource", "offset", "extent", "memory", "memoryOffset", -- ' closing tick for hsc2hs
               "flags"]
        type CUnionType VkSparseImageMemoryBind = 'False -- ' closing tick for hsc2hs
        type ReturnedOnly VkSparseImageMemoryBind = 'False -- ' closing tick for hsc2hs
        type StructExtends VkSparseImageMemoryBind = '[] -- ' closing tick for hsc2hs

instance {-# OVERLAPPING #-}
         HasField "subresource" VkSparseImageMemoryBind where
        type FieldType "subresource" VkSparseImageMemoryBind =
             VkImageSubresource
        type FieldOptional "subresource" VkSparseImageMemoryBind = 'False -- ' closing tick for hsc2hs
        type FieldOffset "subresource" VkSparseImageMemoryBind =
             (0)
{-# LINE 625 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}
        type FieldIsArray "subresource" VkSparseImageMemoryBind = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "subresource" VkSparseImageMemoryBind where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (0))
{-# LINE 640 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "subresource" VkSparseImageMemoryBind where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (0)
{-# LINE 650 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "offset" VkSparseImageMemoryBind where
        type FieldType "offset" VkSparseImageMemoryBind = VkOffset3D
        type FieldOptional "offset" VkSparseImageMemoryBind = 'False -- ' closing tick for hsc2hs
        type FieldOffset "offset" VkSparseImageMemoryBind =
             (12)
{-# LINE 657 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}
        type FieldIsArray "offset" VkSparseImageMemoryBind = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "offset" VkSparseImageMemoryBind where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (12))
{-# LINE 671 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "offset" VkSparseImageMemoryBind where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (12)
{-# LINE 681 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "extent" VkSparseImageMemoryBind where
        type FieldType "extent" VkSparseImageMemoryBind = VkExtent3D
        type FieldOptional "extent" VkSparseImageMemoryBind = 'False -- ' closing tick for hsc2hs
        type FieldOffset "extent" VkSparseImageMemoryBind =
             (24)
{-# LINE 688 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}
        type FieldIsArray "extent" VkSparseImageMemoryBind = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "extent" VkSparseImageMemoryBind where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (24))
{-# LINE 702 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "extent" VkSparseImageMemoryBind where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (24)
{-# LINE 712 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "memory" VkSparseImageMemoryBind where
        type FieldType "memory" VkSparseImageMemoryBind = VkDeviceMemory
        type FieldOptional "memory" VkSparseImageMemoryBind = 'True -- ' closing tick for hsc2hs
        type FieldOffset "memory" VkSparseImageMemoryBind =
             (40)
{-# LINE 719 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}
        type FieldIsArray "memory" VkSparseImageMemoryBind = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = True

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

instance {-# OVERLAPPING #-}
         CanReadField "memory" VkSparseImageMemoryBind where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (40))
{-# LINE 733 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "memory" VkSparseImageMemoryBind where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (40)
{-# LINE 743 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "memoryOffset" VkSparseImageMemoryBind where
        type FieldType "memoryOffset" VkSparseImageMemoryBind =
             VkDeviceSize
        type FieldOptional "memoryOffset" VkSparseImageMemoryBind = 'False -- ' closing tick for hsc2hs
        type FieldOffset "memoryOffset" VkSparseImageMemoryBind =
             (48)
{-# LINE 751 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}
        type FieldIsArray "memoryOffset" VkSparseImageMemoryBind = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "memoryOffset" VkSparseImageMemoryBind where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (48))
{-# LINE 766 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "memoryOffset" VkSparseImageMemoryBind where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (48)
{-# LINE 776 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "flags" VkSparseImageMemoryBind where
        type FieldType "flags" VkSparseImageMemoryBind =
             VkSparseMemoryBindFlags
        type FieldOptional "flags" VkSparseImageMemoryBind = 'True -- ' closing tick for hsc2hs
        type FieldOffset "flags" VkSparseImageMemoryBind =
             (56)
{-# LINE 784 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}
        type FieldIsArray "flags" VkSparseImageMemoryBind = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = True

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

instance {-# OVERLAPPING #-}
         CanReadField "flags" VkSparseImageMemoryBind where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (56))
{-# LINE 798 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "flags" VkSparseImageMemoryBind where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (56)
{-# LINE 808 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

instance Show VkSparseImageMemoryBind where
        showsPrec d x
          = showString "VkSparseImageMemoryBind {" .
              showString "subresource = " .
                showsPrec d (getField @"subresource" x) .
                  showString ", " .
                    showString "offset = " .
                      showsPrec d (getField @"offset" x) .
                        showString ", " .
                          showString "extent = " .
                            showsPrec d (getField @"extent" x) .
                              showString ", " .
                                showString "memory = " .
                                  showsPrec d (getField @"memory" x) .
                                    showString ", " .
                                      showString "memoryOffset = " .
                                        showsPrec d (getField @"memoryOffset" x) .
                                          showString ", " .
                                            showString "flags = " .
                                              showsPrec d (getField @"flags" x) . showChar '}'

-- | > typedef struct VkSparseImageMemoryBindInfo {
--   >     VkImage image;
--   >     uint32_t               bindCount;
--   >     const VkSparseImageMemoryBind* pBinds;
--   > } VkSparseImageMemoryBindInfo;
--
--   <https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VkSparseImageMemoryBindInfo VkSparseImageMemoryBindInfo registry at www.khronos.org>
data VkSparseImageMemoryBindInfo = VkSparseImageMemoryBindInfo# Addr#
                                                                ByteArray#

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

        {-# INLINE (==) #-}

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

        {-# INLINE compare #-}

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

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

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

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

        {-# INLINE poke #-}

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

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

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

        {-# INLINE unsafeFromByteArrayOffset #-}

instance VulkanMarshal VkSparseImageMemoryBindInfo where
        type StructFields VkSparseImageMemoryBindInfo =
             '["image", "bindCount", "pBinds"] -- ' closing tick for hsc2hs
        type CUnionType VkSparseImageMemoryBindInfo = 'False -- ' closing tick for hsc2hs
        type ReturnedOnly VkSparseImageMemoryBindInfo = 'False -- ' closing tick for hsc2hs
        type StructExtends VkSparseImageMemoryBindInfo = '[] -- ' closing tick for hsc2hs

instance {-# OVERLAPPING #-}
         HasField "image" VkSparseImageMemoryBindInfo where
        type FieldType "image" VkSparseImageMemoryBindInfo = VkImage
        type FieldOptional "image" VkSparseImageMemoryBindInfo = 'False -- ' closing tick for hsc2hs
        type FieldOffset "image" VkSparseImageMemoryBindInfo =
             (0)
{-# LINE 894 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}
        type FieldIsArray "image" VkSparseImageMemoryBindInfo = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "image" VkSparseImageMemoryBindInfo where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (0))
{-# LINE 909 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "image" VkSparseImageMemoryBindInfo where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (0)
{-# LINE 919 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "bindCount" VkSparseImageMemoryBindInfo where
        type FieldType "bindCount" VkSparseImageMemoryBindInfo = Word32
        type FieldOptional "bindCount" VkSparseImageMemoryBindInfo = 'False -- ' closing tick for hsc2hs
        type FieldOffset "bindCount" VkSparseImageMemoryBindInfo =
             (8)
{-# LINE 926 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}
        type FieldIsArray "bindCount" VkSparseImageMemoryBindInfo = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "bindCount" VkSparseImageMemoryBindInfo where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (8))
{-# LINE 941 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "bindCount" VkSparseImageMemoryBindInfo where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (8)
{-# LINE 951 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "pBinds" VkSparseImageMemoryBindInfo where
        type FieldType "pBinds" VkSparseImageMemoryBindInfo =
             Ptr VkSparseImageMemoryBind
        type FieldOptional "pBinds" VkSparseImageMemoryBindInfo = 'False -- ' closing tick for hsc2hs
        type FieldOffset "pBinds" VkSparseImageMemoryBindInfo =
             (16)
{-# LINE 959 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}
        type FieldIsArray "pBinds" VkSparseImageMemoryBindInfo = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "pBinds" VkSparseImageMemoryBindInfo where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (16))
{-# LINE 974 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "pBinds" VkSparseImageMemoryBindInfo where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (16)
{-# LINE 984 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

instance Show VkSparseImageMemoryBindInfo where
        showsPrec d x
          = showString "VkSparseImageMemoryBindInfo {" .
              showString "image = " .
                showsPrec d (getField @"image" x) .
                  showString ", " .
                    showString "bindCount = " .
                      showsPrec d (getField @"bindCount" x) .
                        showString ", " .
                          showString "pBinds = " .
                            showsPrec d (getField @"pBinds" x) . showChar '}'

-- | > typedef struct VkSparseImageMemoryRequirements {
--   >     VkSparseImageFormatProperties formatProperties;
--   >     uint32_t               imageMipTailFirstLod;
--   >     VkDeviceSize           imageMipTailSize;
--   >     VkDeviceSize           imageMipTailOffset;
--   >     VkDeviceSize           imageMipTailStride;
--   > } VkSparseImageMemoryRequirements;
--
--   <https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VkSparseImageMemoryRequirements VkSparseImageMemoryRequirements registry at www.khronos.org>
data VkSparseImageMemoryRequirements = VkSparseImageMemoryRequirements# Addr#
                                                                        ByteArray#

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

        {-# INLINE (==) #-}

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

        {-# INLINE compare #-}

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

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

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

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

        {-# INLINE poke #-}

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

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

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

        {-# INLINE unsafeFromByteArrayOffset #-}

instance VulkanMarshal VkSparseImageMemoryRequirements where
        type StructFields VkSparseImageMemoryRequirements =
             '["formatProperties", "imageMipTailFirstLod", "imageMipTailSize", -- ' closing tick for hsc2hs
               "imageMipTailOffset", "imageMipTailStride"]
        type CUnionType VkSparseImageMemoryRequirements = 'False -- ' closing tick for hsc2hs
        type ReturnedOnly VkSparseImageMemoryRequirements = 'True -- ' closing tick for hsc2hs
        type StructExtends VkSparseImageMemoryRequirements = '[] -- ' closing tick for hsc2hs

instance {-# OVERLAPPING #-}
         HasField "formatProperties" VkSparseImageMemoryRequirements where
        type FieldType "formatProperties" VkSparseImageMemoryRequirements =
             VkSparseImageFormatProperties
        type FieldOptional "formatProperties"
               VkSparseImageMemoryRequirements
             = 'False -- ' closing tick for hsc2hs
        type FieldOffset "formatProperties" VkSparseImageMemoryRequirements
             =
             (0)
{-# LINE 1069 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}
        type FieldIsArray "formatProperties"
               VkSparseImageMemoryRequirements
             = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "formatProperties" VkSparseImageMemoryRequirements
         where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (0))
{-# LINE 1087 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "formatProperties" VkSparseImageMemoryRequirements
         where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (0)
{-# LINE 1098 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "imageMipTailFirstLod" VkSparseImageMemoryRequirements
         where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (20))
{-# LINE 1130 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "imageMipTailFirstLod"
           VkSparseImageMemoryRequirements
         where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (20)
{-# LINE 1142 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "imageMipTailSize" VkSparseImageMemoryRequirements where
        type FieldType "imageMipTailSize" VkSparseImageMemoryRequirements =
             VkDeviceSize
        type FieldOptional "imageMipTailSize"
               VkSparseImageMemoryRequirements
             = 'False -- ' closing tick for hsc2hs
        type FieldOffset "imageMipTailSize" VkSparseImageMemoryRequirements
             =
             (24)
{-# LINE 1153 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}
        type FieldIsArray "imageMipTailSize"
               VkSparseImageMemoryRequirements
             = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "imageMipTailSize" VkSparseImageMemoryRequirements
         where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (24))
{-# LINE 1171 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "imageMipTailSize" VkSparseImageMemoryRequirements
         where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (24)
{-# LINE 1182 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "imageMipTailOffset" VkSparseImageMemoryRequirements where
        type FieldType "imageMipTailOffset" VkSparseImageMemoryRequirements
             = VkDeviceSize
        type FieldOptional "imageMipTailOffset"
               VkSparseImageMemoryRequirements
             = 'False -- ' closing tick for hsc2hs
        type FieldOffset "imageMipTailOffset"
               VkSparseImageMemoryRequirements
             =
             (32)
{-# LINE 1194 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}
        type FieldIsArray "imageMipTailOffset"
               VkSparseImageMemoryRequirements
             = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "imageMipTailOffset" VkSparseImageMemoryRequirements
         where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (32))
{-# LINE 1212 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "imageMipTailOffset" VkSparseImageMemoryRequirements
         where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (32)
{-# LINE 1223 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "imageMipTailStride" VkSparseImageMemoryRequirements where
        type FieldType "imageMipTailStride" VkSparseImageMemoryRequirements
             = VkDeviceSize
        type FieldOptional "imageMipTailStride"
               VkSparseImageMemoryRequirements
             = 'False -- ' closing tick for hsc2hs
        type FieldOffset "imageMipTailStride"
               VkSparseImageMemoryRequirements
             =
             (40)
{-# LINE 1235 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}
        type FieldIsArray "imageMipTailStride"
               VkSparseImageMemoryRequirements
             = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "imageMipTailStride" VkSparseImageMemoryRequirements
         where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (40))
{-# LINE 1253 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "imageMipTailStride" VkSparseImageMemoryRequirements
         where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (40)
{-# LINE 1264 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

instance Show VkSparseImageMemoryRequirements where
        showsPrec d x
          = showString "VkSparseImageMemoryRequirements {" .
              showString "formatProperties = " .
                showsPrec d (getField @"formatProperties" x) .
                  showString ", " .
                    showString "imageMipTailFirstLod = " .
                      showsPrec d (getField @"imageMipTailFirstLod" x) .
                        showString ", " .
                          showString "imageMipTailSize = " .
                            showsPrec d (getField @"imageMipTailSize" x) .
                              showString ", " .
                                showString "imageMipTailOffset = " .
                                  showsPrec d (getField @"imageMipTailOffset" x) .
                                    showString ", " .
                                      showString "imageMipTailStride = " .
                                        showsPrec d (getField @"imageMipTailStride" x) .
                                          showChar '}'

-- | > typedef struct VkSparseImageMemoryRequirements2 {
--   >     VkStructureType sType;
--   >     void*                                       pNext;
--   >     VkSparseImageMemoryRequirements                                      memoryRequirements;
--   > } VkSparseImageMemoryRequirements2;
--
--   <https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VkSparseImageMemoryRequirements2 VkSparseImageMemoryRequirements2 registry at www.khronos.org>
data VkSparseImageMemoryRequirements2 = VkSparseImageMemoryRequirements2# Addr#
                                                                          ByteArray#

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

        {-# INLINE (==) #-}

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

        {-# INLINE compare #-}

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

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

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

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

        {-# INLINE poke #-}

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

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

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

        {-# INLINE unsafeFromByteArrayOffset #-}

instance VulkanMarshal VkSparseImageMemoryRequirements2 where
        type StructFields VkSparseImageMemoryRequirements2 =
             '["sType", "pNext", "memoryRequirements"] -- ' closing tick for hsc2hs
        type CUnionType VkSparseImageMemoryRequirements2 = 'False -- ' closing tick for hsc2hs
        type ReturnedOnly VkSparseImageMemoryRequirements2 = 'True -- ' closing tick for hsc2hs
        type StructExtends VkSparseImageMemoryRequirements2 = '[] -- ' closing tick for hsc2hs

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

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

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

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

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

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

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

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

instance {-# OVERLAPPING #-}
         HasField "memoryRequirements" VkSparseImageMemoryRequirements2
         where
        type FieldType "memoryRequirements"
               VkSparseImageMemoryRequirements2
             = VkSparseImageMemoryRequirements
        type FieldOptional "memoryRequirements"
               VkSparseImageMemoryRequirements2
             = 'False -- ' closing tick for hsc2hs
        type FieldOffset "memoryRequirements"
               VkSparseImageMemoryRequirements2
             =
             (16)
{-# LINE 1424 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}
        type FieldIsArray "memoryRequirements"
               VkSparseImageMemoryRequirements2
             = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "memoryRequirements" VkSparseImageMemoryRequirements2
         where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (16))
{-# LINE 1442 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "memoryRequirements" VkSparseImageMemoryRequirements2
         where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (16)
{-# LINE 1453 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

instance Show VkSparseImageMemoryRequirements2 where
        showsPrec d x
          = showString "VkSparseImageMemoryRequirements2 {" .
              showString "sType = " .
                showsPrec d (getField @"sType" x) .
                  showString ", " .
                    showString "pNext = " .
                      showsPrec d (getField @"pNext" x) .
                        showString ", " .
                          showString "memoryRequirements = " .
                            showsPrec d (getField @"memoryRequirements" x) . showChar '}'

-- | Alias for `VkSparseImageMemoryRequirements2`
type VkSparseImageMemoryRequirements2KHR =
     VkSparseImageMemoryRequirements2

-- | > typedef struct VkSparseImageOpaqueMemoryBindInfo {
--   >     VkImage image;
--   >     uint32_t               bindCount;
--   >     const VkSparseMemoryBind* pBinds;
--   > } VkSparseImageOpaqueMemoryBindInfo;
--
--   <https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VkSparseImageOpaqueMemoryBindInfo VkSparseImageOpaqueMemoryBindInfo registry at www.khronos.org>
data VkSparseImageOpaqueMemoryBindInfo = VkSparseImageOpaqueMemoryBindInfo# Addr#
                                                                            ByteArray#

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

        {-# INLINE (==) #-}

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

        {-# INLINE compare #-}

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

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

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

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

        {-# INLINE poke #-}

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

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

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

        {-# INLINE unsafeFromByteArrayOffset #-}

instance VulkanMarshal VkSparseImageOpaqueMemoryBindInfo where
        type StructFields VkSparseImageOpaqueMemoryBindInfo =
             '["image", "bindCount", "pBinds"] -- ' closing tick for hsc2hs
        type CUnionType VkSparseImageOpaqueMemoryBindInfo = 'False -- ' closing tick for hsc2hs
        type ReturnedOnly VkSparseImageOpaqueMemoryBindInfo = 'False -- ' closing tick for hsc2hs
        type StructExtends VkSparseImageOpaqueMemoryBindInfo = '[] -- ' closing tick for hsc2hs

instance {-# OVERLAPPING #-}
         HasField "image" VkSparseImageOpaqueMemoryBindInfo where
        type FieldType "image" VkSparseImageOpaqueMemoryBindInfo = VkImage
        type FieldOptional "image" VkSparseImageOpaqueMemoryBindInfo =
             'False -- ' closing tick for hsc2hs
        type FieldOffset "image" VkSparseImageOpaqueMemoryBindInfo =
             (0)
{-# LINE 1537 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}
        type FieldIsArray "image" VkSparseImageOpaqueMemoryBindInfo =
             'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "image" VkSparseImageOpaqueMemoryBindInfo where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (0))
{-# LINE 1553 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "image" VkSparseImageOpaqueMemoryBindInfo where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (0)
{-# LINE 1563 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "bindCount" VkSparseImageOpaqueMemoryBindInfo where
        type FieldType "bindCount" VkSparseImageOpaqueMemoryBindInfo =
             Word32
        type FieldOptional "bindCount" VkSparseImageOpaqueMemoryBindInfo =
             'False -- ' closing tick for hsc2hs
        type FieldOffset "bindCount" VkSparseImageOpaqueMemoryBindInfo =
             (8)
{-# LINE 1572 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}
        type FieldIsArray "bindCount" VkSparseImageOpaqueMemoryBindInfo =
             'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "bindCount" VkSparseImageOpaqueMemoryBindInfo where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (8))
{-# LINE 1588 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "bindCount" VkSparseImageOpaqueMemoryBindInfo where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (8)
{-# LINE 1598 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "pBinds" VkSparseImageOpaqueMemoryBindInfo where
        type FieldType "pBinds" VkSparseImageOpaqueMemoryBindInfo =
             Ptr VkSparseMemoryBind
        type FieldOptional "pBinds" VkSparseImageOpaqueMemoryBindInfo =
             'False -- ' closing tick for hsc2hs
        type FieldOffset "pBinds" VkSparseImageOpaqueMemoryBindInfo =
             (16)
{-# LINE 1607 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}
        type FieldIsArray "pBinds" VkSparseImageOpaqueMemoryBindInfo =
             'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "pBinds" VkSparseImageOpaqueMemoryBindInfo where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (16))
{-# LINE 1623 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "pBinds" VkSparseImageOpaqueMemoryBindInfo where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (16)
{-# LINE 1633 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

instance Show VkSparseImageOpaqueMemoryBindInfo where
        showsPrec d x
          = showString "VkSparseImageOpaqueMemoryBindInfo {" .
              showString "image = " .
                showsPrec d (getField @"image" x) .
                  showString ", " .
                    showString "bindCount = " .
                      showsPrec d (getField @"bindCount" x) .
                        showString ", " .
                          showString "pBinds = " .
                            showsPrec d (getField @"pBinds" x) . showChar '}'

-- | > typedef struct VkSparseMemoryBind {
--   >     VkDeviceSize           resourceOffset;
--   >     VkDeviceSize           size;
--   >     VkDeviceMemory         memory;
--   >     VkDeviceSize           memoryOffset;
--   >     VkSparseMemoryBindFlagsflags;
--   > } VkSparseMemoryBind;
--
--   <https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VkSparseMemoryBind VkSparseMemoryBind registry at www.khronos.org>
data VkSparseMemoryBind = VkSparseMemoryBind# Addr# ByteArray#

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

        {-# INLINE (==) #-}

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

        {-# INLINE compare #-}

instance Storable VkSparseMemoryBind where
        sizeOf ~_ = (40)
{-# LINE 1671 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

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

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

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

        {-# INLINE poke #-}

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

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

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

        {-# INLINE unsafeFromByteArrayOffset #-}

instance VulkanMarshal VkSparseMemoryBind where
        type StructFields VkSparseMemoryBind =
             '["resourceOffset", "size", "memory", "memoryOffset", "flags"] -- ' closing tick for hsc2hs
        type CUnionType VkSparseMemoryBind = 'False -- ' closing tick for hsc2hs
        type ReturnedOnly VkSparseMemoryBind = 'False -- ' closing tick for hsc2hs
        type StructExtends VkSparseMemoryBind = '[] -- ' closing tick for hsc2hs

instance {-# OVERLAPPING #-}
         HasField "resourceOffset" VkSparseMemoryBind where
        type FieldType "resourceOffset" VkSparseMemoryBind = VkDeviceSize
        type FieldOptional "resourceOffset" VkSparseMemoryBind = 'False -- ' closing tick for hsc2hs
        type FieldOffset "resourceOffset" VkSparseMemoryBind =
             (0)
{-# LINE 1708 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}
        type FieldIsArray "resourceOffset" VkSparseMemoryBind = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "resourceOffset" VkSparseMemoryBind where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (0))
{-# LINE 1723 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "resourceOffset" VkSparseMemoryBind where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (0)
{-# LINE 1733 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

instance {-# OVERLAPPING #-} HasField "size" VkSparseMemoryBind
         where
        type FieldType "size" VkSparseMemoryBind = VkDeviceSize
        type FieldOptional "size" VkSparseMemoryBind = 'False -- ' closing tick for hsc2hs
        type FieldOffset "size" VkSparseMemoryBind =
             (8)
{-# LINE 1740 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}
        type FieldIsArray "size" VkSparseMemoryBind = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-} CanReadField "size" VkSparseMemoryBind
         where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (8))
{-# LINE 1754 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "size" VkSparseMemoryBind where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (8)
{-# LINE 1764 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

instance {-# OVERLAPPING #-} HasField "memory" VkSparseMemoryBind
         where
        type FieldType "memory" VkSparseMemoryBind = VkDeviceMemory
        type FieldOptional "memory" VkSparseMemoryBind = 'True -- ' closing tick for hsc2hs
        type FieldOffset "memory" VkSparseMemoryBind =
             (16)
{-# LINE 1771 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}
        type FieldIsArray "memory" VkSparseMemoryBind = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = True

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

instance {-# OVERLAPPING #-}
         CanReadField "memory" VkSparseMemoryBind where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (16))
{-# LINE 1785 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "memory" VkSparseMemoryBind where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (16)
{-# LINE 1795 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "memoryOffset" VkSparseMemoryBind where
        type FieldType "memoryOffset" VkSparseMemoryBind = VkDeviceSize
        type FieldOptional "memoryOffset" VkSparseMemoryBind = 'False -- ' closing tick for hsc2hs
        type FieldOffset "memoryOffset" VkSparseMemoryBind =
             (24)
{-# LINE 1802 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}
        type FieldIsArray "memoryOffset" VkSparseMemoryBind = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "memoryOffset" VkSparseMemoryBind where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (24))
{-# LINE 1817 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "memoryOffset" VkSparseMemoryBind where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (24)
{-# LINE 1827 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

instance {-# OVERLAPPING #-} HasField "flags" VkSparseMemoryBind
         where
        type FieldType "flags" VkSparseMemoryBind = VkSparseMemoryBindFlags
        type FieldOptional "flags" VkSparseMemoryBind = 'True -- ' closing tick for hsc2hs
        type FieldOffset "flags" VkSparseMemoryBind =
             (32)
{-# LINE 1834 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}
        type FieldIsArray "flags" VkSparseMemoryBind = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = True

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

instance {-# OVERLAPPING #-}
         CanReadField "flags" VkSparseMemoryBind where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (32))
{-# LINE 1848 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "flags" VkSparseMemoryBind where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (32)
{-# LINE 1858 "src-gen/Graphics/Vulkan/Types/Struct/Sparse.hsc" #-}

instance Show VkSparseMemoryBind where
        showsPrec d x
          = showString "VkSparseMemoryBind {" .
              showString "resourceOffset = " .
                showsPrec d (getField @"resourceOffset" x) .
                  showString ", " .
                    showString "size = " .
                      showsPrec d (getField @"size" x) .
                        showString ", " .
                          showString "memory = " .
                            showsPrec d (getField @"memory" x) .
                              showString ", " .
                                showString "memoryOffset = " .
                                  showsPrec d (getField @"memoryOffset" x) .
                                    showString ", " .
                                      showString "flags = " .
                                        showsPrec d (getField @"flags" x) . showChar '}'