{-# language CPP #-}
module Vulkan.Core12.Promoted_From_VK_KHR_shader_float16_int8  ( PhysicalDeviceShaderFloat16Int8Features(..)
                                                               , StructureType(..)
                                                               ) where

import Foreign.Marshal.Alloc (allocaBytesAligned)
import Foreign.Ptr (nullPtr)
import Foreign.Ptr (plusPtr)
import Data.Typeable (Typeable)
import Foreign.Storable (Storable)
import Foreign.Storable (Storable(peek))
import Foreign.Storable (Storable(poke))
import qualified Foreign.Storable (Storable(..))
import Foreign.Ptr (Ptr)
import Data.Kind (Type)
import Vulkan.Core10.BaseType (bool32ToBool)
import Vulkan.Core10.BaseType (boolToBool32)
import Vulkan.Core10.BaseType (Bool32)
import Vulkan.CStruct (FromCStruct)
import Vulkan.CStruct (FromCStruct(..))
import Vulkan.Core10.Enums.StructureType (StructureType)
import Vulkan.CStruct (ToCStruct)
import Vulkan.CStruct (ToCStruct(..))
import Vulkan.Zero (Zero(..))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES))
import Vulkan.Core10.Enums.StructureType (StructureType(..))
-- | VkPhysicalDeviceShaderFloat16Int8Features - Structure describing
-- features supported by VK_KHR_shader_float16_int8
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- 'Vulkan.Core10.BaseType.Bool32',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data PhysicalDeviceShaderFloat16Int8Features = PhysicalDeviceShaderFloat16Int8Features
  { -- | @shaderFloat16@ indicates whether 16-bit floats (halfs) are supported in
    -- shader code. This also indicates whether shader modules /can/ declare
    -- the @Float16@ capability. However, this only enables a subset of the
    -- storage classes that SPIR-V allows for the @Float16@ SPIR-V capability:
    -- Declaring and using 16-bit floats in the @Private@, @Workgroup@, and
    -- @Function@ storage classes is enabled, while declaring them in the
    -- interface storage classes (e.g., @UniformConstant@, @Uniform@,
    -- @StorageBuffer@, @Input@, @Output@, and @PushConstant@) is not enabled.
    PhysicalDeviceShaderFloat16Int8Features -> Bool
shaderFloat16 :: Bool
  , -- | @shaderInt8@ indicates whether 8-bit integers (signed and unsigned) are
    -- supported in shader code. This also indicates whether shader modules
    -- /can/ declare the @Int8@ capability. However, this only enables a subset
    -- of the storage classes that SPIR-V allows for the @Int8@ SPIR-V
    -- capability: Declaring and using 8-bit integers in the @Private@,
    -- @Workgroup@, and @Function@ storage classes is enabled, while declaring
    -- them in the interface storage classes (e.g., @UniformConstant@,
    -- @Uniform@, @StorageBuffer@, @Input@, @Output@, and @PushConstant@) is
    -- not enabled.
    PhysicalDeviceShaderFloat16Int8Features -> Bool
shaderInt8 :: Bool
  }
  deriving (Typeable)
deriving instance Show PhysicalDeviceShaderFloat16Int8Features

instance ToCStruct PhysicalDeviceShaderFloat16Int8Features where
  withCStruct :: PhysicalDeviceShaderFloat16Int8Features
