{-# language CPP #-}
-- No documentation found for Chapter "Promoted_From_VK_EXT_pipeline_robustnessAdditionalFunctionality'"
module Vulkan.Core14.Promoted_From_VK_EXT_pipeline_robustnessAdditionalFunctionality'  ( PhysicalDevicePipelineRobustnessFeatures(..)
                                                                                       , PipelineRobustnessCreateInfo(..)
                                                                                       , PhysicalDevicePipelineRobustnessProperties(..)
                                                                                       , StructureType(..)
                                                                                       , PipelineRobustnessBufferBehavior(..)
                                                                                       , PipelineRobustnessImageBehavior(..)
                                                                                       ) 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.Core10.FundamentalTypes (bool32ToBool)
import Vulkan.Core10.FundamentalTypes (boolToBool32)
import Vulkan.Core10.FundamentalTypes (Bool32)
import Vulkan.Core14.Enums.PipelineRobustnessBufferBehavior (PipelineRobustnessBufferBehavior)
import Vulkan.Core14.Enums.PipelineRobustnessImageBehavior (PipelineRobustnessImageBehavior)
import Vulkan.Core10.Enums.StructureType (StructureType)
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_FEATURES))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_PROPERTIES))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_ROBUSTNESS_CREATE_INFO))
import Vulkan.Core14.Enums.PipelineRobustnessBufferBehavior (PipelineRobustnessBufferBehavior(..))
import Vulkan.Core14.Enums.PipelineRobustnessImageBehavior (PipelineRobustnessImageBehavior(..))
import Vulkan.Core10.Enums.StructureType (StructureType(..))
-- | VkPhysicalDevicePipelineRobustnessFeatures - Structure describing
-- whether an implementation supports robustness requests on a per-pipeline
-- stage granularity
--
-- = Members
--
-- This structure describes the following feature:
--
-- = Description
--
-- Enabling the
-- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-pipelineRobustness pipelineRobustness>
-- feature may, on some platforms, incur a minor performance cost when the
-- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-robustBufferAccess robustBufferAccess>
-- feature is not enabled, even for pipelines which do not make use of any
-- robustness features. If robustness is not needed, the
-- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-pipelineRobustness pipelineRobustness>
-- feature should not be enabled by an application.
--
-- If the 'PhysicalDevicePipelineRobustnessFeatures' structure is included
-- in the @pNext@ chain of the
-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2'
-- structure passed to
-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceFeatures2',
-- it is filled in to indicate whether each corresponding feature is
-- supported. If the application wishes to use a
-- 'Vulkan.Core10.Handles.Device' with any features described by
-- 'PhysicalDevicePipelineRobustnessFeatures', it /must/ add an instance of
-- the structure, with the desired feature members set to
-- 'Vulkan.Core10.FundamentalTypes.TRUE', to the @pNext@ chain of
-- 'Vulkan.Core10.Device.DeviceCreateInfo' when creating the
-- 'Vulkan.Core10.Handles.Device'.
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_pipeline_robustness VK_EXT_pipeline_robustness>,
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_4 VK_VERSION_1_4>,
-- 'Vulkan.Core10.FundamentalTypes.Bool32',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data PhysicalDevicePipelineRobustnessFeatures = PhysicalDevicePipelineRobustnessFeatures
  { -- | #extension-features-pipelineRobustness# @pipelineRobustness@ indicates
    -- that robustness /can/ be requested on a per-pipeline-stage granularity.
    PhysicalDevicePipelineRobustnessFeatures -> Bool
pipelineRobustness :: Bool }
  deriving (Typeable, PhysicalDevicePipelineRobustnessFeatures
-> PhysicalDevicePipelineRobustnessFeatures -> Bool
(PhysicalDevicePipelineRobustnessFeatures
 -> PhysicalDevicePipelineRobustnessFeatures -> Bool)
-> (PhysicalDevicePipelineRobustnessFeatures
    -> PhysicalDevicePipelineRobustnessFeatures -> Bool)
-> Eq PhysicalDevicePipelineRobustnessFeatures
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: PhysicalDevicePipelineRobustnessFeatures
-> PhysicalDevicePipelineRobustnessFeatures -> Bool
== :: PhysicalDevicePipelineRobustnessFeatures
-> PhysicalDevicePipelineRobustnessFeatures -> Bool
$c/= :: PhysicalDevicePipelineRobustnessFeatures
-> PhysicalDevicePipelineRobustnessFeatures -> Bool
/= :: PhysicalDevicePipelineRobustnessFeatures
-> PhysicalDevicePipelineRobustnessFeatures -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (PhysicalDevicePipelineRobustnessFeatures)
#endif
deriving instance Show PhysicalDevicePipelineRobustnessFeatures

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

instance FromCStruct PhysicalDevicePipelineRobustnessFeatures where
  peekCStruct :: Ptr PhysicalDevicePipelineRobustnessFeatures
-> IO PhysicalDevicePipelineRobustnessFeatures
peekCStruct Ptr PhysicalDevicePipelineRobustnessFeatures
p = do
    pipelineRobustness <- forall a. Storable a => Ptr a -> IO a
peek @Bool32 ((Ptr PhysicalDevicePipelineRobustnessFeatures
p Ptr PhysicalDevicePipelineRobustnessFeatures -> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Bool32))
    pure $ PhysicalDevicePipelineRobustnessFeatures
             (bool32ToBool pipelineRobustness)

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

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


-- | VkPipelineRobustnessCreateInfo - Structure controlling the robustness of
-- a newly created pipeline shader stage
--
-- = Description
--
-- Resources bound as
-- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_MUTABLE_EXT' will
-- have the robustness behavior that covers its active descriptor type.
--
-- The scope of the effect of 'PipelineRobustnessCreateInfo' depends on
-- which structure’s @pNext@ chain it is included in.
--
-- -   'Vulkan.Core10.GraphicsPipeline.GraphicsPipelineCreateInfo',
--     'Vulkan.Extensions.VK_KHR_ray_tracing_pipeline.RayTracingPipelineCreateInfoKHR',
--     'Vulkan.Core10.ComputePipeline.ComputePipelineCreateInfo':
--     The robustness behavior described by 'PipelineRobustnessCreateInfo'
--     applies to all accesses through this pipeline
--
-- -   'Vulkan.Core10.ComputePipeline.PipelineShaderStageCreateInfo':
--     The robustness behavior described by 'PipelineRobustnessCreateInfo'
--     applies to all accesses emanating from the shader code of this
--     shader stage
--
-- If 'PipelineRobustnessCreateInfo' is specified for both a pipeline and a
-- pipeline stage, the 'PipelineRobustnessCreateInfo' specified for the
-- pipeline stage will take precedence.
--
-- When 'PipelineRobustnessCreateInfo' is specified for a pipeline, it only
-- affects the subset of the pipeline that is specified by the create info,
-- as opposed to subsets linked from pipeline libraries. For
-- 'Vulkan.Core10.GraphicsPipeline.GraphicsPipelineCreateInfo', that subset
-- is specified by
-- 'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.GraphicsPipelineLibraryCreateInfoEXT'::@flags@.
-- For
-- 'Vulkan.Extensions.VK_KHR_ray_tracing_pipeline.RayTracingPipelineCreateInfoKHR',
-- that subset is specified by the specific stages in
-- 'Vulkan.Extensions.VK_KHR_ray_tracing_pipeline.RayTracingPipelineCreateInfoKHR'::@pStages@.
--
-- == Valid Usage
--
-- -   #VUID-VkPipelineRobustnessCreateInfo-pipelineRobustness-06926# If
--     the
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-pipelineRobustness pipelineRobustness>
--     feature is not enabled, @storageBuffers@ /must/ be
--     'Vulkan.Core14.Enums.PipelineRobustnessBufferBehavior.PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DEVICE_DEFAULT'
--
-- -   #VUID-VkPipelineRobustnessCreateInfo-pipelineRobustness-06927# If
--     the
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-pipelineRobustness pipelineRobustness>
--     feature is not enabled, @uniformBuffers@ /must/ be
--     'Vulkan.Core14.Enums.PipelineRobustnessBufferBehavior.PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DEVICE_DEFAULT'
--
-- -   #VUID-VkPipelineRobustnessCreateInfo-pipelineRobustness-06928# If
--     the
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-pipelineRobustness pipelineRobustness>
--     feature is not enabled, @vertexInputs@ /must/ be
--     'Vulkan.Core14.Enums.PipelineRobustnessBufferBehavior.PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DEVICE_DEFAULT'
--
-- -   #VUID-VkPipelineRobustnessCreateInfo-pipelineRobustness-06929# If
--     the
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-pipelineRobustness pipelineRobustness>
--     feature is not enabled, @images@ /must/ be
--     'Vulkan.Core14.Enums.PipelineRobustnessImageBehavior.PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DEVICE_DEFAULT'
--
-- -   #VUID-VkPipelineRobustnessCreateInfo-robustImageAccess-06930# If the
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-robustImageAccess robustImageAccess>
--     feature is not supported, @images@ /must/ not be
--     'Vulkan.Core14.Enums.PipelineRobustnessImageBehavior.PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS'
--
-- -   #VUID-VkPipelineRobustnessCreateInfo-robustBufferAccess2-06931# If
--     the
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-robustBufferAccess2 robustBufferAccess2>
--     feature is not supported, @storageBuffers@ /must/ not be
--     'Vulkan.Core14.Enums.PipelineRobustnessBufferBehavior.PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2'
--
-- -   #VUID-VkPipelineRobustnessCreateInfo-robustBufferAccess2-06932# If
--     the
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-robustBufferAccess2 robustBufferAccess2>
--     feature is not supported, @uniformBuffers@ /must/ not be
--     'Vulkan.Core14.Enums.PipelineRobustnessBufferBehavior.PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2'
--
-- -   #VUID-VkPipelineRobustnessCreateInfo-robustBufferAccess2-06933# If
--     the
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-robustBufferAccess2 robustBufferAccess2>
--     feature is not supported, @vertexInputs@ /must/ not be
--     'Vulkan.Core14.Enums.PipelineRobustnessBufferBehavior.PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2'
--
-- -   #VUID-VkPipelineRobustnessCreateInfo-robustImageAccess2-06934# If
--     the
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-robustImageAccess2 robustImageAccess2>
--     feature is not supported, @images@ /must/ not be
--     'Vulkan.Core14.Enums.PipelineRobustnessImageBehavior.PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_2'
--
-- -   #VUID-VkPipelineRobustnessCreateInfo-storageBuffers-10636# If
--     @storageBuffers@ is
--     'Vulkan.Core14.Enums.PipelineRobustnessBufferBehavior.PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS'
--     or
--     'Vulkan.Core14.Enums.PipelineRobustnessBufferBehavior.PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2',
--     and either the
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-descriptorBindingStorageBufferUpdateAfterBind descriptorBindingStorageBufferUpdateAfterBind>
--     feature or the
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-descriptorBindingStorageTexelBufferUpdateAfterBind descriptorBindingStorageTexelBufferUpdateAfterBind>
--     feature is enabled on the device,
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#limits-robustBufferAccessUpdateAfterBind robustBufferAccessUpdateAfterBind>
--     /must/ be 'Vulkan.Core10.FundamentalTypes.TRUE'
--
-- -   #VUID-VkPipelineRobustnessCreateInfo-uniformBuffers-10637# If
--     @uniformBuffers@ is
--     'Vulkan.Core14.Enums.PipelineRobustnessBufferBehavior.PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS'
--     or
--     'Vulkan.Core14.Enums.PipelineRobustnessBufferBehavior.PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2',
--     and either the
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-descriptorBindingInlineUniformBlockUpdateAfterBind descriptorBindingInlineUniformBlockUpdateAfterBind>
--     feature, the
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-descriptorBindingUniformBufferUpdateAfterBind descriptorBindingUniformBufferUpdateAfterBind>
--     feature, or the
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-descriptorBindingUniformTexelBufferUpdateAfterBind descriptorBindingUniformTexelBufferUpdateAfterBind>
--     feature is enabled on the device,
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#limits-robustBufferAccessUpdateAfterBind robustBufferAccessUpdateAfterBind>
--     /must/ be 'Vulkan.Core10.FundamentalTypes.TRUE'
--
-- -   #VUID-VkPipelineRobustnessCreateInfo-images-10638# If @images@ is
--     'Vulkan.Core14.Enums.PipelineRobustnessImageBehavior.PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS'
--     or
--     'Vulkan.Core14.Enums.PipelineRobustnessImageBehavior.PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_2',
--     and either the
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-descriptorBindingStorageImageUpdateAfterBind descriptorBindingStorageImageUpdateAfterBind>
--     feature or the
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-descriptorBindingSampledImageUpdateAfterBind descriptorBindingSampledImageUpdateAfterBind>
--     feature is enabled on the device,
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#limits-robustBufferAccessUpdateAfterBind robustBufferAccessUpdateAfterBind>
--     /must/ be 'Vulkan.Core10.FundamentalTypes.TRUE'
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkPipelineRobustnessCreateInfo-sType-sType# @sType@ /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_ROBUSTNESS_CREATE_INFO'
--
-- -   #VUID-VkPipelineRobustnessCreateInfo-storageBuffers-parameter#
--     @storageBuffers@ /must/ be a valid
--     'Vulkan.Core14.Enums.PipelineRobustnessBufferBehavior.PipelineRobustnessBufferBehavior'
--     value
--
-- -   #VUID-VkPipelineRobustnessCreateInfo-uniformBuffers-parameter#
--     @uniformBuffers@ /must/ be a valid
--     'Vulkan.Core14.Enums.PipelineRobustnessBufferBehavior.PipelineRobustnessBufferBehavior'
--     value
--
-- -   #VUID-VkPipelineRobustnessCreateInfo-vertexInputs-parameter#
--     @vertexInputs@ /must/ be a valid
--     'Vulkan.Core14.Enums.PipelineRobustnessBufferBehavior.PipelineRobustnessBufferBehavior'
--     value
--
-- -   #VUID-VkPipelineRobustnessCreateInfo-images-parameter# @images@
--     /must/ be a valid
--     'Vulkan.Core14.Enums.PipelineRobustnessImageBehavior.PipelineRobustnessImageBehavior'
--     value
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_pipeline_robustness VK_EXT_pipeline_robustness>,
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_4 VK_VERSION_1_4>,
-- 'Vulkan.Core14.Enums.PipelineRobustnessBufferBehavior.PipelineRobustnessBufferBehavior',
-- 'Vulkan.Core14.Enums.PipelineRobustnessImageBehavior.PipelineRobustnessImageBehavior',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data PipelineRobustnessCreateInfo = PipelineRobustnessCreateInfo
  { -- | @storageBuffers@ sets the behavior of out of bounds accesses made to
    -- resources bound as:
    --
    -- -   'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER'
    --
    -- -   'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER'
    --
    -- -   'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC'
    PipelineRobustnessCreateInfo -> PipelineRobustnessBufferBehavior
storageBuffers :: PipelineRobustnessBufferBehavior
  , -- | @uniformBuffers@ describes the behavior of out of bounds accesses made
    -- to resources bound as:
    --
    -- -   'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER'
    --
    -- -   'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER'
    --
    -- -   'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC'
    --
    -- -   'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK'
    PipelineRobustnessCreateInfo -> PipelineRobustnessBufferBehavior
uniformBuffers :: PipelineRobustnessBufferBehavior
  , -- | @vertexInputs@ describes the behavior of out of bounds accesses made to
    -- vertex input attributes
    PipelineRobustnessCreateInfo -> PipelineRobustnessBufferBehavior
vertexInputs :: PipelineRobustnessBufferBehavior
  , -- | @images@ describes the behavior of out of bounds accesses made to
    -- resources bound as:
    --
    -- -   'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_SAMPLED_IMAGE'
    --
    -- -   'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_IMAGE'
    PipelineRobustnessCreateInfo -> PipelineRobustnessImageBehavior
images :: PipelineRobustnessImageBehavior
  }
  deriving (Typeable, PipelineRobustnessCreateInfo
-> PipelineRobustnessCreateInfo -> Bool
(PipelineRobustnessCreateInfo
 -> PipelineRobustnessCreateInfo -> Bool)
-> (PipelineRobustnessCreateInfo
    -> PipelineRobustnessCreateInfo -> Bool)
-> Eq PipelineRobustnessCreateInfo
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: PipelineRobustnessCreateInfo
-> PipelineRobustnessCreateInfo -> Bool
== :: PipelineRobustnessCreateInfo
-> PipelineRobustnessCreateInfo -> Bool
$c/= :: PipelineRobustnessCreateInfo
-> PipelineRobustnessCreateInfo -> Bool
/= :: PipelineRobustnessCreateInfo
-> PipelineRobustnessCreateInfo -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (PipelineRobustnessCreateInfo)
#endif
deriving instance Show PipelineRobustnessCreateInfo

instance ToCStruct PipelineRobustnessCreateInfo where
  withCStruct :: forall b.
PipelineRobustnessCreateInfo
-> (Ptr PipelineRobustnessCreateInfo -> IO b) -> IO b
withCStruct PipelineRobustnessCreateInfo
x Ptr PipelineRobustnessCreateInfo -> IO b
f = Int -> (Ptr PipelineRobustnessCreateInfo -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
32 ((Ptr PipelineRobustnessCreateInfo -> IO b) -> IO b)
-> (Ptr PipelineRobustnessCreateInfo -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr PipelineRobustnessCreateInfo
p -> Ptr PipelineRobustnessCreateInfo
-> PipelineRobustnessCreateInfo -> IO b -> IO b
forall b.
Ptr PipelineRobustnessCreateInfo
-> PipelineRobustnessCreateInfo -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr PipelineRobustnessCreateInfo
p PipelineRobustnessCreateInfo
x (Ptr PipelineRobustnessCreateInfo -> IO b
f Ptr PipelineRobustnessCreateInfo
p)
  pokeCStruct :: forall b.
Ptr PipelineRobustnessCreateInfo
-> PipelineRobustnessCreateInfo -> IO b -> IO b
pokeCStruct Ptr PipelineRobustnessCreateInfo
p PipelineRobustnessCreateInfo{PipelineRobustnessImageBehavior
PipelineRobustnessBufferBehavior
storageBuffers :: PipelineRobustnessCreateInfo -> PipelineRobustnessBufferBehavior
uniformBuffers :: PipelineRobustnessCreateInfo -> PipelineRobustnessBufferBehavior
vertexInputs :: PipelineRobustnessCreateInfo -> PipelineRobustnessBufferBehavior
images :: PipelineRobustnessCreateInfo -> PipelineRobustnessImageBehavior
storageBuffers :: PipelineRobustnessBufferBehavior
uniformBuffers :: PipelineRobustnessBufferBehavior
vertexInputs :: PipelineRobustnessBufferBehavior
images :: PipelineRobustnessImageBehavior
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PipelineRobustnessCreateInfo
p Ptr PipelineRobustnessCreateInfo -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PIPELINE_ROBUSTNESS_CREATE_INFO)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PipelineRobustnessCreateInfo
p Ptr PipelineRobustnessCreateInfo -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr PipelineRobustnessBufferBehavior
-> PipelineRobustnessBufferBehavior -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PipelineRobustnessCreateInfo
p Ptr PipelineRobustnessCreateInfo
-> Int -> Ptr PipelineRobustnessBufferBehavior
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr PipelineRobustnessBufferBehavior)) (PipelineRobustnessBufferBehavior
storageBuffers)
    Ptr PipelineRobustnessBufferBehavior
-> PipelineRobustnessBufferBehavior -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PipelineRobustnessCreateInfo
p Ptr PipelineRobustnessCreateInfo
-> Int -> Ptr PipelineRobustnessBufferBehavior
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr PipelineRobustnessBufferBehavior)) (PipelineRobustnessBufferBehavior
uniformBuffers)
    Ptr PipelineRobustnessBufferBehavior
