{-# language CPP #-}
-- | = Name
--
-- VK_EXT_layer_settings - instance extension
--
-- == VK_EXT_layer_settings
--
-- [__Name String__]
--     @VK_EXT_layer_settings@
--
-- [__Extension Type__]
--     Instance extension
--
-- [__Registered Extension Number__]
--     497
--
-- [__Revision__]
--     2
--
-- [__Ratification Status__]
--     Ratified
--
-- [__Extension and Version Dependencies__]
--     None
--
-- [__Contact__]
--
--     -   Christophe Riccio
--         <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?body=[VK_EXT_layer_settings] @christophe%0A*Here describe the issue or question you have about the VK_EXT_layer_settings extension* >
--
-- [__Extension Proposal__]
--     <https://github.com/KhronosGroup/Vulkan-Docs/tree/main/proposals/VK_EXT_layer_settings.adoc VK_EXT_layer_settings>
--
-- == Other Extension Metadata
--
-- [__Last Modified Date__]
--     2023-09-23
--
-- [__IP Status__]
--     No known IP claims.
--
-- [__Contributors__]
--
--     -   Christophe Riccio, LunarG
--
--     -   Mark Lobodzinski, LunarG
--
--     -   Charles Giessen, LunarG
--
--     -   Spencer Fricke, LunarG
--
--     -   Juan Ramos, LunarG
--
--     -   Daniel Rakos, RasterGrid
--
--     -   Shahbaz Youssefi, Google
--
--     -   Lina Versace, Google
--
--     -   Bill Hollings, The Brenwill Workshop
--
--     -   Jon Leech, Khronos
--
--     -   Tom Olson, Arm
--
-- == Description
--
-- This extension provides a mechanism for configuring programmatically
-- through the Vulkan API the behavior of layers.
--
-- This extension provides the 'LayerSettingsCreateInfoEXT' struct that can
-- be included in the @pNext@ chain of the
-- 'Vulkan.Core10.DeviceInitialization.InstanceCreateInfo' structure passed
-- as the @pCreateInfo@ parameter of
-- 'Vulkan.Core10.DeviceInitialization.createInstance'.
--
-- The structure contains an array of 'LayerSettingEXT' structure values
-- that configure specific features of layers.
--
-- == Example
--
-- @VK_EXT_layer_settings@ is implemented by the Vulkan Profiles layer.
--
-- It allows the profiles layer tests used by the profiles layer C.I. to
-- programmatically configure the layer for each test without affecting the
-- C.I. environment, allowing to run multiple tests concurrently.
--
-- > const char* profile_file_data = JSON_TEST_FILES_PATH "VP_KHR_roadmap_2022.json";
-- > const char* profile_name_data = "VP_KHR_roadmap_2022";
-- > VkBool32 emulate_portability_data = VK_TRUE;
-- > const char* simulate_capabilities[] = {
-- >     "SIMULATE_API_VERSION_BIT",
-- >     "SIMULATE_FEATURES_BIT",
-- >     "SIMULATE_PROPERTIES_BIT",
-- >     "SIMULATE_EXTENSIONS_BIT",
-- >     "SIMULATE_FORMATS_BIT",
-- >     "SIMULATE_QUEUE_FAMILY_PROPERTIES_BIT"
-- > };
-- > const char* debug_reports[] = {
-- >     "DEBUG_REPORT_ERROR_BIT",
-- >     "DEBUG_REPORT_WARNING_BIT",
-- >     "DEBUG_REPORT_NOTIFICATION_BIT",
-- >     "DEBUG_REPORT_DEBUG_BIT"
-- > };
-- >
-- > const VkLayerSettingEXT settings[] = {
-- >      {kLayerName, kLayerSettingsProfileFile, VK_LAYER_SETTING_TYPE_STRING_EXT, 1, &profile_file_data},
-- >      {kLayerName, kLayerSettingsProfileName, VK_LAYER_SETTING_TYPE_STRING_EXT, 1, &profile_name_data},
-- >      {kLayerName, kLayerSettingsEmulatePortability, VK_LAYER_SETTING_TYPE_BOOL32_EXT, 1, &emulate_portability_data},
-- >      {kLayerName, kLayerSettingsSimulateCapabilities, VK_LAYER_SETTING_TYPE_STRING_EXT,
-- >         static_cast<uint32_t>(std::size(simulate_capabilities)), simulate_capabilities},
-- >      {kLayerName, kLayerSettingsDebugReports, VK_LAYER_SETTING_TYPE_STRING_EXT,
-- >         static_cast<uint32_t>(std::size(debug_reports)), debug_reports}
-- > };
-- >
-- > const VkLayerSettingsCreateInfoEXT layer_settings_create_info{
-- >     VK_STRUCTURE_TYPE_LAYER_SETTINGS_CREATE_INFO_EXT, nullptr,
-- >     static_cast<uint32_t>(std::size(settings)), settings};
-- >
-- > VkInstanceCreateInfo inst_create_info = {};
-- > ...
-- > inst_create_info.pNext = &layer_settings_create_info;
-- > vkCreateInstance(&inst_create_info, nullptr, &_instances);
--
-- Note
--
-- The @VK_EXT_layer_settings@ extension subsumes all the functionality
-- provided in the @VK_EXT_validation_flags@ extension and the
-- @VK_EXT_validation_features@ extension.
--
-- == New Structures
--
-- -   'LayerSettingEXT'
--
-- -   Extending 'Vulkan.Core10.DeviceInitialization.InstanceCreateInfo':
--
--     -   'LayerSettingsCreateInfoEXT'
--
-- == New Enums
--
-- -   'LayerSettingTypeEXT'
--
-- == New Enum Constants
--
-- -   'EXT_LAYER_SETTINGS_EXTENSION_NAME'
--
-- -   'EXT_LAYER_SETTINGS_SPEC_VERSION'
--
-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_LAYER_SETTINGS_CREATE_INFO_EXT'
--
-- == Issues
--
-- -   How should application developers figure out the list of available
--     settings?
--
-- This extension does not provide a reflection API for layer settings.
-- Layer settings are described in each layer JSON manifest and the
-- documentation of each layer which implements this extension.
--
-- == Version History
--
-- -   Revision 1, 2020-06-17 (Mark Lobodzinski)
--
--     -   Initial revision for Validation layer internal usages
--
-- -   Revision 2, 2023-09-26 (Christophe Riccio)
--
--     -   Refactor APIs for any layer usages and public release
--
-- == See Also
--
-- 'LayerSettingEXT', 'LayerSettingTypeEXT', 'LayerSettingsCreateInfoEXT'
--
-- == Document Notes
--
-- For more information, see the
-- <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VK_EXT_layer_settings 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_layer_settings  ( LayerSettingsCreateInfoEXT(..)
                                                , LayerSettingEXT(..)
                                                , LayerSettingTypeEXT( LAYER_SETTING_TYPE_BOOL32_EXT
                                                                     , LAYER_SETTING_TYPE_INT32_EXT
                                                                     , LAYER_SETTING_TYPE_INT64_EXT
                                                                     , LAYER_SETTING_TYPE_UINT32_EXT
                                                                     , LAYER_SETTING_TYPE_UINT64_EXT
                                                                     , LAYER_SETTING_TYPE_FLOAT32_EXT
                                                                     , LAYER_SETTING_TYPE_FLOAT64_EXT
                                                                     , LAYER_SETTING_TYPE_STRING_EXT
                                                                     , ..
                                                                     )
                                                , EXT_LAYER_SETTINGS_SPEC_VERSION
                                                , pattern EXT_LAYER_SETTINGS_SPEC_VERSION
                                                , EXT_LAYER_SETTINGS_EXTENSION_NAME
                                                , pattern EXT_LAYER_SETTINGS_EXTENSION_NAME
                                                ) where

import Vulkan.Internal.Utils (enumReadPrec)
import Vulkan.Internal.Utils (enumShowsPrec)
import Foreign.Marshal.Alloc (allocaBytes)
import Foreign.Ptr (nullPtr)
import Foreign.Ptr (plusPtr)
import GHC.Show (showsPrec)
import Data.ByteString (packCString)
import Data.ByteString (useAsCString)
import Control.Monad.Trans.Class (lift)
import Control.Monad.Trans.Cont (evalContT)
import Data.Vector (generateM)
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 Vulkan.Zero (Zero(..))
import Data.String (IsString)
import Data.Typeable (Typeable)
import Foreign.C.Types (CChar)
import Foreign.Storable (Storable)
import Foreign.Storable (Storable(peek))
import Foreign.Storable (Storable(poke))
import GHC.Generics (Generic)
import Data.Int (Int32)
import Foreign.Ptr (Ptr)
import GHC.Read (Read(readPrec))
import GHC.Show (Show(showsPrec))
import Data.Word (Word32)
import Data.ByteString (ByteString)
import Data.Kind (Type)
import Control.Monad.Trans.Cont (ContT(..))
import Data.Vector (Vector)
import Vulkan.CStruct.Utils (advancePtrBytes)
import Vulkan.Core10.Enums.StructureType (StructureType)
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_LAYER_SETTINGS_CREATE_INFO_EXT))
-- | VkLayerSettingsCreateInfoEXT - Specify layer capabilities for a Vulkan
-- instance
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkLayerSettingsCreateInfoEXT-sType-sType# @sType@ /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_LAYER_SETTINGS_CREATE_INFO_EXT'
--
-- -   #VUID-VkLayerSettingsCreateInfoEXT-pSettings-parameter# If
--     @settingCount@ is not @0@, @pSettings@ /must/ be a valid pointer to
--     an array of @settingCount@ valid 'LayerSettingEXT' structures
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_layer_settings VK_EXT_layer_settings>,
-- 'LayerSettingEXT', 'Vulkan.Core10.Enums.StructureType.StructureType'
data LayerSettingsCreateInfoEXT = LayerSettingsCreateInfoEXT
  { -- | @pSettings@ is a pointer to an array of @settingCount@ 'LayerSettingEXT'
    -- values specifying the setting to be configured.
    LayerSettingsCreateInfoEXT -> Vector LayerSettingEXT
settings :: Vector LayerSettingEXT }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (LayerSettingsCreateInfoEXT)
#endif
deriving instance Show LayerSettingsCreateInfoEXT