-> (Ptr PhysicalDeviceShaderFloat16Int8Features -> IO b) -> IO b
withCStruct x :: PhysicalDeviceShaderFloat16Int8Features
x f :: Ptr PhysicalDeviceShaderFloat16Int8Features -> IO b
f = Int
-> Int
-> (Ptr PhysicalDeviceShaderFloat16Int8Features -> IO b)
-> IO b
forall a b. Int -> Int -> (Ptr a -> IO b) -> IO b
allocaBytesAligned 24 8 ((Ptr PhysicalDeviceShaderFloat16Int8Features -> IO b) -> IO b)
-> (Ptr PhysicalDeviceShaderFloat16Int8Features -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \p :: Ptr PhysicalDeviceShaderFloat16Int8Features
p -> Ptr PhysicalDeviceShaderFloat16Int8Features
-> PhysicalDeviceShaderFloat16Int8Features -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr PhysicalDeviceShaderFloat16Int8Features
p PhysicalDeviceShaderFloat16Int8Features
x (Ptr PhysicalDeviceShaderFloat16Int8Features -> IO b
f Ptr PhysicalDeviceShaderFloat16Int8Features
p)
  pokeCStruct :: Ptr PhysicalDeviceShaderFloat16Int8Features
-> PhysicalDeviceShaderFloat16Int8Features -> IO b -> IO b
pokeCStruct p :: Ptr PhysicalDeviceShaderFloat16Int8Features
p PhysicalDeviceShaderFloat16Int8Features{..} f :: IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceShaderFloat16Int8Features
p Ptr PhysicalDeviceShaderFloat16Int8Features
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceShaderFloat16Int8Features
p Ptr PhysicalDeviceShaderFloat16Int8Features -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceShaderFloat16Int8Features
p Ptr PhysicalDeviceShaderFloat16Int8Features -> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 16 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
shaderFloat16))
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceShaderFloat16Int8Features
p Ptr PhysicalDeviceShaderFloat16Int8Features -> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 20 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
shaderInt8))
    IO b
f
  cStructSize :: Int
cStructSize = 24
  cStructAlignment :: Int
cStructAlignment = 8
  pokeZeroCStruct :: Ptr PhysicalDeviceShaderFloat16Int8Features -> IO b -> IO b
pokeZeroCStruct p :: Ptr PhysicalDeviceShaderFloat16Int8Features
p f :: IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceShaderFloat16Int8Features
p Ptr PhysicalDeviceShaderFloat16Int8Features
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceShaderFloat16Int8Features
p Ptr PhysicalDeviceShaderFloat16Int8Features -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceShaderFloat16Int8Features
p Ptr PhysicalDeviceShaderFloat16Int8Features -> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 16 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
forall a. Zero a => a
zero))
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceShaderFloat16Int8Features
p Ptr PhysicalDeviceShaderFloat16Int8Features -> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 20 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
forall a. Zero a => a
zero))
    IO b
f

instance FromCStruct PhysicalDeviceShaderFloat16Int8Features where
  peekCStruct :: Ptr PhysicalDeviceShaderFloat16Int8Features
-> IO PhysicalDeviceShaderFloat16Int8Features
peekCStruct p :: Ptr PhysicalDeviceShaderFloat16Int8Features
p = do
    Bool32
shaderFloat16 <- Ptr Bool32 -> IO Bool32
forall a. Storable a => Ptr a -> IO a
peek @Bool32 ((Ptr PhysicalDeviceShaderFloat16Int8Features
p Ptr PhysicalDeviceShaderFloat16Int8Features -> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 16 :: Ptr Bool32))
    Bool32
shaderInt8 <- Ptr Bool32 -> IO Bool32
forall a. Storable a => Ptr a -> IO a
peek @Bool32 ((Ptr PhysicalDeviceShaderFloat16Int8Features
p Ptr PhysicalDeviceShaderFloat16Int8Features -> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 20 :: Ptr Bool32))
    PhysicalDeviceShaderFloat16Int8Features
-> IO PhysicalDeviceShaderFloat16Int8Features
forall (f :: * -> *) a. Applicative f => a -> f a
pure (PhysicalDeviceShaderFloat16Int8Features
 -> IO PhysicalDeviceShaderFloat16Int8Features)
-> PhysicalDeviceShaderFloat16Int8Features
-> IO PhysicalDeviceShaderFloat16Int8Features
forall a b. (a -> b) -> a -> b
$ Bool -> Bool -> PhysicalDeviceShaderFloat16Int8Features
PhysicalDeviceShaderFloat16Int8Features
             (Bool32 -> Bool
bool32ToBool Bool32
shaderFloat16) (Bool32 -> Bool
bool32ToBool Bool32
shaderInt8)

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

instance Zero PhysicalDeviceShaderFloat16Int8Features where
  zero :: PhysicalDeviceShaderFloat16Int8Features
zero = Bool -> Bool -> PhysicalDeviceShaderFloat16Int8Features
PhysicalDeviceShaderFloat16Int8Features
           Bool
forall a. Zero a => a
zero
           Bool
forall a. Zero a => a
zero