-> PipelineRobustnessBufferBehavior -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PipelineRobustnessCreateInfo
p Ptr PipelineRobustnessCreateInfo
-> Int -> Ptr PipelineRobustnessBufferBehavior
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr PipelineRobustnessBufferBehavior)) (PipelineRobustnessBufferBehavior
vertexInputs)
    Ptr PipelineRobustnessImageBehavior
-> PipelineRobustnessImageBehavior -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PipelineRobustnessCreateInfo
p Ptr PipelineRobustnessCreateInfo
-> Int -> Ptr PipelineRobustnessImageBehavior
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
28 :: Ptr PipelineRobustnessImageBehavior)) (PipelineRobustnessImageBehavior
images)
    IO b
f
  cStructSize :: Int
cStructSize = Int
32
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b. Ptr PipelineRobustnessCreateInfo -> IO b -> IO b
pokeZeroCStruct Ptr PipelineRobustnessCreateInfo
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PipelineRobustnessCreateInfo
p Ptr PipelineRobustnessCreateInfo -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PIPELINE_ROBUSTNESS_CREATE_INFO)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PipelineRobustnessCreateInfo
p Ptr PipelineRobustnessCreateInfo -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr PipelineRobustnessBufferBehavior
-> PipelineRobustnessBufferBehavior -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PipelineRobustnessCreateInfo
p Ptr PipelineRobustnessCreateInfo
-> Int -> Ptr PipelineRobustnessBufferBehavior
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr PipelineRobustnessBufferBehavior)) (PipelineRobustnessBufferBehavior
forall a. Zero a => a
zero)
    Ptr PipelineRobustnessBufferBehavior