instance ToCStruct LayerSettingsCreateInfoEXT where
  withCStruct :: forall b.
LayerSettingsCreateInfoEXT
-> (Ptr LayerSettingsCreateInfoEXT -> IO b) -> IO b
withCStruct LayerSettingsCreateInfoEXT
x Ptr LayerSettingsCreateInfoEXT -> IO b
f = Int -> (Ptr LayerSettingsCreateInfoEXT -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
32 ((Ptr LayerSettingsCreateInfoEXT -> IO b) -> IO b)
-> (Ptr LayerSettingsCreateInfoEXT -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr LayerSettingsCreateInfoEXT
p -> Ptr LayerSettingsCreateInfoEXT
-> LayerSettingsCreateInfoEXT -> IO b -> IO b
forall b.
Ptr LayerSettingsCreateInfoEXT
-> LayerSettingsCreateInfoEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr LayerSettingsCreateInfoEXT
p LayerSettingsCreateInfoEXT
x (Ptr LayerSettingsCreateInfoEXT -> IO b
f Ptr LayerSettingsCreateInfoEXT
p)
  pokeCStruct :: forall b.
Ptr LayerSettingsCreateInfoEXT
-> LayerSettingsCreateInfoEXT -> IO b -> IO b
pokeCStruct Ptr LayerSettingsCreateInfoEXT
p LayerSettingsCreateInfoEXT{Vector LayerSettingEXT
$sel:settings:LayerSettingsCreateInfoEXT :: LayerSettingsCreateInfoEXT -> Vector LayerSettingEXT
settings :: Vector LayerSettingEXT
..} 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 LayerSettingsCreateInfoEXT
p Ptr LayerSettingsCreateInfoEXT -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_LAYER_SETTINGS_CREATE_INFO_EXT)
    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 (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr LayerSettingsCreateInfoEXT
p Ptr LayerSettingsCreateInfoEXT -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    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 Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr LayerSettingsCreateInfoEXT
p Ptr LayerSettingsCreateInfoEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32)) ((Int -> Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Vector LayerSettingEXT -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector LayerSettingEXT -> Int) -> Vector LayerSettingEXT -> Int
forall a b. (a -> b) -> a -> b
$ (Vector LayerSettingEXT
settings)) :: Word32))
    Ptr LayerSettingEXT
