{-# language CPP #-}
-- | = Name
--
-- VK_EXT_pipeline_creation_feedback - device extension
--
-- == VK_EXT_pipeline_creation_feedback
--
-- [__Name String__]
--     @VK_EXT_pipeline_creation_feedback@
--
-- [__Extension Type__]
--     Device extension
--
-- [__Registered Extension Number__]
--     193
--
-- [__Revision__]
--     1
--
-- [__Extension and Version Dependencies__]
--
--     -   Requires Vulkan 1.0
--
-- [__Special Use__]
--
--     -   <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#extendingvulkan-compatibility-specialuse Developer tools>
--
-- [__Contact__]
--
--     -   Jean-Francois Roy
--         <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?body=[VK_EXT_pipeline_creation_feedback] @jfroy%0A<<Here describe the issue or question you have about the VK_EXT_pipeline_creation_feedback extension>> >
--
-- == Other Extension Metadata
--
-- [__Last Modified Date__]
--     2019-03-12
--
-- [__IP Status__]
--     No known IP claims.
--
-- [__Contributors__]
--
--     -   Jean-Francois Roy, Google
--
--     -   Hai Nguyen, Google
--
--     -   Andrew Ellem, Google
--
--     -   Bob Fraser, Google
--
--     -   Sujeevan Rajayogam, Google
--
--     -   Jan-Harald Fredriksen, ARM
--
--     -   Jeff Leger, Qualcomm Technologies, Inc.
--
--     -   Jeff Bolz, NVIDIA
--
--     -   Daniel Koch, NVIDIA
--
--     -   Neil Henning, AMD
--
-- == Description
--
-- This extension adds a mechanism to provide feedback to an application
-- about pipeline creation, with the specific goal of allowing a feedback
-- loop between build systems and in-the-field application executions to
-- ensure effective pipeline caches are shipped to customers.
--
-- == New Structures
--
-- -   'PipelineCreationFeedbackEXT'
--
-- -   Extending 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo',
--     'Vulkan.Core10.Pipeline.ComputePipelineCreateInfo',
--     'Vulkan.Extensions.VK_NV_ray_tracing.RayTracingPipelineCreateInfoNV',
--     'Vulkan.Extensions.VK_KHR_ray_tracing_pipeline.RayTracingPipelineCreateInfoKHR':
--
--     -   'PipelineCreationFeedbackCreateInfoEXT'
--
-- == New Enums
--
-- -   'PipelineCreationFeedbackFlagBitsEXT'
--
-- == New Bitmasks
--
-- -   'PipelineCreationFeedbackFlagsEXT'
--
-- == New Enum Constants
--
-- -   'EXT_PIPELINE_CREATION_FEEDBACK_EXTENSION_NAME'
--
-- -   'EXT_PIPELINE_CREATION_FEEDBACK_SPEC_VERSION'
--
-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT'
--
-- == Version History
--
-- -   Revision 1, 2019-03-12 (Jean-Francois Roy)
--
--     -   Initial revision
--
-- == See Also
--
-- 'PipelineCreationFeedbackCreateInfoEXT', 'PipelineCreationFeedbackEXT',
-- 'PipelineCreationFeedbackFlagBitsEXT',
-- 'PipelineCreationFeedbackFlagsEXT'
--
-- == Document Notes
--
-- For more information, see the
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_pipeline_creation_feedback 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_pipeline_creation_feedback  ( PipelineCreationFeedbackEXT(..)
                                                            , PipelineCreationFeedbackCreateInfoEXT(..)
                                                            , PipelineCreationFeedbackFlagsEXT
                                                            , PipelineCreationFeedbackFlagBitsEXT( PIPELINE_CREATION_FEEDBACK_VALID_BIT_EXT
                                                                                                 , PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT_EXT
                                                                                                 , PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT_EXT
                                                                                                 , ..
                                                                                                 )
                                                            , EXT_PIPELINE_CREATION_FEEDBACK_SPEC_VERSION
                                                            , pattern EXT_PIPELINE_CREATION_FEEDBACK_SPEC_VERSION
                                                            , EXT_PIPELINE_CREATION_FEEDBACK_EXTENSION_NAME
                                                            , pattern EXT_PIPELINE_CREATION_FEEDBACK_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 (showString)
import Numeric (showHex)
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.Bits (Bits)
import Data.Bits (FiniteBits)
import Data.String (IsString)
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 GHC.Read (Read(readPrec))
import GHC.Show (Show(showsPrec))
import Data.Word (Word32)
import Data.Word (Word64)
import Data.Kind (Type)
import Vulkan.Core10.FundamentalTypes (Flags)
import Vulkan.Core10.Enums.StructureType (StructureType)
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT))
-- | VkPipelineCreationFeedbackEXT - Feedback about the creation of a
-- pipeline or pipeline stage
--
-- = Description
--
-- If the 'PIPELINE_CREATION_FEEDBACK_VALID_BIT_EXT' is not set in @flags@,
-- an implementation /must/ not set any other bits in @flags@, and the
-- values of all other 'PipelineCreationFeedbackEXT' data members are
-- undefined.
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_pipeline_creation_feedback VK_EXT_pipeline_creation_feedback>,
-- 'PipelineCreationFeedbackCreateInfoEXT',
-- 'PipelineCreationFeedbackFlagBitsEXT',
-- 'PipelineCreationFeedbackFlagsEXT'
data PipelineCreationFeedbackEXT = PipelineCreationFeedbackEXT
  { -- | @flags@ is a bitmask of 'PipelineCreationFeedbackFlagBitsEXT' providing
    -- feedback about the creation of a pipeline or of a pipeline stage.
    PipelineCreationFeedbackEXT -> PipelineCreationFeedbackFlagsEXT
flags :: PipelineCreationFeedbackFlagsEXT
  , -- | @duration@ is the duration spent creating a pipeline or pipeline stage
    -- in nanoseconds.
    PipelineCreationFeedbackEXT -> Word64
duration :: Word64
  }
  deriving (Typeable, PipelineCreationFeedbackEXT -> PipelineCreationFeedbackEXT -> Bool
(PipelineCreationFeedbackEXT
 -> PipelineCreationFeedbackEXT -> Bool)
-> (PipelineCreationFeedbackEXT
    -> PipelineCreationFeedbackEXT -> Bool)
-> Eq PipelineCreationFeedbackEXT
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PipelineCreationFeedbackEXT -> PipelineCreationFeedbackEXT -> Bool
$c/= :: PipelineCreationFeedbackEXT -> PipelineCreationFeedbackEXT -> Bool
== :: PipelineCreationFeedbackEXT -> PipelineCreationFeedbackEXT -> Bool
$c== :: PipelineCreationFeedbackEXT -> PipelineCreationFeedbackEXT -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (PipelineCreationFeedbackEXT)
#endif
deriving instance Show PipelineCreationFeedbackEXT

instance ToCStruct PipelineCreationFeedbackEXT where
  withCStruct :: PipelineCreationFeedbackEXT
-> (Ptr PipelineCreationFeedbackEXT -> IO b) -> IO b
withCStruct PipelineCreationFeedbackEXT
x Ptr PipelineCreationFeedbackEXT -> IO b
f = Int -> (Ptr PipelineCreationFeedbackEXT -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
16 ((Ptr PipelineCreationFeedbackEXT -> IO b) -> IO b)
-> (Ptr PipelineCreationFeedbackEXT -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr PipelineCreationFeedbackEXT
p -> Ptr PipelineCreationFeedbackEXT
-> PipelineCreationFeedbackEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr PipelineCreationFeedbackEXT
p PipelineCreationFeedbackEXT
x (Ptr PipelineCreationFeedbackEXT -> IO b
f Ptr PipelineCreationFeedbackEXT
p)
  pokeCStruct :: Ptr PipelineCreationFeedbackEXT
-> PipelineCreationFeedbackEXT -> IO b -> IO b
pokeCStruct Ptr PipelineCreationFeedbackEXT
p PipelineCreationFeedbackEXT{Word64
PipelineCreationFeedbackFlagsEXT
duration :: Word64
flags :: PipelineCreationFeedbackFlagsEXT
$sel:duration:PipelineCreationFeedbackEXT :: PipelineCreationFeedbackEXT -> Word64
$sel:flags:PipelineCreationFeedbackEXT :: PipelineCreationFeedbackEXT -> PipelineCreationFeedbackFlagsEXT
..} IO b
f = do
    Ptr PipelineCreationFeedbackFlagsEXT
-> PipelineCreationFeedbackFlagsEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PipelineCreationFeedbackEXT
p Ptr PipelineCreationFeedbackEXT
-> Int -> Ptr PipelineCreationFeedbackFlagsEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr PipelineCreationFeedbackFlagsEXT)) (PipelineCreationFeedbackFlagsEXT
flags)
    Ptr Word64 -> Word64 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PipelineCreationFeedbackEXT
p Ptr PipelineCreationFeedbackEXT -> Int -> Ptr Word64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr Word64)) (Word64
duration)
    IO b