-> PipelineRobustnessBufferBehavior -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PipelineRobustnessCreateInfo
p Ptr PipelineRobustnessCreateInfo
-> Int -> Ptr PipelineRobustnessBufferBehavior
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr PipelineRobustnessBufferBehavior)) (PipelineRobustnessBufferBehavior
forall a. Zero a => a
zero)
    Ptr PipelineRobustnessBufferBehavior
-> PipelineRobustnessBufferBehavior -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PipelineRobustnessCreateInfo
p Ptr PipelineRobustnessCreateInfo
-> Int -> Ptr PipelineRobustnessBufferBehavior
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr PipelineRobustnessBufferBehavior)) (PipelineRobustnessBufferBehavior
forall a. Zero a => a
zero)
    Ptr PipelineRobustnessImageBehavior
-> PipelineRobustnessImageBehavior -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PipelineRobustnessCreateInfo
p Ptr PipelineRobustnessCreateInfo
-> Int -> Ptr PipelineRobustnessImageBehavior
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
28 :: Ptr PipelineRobustnessImageBehavior)) (PipelineRobustnessImageBehavior
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct PipelineRobustnessCreateInfo where
  peekCStruct :: Ptr PipelineRobustnessCreateInfo -> IO PipelineRobustnessCreateInfo
peekCStruct Ptr PipelineRobustnessCreateInfo
p = do
    storageBuffers <- forall a. Storable a => Ptr a -> IO a
peek @PipelineRobustnessBufferBehavior ((Ptr PipelineRobustnessCreateInfo
p Ptr PipelineRobustnessCreateInfo
-> Int -> Ptr PipelineRobustnessBufferBehavior
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr PipelineRobustnessBufferBehavior))
    uniformBuffers <- peek @PipelineRobustnessBufferBehavior ((p `plusPtr` 20 :: Ptr PipelineRobustnessBufferBehavior))
    vertexInputs <- peek @PipelineRobustnessBufferBehavior ((p `plusPtr` 24 :: Ptr PipelineRobustnessBufferBehavior))
    images <- peek @PipelineRobustnessImageBehavior ((p `plusPtr` 28 :: Ptr PipelineRobustnessImageBehavior))
    pure $ PipelineRobustnessCreateInfo
             storageBuffers uniformBuffers vertexInputs images

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

instance Zero PipelineRobustnessCreateInfo where
  zero :: PipelineRobustnessCreateInfo
zero = PipelineRobustnessBufferBehavior
-> PipelineRobustnessBufferBehavior
-> PipelineRobustnessBufferBehavior
-> PipelineRobustnessImageBehavior
-> PipelineRobustnessCreateInfo
PipelineRobustnessCreateInfo
           PipelineRobustnessBufferBehavior
forall a. Zero a => a
zero
           PipelineRobustnessBufferBehavior
forall a. Zero a => a
zero
           PipelineRobustnessBufferBehavior
forall a. Zero a => a
zero
           PipelineRobustnessImageBehavior
forall a. Zero a => a
zero


-- | VkPhysicalDevicePipelineRobustnessProperties - Structure describing the
-- default robustness behavior of a physical device
--
-- = Description
--
-- Some implementations of Vulkan may be able to guarantee that certain
-- types of accesses are always performed with robustness even when the
-- Vulkan API’s robustness features are not explicitly enabled.
--
-- Even when an implementation reports that accesses to a given resource
-- type are robust by default, it remains invalid to make an out of bounds
-- access without requesting the appropriate robustness feature.
--
-- If the 'PhysicalDevicePipelineRobustnessProperties' structure is
-- included in the @pNext@ chain of the
-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2'
-- structure passed to
-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceProperties2',
-- it is filled in with each corresponding implementation-dependent
-- property.
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_pipeline_robustness VK_EXT_pipeline_robustness>,
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_4 VK_VERSION_1_4>,
-- 'Vulkan.Core14.Enums.PipelineRobustnessBufferBehavior.PipelineRobustnessBufferBehavior',
-- 'Vulkan.Core14.Enums.PipelineRobustnessImageBehavior.PipelineRobustnessImageBehavior',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data PhysicalDevicePipelineRobustnessProperties = PhysicalDevicePipelineRobustnessProperties
  { -- | @defaultRobustnessStorageBuffers@ describes the behavior of out of
    -- bounds accesses made to storage buffers when no robustness features are
    -- enabled
    PhysicalDevicePipelineRobustnessProperties
-> PipelineRobustnessBufferBehavior
defaultRobustnessStorageBuffers :: PipelineRobustnessBufferBehavior
  , -- | @defaultRobustnessUniformBuffers@ describes the behavior of out of
    -- bounds accesses made to uniform buffers when no robustness features are
    -- enabled
    PhysicalDevicePipelineRobustnessProperties
-> PipelineRobustnessBufferBehavior
defaultRobustnessUniformBuffers :: PipelineRobustnessBufferBehavior
  , -- | @defaultRobustnessVertexInputs@ describes the behavior of out of bounds
    -- accesses made to vertex input attributes when no robustness features are
    -- enabled
    PhysicalDevicePipelineRobustnessProperties
-> PipelineRobustnessBufferBehavior
defaultRobustnessVertexInputs :: PipelineRobustnessBufferBehavior
  , -- | @defaultRobustnessImages@ describes the behavior of out of bounds
    -- accesses made to images when no robustness features are enabled
    PhysicalDevicePipelineRobustnessProperties
-> PipelineRobustnessImageBehavior
defaultRobustnessImages :: PipelineRobustnessImageBehavior
  }
  deriving (Typeable, PhysicalDevicePipelineRobustnessProperties
-> PhysicalDevicePipelineRobustnessProperties -> Bool
(PhysicalDevicePipelineRobustnessProperties
 -> PhysicalDevicePipelineRobustnessProperties -> Bool)
-> (PhysicalDevicePipelineRobustnessProperties
    -> PhysicalDevicePipelineRobustnessProperties -> Bool)
-> Eq PhysicalDevicePipelineRobustnessProperties
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: PhysicalDevicePipelineRobustnessProperties
-> PhysicalDevicePipelineRobustnessProperties -> Bool
== :: PhysicalDevicePipelineRobustnessProperties
-> PhysicalDevicePipelineRobustnessProperties -> Bool
$c/= :: PhysicalDevicePipelineRobustnessProperties
-> PhysicalDevicePipelineRobustnessProperties -> Bool
/= :: PhysicalDevicePipelineRobustnessProperties
-> PhysicalDevicePipelineRobustnessProperties -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (PhysicalDevicePipelineRobustnessProperties)
#endif
deriving instance Show PhysicalDevicePipelineRobustnessProperties

instance ToCStruct PhysicalDevicePipelineRobustnessProperties where
  withCStruct :: forall b.
PhysicalDevicePipelineRobustnessProperties
-> (Ptr PhysicalDevicePipelineRobustnessProperties -> IO b) -> IO b
withCStruct PhysicalDevicePipelineRobustnessProperties
x Ptr PhysicalDevicePipelineRobustnessProperties -> IO b
f = Int
-> (Ptr PhysicalDevicePipelineRobustnessProperties -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
32 ((Ptr PhysicalDevicePipelineRobustnessProperties -> IO b) -> IO b)
-> (Ptr PhysicalDevicePipelineRobustnessProperties -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr PhysicalDevicePipelineRobustnessProperties
p -> Ptr PhysicalDevicePipelineRobustnessProperties
-> PhysicalDevicePipelineRobustnessProperties -> IO b -> IO b
forall b.
Ptr PhysicalDevicePipelineRobustnessProperties
-> PhysicalDevicePipelineRobustnessProperties -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr PhysicalDevicePipelineRobustnessProperties
p PhysicalDevicePipelineRobustnessProperties
x (Ptr PhysicalDevicePipelineRobustnessProperties -> IO b
f Ptr PhysicalDevicePipelineRobustnessProperties
p)
  pokeCStruct :: forall b.
Ptr PhysicalDevicePipelineRobustnessProperties
-> PhysicalDevicePipelineRobustnessProperties -> IO b -> IO b
pokeCStruct Ptr PhysicalDevicePipelineRobustnessProperties
p PhysicalDevicePipelineRobustnessProperties{PipelineRobustnessImageBehavior
PipelineRobustnessBufferBehavior
defaultRobustnessStorageBuffers :: PhysicalDevicePipelineRobustnessProperties
-> PipelineRobustnessBufferBehavior
defaultRobustnessUniformBuffers :: PhysicalDevicePipelineRobustnessProperties
-> PipelineRobustnessBufferBehavior
defaultRobustnessVertexInputs :: PhysicalDevicePipelineRobustnessProperties
-> PipelineRobustnessBufferBehavior
defaultRobustnessImages :: PhysicalDevicePipelineRobustnessProperties
-> PipelineRobustnessImageBehavior
defaultRobustnessStorageBuffers :: PipelineRobustnessBufferBehavior
defaultRobustnessUniformBuffers :: PipelineRobustnessBufferBehavior
defaultRobustnessVertexInputs :: PipelineRobustnessBufferBehavior
defaultRobustnessImages :: PipelineRobustnessImageBehavior
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDevicePipelineRobustnessProperties
p Ptr PhysicalDevicePipelineRobustnessProperties
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_PROPERTIES)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDevicePipelineRobustnessProperties
p Ptr PhysicalDevicePipelineRobustnessProperties
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr PipelineRobustnessBufferBehavior
-> PipelineRobustnessBufferBehavior -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDevicePipelineRobustnessProperties
p Ptr PhysicalDevicePipelineRobustnessProperties
-> Int -> Ptr PipelineRobustnessBufferBehavior
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr PipelineRobustnessBufferBehavior)) (PipelineRobustnessBufferBehavior
defaultRobustnessStorageBuffers)
    Ptr PipelineRobustnessBufferBehavior
-> PipelineRobustnessBufferBehavior -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDevicePipelineRobustnessProperties
p Ptr PhysicalDevicePipelineRobustnessProperties
-> Int -> Ptr PipelineRobustnessBufferBehavior
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr PipelineRobustnessBufferBehavior)) (PipelineRobustnessBufferBehavior
defaultRobustnessUniformBuffers)
    Ptr PipelineRobustnessBufferBehavior
