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

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

{-# LANGUAGE DataKinds             #-}
{-# LANGUAGE FlexibleInstances     #-}
{-# LANGUAGE MagicHash             #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE Strict                #-}
{-# LANGUAGE TypeApplications      #-}
{-# LANGUAGE TypeFamilies          #-}
module Graphics.Vulkan.Types.Struct.Memory
       (VkMemoryAllocateFlagsInfo(..), VkMemoryAllocateFlagsInfoKHR,
        VkMemoryAllocateInfo(..), VkMemoryBarrier(..),
        VkMemoryDedicatedAllocateInfo(..),
        VkMemoryDedicatedAllocateInfoKHR,
        VkMemoryDedicatedRequirements(..),
        VkMemoryDedicatedRequirementsKHR, VkMemoryFdPropertiesKHR(..),
        VkMemoryGetFdInfoKHR(..), VkMemoryHeap(..),
        VkMemoryHostPointerPropertiesEXT(..), VkMemoryRequirements(..),
        VkMemoryRequirements2(..), VkMemoryRequirements2KHR,
        VkMemoryType(..))
       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          (VkBool32,
                                                           VkDeviceSize)
import           Graphics.Vulkan.Types.Enum.AccessFlags   (VkAccessFlags)
import           Graphics.Vulkan.Types.Enum.External      (VkExternalMemoryHandleTypeFlagBits)
import           Graphics.Vulkan.Types.Enum.Memory        (VkMemoryAllocateFlags,
                                                           VkMemoryHeapFlags,
                                                           VkMemoryPropertyFlags)
import           Graphics.Vulkan.Types.Enum.StructureType (VkStructureType)
import           Graphics.Vulkan.Types.Handles            (VkBuffer,
                                                           VkDeviceMemory,
                                                           VkImage)
import           System.IO.Unsafe                         (unsafeDupablePerformIO)

-- | > typedef struct VkMemoryAllocateFlagsInfo {
--   >     VkStructureType sType;
--   >     const void*                      pNext;
--   >     VkMemoryAllocateFlags flags;
--   >     uint32_t                         deviceMask;
--   > } VkMemoryAllocateFlagsInfo;
--
--   <https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VkMemoryAllocateFlagsInfo VkMemoryAllocateFlagsInfo registry at www.khronos.org>
data VkMemoryAllocateFlagsInfo = VkMemoryAllocateFlagsInfo# Addr#
                                                            ByteArray#

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

        {-# INLINE (==) #-}

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

        {-# INLINE compare #-}

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

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

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

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

        {-# INLINE poke #-}

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

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

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

        {-# INLINE unsafeFromByteArrayOffset #-}

instance VulkanMarshal VkMemoryAllocateFlagsInfo where
        type StructFields VkMemoryAllocateFlagsInfo =
             '["sType", "pNext", "flags", "deviceMask"] -- ' closing tick for hsc2hs
        type CUnionType VkMemoryAllocateFlagsInfo = 'False -- ' closing tick for hsc2hs
        type ReturnedOnly VkMemoryAllocateFlagsInfo = 'False -- ' closing tick for hsc2hs
        type StructExtends VkMemoryAllocateFlagsInfo =
             '[VkMemoryAllocateInfo] -- ' closing tick for hsc2hs

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

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

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

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

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

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

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

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

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

        {-# INLINE fieldOptional #-}
        fieldOptional = True

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

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

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

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

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "deviceMask" VkMemoryAllocateFlagsInfo where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (20))
{-# LINE 217 "src-gen/Graphics/Vulkan/Types/Struct/Memory.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "deviceMask" VkMemoryAllocateFlagsInfo where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (20)
{-# LINE 227 "src-gen/Graphics/Vulkan/Types/Struct/Memory.hsc" #-}

instance Show VkMemoryAllocateFlagsInfo where
        showsPrec d x
          = showString "VkMemoryAllocateFlagsInfo {" .
              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 "deviceMask = " .
                                  showsPrec d (getField @"deviceMask" x) . showChar '}'

-- | Alias for `VkMemoryAllocateFlagsInfo`
type VkMemoryAllocateFlagsInfoKHR = VkMemoryAllocateFlagsInfo

-- | > typedef struct VkMemoryAllocateInfo {
--   >     VkStructureType sType;
--   >     const void*            pNext;
--   >     VkDeviceSize           allocationSize;
--   >     uint32_t               memoryTypeIndex;
--   > } VkMemoryAllocateInfo;
--
--   <https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VkMemoryAllocateInfo VkMemoryAllocateInfo registry at www.khronos.org>
data VkMemoryAllocateInfo = VkMemoryAllocateInfo# Addr# ByteArray#

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

        {-# INLINE (==) #-}

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

        {-# INLINE compare #-}

instance Storable VkMemoryAllocateInfo where
        sizeOf ~_ = (32)
{-# LINE 270 "src-gen/Graphics/Vulkan/Types/Struct/Memory.hsc" #-}

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

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

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

        {-# INLINE poke #-}

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

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

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

        {-# INLINE unsafeFromByteArrayOffset #-}

instance VulkanMarshal VkMemoryAllocateInfo where
        type StructFields VkMemoryAllocateInfo =
             '["sType", "pNext", "allocationSize", "memoryTypeIndex"] -- ' closing tick for hsc2hs
        type CUnionType VkMemoryAllocateInfo = 'False -- ' closing tick for hsc2hs
        type ReturnedOnly VkMemoryAllocateInfo = 'False -- ' closing tick for hsc2hs
        type StructExtends VkMemoryAllocateInfo = '[] -- ' closing tick for hsc2hs

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

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

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

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

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

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

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

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

instance {-# OVERLAPPING #-}
         HasField "allocationSize" VkMemoryAllocateInfo where
        type FieldType "allocationSize" VkMemoryAllocateInfo = VkDeviceSize
        type FieldOptional "allocationSize" VkMemoryAllocateInfo = 'False -- ' closing tick for hsc2hs
        type FieldOffset "allocationSize" VkMemoryAllocateInfo =
             (16)
{-# LINE 369 "src-gen/Graphics/Vulkan/Types/Struct/Memory.hsc" #-}
        type FieldIsArray "allocationSize" VkMemoryAllocateInfo = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "allocationSize" VkMemoryAllocateInfo where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (16))
{-# LINE 384 "src-gen/Graphics/Vulkan/Types/Struct/Memory.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "allocationSize" VkMemoryAllocateInfo where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (16)
{-# LINE 394 "src-gen/Graphics/Vulkan/Types/Struct/Memory.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "memoryTypeIndex" VkMemoryAllocateInfo where
        type FieldType "memoryTypeIndex" VkMemoryAllocateInfo = Word32
        type FieldOptional "memoryTypeIndex" VkMemoryAllocateInfo = 'False -- ' closing tick for hsc2hs
        type FieldOffset "memoryTypeIndex" VkMemoryAllocateInfo =
             (24)
{-# LINE 401 "src-gen/Graphics/Vulkan/Types/Struct/Memory.hsc" #-}
        type FieldIsArray "memoryTypeIndex" VkMemoryAllocateInfo = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "memoryTypeIndex" VkMemoryAllocateInfo where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (24))
{-# LINE 416 "src-gen/Graphics/Vulkan/Types/Struct/Memory.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "memoryTypeIndex" VkMemoryAllocateInfo where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (24)
{-# LINE 426 "src-gen/Graphics/Vulkan/Types/Struct/Memory.hsc" #-}

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

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

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

        {-# INLINE (==) #-}

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

        {-# INLINE compare #-}

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

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

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

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

        {-# INLINE poke #-}

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

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

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

        {-# INLINE unsafeFromByteArrayOffset #-}

instance VulkanMarshal VkMemoryBarrier where
        type StructFields VkMemoryBarrier =
             '["sType", "pNext", "srcAccessMask", "dstAccessMask"] -- ' closing tick for hsc2hs
        type CUnionType VkMemoryBarrier = 'False -- ' closing tick for hsc2hs
        type ReturnedOnly VkMemoryBarrier = 'False -- ' closing tick for hsc2hs
        type StructExtends VkMemoryBarrier = '[] -- ' closing tick for hsc2hs

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

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

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

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

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

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

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

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

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

        {-# INLINE fieldOptional #-}
        fieldOptional = True

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

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

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

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

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

        {-# INLINE fieldOptional #-}
        fieldOptional = True

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

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

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

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

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

-- | > typedef struct VkMemoryDedicatedAllocateInfo {
--   >     VkStructureType sType;
--   >     const void*                      pNext;
--   >     VkImage          image;
--   >     VkBuffer         buffer;
--   > } VkMemoryDedicatedAllocateInfo;
--
--   <https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VkMemoryDedicatedAllocateInfo VkMemoryDedicatedAllocateInfo registry at www.khronos.org>
data VkMemoryDedicatedAllocateInfo = VkMemoryDedicatedAllocateInfo# Addr#
                                                                    ByteArray#

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

        {-# INLINE (==) #-}

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

        {-# INLINE compare #-}

instance Storable VkMemoryDedicatedAllocateInfo where
        sizeOf ~_ = (32)
{-# LINE 660 "src-gen/Graphics/Vulkan/Types/Struct/Memory.hsc" #-}

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

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

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

        {-# INLINE poke #-}

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

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

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

        {-# INLINE unsafeFromByteArrayOffset #-}

instance VulkanMarshal VkMemoryDedicatedAllocateInfo where
        type StructFields VkMemoryDedicatedAllocateInfo =
             '["sType", "pNext", "image", "buffer"] -- ' closing tick for hsc2hs
        type CUnionType VkMemoryDedicatedAllocateInfo = 'False -- ' closing tick for hsc2hs
        type ReturnedOnly VkMemoryDedicatedAllocateInfo = 'False -- ' closing tick for hsc2hs
        type StructExtends VkMemoryDedicatedAllocateInfo =
             '[VkMemoryAllocateInfo] -- ' closing tick for hsc2hs

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

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

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

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

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

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

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

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

instance {-# OVERLAPPING #-}
         HasField "image" VkMemoryDedicatedAllocateInfo where
        type FieldType "image" VkMemoryDedicatedAllocateInfo = VkImage
        type FieldOptional "image" VkMemoryDedicatedAllocateInfo = 'True -- ' closing tick for hsc2hs
        type FieldOffset "image" VkMemoryDedicatedAllocateInfo =
             (16)
{-# LINE 766 "src-gen/Graphics/Vulkan/Types/Struct/Memory.hsc" #-}
        type FieldIsArray "image" VkMemoryDedicatedAllocateInfo = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = True

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

instance {-# OVERLAPPING #-}
         CanReadField "image" VkMemoryDedicatedAllocateInfo where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (16))
{-# LINE 781 "src-gen/Graphics/Vulkan/Types/Struct/Memory.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "image" VkMemoryDedicatedAllocateInfo where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (16)
{-# LINE 791 "src-gen/Graphics/Vulkan/Types/Struct/Memory.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "buffer" VkMemoryDedicatedAllocateInfo where
        type FieldType "buffer" VkMemoryDedicatedAllocateInfo = VkBuffer
        type FieldOptional "buffer" VkMemoryDedicatedAllocateInfo = 'True -- ' closing tick for hsc2hs
        type FieldOffset "buffer" VkMemoryDedicatedAllocateInfo =
             (24)
{-# LINE 798 "src-gen/Graphics/Vulkan/Types/Struct/Memory.hsc" #-}
        type FieldIsArray "buffer" VkMemoryDedicatedAllocateInfo = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = True

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

instance {-# OVERLAPPING #-}
         CanReadField "buffer" VkMemoryDedicatedAllocateInfo where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (24))
{-# LINE 813 "src-gen/Graphics/Vulkan/Types/Struct/Memory.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "buffer" VkMemoryDedicatedAllocateInfo where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (24)
{-# LINE 823 "src-gen/Graphics/Vulkan/Types/Struct/Memory.hsc" #-}

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

-- | Alias for `VkMemoryDedicatedAllocateInfo`
type VkMemoryDedicatedAllocateInfoKHR =
     VkMemoryDedicatedAllocateInfo

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

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

        {-# INLINE (==) #-}

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

        {-# INLINE compare #-}

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

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

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

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

        {-# INLINE poke #-}

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

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

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

        {-# INLINE unsafeFromByteArrayOffset #-}

instance VulkanMarshal VkMemoryDedicatedRequirements where
        type StructFields VkMemoryDedicatedRequirements =
             '["sType", "pNext", "prefersDedicatedAllocation", -- ' closing tick for hsc2hs
               "requiresDedicatedAllocation"]
        type CUnionType VkMemoryDedicatedRequirements = 'False -- ' closing tick for hsc2hs
        type ReturnedOnly VkMemoryDedicatedRequirements = 'True -- ' closing tick for hsc2hs
        type StructExtends VkMemoryDedicatedRequirements =
             '[VkMemoryRequirements2] -- ' closing tick for hsc2hs

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

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

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

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

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

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

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

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

instance {-# OVERLAPPING #-}
         HasField "prefersDedicatedAllocation" VkMemoryDedicatedRequirements
         where
        type FieldType "prefersDedicatedAllocation"
               VkMemoryDedicatedRequirements
             = VkBool32
        type FieldOptional "prefersDedicatedAllocation"
               VkMemoryDedicatedRequirements
             = 'False -- ' closing tick for hsc2hs
        type FieldOffset "prefersDedicatedAllocation"
               VkMemoryDedicatedRequirements
             =
             (16)
{-# LINE 983 "src-gen/Graphics/Vulkan/Types/Struct/Memory.hsc" #-}
        type FieldIsArray "prefersDedicatedAllocation"
               VkMemoryDedicatedRequirements
             = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "prefersDedicatedAllocation"
           VkMemoryDedicatedRequirements
         where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (16))
{-# LINE 1002 "src-gen/Graphics/Vulkan/Types/Struct/Memory.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "prefersDedicatedAllocation"
           VkMemoryDedicatedRequirements
         where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (16)
{-# LINE 1014 "src-gen/Graphics/Vulkan/Types/Struct/Memory.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "requiresDedicatedAllocation"
           VkMemoryDedicatedRequirements
         where
        type FieldType "requiresDedicatedAllocation"
               VkMemoryDedicatedRequirements
             = VkBool32
        type FieldOptional "requiresDedicatedAllocation"
               VkMemoryDedicatedRequirements
             = 'False -- ' closing tick for hsc2hs
        type FieldOffset "requiresDedicatedAllocation"
               VkMemoryDedicatedRequirements
             =
             (20)
{-# LINE 1029 "src-gen/Graphics/Vulkan/Types/Struct/Memory.hsc" #-}
        type FieldIsArray "requiresDedicatedAllocation"
               VkMemoryDedicatedRequirements
             = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "requiresDedicatedAllocation"
           VkMemoryDedicatedRequirements
         where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (20))
{-# LINE 1048 "src-gen/Graphics/Vulkan/Types/Struct/Memory.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "requiresDedicatedAllocation"
           VkMemoryDedicatedRequirements
         where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (20)
{-# LINE 1060 "src-gen/Graphics/Vulkan/Types/Struct/Memory.hsc" #-}

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

-- | Alias for `VkMemoryDedicatedRequirements`
type VkMemoryDedicatedRequirementsKHR =
     VkMemoryDedicatedRequirements

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

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

        {-# INLINE (==) #-}

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

        {-# INLINE compare #-}

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

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

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

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

        {-# INLINE poke #-}

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

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

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

        {-# INLINE unsafeFromByteArrayOffset #-}

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

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

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

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

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

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

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

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

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

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "memoryTypeBits" VkMemoryFdPropertiesKHR where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (16))
{-# LINE 1220 "src-gen/Graphics/Vulkan/Types/Struct/Memory.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "memoryTypeBits" VkMemoryFdPropertiesKHR where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (16)
{-# LINE 1230 "src-gen/Graphics/Vulkan/Types/Struct/Memory.hsc" #-}

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

-- | > typedef struct VkMemoryGetFdInfoKHR {
--   >     VkStructureType sType;
--   >     const void*                      pNext;
--   >     VkDeviceMemory                   memory;
--   >     VkExternalMemoryHandleTypeFlagBits handleType;
--   > } VkMemoryGetFdInfoKHR;
--
--   <https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VkMemoryGetFdInfoKHR VkMemoryGetFdInfoKHR registry at www.khronos.org>
data VkMemoryGetFdInfoKHR = VkMemoryGetFdInfoKHR# Addr# ByteArray#

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

        {-# INLINE (==) #-}

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

        {-# INLINE compare #-}

instance Storable VkMemoryGetFdInfoKHR where
        sizeOf ~_ = (32)
{-# LINE 1267 "src-gen/Graphics/Vulkan/Types/Struct/Memory.hsc" #-}

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

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

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

        {-# INLINE poke #-}

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

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

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

        {-# INLINE unsafeFromByteArrayOffset #-}

instance VulkanMarshal VkMemoryGetFdInfoKHR where
        type StructFields VkMemoryGetFdInfoKHR =
             '["sType", "pNext", "memory", "handleType"] -- ' closing tick for hsc2hs
        type CUnionType VkMemoryGetFdInfoKHR = 'False -- ' closing tick for hsc2hs
        type ReturnedOnly VkMemoryGetFdInfoKHR = 'False -- ' closing tick for hsc2hs
        type StructExtends VkMemoryGetFdInfoKHR = '[] -- ' closing tick for hsc2hs

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

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

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

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

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

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

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

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

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

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

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

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

instance {-# OVERLAPPING #-}
         HasField "handleType" VkMemoryGetFdInfoKHR where
        type FieldType "handleType" VkMemoryGetFdInfoKHR =
             VkExternalMemoryHandleTypeFlagBits
        type FieldOptional "handleType" VkMemoryGetFdInfoKHR = 'False -- ' closing tick for hsc2hs
        type FieldOffset "handleType" VkMemoryGetFdInfoKHR =
             (24)
{-# LINE 1398 "src-gen/Graphics/Vulkan/Types/Struct/Memory.hsc" #-}
        type FieldIsArray "handleType" VkMemoryGetFdInfoKHR = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "handleType" VkMemoryGetFdInfoKHR where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (24))
{-# LINE 1413 "src-gen/Graphics/Vulkan/Types/Struct/Memory.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "handleType" VkMemoryGetFdInfoKHR where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (24)
{-# LINE 1423 "src-gen/Graphics/Vulkan/Types/Struct/Memory.hsc" #-}

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

-- | > typedef struct VkMemoryHeap {
--   >     VkDeviceSize           size;
--   >     VkMemoryHeapFlags      flags;
--   > } VkMemoryHeap;
--
--   <https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VkMemoryHeap VkMemoryHeap registry at www.khronos.org>
data VkMemoryHeap = VkMemoryHeap# Addr# ByteArray#

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

        {-# INLINE (==) #-}

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

        {-# INLINE compare #-}

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

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

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

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

        {-# INLINE poke #-}

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

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

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

        {-# INLINE unsafeFromByteArrayOffset #-}

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

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-} CanReadField "size" VkMemoryHeap where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (0))
{-# LINE 1509 "src-gen/Graphics/Vulkan/Types/Struct/Memory.hsc" #-}

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

instance {-# OVERLAPPING #-} CanWriteField "size" VkMemoryHeap
         where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (0)
{-# LINE 1519 "src-gen/Graphics/Vulkan/Types/Struct/Memory.hsc" #-}

instance {-# OVERLAPPING #-} HasField "flags" VkMemoryHeap where
        type FieldType "flags" VkMemoryHeap = VkMemoryHeapFlags
        type FieldOptional "flags" VkMemoryHeap = 'True -- ' closing tick for hsc2hs
        type FieldOffset "flags" VkMemoryHeap =
             (8)
{-# LINE 1525 "src-gen/Graphics/Vulkan/Types/Struct/Memory.hsc" #-}
        type FieldIsArray "flags" VkMemoryHeap = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = True

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

instance {-# OVERLAPPING #-} CanReadField "flags" VkMemoryHeap
         where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (8))
{-# LINE 1539 "src-gen/Graphics/Vulkan/Types/Struct/Memory.hsc" #-}

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

instance {-# OVERLAPPING #-} CanWriteField "flags" VkMemoryHeap
         where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (8)
{-# LINE 1549 "src-gen/Graphics/Vulkan/Types/Struct/Memory.hsc" #-}

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

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

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

        {-# INLINE (==) #-}

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

        {-# INLINE compare #-}

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

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

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

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

        {-# INLINE poke #-}

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

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

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

        {-# INLINE unsafeFromByteArrayOffset #-}

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

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

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

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

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

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

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

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

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

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "memoryTypeBits" VkMemoryHostPointerPropertiesEXT
         where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (16))
{-# LINE 1713 "src-gen/Graphics/Vulkan/Types/Struct/Memory.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "memoryTypeBits" VkMemoryHostPointerPropertiesEXT
         where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (16)
{-# LINE 1724 "src-gen/Graphics/Vulkan/Types/Struct/Memory.hsc" #-}

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

-- | > typedef struct VkMemoryRequirements {
--   >     VkDeviceSize           size;
--   >     VkDeviceSize           alignment;
--   >     uint32_t               memoryTypeBits;
--   > } VkMemoryRequirements;
--
--   <https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VkMemoryRequirements VkMemoryRequirements registry at www.khronos.org>
data VkMemoryRequirements = VkMemoryRequirements# Addr# ByteArray#

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

        {-# INLINE (==) #-}

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

        {-# INLINE compare #-}

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

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

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

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

        {-# INLINE poke #-}

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

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

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

        {-# INLINE unsafeFromByteArrayOffset #-}

instance VulkanMarshal VkMemoryRequirements where
        type StructFields VkMemoryRequirements =
             '["size", "alignment", "memoryTypeBits"] -- ' closing tick for hsc2hs
        type CUnionType VkMemoryRequirements = 'False -- ' closing tick for hsc2hs
        type ReturnedOnly VkMemoryRequirements = 'True -- ' closing tick for hsc2hs
        type StructExtends VkMemoryRequirements = '[] -- ' closing tick for hsc2hs

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "size" VkMemoryRequirements where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (0))
{-# LINE 1811 "src-gen/Graphics/Vulkan/Types/Struct/Memory.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "size" VkMemoryRequirements where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (0)
{-# LINE 1821 "src-gen/Graphics/Vulkan/Types/Struct/Memory.hsc" #-}

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "alignment" VkMemoryRequirements where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (8))
{-# LINE 1842 "src-gen/Graphics/Vulkan/Types/Struct/Memory.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "alignment" VkMemoryRequirements where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (8)
{-# LINE 1852 "src-gen/Graphics/Vulkan/Types/Struct/Memory.hsc" #-}

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "memoryTypeBits" VkMemoryRequirements where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (16))
{-# LINE 1874 "src-gen/Graphics/Vulkan/Types/Struct/Memory.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "memoryTypeBits" VkMemoryRequirements where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (16)
{-# LINE 1884 "src-gen/Graphics/Vulkan/Types/Struct/Memory.hsc" #-}

instance Show VkMemoryRequirements where
        showsPrec d x
          = showString "VkMemoryRequirements {" .
              showString "size = " .
                showsPrec d (getField @"size" x) .
                  showString ", " .
                    showString "alignment = " .
                      showsPrec d (getField @"alignment" x) .
                        showString ", " .
                          showString "memoryTypeBits = " .
                            showsPrec d (getField @"memoryTypeBits" x) . showChar '}'

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

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

        {-# INLINE (==) #-}

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

        {-# INLINE compare #-}

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

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

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

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

        {-# INLINE poke #-}

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

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

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

        {-# INLINE unsafeFromByteArrayOffset #-}

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

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

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

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

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

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

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

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

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

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

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

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

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

instance Show VkMemoryRequirements2 where
        showsPrec d x
          = showString "VkMemoryRequirements2 {" .
              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 `VkMemoryRequirements2`
type VkMemoryRequirements2KHR = VkMemoryRequirements2

-- | > typedef struct VkMemoryType {
--   >     VkMemoryPropertyFlags  propertyFlags;
--   >     uint32_t               heapIndex;
--   > } VkMemoryType;
--
--   <https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VkMemoryType VkMemoryType registry at www.khronos.org>
data VkMemoryType = VkMemoryType# Addr# ByteArray#

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

        {-# INLINE (==) #-}

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

        {-# INLINE compare #-}

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

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

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

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

        {-# INLINE poke #-}

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

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

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

        {-# INLINE unsafeFromByteArrayOffset #-}

instance VulkanMarshal VkMemoryType where
        type StructFields VkMemoryType = '["propertyFlags", "heapIndex"] -- ' closing tick for hsc2hs
        type CUnionType VkMemoryType = 'False -- ' closing tick for hsc2hs
        type ReturnedOnly VkMemoryType = 'True -- ' closing tick for hsc2hs
        type StructExtends VkMemoryType = '[] -- ' closing tick for hsc2hs

instance {-# OVERLAPPING #-} HasField "propertyFlags" VkMemoryType
         where
        type FieldType "propertyFlags" VkMemoryType = VkMemoryPropertyFlags
        type FieldOptional "propertyFlags" VkMemoryType = 'True -- ' closing tick for hsc2hs
        type FieldOffset "propertyFlags" VkMemoryType =
             (0)
{-# LINE 2122 "src-gen/Graphics/Vulkan/Types/Struct/Memory.hsc" #-}
        type FieldIsArray "propertyFlags" VkMemoryType = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = True

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

instance {-# OVERLAPPING #-}
         CanReadField "propertyFlags" VkMemoryType where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (0))
{-# LINE 2136 "src-gen/Graphics/Vulkan/Types/Struct/Memory.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "propertyFlags" VkMemoryType where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (0)
{-# LINE 2146 "src-gen/Graphics/Vulkan/Types/Struct/Memory.hsc" #-}

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-} CanReadField "heapIndex" VkMemoryType
         where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (4))
{-# LINE 2167 "src-gen/Graphics/Vulkan/Types/Struct/Memory.hsc" #-}

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

instance {-# OVERLAPPING #-} CanWriteField "heapIndex" VkMemoryType
         where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (4)
{-# LINE 2177 "src-gen/Graphics/Vulkan/Types/Struct/Memory.hsc" #-}

instance Show VkMemoryType where
        showsPrec d x
          = showString "VkMemoryType {" .
              showString "propertyFlags = " .
                showsPrec d (getField @"propertyFlags" x) .
                  showString ", " .
                    showString "heapIndex = " .
                      showsPrec d (getField @"heapIndex" x) . showChar '}'