{-# language CPP #-}
-- | = Name
--
-- VK_EXT_hdr_metadata - device extension
--
-- = VK_EXT_hdr_metadata
--
-- [__Name String__]
--     @VK_EXT_hdr_metadata@
--
-- [__Extension Type__]
--     Device extension
--
-- [__Registered Extension Number__]
--     106
--
-- [__Revision__]
--     3
--
-- [__Ratification Status__]
--     Ratified
--
-- [__Extension and Version Dependencies__]
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_swapchain VK_KHR_swapchain>
--
-- [__Contact__]
--
--     -   Courtney Goeltzenleuchter
--         <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?body=[VK_EXT_hdr_metadata] @courtney-g%0A*Here describe the issue or question you have about the VK_EXT_hdr_metadata extension* >
--
-- == Other Extension Metadata
--
-- [__Last Modified Date__]
--     2024-03-26
--
-- [__IP Status__]
--     No known IP claims.
--
-- [__Contributors__]
--
--     -   Courtney Goeltzenleuchter, Google
--
--     -   Sebastian Wick, Red Hat Inc.
--
--     -   Tobias Hector, AMD
--
-- == Description
--
-- This extension defines two new structures and a function to assign SMPTE
-- (the Society of Motion Picture and Television Engineers) 2086 metadata
-- and CTA (Consumer Technology Association) 861.3 metadata to a swapchain.
--
-- SMPTE 2086 metadata defines the color volume of the display on which the
-- content was optimized for viewing and includes the color primaries,
-- white point, and luminance range. When such content is reproduced on
-- another display, this metadata can be used by the presentation engine to
-- improve processing of images. For instance, values in the image can
-- first be clamped to the color volume described in the metadata, and then
-- what remains can be remapped to the color volume of the presentation
-- engine.
--
-- CTA 861.3 metadata additionally includes the maximum intended luminance
-- for the content and the maximum average light level across frames.
--
-- This extension does not define exactly how this metadata is used,
-- however, it simply provides a mechanism to provide it to the
-- presentation engine. Presentation engines may process the image based on
-- the metadata before displaying it, resulting in the image being modified
-- outside of Vulkan. For example, the clamping of colors in the image to
-- the color volume may change those values in the image itself.
--
-- The metadata does not override or otherwise influence the color space
-- and color encoding.
--
-- == New Commands
--
-- -   'setHdrMetadataEXT'
--
-- == New Structures
--
-- -   'HdrMetadataEXT'
--
-- -   'XYColorEXT'
--
-- == New Enum Constants
--
-- -   'EXT_HDR_METADATA_EXTENSION_NAME'
--
-- -   'EXT_HDR_METADATA_SPEC_VERSION'
--
-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_HDR_METADATA_EXT'
--
-- == Issues
--
-- 1) Do we need a query function for the currently specified metadata?
--
-- No, Vulkan does not provide queries for state that the application can
-- track on its own.
--
-- 2) Should we specify default metadata if not specified by the
-- application?
--
-- No, the metadata is optional and the absence of the metadata is
-- well-defined.
--
-- == Version History
--
-- -   Revision 1, 2016-12-27 (Courtney Goeltzenleuchter)
--
--     -   Initial version
--
-- -   Revision 2, 2018-12-19 (Courtney Goeltzenleuchter)
--
--     -   Correct implicit validity for VkHdrMetadataEXT structure
--
-- -   Revision 3, 2024-03-26 (Tobias Hector & Sebastian Wick)
--
--     -   Clarifications and removal of erroneous “reference monitor” term
--
-- == See Also
--
-- No cross-references are available
--
-- == Document Notes
--
-- For more information, see the
-- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#VK_EXT_hdr_metadata Vulkan Specification>.
--
-- This page is a generated document. Fixes and changes should be made to
-- the generator scripts, not directly.
module Vulkan.Extensions.VK_EXT_hdr_metadata  ( setHdrMetadataEXT
                                              , XYColorEXT(..)
                                              , HdrMetadataEXT(..)
                                              , EXT_HDR_METADATA_SPEC_VERSION
                                              , pattern EXT_HDR_METADATA_SPEC_VERSION
                                              , EXT_HDR_METADATA_EXTENSION_NAME
                                              , pattern EXT_HDR_METADATA_EXTENSION_NAME
                                              , SwapchainKHR(..)
                                              ) where