-> PipelineRobustnessBufferBehavior -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDevicePipelineRobustnessProperties
p Ptr PhysicalDevicePipelineRobustnessProperties
-> Int -> Ptr PipelineRobustnessBufferBehavior
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr PipelineRobustnessBufferBehavior)) (PipelineRobustnessBufferBehavior
defaultRobustnessVertexInputs)
    Ptr PipelineRobustnessImageBehavior
-> PipelineRobustnessImageBehavior -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDevicePipelineRobustnessProperties
p Ptr PhysicalDevicePipelineRobustnessProperties
-> Int -> Ptr PipelineRobustnessImageBehavior
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
28 :: Ptr PipelineRobustnessImageBehavior)) (PipelineRobustnessImageBehavior
defaultRobustnessImages)
    IO b
f
  cStructSize :: Int
cStructSize = Int
32
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b.
Ptr PhysicalDevicePipelineRobustnessProperties -> IO b -> IO b
pokeZeroCStruct Ptr PhysicalDevicePipelineRobustnessProperties
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDevicePipelineRobustnessProperties
p Ptr PhysicalDevicePipelineRobustnessProperties
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_PROPERTIES)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDevicePipelineRobustnessProperties
p Ptr PhysicalDevicePipelineRobustnessProperties
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr PipelineRobustnessBufferBehavior
-> PipelineRobustnessBufferBehavior -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDevicePipelineRobustnessProperties
p Ptr PhysicalDevicePipelineRobustnessProperties
-> Int -> Ptr PipelineRobustnessBufferBehavior
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr PipelineRobustnessBufferBehavior)) (PipelineRobustnessBufferBehavior
forall a. Zero a => a
zero)
    Ptr PipelineRobustnessBufferBehavior
