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

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

{-# LANGUAGE DataKinds             #-}
{-# LANGUAGE FlexibleInstances     #-}
{-# LANGUAGE MagicHash             #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE Strict                #-}
{-# LANGUAGE TypeApplications      #-}
{-# LANGUAGE TypeFamilies          #-}
module Graphics.Vulkan.Types.Struct.HdrMetadataEXT
       (VkHdrMetadataEXT(..)) 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.Struct.XYColorEXT  (VkXYColorEXT)
import           System.IO.Unsafe                         (unsafeDupablePerformIO)

-- | > typedef struct VkHdrMetadataEXT {
--   >     VkStructureType sType;
--   >     const void*    pNext;
--   >     VkXYColorEXT   displayPrimaryRed;
--   >     VkXYColorEXT   displayPrimaryGreen;
--   >     VkXYColorEXT   displayPrimaryBlue;
--   >     VkXYColorEXT   whitePoint;
--   >     float          maxLuminance;
--   >     float          minLuminance;
--   >     float          maxContentLightLevel;
--   >     float          maxFrameAverageLightLevel;
--   > } VkHdrMetadataEXT;
--
--   <https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VkHdrMetadataEXT VkHdrMetadataEXT registry at www.khronos.org>
data VkHdrMetadataEXT = VkHdrMetadataEXT# Addr# ByteArray#

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

        {-# INLINE (==) #-}

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

        {-# INLINE compare #-}

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

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

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

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

        {-# INLINE poke #-}

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

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

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

        {-# INLINE unsafeFromByteArrayOffset #-}

instance VulkanMarshal VkHdrMetadataEXT where
        type StructFields VkHdrMetadataEXT =
             '["sType", "pNext", "displayPrimaryRed", "displayPrimaryGreen", -- ' closing tick for hsc2hs
               "displayPrimaryBlue", "whitePoint", "maxLuminance", "minLuminance",
               "maxContentLightLevel", "maxFrameAverageLightLevel"]
        type CUnionType VkHdrMetadataEXT = 'False -- ' closing tick for hsc2hs
        type ReturnedOnly VkHdrMetadataEXT = 'False -- ' closing tick for hsc2hs
        type StructExtends VkHdrMetadataEXT = '[] -- ' closing tick for hsc2hs

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

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

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

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

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

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

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

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

instance {-# OVERLAPPING #-}
         HasField "displayPrimaryRed" VkHdrMetadataEXT where
        type FieldType "displayPrimaryRed" VkHdrMetadataEXT = VkXYColorEXT
        type FieldOptional "displayPrimaryRed" VkHdrMetadataEXT = 'False -- ' closing tick for hsc2hs
        type FieldOffset "displayPrimaryRed" VkHdrMetadataEXT =
             (16)
{-# LINE 153 "src-gen/Graphics/Vulkan/Types/Struct/HdrMetadataEXT.hsc" #-}
        type FieldIsArray "displayPrimaryRed" VkHdrMetadataEXT = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "displayPrimaryRed" VkHdrMetadataEXT where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (16))
{-# LINE 168 "src-gen/Graphics/Vulkan/Types/Struct/HdrMetadataEXT.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "displayPrimaryRed" VkHdrMetadataEXT where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (16)
{-# LINE 178 "src-gen/Graphics/Vulkan/Types/Struct/HdrMetadataEXT.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "displayPrimaryGreen" VkHdrMetadataEXT where
        type FieldType "displayPrimaryGreen" VkHdrMetadataEXT =
             VkXYColorEXT
        type FieldOptional "displayPrimaryGreen" VkHdrMetadataEXT = 'False -- ' closing tick for hsc2hs
        type FieldOffset "displayPrimaryGreen" VkHdrMetadataEXT =
             (24)
{-# LINE 186 "src-gen/Graphics/Vulkan/Types/Struct/HdrMetadataEXT.hsc" #-}
        type FieldIsArray "displayPrimaryGreen" VkHdrMetadataEXT = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "displayPrimaryGreen" VkHdrMetadataEXT where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (24))
{-# LINE 201 "src-gen/Graphics/Vulkan/Types/Struct/HdrMetadataEXT.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "displayPrimaryGreen" VkHdrMetadataEXT where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (24)
{-# LINE 211 "src-gen/Graphics/Vulkan/Types/Struct/HdrMetadataEXT.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "displayPrimaryBlue" VkHdrMetadataEXT where
        type FieldType "displayPrimaryBlue" VkHdrMetadataEXT = VkXYColorEXT
        type FieldOptional "displayPrimaryBlue" VkHdrMetadataEXT = 'False -- ' closing tick for hsc2hs
        type FieldOffset "displayPrimaryBlue" VkHdrMetadataEXT =
             (32)
{-# LINE 218 "src-gen/Graphics/Vulkan/Types/Struct/HdrMetadataEXT.hsc" #-}
        type FieldIsArray "displayPrimaryBlue" VkHdrMetadataEXT = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "displayPrimaryBlue" VkHdrMetadataEXT where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (32))
{-# LINE 233 "src-gen/Graphics/Vulkan/Types/Struct/HdrMetadataEXT.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "displayPrimaryBlue" VkHdrMetadataEXT where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (32)
{-# LINE 243 "src-gen/Graphics/Vulkan/Types/Struct/HdrMetadataEXT.hsc" #-}

instance {-# OVERLAPPING #-} HasField "whitePoint" VkHdrMetadataEXT
         where
        type FieldType "whitePoint" VkHdrMetadataEXT = VkXYColorEXT
        type FieldOptional "whitePoint" VkHdrMetadataEXT = 'False -- ' closing tick for hsc2hs
        type FieldOffset "whitePoint" VkHdrMetadataEXT =
             (40)
{-# LINE 250 "src-gen/Graphics/Vulkan/Types/Struct/HdrMetadataEXT.hsc" #-}
        type FieldIsArray "whitePoint" VkHdrMetadataEXT = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "whitePoint" VkHdrMetadataEXT where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (40))
{-# LINE 264 "src-gen/Graphics/Vulkan/Types/Struct/HdrMetadataEXT.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "whitePoint" VkHdrMetadataEXT where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (40)
{-# LINE 274 "src-gen/Graphics/Vulkan/Types/Struct/HdrMetadataEXT.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "maxLuminance" VkHdrMetadataEXT where
        type FieldType "maxLuminance" VkHdrMetadataEXT =
             Float
{-# LINE 279 "src-gen/Graphics/Vulkan/Types/Struct/HdrMetadataEXT.hsc" #-}
        type FieldOptional "maxLuminance" VkHdrMetadataEXT = 'False -- ' closing tick for hsc2hs
        type FieldOffset "maxLuminance" VkHdrMetadataEXT =
             (48)
{-# LINE 282 "src-gen/Graphics/Vulkan/Types/Struct/HdrMetadataEXT.hsc" #-}
        type FieldIsArray "maxLuminance" VkHdrMetadataEXT = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "maxLuminance" VkHdrMetadataEXT where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (48))
{-# LINE 296 "src-gen/Graphics/Vulkan/Types/Struct/HdrMetadataEXT.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "maxLuminance" VkHdrMetadataEXT where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (48)
{-# LINE 306 "src-gen/Graphics/Vulkan/Types/Struct/HdrMetadataEXT.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "minLuminance" VkHdrMetadataEXT where
        type FieldType "minLuminance" VkHdrMetadataEXT =
             Float
{-# LINE 311 "src-gen/Graphics/Vulkan/Types/Struct/HdrMetadataEXT.hsc" #-}
        type FieldOptional "minLuminance" VkHdrMetadataEXT = 'False -- ' closing tick for hsc2hs
        type FieldOffset "minLuminance" VkHdrMetadataEXT =
             (52)
{-# LINE 314 "src-gen/Graphics/Vulkan/Types/Struct/HdrMetadataEXT.hsc" #-}
        type FieldIsArray "minLuminance" VkHdrMetadataEXT = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

        {-# INLINE fieldOffset #-}
        fieldOffset = (52)
{-# LINE 321 "src-gen/Graphics/Vulkan/Types/Struct/HdrMetadataEXT.hsc" #-}

instance {-# OVERLAPPING #-}
         CanReadField "minLuminance" VkHdrMetadataEXT where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (52))
{-# LINE 328 "src-gen/Graphics/Vulkan/Types/Struct/HdrMetadataEXT.hsc" #-}

        {-# INLINE readField #-}
        readField p
          = peekByteOff p (52)
{-# LINE 332 "src-gen/Graphics/Vulkan/Types/Struct/HdrMetadataEXT.hsc" #-}

instance {-# OVERLAPPING #-}
         CanWriteField "minLuminance" VkHdrMetadataEXT where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (52)
{-# LINE 338 "src-gen/Graphics/Vulkan/Types/Struct/HdrMetadataEXT.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "maxContentLightLevel" VkHdrMetadataEXT where
        type FieldType "maxContentLightLevel" VkHdrMetadataEXT =
             Float
{-# LINE 343 "src-gen/Graphics/Vulkan/Types/Struct/HdrMetadataEXT.hsc" #-}
        type FieldOptional "maxContentLightLevel" VkHdrMetadataEXT = 'False -- ' closing tick for hsc2hs
        type FieldOffset "maxContentLightLevel" VkHdrMetadataEXT =
             (56)
{-# LINE 346 "src-gen/Graphics/Vulkan/Types/Struct/HdrMetadataEXT.hsc" #-}
        type FieldIsArray "maxContentLightLevel" VkHdrMetadataEXT = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "maxContentLightLevel" VkHdrMetadataEXT where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (56))
{-# LINE 361 "src-gen/Graphics/Vulkan/Types/Struct/HdrMetadataEXT.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "maxContentLightLevel" VkHdrMetadataEXT where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (56)
{-# LINE 371 "src-gen/Graphics/Vulkan/Types/Struct/HdrMetadataEXT.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "maxFrameAverageLightLevel" VkHdrMetadataEXT where
        type FieldType "maxFrameAverageLightLevel" VkHdrMetadataEXT =
             Float
{-# LINE 376 "src-gen/Graphics/Vulkan/Types/Struct/HdrMetadataEXT.hsc" #-}
        type FieldOptional "maxFrameAverageLightLevel" VkHdrMetadataEXT =
             'False -- ' closing tick for hsc2hs
        type FieldOffset "maxFrameAverageLightLevel" VkHdrMetadataEXT =
             (60)
{-# LINE 380 "src-gen/Graphics/Vulkan/Types/Struct/HdrMetadataEXT.hsc" #-}
        type FieldIsArray "maxFrameAverageLightLevel" VkHdrMetadataEXT =
             'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

        {-# INLINE fieldOffset #-}
        fieldOffset
          = (60)
{-# LINE 389 "src-gen/Graphics/Vulkan/Types/Struct/HdrMetadataEXT.hsc" #-}

instance {-# OVERLAPPING #-}
         CanReadField "maxFrameAverageLightLevel" VkHdrMetadataEXT where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (60))
{-# LINE 396 "src-gen/Graphics/Vulkan/Types/Struct/HdrMetadataEXT.hsc" #-}

        {-# INLINE readField #-}
        readField p
          = peekByteOff p (60)
{-# LINE 400 "src-gen/Graphics/Vulkan/Types/Struct/HdrMetadataEXT.hsc" #-}

instance {-# OVERLAPPING #-}
         CanWriteField "maxFrameAverageLightLevel" VkHdrMetadataEXT where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (60)
{-# LINE 406 "src-gen/Graphics/Vulkan/Types/Struct/HdrMetadataEXT.hsc" #-}

instance Show VkHdrMetadataEXT where
        showsPrec d x
          = showString "VkHdrMetadataEXT {" .
              showString "sType = " .
                showsPrec d (getField @"sType" x) .
                  showString ", " .
                    showString "pNext = " .
                      showsPrec d (getField @"pNext" x) .
                        showString ", " .
                          showString "displayPrimaryRed = " .
                            showsPrec d (getField @"displayPrimaryRed" x) .
                              showString ", " .
                                showString "displayPrimaryGreen = " .
                                  showsPrec d (getField @"displayPrimaryGreen" x) .
                                    showString ", " .
                                      showString "displayPrimaryBlue = " .
                                        showsPrec d (getField @"displayPrimaryBlue" x) .
                                          showString ", " .
                                            showString "whitePoint = " .
                                              showsPrec d (getField @"whitePoint" x) .
                                                showString ", " .
                                                  showString "maxLuminance = " .
                                                    showsPrec d (getField @"maxLuminance" x) .
                                                      showString ", " .
                                                        showString "minLuminance = " .
                                                          showsPrec d (getField @"minLuminance" x) .
                                                            showString ", " .
                                                              showString "maxContentLightLevel = " .
                                                                showsPrec d
                                                                  (getField @"maxContentLightLevel"
                                                                     x)
                                                                  .
                                                                  showString ", " .
                                                                    showString
                                                                      "maxFrameAverageLightLevel = "
                                                                      .
                                                                      showsPrec d
                                                                        (getField
                                                                           @"maxFrameAverageLightLevel"
                                                                           x)
                                                                        . showChar '}'