import Vulkan.Internal.Utils (traceAroundEvent)
import Control.Monad (unless)
import Control.Monad.IO.Class (liftIO)
import Data.Typeable (eqT)
import Foreign.Marshal.Alloc (allocaBytes)
import GHC.IO (throwIO)
import GHC.Ptr (castPtr)
import GHC.Ptr (nullFunPtr)
import Foreign.Ptr (plusPtr)
import Data.Coerce (coerce)
import Control.Monad.Trans.Class (lift)
import Control.Monad.Trans.Cont (evalContT)
import qualified Data.Vector (imapM_)
import qualified Data.Vector (length)
import Vulkan.CStruct (FromCStruct)
import Vulkan.CStruct (FromCStruct(..))
import Vulkan.CStruct (ToCStruct)
import Vulkan.CStruct (ToCStruct(..))
import Vulkan.Zero (Zero(..))
import Control.Monad.IO.Class (MonadIO)
import Data.String (IsString)
import Data.Type.Equality ((:~:)(Refl))
import Data.Typeable (Typeable)
import Foreign.C.Types (CFloat)
import Foreign.C.Types (CFloat(..))
import Foreign.C.Types (CFloat(CFloat))
import Foreign.Storable (Storable)
import Foreign.Storable (Storable(peek))
import Foreign.Storable (Storable(poke))
import qualified Foreign.Storable (Storable(..))
import GHC.Generics (Generic)
import GHC.IO.Exception (IOErrorType(..))
import GHC.IO.Exception (IOException(..))
import Foreign.Ptr (FunPtr)
import Foreign.Ptr (Ptr)
import Data.Word (Word32)
import Data.Kind (Type)
import Control.Monad.Trans.Cont (ContT(..))
import Data.Vector (Vector)
import Vulkan.CStruct.Extends (forgetExtensions)
import Vulkan.CStruct.Extends (pokeSomeCStruct)
import Vulkan.NamedType ((:::))
import Vulkan.CStruct.Extends (Chain)
import Vulkan.Core10.Handles (Device)
import Vulkan.Core10.Handles (Device(..))
import Vulkan.Core10.Handles (Device(Device))
import Vulkan.Dynamic (DeviceCmds(pVkSetHdrMetadataEXT))
import Vulkan.Core10.Handles (Device_T)
import Vulkan.CStruct.Extends (Extends)
import Vulkan.CStruct.Extends (Extendss)
import Vulkan.CStruct.Extends (Extensible(..))
import {-# SOURCE #-} Vulkan.Extensions.VK_HUAWEI_hdr_vivid (HdrVividDynamicMetadataHUAWEI)
import Vulkan.CStruct.Extends (PeekChain)
import Vulkan.CStruct.Extends (PeekChain(..))
import Vulkan.CStruct.Extends (PokeChain)
import Vulkan.CStruct.Extends (PokeChain(..))
import Vulkan.CStruct.Extends (SomeStruct)
import Vulkan.Core10.Enums.StructureType (StructureType)
import Vulkan.Extensions.Handles (SwapchainKHR)
import Vulkan.Extensions.Handles (SwapchainKHR(..))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_HDR_METADATA_EXT))
import Vulkan.Extensions.Handles (SwapchainKHR(..))
foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkSetHdrMetadataEXT
  :: FunPtr (Ptr Device_T -> Word32 -> Ptr SwapchainKHR -> Ptr (SomeStruct HdrMetadataEXT) -> IO ()) -> Ptr Device_T -> Word32 -> Ptr SwapchainKHR -> Ptr (SomeStruct HdrMetadataEXT) -> IO ()

-- | vkSetHdrMetadataEXT - Set HDR metadata
--
-- = Description
--
-- The metadata will be applied to the specified
-- 'Vulkan.Extensions.Handles.SwapchainKHR' objects at the next
-- 'Vulkan.Extensions.VK_KHR_swapchain.queuePresentKHR' call using that
-- 'Vulkan.Extensions.Handles.SwapchainKHR' object. The metadata will
-- persist until a subsequent 'setHdrMetadataEXT' changes it.
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkSetHdrMetadataEXT-device-parameter# @device@ /must/ be a
--     valid 'Vulkan.Core10.Handles.Device' handle
--
-- -   #VUID-vkSetHdrMetadataEXT-pSwapchains-parameter# @pSwapchains@
--     /must/ be a valid pointer to an array of @swapchainCount@ valid
--     'Vulkan.Extensions.Handles.SwapchainKHR' handles
--
-- -   #VUID-vkSetHdrMetadataEXT-pMetadata-parameter# @pMetadata@ /must/ be
--     a valid pointer to an array of @swapchainCount@ valid
--     'HdrMetadataEXT' structures
--
-- -   #VUID-vkSetHdrMetadataEXT-swapchainCount-arraylength#
--     @swapchainCount@ /must/ be greater than @0@
--
-- -   #VUID-vkSetHdrMetadataEXT-pSwapchains-parent# Each element of
--     @pSwapchains@ /must/ have been created, allocated, or retrieved from
--     @device@
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_hdr_metadata VK_EXT_hdr_metadata>,
-- 'Vulkan.Core10.Handles.Device', 'HdrMetadataEXT',
-- 'Vulkan.Extensions.Handles.SwapchainKHR'
setHdrMetadataEXT :: forall io
                   . (MonadIO io)
                  => -- | @device@ is the logical device where the swapchain(s) were created.
                     Device
                  -> -- | @pSwapchains@ is a pointer to an array of @swapchainCount@
                     -- 'Vulkan.Extensions.Handles.SwapchainKHR' handles.
                     ("swapchains" ::: Vector SwapchainKHR)
                  -> -- | @pMetadata@ is a pointer to an array of @swapchainCount@
                     -- 'HdrMetadataEXT' structures.
                     ("metadata" ::: Vector (SomeStruct HdrMetadataEXT))
                  -> io ()