-> PipelineRobustnessBufferBehavior -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDevicePipelineRobustnessProperties
p Ptr PhysicalDevicePipelineRobustnessProperties
-> Int -> Ptr PipelineRobustnessBufferBehavior
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr PipelineRobustnessBufferBehavior)) (PipelineRobustnessBufferBehavior
forall a. Zero a => a
zero)
    Ptr PipelineRobustnessBufferBehavior
-> PipelineRobustnessBufferBehavior -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDevicePipelineRobustnessProperties
p Ptr PhysicalDevicePipelineRobustnessProperties
-> Int -> Ptr PipelineRobustnessBufferBehavior
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr PipelineRobustnessBufferBehavior)) (PipelineRobustnessBufferBehavior
forall a. Zero a => a
zero)
    Ptr PipelineRobustnessImageBehavior
-> PipelineRobustnessImageBehavior -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDevicePipelineRobustnessProperties
p Ptr PhysicalDevicePipelineRobustnessProperties
-> Int -> Ptr PipelineRobustnessImageBehavior
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
28 :: Ptr PipelineRobustnessImageBehavior)) (PipelineRobustnessImageBehavior
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct PhysicalDevicePipelineRobustnessProperties where
  peekCStruct :: Ptr PhysicalDevicePipelineRobustnessProperties
-> IO PhysicalDevicePipelineRobustnessProperties
peekCStruct Ptr PhysicalDevicePipelineRobustnessProperties
p = do
    defaultRobustnessStorageBuffers <- forall a. Storable a => Ptr a -> IO a
peek @PipelineRobustnessBufferBehavior ((Ptr PhysicalDevicePipelineRobustnessProperties
p Ptr PhysicalDevicePipelineRobustnessProperties
-> Int -> Ptr PipelineRobustnessBufferBehavior
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr PipelineRobustnessBufferBehavior))
    defaultRobustnessUniformBuffers <- peek @PipelineRobustnessBufferBehavior ((p `plusPtr` 20 :: Ptr PipelineRobustnessBufferBehavior))
    defaultRobustnessVertexInputs <- peek @PipelineRobustnessBufferBehavior ((p `plusPtr` 24 :: Ptr PipelineRobustnessBufferBehavior))
    defaultRobustnessImages <- peek @PipelineRobustnessImageBehavior ((p `plusPtr` 28 :: Ptr PipelineRobustnessImageBehavior))
    pure $ PhysicalDevicePipelineRobustnessProperties
             defaultRobustnessStorageBuffers
             defaultRobustnessUniformBuffers
             defaultRobustnessVertexInputs
             defaultRobustnessImages

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

instance Zero PhysicalDevicePipelineRobustnessProperties where
  zero :: PhysicalDevicePipelineRobustnessProperties
zero = PipelineRobustnessBufferBehavior
-> PipelineRobustnessBufferBehavior
-> PipelineRobustnessBufferBehavior
-> PipelineRobustnessImageBehavior
-> PhysicalDevicePipelineRobustnessProperties
PhysicalDevicePipelineRobustnessProperties
           PipelineRobustnessBufferBehavior
forall a. Zero a => a
zero
           PipelineRobustnessBufferBehavior
forall a. Zero a => a
zero
           PipelineRobustnessBufferBehavior
forall a. Zero a => a
zero
           PipelineRobustnessImageBehavior
forall a. Zero a => a
zero