pPSettings' <- ((Ptr LayerSettingEXT -> IO b) -> IO b)
-> ContT b IO (Ptr LayerSettingEXT)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr LayerSettingEXT -> IO b) -> IO b)
 -> ContT b IO (Ptr LayerSettingEXT))
-> ((Ptr LayerSettingEXT -> IO b) -> IO b)
-> ContT b IO (Ptr LayerSettingEXT)
forall a b. (a -> b) -> a -> b
$ forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @LayerSettingEXT ((Vector LayerSettingEXT -> Int
forall a. Vector a -> Int
Data.Vector.length (Vector LayerSettingEXT
settings)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
32)
    (Int -> LayerSettingEXT -> ContT b IO ())
-> Vector LayerSettingEXT -> ContT b IO ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i LayerSettingEXT
e -> ((() -> IO b) -> IO b) -> ContT b IO ()
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((() -> IO b) -> IO b) -> ContT b IO ())
-> ((() -> IO b) -> IO b) -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr LayerSettingEXT -> LayerSettingEXT -> IO b -> IO b
forall b. Ptr LayerSettingEXT -> LayerSettingEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct (Ptr LayerSettingEXT
pPSettings' Ptr LayerSettingEXT -> Int -> Ptr LayerSettingEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
32 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr LayerSettingEXT) (LayerSettingEXT
e) (IO b -> IO b) -> ((() -> IO b) -> IO b) -> (() -> IO b) -> IO b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((() -> IO b) -> () -> IO b
forall a b. (a -> b) -> a -> b
$ ())) (Vector LayerSettingEXT
settings)
    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 (Ptr LayerSettingEXT) -> Ptr LayerSettingEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr LayerSettingsCreateInfoEXT
p Ptr LayerSettingsCreateInfoEXT -> Int -> Ptr (Ptr LayerSettingEXT)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr (Ptr LayerSettingEXT))) (Ptr LayerSettingEXT
pPSettings')
    IO b -> ContT b IO b
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 b -> ContT b IO b) -> IO b -> ContT b IO b
forall a b. (a -> b) -> a -> b
$ IO b
f
  cStructSize :: Int
cStructSize = Int
32
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b. Ptr LayerSettingsCreateInfoEXT -> IO b -> IO b
pokeZeroCStruct Ptr LayerSettingsCreateInfoEXT
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr LayerSettingsCreateInfoEXT
p Ptr LayerSettingsCreateInfoEXT -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_LAYER_SETTINGS_CREATE_INFO_EXT)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr LayerSettingsCreateInfoEXT
p Ptr LayerSettingsCreateInfoEXT -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    IO b
f

instance FromCStruct LayerSettingsCreateInfoEXT where
  peekCStruct :: Ptr LayerSettingsCreateInfoEXT -> IO LayerSettingsCreateInfoEXT
peekCStruct Ptr LayerSettingsCreateInfoEXT
p = do
    Word32
settingCount <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr LayerSettingsCreateInfoEXT
p Ptr LayerSettingsCreateInfoEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Word32))
    Ptr LayerSettingEXT
pSettings <- forall a. Storable a => Ptr a -> IO a
peek @(Ptr LayerSettingEXT) ((Ptr LayerSettingsCreateInfoEXT
p Ptr LayerSettingsCreateInfoEXT -> Int -> Ptr (Ptr LayerSettingEXT)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr (Ptr LayerSettingEXT)))
    Vector LayerSettingEXT
pSettings' <- Int -> (Int -> IO LayerSettingEXT) -> IO (Vector LayerSettingEXT)
forall (m :: * -> *) a.
Monad m =>
Int -> (Int -> m a) -> m (Vector a)
generateM (Word32 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word32
settingCount) (\Int
i -> forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @LayerSettingEXT ((Ptr LayerSettingEXT
pSettings Ptr LayerSettingEXT -> Int -> Ptr LayerSettingEXT
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
32 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr LayerSettingEXT)))
    LayerSettingsCreateInfoEXT -> IO LayerSettingsCreateInfoEXT
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (LayerSettingsCreateInfoEXT -> IO LayerSettingsCreateInfoEXT)
-> LayerSettingsCreateInfoEXT -> IO LayerSettingsCreateInfoEXT
forall a b. (a -> b) -> a -> b
$ Vector LayerSettingEXT -> LayerSettingsCreateInfoEXT
LayerSettingsCreateInfoEXT
             Vector LayerSettingEXT