f
  cStructSize :: Int
cStructSize = Int
16
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: Ptr PipelineCreationFeedbackEXT -> IO b -> IO b
pokeZeroCStruct Ptr PipelineCreationFeedbackEXT
p IO b
f = do
    Ptr PipelineCreationFeedbackFlagsEXT
-> PipelineCreationFeedbackFlagsEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PipelineCreationFeedbackEXT
p Ptr PipelineCreationFeedbackEXT
-> Int -> Ptr PipelineCreationFeedbackFlagsEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr PipelineCreationFeedbackFlagsEXT)) (PipelineCreationFeedbackFlagsEXT
forall a. Zero a => a
zero)
    Ptr Word64 -> Word64 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PipelineCreationFeedbackEXT
p Ptr PipelineCreationFeedbackEXT -> Int -> Ptr Word64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr Word64)) (Word64
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct PipelineCreationFeedbackEXT where
  peekCStruct :: Ptr PipelineCreationFeedbackEXT -> IO PipelineCreationFeedbackEXT
peekCStruct Ptr PipelineCreationFeedbackEXT
p = do
    PipelineCreationFeedbackFlagsEXT
flags <- Ptr PipelineCreationFeedbackFlagsEXT
-> IO PipelineCreationFeedbackFlagsEXT
forall a. Storable a => Ptr a -> IO a
peek @PipelineCreationFeedbackFlagsEXT ((Ptr PipelineCreationFeedbackEXT
p Ptr PipelineCreationFeedbackEXT
-> Int -> Ptr PipelineCreationFeedbackFlagsEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr PipelineCreationFeedbackFlagsEXT))
    Word64
duration <- Ptr Word64 -> IO Word64
forall a. Storable a => Ptr a -> IO a
peek @Word64 ((Ptr PipelineCreationFeedbackEXT
p Ptr PipelineCreationFeedbackEXT -> Int -> Ptr Word64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr Word64))
    PipelineCreationFeedbackEXT -> IO PipelineCreationFeedbackEXT
forall (f :: * -> *) a. Applicative f => a -> f a
pure (PipelineCreationFeedbackEXT -> IO PipelineCreationFeedbackEXT)
-> PipelineCreationFeedbackEXT -> IO PipelineCreationFeedbackEXT
forall a b. (a -> b) -> a -> b
$ PipelineCreationFeedbackFlagsEXT
-> Word64 -> PipelineCreationFeedbackEXT
PipelineCreationFeedbackEXT
             PipelineCreationFeedbackFlagsEXT
flags Word64
duration

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

instance Zero PipelineCreationFeedbackEXT where
  zero :: PipelineCreationFeedbackEXT
zero = PipelineCreationFeedbackFlagsEXT
-> Word64 -> PipelineCreationFeedbackEXT
PipelineCreationFeedbackEXT
           PipelineCreationFeedbackFlagsEXT
forall a. Zero a => a
zero
           Word64
forall a. Zero a => a
zero


-- | VkPipelineCreationFeedbackCreateInfoEXT - Request for feedback about the
-- creation of a pipeline
--
-- = Description
--
-- An implementation /should/ write pipeline creation feedback to
-- @pPipelineCreationFeedback@ and /may/ write pipeline stage creation
-- feedback to @pPipelineStageCreationFeedbacks@. An implementation /must/
-- set or clear the 'PIPELINE_CREATION_FEEDBACK_VALID_BIT_EXT' in
-- 'PipelineCreationFeedbackEXT'::@flags@ for @pPipelineCreationFeedback@
-- and every element of @pPipelineStageCreationFeedbacks@.
--
-- Note
--
-- One common scenario for an implementation to skip per-stage feedback is
-- when 'PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT_EXT'
-- is set in @pPipelineCreationFeedback@.
--
-- When chained to
-- 'Vulkan.Extensions.VK_KHR_ray_tracing_pipeline.RayTracingPipelineCreateInfoKHR',
-- 'Vulkan.Extensions.VK_NV_ray_tracing.RayTracingPipelineCreateInfoNV', or
-- 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo', the @i@ element of
-- @pPipelineStageCreationFeedbacks@ corresponds to the @i@ element of
-- 'Vulkan.Extensions.VK_KHR_ray_tracing_pipeline.RayTracingPipelineCreateInfoKHR'::@pStages@,
-- 'Vulkan.Extensions.VK_NV_ray_tracing.RayTracingPipelineCreateInfoNV'::@pStages@,
-- or 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@pStages@. When
-- chained to 'Vulkan.Core10.Pipeline.ComputePipelineCreateInfo', the first
-- element of @pPipelineStageCreationFeedbacks@ corresponds to
-- 'Vulkan.Core10.Pipeline.ComputePipelineCreateInfo'::@stage@.
--
-- == Valid Usage
--
-- -   #VUID-VkPipelineCreationFeedbackCreateInfoEXT-pipelineStageCreationFeedbackCount-02668#
--     When chained to 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo',
--     'PipelineCreationFeedbackEXT'::@pipelineStageCreationFeedbackCount@
--     /must/ equal
--     'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo'::@stageCount@
--
-- -   #VUID-VkPipelineCreationFeedbackCreateInfoEXT-pipelineStageCreationFeedbackCount-02669#
--     When chained to 'Vulkan.Core10.Pipeline.ComputePipelineCreateInfo',
--     'PipelineCreationFeedbackEXT'::@pipelineStageCreationFeedbackCount@
--     /must/ equal 1
--
-- -   #VUID-VkPipelineCreationFeedbackCreateInfoEXT-pipelineStageCreationFeedbackCount-02670#
--     When chained to
--     'Vulkan.Extensions.VK_KHR_ray_tracing_pipeline.RayTracingPipelineCreateInfoKHR',
--     'PipelineCreationFeedbackEXT'::@pipelineStageCreationFeedbackCount@
--     /must/ equal
--     'Vulkan.Extensions.VK_KHR_ray_tracing_pipeline.RayTracingPipelineCreateInfoKHR'::@stageCount@
--
-- -   #VUID-VkPipelineCreationFeedbackCreateInfoEXT-pipelineStageCreationFeedbackCount-02969#
--     When chained to
--     'Vulkan.Extensions.VK_NV_ray_tracing.RayTracingPipelineCreateInfoNV',
--     'PipelineCreationFeedbackEXT'::@pipelineStageCreationFeedbackCount@
--     /must/ equal
--     'Vulkan.Extensions.VK_NV_ray_tracing.RayTracingPipelineCreateInfoNV'::@stageCount@
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkPipelineCreationFeedbackCreateInfoEXT-sType-sType# @sType@
--     /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT'
--
-- -   #VUID-VkPipelineCreationFeedbackCreateInfoEXT-pPipelineCreationFeedback-parameter#
--     @pPipelineCreationFeedback@ /must/ be a valid pointer to a
--     'PipelineCreationFeedbackEXT' structure
--
-- -   #VUID-VkPipelineCreationFeedbackCreateInfoEXT-pPipelineStageCreationFeedbacks-parameter#
--     @pPipelineStageCreationFeedbacks@ /must/ be a valid pointer to an
--     array of @pipelineStageCreationFeedbackCount@
--     'PipelineCreationFeedbackEXT' structures
--
-- -   #VUID-VkPipelineCreationFeedbackCreateInfoEXT-pipelineStageCreationFeedbackCount-arraylength#
--     @pipelineStageCreationFeedbackCount@ /must/ be greater than @0@
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_pipeline_creation_feedback VK_EXT_pipeline_creation_feedback>,
-- 'Vulkan.Core10.Pipeline.ComputePipelineCreateInfo',
-- 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo',
-- 'PipelineCreationFeedbackEXT',
-- 'Vulkan.Extensions.VK_KHR_ray_tracing_pipeline.RayTracingPipelineCreateInfoKHR',
-- 'Vulkan.Extensions.VK_NV_ray_tracing.RayTracingPipelineCreateInfoNV',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data PipelineCreationFeedbackCreateInfoEXT = PipelineCreationFeedbackCreateInfoEXT
  { -- | @pPipelineCreationFeedback@ is a pointer to a
    -- 'PipelineCreationFeedbackEXT' structure.
    PipelineCreationFeedbackCreateInfoEXT
-> Ptr PipelineCreationFeedbackEXT
pipelineCreationFeedback :: Ptr PipelineCreationFeedbackEXT
  , -- | @pipelineStageCreationFeedbackCount@ is the number of elements in
    -- @pPipelineStageCreationFeedbacks@.
    PipelineCreationFeedbackCreateInfoEXT -> Word32
pipelineStageCreationFeedbackCount :: Word32
  , -- | @pPipelineStageCreationFeedbacks@ is a pointer to an array of
    -- @pipelineStageCreationFeedbackCount@ 'PipelineCreationFeedbackEXT'
    -- structures.
    PipelineCreationFeedbackCreateInfoEXT
-> Ptr PipelineCreationFeedbackEXT
pipelineStageCreationFeedbacks :: Ptr PipelineCreationFeedbackEXT
  }
  deriving (Typeable, PipelineCreationFeedbackCreateInfoEXT
-> PipelineCreationFeedbackCreateInfoEXT -> Bool
(PipelineCreationFeedbackCreateInfoEXT
 -> PipelineCreationFeedbackCreateInfoEXT -> Bool)
-> (PipelineCreationFeedbackCreateInfoEXT
    -> PipelineCreationFeedbackCreateInfoEXT -> Bool)
-> Eq PipelineCreationFeedbackCreateInfoEXT
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PipelineCreationFeedbackCreateInfoEXT
-> PipelineCreationFeedbackCreateInfoEXT -> Bool
$c/= :: PipelineCreationFeedbackCreateInfoEXT
-> PipelineCreationFeedbackCreateInfoEXT -> Bool
== :: PipelineCreationFeedbackCreateInfoEXT
-> PipelineCreationFeedbackCreateInfoEXT -> Bool
$c== :: PipelineCreationFeedbackCreateInfoEXT
-> PipelineCreationFeedbackCreateInfoEXT -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (PipelineCreationFeedbackCreateInfoEXT)
#endif
deriving instance Show PipelineCreationFeedbackCreateInfoEXT

instance ToCStruct PipelineCreationFeedbackCreateInfoEXT where
  withCStruct :: PipelineCreationFeedbackCreateInfoEXT
-> (Ptr PipelineCreationFeedbackCreateInfoEXT -> IO b) -> IO b
withCStruct PipelineCreationFeedbackCreateInfoEXT
x Ptr PipelineCreationFeedbackCreateInfoEXT -> IO b
f = Int -> (Ptr PipelineCreationFeedbackCreateInfoEXT -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
40 ((Ptr PipelineCreationFeedbackCreateInfoEXT -> IO b) -> IO b)
-> (Ptr PipelineCreationFeedbackCreateInfoEXT -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr PipelineCreationFeedbackCreateInfoEXT
p -> Ptr PipelineCreationFeedbackCreateInfoEXT
-> PipelineCreationFeedbackCreateInfoEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr PipelineCreationFeedbackCreateInfoEXT
p PipelineCreationFeedbackCreateInfoEXT
x (Ptr PipelineCreationFeedbackCreateInfoEXT -> IO b
f Ptr PipelineCreationFeedbackCreateInfoEXT
p)
  pokeCStruct :: Ptr PipelineCreationFeedbackCreateInfoEXT
-> PipelineCreationFeedbackCreateInfoEXT -> IO b -> IO b
pokeCStruct Ptr PipelineCreationFeedbackCreateInfoEXT
p PipelineCreationFeedbackCreateInfoEXT{Word32
Ptr PipelineCreationFeedbackEXT
pipelineStageCreationFeedbacks :: Ptr PipelineCreationFeedbackEXT
pipelineStageCreationFeedbackCount :: Word32
pipelineCreationFeedback :: Ptr PipelineCreationFeedbackEXT
$sel:pipelineStageCreationFeedbacks:PipelineCreationFeedbackCreateInfoEXT :: PipelineCreationFeedbackCreateInfoEXT
-> Ptr PipelineCreationFeedbackEXT
$sel:pipelineStageCreationFeedbackCount:PipelineCreationFeedbackCreateInfoEXT :: PipelineCreationFeedbackCreateInfoEXT -> Word32
$sel:pipelineCreationFeedback:PipelineCreationFeedbackCreateInfoEXT :: PipelineCreationFeedbackCreateInfoEXT
-> Ptr PipelineCreationFeedbackEXT
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PipelineCreationFeedbackCreateInfoEXT
p Ptr PipelineCreationFeedbackCreateInfoEXT
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PipelineCreationFeedbackCreateInfoEXT
p Ptr PipelineCreationFeedbackCreateInfoEXT -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr (Ptr PipelineCreationFeedbackEXT)
-> Ptr PipelineCreationFeedbackEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PipelineCreationFeedbackCreateInfoEXT
p Ptr PipelineCreationFeedbackCreateInfoEXT
-> Int -> Ptr (Ptr PipelineCreationFeedbackEXT)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr (Ptr PipelineCreationFeedbackEXT))) (Ptr PipelineCreationFeedbackEXT
pipelineCreationFeedback)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PipelineCreationFeedbackCreateInfoEXT
p Ptr PipelineCreationFeedbackCreateInfoEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Word32)) (Word32
pipelineStageCreationFeedbackCount)
    Ptr (Ptr PipelineCreationFeedbackEXT)
-> Ptr PipelineCreationFeedbackEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PipelineCreationFeedbackCreateInfoEXT
p Ptr PipelineCreationFeedbackCreateInfoEXT
-> Int -> Ptr (Ptr PipelineCreationFeedbackEXT)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr (Ptr PipelineCreationFeedbackEXT))) (Ptr PipelineCreationFeedbackEXT
pipelineStageCreationFeedbacks)
    IO b