setHdrMetadataEXT :: forall (io :: * -> *).
MonadIO io =>
Device
-> ("swapchains" ::: Vector SwapchainKHR)
-> ("metadata" ::: Vector (SomeStruct HdrMetadataEXT))
-> io ()
setHdrMetadataEXT Device
device "swapchains" ::: Vector SwapchainKHR
swapchains "metadata" ::: Vector (SomeStruct HdrMetadataEXT)
metadata = IO () -> io ()
forall a. IO a -> io a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> io ())
-> (ContT () IO () -> IO ()) -> ContT () IO () -> io ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> io ()) -> ContT () IO () -> io ()
forall a b. (a -> b) -> a -> b
$ do
  let vkSetHdrMetadataEXTPtr :: FunPtr
  (Ptr Device_T
   -> Word32
   -> Ptr SwapchainKHR
   -> Ptr (SomeStruct HdrMetadataEXT)
   -> IO ())
vkSetHdrMetadataEXTPtr = DeviceCmds
-> FunPtr
     (Ptr Device_T
      -> Word32
      -> Ptr SwapchainKHR
      -> Ptr (SomeStruct HdrMetadataEXT)
      -> IO ())
pVkSetHdrMetadataEXT (case Device
device of Device{DeviceCmds
deviceCmds :: DeviceCmds
deviceCmds :: Device -> DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO () -> ContT () IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT () m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr Device_T
   -> Word32
   -> Ptr SwapchainKHR
   -> Ptr (SomeStruct HdrMetadataEXT)
   -> IO ())
vkSetHdrMetadataEXTPtr FunPtr
  (Ptr Device_T
   -> Word32
   -> Ptr SwapchainKHR
   -> Ptr (SomeStruct HdrMetadataEXT)
   -> IO ())
-> FunPtr
     (Ptr Device_T
      -> Word32
      -> Ptr SwapchainKHR
      -> Ptr (SomeStruct HdrMetadataEXT)
      -> IO ())
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr Device_T
   -> Word32
   -> Ptr SwapchainKHR
   -> Ptr (SomeStruct HdrMetadataEXT)
   -> IO ())
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
    IOException -> IO ()
forall e a. (HasCallStack, Exception e) => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"The function pointer for vkSetHdrMetadataEXT is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkSetHdrMetadataEXT' :: Ptr Device_T
-> Word32
-> Ptr SwapchainKHR
-> Ptr (SomeStruct HdrMetadataEXT)
-> IO ()
vkSetHdrMetadataEXT' = FunPtr
  (Ptr Device_T
   -> Word32
   -> Ptr SwapchainKHR
   -> Ptr (SomeStruct HdrMetadataEXT)
   -> IO ())
-> Ptr Device_T
-> Word32
-> Ptr SwapchainKHR
-> Ptr (SomeStruct HdrMetadataEXT)
-> IO ()
mkVkSetHdrMetadataEXT FunPtr
  (Ptr Device_T
   -> Word32
   -> Ptr SwapchainKHR
   -> Ptr (SomeStruct HdrMetadataEXT)
   -> IO ())
vkSetHdrMetadataEXTPtr
  let pSwapchainsLength :: Int
pSwapchainsLength = ("swapchains" ::: Vector SwapchainKHR) -> Int
forall a. Vector a -> Int
Data.Vector.length (("swapchains" ::: Vector SwapchainKHR) -> Int)
-> ("swapchains" ::: Vector SwapchainKHR) -> Int
forall a b. (a -> b) -> a -> b
$ ("swapchains" ::: Vector SwapchainKHR
swapchains)
  IO () -> ContT () IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT () m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless ((("metadata" ::: Vector (SomeStruct HdrMetadataEXT)) -> Int
forall a. Vector a -> Int
Data.Vector.length (("metadata" ::: Vector (SomeStruct HdrMetadataEXT)) -> Int)
-> ("metadata" ::: Vector (SomeStruct HdrMetadataEXT)) -> Int
forall a b. (a -> b) -> a -> b
$ ("metadata" ::: Vector (SomeStruct HdrMetadataEXT)
metadata)) Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
pSwapchainsLength) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
    IOException -> IO ()
forall e a. (HasCallStack, Exception e) => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"pMetadata and pSwapchains must have the same length" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  pPSwapchains <- ((Ptr SwapchainKHR -> IO ()) -> IO ())
-> ContT () IO (Ptr SwapchainKHR)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr SwapchainKHR -> IO ()) -> IO ())
 -> ContT () IO (Ptr SwapchainKHR))