pSettings'

instance Zero LayerSettingsCreateInfoEXT where
  zero :: LayerSettingsCreateInfoEXT
zero = Vector LayerSettingEXT -> LayerSettingsCreateInfoEXT
LayerSettingsCreateInfoEXT
           Vector LayerSettingEXT
forall a. Monoid a => a
mempty


-- | VkLayerSettingEXT - Specify a layer capability to configure
--
-- = Description
--
-- When multiple 'LayerSettingsCreateInfoEXT' structures are chained and
-- the same @pSettingName@ is referenced for the same @pLayerName@, the
-- value of the first reference of the layer setting is used.
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkLayerSettingEXT-pLayerName-parameter# @pLayerName@ /must/ be
--     a null-terminated UTF-8 string
--
-- -   #VUID-VkLayerSettingEXT-pSettingName-parameter# @pSettingName@
--     /must/ be a null-terminated UTF-8 string
--
-- -   #VUID-VkLayerSettingEXT-type-parameter# @type@ /must/ be a valid
--     'LayerSettingTypeEXT' value
--
-- -   #VUID-VkLayerSettingEXT-pValues-parameter# If @valueCount@ is not
--     @0@, @pValues@ /must/ be a valid pointer to an array of @valueCount@
--     bytes
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_layer_settings VK_EXT_layer_settings>,
-- 'LayerSettingTypeEXT', 'LayerSettingsCreateInfoEXT'
data LayerSettingEXT = LayerSettingEXT
  { -- | @pLayerName@ is a pointer to a null-terminated UTF-8 string naming the
    -- layer to configure the setting from.
    LayerSettingEXT -> ByteString
layerName :: ByteString
  , -- | @pSettingName@ is a pointer to a null-terminated UTF-8 string naming the
    -- setting to configure. Unknown @pSettingName@ by the layer are ignored.
    LayerSettingEXT -> ByteString
settingName :: ByteString
  , -- | @type@ is a 'LayerSettingTypeEXT' value specifying the type of the
    -- @pValues@ values.
    LayerSettingEXT -> LayerSettingTypeEXT
type' :: LayerSettingTypeEXT
  , -- No documentation found for Nested "VkLayerSettingEXT" "valueCount"
    LayerSettingEXT -> Word32
valueCount :: Word32
  , -- | @pValues@ is a pointer to an array of @count@ values of the type
    -- indicated by @type@ to configure the layer setting.
    LayerSettingEXT -> Ptr ()
values :: Ptr ()
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (LayerSettingEXT)
#endif
deriving instance Show LayerSettingEXT

instance ToCStruct LayerSettingEXT where
  withCStruct :: forall b. LayerSettingEXT -> (Ptr LayerSettingEXT -> IO b) -> IO b
withCStruct LayerSettingEXT
x Ptr LayerSettingEXT -> IO b
f = Int -> (Ptr LayerSettingEXT -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
32 ((Ptr LayerSettingEXT -> IO b) -> IO b)
-> (Ptr LayerSettingEXT -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr LayerSettingEXT
p -> Ptr LayerSettingEXT -> LayerSettingEXT -> IO b -> IO b
forall b. Ptr LayerSettingEXT -> LayerSettingEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr LayerSettingEXT
p LayerSettingEXT
x (Ptr LayerSettingEXT -> IO b
f Ptr LayerSettingEXT
p)
  pokeCStruct :: forall b. Ptr LayerSettingEXT -> LayerSettingEXT -> IO b -> IO b
pokeCStruct Ptr LayerSettingEXT
p LayerSettingEXT{Word32
Ptr ()
ByteString
LayerSettingTypeEXT
$sel:layerName:LayerSettingEXT :: LayerSettingEXT -> ByteString
$sel:settingName:LayerSettingEXT :: LayerSettingEXT -> ByteString
$sel:type':LayerSettingEXT :: LayerSettingEXT -> LayerSettingTypeEXT
$sel:valueCount:LayerSettingEXT :: LayerSettingEXT -> Word32
$sel:values:LayerSettingEXT :: LayerSettingEXT -> Ptr ()
layerName :: ByteString
settingName :: ByteString
type' :: LayerSettingTypeEXT
valueCount :: Word32
values :: Ptr ()
..} 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
    Ptr CChar
pLayerName'' <- ((Ptr CChar -> IO b) -> IO b) -> ContT b IO (Ptr CChar)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr CChar -> IO b) -> IO b) -> ContT b IO (Ptr CChar))
-> ((Ptr CChar -> IO b) -> IO b) -> ContT b IO (Ptr CChar)
forall a b. (a -> b) -> a -> b
$ ByteString -> (Ptr CChar -> IO b) -> IO b
forall a. ByteString -> (Ptr CChar -> IO a) -> IO a
useAsCString (ByteString
layerName)
    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 (Ptr CChar) -> Ptr CChar -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr LayerSettingEXT
p Ptr LayerSettingEXT -> Int -> Ptr (Ptr CChar)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr (Ptr CChar))) Ptr CChar
pLayerName''
    Ptr CChar
pSettingName'' <- ((Ptr CChar -> IO b) -> IO b) -> ContT b IO (Ptr CChar)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr CChar -> IO b) -> IO b) -> ContT b IO (Ptr CChar))
-> ((Ptr CChar -> IO b) -> IO b) -> ContT b IO (Ptr CChar)
forall a b. (a -> b) -> a -> b
$ ByteString -> (Ptr CChar -> IO b) -> IO b
forall a. ByteString -> (Ptr CChar -> IO a) -> IO a
useAsCString (ByteString
settingName)
    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 (Ptr CChar) -> Ptr CChar -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr LayerSettingEXT
