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

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

{-# LANGUAGE DataKinds             #-}
{-# LANGUAGE FlexibleInstances     #-}
{-# LANGUAGE MagicHash             #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE Strict                #-}
{-# LANGUAGE TypeApplications      #-}
{-# LANGUAGE TypeFamilies          #-}
module Graphics.Vulkan.Types.Struct.SampleLocation
       (VkSampleLocationEXT(..), VkSampleLocationsInfoEXT(..)) 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.SampleCountFlags (VkSampleCountFlagBits)
import           Graphics.Vulkan.Types.Enum.StructureType    (VkStructureType)
import           Graphics.Vulkan.Types.Struct.Extent         (VkExtent2D)
import           Graphics.Vulkan.Types.Struct.Image          (VkImageMemoryBarrier)
import           System.IO.Unsafe                            (unsafeDupablePerformIO)

-- | > typedef struct VkSampleLocationEXT {
--   >     float                            x;
--   >     float                            y;
--   > } VkSampleLocationEXT;
--
--   <https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VkSampleLocationEXT VkSampleLocationEXT registry at www.khronos.org>
data VkSampleLocationEXT = VkSampleLocationEXT# Addr# ByteArray#

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

        {-# INLINE (==) #-}

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

        {-# INLINE compare #-}

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

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

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

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

        {-# INLINE poke #-}

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

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

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

        {-# INLINE unsafeFromByteArrayOffset #-}

instance VulkanMarshal VkSampleLocationEXT where
        type StructFields VkSampleLocationEXT = '["x", "y"] -- ' closing tick for hsc2hs
        type CUnionType VkSampleLocationEXT = 'False -- ' closing tick for hsc2hs
        type ReturnedOnly VkSampleLocationEXT = 'False -- ' closing tick for hsc2hs
        type StructExtends VkSampleLocationEXT = '[] -- ' closing tick for hsc2hs

instance {-# OVERLAPPING #-} HasField "x" VkSampleLocationEXT where
        type FieldType "x" VkSampleLocationEXT = Float
{-# LINE 78 "src-gen/Graphics/Vulkan/Types/Struct/SampleLocation.hsc" #-}
        type FieldOptional "x" VkSampleLocationEXT = 'False -- ' closing tick for hsc2hs
        type FieldOffset "x" VkSampleLocationEXT =
             (0)
{-# LINE 81 "src-gen/Graphics/Vulkan/Types/Struct/SampleLocation.hsc" #-}
        type FieldIsArray "x" VkSampleLocationEXT = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

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

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

instance {-# OVERLAPPING #-} CanWriteField "x" VkSampleLocationEXT
         where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (0)
{-# LINE 105 "src-gen/Graphics/Vulkan/Types/Struct/SampleLocation.hsc" #-}

instance {-# OVERLAPPING #-} HasField "y" VkSampleLocationEXT where
        type FieldType "y" VkSampleLocationEXT = Float
{-# LINE 108 "src-gen/Graphics/Vulkan/Types/Struct/SampleLocation.hsc" #-}
        type FieldOptional "y" VkSampleLocationEXT = 'False -- ' closing tick for hsc2hs
        type FieldOffset "y" VkSampleLocationEXT =
             (4)
{-# LINE 111 "src-gen/Graphics/Vulkan/Types/Struct/SampleLocation.hsc" #-}
        type FieldIsArray "y" VkSampleLocationEXT = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-} CanReadField "y" VkSampleLocationEXT
         where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (4))
{-# LINE 125 "src-gen/Graphics/Vulkan/Types/Struct/SampleLocation.hsc" #-}

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

instance {-# OVERLAPPING #-} CanWriteField "y" VkSampleLocationEXT
         where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (4)
{-# LINE 135 "src-gen/Graphics/Vulkan/Types/Struct/SampleLocation.hsc" #-}

instance Show VkSampleLocationEXT where
        showsPrec d x
          = showString "VkSampleLocationEXT {" .
              showString "x = " .
                showsPrec d (getField @"x" x) .
                  showString ", " .
                    showString "y = " . showsPrec d (getField @"y" x) . showChar '}'

-- | > typedef struct VkSampleLocationsInfoEXT {
--   >     VkStructureType sType;
--   >     const void*                      pNext;
--   >     VkSampleCountFlagBits            sampleLocationsPerPixel;
--   >     VkExtent2D                       sampleLocationGridSize;
--   >     uint32_t                         sampleLocationsCount;
--   >     const VkSampleLocationEXT* pSampleLocations;
--   > } VkSampleLocationsInfoEXT;
--
--   <https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VkSampleLocationsInfoEXT VkSampleLocationsInfoEXT registry at www.khronos.org>
data VkSampleLocationsInfoEXT = VkSampleLocationsInfoEXT# Addr#
                                                          ByteArray#

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

        {-# INLINE (==) #-}

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

        {-# INLINE compare #-}

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

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

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

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

        {-# INLINE poke #-}

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

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

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

        {-# INLINE unsafeFromByteArrayOffset #-}

instance VulkanMarshal VkSampleLocationsInfoEXT where
        type StructFields VkSampleLocationsInfoEXT =
             '["sType", "pNext", "sampleLocationsPerPixel", -- ' closing tick for hsc2hs
               "sampleLocationGridSize", "sampleLocationsCount",
               "pSampleLocations"]
        type CUnionType VkSampleLocationsInfoEXT = 'False -- ' closing tick for hsc2hs
        type ReturnedOnly VkSampleLocationsInfoEXT = 'False -- ' closing tick for hsc2hs
        type StructExtends VkSampleLocationsInfoEXT =
             '[VkImageMemoryBarrier] -- ' closing tick for hsc2hs

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

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

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

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

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

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

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

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

instance {-# OVERLAPPING #-}
         HasField "sampleLocationsPerPixel" VkSampleLocationsInfoEXT where
        type FieldType "sampleLocationsPerPixel" VkSampleLocationsInfoEXT =
             VkSampleCountFlagBits
        type FieldOptional "sampleLocationsPerPixel"
               VkSampleLocationsInfoEXT
             = 'False -- ' closing tick for hsc2hs
        type FieldOffset "sampleLocationsPerPixel" VkSampleLocationsInfoEXT
             =
             (16)
{-# LINE 278 "src-gen/Graphics/Vulkan/Types/Struct/SampleLocation.hsc" #-}
        type FieldIsArray "sampleLocationsPerPixel"
               VkSampleLocationsInfoEXT
             = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "sampleLocationsPerPixel" VkSampleLocationsInfoEXT
         where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (16))
{-# LINE 296 "src-gen/Graphics/Vulkan/Types/Struct/SampleLocation.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "sampleLocationsPerPixel" VkSampleLocationsInfoEXT
         where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (16)
{-# LINE 307 "src-gen/Graphics/Vulkan/Types/Struct/SampleLocation.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "sampleLocationGridSize" VkSampleLocationsInfoEXT where
        type FieldType "sampleLocationGridSize" VkSampleLocationsInfoEXT =
             VkExtent2D
        type FieldOptional "sampleLocationGridSize"
               VkSampleLocationsInfoEXT
             = 'False -- ' closing tick for hsc2hs
        type FieldOffset "sampleLocationGridSize" VkSampleLocationsInfoEXT
             =
             (20)
{-# LINE 318 "src-gen/Graphics/Vulkan/Types/Struct/SampleLocation.hsc" #-}
        type FieldIsArray "sampleLocationGridSize" VkSampleLocationsInfoEXT
             = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "sampleLocationGridSize" VkSampleLocationsInfoEXT
         where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (20))
{-# LINE 335 "src-gen/Graphics/Vulkan/Types/Struct/SampleLocation.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "sampleLocationGridSize" VkSampleLocationsInfoEXT
         where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (20)
{-# LINE 346 "src-gen/Graphics/Vulkan/Types/Struct/SampleLocation.hsc" #-}

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "sampleLocationsCount" VkSampleLocationsInfoEXT where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (28))
{-# LINE 371 "src-gen/Graphics/Vulkan/Types/Struct/SampleLocation.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "sampleLocationsCount" VkSampleLocationsInfoEXT where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (28)
{-# LINE 381 "src-gen/Graphics/Vulkan/Types/Struct/SampleLocation.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "pSampleLocations" VkSampleLocationsInfoEXT where
        type FieldType "pSampleLocations" VkSampleLocationsInfoEXT =
             Ptr VkSampleLocationEXT
        type FieldOptional "pSampleLocations" VkSampleLocationsInfoEXT =
             'False -- ' closing tick for hsc2hs
        type FieldOffset "pSampleLocations" VkSampleLocationsInfoEXT =
             (32)
{-# LINE 390 "src-gen/Graphics/Vulkan/Types/Struct/SampleLocation.hsc" #-}
        type FieldIsArray "pSampleLocations" VkSampleLocationsInfoEXT =
             'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "pSampleLocations" VkSampleLocationsInfoEXT where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (32))
{-# LINE 406 "src-gen/Graphics/Vulkan/Types/Struct/SampleLocation.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "pSampleLocations" VkSampleLocationsInfoEXT where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (32)
{-# LINE 416 "src-gen/Graphics/Vulkan/Types/Struct/SampleLocation.hsc" #-}

instance Show VkSampleLocationsInfoEXT where
        showsPrec d x
          = showString "VkSampleLocationsInfoEXT {" .
              showString "sType = " .
                showsPrec d (getField @"sType" x) .
                  showString ", " .
                    showString "pNext = " .
                      showsPrec d (getField @"pNext" x) .
                        showString ", " .
                          showString "sampleLocationsPerPixel = " .
                            showsPrec d (getField @"sampleLocationsPerPixel" x) .
                              showString ", " .
                                showString "sampleLocationGridSize = " .
                                  showsPrec d (getField @"sampleLocationGridSize" x) .
                                    showString ", " .
                                      showString "sampleLocationsCount = " .
                                        showsPrec d (getField @"sampleLocationsCount" x) .
                                          showString ", " .
                                            showString "pSampleLocations = " .
                                              showsPrec d (getField @"pSampleLocations" x) .
                                                showChar '}'