-> ((Ptr SwapchainKHR -> IO ()) -> IO ())
-> ContT () IO (Ptr SwapchainKHR)
forall a b. (a -> b) -> a -> b
$ forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @SwapchainKHR ((("swapchains" ::: Vector SwapchainKHR) -> Int
forall a. Vector a -> Int
Data.Vector.length ("swapchains" ::: Vector SwapchainKHR
swapchains)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
8)
  lift $ Data.Vector.imapM_ (\Int
i SwapchainKHR
e -> Ptr SwapchainKHR -> SwapchainKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr SwapchainKHR
pPSwapchains Ptr SwapchainKHR -> Int -> Ptr SwapchainKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
8 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr SwapchainKHR) (SwapchainKHR
e)) (swapchains)
  pPMetadata <- ContT $ allocaBytes @(HdrMetadataEXT _) ((Data.Vector.length (metadata)) * 64)
  Data.Vector.imapM_ (\Int
i SomeStruct HdrMetadataEXT
e -> ((() -> IO ()) -> IO ()) -> ContT () IO ()
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((() -> IO ()) -> IO ()) -> ContT () IO ())
-> ((() -> IO ()) -> IO ()) -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (SomeStruct HdrMetadataEXT)
-> SomeStruct HdrMetadataEXT -> IO () -> IO ()
forall (a :: [*] -> *) b.
(forall (es :: [*]).
 (Extendss a es, PokeChain es) =>
 ToCStruct (a es)) =>
Ptr (SomeStruct a) -> SomeStruct a -> IO b -> IO b
pokeSomeCStruct (Ptr (HdrMetadataEXT (ZonkAny 1)) -> Ptr (SomeStruct HdrMetadataEXT)
forall (a :: [*] -> *) (es :: [*]).
Ptr (a es) -> Ptr (SomeStruct a)
forgetExtensions (Ptr (HdrMetadataEXT (ZonkAny 0))
pPMetadata Ptr (HdrMetadataEXT (ZonkAny 0)) -> Int -> Ptr (HdrMetadataEXT w)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
64 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr (HdrMetadataEXT _))) (SomeStruct HdrMetadataEXT
e) (IO () -> IO ())
-> ((() -> IO ()) -> IO ()) -> (() -> IO ()) -> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((() -> IO ()) -> () -> IO ()
forall a b. (a -> b) -> a -> b
$ ())) (metadata)
  lift $ traceAroundEvent "vkSetHdrMetadataEXT" (vkSetHdrMetadataEXT'
                                                   (deviceHandle (device))
                                                   ((fromIntegral pSwapchainsLength :: Word32))
                                                   (pPSwapchains)
                                                   (forgetExtensions (pPMetadata)))
  pure $ ()


-- | VkXYColorEXT - Specify X,Y chromaticity coordinates
--
-- = Description
--
-- Chromaticity coordinates are as specified in CIE 15:2004 “Calculation of
-- chromaticity coordinates” (Section 7.3) and are limited to between 0 and
-- 1 for real colors.
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_hdr_metadata VK_EXT_hdr_metadata>,
-- 'HdrMetadataEXT'
data XYColorEXT = XYColorEXT
  { -- | @x@ is the x chromaticity coordinate.
    XYColorEXT -> Float
x :: Float
  , -- | @y@ is the y chromaticity coordinate.
    XYColorEXT -> Float
y :: Float
  }
  deriving (Typeable, XYColorEXT -> XYColorEXT -> Bool
(XYColorEXT -> XYColorEXT -> Bool)
-> (XYColorEXT -> XYColorEXT -> Bool) -> Eq XYColorEXT
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: XYColorEXT -> XYColorEXT -> Bool
== :: XYColorEXT -> XYColorEXT -> Bool
$c/= :: XYColorEXT -> XYColorEXT -> Bool
/= :: XYColorEXT -> XYColorEXT -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (XYColorEXT)
#endif
deriving instance Show XYColorEXT

instance ToCStruct XYColorEXT where
  withCStruct :: forall b. XYColorEXT -> (Ptr XYColorEXT -> IO b) -> IO b
withCStruct XYColorEXT
x Ptr XYColorEXT -> IO b
f = Int -> (Ptr XYColorEXT -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
8 ((Ptr XYColorEXT -> IO b) -> IO b)
-> (Ptr XYColorEXT -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr XYColorEXT
p -> Ptr XYColorEXT -> XYColorEXT -> IO b -> IO b
forall b. Ptr XYColorEXT -> XYColorEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr XYColorEXT
p XYColorEXT
x (Ptr XYColorEXT -> IO b
f Ptr XYColorEXT
p)
  pokeCStruct :: forall b. Ptr XYColorEXT -> XYColorEXT -> IO b -> IO b
pokeCStruct Ptr XYColorEXT
p XYColorEXT{Float
x :: XYColorEXT -> Float
y :: XYColorEXT -> Float
x :: Float
y :: Float
..} IO b
f = do
    Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr XYColorEXT
p Ptr XYColorEXT -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr CFloat)) (Float -> CFloat
CFloat (Float
x))
    Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr XYColorEXT
p Ptr XYColorEXT -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4 :: Ptr CFloat)) (Float -> CFloat
CFloat (Float
y))
    IO b
f
  cStructSize :: Int
cStructSize = Int
8
  cStructAlignment :: Int
cStructAlignment = Int
4
  pokeZeroCStruct :: forall b. Ptr XYColorEXT -> IO b -> IO b