p Ptr LayerSettingEXT -> Int -> Ptr (Ptr CChar)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr CChar))) Ptr CChar
pSettingName''
    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 LayerSettingTypeEXT -> LayerSettingTypeEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr LayerSettingEXT
p Ptr LayerSettingEXT -> Int -> Ptr LayerSettingTypeEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr LayerSettingTypeEXT)) (LayerSettingTypeEXT
type')
    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 Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr LayerSettingEXT
p Ptr LayerSettingEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr Word32)) (Word32
valueCount)
    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 (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr LayerSettingEXT
p Ptr LayerSettingEXT -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr (Ptr ()))) (Ptr ()
values)
    IO b -> ContT b IO b
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 b -> ContT b IO b) -> IO b -> ContT b IO b
forall a b. (a -> b) -> a -> b
$ IO b
f
  cStructSize :: Int
cStructSize = Int
32
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b. Ptr LayerSettingEXT -> IO b -> IO b
pokeZeroCStruct Ptr LayerSettingEXT
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
    Ptr CChar
pLayerName'' <- ((Ptr CChar -> IO b) -> IO b) -> ContT b IO (Ptr CChar)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr CChar -> IO b) -> IO b) -> ContT b IO (Ptr CChar))
-> ((Ptr CChar -> IO b) -> IO b) -> ContT b IO (Ptr CChar)
forall a b. (a -> b) -> a -> b
$ ByteString -> (Ptr CChar -> IO b) -> IO b
forall a. ByteString -> (Ptr CChar -> IO a) -> IO a
useAsCString (ByteString
forall a. Monoid a => a
mempty)
    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 (Ptr CChar) -> Ptr CChar -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr LayerSettingEXT
p Ptr LayerSettingEXT -> Int -> Ptr (Ptr CChar)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr (Ptr CChar))) Ptr CChar
pLayerName''
    Ptr CChar
pSettingName'' <- ((Ptr CChar -> IO b) -> IO b) -> ContT b IO (Ptr CChar)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr CChar -> IO b) -> IO b) -> ContT b IO (Ptr CChar))
-> ((Ptr CChar -> IO b) -> IO b) -> ContT b IO (Ptr CChar)
forall a b. (a -> b) -> a -> b
$ ByteString -> (Ptr CChar -> IO b) -> IO b
forall a. ByteString -> (Ptr CChar -> IO a) -> IO a
useAsCString (ByteString
forall a. Monoid a => a
mempty)
    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 (Ptr CChar) -> Ptr CChar -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr LayerSettingEXT
p Ptr LayerSettingEXT -> Int -> Ptr (Ptr CChar)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr CChar))) Ptr CChar
pSettingName''
    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 LayerSettingTypeEXT -> LayerSettingTypeEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr LayerSettingEXT
p Ptr LayerSettingEXT -> Int -> Ptr LayerSettingTypeEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr LayerSettingTypeEXT)) (LayerSettingTypeEXT
forall a. Zero a => a
zero)
    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 (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr LayerSettingEXT
p Ptr LayerSettingEXT -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr (Ptr ()))) (Ptr ()
forall a. Zero a => a
zero)
    IO b -> ContT b IO b
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 b -> ContT b IO b) -> IO b -> ContT b IO b
forall a b. (a -> b) -> a -> b
$ IO b
f

instance FromCStruct LayerSettingEXT where
  peekCStruct :: Ptr LayerSettingEXT -> IO LayerSettingEXT
peekCStruct Ptr LayerSettingEXT
p = do
    ByteString
pLayerName <- Ptr CChar -> IO ByteString
packCString (Ptr CChar -> IO ByteString) -> IO (Ptr CChar) -> IO ByteString
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Ptr (Ptr CChar) -> IO (Ptr CChar)
forall a. Storable a => Ptr a -> IO a
peek ((Ptr LayerSettingEXT
p Ptr LayerSettingEXT -> Int -> Ptr (Ptr CChar)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr (Ptr CChar)))
    ByteString
pSettingName <- Ptr CChar -> IO ByteString
packCString (Ptr CChar -> IO ByteString) -> IO (Ptr CChar) -> IO ByteString
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Ptr (Ptr CChar) -> IO (Ptr CChar)
forall a. Storable a => Ptr a -> IO a
peek ((Ptr LayerSettingEXT
p Ptr LayerSettingEXT -> Int -> Ptr (Ptr CChar)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr CChar)))
    LayerSettingTypeEXT
type' <- forall a. Storable a => Ptr a -> IO a
peek @LayerSettingTypeEXT ((Ptr LayerSettingEXT
p Ptr LayerSettingEXT -> Int -> Ptr LayerSettingTypeEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr LayerSettingTypeEXT))
    Word32
valueCount <- forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr LayerSettingEXT
p Ptr LayerSettingEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr Word32))
    Ptr ()
pValues <- forall a. Storable a => Ptr a -> IO a
peek @(Ptr ()) ((Ptr LayerSettingEXT
p Ptr LayerSettingEXT -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr (Ptr ())))
    LayerSettingEXT -> IO LayerSettingEXT
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (LayerSettingEXT -> IO LayerSettingEXT)
-> LayerSettingEXT -> IO LayerSettingEXT
forall a b. (a -> b) -> a -> b
$ ByteString
-> ByteString
-> LayerSettingTypeEXT
-> Word32
-> Ptr ()
-> LayerSettingEXT
LayerSettingEXT
             ByteString
