{-# language CPP #-}
module Vulkan.Core13.Promoted_From_VK_KHR_format_feature_flags2 ( FormatProperties3(..)
, StructureType(..)
, FormatFeatureFlagBits2(..)
, FormatFeatureFlags2
) where
import Foreign.Marshal.Alloc (allocaBytes)
import Foreign.Ptr (nullPtr)
import Foreign.Ptr (plusPtr)
import Vulkan.CStruct (FromCStruct)
import Vulkan.CStruct (FromCStruct(..))
import Vulkan.CStruct (ToCStruct)
import Vulkan.CStruct (ToCStruct(..))
import Vulkan.Zero (Zero(..))
import Data.Typeable (Typeable)
import Foreign.Storable (Storable)
import Foreign.Storable (Storable(peek))
import Foreign.Storable (Storable(poke))
import qualified Foreign.Storable (Storable(..))
import GHC.Generics (Generic)
import Foreign.Ptr (Ptr)
import Data.Kind (Type)
import Vulkan.Core13.Enums.FormatFeatureFlags2 (FormatFeatureFlags2)
import Vulkan.Core10.Enums.StructureType (StructureType)
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_FORMAT_PROPERTIES_3))
import Vulkan.Core13.Enums.FormatFeatureFlags2 (FormatFeatureFlagBits2(..))
import Vulkan.Core13.Enums.FormatFeatureFlags2 (FormatFeatureFlags2)
import Vulkan.Core10.Enums.StructureType (StructureType(..))
data FormatProperties3 = FormatProperties3
{
FormatProperties3 -> FormatFeatureFlags2
linearTilingFeatures :: FormatFeatureFlags2
,
FormatProperties3 -> FormatFeatureFlags2
optimalTilingFeatures :: FormatFeatureFlags2
,
FormatProperties3 -> FormatFeatureFlags2
bufferFeatures :: FormatFeatureFlags2
}
deriving (Typeable, FormatProperties3 -> FormatProperties3 -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: FormatProperties3 -> FormatProperties3 -> Bool
$c/= :: FormatProperties3 -> FormatProperties3 -> Bool
== :: FormatProperties3 -> FormatProperties3 -> Bool
$c== :: FormatProperties3 -> FormatProperties3 -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (FormatProperties3)
#endif
deriving instance Show FormatProperties3
instance ToCStruct FormatProperties3 where
withCStruct :: forall b.
FormatProperties3 -> (Ptr FormatProperties3 -> IO b) -> IO b
withCStruct FormatProperties3
x Ptr FormatProperties3 -> IO b
f = forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
40 forall a b. (a -> b) -> a -> b
$ \Ptr FormatProperties3
p -> forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr FormatProperties3
p FormatProperties3
x (Ptr FormatProperties3 -> IO b
f Ptr FormatProperties3
p)
pokeCStruct :: forall b.
Ptr FormatProperties3 -> FormatProperties3 -> IO b -> IO b
pokeCStruct Ptr FormatProperties3
p FormatProperties3{FormatFeatureFlags2
bufferFeatures :: FormatFeatureFlags2
optimalTilingFeatures :: FormatFeatureFlags2
linearTilingFeatures :: FormatFeatureFlags2
$sel:bufferFeatures:FormatProperties3 :: FormatProperties3 -> FormatFeatureFlags2
$sel:optimalTilingFeatures:FormatProperties3 :: FormatProperties3 -> FormatFeatureFlags2
$sel:linearTilingFeatures:FormatProperties3 :: FormatProperties3 -> FormatFeatureFlags2
..} IO b
f = do
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr FormatProperties3
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_FORMAT_PROPERTIES_3)
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr FormatProperties3
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (forall a. Ptr a
nullPtr)
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr FormatProperties3
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr FormatFeatureFlags2)) (FormatFeatureFlags2
linearTilingFeatures)
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr FormatProperties3
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr FormatFeatureFlags2)) (FormatFeatureFlags2
optimalTilingFeatures)
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr FormatProperties3
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr FormatFeatureFlags2)) (FormatFeatureFlags2
bufferFeatures)
IO b
f
cStructSize :: Int
cStructSize = Int
40
cStructAlignment :: Int
cStructAlignment = Int
8
pokeZeroCStruct :: forall b. Ptr FormatProperties3 -> IO b -> IO b
pokeZeroCStruct Ptr FormatProperties3
p IO b
f = do
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr FormatProperties3
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_FORMAT_PROPERTIES_3)
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr FormatProperties3
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (forall a. Ptr a
nullPtr)
IO b
f
instance FromCStruct FormatProperties3 where
peekCStruct :: Ptr FormatProperties3 -> IO FormatProperties3
peekCStruct Ptr FormatProperties3
p = do
FormatFeatureFlags2
linearTilingFeatures <- forall a. Storable a => Ptr a -> IO a
peek @FormatFeatureFlags2 ((Ptr FormatProperties3
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr FormatFeatureFlags2))
FormatFeatureFlags2
optimalTilingFeatures <- forall a. Storable a => Ptr a -> IO a
peek @FormatFeatureFlags2 ((Ptr FormatProperties3
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr FormatFeatureFlags2))
FormatFeatureFlags2
bufferFeatures <- forall a. Storable a => Ptr a -> IO a
peek @FormatFeatureFlags2 ((Ptr FormatProperties3
p forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr FormatFeatureFlags2))
forall (f :: * -> *) a. Applicative f => a -> f a
pure forall a b. (a -> b) -> a -> b
$ FormatFeatureFlags2
-> FormatFeatureFlags2 -> FormatFeatureFlags2 -> FormatProperties3
FormatProperties3
FormatFeatureFlags2
linearTilingFeatures FormatFeatureFlags2
optimalTilingFeatures FormatFeatureFlags2
bufferFeatures
instance Storable FormatProperties3 where
sizeOf :: FormatProperties3 -> Int
sizeOf ~FormatProperties3
_ = Int
40
alignment :: FormatProperties3 -> Int
alignment ~FormatProperties3
_ = Int
8
peek :: Ptr FormatProperties3 -> IO FormatProperties3
peek = forall a. FromCStruct a => Ptr a -> IO a
peekCStruct
poke :: Ptr FormatProperties3 -> FormatProperties3 -> IO ()
poke Ptr FormatProperties3
ptr FormatProperties3
poked = forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr FormatProperties3
ptr FormatProperties3
poked (forall (f :: * -> *) a. Applicative f => a -> f a
pure ())
instance Zero FormatProperties3 where
zero :: FormatProperties3
zero = FormatFeatureFlags2
-> FormatFeatureFlags2 -> FormatFeatureFlags2 -> FormatProperties3
FormatProperties3
forall a. Zero a => a
zero
forall a. Zero a => a
zero
forall a. Zero a => a
zero