pokeZeroCStruct Ptr XYColorEXT
p IO b
f = do
    Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr XYColorEXT
p Ptr XYColorEXT -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr CFloat)) (Float -> CFloat
CFloat (Float
forall a. Zero a => a
zero))
    Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr XYColorEXT
p Ptr XYColorEXT -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4 :: Ptr CFloat)) (Float -> CFloat
CFloat (Float
forall a. Zero a => a
zero))
    IO b
f

instance FromCStruct XYColorEXT where
  peekCStruct :: Ptr XYColorEXT -> IO XYColorEXT
peekCStruct Ptr XYColorEXT
p = do
    x <- forall a. Storable a => Ptr a -> IO a
peek @CFloat ((Ptr XYColorEXT
p Ptr XYColorEXT -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr CFloat))
    y <- peek @CFloat ((p `plusPtr` 4 :: Ptr CFloat))
    pure $ XYColorEXT
             (coerce @CFloat @Float x) (coerce @CFloat @Float y)

instance Storable XYColorEXT where
  sizeOf :: XYColorEXT -> Int
sizeOf ~XYColorEXT
_ = Int
8
  alignment :: XYColorEXT -> Int
alignment ~XYColorEXT
_ = Int
4
  peek :: Ptr XYColorEXT -> IO XYColorEXT
peek = Ptr XYColorEXT -> IO XYColorEXT
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct
  poke :: Ptr XYColorEXT -> XYColorEXT -> IO ()
poke Ptr XYColorEXT
ptr XYColorEXT
poked = Ptr XYColorEXT -> XYColorEXT -> IO () -> IO ()
forall b. Ptr XYColorEXT -> XYColorEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr XYColorEXT
ptr XYColorEXT
poked (() -> IO ()
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ())

instance Zero XYColorEXT where
  zero :: XYColorEXT
zero = Float -> Float -> XYColorEXT
XYColorEXT
           Float
forall a. Zero a => a
zero
           Float
forall a. Zero a => a
zero


-- | VkHdrMetadataEXT - Specify HDR metadata
--
-- = Description
--
-- If any of the above values are unknown, they /can/ be set to 0.
--
-- The meta-data provided here is intended to be used as defined in the
-- SMPTE 2086, CTA 861.3 and CIE 15:2004 specifications. The validity and
-- use of this data is outside the scope of Vulkan.
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkHdrMetadataEXT-sType-sType# @sType@ /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_HDR_METADATA_EXT'
--
-- -   #VUID-VkHdrMetadataEXT-pNext-pNext# @pNext@ /must/ be @NULL@ or a
--     pointer to a valid instance of
--     'Vulkan.Extensions.VK_HUAWEI_hdr_vivid.HdrVividDynamicMetadataHUAWEI'
--
-- -   #VUID-VkHdrMetadataEXT-sType-unique# The @sType@ value of each
--     structure in the @pNext@ chain /must/ be unique
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_hdr_metadata VK_EXT_hdr_metadata>,
-- 'Vulkan.Core10.Enums.StructureType.StructureType', 'XYColorEXT',
-- 'setHdrMetadataEXT'
data HdrMetadataEXT (es :: [Type]) = HdrMetadataEXT
  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.
    forall (es :: [*]). HdrMetadataEXT es -> Chain es
next :: Chain es
  , -- | @displayPrimaryRed@ is a 'XYColorEXT' structure specifying the red
    -- primary of the display used to optimize the content
    forall (es :: [*]). HdrMetadataEXT es -> XYColorEXT
displayPrimaryRed :: XYColorEXT
  , -- | @displayPrimaryGreen@ is a 'XYColorEXT' structure specifying the green
    -- primary of the display used to optimize the content
    forall (es :: [*]). HdrMetadataEXT es -> XYColorEXT
displayPrimaryGreen :: XYColorEXT
  , -- | @displayPrimaryBlue@ is a 'XYColorEXT' structure specifying the blue
    -- primary of the display used to optimize the content
    forall (es :: [*]). HdrMetadataEXT es -> XYColorEXT
displayPrimaryBlue :: XYColorEXT
  , -- | @whitePoint@ is a 'XYColorEXT' structure specifying the white-point of
    -- the display used to optimize the content
    forall (es :: [*]). HdrMetadataEXT es -> XYColorEXT
whitePoint :: XYColorEXT
  , -- | @maxLuminance@ is the maximum luminance of the display used to optimize
    -- the content in nits
    forall (es :: [*]). HdrMetadataEXT es -> Float
maxLuminance :: Float
  , -- | @minLuminance@ is the minimum luminance of the display used to optimize
    -- the content in nits
    forall (es :: [*]). HdrMetadataEXT es -> Float
minLuminance :: Float
  , -- | @maxContentLightLevel@ is the value in nits of the desired luminance for
    -- the brightest pixels in the displayed image.
    forall (es :: [*]). HdrMetadataEXT es -> Float
