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

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

{-# LANGUAGE DataKinds             #-}
{-# LANGUAGE FlexibleInstances     #-}
{-# LANGUAGE MagicHash             #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE Strict                #-}
{-# LANGUAGE TypeApplications      #-}
{-# LANGUAGE TypeFamilies          #-}
module Graphics.Vulkan.Types.Struct.CopyDescriptorSet
       (VkCopyDescriptorSet(..)) 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.StructureType (VkStructureType)
import           Graphics.Vulkan.Types.Handles            (VkDescriptorSet)
import           System.IO.Unsafe                         (unsafeDupablePerformIO)

-- | > typedef struct VkCopyDescriptorSet {
--   >     VkStructureType sType;
--   >     const void*            pNext;
--   >     VkDescriptorSet        srcSet;
--   >     uint32_t               srcBinding;
--   >     uint32_t               srcArrayElement;
--   >     VkDescriptorSet        dstSet;
--   >     uint32_t               dstBinding;
--   >     uint32_t               dstArrayElement;
--   >     uint32_t               descriptorCount;
--   > } VkCopyDescriptorSet;
--
--   <https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VkCopyDescriptorSet VkCopyDescriptorSet registry at www.khronos.org>
data VkCopyDescriptorSet = VkCopyDescriptorSet# Addr# ByteArray#

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

        {-# INLINE (==) #-}

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

        {-# INLINE compare #-}

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

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

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

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

        {-# INLINE poke #-}

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

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

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

        {-# INLINE unsafeFromByteArrayOffset #-}

instance VulkanMarshal VkCopyDescriptorSet where
        type StructFields VkCopyDescriptorSet =
             '["sType", "pNext", "srcSet", "srcBinding", "srcArrayElement", -- ' closing tick for hsc2hs
               "dstSet", "dstBinding", "dstArrayElement", "descriptorCount"]
        type CUnionType VkCopyDescriptorSet = 'False -- ' closing tick for hsc2hs
        type ReturnedOnly VkCopyDescriptorSet = 'False -- ' closing tick for hsc2hs
        type StructExtends VkCopyDescriptorSet = '[] -- ' closing tick for hsc2hs

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

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

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

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

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

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

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

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

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "srcSet" VkCopyDescriptorSet where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (16))
{-# LINE 165 "src-gen/Graphics/Vulkan/Types/Struct/CopyDescriptorSet.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "srcSet" VkCopyDescriptorSet where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (16)
{-# LINE 175 "src-gen/Graphics/Vulkan/Types/Struct/CopyDescriptorSet.hsc" #-}

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "srcBinding" VkCopyDescriptorSet where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (24))
{-# LINE 196 "src-gen/Graphics/Vulkan/Types/Struct/CopyDescriptorSet.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "srcBinding" VkCopyDescriptorSet where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (24)
{-# LINE 206 "src-gen/Graphics/Vulkan/Types/Struct/CopyDescriptorSet.hsc" #-}

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "srcArrayElement" VkCopyDescriptorSet where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (28))
{-# LINE 228 "src-gen/Graphics/Vulkan/Types/Struct/CopyDescriptorSet.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "srcArrayElement" VkCopyDescriptorSet where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (28)
{-# LINE 238 "src-gen/Graphics/Vulkan/Types/Struct/CopyDescriptorSet.hsc" #-}

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "dstSet" VkCopyDescriptorSet where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (32))
{-# LINE 259 "src-gen/Graphics/Vulkan/Types/Struct/CopyDescriptorSet.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "dstSet" VkCopyDescriptorSet where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (32)
{-# LINE 269 "src-gen/Graphics/Vulkan/Types/Struct/CopyDescriptorSet.hsc" #-}

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "dstBinding" VkCopyDescriptorSet where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (40))
{-# LINE 290 "src-gen/Graphics/Vulkan/Types/Struct/CopyDescriptorSet.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "dstBinding" VkCopyDescriptorSet where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (40)
{-# LINE 300 "src-gen/Graphics/Vulkan/Types/Struct/CopyDescriptorSet.hsc" #-}

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

        {-# INLINE fieldOffset #-}
        fieldOffset
          = (44)
{-# LINE 315 "src-gen/Graphics/Vulkan/Types/Struct/CopyDescriptorSet.hsc" #-}

instance {-# OVERLAPPING #-}
         CanReadField "dstArrayElement" VkCopyDescriptorSet where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (44))
{-# LINE 322 "src-gen/Graphics/Vulkan/Types/Struct/CopyDescriptorSet.hsc" #-}

        {-# INLINE readField #-}
        readField p
          = peekByteOff p (44)
{-# LINE 326 "src-gen/Graphics/Vulkan/Types/Struct/CopyDescriptorSet.hsc" #-}

instance {-# OVERLAPPING #-}
         CanWriteField "dstArrayElement" VkCopyDescriptorSet where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (44)
{-# LINE 332 "src-gen/Graphics/Vulkan/Types/Struct/CopyDescriptorSet.hsc" #-}

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "descriptorCount" VkCopyDescriptorSet where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (48))
{-# LINE 354 "src-gen/Graphics/Vulkan/Types/Struct/CopyDescriptorSet.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "descriptorCount" VkCopyDescriptorSet where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (48)
{-# LINE 364 "src-gen/Graphics/Vulkan/Types/Struct/CopyDescriptorSet.hsc" #-}

instance Show VkCopyDescriptorSet where
        showsPrec d x
          = showString "VkCopyDescriptorSet {" .
              showString "sType = " .
                showsPrec d (getField @"sType" x) .
                  showString ", " .
                    showString "pNext = " .
                      showsPrec d (getField @"pNext" x) .
                        showString ", " .
                          showString "srcSet = " .
                            showsPrec d (getField @"srcSet" x) .
                              showString ", " .
                                showString "srcBinding = " .
                                  showsPrec d (getField @"srcBinding" x) .
                                    showString ", " .
                                      showString "srcArrayElement = " .
                                        showsPrec d (getField @"srcArrayElement" 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)
                                                                  . showChar '}'