f
  cStructSize :: Int
cStructSize = Int
40
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: Ptr PipelineCreationFeedbackCreateInfoEXT -> IO b -> IO b
pokeZeroCStruct Ptr PipelineCreationFeedbackCreateInfoEXT
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PipelineCreationFeedbackCreateInfoEXT
p Ptr PipelineCreationFeedbackCreateInfoEXT
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PipelineCreationFeedbackCreateInfoEXT
p Ptr PipelineCreationFeedbackCreateInfoEXT -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr (Ptr PipelineCreationFeedbackEXT)
-> Ptr PipelineCreationFeedbackEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PipelineCreationFeedbackCreateInfoEXT
p Ptr PipelineCreationFeedbackCreateInfoEXT
-> Int -> Ptr (Ptr PipelineCreationFeedbackEXT)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr (Ptr PipelineCreationFeedbackEXT))) (Ptr PipelineCreationFeedbackEXT
forall a. Zero a => a
zero)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PipelineCreationFeedbackCreateInfoEXT
p Ptr PipelineCreationFeedbackCreateInfoEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Word32)) (Word32
forall a. Zero a => a
zero)
    Ptr (Ptr PipelineCreationFeedbackEXT)
-> Ptr PipelineCreationFeedbackEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PipelineCreationFeedbackCreateInfoEXT
p Ptr PipelineCreationFeedbackCreateInfoEXT
-> Int -> Ptr (Ptr PipelineCreationFeedbackEXT)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr (Ptr PipelineCreationFeedbackEXT))) (Ptr PipelineCreationFeedbackEXT
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct PipelineCreationFeedbackCreateInfoEXT where
  peekCStruct :: Ptr PipelineCreationFeedbackCreateInfoEXT
-> IO PipelineCreationFeedbackCreateInfoEXT
peekCStruct Ptr PipelineCreationFeedbackCreateInfoEXT
p = do
    Ptr PipelineCreationFeedbackEXT
pPipelineCreationFeedback <- Ptr (Ptr PipelineCreationFeedbackEXT)
-> IO (Ptr PipelineCreationFeedbackEXT)
forall a. Storable a => Ptr a -> IO a
peek @(Ptr PipelineCreationFeedbackEXT) ((Ptr PipelineCreationFeedbackCreateInfoEXT
p Ptr PipelineCreationFeedbackCreateInfoEXT
-> Int -> Ptr (Ptr PipelineCreationFeedbackEXT)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr (Ptr PipelineCreationFeedbackEXT)))
    Word32
pipelineStageCreationFeedbackCount <- Ptr Word32 -> IO Word32
forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr PipelineCreationFeedbackCreateInfoEXT
p Ptr PipelineCreationFeedbackCreateInfoEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Word32))
    Ptr PipelineCreationFeedbackEXT