maxContentLightLevel :: Float
  , -- | @maxFrameAverageLightLevel@ is the value in nits of the average
    -- luminance of the frame which has the brightest average luminance
    -- anywhere in the content.
    forall (es :: [*]). HdrMetadataEXT es -> Float
maxFrameAverageLightLevel :: Float
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (HdrMetadataEXT (es :: [Type]))
#endif
deriving instance Show (Chain es) => Show (HdrMetadataEXT es)

instance Extensible HdrMetadataEXT where
  extensibleTypeName :: String
extensibleTypeName = String
"HdrMetadataEXT"
  setNext :: forall (ds :: [*]) (es :: [*]).
HdrMetadataEXT ds -> Chain es -> HdrMetadataEXT es
setNext HdrMetadataEXT{Float
Chain ds
XYColorEXT
next :: forall (es :: [*]). HdrMetadataEXT es -> Chain es
displayPrimaryRed :: forall (es :: [*]). HdrMetadataEXT es -> XYColorEXT
displayPrimaryGreen :: forall (es :: [*]). HdrMetadataEXT es -> XYColorEXT
displayPrimaryBlue :: forall (es :: [*]). HdrMetadataEXT es -> XYColorEXT
whitePoint :: forall (es :: [*]). HdrMetadataEXT es -> XYColorEXT
maxLuminance :: forall (es :: [*]). HdrMetadataEXT es -> Float
minLuminance :: forall (es :: [*]). HdrMetadataEXT es -> Float
maxContentLightLevel :: forall (es :: [*]). HdrMetadataEXT es -> Float
maxFrameAverageLightLevel :: forall (es :: [*]). HdrMetadataEXT es -> Float
next :: Chain ds
displayPrimaryRed :: XYColorEXT
displayPrimaryGreen :: XYColorEXT
displayPrimaryBlue :: XYColorEXT
whitePoint :: XYColorEXT
maxLuminance :: Float
minLuminance :: Float
maxContentLightLevel :: Float
maxFrameAverageLightLevel :: Float
..} Chain es
next' = HdrMetadataEXT{next :: Chain es
next = Chain es
next', Float
XYColorEXT
displayPrimaryRed :: XYColorEXT
displayPrimaryGreen :: XYColorEXT
displayPrimaryBlue :: XYColorEXT
whitePoint :: XYColorEXT
maxLuminance :: Float
minLuminance :: Float
maxContentLightLevel :: Float
maxFrameAverageLightLevel :: Float
displayPrimaryRed :: XYColorEXT
displayPrimaryGreen :: XYColorEXT
displayPrimaryBlue :: XYColorEXT
whitePoint :: XYColorEXT
maxLuminance :: Float
minLuminance :: Float
maxContentLightLevel :: Float
maxFrameAverageLightLevel :: Float
..}
  getNext :: forall (es :: [*]). HdrMetadataEXT es -> Chain es
getNext HdrMetadataEXT{Float
Chain es
XYColorEXT
next :: forall (es :: [*]). HdrMetadataEXT es -> Chain es
displayPrimaryRed :: forall (es :: [*]). HdrMetadataEXT es -> XYColorEXT
displayPrimaryGreen :: forall (es :: [*]). HdrMetadataEXT es -> XYColorEXT
displayPrimaryBlue :: forall (es :: [*]). HdrMetadataEXT es -> XYColorEXT
whitePoint :: forall (es :: [*]). HdrMetadataEXT es -> XYColorEXT
maxLuminance :: forall (es :: [*]). HdrMetadataEXT es -> Float
minLuminance :: forall (es :: [*]). HdrMetadataEXT es -> Float
maxContentLightLevel :: forall (es :: [*]). HdrMetadataEXT es -> Float
maxFrameAverageLightLevel :: forall (es :: [*]). HdrMetadataEXT es -> Float
next :: Chain es
displayPrimaryRed :: XYColorEXT
displayPrimaryGreen :: XYColorEXT
displayPrimaryBlue :: XYColorEXT
whitePoint :: XYColorEXT
maxLuminance :: Float
minLuminance :: Float
maxContentLightLevel :: Float
maxFrameAverageLightLevel :: Float
..} = Chain es
next
  extends :: forall e b proxy. Typeable e => proxy e -> (Extends HdrMetadataEXT e => b) -> Maybe b
  extends :: forall e b (proxy :: * -> *).
Typeable e =>
proxy e -> (Extends HdrMetadataEXT e => b) -> Maybe b
extends proxy e
_ Extends HdrMetadataEXT e => b
f
    | Just e :~: HdrVividDynamicMetadataHUAWEI
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @HdrVividDynamicMetadataHUAWEI = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends HdrMetadataEXT e => b
f
    | Bool
otherwise = Maybe b
forall a. Maybe a
Nothing

instance ( Extendss HdrMetadataEXT es
         , PokeChain es ) => ToCStruct (HdrMetadataEXT es) where
  withCStruct :: forall b.