pLayerName ByteString
pSettingName LayerSettingTypeEXT
type' Word32
valueCount Ptr ()
pValues

instance Zero LayerSettingEXT where
  zero :: LayerSettingEXT
zero = ByteString
-> ByteString
-> LayerSettingTypeEXT
-> Word32
-> Ptr ()
-> LayerSettingEXT
LayerSettingEXT
           ByteString
forall a. Monoid a => a
mempty
           ByteString
forall a. Monoid a => a
mempty
           LayerSettingTypeEXT
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero
           Ptr ()
forall a. Zero a => a
zero


-- | VkLayerSettingTypeEXT - Type of the values that can be passed to a layer
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_layer_settings VK_EXT_layer_settings>,
-- 'LayerSettingEXT'
newtype LayerSettingTypeEXT = LayerSettingTypeEXT Int32
  deriving newtype (LayerSettingTypeEXT -> LayerSettingTypeEXT -> Bool
(LayerSettingTypeEXT -> LayerSettingTypeEXT -> Bool)
-> (LayerSettingTypeEXT -> LayerSettingTypeEXT -> Bool)
-> Eq LayerSettingTypeEXT
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: LayerSettingTypeEXT -> LayerSettingTypeEXT -> Bool
== :: LayerSettingTypeEXT -> LayerSettingTypeEXT -> Bool
$c/= :: LayerSettingTypeEXT -> LayerSettingTypeEXT -> Bool
/= :: LayerSettingTypeEXT -> LayerSettingTypeEXT -> Bool
Eq, Eq LayerSettingTypeEXT
Eq LayerSettingTypeEXT =>
(LayerSettingTypeEXT -> LayerSettingTypeEXT -> Ordering)
-> (LayerSettingTypeEXT -> LayerSettingTypeEXT -> Bool)
-> (LayerSettingTypeEXT -> LayerSettingTypeEXT -> Bool)
-> (LayerSettingTypeEXT -> LayerSettingTypeEXT -> Bool)
-> (LayerSettingTypeEXT -> LayerSettingTypeEXT -> Bool)
-> (LayerSettingTypeEXT
    -> LayerSettingTypeEXT -> LayerSettingTypeEXT)
-> (LayerSettingTypeEXT
    -> LayerSettingTypeEXT -> LayerSettingTypeEXT)
-> Ord LayerSettingTypeEXT
LayerSettingTypeEXT -> LayerSettingTypeEXT -> Bool
LayerSettingTypeEXT -> LayerSettingTypeEXT -> Ordering
LayerSettingTypeEXT -> LayerSettingTypeEXT -> LayerSettingTypeEXT
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: LayerSettingTypeEXT -> LayerSettingTypeEXT -> Ordering
compare :: LayerSettingTypeEXT -> LayerSettingTypeEXT -> Ordering
$c< :: LayerSettingTypeEXT -> LayerSettingTypeEXT -> Bool
< :: LayerSettingTypeEXT -> LayerSettingTypeEXT -> Bool
$c<= :: LayerSettingTypeEXT -> LayerSettingTypeEXT -> Bool
<= :: LayerSettingTypeEXT -> LayerSettingTypeEXT -> Bool
$c> :: LayerSettingTypeEXT -> LayerSettingTypeEXT -> Bool
> :: LayerSettingTypeEXT -> LayerSettingTypeEXT -> Bool
$c>= :: LayerSettingTypeEXT -> LayerSettingTypeEXT -> Bool
>= :: LayerSettingTypeEXT -> LayerSettingTypeEXT -> Bool
$cmax :: LayerSettingTypeEXT -> LayerSettingTypeEXT -> LayerSettingTypeEXT
max :: LayerSettingTypeEXT -> LayerSettingTypeEXT -> LayerSettingTypeEXT
$cmin :: LayerSettingTypeEXT -> LayerSettingTypeEXT -> LayerSettingTypeEXT
min :: LayerSettingTypeEXT -> LayerSettingTypeEXT -> LayerSettingTypeEXT
Ord, Ptr LayerSettingTypeEXT -> IO LayerSettingTypeEXT
Ptr LayerSettingTypeEXT -> Int -> IO LayerSettingTypeEXT
Ptr LayerSettingTypeEXT -> Int -> LayerSettingTypeEXT -> IO ()
Ptr LayerSettingTypeEXT -> LayerSettingTypeEXT -> IO ()
LayerSettingTypeEXT -> Int
(LayerSettingTypeEXT -> Int)
-> (LayerSettingTypeEXT -> Int)
-> (Ptr LayerSettingTypeEXT -> Int -> IO LayerSettingTypeEXT)
-> (Ptr LayerSettingTypeEXT -> Int -> LayerSettingTypeEXT -> IO ())
-> (forall b. Ptr b -> Int -> IO LayerSettingTypeEXT)
-> (forall b. Ptr b -> Int -> LayerSettingTypeEXT -> IO ())
-> (Ptr LayerSettingTypeEXT -> IO LayerSettingTypeEXT)
-> (Ptr LayerSettingTypeEXT -> LayerSettingTypeEXT -> IO ())
-> Storable LayerSettingTypeEXT
forall b. Ptr b -> Int -> IO LayerSettingTypeEXT
forall b. Ptr b -> Int -> LayerSettingTypeEXT -> IO ()
forall a.
(a -> Int)
-> (a -> Int)
-> (Ptr a -> Int -> IO a)
-> (Ptr a -> Int -> a -> IO ())
-> (forall b. Ptr b -> Int -> IO a)
-> (forall b. Ptr b -> Int -> a -> IO ())
-> (Ptr a -> IO a)
-> (Ptr a -> a -> IO ())
-> Storable a
$csizeOf :: LayerSettingTypeEXT -> Int
sizeOf :: LayerSettingTypeEXT -> Int
$calignment :: LayerSettingTypeEXT -> Int
alignment :: LayerSettingTypeEXT -> Int
$cpeekElemOff :: Ptr LayerSettingTypeEXT -> Int -> IO LayerSettingTypeEXT
peekElemOff :: Ptr LayerSettingTypeEXT -> Int -> IO LayerSettingTypeEXT
$cpokeElemOff :: Ptr LayerSettingTypeEXT -> Int -> LayerSettingTypeEXT -> IO ()
pokeElemOff :: Ptr LayerSettingTypeEXT -> Int -> LayerSettingTypeEXT -> IO ()
$cpeekByteOff :: forall b. Ptr b -> Int -> IO LayerSettingTypeEXT
peekByteOff :: forall b. Ptr b -> Int -> IO LayerSettingTypeEXT
$cpokeByteOff :: forall b. Ptr b -> Int -> LayerSettingTypeEXT -> IO ()
pokeByteOff :: forall b. Ptr b -> Int -> LayerSettingTypeEXT -> IO ()
$cpeek :: Ptr LayerSettingTypeEXT -> IO LayerSettingTypeEXT
peek :: Ptr LayerSettingTypeEXT -> IO LayerSettingTypeEXT
$cpoke :: Ptr LayerSettingTypeEXT -> LayerSettingTypeEXT -> IO ()
poke :: Ptr LayerSettingTypeEXT -> LayerSettingTypeEXT -> IO ()
Storable, LayerSettingTypeEXT
LayerSettingTypeEXT -> Zero LayerSettingTypeEXT
forall a. a -> Zero a
$czero :: LayerSettingTypeEXT
zero :: LayerSettingTypeEXT
Zero)

