{-# language CPP #-}
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 ()
setHdrMetadataEXT :: forall io
. (MonadIO io)
=>
Device
->
("swapchains" ::: Vector SwapchainKHR)
->
("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 $ ()
data XYColorEXT = XYColorEXT
{
XYColorEXT -> Float
x :: Float
,
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
data HdrMetadataEXT (es :: [Type]) = HdrMetadataEXT
{
forall (es :: [*]). HdrMetadataEXT es -> Chain es
next :: Chain es
,
forall (es :: [*]). HdrMetadataEXT es -> XYColorEXT
displayPrimaryRed :: XYColorEXT
,
forall (es :: [*]). HdrMetadataEXT es -> XYColorEXT
displayPrimaryGreen :: XYColorEXT
,
forall (es :: [*]). HdrMetadataEXT es -> XYColorEXT
displayPrimaryBlue :: XYColorEXT
,
forall (es :: [*]). HdrMetadataEXT es -> XYColorEXT
whitePoint :: XYColorEXT
,
forall (es :: [*]). HdrMetadataEXT es -> Float
maxLuminance :: Float
,
forall (es :: [*]). HdrMetadataEXT es -> Float
minLuminance :: Float
,
forall (es :: [*]). HdrMetadataEXT es -> Float
maxContentLightLevel :: Float
,
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
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"
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"