HdrMetadataEXT es -> (Ptr (HdrMetadataEXT es) -> IO b) -> IO b
withCStruct HdrMetadataEXT es
x Ptr (HdrMetadataEXT es) -> IO b
f = Int -> (Ptr (HdrMetadataEXT es) -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
64 ((Ptr (HdrMetadataEXT es) -> IO b) -> IO b)
-> (Ptr (HdrMetadataEXT es) -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr (HdrMetadataEXT es)
p -> Ptr (HdrMetadataEXT es) -> HdrMetadataEXT es -> IO b -> IO b
forall b.
Ptr (HdrMetadataEXT es) -> HdrMetadataEXT es -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr (HdrMetadataEXT es)
p HdrMetadataEXT es
x (Ptr (HdrMetadataEXT es) -> IO b
f Ptr (HdrMetadataEXT es)
p)
  pokeCStruct :: forall b.
Ptr (HdrMetadataEXT es) -> HdrMetadataEXT es -> IO b -> IO b
pokeCStruct Ptr (HdrMetadataEXT es)
p HdrMetadataEXT{Float
Chain es
XYColorEXT
next :: forall (es :: [*]). HdrMetadataEXT es -> Chain es
displayPrimaryRed :: forall (es :: [*]). HdrMetadataEXT es -> XYColorEXT
displayPrimaryGreen :: forall (es :: [*]). HdrMetadataEXT es -> XYColorEXT
displayPrimaryBlue :: forall (es :: [*]). HdrMetadataEXT es -> XYColorEXT
whitePoint :: forall (es :: [*]). HdrMetadataEXT es -> XYColorEXT
maxLuminance :: forall (es :: [*]). HdrMetadataEXT es -> Float
minLuminance :: forall (es :: [*]). HdrMetadataEXT es -> Float
maxContentLightLevel :: forall (es :: [*]). HdrMetadataEXT es -> Float
maxFrameAverageLightLevel :: forall (es :: [*]). HdrMetadataEXT es -> Float
next :: Chain es
displayPrimaryRed :: XYColorEXT
displayPrimaryGreen :: XYColorEXT
displayPrimaryBlue :: XYColorEXT
whitePoint :: XYColorEXT
maxLuminance :: Float
minLuminance :: Float
maxContentLightLevel :: Float
maxFrameAverageLightLevel :: Float
..} IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (HdrMetadataEXT es)
p Ptr (HdrMetadataEXT es) -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_HDR_METADATA_EXT)
    pNext'' <- (Ptr (Chain es) -> Ptr ())
-> ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ())
forall a b. (a -> b) -> ContT b IO a -> ContT b IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Ptr (Chain es) -> Ptr ()
forall a b. Ptr a -> Ptr b
castPtr (ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ()))
-> (((Ptr (Chain es) -> IO b) -> IO b)
    -> ContT b IO (Ptr (Chain es)))
-> ((Ptr (Chain es) -> IO b) -> IO b)
-> ContT b IO (Ptr ())
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr (Chain es))
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr ()))
-> ((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr ())
forall a b. (a -> b) -> a -> b
$ Chain es -> (Ptr (Chain es) -> IO b) -> IO b
forall (es :: [*]) a.
PokeChain es =>
Chain es -> (Ptr (Chain es) -> IO a) -> IO a
forall a. Chain es -> (Ptr (Chain es) -> IO a) -> IO a
withChain (Chain es
next)
    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
    lift $ poke ((p `plusPtr` 16 :: Ptr XYColorEXT)) (displayPrimaryRed)
    lift $ poke ((p `plusPtr` 24 :: Ptr XYColorEXT)) (displayPrimaryGreen)
    lift $ poke ((p `plusPtr` 32 :: Ptr XYColorEXT)) (displayPrimaryBlue)
    lift $ poke ((p `plusPtr` 40 :: Ptr XYColorEXT)) (whitePoint)
    lift $ poke ((p `plusPtr` 48 :: Ptr CFloat)) (CFloat (maxLuminance))
    lift $ poke ((p `plusPtr` 52 :: Ptr CFloat)) (CFloat (minLuminance))
    lift $ poke ((p `plusPtr` 56 :: Ptr CFloat)) (CFloat (maxContentLightLevel))
    lift $ poke ((p `plusPtr` 60 :: Ptr CFloat)) (CFloat (maxFrameAverageLightLevel))
    lift $ f
  cStructSize :: Int
cStructSize = Int
64
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b. Ptr (HdrMetadataEXT es) -> IO b -> IO b
pokeZeroCStruct Ptr (HdrMetadataEXT es)
p IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (HdrMetadataEXT es)
p Ptr (HdrMetadataEXT es) -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_HDR_METADATA_EXT)
    pNext' <- (Ptr (Chain es) -> Ptr ())
-> ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ())
forall a b. (a -> b) -> ContT b IO a -> ContT b IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Ptr (Chain es) -> Ptr ()
forall a b. Ptr a -> Ptr b
castPtr (ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ()))
-> (((Ptr (Chain es) -> IO b) -> IO b)
    -> ContT b IO (Ptr (Chain es)))