-- | 'LAYER_SETTING_TYPE_BOOL32_EXT' specifies that the layer setting’s type
-- is 'Vulkan.Core10.FundamentalTypes.Bool32'.
pattern $bLAYER_SETTING_TYPE_BOOL32_EXT :: LayerSettingTypeEXT
$mLAYER_SETTING_TYPE_BOOL32_EXT :: forall {r}.
LayerSettingTypeEXT -> ((# #) -> r) -> ((# #) -> r) -> r
LAYER_SETTING_TYPE_BOOL32_EXT = LayerSettingTypeEXT 0

-- | 'LAYER_SETTING_TYPE_INT32_EXT' specifies that the layer setting’s type
-- is signed 32-bit integer.
pattern $bLAYER_SETTING_TYPE_INT32_EXT :: LayerSettingTypeEXT
$mLAYER_SETTING_TYPE_INT32_EXT :: forall {r}.
LayerSettingTypeEXT -> ((# #) -> r) -> ((# #) -> r) -> r
LAYER_SETTING_TYPE_INT32_EXT = LayerSettingTypeEXT 1

-- | 'LAYER_SETTING_TYPE_INT64_EXT' specifies that the layer setting’s type
-- is signed 64-bit integer.
pattern $bLAYER_SETTING_TYPE_INT64_EXT :: LayerSettingTypeEXT
$mLAYER_SETTING_TYPE_INT64_EXT :: forall {r}.
LayerSettingTypeEXT -> ((# #) -> r) -> ((# #) -> r) -> r
LAYER_SETTING_TYPE_INT64_EXT = LayerSettingTypeEXT 2

-- | 'LAYER_SETTING_TYPE_UINT32_EXT' specifies that the layer setting’s type
-- is unsigned 32-bit integer.
pattern $bLAYER_SETTING_TYPE_UINT32_EXT :: LayerSettingTypeEXT
$mLAYER_SETTING_TYPE_UINT32_EXT :: forall {r}.
LayerSettingTypeEXT -> ((# #) -> r) -> ((# #) -> r) -> r
LAYER_SETTING_TYPE_UINT32_EXT = LayerSettingTypeEXT 3

-- | 'LAYER_SETTING_TYPE_UINT64_EXT' specifies that the layer setting’s type
-- is unsigned 64-bit integer.
pattern $bLAYER_SETTING_TYPE_UINT64_EXT :: LayerSettingTypeEXT
$mLAYER_SETTING_TYPE_UINT64_EXT :: forall {r}.
LayerSettingTypeEXT -> ((# #) -> r) -> ((# #) -> r) -> r
LAYER_SETTING_TYPE_UINT64_EXT = LayerSettingTypeEXT 4

-- | 'LAYER_SETTING_TYPE_FLOAT32_EXT' specifies that the layer setting’s type
-- is 32-bit floating-point.
pattern $bLAYER_SETTING_TYPE_FLOAT32_EXT :: LayerSettingTypeEXT
$mLAYER_SETTING_TYPE_FLOAT32_EXT :: forall {r}.
LayerSettingTypeEXT -> ((# #) -> r) -> ((# #) -> r) -> r
LAYER_SETTING_TYPE_FLOAT32_EXT = LayerSettingTypeEXT 5

-- | 'LAYER_SETTING_TYPE_FLOAT64_EXT' specifies that the layer setting’s type
-- is 64-bit floating-point.
pattern $bLAYER_SETTING_TYPE_FLOAT64_EXT :: LayerSettingTypeEXT
$mLAYER_SETTING_TYPE_FLOAT64_EXT :: forall {r}.
LayerSettingTypeEXT -> ((# #) -> r) -> ((# #) -> r) -> r
LAYER_SETTING_TYPE_FLOAT64_EXT = LayerSettingTypeEXT 6

-- | 'LAYER_SETTING_TYPE_STRING_EXT' specifies that the layer setting’s type
-- is a pointer to a null-terminated UTF-8 string.
pattern $bLAYER_SETTING_TYPE_STRING_EXT :: LayerSettingTypeEXT
$mLAYER_SETTING_TYPE_STRING_EXT :: forall {r}.
LayerSettingTypeEXT -> ((# #) -> r) -> ((# #) -> r) -> r
LAYER_SETTING_TYPE_STRING_EXT = LayerSettingTypeEXT 7

{-# COMPLETE
  LAYER_SETTING_TYPE_BOOL32_EXT
  , LAYER_SETTING_TYPE_INT32_EXT
  , LAYER_SETTING_TYPE_INT64_EXT
  , LAYER_SETTING_TYPE_UINT32_EXT
  , LAYER_SETTING_TYPE_UINT64_EXT
  , LAYER_SETTING_TYPE_FLOAT32_EXT
  , LAYER_SETTING_TYPE_FLOAT64_EXT
  , LAYER_SETTING_TYPE_STRING_EXT ::
    LayerSettingTypeEXT
  #-}

conNameLayerSettingTypeEXT :: String
conNameLayerSettingTypeEXT :: String
conNameLayerSettingTypeEXT = String
"LayerSettingTypeEXT"

enumPrefixLayerSettingTypeEXT :: String
enumPrefixLayerSettingTypeEXT :: String
enumPrefixLayerSettingTypeEXT = String
"LAYER_SETTING_TYPE_"

showTableLayerSettingTypeEXT :: [(LayerSettingTypeEXT, String)]
showTableLayerSettingTypeEXT :: [(LayerSettingTypeEXT, String)]
showTableLayerSettingTypeEXT =
  [ (LayerSettingTypeEXT
LAYER_SETTING_TYPE_BOOL32_EXT, String
"BOOL32_EXT")
  , (LayerSettingTypeEXT
LAYER_SETTING_TYPE_INT32_EXT, String
"INT32_EXT")
  , (LayerSettingTypeEXT
LAYER_SETTING_TYPE_INT64_EXT, String
"INT64_EXT")
  , (LayerSettingTypeEXT
LAYER_SETTING_TYPE_UINT32_EXT, String
"UINT32_EXT")
  , (LayerSettingTypeEXT
LAYER_SETTING_TYPE_UINT64_EXT, String
"UINT64_EXT")
  , (LayerSettingTypeEXT
LAYER_SETTING_TYPE_FLOAT32_EXT, String
"FLOAT32_EXT")
  , (LayerSettingTypeEXT
LAYER_SETTING_TYPE_FLOAT64_EXT, String
"FLOAT64_EXT")
  , (LayerSettingTypeEXT
LAYER_SETTING_TYPE_STRING_EXT, String
"STRING_EXT")
  ]

instance Show LayerSettingTypeEXT where
  showsPrec :: Int -> LayerSettingTypeEXT -> ShowS
showsPrec =
    String
-> [(LayerSettingTypeEXT, String)]
-> String
-> (LayerSettingTypeEXT -> Int32)
-> (Int32 -> ShowS)
-> Int
-> LayerSettingTypeEXT
-> ShowS
forall a i.
Eq a =>
String
-> [(a, String)]
-> String
-> (a -> i)
-> (i -> ShowS)
-> Int
-> a
-> ShowS
enumShowsPrec
      String
enumPrefixLayerSettingTypeEXT
      [(LayerSettingTypeEXT, String)]
showTableLayerSettingTypeEXT
      String
conNameLayerSettingTypeEXT
      (\(LayerSettingTypeEXT Int32
x) -> Int32
x)
      (Int -> Int32 -> ShowS
forall a. Show a => Int -> a -> ShowS
showsPrec Int
11)

instance Read LayerSettingTypeEXT where
  readPrec :: ReadPrec LayerSettingTypeEXT
readPrec =
    String
-> [(LayerSettingTypeEXT, String)]
-> String
-> (Int32 -> LayerSettingTypeEXT)
-> ReadPrec LayerSettingTypeEXT
forall i a.
Read i =>
String -> [(a, String)] -> String -> (i -> a) -> ReadPrec a
enumReadPrec
      String
enumPrefixLayerSettingTypeEXT
      [(LayerSettingTypeEXT, String)]
showTableLayerSettingTypeEXT
      String
conNameLayerSettingTypeEXT
      Int32 -> LayerSettingTypeEXT
LayerSettingTypeEXT

type EXT_LAYER_SETTINGS_SPEC_VERSION = 2

-- No documentation found for TopLevel "VK_EXT_LAYER_SETTINGS_SPEC_VERSION"
pattern EXT_LAYER_SETTINGS_SPEC_VERSION :: forall a . Integral a => a
pattern $bEXT_LAYER_SETTINGS_SPEC_VERSION :: forall a. Integral a => a
$mEXT_LAYER_SETTINGS_SPEC_VERSION :: forall {r} {a}.
Integral a =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
EXT_LAYER_SETTINGS_SPEC_VERSION = 2


type EXT_LAYER_SETTINGS_EXTENSION_NAME = "VK_EXT_layer_settings"

-- No documentation found for TopLevel "VK_EXT_LAYER_SETTINGS_EXTENSION_NAME"
pattern EXT_LAYER_SETTINGS_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
pattern $bEXT_LAYER_SETTINGS_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a
$mEXT_LAYER_SETTINGS_EXTENSION_NAME :: forall {r} {a}.
(Eq a, IsString a) =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
EXT_LAYER_SETTINGS_EXTENSION_NAME = "VK_EXT_layer_settings"