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

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

{-# LANGUAGE DataKinds             #-}
{-# LANGUAGE FlexibleInstances     #-}
{-# LANGUAGE MagicHash             #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE Strict                #-}
{-# LANGUAGE TypeApplications      #-}
{-# LANGUAGE TypeFamilies          #-}
module Graphics.Vulkan.Types.Struct.External
       (VkExternalBufferProperties(..), VkExternalBufferPropertiesKHR,
        VkExternalFenceProperties(..), VkExternalFencePropertiesKHR,
        VkExternalImageFormatProperties(..),
        VkExternalImageFormatPropertiesKHR,
        VkExternalImageFormatPropertiesNV(..),
        VkExternalMemoryBufferCreateInfo(..),
        VkExternalMemoryBufferCreateInfoKHR,
        VkExternalMemoryImageCreateInfo(..),
        VkExternalMemoryImageCreateInfoKHR,
        VkExternalMemoryImageCreateInfoNV(..),
        VkExternalMemoryProperties(..), VkExternalMemoryPropertiesKHR,
        VkExternalSemaphoreProperties(..),
        VkExternalSemaphorePropertiesKHR)
       where
import           Foreign.Storable                         (Storable (..))
import           GHC.Base                                 (Addr#, ByteArray#,
                                                           byteArrayContents#,
                                                           plusAddr#)
import           Graphics.Vulkan.Marshal
import           Graphics.Vulkan.Marshal.Internal
import           Graphics.Vulkan.Types.Enum.External      (VkExternalFenceFeatureFlags,
                                                           VkExternalFenceHandleTypeFlags,
                                                           VkExternalMemoryFeatureFlags,
                                                           VkExternalMemoryFeatureFlagsNV,
                                                           VkExternalMemoryHandleTypeFlags,
                                                           VkExternalMemoryHandleTypeFlagsNV,
                                                           VkExternalSemaphoreFeatureFlags,
                                                           VkExternalSemaphoreHandleTypeFlags)
import           Graphics.Vulkan.Types.Enum.StructureType (VkStructureType)
import           Graphics.Vulkan.Types.Struct.Buffer      (VkBufferCreateInfo)
import           Graphics.Vulkan.Types.Struct.Image       (VkImageCreateInfo, VkImageFormatProperties,
                                                           VkImageFormatProperties2)
import           System.IO.Unsafe                         (unsafeDupablePerformIO)

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

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

        {-# INLINE (==) #-}

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

        {-# INLINE compare #-}

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

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

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

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

        {-# INLINE poke #-}

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

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

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

        {-# INLINE unsafeFromByteArrayOffset #-}

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

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

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

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

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

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

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

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

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

instance {-# OVERLAPPING #-}
         HasField "externalMemoryProperties" VkExternalBufferProperties
         where
        type FieldType "externalMemoryProperties"
               VkExternalBufferProperties
             = VkExternalMemoryProperties
        type FieldOptional "externalMemoryProperties"
               VkExternalBufferProperties
             = 'False -- ' closing tick for hsc2hs
        type FieldOffset "externalMemoryProperties"
               VkExternalBufferProperties
             =
             (16)
{-# LINE 180 "src-gen/Graphics/Vulkan/Types/Struct/External.hsc" #-}
        type FieldIsArray "externalMemoryProperties"
               VkExternalBufferProperties
             = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "externalMemoryProperties" VkExternalBufferProperties
         where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (16))
{-# LINE 198 "src-gen/Graphics/Vulkan/Types/Struct/External.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "externalMemoryProperties" VkExternalBufferProperties
         where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (16)
{-# LINE 209 "src-gen/Graphics/Vulkan/Types/Struct/External.hsc" #-}

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

-- | Alias for `VkExternalBufferProperties`
type VkExternalBufferPropertiesKHR = VkExternalBufferProperties

-- | > typedef struct VkExternalFenceProperties {
--   >     VkStructureType sType;
--   >     void*                            pNext;
--   >     VkExternalFenceHandleTypeFlags exportFromImportedHandleTypes;
--   >     VkExternalFenceHandleTypeFlags compatibleHandleTypes;
--   >     VkExternalFenceFeatureFlags externalFenceFeatures;
--   > } VkExternalFenceProperties;
--
--   <https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VkExternalFenceProperties VkExternalFenceProperties registry at www.khronos.org>
data VkExternalFenceProperties = VkExternalFenceProperties# Addr#
                                                            ByteArray#

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

        {-# INLINE (==) #-}

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

        {-# INLINE compare #-}

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

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

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

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

        {-# INLINE poke #-}

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

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

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

        {-# INLINE unsafeFromByteArrayOffset #-}

instance VulkanMarshal VkExternalFenceProperties where
        type StructFields VkExternalFenceProperties =
             '["sType", "pNext", "exportFromImportedHandleTypes", -- ' closing tick for hsc2hs
               "compatibleHandleTypes", "externalFenceFeatures"]
        type CUnionType VkExternalFenceProperties = 'False -- ' closing tick for hsc2hs
        type ReturnedOnly VkExternalFenceProperties = 'True -- ' closing tick for hsc2hs
        type StructExtends VkExternalFenceProperties = '[] -- ' closing tick for hsc2hs

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

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

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

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

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

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

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

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

instance {-# OVERLAPPING #-}
         HasField "exportFromImportedHandleTypes" VkExternalFenceProperties
         where
        type FieldType "exportFromImportedHandleTypes"
               VkExternalFenceProperties
             = VkExternalFenceHandleTypeFlags
        type FieldOptional "exportFromImportedHandleTypes"
               VkExternalFenceProperties
             = 'False -- ' closing tick for hsc2hs
        type FieldOffset "exportFromImportedHandleTypes"
               VkExternalFenceProperties
             =
             (16)
{-# LINE 361 "src-gen/Graphics/Vulkan/Types/Struct/External.hsc" #-}
        type FieldIsArray "exportFromImportedHandleTypes"
               VkExternalFenceProperties
             = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "exportFromImportedHandleTypes"
           VkExternalFenceProperties
         where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (16))
{-# LINE 380 "src-gen/Graphics/Vulkan/Types/Struct/External.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "exportFromImportedHandleTypes"
           VkExternalFenceProperties
         where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (16)
{-# LINE 392 "src-gen/Graphics/Vulkan/Types/Struct/External.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "compatibleHandleTypes" VkExternalFenceProperties where
        type FieldType "compatibleHandleTypes" VkExternalFenceProperties =
             VkExternalFenceHandleTypeFlags
        type FieldOptional "compatibleHandleTypes"
               VkExternalFenceProperties
             = 'False -- ' closing tick for hsc2hs
        type FieldOffset "compatibleHandleTypes" VkExternalFenceProperties
             =
             (20)
{-# LINE 403 "src-gen/Graphics/Vulkan/Types/Struct/External.hsc" #-}
        type FieldIsArray "compatibleHandleTypes" VkExternalFenceProperties
             = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "compatibleHandleTypes" VkExternalFenceProperties
         where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (20))
{-# LINE 420 "src-gen/Graphics/Vulkan/Types/Struct/External.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "compatibleHandleTypes" VkExternalFenceProperties
         where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (20)
{-# LINE 431 "src-gen/Graphics/Vulkan/Types/Struct/External.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "externalFenceFeatures" VkExternalFenceProperties where
        type FieldType "externalFenceFeatures" VkExternalFenceProperties =
             VkExternalFenceFeatureFlags
        type FieldOptional "externalFenceFeatures"
               VkExternalFenceProperties
             = 'True -- ' closing tick for hsc2hs
        type FieldOffset "externalFenceFeatures" VkExternalFenceProperties
             =
             (24)
{-# LINE 442 "src-gen/Graphics/Vulkan/Types/Struct/External.hsc" #-}
        type FieldIsArray "externalFenceFeatures" VkExternalFenceProperties
             = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = True

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

instance {-# OVERLAPPING #-}
         CanReadField "externalFenceFeatures" VkExternalFenceProperties
         where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (24))
{-# LINE 459 "src-gen/Graphics/Vulkan/Types/Struct/External.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "externalFenceFeatures" VkExternalFenceProperties
         where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (24)
{-# LINE 470 "src-gen/Graphics/Vulkan/Types/Struct/External.hsc" #-}

instance Show VkExternalFenceProperties where
        showsPrec d x
          = showString "VkExternalFenceProperties {" .
              showString "sType = " .
                showsPrec d (getField @"sType" x) .
                  showString ", " .
                    showString "pNext = " .
                      showsPrec d (getField @"pNext" x) .
                        showString ", " .
                          showString "exportFromImportedHandleTypes = " .
                            showsPrec d (getField @"exportFromImportedHandleTypes" x) .
                              showString ", " .
                                showString "compatibleHandleTypes = " .
                                  showsPrec d (getField @"compatibleHandleTypes" x) .
                                    showString ", " .
                                      showString "externalFenceFeatures = " .
                                        showsPrec d (getField @"externalFenceFeatures" x) .
                                          showChar '}'

-- | Alias for `VkExternalFenceProperties`
type VkExternalFencePropertiesKHR = VkExternalFenceProperties

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

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

        {-# INLINE (==) #-}

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

        {-# INLINE compare #-}

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

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

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

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

        {-# INLINE poke #-}

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

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

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

        {-# INLINE unsafeFromByteArrayOffset #-}

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

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

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

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

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

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

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

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

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

instance {-# OVERLAPPING #-}
         HasField "externalMemoryProperties" VkExternalImageFormatProperties
         where
        type FieldType "externalMemoryProperties"
               VkExternalImageFormatProperties
             = VkExternalMemoryProperties
        type FieldOptional "externalMemoryProperties"
               VkExternalImageFormatProperties
             = 'False -- ' closing tick for hsc2hs
        type FieldOffset "externalMemoryProperties"
               VkExternalImageFormatProperties
             =
             (16)
{-# LINE 631 "src-gen/Graphics/Vulkan/Types/Struct/External.hsc" #-}
        type FieldIsArray "externalMemoryProperties"
               VkExternalImageFormatProperties
             = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "externalMemoryProperties"
           VkExternalImageFormatProperties
         where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (16))
{-# LINE 650 "src-gen/Graphics/Vulkan/Types/Struct/External.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "externalMemoryProperties"
           VkExternalImageFormatProperties
         where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (16)
{-# LINE 662 "src-gen/Graphics/Vulkan/Types/Struct/External.hsc" #-}

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

-- | Alias for `VkExternalImageFormatProperties`
type VkExternalImageFormatPropertiesKHR =
     VkExternalImageFormatProperties

-- | > typedef struct VkExternalImageFormatPropertiesNV {
--   >     VkImageFormatProperties          imageFormatProperties;
--   >     VkExternalMemoryFeatureFlagsNV   externalMemoryFeatures;
--   >     VkExternalMemoryHandleTypeFlagsNV exportFromImportedHandleTypes;
--   >     VkExternalMemoryHandleTypeFlagsNV compatibleHandleTypes;
--   > } VkExternalImageFormatPropertiesNV;
--
--   <https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VkExternalImageFormatPropertiesNV VkExternalImageFormatPropertiesNV registry at www.khronos.org>
data VkExternalImageFormatPropertiesNV = VkExternalImageFormatPropertiesNV# Addr#
                                                                            ByteArray#

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

        {-# INLINE (==) #-}

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

        {-# INLINE compare #-}

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

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

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

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

        {-# INLINE poke #-}

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

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

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

        {-# INLINE unsafeFromByteArrayOffset #-}

instance VulkanMarshal VkExternalImageFormatPropertiesNV where
        type StructFields VkExternalImageFormatPropertiesNV =
             '["imageFormatProperties", "externalMemoryFeatures", -- ' closing tick for hsc2hs
               "exportFromImportedHandleTypes", "compatibleHandleTypes"]
        type CUnionType VkExternalImageFormatPropertiesNV = 'False -- ' closing tick for hsc2hs
        type ReturnedOnly VkExternalImageFormatPropertiesNV = 'True -- ' closing tick for hsc2hs
        type StructExtends VkExternalImageFormatPropertiesNV = '[] -- ' closing tick for hsc2hs

instance {-# OVERLAPPING #-}
         HasField "imageFormatProperties" VkExternalImageFormatPropertiesNV
         where
        type FieldType "imageFormatProperties"
               VkExternalImageFormatPropertiesNV
             = VkImageFormatProperties
        type FieldOptional "imageFormatProperties"
               VkExternalImageFormatPropertiesNV
             = 'False -- ' closing tick for hsc2hs
        type FieldOffset "imageFormatProperties"
               VkExternalImageFormatPropertiesNV
             =
             (0)
{-# LINE 754 "src-gen/Graphics/Vulkan/Types/Struct/External.hsc" #-}
        type FieldIsArray "imageFormatProperties"
               VkExternalImageFormatPropertiesNV
             = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "imageFormatProperties"
           VkExternalImageFormatPropertiesNV
         where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (0))
{-# LINE 773 "src-gen/Graphics/Vulkan/Types/Struct/External.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "imageFormatProperties"
           VkExternalImageFormatPropertiesNV
         where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (0)
{-# LINE 785 "src-gen/Graphics/Vulkan/Types/Struct/External.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "externalMemoryFeatures" VkExternalImageFormatPropertiesNV
         where
        type FieldType "externalMemoryFeatures"
               VkExternalImageFormatPropertiesNV
             = VkExternalMemoryFeatureFlagsNV
        type FieldOptional "externalMemoryFeatures"
               VkExternalImageFormatPropertiesNV
             = 'True -- ' closing tick for hsc2hs
        type FieldOffset "externalMemoryFeatures"
               VkExternalImageFormatPropertiesNV
             =
             (32)
{-# LINE 799 "src-gen/Graphics/Vulkan/Types/Struct/External.hsc" #-}
        type FieldIsArray "externalMemoryFeatures"
               VkExternalImageFormatPropertiesNV
             = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = True

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

instance {-# OVERLAPPING #-}
         CanReadField "externalMemoryFeatures"
           VkExternalImageFormatPropertiesNV
         where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (32))
{-# LINE 818 "src-gen/Graphics/Vulkan/Types/Struct/External.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "externalMemoryFeatures"
           VkExternalImageFormatPropertiesNV
         where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (32)
{-# LINE 830 "src-gen/Graphics/Vulkan/Types/Struct/External.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "exportFromImportedHandleTypes"
           VkExternalImageFormatPropertiesNV
         where
        type FieldType "exportFromImportedHandleTypes"
               VkExternalImageFormatPropertiesNV
             = VkExternalMemoryHandleTypeFlagsNV
        type FieldOptional "exportFromImportedHandleTypes"
               VkExternalImageFormatPropertiesNV
             = 'True -- ' closing tick for hsc2hs
        type FieldOffset "exportFromImportedHandleTypes"
               VkExternalImageFormatPropertiesNV
             =
             (36)
{-# LINE 845 "src-gen/Graphics/Vulkan/Types/Struct/External.hsc" #-}
        type FieldIsArray "exportFromImportedHandleTypes"
               VkExternalImageFormatPropertiesNV
             = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = True

        {-# INLINE fieldOffset #-}
        fieldOffset
          = (36)
{-# LINE 855 "src-gen/Graphics/Vulkan/Types/Struct/External.hsc" #-}

instance {-# OVERLAPPING #-}
         CanReadField "exportFromImportedHandleTypes"
           VkExternalImageFormatPropertiesNV
         where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (36))
{-# LINE 864 "src-gen/Graphics/Vulkan/Types/Struct/External.hsc" #-}

        {-# INLINE readField #-}
        readField p
          = peekByteOff p (36)
{-# LINE 868 "src-gen/Graphics/Vulkan/Types/Struct/External.hsc" #-}

instance {-# OVERLAPPING #-}
         CanWriteField "exportFromImportedHandleTypes"
           VkExternalImageFormatPropertiesNV
         where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (36)
{-# LINE 876 "src-gen/Graphics/Vulkan/Types/Struct/External.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "compatibleHandleTypes" VkExternalImageFormatPropertiesNV
         where
        type FieldType "compatibleHandleTypes"
               VkExternalImageFormatPropertiesNV
             = VkExternalMemoryHandleTypeFlagsNV
        type FieldOptional "compatibleHandleTypes"
               VkExternalImageFormatPropertiesNV
             = 'True -- ' closing tick for hsc2hs
        type FieldOffset "compatibleHandleTypes"
               VkExternalImageFormatPropertiesNV
             =
             (40)
{-# LINE 890 "src-gen/Graphics/Vulkan/Types/Struct/External.hsc" #-}
        type FieldIsArray "compatibleHandleTypes"
               VkExternalImageFormatPropertiesNV
             = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = True

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

instance {-# OVERLAPPING #-}
         CanReadField "compatibleHandleTypes"
           VkExternalImageFormatPropertiesNV
         where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (40))
{-# LINE 909 "src-gen/Graphics/Vulkan/Types/Struct/External.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "compatibleHandleTypes"
           VkExternalImageFormatPropertiesNV
         where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (40)
{-# LINE 921 "src-gen/Graphics/Vulkan/Types/Struct/External.hsc" #-}

instance Show VkExternalImageFormatPropertiesNV where
        showsPrec d x
          = showString "VkExternalImageFormatPropertiesNV {" .
              showString "imageFormatProperties = " .
                showsPrec d (getField @"imageFormatProperties" x) .
                  showString ", " .
                    showString "externalMemoryFeatures = " .
                      showsPrec d (getField @"externalMemoryFeatures" x) .
                        showString ", " .
                          showString "exportFromImportedHandleTypes = " .
                            showsPrec d (getField @"exportFromImportedHandleTypes" x) .
                              showString ", " .
                                showString "compatibleHandleTypes = " .
                                  showsPrec d (getField @"compatibleHandleTypes" x) . showChar '}'

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

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

        {-# INLINE (==) #-}

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

        {-# INLINE compare #-}

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

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

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

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

        {-# INLINE poke #-}

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

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

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

        {-# INLINE unsafeFromByteArrayOffset #-}

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

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

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

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

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

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

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

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

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

instance {-# OVERLAPPING #-}
         HasField "handleTypes" VkExternalMemoryBufferCreateInfo where
        type FieldType "handleTypes" VkExternalMemoryBufferCreateInfo =
             VkExternalMemoryHandleTypeFlags
        type FieldOptional "handleTypes" VkExternalMemoryBufferCreateInfo =
             'True -- ' closing tick for hsc2hs
        type FieldOffset "handleTypes" VkExternalMemoryBufferCreateInfo =
             (16)
{-# LINE 1073 "src-gen/Graphics/Vulkan/Types/Struct/External.hsc" #-}
        type FieldIsArray "handleTypes" VkExternalMemoryBufferCreateInfo =
             'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = True

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

instance {-# OVERLAPPING #-}
         CanReadField "handleTypes" VkExternalMemoryBufferCreateInfo where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (16))
{-# LINE 1089 "src-gen/Graphics/Vulkan/Types/Struct/External.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "handleTypes" VkExternalMemoryBufferCreateInfo where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (16)
{-# LINE 1099 "src-gen/Graphics/Vulkan/Types/Struct/External.hsc" #-}

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

-- | Alias for `VkExternalMemoryBufferCreateInfo`
type VkExternalMemoryBufferCreateInfoKHR =
     VkExternalMemoryBufferCreateInfo

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

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

        {-# INLINE (==) #-}

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

        {-# INLINE compare #-}

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

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

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

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

        {-# INLINE poke #-}

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

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

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

        {-# INLINE unsafeFromByteArrayOffset #-}

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

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

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

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

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

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

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

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

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

instance {-# OVERLAPPING #-}
         HasField "handleTypes" VkExternalMemoryImageCreateInfo where
        type FieldType "handleTypes" VkExternalMemoryImageCreateInfo =
             VkExternalMemoryHandleTypeFlags
        type FieldOptional "handleTypes" VkExternalMemoryImageCreateInfo =
             'False -- ' closing tick for hsc2hs
        type FieldOffset "handleTypes" VkExternalMemoryImageCreateInfo =
             (16)
{-# LINE 1249 "src-gen/Graphics/Vulkan/Types/Struct/External.hsc" #-}
        type FieldIsArray "handleTypes" VkExternalMemoryImageCreateInfo =
             'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "handleTypes" VkExternalMemoryImageCreateInfo where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (16))
{-# LINE 1265 "src-gen/Graphics/Vulkan/Types/Struct/External.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "handleTypes" VkExternalMemoryImageCreateInfo where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (16)
{-# LINE 1275 "src-gen/Graphics/Vulkan/Types/Struct/External.hsc" #-}

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

-- | Alias for `VkExternalMemoryImageCreateInfo`
type VkExternalMemoryImageCreateInfoKHR =
     VkExternalMemoryImageCreateInfo

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

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

        {-# INLINE (==) #-}

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

        {-# INLINE compare #-}

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

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

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

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

        {-# INLINE poke #-}

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

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

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

        {-# INLINE unsafeFromByteArrayOffset #-}

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

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

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

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

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

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

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

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

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

instance {-# OVERLAPPING #-}
         HasField "handleTypes" VkExternalMemoryImageCreateInfoNV where
        type FieldType "handleTypes" VkExternalMemoryImageCreateInfoNV =
             VkExternalMemoryHandleTypeFlagsNV
        type FieldOptional "handleTypes" VkExternalMemoryImageCreateInfoNV
             = 'True -- ' closing tick for hsc2hs
        type FieldOffset "handleTypes" VkExternalMemoryImageCreateInfoNV =
             (16)
{-# LINE 1430 "src-gen/Graphics/Vulkan/Types/Struct/External.hsc" #-}
        type FieldIsArray "handleTypes" VkExternalMemoryImageCreateInfoNV =
             'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = True

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

instance {-# OVERLAPPING #-}
         CanReadField "handleTypes" VkExternalMemoryImageCreateInfoNV where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (16))
{-# LINE 1446 "src-gen/Graphics/Vulkan/Types/Struct/External.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "handleTypes" VkExternalMemoryImageCreateInfoNV where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (16)
{-# LINE 1456 "src-gen/Graphics/Vulkan/Types/Struct/External.hsc" #-}

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

-- | > typedef struct VkExternalMemoryProperties {
--   >     VkExternalMemoryFeatureFlags  externalMemoryFeatures;
--   >     VkExternalMemoryHandleTypeFlags exportFromImportedHandleTypes;
--   >     VkExternalMemoryHandleTypeFlags compatibleHandleTypes;
--   > } VkExternalMemoryProperties;
--
--   <https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VkExternalMemoryProperties VkExternalMemoryProperties registry at www.khronos.org>
data VkExternalMemoryProperties = VkExternalMemoryProperties# Addr#
                                                              ByteArray#

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

        {-# INLINE (==) #-}

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

        {-# INLINE compare #-}

instance Storable VkExternalMemoryProperties where
        sizeOf ~_ = (12)
{-# LINE 1494 "src-gen/Graphics/Vulkan/Types/Struct/External.hsc" #-}

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

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

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

        {-# INLINE poke #-}

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

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

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

        {-# INLINE unsafeFromByteArrayOffset #-}

instance VulkanMarshal VkExternalMemoryProperties where
        type StructFields VkExternalMemoryProperties =
             '["externalMemoryFeatures", "exportFromImportedHandleTypes", -- ' closing tick for hsc2hs
               "compatibleHandleTypes"]
        type CUnionType VkExternalMemoryProperties = 'False -- ' closing tick for hsc2hs
        type ReturnedOnly VkExternalMemoryProperties = 'True -- ' closing tick for hsc2hs
        type StructExtends VkExternalMemoryProperties = '[] -- ' closing tick for hsc2hs

instance {-# OVERLAPPING #-}
         HasField "externalMemoryFeatures" VkExternalMemoryProperties where
        type FieldType "externalMemoryFeatures" VkExternalMemoryProperties
             = VkExternalMemoryFeatureFlags
        type FieldOptional "externalMemoryFeatures"
               VkExternalMemoryProperties
             = 'False -- ' closing tick for hsc2hs
        type FieldOffset "externalMemoryFeatures"
               VkExternalMemoryProperties
             =
             (0)
{-# LINE 1539 "src-gen/Graphics/Vulkan/Types/Struct/External.hsc" #-}
        type FieldIsArray "externalMemoryFeatures"
               VkExternalMemoryProperties
             = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "externalMemoryFeatures" VkExternalMemoryProperties
         where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (0))
{-# LINE 1557 "src-gen/Graphics/Vulkan/Types/Struct/External.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "externalMemoryFeatures" VkExternalMemoryProperties
         where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (0)
{-# LINE 1568 "src-gen/Graphics/Vulkan/Types/Struct/External.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "exportFromImportedHandleTypes" VkExternalMemoryProperties
         where
        type FieldType "exportFromImportedHandleTypes"
               VkExternalMemoryProperties
             = VkExternalMemoryHandleTypeFlags
        type FieldOptional "exportFromImportedHandleTypes"
               VkExternalMemoryProperties
             = 'True -- ' closing tick for hsc2hs
        type FieldOffset "exportFromImportedHandleTypes"
               VkExternalMemoryProperties
             =
             (4)
{-# LINE 1582 "src-gen/Graphics/Vulkan/Types/Struct/External.hsc" #-}
        type FieldIsArray "exportFromImportedHandleTypes"
               VkExternalMemoryProperties
             = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = True

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

instance {-# OVERLAPPING #-}
         CanReadField "exportFromImportedHandleTypes"
           VkExternalMemoryProperties
         where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (4))
{-# LINE 1601 "src-gen/Graphics/Vulkan/Types/Struct/External.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "exportFromImportedHandleTypes"
           VkExternalMemoryProperties
         where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (4)
{-# LINE 1613 "src-gen/Graphics/Vulkan/Types/Struct/External.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "compatibleHandleTypes" VkExternalMemoryProperties where
        type FieldType "compatibleHandleTypes" VkExternalMemoryProperties =
             VkExternalMemoryHandleTypeFlags
        type FieldOptional "compatibleHandleTypes"
               VkExternalMemoryProperties
             = 'False -- ' closing tick for hsc2hs
        type FieldOffset "compatibleHandleTypes" VkExternalMemoryProperties
             =
             (8)
{-# LINE 1624 "src-gen/Graphics/Vulkan/Types/Struct/External.hsc" #-}
        type FieldIsArray "compatibleHandleTypes"
               VkExternalMemoryProperties
             = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "compatibleHandleTypes" VkExternalMemoryProperties
         where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (8))
{-# LINE 1642 "src-gen/Graphics/Vulkan/Types/Struct/External.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "compatibleHandleTypes" VkExternalMemoryProperties
         where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (8)
{-# LINE 1653 "src-gen/Graphics/Vulkan/Types/Struct/External.hsc" #-}

instance Show VkExternalMemoryProperties where
        showsPrec d x
          = showString "VkExternalMemoryProperties {" .
              showString "externalMemoryFeatures = " .
                showsPrec d (getField @"externalMemoryFeatures" x) .
                  showString ", " .
                    showString "exportFromImportedHandleTypes = " .
                      showsPrec d (getField @"exportFromImportedHandleTypes" x) .
                        showString ", " .
                          showString "compatibleHandleTypes = " .
                            showsPrec d (getField @"compatibleHandleTypes" x) . showChar '}'

-- | Alias for `VkExternalMemoryProperties`
type VkExternalMemoryPropertiesKHR = VkExternalMemoryProperties

-- | > typedef struct VkExternalSemaphoreProperties {
--   >     VkStructureType sType;
--   >     void*                            pNext;
--   >     VkExternalSemaphoreHandleTypeFlags exportFromImportedHandleTypes;
--   >     VkExternalSemaphoreHandleTypeFlags compatibleHandleTypes;
--   >     VkExternalSemaphoreFeatureFlags externalSemaphoreFeatures;
--   > } VkExternalSemaphoreProperties;
--
--   <https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VkExternalSemaphoreProperties VkExternalSemaphoreProperties registry at www.khronos.org>
data VkExternalSemaphoreProperties = VkExternalSemaphoreProperties# Addr#
                                                                    ByteArray#

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

        {-# INLINE (==) #-}

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

        {-# INLINE compare #-}

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

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

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

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

        {-# INLINE poke #-}

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

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

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

        {-# INLINE unsafeFromByteArrayOffset #-}

instance VulkanMarshal VkExternalSemaphoreProperties where
        type StructFields VkExternalSemaphoreProperties =
             '["sType", "pNext", "exportFromImportedHandleTypes", -- ' closing tick for hsc2hs
               "compatibleHandleTypes", "externalSemaphoreFeatures"]
        type CUnionType VkExternalSemaphoreProperties = 'False -- ' closing tick for hsc2hs
        type ReturnedOnly VkExternalSemaphoreProperties = 'True -- ' closing tick for hsc2hs
        type StructExtends VkExternalSemaphoreProperties = '[] -- ' closing tick for hsc2hs

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

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

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

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

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

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

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

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

instance {-# OVERLAPPING #-}
         HasField "exportFromImportedHandleTypes"
           VkExternalSemaphoreProperties
         where
        type FieldType "exportFromImportedHandleTypes"
               VkExternalSemaphoreProperties
             = VkExternalSemaphoreHandleTypeFlags
        type FieldOptional "exportFromImportedHandleTypes"
               VkExternalSemaphoreProperties
             = 'False -- ' closing tick for hsc2hs
        type FieldOffset "exportFromImportedHandleTypes"
               VkExternalSemaphoreProperties
             =
             (16)
{-# LINE 1810 "src-gen/Graphics/Vulkan/Types/Struct/External.hsc" #-}
        type FieldIsArray "exportFromImportedHandleTypes"
               VkExternalSemaphoreProperties
             = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "exportFromImportedHandleTypes"
           VkExternalSemaphoreProperties
         where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (16))
{-# LINE 1829 "src-gen/Graphics/Vulkan/Types/Struct/External.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "exportFromImportedHandleTypes"
           VkExternalSemaphoreProperties
         where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (16)
{-# LINE 1841 "src-gen/Graphics/Vulkan/Types/Struct/External.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "compatibleHandleTypes" VkExternalSemaphoreProperties
         where
        type FieldType "compatibleHandleTypes"
               VkExternalSemaphoreProperties
             = VkExternalSemaphoreHandleTypeFlags
        type FieldOptional "compatibleHandleTypes"
               VkExternalSemaphoreProperties
             = 'False -- ' closing tick for hsc2hs
        type FieldOffset "compatibleHandleTypes"
               VkExternalSemaphoreProperties
             =
             (20)
{-# LINE 1855 "src-gen/Graphics/Vulkan/Types/Struct/External.hsc" #-}
        type FieldIsArray "compatibleHandleTypes"
               VkExternalSemaphoreProperties
             = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "compatibleHandleTypes" VkExternalSemaphoreProperties
         where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (20))
{-# LINE 1873 "src-gen/Graphics/Vulkan/Types/Struct/External.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "compatibleHandleTypes" VkExternalSemaphoreProperties
         where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (20)
{-# LINE 1884 "src-gen/Graphics/Vulkan/Types/Struct/External.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "externalSemaphoreFeatures" VkExternalSemaphoreProperties
         where
        type FieldType "externalSemaphoreFeatures"
               VkExternalSemaphoreProperties
             = VkExternalSemaphoreFeatureFlags
        type FieldOptional "externalSemaphoreFeatures"
               VkExternalSemaphoreProperties
             = 'True -- ' closing tick for hsc2hs
        type FieldOffset "externalSemaphoreFeatures"
               VkExternalSemaphoreProperties
             =
             (24)
{-# LINE 1898 "src-gen/Graphics/Vulkan/Types/Struct/External.hsc" #-}
        type FieldIsArray "externalSemaphoreFeatures"
               VkExternalSemaphoreProperties
             = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = True

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

instance {-# OVERLAPPING #-}
         CanReadField "externalSemaphoreFeatures"
           VkExternalSemaphoreProperties
         where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (24))
{-# LINE 1917 "src-gen/Graphics/Vulkan/Types/Struct/External.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "externalSemaphoreFeatures"
           VkExternalSemaphoreProperties
         where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (24)
{-# LINE 1929 "src-gen/Graphics/Vulkan/Types/Struct/External.hsc" #-}

instance Show VkExternalSemaphoreProperties where
        showsPrec d x
          = showString "VkExternalSemaphoreProperties {" .
              showString "sType = " .
                showsPrec d (getField @"sType" x) .
                  showString ", " .
                    showString "pNext = " .
                      showsPrec d (getField @"pNext" x) .
                        showString ", " .
                          showString "exportFromImportedHandleTypes = " .
                            showsPrec d (getField @"exportFromImportedHandleTypes" x) .
                              showString ", " .
                                showString "compatibleHandleTypes = " .
                                  showsPrec d (getField @"compatibleHandleTypes" x) .
                                    showString ", " .
                                      showString "externalSemaphoreFeatures = " .
                                        showsPrec d (getField @"externalSemaphoreFeatures" x) .
                                          showChar '}'

-- | Alias for `VkExternalSemaphoreProperties`
type VkExternalSemaphorePropertiesKHR =
     VkExternalSemaphoreProperties