-> ((Ptr (Chain es) -> IO b) -> IO b)
-> ContT b IO (Ptr ())
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr (Chain es))
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr ()))
-> ((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr ())
forall a b. (a -> b) -> a -> b
$ forall (es :: [*]) a.
PokeChain es =>
(Ptr (Chain es) -> IO a) -> IO a
withZeroChain @es
    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
    lift $ poke ((p `plusPtr` 16 :: Ptr XYColorEXT)) (zero)
    lift $ poke ((p `plusPtr` 24 :: Ptr XYColorEXT)) (zero)
    lift $ poke ((p `plusPtr` 32 :: Ptr XYColorEXT)) (zero)
    lift $ poke ((p `plusPtr` 40 :: Ptr XYColorEXT)) (zero)
    lift $ poke ((p `plusPtr` 48 :: Ptr CFloat)) (CFloat (zero))
    lift $ poke ((p `plusPtr` 52 :: Ptr CFloat)) (CFloat (zero))
    lift $ poke ((p `plusPtr` 56 :: Ptr CFloat)) (CFloat (zero))
    lift $ poke ((p `plusPtr` 60 :: Ptr CFloat)) (CFloat (zero))
    lift $ f

instance ( Extendss HdrMetadataEXT es
         , PeekChain es ) => FromCStruct (HdrMetadataEXT es) where
  peekCStruct :: Ptr (HdrMetadataEXT es) -> IO (HdrMetadataEXT es)
peekCStruct Ptr (HdrMetadataEXT es)
p = do
    pNext <- forall a. Storable a => Ptr a -> IO a
peek @(Ptr ()) ((Ptr (HdrMetadataEXT es)
p Ptr (HdrMetadataEXT es) -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ())))
    next <- peekChain (castPtr pNext)
    displayPrimaryRed <- peekCStruct @XYColorEXT ((p `plusPtr` 16 :: Ptr XYColorEXT))
    displayPrimaryGreen <- peekCStruct @XYColorEXT ((p `plusPtr` 24 :: Ptr XYColorEXT))
    displayPrimaryBlue <- peekCStruct @XYColorEXT ((p `plusPtr` 32 :: Ptr XYColorEXT))
    whitePoint <- peekCStruct @XYColorEXT ((p `plusPtr` 40 :: Ptr XYColorEXT))
    maxLuminance <- peek @CFloat ((p `plusPtr` 48 :: Ptr CFloat))
    minLuminance <- peek @CFloat ((p `plusPtr` 52 :: Ptr CFloat))
    maxContentLightLevel <- peek @CFloat ((p `plusPtr` 56 :: Ptr CFloat))
    maxFrameAverageLightLevel <- peek @CFloat ((p `plusPtr` 60 :: Ptr CFloat))
    pure $ HdrMetadataEXT
             next
             displayPrimaryRed
             displayPrimaryGreen
             displayPrimaryBlue
             whitePoint
             (coerce @CFloat @Float maxLuminance)
             (coerce @CFloat @Float minLuminance)
             (coerce @CFloat @Float maxContentLightLevel)
             (coerce @CFloat @Float maxFrameAverageLightLevel)

instance es ~ '[] => Zero (HdrMetadataEXT es) where
  zero :: HdrMetadataEXT es
zero = Chain es
-> XYColorEXT
-> XYColorEXT
-> XYColorEXT
-> XYColorEXT
-> Float
-> Float
-> Float
-> Float
-> HdrMetadataEXT es
forall (es :: [*]).
Chain es
-> XYColorEXT
-> XYColorEXT
-> XYColorEXT
-> XYColorEXT
-> Float
-> Float
-> Float
-> Float
-> HdrMetadataEXT es
HdrMetadataEXT
           ()
           XYColorEXT
forall a. Zero a => a
zero
           XYColorEXT
forall a. Zero a => a
zero
           XYColorEXT
forall a. Zero a => a
zero
           XYColorEXT
forall a. Zero a => a
zero
           Float
forall a. Zero a => a
zero
           Float
forall a. Zero a => a
zero
           Float
forall a. Zero a => a
zero
           Float
forall a. Zero a => a
zero


type EXT_HDR_METADATA_SPEC_VERSION = 3

-- No documentation found for TopLevel "VK_EXT_HDR_METADATA_SPEC_VERSION"
pattern EXT_HDR_METADATA_SPEC_VERSION :: forall a . Integral a => a
pattern $mEXT_HDR_METADATA_SPEC_VERSION :: forall {r} {a}.
Integral a =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
$bEXT_HDR_METADATA_SPEC_VERSION :: forall a. Integral a => a
EXT_HDR_METADATA_SPEC_VERSION = 3


type EXT_HDR_METADATA_EXTENSION_NAME = "VK_EXT_hdr_metadata"

-- No documentation found for TopLevel "VK_EXT_HDR_METADATA_EXTENSION_NAME"
pattern EXT_HDR_METADATA_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
pattern $mEXT_HDR_METADATA_EXTENSION_NAME :: forall {r} {a}.
(Eq a, IsString a) =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
$bEXT_HDR_METADATA_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a
EXT_HDR_METADATA_EXTENSION_NAME = "VK_EXT_hdr_metadata"