pPipelineStageCreationFeedbacks <- Ptr (Ptr PipelineCreationFeedbackEXT)
-> IO (Ptr PipelineCreationFeedbackEXT)
forall a. Storable a => Ptr a -> IO a
peek @(Ptr PipelineCreationFeedbackEXT) ((Ptr PipelineCreationFeedbackCreateInfoEXT
p Ptr PipelineCreationFeedbackCreateInfoEXT
-> Int -> Ptr (Ptr PipelineCreationFeedbackEXT)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr (Ptr PipelineCreationFeedbackEXT)))
    PipelineCreationFeedbackCreateInfoEXT
-> IO PipelineCreationFeedbackCreateInfoEXT
forall (f :: * -> *) a. Applicative f => a -> f a
pure (PipelineCreationFeedbackCreateInfoEXT
 -> IO PipelineCreationFeedbackCreateInfoEXT)
-> PipelineCreationFeedbackCreateInfoEXT
-> IO PipelineCreationFeedbackCreateInfoEXT
forall a b. (a -> b) -> a -> b
$ Ptr PipelineCreationFeedbackEXT
-> Word32
-> Ptr PipelineCreationFeedbackEXT
-> PipelineCreationFeedbackCreateInfoEXT
PipelineCreationFeedbackCreateInfoEXT
             Ptr PipelineCreationFeedbackEXT
pPipelineCreationFeedback Word32
pipelineStageCreationFeedbackCount Ptr PipelineCreationFeedbackEXT
pPipelineStageCreationFeedbacks

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

instance Zero PipelineCreationFeedbackCreateInfoEXT where
  zero :: PipelineCreationFeedbackCreateInfoEXT
zero = Ptr PipelineCreationFeedbackEXT
-> Word32
-> Ptr PipelineCreationFeedbackEXT
-> PipelineCreationFeedbackCreateInfoEXT
PipelineCreationFeedbackCreateInfoEXT
           Ptr PipelineCreationFeedbackEXT
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero
           Ptr PipelineCreationFeedbackEXT
forall a. Zero a => a
zero


type PipelineCreationFeedbackFlagsEXT = PipelineCreationFeedbackFlagBitsEXT

