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

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

{-# LANGUAGE DataKinds             #-}
{-# LANGUAGE FlexibleInstances     #-}
{-# LANGUAGE MagicHash             #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE Strict                #-}
{-# LANGUAGE TypeApplications      #-}
{-# LANGUAGE TypeFamilies          #-}
module Graphics.Vulkan.Types.Struct.WriteDescriptorSet
       (VkWriteDescriptorSet(..)) 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.Descriptor    (VkDescriptorType)
import           Graphics.Vulkan.Types.Enum.StructureType (VkStructureType)
import           Graphics.Vulkan.Types.Handles            (VkBufferView,
                                                           VkDescriptorSet)
import           Graphics.Vulkan.Types.Struct.Descriptor  (VkDescriptorBufferInfo,
                                                           VkDescriptorImageInfo)
import           System.IO.Unsafe                         (unsafeDupablePerformIO)

-- | > typedef struct VkWriteDescriptorSet {
--   >     VkStructureType sType;
--   >     const void*            pNext;
--   >     VkDescriptorSet        dstSet;
--   >     uint32_t               dstBinding;
--   >     uint32_t               dstArrayElement;
--   >     uint32_t               descriptorCount;
--   >     VkDescriptorType       descriptorType;
--   >     const VkDescriptorImageInfo* pImageInfo;
--   >     const VkDescriptorBufferInfo* pBufferInfo;
--   >     const VkBufferView*    pTexelBufferView;
--   > } VkWriteDescriptorSet;
--
--   <https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VkWriteDescriptorSet VkWriteDescriptorSet registry at www.khronos.org>
data VkWriteDescriptorSet = VkWriteDescriptorSet# Addr# ByteArray#

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

        {-# INLINE (==) #-}

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

        {-# INLINE compare #-}

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

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

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

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

        {-# INLINE poke #-}

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

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

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

        {-# INLINE unsafeFromByteArrayOffset #-}

instance VulkanMarshal VkWriteDescriptorSet where
        type StructFields VkWriteDescriptorSet =
             '["sType", "pNext", "dstSet", "dstBinding", "dstArrayElement", -- ' closing tick for hsc2hs
               "descriptorCount", "descriptorType", "pImageInfo", "pBufferInfo",
               "pTexelBufferView"]
        type CUnionType VkWriteDescriptorSet = 'False -- ' closing tick for hsc2hs
        type ReturnedOnly VkWriteDescriptorSet = 'False -- ' closing tick for hsc2hs
        type StructExtends VkWriteDescriptorSet = '[] -- ' closing tick for hsc2hs

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

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

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

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

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

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

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

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

instance {-# OVERLAPPING #-} HasField "dstSet" VkWriteDescriptorSet
         where
        type FieldType "dstSet" VkWriteDescriptorSet = VkDescriptorSet
        type FieldOptional "dstSet" VkWriteDescriptorSet = 'False -- ' closing tick for hsc2hs
        type FieldOffset "dstSet" VkWriteDescriptorSet =
             (16)
{-# LINE 157 "src-gen/Graphics/Vulkan/Types/Struct/WriteDescriptorSet.hsc" #-}
        type FieldIsArray "dstSet" VkWriteDescriptorSet = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "dstSet" VkWriteDescriptorSet where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (16))
{-# LINE 171 "src-gen/Graphics/Vulkan/Types/Struct/WriteDescriptorSet.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "dstSet" VkWriteDescriptorSet where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (16)
{-# LINE 181 "src-gen/Graphics/Vulkan/Types/Struct/WriteDescriptorSet.hsc" #-}

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "dstBinding" VkWriteDescriptorSet where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (24))
{-# LINE 203 "src-gen/Graphics/Vulkan/Types/Struct/WriteDescriptorSet.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "dstBinding" VkWriteDescriptorSet where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (24)
{-# LINE 213 "src-gen/Graphics/Vulkan/Types/Struct/WriteDescriptorSet.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "dstArrayElement" VkWriteDescriptorSet where
        type FieldType "dstArrayElement" VkWriteDescriptorSet = Word32
        type FieldOptional "dstArrayElement" VkWriteDescriptorSet = 'False -- ' closing tick for hsc2hs
        type FieldOffset "dstArrayElement" VkWriteDescriptorSet =
             (28)
{-# LINE 220 "src-gen/Graphics/Vulkan/Types/Struct/WriteDescriptorSet.hsc" #-}
        type FieldIsArray "dstArrayElement" VkWriteDescriptorSet = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "dstArrayElement" VkWriteDescriptorSet where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (28))
{-# LINE 235 "src-gen/Graphics/Vulkan/Types/Struct/WriteDescriptorSet.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "dstArrayElement" VkWriteDescriptorSet where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (28)
{-# LINE 245 "src-gen/Graphics/Vulkan/Types/Struct/WriteDescriptorSet.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "descriptorCount" VkWriteDescriptorSet where
        type FieldType "descriptorCount" VkWriteDescriptorSet = Word32
        type FieldOptional "descriptorCount" VkWriteDescriptorSet = 'False -- ' closing tick for hsc2hs
        type FieldOffset "descriptorCount" VkWriteDescriptorSet =
             (32)
{-# LINE 252 "src-gen/Graphics/Vulkan/Types/Struct/WriteDescriptorSet.hsc" #-}
        type FieldIsArray "descriptorCount" VkWriteDescriptorSet = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "descriptorCount" VkWriteDescriptorSet where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (32))
{-# LINE 267 "src-gen/Graphics/Vulkan/Types/Struct/WriteDescriptorSet.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "descriptorCount" VkWriteDescriptorSet where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (32)
{-# LINE 277 "src-gen/Graphics/Vulkan/Types/Struct/WriteDescriptorSet.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "descriptorType" VkWriteDescriptorSet where
        type FieldType "descriptorType" VkWriteDescriptorSet =
             VkDescriptorType
        type FieldOptional "descriptorType" VkWriteDescriptorSet = 'False -- ' closing tick for hsc2hs
        type FieldOffset "descriptorType" VkWriteDescriptorSet =
             (36)
{-# LINE 285 "src-gen/Graphics/Vulkan/Types/Struct/WriteDescriptorSet.hsc" #-}
        type FieldIsArray "descriptorType" VkWriteDescriptorSet = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "descriptorType" VkWriteDescriptorSet where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (36))
{-# LINE 300 "src-gen/Graphics/Vulkan/Types/Struct/WriteDescriptorSet.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "descriptorType" VkWriteDescriptorSet where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (36)
{-# LINE 310 "src-gen/Graphics/Vulkan/Types/Struct/WriteDescriptorSet.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "pImageInfo" VkWriteDescriptorSet where
        type FieldType "pImageInfo" VkWriteDescriptorSet =
             Ptr VkDescriptorImageInfo
        type FieldOptional "pImageInfo" VkWriteDescriptorSet = 'False -- ' closing tick for hsc2hs
        type FieldOffset "pImageInfo" VkWriteDescriptorSet =
             (40)
{-# LINE 318 "src-gen/Graphics/Vulkan/Types/Struct/WriteDescriptorSet.hsc" #-}
        type FieldIsArray "pImageInfo" VkWriteDescriptorSet = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "pImageInfo" VkWriteDescriptorSet where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (40))
{-# LINE 333 "src-gen/Graphics/Vulkan/Types/Struct/WriteDescriptorSet.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "pImageInfo" VkWriteDescriptorSet where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (40)
{-# LINE 343 "src-gen/Graphics/Vulkan/Types/Struct/WriteDescriptorSet.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "pBufferInfo" VkWriteDescriptorSet where
        type FieldType "pBufferInfo" VkWriteDescriptorSet =
             Ptr VkDescriptorBufferInfo
        type FieldOptional "pBufferInfo" VkWriteDescriptorSet = 'False -- ' closing tick for hsc2hs
        type FieldOffset "pBufferInfo" VkWriteDescriptorSet =
             (48)
{-# LINE 351 "src-gen/Graphics/Vulkan/Types/Struct/WriteDescriptorSet.hsc" #-}
        type FieldIsArray "pBufferInfo" VkWriteDescriptorSet = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "pBufferInfo" VkWriteDescriptorSet where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (48))
{-# LINE 366 "src-gen/Graphics/Vulkan/Types/Struct/WriteDescriptorSet.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "pBufferInfo" VkWriteDescriptorSet where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (48)
{-# LINE 376 "src-gen/Graphics/Vulkan/Types/Struct/WriteDescriptorSet.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "pTexelBufferView" VkWriteDescriptorSet where
        type FieldType "pTexelBufferView" VkWriteDescriptorSet =
             Ptr VkBufferView
        type FieldOptional "pTexelBufferView" VkWriteDescriptorSet = 'False -- ' closing tick for hsc2hs
        type FieldOffset "pTexelBufferView" VkWriteDescriptorSet =
             (56)
{-# LINE 384 "src-gen/Graphics/Vulkan/Types/Struct/WriteDescriptorSet.hsc" #-}
        type FieldIsArray "pTexelBufferView" VkWriteDescriptorSet = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "pTexelBufferView" VkWriteDescriptorSet where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (56))
{-# LINE 399 "src-gen/Graphics/Vulkan/Types/Struct/WriteDescriptorSet.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "pTexelBufferView" VkWriteDescriptorSet where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (56)
{-# LINE 409 "src-gen/Graphics/Vulkan/Types/Struct/WriteDescriptorSet.hsc" #-}

instance Show VkWriteDescriptorSet where
        showsPrec d x
          = showString "VkWriteDescriptorSet {" .
              showString "sType = " .
                showsPrec d (getField @"sType" x) .
                  showString ", " .
                    showString "pNext = " .
                      showsPrec d (getField @"pNext" x) .
                        showString ", " .
                          showString "dstSet = " .
                            showsPrec d (getField @"dstSet" x) .
                              showString ", " .
                                showString "dstBinding = " .
                                  showsPrec d (getField @"dstBinding" x) .
                                    showString ", " .
                                      showString "dstArrayElement = " .
                                        showsPrec d (getField @"dstArrayElement" x) .
                                          showString ", " .
                                            showString "descriptorCount = " .
                                              showsPrec d (getField @"descriptorCount" x) .
                                                showString ", " .
                                                  showString "descriptorType = " .
                                                    showsPrec d (getField @"descriptorType" x) .
                                                      showString ", " .
                                                        showString "pImageInfo = " .
                                                          showsPrec d (getField @"pImageInfo" x) .
                                                            showString ", " .
                                                              showString "pBufferInfo = " .
                                                                showsPrec d
                                                                  (getField @"pBufferInfo" x)
                                                                  .
                                                                  showString ", " .
                                                                    showString "pTexelBufferView = "
                                                                      .
                                                                      showsPrec d
                                                                        (getField
                                                                           @"pTexelBufferView"
                                                                           x)
                                                                        . showChar '}'