-- | VkPipelineCreationFeedbackFlagBitsEXT - Bitmask specifying pipeline or
-- pipeline stage creation feedback
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_pipeline_creation_feedback VK_EXT_pipeline_creation_feedback>,
-- 'PipelineCreationFeedbackCreateInfoEXT', 'PipelineCreationFeedbackEXT',
-- 'PipelineCreationFeedbackFlagsEXT'
newtype PipelineCreationFeedbackFlagBitsEXT = PipelineCreationFeedbackFlagBitsEXT Flags
  deriving newtype (PipelineCreationFeedbackFlagsEXT
-> PipelineCreationFeedbackFlagsEXT -> Bool
(PipelineCreationFeedbackFlagsEXT
 -> PipelineCreationFeedbackFlagsEXT -> Bool)
-> (PipelineCreationFeedbackFlagsEXT
    -> PipelineCreationFeedbackFlagsEXT -> Bool)
-> Eq PipelineCreationFeedbackFlagsEXT
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PipelineCreationFeedbackFlagsEXT
-> PipelineCreationFeedbackFlagsEXT -> Bool
$c/= :: PipelineCreationFeedbackFlagsEXT
-> PipelineCreationFeedbackFlagsEXT -> Bool
== :: PipelineCreationFeedbackFlagsEXT
-> PipelineCreationFeedbackFlagsEXT -> Bool
$c== :: PipelineCreationFeedbackFlagsEXT
-> PipelineCreationFeedbackFlagsEXT -> Bool
Eq, Eq PipelineCreationFeedbackFlagsEXT
Eq PipelineCreationFeedbackFlagsEXT
-> (PipelineCreationFeedbackFlagsEXT
    -> PipelineCreationFeedbackFlagsEXT -> Ordering)
-> (PipelineCreationFeedbackFlagsEXT
    -> PipelineCreationFeedbackFlagsEXT -> Bool)
-> (PipelineCreationFeedbackFlagsEXT
    -> PipelineCreationFeedbackFlagsEXT -> Bool)
-> (PipelineCreationFeedbackFlagsEXT
    -> PipelineCreationFeedbackFlagsEXT -> Bool)
-> (PipelineCreationFeedbackFlagsEXT
    -> PipelineCreationFeedbackFlagsEXT -> Bool)
-> (PipelineCreationFeedbackFlagsEXT
    -> PipelineCreationFeedbackFlagsEXT
    -> PipelineCreationFeedbackFlagsEXT)
-> (PipelineCreationFeedbackFlagsEXT
    -> PipelineCreationFeedbackFlagsEXT
    -> PipelineCreationFeedbackFlagsEXT)
-> Ord PipelineCreationFeedbackFlagsEXT
PipelineCreationFeedbackFlagsEXT
-> PipelineCreationFeedbackFlagsEXT -> Bool
PipelineCreationFeedbackFlagsEXT
-> PipelineCreationFeedbackFlagsEXT -> Ordering
PipelineCreationFeedbackFlagsEXT
-> PipelineCreationFeedbackFlagsEXT
-> PipelineCreationFeedbackFlagsEXT
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
min :: PipelineCreationFeedbackFlagsEXT
-> PipelineCreationFeedbackFlagsEXT
-> PipelineCreationFeedbackFlagsEXT
$cmin :: PipelineCreationFeedbackFlagsEXT
-> PipelineCreationFeedbackFlagsEXT
-> PipelineCreationFeedbackFlagsEXT
max :: PipelineCreationFeedbackFlagsEXT
-> PipelineCreationFeedbackFlagsEXT
-> PipelineCreationFeedbackFlagsEXT
$cmax :: PipelineCreationFeedbackFlagsEXT
-> PipelineCreationFeedbackFlagsEXT
-> PipelineCreationFeedbackFlagsEXT
>= :: PipelineCreationFeedbackFlagsEXT
-> PipelineCreationFeedbackFlagsEXT -> Bool
$c>= :: PipelineCreationFeedbackFlagsEXT
-> PipelineCreationFeedbackFlagsEXT -> Bool
> :: PipelineCreationFeedbackFlagsEXT
-> PipelineCreationFeedbackFlagsEXT -> Bool
$c> :: PipelineCreationFeedbackFlagsEXT
-> PipelineCreationFeedbackFlagsEXT -> Bool
<= :: PipelineCreationFeedbackFlagsEXT
-> PipelineCreationFeedbackFlagsEXT -> Bool
$c<= :: PipelineCreationFeedbackFlagsEXT
-> PipelineCreationFeedbackFlagsEXT -> Bool
< :: PipelineCreationFeedbackFlagsEXT
-> PipelineCreationFeedbackFlagsEXT -> Bool
$c< :: PipelineCreationFeedbackFlagsEXT
-> PipelineCreationFeedbackFlagsEXT -> Bool
compare :: PipelineCreationFeedbackFlagsEXT
-> PipelineCreationFeedbackFlagsEXT -> Ordering
$ccompare :: PipelineCreationFeedbackFlagsEXT
-> PipelineCreationFeedbackFlagsEXT -> Ordering
$cp1Ord :: Eq PipelineCreationFeedbackFlagsEXT
Ord, Ptr b -> Int -> IO PipelineCreationFeedbackFlagsEXT
Ptr b -> Int -> PipelineCreationFeedbackFlagsEXT -> IO ()
Ptr PipelineCreationFeedbackFlagsEXT
-> IO PipelineCreationFeedbackFlagsEXT
Ptr PipelineCreationFeedbackFlagsEXT
-> Int -> IO PipelineCreationFeedbackFlagsEXT
Ptr PipelineCreationFeedbackFlagsEXT
-> Int -> PipelineCreationFeedbackFlagsEXT -> IO ()
Ptr PipelineCreationFeedbackFlagsEXT
-> PipelineCreationFeedbackFlagsEXT -> IO ()
PipelineCreationFeedbackFlagsEXT -> Int
(PipelineCreationFeedbackFlagsEXT -> Int)
-> (PipelineCreationFeedbackFlagsEXT -> Int)
-> (Ptr PipelineCreationFeedbackFlagsEXT
    -> Int -> IO PipelineCreationFeedbackFlagsEXT)
-> (Ptr PipelineCreationFeedbackFlagsEXT
    -> Int -> PipelineCreationFeedbackFlagsEXT -> IO ())
-> (forall b. Ptr b -> Int -> IO PipelineCreationFeedbackFlagsEXT)
-> (forall b.
    Ptr b -> Int -> PipelineCreationFeedbackFlagsEXT -> IO ())
-> (Ptr PipelineCreationFeedbackFlagsEXT
    -> IO PipelineCreationFeedbackFlagsEXT)
-> (Ptr PipelineCreationFeedbackFlagsEXT
    -> PipelineCreationFeedbackFlagsEXT -> IO ())
-> Storable PipelineCreationFeedbackFlagsEXT
forall b. Ptr b -> Int -> IO PipelineCreationFeedbackFlagsEXT
forall b. Ptr b -> Int -> PipelineCreationFeedbackFlagsEXT -> 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
poke :: Ptr PipelineCreationFeedbackFlagsEXT
-> PipelineCreationFeedbackFlagsEXT -> IO ()
$cpoke :: Ptr PipelineCreationFeedbackFlagsEXT
-> PipelineCreationFeedbackFlagsEXT -> IO ()
peek :: Ptr PipelineCreationFeedbackFlagsEXT
-> IO PipelineCreationFeedbackFlagsEXT
$cpeek :: Ptr PipelineCreationFeedbackFlagsEXT
-> IO PipelineCreationFeedbackFlagsEXT
pokeByteOff :: Ptr b -> Int -> PipelineCreationFeedbackFlagsEXT -> IO ()
$cpokeByteOff :: forall b. Ptr b -> Int -> PipelineCreationFeedbackFlagsEXT -> IO ()
peekByteOff :: Ptr b -> Int -> IO PipelineCreationFeedbackFlagsEXT
$cpeekByteOff :: forall b. Ptr b -> Int -> IO PipelineCreationFeedbackFlagsEXT
pokeElemOff :: Ptr PipelineCreationFeedbackFlagsEXT
-> Int -> PipelineCreationFeedbackFlagsEXT -> IO ()
$cpokeElemOff :: Ptr PipelineCreationFeedbackFlagsEXT
-> Int -> PipelineCreationFeedbackFlagsEXT -> IO ()
peekElemOff :: Ptr PipelineCreationFeedbackFlagsEXT
-> Int -> IO PipelineCreationFeedbackFlagsEXT
$cpeekElemOff :: Ptr PipelineCreationFeedbackFlagsEXT
-> Int -> IO PipelineCreationFeedbackFlagsEXT
alignment :: PipelineCreationFeedbackFlagsEXT -> Int
$calignment :: PipelineCreationFeedbackFlagsEXT -> Int
sizeOf :: PipelineCreationFeedbackFlagsEXT -> Int
$csizeOf :: PipelineCreationFeedbackFlagsEXT -> Int
Storable, PipelineCreationFeedbackFlagsEXT
PipelineCreationFeedbackFlagsEXT
-> Zero PipelineCreationFeedbackFlagsEXT
forall a. a -> Zero a
zero :: PipelineCreationFeedbackFlagsEXT
$czero :: PipelineCreationFeedbackFlagsEXT
Zero, Eq PipelineCreationFeedbackFlagsEXT
PipelineCreationFeedbackFlagsEXT
Eq PipelineCreationFeedbackFlagsEXT
-> (PipelineCreationFeedbackFlagsEXT
    -> PipelineCreationFeedbackFlagsEXT
    -> PipelineCreationFeedbackFlagsEXT)
-> (PipelineCreationFeedbackFlagsEXT
    -> PipelineCreationFeedbackFlagsEXT
    -> PipelineCreationFeedbackFlagsEXT)
-> (PipelineCreationFeedbackFlagsEXT
    -> PipelineCreationFeedbackFlagsEXT
    -> PipelineCreationFeedbackFlagsEXT)
-> (PipelineCreationFeedbackFlagsEXT
    -> PipelineCreationFeedbackFlagsEXT)
-> (PipelineCreationFeedbackFlagsEXT
    -> Int -> PipelineCreationFeedbackFlagsEXT)
-> (PipelineCreationFeedbackFlagsEXT
    -> Int -> PipelineCreationFeedbackFlagsEXT)
-> PipelineCreationFeedbackFlagsEXT
-> (Int -> PipelineCreationFeedbackFlagsEXT)
-> (PipelineCreationFeedbackFlagsEXT
    -> Int -> PipelineCreationFeedbackFlagsEXT)
-> (PipelineCreationFeedbackFlagsEXT
    -> Int -> PipelineCreationFeedbackFlagsEXT)
-> (PipelineCreationFeedbackFlagsEXT
    -> Int -> PipelineCreationFeedbackFlagsEXT)
-> (PipelineCreationFeedbackFlagsEXT -> Int -> Bool)
-> (PipelineCreationFeedbackFlagsEXT -> Maybe Int)
-> (PipelineCreationFeedbackFlagsEXT -> Int)
-> (PipelineCreationFeedbackFlagsEXT -> Bool)
-> (PipelineCreationFeedbackFlagsEXT
    -> Int -> PipelineCreationFeedbackFlagsEXT)
-> (PipelineCreationFeedbackFlagsEXT
    -> Int -> PipelineCreationFeedbackFlagsEXT)
-> (PipelineCreationFeedbackFlagsEXT
    -> Int -> PipelineCreationFeedbackFlagsEXT)
-> (PipelineCreationFeedbackFlagsEXT
    -> Int -> PipelineCreationFeedbackFlagsEXT)
-> (PipelineCreationFeedbackFlagsEXT
    -> Int -> PipelineCreationFeedbackFlagsEXT)
-> (PipelineCreationFeedbackFlagsEXT
    -> Int -> PipelineCreationFeedbackFlagsEXT)
-> (PipelineCreationFeedbackFlagsEXT -> Int)
-> Bits PipelineCreationFeedbackFlagsEXT
Int -> PipelineCreationFeedbackFlagsEXT
PipelineCreationFeedbackFlagsEXT -> Bool
PipelineCreationFeedbackFlagsEXT -> Int
PipelineCreationFeedbackFlagsEXT -> Maybe Int
PipelineCreationFeedbackFlagsEXT
-> PipelineCreationFeedbackFlagsEXT
PipelineCreationFeedbackFlagsEXT -> Int -> Bool
PipelineCreationFeedbackFlagsEXT
-> Int -> PipelineCreationFeedbackFlagsEXT
PipelineCreationFeedbackFlagsEXT
-> PipelineCreationFeedbackFlagsEXT
-> PipelineCreationFeedbackFlagsEXT
forall a.
Eq a
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> a
-> (Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> Bool)
-> (a -> Maybe Int)
-> (a -> Int)
-> (a -> Bool)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int)
-> Bits a
popCount :: PipelineCreationFeedbackFlagsEXT -> Int
$cpopCount :: PipelineCreationFeedbackFlagsEXT -> Int
rotateR :: PipelineCreationFeedbackFlagsEXT
-> Int -> PipelineCreationFeedbackFlagsEXT
$crotateR :: PipelineCreationFeedbackFlagsEXT
-> Int -> PipelineCreationFeedbackFlagsEXT
rotateL :: PipelineCreationFeedbackFlagsEXT
-> Int -> PipelineCreationFeedbackFlagsEXT
$crotateL :: PipelineCreationFeedbackFlagsEXT
-> Int -> PipelineCreationFeedbackFlagsEXT
unsafeShiftR :: PipelineCreationFeedbackFlagsEXT
-> Int -> PipelineCreationFeedbackFlagsEXT
$cunsafeShiftR :: PipelineCreationFeedbackFlagsEXT
-> Int -> PipelineCreationFeedbackFlagsEXT
shiftR :: PipelineCreationFeedbackFlagsEXT
-> Int -> PipelineCreationFeedbackFlagsEXT
$cshiftR :: PipelineCreationFeedbackFlagsEXT
-> Int -> PipelineCreationFeedbackFlagsEXT
unsafeShiftL :: PipelineCreationFeedbackFlagsEXT
-> Int -> PipelineCreationFeedbackFlagsEXT
$cunsafeShiftL :: PipelineCreationFeedbackFlagsEXT
-> Int -> PipelineCreationFeedbackFlagsEXT
shiftL :: PipelineCreationFeedbackFlagsEXT
-> Int -> PipelineCreationFeedbackFlagsEXT
$cshiftL :: PipelineCreationFeedbackFlagsEXT
-> Int -> PipelineCreationFeedbackFlagsEXT
isSigned :: PipelineCreationFeedbackFlagsEXT -> Bool
$cisSigned :: PipelineCreationFeedbackFlagsEXT -> Bool
bitSize :: PipelineCreationFeedbackFlagsEXT -> Int
$cbitSize :: PipelineCreationFeedbackFlagsEXT -> Int
bitSizeMaybe :: PipelineCreationFeedbackFlagsEXT -> Maybe Int
$cbitSizeMaybe :: PipelineCreationFeedbackFlagsEXT -> Maybe Int
testBit :: PipelineCreationFeedbackFlagsEXT -> Int -> Bool
$ctestBit :: PipelineCreationFeedbackFlagsEXT -> Int -> Bool
complementBit :: PipelineCreationFeedbackFlagsEXT
-> Int -> PipelineCreationFeedbackFlagsEXT
$ccomplementBit :: PipelineCreationFeedbackFlagsEXT
-> Int -> PipelineCreationFeedbackFlagsEXT
clearBit :: PipelineCreationFeedbackFlagsEXT
-> Int -> PipelineCreationFeedbackFlagsEXT
$cclearBit :: PipelineCreationFeedbackFlagsEXT
-> Int -> PipelineCreationFeedbackFlagsEXT
setBit :: PipelineCreationFeedbackFlagsEXT
-> Int -> PipelineCreationFeedbackFlagsEXT
$csetBit :: PipelineCreationFeedbackFlagsEXT
-> Int -> PipelineCreationFeedbackFlagsEXT
bit :: Int -> PipelineCreationFeedbackFlagsEXT
$cbit :: Int -> PipelineCreationFeedbackFlagsEXT
zeroBits :: PipelineCreationFeedbackFlagsEXT
$czeroBits :: PipelineCreationFeedbackFlagsEXT
rotate :: PipelineCreationFeedbackFlagsEXT
-> Int -> PipelineCreationFeedbackFlagsEXT
$crotate :: PipelineCreationFeedbackFlagsEXT
-> Int -> PipelineCreationFeedbackFlagsEXT
shift :: PipelineCreationFeedbackFlagsEXT
-> Int -> PipelineCreationFeedbackFlagsEXT
$cshift :: PipelineCreationFeedbackFlagsEXT
-> Int -> PipelineCreationFeedbackFlagsEXT
complement :: PipelineCreationFeedbackFlagsEXT
-> PipelineCreationFeedbackFlagsEXT
$ccomplement :: PipelineCreationFeedbackFlagsEXT
-> PipelineCreationFeedbackFlagsEXT
xor :: PipelineCreationFeedbackFlagsEXT
-> PipelineCreationFeedbackFlagsEXT
-> PipelineCreationFeedbackFlagsEXT
$cxor :: PipelineCreationFeedbackFlagsEXT
-> PipelineCreationFeedbackFlagsEXT
-> PipelineCreationFeedbackFlagsEXT
.|. :: PipelineCreationFeedbackFlagsEXT
-> PipelineCreationFeedbackFlagsEXT
-> PipelineCreationFeedbackFlagsEXT
$c.|. :: PipelineCreationFeedbackFlagsEXT
-> PipelineCreationFeedbackFlagsEXT
-> PipelineCreationFeedbackFlagsEXT
.&. :: PipelineCreationFeedbackFlagsEXT
-> PipelineCreationFeedbackFlagsEXT
-> PipelineCreationFeedbackFlagsEXT
$c.&. :: PipelineCreationFeedbackFlagsEXT
-> PipelineCreationFeedbackFlagsEXT
-> PipelineCreationFeedbackFlagsEXT
$cp1Bits :: Eq PipelineCreationFeedbackFlagsEXT
Bits, Bits PipelineCreationFeedbackFlagsEXT
Bits PipelineCreationFeedbackFlagsEXT
-> (PipelineCreationFeedbackFlagsEXT -> Int)
-> (PipelineCreationFeedbackFlagsEXT -> Int)
-> (PipelineCreationFeedbackFlagsEXT -> Int)
-> FiniteBits PipelineCreationFeedbackFlagsEXT
PipelineCreationFeedbackFlagsEXT -> Int
forall b.
Bits b -> (b -> Int) -> (b -> Int) -> (b -> Int) -> FiniteBits b
countTrailingZeros :: PipelineCreationFeedbackFlagsEXT -> Int
$ccountTrailingZeros :: PipelineCreationFeedbackFlagsEXT -> Int
countLeadingZeros :: PipelineCreationFeedbackFlagsEXT -> Int
$ccountLeadingZeros :: PipelineCreationFeedbackFlagsEXT -> Int
finiteBitSize :: PipelineCreationFeedbackFlagsEXT -> Int
$cfiniteBitSize :: PipelineCreationFeedbackFlagsEXT -> Int
$cp1FiniteBits :: Bits PipelineCreationFeedbackFlagsEXT
FiniteBits)

-- | 'PIPELINE_CREATION_FEEDBACK_VALID_BIT_EXT' indicates that the feedback
-- information is valid.
pattern $bPIPELINE_CREATION_FEEDBACK_VALID_BIT_EXT :: PipelineCreationFeedbackFlagsEXT
$mPIPELINE_CREATION_FEEDBACK_VALID_BIT_EXT :: forall r.
PipelineCreationFeedbackFlagsEXT
-> (Void# -> r) -> (Void# -> r) -> r
PIPELINE_CREATION_FEEDBACK_VALID_BIT_EXT = PipelineCreationFeedbackFlagBitsEXT 0x00000001
-- | 'PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT_EXT'
-- indicates that a readily usable pipeline or pipeline stage was found in
-- the @pipelineCache@ specified by the application in the pipeline
-- creation command.
--
-- An implementation /should/ set the
-- 'PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT_EXT' bit
-- if it was able to avoid the large majority of pipeline or pipeline stage
-- creation work by using the @pipelineCache@ parameter of
-- 'Vulkan.Core10.Pipeline.createGraphicsPipelines',
-- 'Vulkan.Extensions.VK_KHR_ray_tracing_pipeline.createRayTracingPipelinesKHR',
-- 'Vulkan.Extensions.VK_NV_ray_tracing.createRayTracingPipelinesNV', or
-- 'Vulkan.Core10.Pipeline.createComputePipelines'. When an implementation
-- sets this bit for the entire pipeline, it /may/ leave it unset for any
-- stage.
--
-- Note
--
-- Implementations are encouraged to provide a meaningful signal to
-- applications using this bit. The intention is to communicate to the
-- application that the pipeline or pipeline stage was created \"as fast as
-- it gets\" using the pipeline cache provided by the application. If an
-- implementation uses an internal cache, it is discouraged from setting
-- this bit as the feedback would be unactionable.
pattern $bPIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT_EXT :: PipelineCreationFeedbackFlagsEXT
$mPIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT_EXT :: forall r.
PipelineCreationFeedbackFlagsEXT
-> (Void# -> r) -> (Void# -> r) -> r
PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT_EXT =
  PipelineCreationFeedbackFlagBitsEXT 0x00000002
-- | 'PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT_EXT'
-- indicates that the base pipeline specified by the @basePipelineHandle@
-- or @basePipelineIndex@ member of the @Vk*PipelineCreateInfo@ structure
-- was used to accelerate the creation of the pipeline.
--
-- An implementation /should/ set the
-- 'PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT_EXT' bit if
-- it was able to avoid a significant amount of work by using the base
-- pipeline.
--
-- Note
--
-- While \"significant amount of work\" is subjective, implementations are
-- encouraged to provide a meaningful signal to applications using this
-- bit. For example, a 1% reduction in duration may not warrant setting
-- this bit, while a 50% reduction would.
pattern $bPIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT_EXT :: PipelineCreationFeedbackFlagsEXT
$mPIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT_EXT :: forall r.
PipelineCreationFeedbackFlagsEXT
-> (Void# -> r) -> (Void# -> r) -> r
PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT_EXT = PipelineCreationFeedbackFlagBitsEXT 0x00000004

conNamePipelineCreationFeedbackFlagBitsEXT :: String
conNamePipelineCreationFeedbackFlagBitsEXT :: String
conNamePipelineCreationFeedbackFlagBitsEXT = String
"PipelineCreationFeedbackFlagBitsEXT"

enumPrefixPipelineCreationFeedbackFlagBitsEXT :: String
enumPrefixPipelineCreationFeedbackFlagBitsEXT :: String
enumPrefixPipelineCreationFeedbackFlagBitsEXT = String
"PIPELINE_CREATION_FEEDBACK_"

showTablePipelineCreationFeedbackFlagBitsEXT :: [(PipelineCreationFeedbackFlagBitsEXT, String)]
showTablePipelineCreationFeedbackFlagBitsEXT :: [(PipelineCreationFeedbackFlagsEXT, String)]
showTablePipelineCreationFeedbackFlagBitsEXT =
  [ (PipelineCreationFeedbackFlagsEXT
PIPELINE_CREATION_FEEDBACK_VALID_BIT_EXT                         , String
"VALID_BIT_EXT")
  , (PipelineCreationFeedbackFlagsEXT
PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT_EXT, String
"APPLICATION_PIPELINE_CACHE_HIT_BIT_EXT")
  , (PipelineCreationFeedbackFlagsEXT
PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT_EXT    , String
"BASE_PIPELINE_ACCELERATION_BIT_EXT")
  ]

instance Show PipelineCreationFeedbackFlagBitsEXT where
  showsPrec :: Int -> PipelineCreationFeedbackFlagsEXT -> ShowS
showsPrec = String
-> [(PipelineCreationFeedbackFlagsEXT, String)]
-> String
-> (PipelineCreationFeedbackFlagsEXT -> Word32)
-> (Word32 -> ShowS)
-> Int
-> PipelineCreationFeedbackFlagsEXT
-> ShowS
forall a i.
Eq a =>
String
-> [(a, String)]
-> String
-> (a -> i)
-> (i -> ShowS)
-> Int
-> a
-> ShowS
enumShowsPrec String
enumPrefixPipelineCreationFeedbackFlagBitsEXT
                            [(PipelineCreationFeedbackFlagsEXT, String)]
showTablePipelineCreationFeedbackFlagBitsEXT
                            String
conNamePipelineCreationFeedbackFlagBitsEXT
                            (\(PipelineCreationFeedbackFlagBitsEXT Word32
x) -> Word32
x)
                            (\Word32
x -> String -> ShowS
showString String
"0x" ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Word32 -> ShowS
forall a. (Integral a, Show a) => a -> ShowS
showHex Word32
x)

instance Read PipelineCreationFeedbackFlagBitsEXT where
  readPrec :: ReadPrec PipelineCreationFeedbackFlagsEXT
readPrec = String
-> [(PipelineCreationFeedbackFlagsEXT, String)]
-> String
-> (Word32 -> PipelineCreationFeedbackFlagsEXT)
-> ReadPrec PipelineCreationFeedbackFlagsEXT
forall i a.
Read i =>
String -> [(a, String)] -> String -> (i -> a) -> ReadPrec a
enumReadPrec String
enumPrefixPipelineCreationFeedbackFlagBitsEXT
                          [(PipelineCreationFeedbackFlagsEXT, String)]
showTablePipelineCreationFeedbackFlagBitsEXT
                          String
conNamePipelineCreationFeedbackFlagBitsEXT
                          Word32 -> PipelineCreationFeedbackFlagsEXT
PipelineCreationFeedbackFlagBitsEXT


type EXT_PIPELINE_CREATION_FEEDBACK_SPEC_VERSION = 1

-- No documentation found for TopLevel "VK_EXT_PIPELINE_CREATION_FEEDBACK_SPEC_VERSION"
pattern EXT_PIPELINE_CREATION_FEEDBACK_SPEC_VERSION :: forall a . Integral a => a
pattern $bEXT_PIPELINE_CREATION_FEEDBACK_SPEC_VERSION :: a
$mEXT_PIPELINE_CREATION_FEEDBACK_SPEC_VERSION :: forall r a. Integral a => a -> (Void# -> r) -> (Void# -> r) -> r
EXT_PIPELINE_CREATION_FEEDBACK_SPEC_VERSION = 1


type EXT_PIPELINE_CREATION_FEEDBACK_EXTENSION_NAME = "VK_EXT_pipeline_creation_feedback"

-- No documentation found for TopLevel "VK_EXT_PIPELINE_CREATION_FEEDBACK_EXTENSION_NAME"
pattern EXT_PIPELINE_CREATION_FEEDBACK_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
pattern $bEXT_PIPELINE_CREATION_FEEDBACK_EXTENSION_NAME :: a
$mEXT_PIPELINE_CREATION_FEEDBACK_EXTENSION_NAME :: forall r a.
(Eq a, IsString a) =>
a -> (Void# -> r) -> (Void# -> r) -> r
EXT_PIPELINE_CREATION_FEEDBACK_EXTENSION_NAME = "VK_EXT_pipeline_creation_feedback"