packages feed

vulkan-2.0.0.0: src/Graphics/Vulkan/Core10/Pipeline.hs

{-# language Strict #-}
{-# language CPP #-}
{-# language GeneralizedNewtypeDeriving #-}
{-# language PatternSynonyms #-}
{-# language DataKinds #-}
{-# language TypeOperators #-}
{-# language DuplicateRecordFields #-}

module Graphics.Vulkan.Core10.Pipeline
  ( VkBlendFactor(..)
  , pattern VK_BLEND_FACTOR_ZERO
  , pattern VK_BLEND_FACTOR_ONE
  , pattern VK_BLEND_FACTOR_SRC_COLOR
  , pattern VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR
  , pattern VK_BLEND_FACTOR_DST_COLOR
  , pattern VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR
  , pattern VK_BLEND_FACTOR_SRC_ALPHA
  , pattern VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA
  , pattern VK_BLEND_FACTOR_DST_ALPHA
  , pattern VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA
  , pattern VK_BLEND_FACTOR_CONSTANT_COLOR
  , pattern VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR
  , pattern VK_BLEND_FACTOR_CONSTANT_ALPHA
  , pattern VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA
  , pattern VK_BLEND_FACTOR_SRC_ALPHA_SATURATE
  , pattern VK_BLEND_FACTOR_SRC1_COLOR
  , pattern VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR
  , pattern VK_BLEND_FACTOR_SRC1_ALPHA
  , pattern VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA
  , VkBlendOp(..)
  , pattern VK_BLEND_OP_ADD
  , pattern VK_BLEND_OP_SUBTRACT
  , pattern VK_BLEND_OP_REVERSE_SUBTRACT
  , pattern VK_BLEND_OP_MIN
  , pattern VK_BLEND_OP_MAX
  , VkCompareOp(..)
  , pattern VK_COMPARE_OP_NEVER
  , pattern VK_COMPARE_OP_LESS
  , pattern VK_COMPARE_OP_EQUAL
  , pattern VK_COMPARE_OP_LESS_OR_EQUAL
  , pattern VK_COMPARE_OP_GREATER
  , pattern VK_COMPARE_OP_NOT_EQUAL
  , pattern VK_COMPARE_OP_GREATER_OR_EQUAL
  , pattern VK_COMPARE_OP_ALWAYS
  , VkDynamicState(..)
  , pattern VK_DYNAMIC_STATE_VIEWPORT
  , pattern VK_DYNAMIC_STATE_SCISSOR
  , pattern VK_DYNAMIC_STATE_LINE_WIDTH
  , pattern VK_DYNAMIC_STATE_DEPTH_BIAS
  , pattern VK_DYNAMIC_STATE_BLEND_CONSTANTS
  , pattern VK_DYNAMIC_STATE_DEPTH_BOUNDS
  , pattern VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK
  , pattern VK_DYNAMIC_STATE_STENCIL_WRITE_MASK
  , pattern VK_DYNAMIC_STATE_STENCIL_REFERENCE
  , VkPolygonMode(..)
  , pattern VK_POLYGON_MODE_FILL
  , pattern VK_POLYGON_MODE_LINE
  , pattern VK_POLYGON_MODE_POINT
  , VkFrontFace(..)
  , pattern VK_FRONT_FACE_COUNTER_CLOCKWISE
  , pattern VK_FRONT_FACE_CLOCKWISE
  , VkLogicOp(..)
  , pattern VK_LOGIC_OP_CLEAR
  , pattern VK_LOGIC_OP_AND
  , pattern VK_LOGIC_OP_AND_REVERSE
  , pattern VK_LOGIC_OP_COPY
  , pattern VK_LOGIC_OP_AND_INVERTED
  , pattern VK_LOGIC_OP_NO_OP
  , pattern VK_LOGIC_OP_XOR
  , pattern VK_LOGIC_OP_OR
  , pattern VK_LOGIC_OP_NOR
  , pattern VK_LOGIC_OP_EQUIVALENT
  , pattern VK_LOGIC_OP_INVERT
  , pattern VK_LOGIC_OP_OR_REVERSE
  , pattern VK_LOGIC_OP_COPY_INVERTED
  , pattern VK_LOGIC_OP_OR_INVERTED
  , pattern VK_LOGIC_OP_NAND
  , pattern VK_LOGIC_OP_SET
  , VkPrimitiveTopology(..)
  , pattern VK_PRIMITIVE_TOPOLOGY_POINT_LIST
  , pattern VK_PRIMITIVE_TOPOLOGY_LINE_LIST
  , pattern VK_PRIMITIVE_TOPOLOGY_LINE_STRIP
  , pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST
  , pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP
  , pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN
  , pattern VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY
  , pattern VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY
  , pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY
  , pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY
  , pattern VK_PRIMITIVE_TOPOLOGY_PATCH_LIST
  , VkStencilOp(..)
  , pattern VK_STENCIL_OP_KEEP
  , pattern VK_STENCIL_OP_ZERO
  , pattern VK_STENCIL_OP_REPLACE
  , pattern VK_STENCIL_OP_INCREMENT_AND_CLAMP
  , pattern VK_STENCIL_OP_DECREMENT_AND_CLAMP
  , pattern VK_STENCIL_OP_INVERT
  , pattern VK_STENCIL_OP_INCREMENT_AND_WRAP
  , pattern VK_STENCIL_OP_DECREMENT_AND_WRAP
  , VkVertexInputRate(..)
  , pattern VK_VERTEX_INPUT_RATE_VERTEX
  , pattern VK_VERTEX_INPUT_RATE_INSTANCE
  , VkPipelineDepthStencilStateCreateFlags(..)
  , VkPipelineDynamicStateCreateFlags(..)
  , VkPipelineColorBlendStateCreateFlags(..)
  , VkPipelineMultisampleStateCreateFlags(..)
  , VkPipelineRasterizationStateCreateFlags(..)
  , VkPipelineViewportStateCreateFlags(..)
  , VkPipelineTessellationStateCreateFlags(..)
  , VkPipelineInputAssemblyStateCreateFlags(..)
  , VkPipelineVertexInputStateCreateFlags(..)
  , VkPipelineShaderStageCreateFlags(..)
  , VkShaderStageFlagBits(..)
  , pattern VK_SHADER_STAGE_VERTEX_BIT
  , pattern VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT
  , pattern VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT
  , pattern VK_SHADER_STAGE_GEOMETRY_BIT
  , pattern VK_SHADER_STAGE_FRAGMENT_BIT
  , pattern VK_SHADER_STAGE_COMPUTE_BIT
  , pattern VK_SHADER_STAGE_ALL_GRAPHICS
  , pattern VK_SHADER_STAGE_ALL
  , VkPipelineCreateFlagBits(..)
  , pattern VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT
  , pattern VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT
  , pattern VK_PIPELINE_CREATE_DERIVATIVE_BIT
  , VkColorComponentFlagBits(..)
  , pattern VK_COLOR_COMPONENT_R_BIT
  , pattern VK_COLOR_COMPONENT_G_BIT
  , pattern VK_COLOR_COMPONENT_B_BIT
  , pattern VK_COLOR_COMPONENT_A_BIT
  , VkCullModeFlagBits(..)
  , pattern VK_CULL_MODE_FRONT_BIT
  , pattern VK_CULL_MODE_BACK_BIT
  , pattern VK_CULL_MODE_NONE
  , pattern VK_CULL_MODE_FRONT_AND_BACK
  , VkPipeline
  , VkPipelineLayout
  , VkRenderPass
  , vkCreateGraphicsPipelines
  , vkCreateComputePipelines
  , vkDestroyPipeline
  , VkOffset2D(..)
  , VkExtent2D(..)
  , VkViewport(..)
  , VkRect2D(..)
  , VkSpecializationMapEntry(..)
  , VkSpecializationInfo(..)
  , VkPipelineShaderStageCreateInfo(..)
  , VkComputePipelineCreateInfo(..)
  , VkVertexInputBindingDescription(..)
  , VkVertexInputAttributeDescription(..)
  , VkPipelineVertexInputStateCreateInfo(..)
  , VkPipelineInputAssemblyStateCreateInfo(..)
  , VkPipelineTessellationStateCreateInfo(..)
  , VkPipelineViewportStateCreateInfo(..)
  , VkPipelineRasterizationStateCreateInfo(..)
  , VkPipelineMultisampleStateCreateInfo(..)
  , VkPipelineColorBlendAttachmentState(..)
  , VkPipelineColorBlendStateCreateInfo(..)
  , VkPipelineDynamicStateCreateInfo(..)
  , VkStencilOpState(..)
  , VkPipelineDepthStencilStateCreateInfo(..)
  , VkGraphicsPipelineCreateInfo(..)
  , VkPipelineCreateFlags
  , VkColorComponentFlags
  , VkCullModeFlags
  , VkSampleMask
  ) where

import Data.Bits
  ( Bits
  , FiniteBits
  )
import Data.Int
  ( Int32
  )
import Data.Vector.Storable.Sized
  ( Vector
  )
import Data.Word
  ( Word32
  )
import Foreign.C.Types
  ( CFloat(..)
  , CChar(..)
  , CSize(..)
  )
import Foreign.Ptr
  ( plusPtr
  , Ptr
  )
import Foreign.Storable
  ( Storable(..)
  , Storable
  )
import GHC.Read
  ( expectP
  , choose
  )
import Graphics.Vulkan.NamedType
  ( (:::)
  )
import Text.ParserCombinators.ReadPrec
  ( (+++)
  , prec
  , step
  )
import Text.Read
  ( Read(..)
  , parens
  )
import Text.Read.Lex
  ( Lexeme(Ident)
  )


import Graphics.Vulkan.Core10.Core
  ( VkBool32(..)
  , VkFormat(..)
  , VkStructureType(..)
  , VkResult(..)
  , VkFlags
  )
import Graphics.Vulkan.Core10.DeviceInitialization
  ( VkSampleCountFlagBits(..)
  , VkAllocationCallbacks(..)
  , VkDevice
  )
import Graphics.Vulkan.Core10.PipelineCache
  ( VkPipelineCache
  )
import Graphics.Vulkan.Core10.Shader
  ( VkShaderModule
  )


-- ** VkBlendFactor

-- | VkBlendFactor - Framebuffer blending factors
--
-- = Description
-- #_description#
--
-- The semantics of each enum value is described in the table below:
--
-- > +-----------------------------------------+-------------------+--------+
-- > | VkBlendFactor                           | RGB Blend Factors | Alpha  |
-- > |                                         | (Sr,Sg,Sb) or     | Blend  |
-- > |                                         | (Dr,Dg,Db)        | Factor |
-- > |                                         |                   | (Sa or |
-- > |                                         |                   | Da)    |
-- > +=========================================+===================+========+
-- > | @VK_BLEND_FACTOR_ZERO@                  | (0,0,0)           | 0      |
-- > +-----------------------------------------+-------------------+--------+
-- > | @VK_BLEND_FACTOR_ONE@                   | (1,1,1)           | 1      |
-- > +-----------------------------------------+-------------------+--------+
-- > | @VK_BLEND_FACTOR_SRC_COLOR@             | (Rs0,Gs0,Bs0)     | As0    |
-- > +-----------------------------------------+-------------------+--------+
-- > | @VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR@   | (1-Rs0,1-Gs0,1-Bs | 1-As0  |
-- > |                                         | 0)                |        |
-- > +-----------------------------------------+-------------------+--------+
-- > | @VK_BLEND_FACTOR_DST_COLOR@             | (Rd,Gd,Bd)        | Ad     |
-- > +-----------------------------------------+-------------------+--------+
-- > | @VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR@   | (1-Rd,1-Gd,1-Bd)  | 1-Ad   |
-- > +-----------------------------------------+-------------------+--------+
-- > | @VK_BLEND_FACTOR_SRC_ALPHA@             | (As0,As0,As0)     | As0    |
-- > +-----------------------------------------+-------------------+--------+
-- > | @VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA@   | (1-As0,1-As0,1-As | 1-As0  |
-- > |                                         | 0)                |        |
-- > +-----------------------------------------+-------------------+--------+
-- > | @VK_BLEND_FACTOR_DST_ALPHA@             | (Ad,Ad,Ad)        | Ad     |
-- > +-----------------------------------------+-------------------+--------+
-- > | @VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA@   | (1-Ad,1-Ad,1-Ad)  | 1-Ad   |
-- > +-----------------------------------------+-------------------+--------+
-- > | @VK_BLEND_FACTOR_CONSTANT_COLOR@        | (Rc,Gc,Bc)        | Ac     |
-- > +-----------------------------------------+-------------------+--------+
-- > | @VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COL | (1-Rc,1-Gc,1-Bc)  | 1-Ac   |
-- > | OR@                                     |                   |        |
-- > +-----------------------------------------+-------------------+--------+
-- > | @VK_BLEND_FACTOR_CONSTANT_ALPHA@        | (Ac,Ac,Ac)        | Ac     |
-- > +-----------------------------------------+-------------------+--------+
-- > | @VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALP | (1-Ac,1-Ac,1-Ac)  | 1-Ac   |
-- > | HA@                                     |                   |        |
-- > +-----------------------------------------+-------------------+--------+
-- > | @VK_BLEND_FACTOR_SRC_ALPHA_SATURATE@    | (f,f,f); f =      | 1      |
-- > |                                         | min(As0,1-Ad)     |        |
-- > +-----------------------------------------+-------------------+--------+
-- > | @VK_BLEND_FACTOR_SRC1_COLOR@            | (Rs1,Gs1,Bs1)     | As1    |
-- > +-----------------------------------------+-------------------+--------+
-- > | @VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR@  | (1-Rs1,1-Gs1,1-Bs | 1-As1  |
-- > |                                         | 1)                |        |
-- > +-----------------------------------------+-------------------+--------+
-- > | @VK_BLEND_FACTOR_SRC1_ALPHA@            | (As1,As1,As1)     | As1    |
-- > +-----------------------------------------+-------------------+--------+
-- > | @VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA@  | (1-As1,1-As1,1-As | 1-As1  |
-- > |                                         | 1)                |        |
-- > +-----------------------------------------+-------------------+--------+
-- >
-- > Blend Factors
--
-- In this table, the following conventions are used:
--
-- -   Rs0,Gs0,Bs0 and As0 represent the first source color R, G, B, and A
--     components, respectively, for the fragment output location
--     corresponding to the color attachment being blended.
--
-- -   Rs1,Gs1,Bs1 and As1 represent the second source color R, G, B, and A
--     components, respectively, used in dual source blending modes, for
--     the fragment output location corresponding to the color attachment
--     being blended.
--
-- -   Rd,Gd,Bd and Ad represent the R, G, B, and A components of the
--     destination color. That is, the color currently in the corresponding
--     color attachment for this fragment\/sample.
--
-- -   Rc,Gc,Bc and Ac represent the blend constant R, G, B, and A
--     components, respectively.
--
-- = See Also
-- #_see_also#
--
-- 'VkPipelineColorBlendAttachmentState'
newtype VkBlendFactor = VkBlendFactor Int32
  deriving (Eq, Ord, Storable)

instance Show VkBlendFactor where
  showsPrec _ VK_BLEND_FACTOR_ZERO = showString "VK_BLEND_FACTOR_ZERO"
  showsPrec _ VK_BLEND_FACTOR_ONE = showString "VK_BLEND_FACTOR_ONE"
  showsPrec _ VK_BLEND_FACTOR_SRC_COLOR = showString "VK_BLEND_FACTOR_SRC_COLOR"
  showsPrec _ VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR = showString "VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR"
  showsPrec _ VK_BLEND_FACTOR_DST_COLOR = showString "VK_BLEND_FACTOR_DST_COLOR"
  showsPrec _ VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR = showString "VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR"
  showsPrec _ VK_BLEND_FACTOR_SRC_ALPHA = showString "VK_BLEND_FACTOR_SRC_ALPHA"
  showsPrec _ VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA = showString "VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA"
  showsPrec _ VK_BLEND_FACTOR_DST_ALPHA = showString "VK_BLEND_FACTOR_DST_ALPHA"
  showsPrec _ VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA = showString "VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA"
  showsPrec _ VK_BLEND_FACTOR_CONSTANT_COLOR = showString "VK_BLEND_FACTOR_CONSTANT_COLOR"
  showsPrec _ VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR = showString "VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR"
  showsPrec _ VK_BLEND_FACTOR_CONSTANT_ALPHA = showString "VK_BLEND_FACTOR_CONSTANT_ALPHA"
  showsPrec _ VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA = showString "VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA"
  showsPrec _ VK_BLEND_FACTOR_SRC_ALPHA_SATURATE = showString "VK_BLEND_FACTOR_SRC_ALPHA_SATURATE"
  showsPrec _ VK_BLEND_FACTOR_SRC1_COLOR = showString "VK_BLEND_FACTOR_SRC1_COLOR"
  showsPrec _ VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR = showString "VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR"
  showsPrec _ VK_BLEND_FACTOR_SRC1_ALPHA = showString "VK_BLEND_FACTOR_SRC1_ALPHA"
  showsPrec _ VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA = showString "VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA"
  showsPrec p (VkBlendFactor x) = showParen (p >= 11) (showString "VkBlendFactor " . showsPrec 11 x)

instance Read VkBlendFactor where
  readPrec = parens ( choose [ ("VK_BLEND_FACTOR_ZERO",                     pure VK_BLEND_FACTOR_ZERO)
                             , ("VK_BLEND_FACTOR_ONE",                      pure VK_BLEND_FACTOR_ONE)
                             , ("VK_BLEND_FACTOR_SRC_COLOR",                pure VK_BLEND_FACTOR_SRC_COLOR)
                             , ("VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR",      pure VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR)
                             , ("VK_BLEND_FACTOR_DST_COLOR",                pure VK_BLEND_FACTOR_DST_COLOR)
                             , ("VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR",      pure VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR)
                             , ("VK_BLEND_FACTOR_SRC_ALPHA",                pure VK_BLEND_FACTOR_SRC_ALPHA)
                             , ("VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA",      pure VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA)
                             , ("VK_BLEND_FACTOR_DST_ALPHA",                pure VK_BLEND_FACTOR_DST_ALPHA)
                             , ("VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA",      pure VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA)
                             , ("VK_BLEND_FACTOR_CONSTANT_COLOR",           pure VK_BLEND_FACTOR_CONSTANT_COLOR)
                             , ("VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR", pure VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR)
                             , ("VK_BLEND_FACTOR_CONSTANT_ALPHA",           pure VK_BLEND_FACTOR_CONSTANT_ALPHA)
                             , ("VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA", pure VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA)
                             , ("VK_BLEND_FACTOR_SRC_ALPHA_SATURATE",       pure VK_BLEND_FACTOR_SRC_ALPHA_SATURATE)
                             , ("VK_BLEND_FACTOR_SRC1_COLOR",               pure VK_BLEND_FACTOR_SRC1_COLOR)
                             , ("VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR",     pure VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR)
                             , ("VK_BLEND_FACTOR_SRC1_ALPHA",               pure VK_BLEND_FACTOR_SRC1_ALPHA)
                             , ("VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA",     pure VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA)
                             ] +++
                      prec 10 (do
                        expectP (Ident "VkBlendFactor")
                        v <- step readPrec
                        pure (VkBlendFactor v)
                        )
                    )

-- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_ZERO"
pattern VK_BLEND_FACTOR_ZERO :: VkBlendFactor
pattern VK_BLEND_FACTOR_ZERO = VkBlendFactor 0

-- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_ONE"
pattern VK_BLEND_FACTOR_ONE :: VkBlendFactor
pattern VK_BLEND_FACTOR_ONE = VkBlendFactor 1

-- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_SRC_COLOR"
pattern VK_BLEND_FACTOR_SRC_COLOR :: VkBlendFactor
pattern VK_BLEND_FACTOR_SRC_COLOR = VkBlendFactor 2

-- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR"
pattern VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR :: VkBlendFactor
pattern VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR = VkBlendFactor 3

-- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_DST_COLOR"
pattern VK_BLEND_FACTOR_DST_COLOR :: VkBlendFactor
pattern VK_BLEND_FACTOR_DST_COLOR = VkBlendFactor 4

-- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR"
pattern VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR :: VkBlendFactor
pattern VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR = VkBlendFactor 5

-- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_SRC_ALPHA"
pattern VK_BLEND_FACTOR_SRC_ALPHA :: VkBlendFactor
pattern VK_BLEND_FACTOR_SRC_ALPHA = VkBlendFactor 6

-- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA"
pattern VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA :: VkBlendFactor
pattern VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA = VkBlendFactor 7

-- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_DST_ALPHA"
pattern VK_BLEND_FACTOR_DST_ALPHA :: VkBlendFactor
pattern VK_BLEND_FACTOR_DST_ALPHA = VkBlendFactor 8

-- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA"
pattern VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA :: VkBlendFactor
pattern VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA = VkBlendFactor 9

-- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_CONSTANT_COLOR"
pattern VK_BLEND_FACTOR_CONSTANT_COLOR :: VkBlendFactor
pattern VK_BLEND_FACTOR_CONSTANT_COLOR = VkBlendFactor 10

-- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR"
pattern VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR :: VkBlendFactor
pattern VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR = VkBlendFactor 11

-- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_CONSTANT_ALPHA"
pattern VK_BLEND_FACTOR_CONSTANT_ALPHA :: VkBlendFactor
pattern VK_BLEND_FACTOR_CONSTANT_ALPHA = VkBlendFactor 12

-- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA"
pattern VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA :: VkBlendFactor
pattern VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA = VkBlendFactor 13

-- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_SRC_ALPHA_SATURATE"
pattern VK_BLEND_FACTOR_SRC_ALPHA_SATURATE :: VkBlendFactor
pattern VK_BLEND_FACTOR_SRC_ALPHA_SATURATE = VkBlendFactor 14

-- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_SRC1_COLOR"
pattern VK_BLEND_FACTOR_SRC1_COLOR :: VkBlendFactor
pattern VK_BLEND_FACTOR_SRC1_COLOR = VkBlendFactor 15

-- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR"
pattern VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR :: VkBlendFactor
pattern VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR = VkBlendFactor 16

-- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_SRC1_ALPHA"
pattern VK_BLEND_FACTOR_SRC1_ALPHA :: VkBlendFactor
pattern VK_BLEND_FACTOR_SRC1_ALPHA = VkBlendFactor 17

-- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA"
pattern VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA :: VkBlendFactor
pattern VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA = VkBlendFactor 18
-- ** VkBlendOp

-- | VkBlendOp - Framebuffer blending operations
--
-- = Description
-- #_description#
--
-- The semantics of each basic blend operations is described in the table
-- below:
--
-- > +-------------------------------+--------------------+----------------+
-- > | VkBlendOp                     | RGB Components     | Alpha          |
-- > |                               |                    | Component      |
-- > +===============================+====================+================+
-- > | @VK_BLEND_OP_ADD@             | R = Rs0 × Sr + Rd  | A = As0 × Sa + |
-- > |                               | × Dr               | Ad × Da        |
-- > |                               | G = Gs0 × Sg + Gd  |                |
-- > |                               | × Dg               |                |
-- > |                               | B = Bs0 × Sb + Bd  |                |
-- > |                               | × Db               |                |
-- > +-------------------------------+--------------------+----------------+
-- > | @VK_BLEND_OP_SUBTRACT@        | R = Rs0 × Sr - Rd  | A = As0 × Sa - |
-- > |                               | × Dr               | Ad × Da        |
-- > |                               | G = Gs0 × Sg - Gd  |                |
-- > |                               | × Dg               |                |
-- > |                               | B = Bs0 × Sb - Bd  |                |
-- > |                               | × Db               |                |
-- > +-------------------------------+--------------------+----------------+
-- > | @VK_BLEND_OP_REVERSE_SUBTRACT | R = Rd × Dr - Rs0  | A = Ad × Da -  |
-- > | @                             | × Sr               | As0 × Sa       |
-- > |                               | G = Gd × Dg - Gs0  |                |
-- > |                               | × Sg               |                |
-- > |                               | B = Bd × Db - Bs0  |                |
-- > |                               | × Sb               |                |
-- > +-------------------------------+--------------------+----------------+
-- > | @VK_BLEND_OP_MIN@             | R = min(Rs0,Rd)    | A =            |
-- > |                               | G = min(Gs0,Gd)    | min(As0,Ad)    |
-- > |                               | B = min(Bs0,Bd)    |                |
-- > +-------------------------------+--------------------+----------------+
-- > | @VK_BLEND_OP_MAX@             | R = max(Rs0,Rd)    | A =            |
-- > |                               | G = max(Gs0,Gd)    | max(As0,Ad)    |
-- > |                               | B = max(Bs0,Bd)    |                |
-- > +-------------------------------+--------------------+----------------+
-- >
-- > Basic Blend Operations
--
-- In this table, the following conventions are used:
--
-- -   Rs0, Gs0, Bs0 and As0 represent the first source color R, G, B, and
--     A components, respectively.
--
-- -   Rd, Gd, Bd and Ad represent the R, G, B, and A components of the
--     destination color. That is, the color currently in the corresponding
--     color attachment for this fragment\/sample.
--
-- -   Sr, Sg, Sb and Sa represent the source blend factor R, G, B, and A
--     components, respectively.
--
-- -   Dr, Dg, Db and Da represent the destination blend factor R, G, B,
--     and A components, respectively.
--
-- The blending operation produces a new set of values R, G, B and A, which
-- are written to the framebuffer attachment. If blending is not enabled
-- for this attachment, then R, G, B and A are assigned Rs0, Gs0, Bs0 and
-- As0, respectively.
--
-- If the color attachment is fixed-point, the components of the source and
-- destination values and blend factors are each clamped to [0,1] or [-1,1]
-- respectively for an unsigned normalized or signed normalized color
-- attachment prior to evaluating the blend operations. If the color
-- attachment is floating-point, no clamping occurs.
--
-- = See Also
-- #_see_also#
--
-- 'VkPipelineColorBlendAttachmentState'
newtype VkBlendOp = VkBlendOp Int32
  deriving (Eq, Ord, Storable)

instance Show VkBlendOp where
  showsPrec _ VK_BLEND_OP_ADD = showString "VK_BLEND_OP_ADD"
  showsPrec _ VK_BLEND_OP_SUBTRACT = showString "VK_BLEND_OP_SUBTRACT"
  showsPrec _ VK_BLEND_OP_REVERSE_SUBTRACT = showString "VK_BLEND_OP_REVERSE_SUBTRACT"
  showsPrec _ VK_BLEND_OP_MIN = showString "VK_BLEND_OP_MIN"
  showsPrec _ VK_BLEND_OP_MAX = showString "VK_BLEND_OP_MAX"
  -- The following values are from extensions, the patterns themselves are exported from the extension modules
  showsPrec _ (VkBlendOp 1000148000) = showString "VK_BLEND_OP_ZERO_EXT"
  showsPrec _ (VkBlendOp 1000148001) = showString "VK_BLEND_OP_SRC_EXT"
  showsPrec _ (VkBlendOp 1000148002) = showString "VK_BLEND_OP_DST_EXT"
  showsPrec _ (VkBlendOp 1000148003) = showString "VK_BLEND_OP_SRC_OVER_EXT"
  showsPrec _ (VkBlendOp 1000148004) = showString "VK_BLEND_OP_DST_OVER_EXT"
  showsPrec _ (VkBlendOp 1000148005) = showString "VK_BLEND_OP_SRC_IN_EXT"
  showsPrec _ (VkBlendOp 1000148006) = showString "VK_BLEND_OP_DST_IN_EXT"
  showsPrec _ (VkBlendOp 1000148007) = showString "VK_BLEND_OP_SRC_OUT_EXT"
  showsPrec _ (VkBlendOp 1000148008) = showString "VK_BLEND_OP_DST_OUT_EXT"
  showsPrec _ (VkBlendOp 1000148009) = showString "VK_BLEND_OP_SRC_ATOP_EXT"
  showsPrec _ (VkBlendOp 1000148010) = showString "VK_BLEND_OP_DST_ATOP_EXT"
  showsPrec _ (VkBlendOp 1000148011) = showString "VK_BLEND_OP_XOR_EXT"
  showsPrec _ (VkBlendOp 1000148012) = showString "VK_BLEND_OP_MULTIPLY_EXT"
  showsPrec _ (VkBlendOp 1000148013) = showString "VK_BLEND_OP_SCREEN_EXT"
  showsPrec _ (VkBlendOp 1000148014) = showString "VK_BLEND_OP_OVERLAY_EXT"
  showsPrec _ (VkBlendOp 1000148015) = showString "VK_BLEND_OP_DARKEN_EXT"
  showsPrec _ (VkBlendOp 1000148016) = showString "VK_BLEND_OP_LIGHTEN_EXT"
  showsPrec _ (VkBlendOp 1000148017) = showString "VK_BLEND_OP_COLORDODGE_EXT"
  showsPrec _ (VkBlendOp 1000148018) = showString "VK_BLEND_OP_COLORBURN_EXT"
  showsPrec _ (VkBlendOp 1000148019) = showString "VK_BLEND_OP_HARDLIGHT_EXT"
  showsPrec _ (VkBlendOp 1000148020) = showString "VK_BLEND_OP_SOFTLIGHT_EXT"
  showsPrec _ (VkBlendOp 1000148021) = showString "VK_BLEND_OP_DIFFERENCE_EXT"
  showsPrec _ (VkBlendOp 1000148022) = showString "VK_BLEND_OP_EXCLUSION_EXT"
  showsPrec _ (VkBlendOp 1000148023) = showString "VK_BLEND_OP_INVERT_EXT"
  showsPrec _ (VkBlendOp 1000148024) = showString "VK_BLEND_OP_INVERT_RGB_EXT"
  showsPrec _ (VkBlendOp 1000148025) = showString "VK_BLEND_OP_LINEARDODGE_EXT"
  showsPrec _ (VkBlendOp 1000148026) = showString "VK_BLEND_OP_LINEARBURN_EXT"
  showsPrec _ (VkBlendOp 1000148027) = showString "VK_BLEND_OP_VIVIDLIGHT_EXT"
  showsPrec _ (VkBlendOp 1000148028) = showString "VK_BLEND_OP_LINEARLIGHT_EXT"
  showsPrec _ (VkBlendOp 1000148029) = showString "VK_BLEND_OP_PINLIGHT_EXT"
  showsPrec _ (VkBlendOp 1000148030) = showString "VK_BLEND_OP_HARDMIX_EXT"
  showsPrec _ (VkBlendOp 1000148031) = showString "VK_BLEND_OP_HSL_HUE_EXT"
  showsPrec _ (VkBlendOp 1000148032) = showString "VK_BLEND_OP_HSL_SATURATION_EXT"
  showsPrec _ (VkBlendOp 1000148033) = showString "VK_BLEND_OP_HSL_COLOR_EXT"
  showsPrec _ (VkBlendOp 1000148034) = showString "VK_BLEND_OP_HSL_LUMINOSITY_EXT"
  showsPrec _ (VkBlendOp 1000148035) = showString "VK_BLEND_OP_PLUS_EXT"
  showsPrec _ (VkBlendOp 1000148036) = showString "VK_BLEND_OP_PLUS_CLAMPED_EXT"
  showsPrec _ (VkBlendOp 1000148037) = showString "VK_BLEND_OP_PLUS_CLAMPED_ALPHA_EXT"
  showsPrec _ (VkBlendOp 1000148038) = showString "VK_BLEND_OP_PLUS_DARKER_EXT"
  showsPrec _ (VkBlendOp 1000148039) = showString "VK_BLEND_OP_MINUS_EXT"
  showsPrec _ (VkBlendOp 1000148040) = showString "VK_BLEND_OP_MINUS_CLAMPED_EXT"
  showsPrec _ (VkBlendOp 1000148041) = showString "VK_BLEND_OP_CONTRAST_EXT"
  showsPrec _ (VkBlendOp 1000148042) = showString "VK_BLEND_OP_INVERT_OVG_EXT"
  showsPrec _ (VkBlendOp 1000148043) = showString "VK_BLEND_OP_RED_EXT"
  showsPrec _ (VkBlendOp 1000148044) = showString "VK_BLEND_OP_GREEN_EXT"
  showsPrec _ (VkBlendOp 1000148045) = showString "VK_BLEND_OP_BLUE_EXT"
  showsPrec p (VkBlendOp x) = showParen (p >= 11) (showString "VkBlendOp " . showsPrec 11 x)

instance Read VkBlendOp where
  readPrec = parens ( choose [ ("VK_BLEND_OP_ADD",              pure VK_BLEND_OP_ADD)
                             , ("VK_BLEND_OP_SUBTRACT",         pure VK_BLEND_OP_SUBTRACT)
                             , ("VK_BLEND_OP_REVERSE_SUBTRACT", pure VK_BLEND_OP_REVERSE_SUBTRACT)
                             , ("VK_BLEND_OP_MIN",              pure VK_BLEND_OP_MIN)
                             , ("VK_BLEND_OP_MAX",              pure VK_BLEND_OP_MAX)
                             , -- The following values are from extensions, the patterns themselves are exported from the extension modules
                               ("VK_BLEND_OP_ZERO_EXT",               pure (VkBlendOp 1000148000))
                             , ("VK_BLEND_OP_SRC_EXT",                pure (VkBlendOp 1000148001))
                             , ("VK_BLEND_OP_DST_EXT",                pure (VkBlendOp 1000148002))
                             , ("VK_BLEND_OP_SRC_OVER_EXT",           pure (VkBlendOp 1000148003))
                             , ("VK_BLEND_OP_DST_OVER_EXT",           pure (VkBlendOp 1000148004))
                             , ("VK_BLEND_OP_SRC_IN_EXT",             pure (VkBlendOp 1000148005))
                             , ("VK_BLEND_OP_DST_IN_EXT",             pure (VkBlendOp 1000148006))
                             , ("VK_BLEND_OP_SRC_OUT_EXT",            pure (VkBlendOp 1000148007))
                             , ("VK_BLEND_OP_DST_OUT_EXT",            pure (VkBlendOp 1000148008))
                             , ("VK_BLEND_OP_SRC_ATOP_EXT",           pure (VkBlendOp 1000148009))
                             , ("VK_BLEND_OP_DST_ATOP_EXT",           pure (VkBlendOp 1000148010))
                             , ("VK_BLEND_OP_XOR_EXT",                pure (VkBlendOp 1000148011))
                             , ("VK_BLEND_OP_MULTIPLY_EXT",           pure (VkBlendOp 1000148012))
                             , ("VK_BLEND_OP_SCREEN_EXT",             pure (VkBlendOp 1000148013))
                             , ("VK_BLEND_OP_OVERLAY_EXT",            pure (VkBlendOp 1000148014))
                             , ("VK_BLEND_OP_DARKEN_EXT",             pure (VkBlendOp 1000148015))
                             , ("VK_BLEND_OP_LIGHTEN_EXT",            pure (VkBlendOp 1000148016))
                             , ("VK_BLEND_OP_COLORDODGE_EXT",         pure (VkBlendOp 1000148017))
                             , ("VK_BLEND_OP_COLORBURN_EXT",          pure (VkBlendOp 1000148018))
                             , ("VK_BLEND_OP_HARDLIGHT_EXT",          pure (VkBlendOp 1000148019))
                             , ("VK_BLEND_OP_SOFTLIGHT_EXT",          pure (VkBlendOp 1000148020))
                             , ("VK_BLEND_OP_DIFFERENCE_EXT",         pure (VkBlendOp 1000148021))
                             , ("VK_BLEND_OP_EXCLUSION_EXT",          pure (VkBlendOp 1000148022))
                             , ("VK_BLEND_OP_INVERT_EXT",             pure (VkBlendOp 1000148023))
                             , ("VK_BLEND_OP_INVERT_RGB_EXT",         pure (VkBlendOp 1000148024))
                             , ("VK_BLEND_OP_LINEARDODGE_EXT",        pure (VkBlendOp 1000148025))
                             , ("VK_BLEND_OP_LINEARBURN_EXT",         pure (VkBlendOp 1000148026))
                             , ("VK_BLEND_OP_VIVIDLIGHT_EXT",         pure (VkBlendOp 1000148027))
                             , ("VK_BLEND_OP_LINEARLIGHT_EXT",        pure (VkBlendOp 1000148028))
                             , ("VK_BLEND_OP_PINLIGHT_EXT",           pure (VkBlendOp 1000148029))
                             , ("VK_BLEND_OP_HARDMIX_EXT",            pure (VkBlendOp 1000148030))
                             , ("VK_BLEND_OP_HSL_HUE_EXT",            pure (VkBlendOp 1000148031))
                             , ("VK_BLEND_OP_HSL_SATURATION_EXT",     pure (VkBlendOp 1000148032))
                             , ("VK_BLEND_OP_HSL_COLOR_EXT",          pure (VkBlendOp 1000148033))
                             , ("VK_BLEND_OP_HSL_LUMINOSITY_EXT",     pure (VkBlendOp 1000148034))
                             , ("VK_BLEND_OP_PLUS_EXT",               pure (VkBlendOp 1000148035))
                             , ("VK_BLEND_OP_PLUS_CLAMPED_EXT",       pure (VkBlendOp 1000148036))
                             , ("VK_BLEND_OP_PLUS_CLAMPED_ALPHA_EXT", pure (VkBlendOp 1000148037))
                             , ("VK_BLEND_OP_PLUS_DARKER_EXT",        pure (VkBlendOp 1000148038))
                             , ("VK_BLEND_OP_MINUS_EXT",              pure (VkBlendOp 1000148039))
                             , ("VK_BLEND_OP_MINUS_CLAMPED_EXT",      pure (VkBlendOp 1000148040))
                             , ("VK_BLEND_OP_CONTRAST_EXT",           pure (VkBlendOp 1000148041))
                             , ("VK_BLEND_OP_INVERT_OVG_EXT",         pure (VkBlendOp 1000148042))
                             , ("VK_BLEND_OP_RED_EXT",                pure (VkBlendOp 1000148043))
                             , ("VK_BLEND_OP_GREEN_EXT",              pure (VkBlendOp 1000148044))
                             , ("VK_BLEND_OP_BLUE_EXT",               pure (VkBlendOp 1000148045))
                             ] +++
                      prec 10 (do
                        expectP (Ident "VkBlendOp")
                        v <- step readPrec
                        pure (VkBlendOp v)
                        )
                    )

-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_ADD"
pattern VK_BLEND_OP_ADD :: VkBlendOp
pattern VK_BLEND_OP_ADD = VkBlendOp 0

-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_SUBTRACT"
pattern VK_BLEND_OP_SUBTRACT :: VkBlendOp
pattern VK_BLEND_OP_SUBTRACT = VkBlendOp 1

-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_REVERSE_SUBTRACT"
pattern VK_BLEND_OP_REVERSE_SUBTRACT :: VkBlendOp
pattern VK_BLEND_OP_REVERSE_SUBTRACT = VkBlendOp 2

-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_MIN"
pattern VK_BLEND_OP_MIN :: VkBlendOp
pattern VK_BLEND_OP_MIN = VkBlendOp 3

-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_MAX"
pattern VK_BLEND_OP_MAX :: VkBlendOp
pattern VK_BLEND_OP_MAX = VkBlendOp 4
-- ** VkCompareOp

-- | VkCompareOp - Stencil comparison function
--
-- = See Also
-- #_see_also#
--
-- 'VkPipelineDepthStencilStateCreateInfo',
-- 'Graphics.Vulkan.Core10.Sampler.VkSamplerCreateInfo', 'VkStencilOpState'
newtype VkCompareOp = VkCompareOp Int32
  deriving (Eq, Ord, Storable)

instance Show VkCompareOp where
  showsPrec _ VK_COMPARE_OP_NEVER = showString "VK_COMPARE_OP_NEVER"
  showsPrec _ VK_COMPARE_OP_LESS = showString "VK_COMPARE_OP_LESS"
  showsPrec _ VK_COMPARE_OP_EQUAL = showString "VK_COMPARE_OP_EQUAL"
  showsPrec _ VK_COMPARE_OP_LESS_OR_EQUAL = showString "VK_COMPARE_OP_LESS_OR_EQUAL"
  showsPrec _ VK_COMPARE_OP_GREATER = showString "VK_COMPARE_OP_GREATER"
  showsPrec _ VK_COMPARE_OP_NOT_EQUAL = showString "VK_COMPARE_OP_NOT_EQUAL"
  showsPrec _ VK_COMPARE_OP_GREATER_OR_EQUAL = showString "VK_COMPARE_OP_GREATER_OR_EQUAL"
  showsPrec _ VK_COMPARE_OP_ALWAYS = showString "VK_COMPARE_OP_ALWAYS"
  showsPrec p (VkCompareOp x) = showParen (p >= 11) (showString "VkCompareOp " . showsPrec 11 x)

instance Read VkCompareOp where
  readPrec = parens ( choose [ ("VK_COMPARE_OP_NEVER",            pure VK_COMPARE_OP_NEVER)
                             , ("VK_COMPARE_OP_LESS",             pure VK_COMPARE_OP_LESS)
                             , ("VK_COMPARE_OP_EQUAL",            pure VK_COMPARE_OP_EQUAL)
                             , ("VK_COMPARE_OP_LESS_OR_EQUAL",    pure VK_COMPARE_OP_LESS_OR_EQUAL)
                             , ("VK_COMPARE_OP_GREATER",          pure VK_COMPARE_OP_GREATER)
                             , ("VK_COMPARE_OP_NOT_EQUAL",        pure VK_COMPARE_OP_NOT_EQUAL)
                             , ("VK_COMPARE_OP_GREATER_OR_EQUAL", pure VK_COMPARE_OP_GREATER_OR_EQUAL)
                             , ("VK_COMPARE_OP_ALWAYS",           pure VK_COMPARE_OP_ALWAYS)
                             ] +++
                      prec 10 (do
                        expectP (Ident "VkCompareOp")
                        v <- step readPrec
                        pure (VkCompareOp v)
                        )
                    )

-- | @VK_COMPARE_OP_NEVER@ specifies that the test never passes.
pattern VK_COMPARE_OP_NEVER :: VkCompareOp
pattern VK_COMPARE_OP_NEVER = VkCompareOp 0

-- | @VK_COMPARE_OP_LESS@ specifies that the test passes when R \< S.
pattern VK_COMPARE_OP_LESS :: VkCompareOp
pattern VK_COMPARE_OP_LESS = VkCompareOp 1

-- | @VK_COMPARE_OP_EQUAL@ specifies that the test passes when R = S.
pattern VK_COMPARE_OP_EQUAL :: VkCompareOp
pattern VK_COMPARE_OP_EQUAL = VkCompareOp 2

-- | @VK_COMPARE_OP_LESS_OR_EQUAL@ specifies that the test passes when R ≤ S.
pattern VK_COMPARE_OP_LESS_OR_EQUAL :: VkCompareOp
pattern VK_COMPARE_OP_LESS_OR_EQUAL = VkCompareOp 3

-- | @VK_COMPARE_OP_GREATER@ specifies that the test passes when R > S.
pattern VK_COMPARE_OP_GREATER :: VkCompareOp
pattern VK_COMPARE_OP_GREATER = VkCompareOp 4

-- | @VK_COMPARE_OP_NOT_EQUAL@ specifies that the test passes when R ≠ S.
pattern VK_COMPARE_OP_NOT_EQUAL :: VkCompareOp
pattern VK_COMPARE_OP_NOT_EQUAL = VkCompareOp 5

-- | @VK_COMPARE_OP_GREATER_OR_EQUAL@ specifies that the test passes when R ≥
-- S.
pattern VK_COMPARE_OP_GREATER_OR_EQUAL :: VkCompareOp
pattern VK_COMPARE_OP_GREATER_OR_EQUAL = VkCompareOp 6

-- | @VK_COMPARE_OP_ALWAYS@ specifies that the test always passes.
pattern VK_COMPARE_OP_ALWAYS :: VkCompareOp
pattern VK_COMPARE_OP_ALWAYS = VkCompareOp 7
-- ** VkDynamicState

-- | VkDynamicState - Indicate which dynamic state is taken from dynamic
-- state commands
--
-- = See Also
-- #_see_also#
--
-- 'VkPipelineDynamicStateCreateInfo'
newtype VkDynamicState = VkDynamicState Int32
  deriving (Eq, Ord, Storable)

instance Show VkDynamicState where
  showsPrec _ VK_DYNAMIC_STATE_VIEWPORT = showString "VK_DYNAMIC_STATE_VIEWPORT"
  showsPrec _ VK_DYNAMIC_STATE_SCISSOR = showString "VK_DYNAMIC_STATE_SCISSOR"
  showsPrec _ VK_DYNAMIC_STATE_LINE_WIDTH = showString "VK_DYNAMIC_STATE_LINE_WIDTH"
  showsPrec _ VK_DYNAMIC_STATE_DEPTH_BIAS = showString "VK_DYNAMIC_STATE_DEPTH_BIAS"
  showsPrec _ VK_DYNAMIC_STATE_BLEND_CONSTANTS = showString "VK_DYNAMIC_STATE_BLEND_CONSTANTS"
  showsPrec _ VK_DYNAMIC_STATE_DEPTH_BOUNDS = showString "VK_DYNAMIC_STATE_DEPTH_BOUNDS"
  showsPrec _ VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK = showString "VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK"
  showsPrec _ VK_DYNAMIC_STATE_STENCIL_WRITE_MASK = showString "VK_DYNAMIC_STATE_STENCIL_WRITE_MASK"
  showsPrec _ VK_DYNAMIC_STATE_STENCIL_REFERENCE = showString "VK_DYNAMIC_STATE_STENCIL_REFERENCE"
  -- The following values are from extensions, the patterns themselves are exported from the extension modules
  showsPrec _ (VkDynamicState 1000087000) = showString "VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV"
  showsPrec _ (VkDynamicState 1000099000) = showString "VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT"
  showsPrec _ (VkDynamicState 1000143000) = showString "VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT"
  showsPrec p (VkDynamicState x) = showParen (p >= 11) (showString "VkDynamicState " . showsPrec 11 x)

instance Read VkDynamicState where
  readPrec = parens ( choose [ ("VK_DYNAMIC_STATE_VIEWPORT",             pure VK_DYNAMIC_STATE_VIEWPORT)
                             , ("VK_DYNAMIC_STATE_SCISSOR",              pure VK_DYNAMIC_STATE_SCISSOR)
                             , ("VK_DYNAMIC_STATE_LINE_WIDTH",           pure VK_DYNAMIC_STATE_LINE_WIDTH)
                             , ("VK_DYNAMIC_STATE_DEPTH_BIAS",           pure VK_DYNAMIC_STATE_DEPTH_BIAS)
                             , ("VK_DYNAMIC_STATE_BLEND_CONSTANTS",      pure VK_DYNAMIC_STATE_BLEND_CONSTANTS)
                             , ("VK_DYNAMIC_STATE_DEPTH_BOUNDS",         pure VK_DYNAMIC_STATE_DEPTH_BOUNDS)
                             , ("VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK", pure VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK)
                             , ("VK_DYNAMIC_STATE_STENCIL_WRITE_MASK",   pure VK_DYNAMIC_STATE_STENCIL_WRITE_MASK)
                             , ("VK_DYNAMIC_STATE_STENCIL_REFERENCE",    pure VK_DYNAMIC_STATE_STENCIL_REFERENCE)
                             , -- The following values are from extensions, the patterns themselves are exported from the extension modules
                               ("VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV", pure (VkDynamicState 1000087000))
                             , ("VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT", pure (VkDynamicState 1000099000))
                             , ("VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT",  pure (VkDynamicState 1000143000))
                             ] +++
                      prec 10 (do
                        expectP (Ident "VkDynamicState")
                        v <- step readPrec
                        pure (VkDynamicState v)
                        )
                    )

-- | @VK_DYNAMIC_STATE_VIEWPORT@ specifies that the @pViewports@ state in
-- @VkPipelineViewportStateCreateInfo@ will be ignored and /must/ be set
-- dynamically with
-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdSetViewport' before
-- any draw commands. The number of viewports used by a pipeline is still
-- specified by the @viewportCount@ member of
-- @VkPipelineViewportStateCreateInfo@.
pattern VK_DYNAMIC_STATE_VIEWPORT :: VkDynamicState
pattern VK_DYNAMIC_STATE_VIEWPORT = VkDynamicState 0

-- | @VK_DYNAMIC_STATE_SCISSOR@ specifies that the @pScissors@ state in
-- @VkPipelineViewportStateCreateInfo@ will be ignored and /must/ be set
-- dynamically with
-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdSetScissor' before
-- any draw commands. The number of scissor rectangles used by a pipeline
-- is still specified by the @scissorCount@ member of
-- @VkPipelineViewportStateCreateInfo@.
pattern VK_DYNAMIC_STATE_SCISSOR :: VkDynamicState
pattern VK_DYNAMIC_STATE_SCISSOR = VkDynamicState 1

-- | @VK_DYNAMIC_STATE_LINE_WIDTH@ specifies that the @lineWidth@ state in
-- @VkPipelineRasterizationStateCreateInfo@ will be ignored and /must/ be
-- set dynamically with
-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdSetLineWidth' before
-- any draw commands that generate line primitives for the rasterizer.
pattern VK_DYNAMIC_STATE_LINE_WIDTH :: VkDynamicState
pattern VK_DYNAMIC_STATE_LINE_WIDTH = VkDynamicState 2

-- | @VK_DYNAMIC_STATE_DEPTH_BIAS@ specifies that the
-- @depthBiasConstantFactor@, @depthBiasClamp@ and @depthBiasSlopeFactor@
-- states in @VkPipelineRasterizationStateCreateInfo@ will be ignored and
-- /must/ be set dynamically with
-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdSetDepthBias' before
-- any draws are performed with @depthBiasEnable@ in
-- @VkPipelineRasterizationStateCreateInfo@ set to @VK_TRUE@.
pattern VK_DYNAMIC_STATE_DEPTH_BIAS :: VkDynamicState
pattern VK_DYNAMIC_STATE_DEPTH_BIAS = VkDynamicState 3

-- | @VK_DYNAMIC_STATE_BLEND_CONSTANTS@ specifies that the @blendConstants@
-- state in @VkPipelineColorBlendStateCreateInfo@ will be ignored and
-- /must/ be set dynamically with
-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdSetBlendConstants'
-- before any draws are performed with a pipeline state with
-- @VkPipelineColorBlendAttachmentState@ member @blendEnable@ set to
-- @VK_TRUE@ and any of the blend functions using a constant blend color.
pattern VK_DYNAMIC_STATE_BLEND_CONSTANTS :: VkDynamicState
pattern VK_DYNAMIC_STATE_BLEND_CONSTANTS = VkDynamicState 4

-- | @VK_DYNAMIC_STATE_DEPTH_BOUNDS@ specifies that the @minDepthBounds@ and
-- @maxDepthBounds@ states of 'VkPipelineDepthStencilStateCreateInfo' will
-- be ignored and /must/ be set dynamically with
-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdSetDepthBounds'
-- before any draws are performed with a pipeline state with
-- @VkPipelineDepthStencilStateCreateInfo@ member @depthBoundsTestEnable@
-- set to @VK_TRUE@.
pattern VK_DYNAMIC_STATE_DEPTH_BOUNDS :: VkDynamicState
pattern VK_DYNAMIC_STATE_DEPTH_BOUNDS = VkDynamicState 5

-- | @VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK@ specifies that the @compareMask@
-- state in @VkPipelineDepthStencilStateCreateInfo@ for both @front@ and
-- @back@ will be ignored and /must/ be set dynamically with
-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdSetStencilCompareMask'
-- before any draws are performed with a pipeline state with
-- @VkPipelineDepthStencilStateCreateInfo@ member @stencilTestEnable@ set
-- to @VK_TRUE@
pattern VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK :: VkDynamicState
pattern VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK = VkDynamicState 6

-- | @VK_DYNAMIC_STATE_STENCIL_WRITE_MASK@ specifies that the @writeMask@
-- state in @VkPipelineDepthStencilStateCreateInfo@ for both @front@ and
-- @back@ will be ignored and /must/ be set dynamically with
-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdSetStencilWriteMask'
-- before any draws are performed with a pipeline state with
-- @VkPipelineDepthStencilStateCreateInfo@ member @stencilTestEnable@ set
-- to @VK_TRUE@
pattern VK_DYNAMIC_STATE_STENCIL_WRITE_MASK :: VkDynamicState
pattern VK_DYNAMIC_STATE_STENCIL_WRITE_MASK = VkDynamicState 7

-- | @VK_DYNAMIC_STATE_STENCIL_REFERENCE@ specifies that the @reference@
-- state in @VkPipelineDepthStencilStateCreateInfo@ for both @front@ and
-- @back@ will be ignored and /must/ be set dynamically with
-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdSetStencilReference'
-- before any draws are performed with a pipeline state with
-- @VkPipelineDepthStencilStateCreateInfo@ member @stencilTestEnable@ set
-- to @VK_TRUE@
pattern VK_DYNAMIC_STATE_STENCIL_REFERENCE :: VkDynamicState
pattern VK_DYNAMIC_STATE_STENCIL_REFERENCE = VkDynamicState 8
-- ** VkPolygonMode

-- | VkPolygonMode - Control polygon rasterization mode
--
-- = Description
-- #_description#
--
-- -   @VK_POLYGON_MODE_POINT@ specifies that polygon vertices are drawn as
--     points.
--
-- -   @VK_POLYGON_MODE_LINE@ specifies that polygon edges are drawn as
--     line segments.
--
-- -   @VK_POLYGON_MODE_FILL@ specifies that polygons are rendered using
--     the polygon rasterization rules in this section.
--
-- These modes affect only the final rasterization of polygons: in
-- particular, a polygon’s vertices are shaded and the polygon is clipped
-- and possibly culled before these modes are applied.
--
-- = See Also
-- #_see_also#
--
-- 'VkPipelineRasterizationStateCreateInfo'
newtype VkPolygonMode = VkPolygonMode Int32
  deriving (Eq, Ord, Storable)

instance Show VkPolygonMode where
  showsPrec _ VK_POLYGON_MODE_FILL = showString "VK_POLYGON_MODE_FILL"
  showsPrec _ VK_POLYGON_MODE_LINE = showString "VK_POLYGON_MODE_LINE"
  showsPrec _ VK_POLYGON_MODE_POINT = showString "VK_POLYGON_MODE_POINT"
  -- The following values are from extensions, the patterns themselves are exported from the extension modules
  showsPrec _ (VkPolygonMode 1000153000) = showString "VK_POLYGON_MODE_FILL_RECTANGLE_NV"
  showsPrec p (VkPolygonMode x) = showParen (p >= 11) (showString "VkPolygonMode " . showsPrec 11 x)

instance Read VkPolygonMode where
  readPrec = parens ( choose [ ("VK_POLYGON_MODE_FILL",  pure VK_POLYGON_MODE_FILL)
                             , ("VK_POLYGON_MODE_LINE",  pure VK_POLYGON_MODE_LINE)
                             , ("VK_POLYGON_MODE_POINT", pure VK_POLYGON_MODE_POINT)
                             , -- The following values are from extensions, the patterns themselves are exported from the extension modules
                               ("VK_POLYGON_MODE_FILL_RECTANGLE_NV", pure (VkPolygonMode 1000153000))
                             ] +++
                      prec 10 (do
                        expectP (Ident "VkPolygonMode")
                        v <- step readPrec
                        pure (VkPolygonMode v)
                        )
                    )

-- No documentation found for Nested "VkPolygonMode" "VK_POLYGON_MODE_FILL"
pattern VK_POLYGON_MODE_FILL :: VkPolygonMode
pattern VK_POLYGON_MODE_FILL = VkPolygonMode 0

-- No documentation found for Nested "VkPolygonMode" "VK_POLYGON_MODE_LINE"
pattern VK_POLYGON_MODE_LINE :: VkPolygonMode
pattern VK_POLYGON_MODE_LINE = VkPolygonMode 1

-- No documentation found for Nested "VkPolygonMode" "VK_POLYGON_MODE_POINT"
pattern VK_POLYGON_MODE_POINT :: VkPolygonMode
pattern VK_POLYGON_MODE_POINT = VkPolygonMode 2
-- ** VkFrontFace

-- | VkFrontFace - Interpret polygon front-facing orientation
--
-- = Description
-- #_description#
--
-- -   @VK_FRONT_FACE_COUNTER_CLOCKWISE@ specifies that a triangle with
--     positive area is considered front-facing.
--
-- -   @VK_FRONT_FACE_CLOCKWISE@ specifies that a triangle with negative
--     area is considered front-facing.
--
-- Any triangle which is not front-facing is back-facing, including
-- zero-area triangles.
--
-- = See Also
-- #_see_also#
--
-- 'VkPipelineRasterizationStateCreateInfo'
newtype VkFrontFace = VkFrontFace Int32
  deriving (Eq, Ord, Storable)

instance Show VkFrontFace where
  showsPrec _ VK_FRONT_FACE_COUNTER_CLOCKWISE = showString "VK_FRONT_FACE_COUNTER_CLOCKWISE"
  showsPrec _ VK_FRONT_FACE_CLOCKWISE = showString "VK_FRONT_FACE_CLOCKWISE"
  showsPrec p (VkFrontFace x) = showParen (p >= 11) (showString "VkFrontFace " . showsPrec 11 x)

instance Read VkFrontFace where
  readPrec = parens ( choose [ ("VK_FRONT_FACE_COUNTER_CLOCKWISE", pure VK_FRONT_FACE_COUNTER_CLOCKWISE)
                             , ("VK_FRONT_FACE_CLOCKWISE",         pure VK_FRONT_FACE_CLOCKWISE)
                             ] +++
                      prec 10 (do
                        expectP (Ident "VkFrontFace")
                        v <- step readPrec
                        pure (VkFrontFace v)
                        )
                    )

-- No documentation found for Nested "VkFrontFace" "VK_FRONT_FACE_COUNTER_CLOCKWISE"
pattern VK_FRONT_FACE_COUNTER_CLOCKWISE :: VkFrontFace
pattern VK_FRONT_FACE_COUNTER_CLOCKWISE = VkFrontFace 0

-- No documentation found for Nested "VkFrontFace" "VK_FRONT_FACE_CLOCKWISE"
pattern VK_FRONT_FACE_CLOCKWISE :: VkFrontFace
pattern VK_FRONT_FACE_CLOCKWISE = VkFrontFace 1
-- ** VkLogicOp

-- | VkLogicOp - Framebuffer logical operations
--
-- = Description
-- #_description#
--
-- The logical operations supported by Vulkan are summarized in the
-- following table in which
--
-- -   ¬ is bitwise invert,
--
-- -   ∧ is bitwise and,
--
-- -   ∨ is bitwise or,
--
-- -   ⊕ is bitwise exclusive or,
--
-- -   s is the fragment’s Rs0, Gs0, Bs0 or As0 component value for the
--     fragment output corresponding to the color attachment being updated,
--     and
--
-- -   d is the color attachment’s R, G, B or A component value:
--
-- > +-----------------------------------+-----------------------------------+
-- > | Mode                              | Operation                         |
-- > +===================================+===================================+
-- > | @VK_LOGIC_OP_CLEAR@               | 0                                 |
-- > +-----------------------------------+-----------------------------------+
-- > | @VK_LOGIC_OP_AND@                 | s ∧ d                             |
-- > +-----------------------------------+-----------------------------------+
-- > | @VK_LOGIC_OP_AND_REVERSE@         | s ∧ ¬ d                           |
-- > +-----------------------------------+-----------------------------------+
-- > | @VK_LOGIC_OP_COPY@                | s                                 |
-- > +-----------------------------------+-----------------------------------+
-- > | @VK_LOGIC_OP_AND_INVERTED@        | ¬ s ∧ d                           |
-- > +-----------------------------------+-----------------------------------+
-- > | @VK_LOGIC_OP_NO_OP@               | d                                 |
-- > +-----------------------------------+-----------------------------------+
-- > | @VK_LOGIC_OP_XOR@                 | s ⊕ d                             |
-- > +-----------------------------------+-----------------------------------+
-- > | @VK_LOGIC_OP_OR@                  | s ∨ d                             |
-- > +-----------------------------------+-----------------------------------+
-- > | @VK_LOGIC_OP_NOR@                 | ¬ (s ∨ d)                         |
-- > +-----------------------------------+-----------------------------------+
-- > | @VK_LOGIC_OP_EQUIVALENT@          | ¬ (s ⊕ d)                         |
-- > +-----------------------------------+-----------------------------------+
-- > | @VK_LOGIC_OP_INVERT@              | ¬ d                               |
-- > +-----------------------------------+-----------------------------------+
-- > | @VK_LOGIC_OP_OR_REVERSE@          | s ∨ ¬ d                           |
-- > +-----------------------------------+-----------------------------------+
-- > | @VK_LOGIC_OP_COPY_INVERTED@       | ¬ s                               |
-- > +-----------------------------------+-----------------------------------+
-- > | @VK_LOGIC_OP_OR_INVERTED@         | ¬ s ∨ d                           |
-- > +-----------------------------------+-----------------------------------+
-- > | @VK_LOGIC_OP_NAND@                | ¬ (s ∧ d)                         |
-- > +-----------------------------------+-----------------------------------+
-- > | @VK_LOGIC_OP_SET@                 | all 1s                            |
-- > +-----------------------------------+-----------------------------------+
-- >
-- > Logical Operations
--
-- The result of the logical operation is then written to the color
-- attachment as controlled by the component write mask, described in
-- <{html_spec_relative}#framebuffer-blendoperations Blend Operations>.
--
-- = See Also
-- #_see_also#
--
-- 'VkPipelineColorBlendStateCreateInfo'
newtype VkLogicOp = VkLogicOp Int32
  deriving (Eq, Ord, Storable)

instance Show VkLogicOp where
  showsPrec _ VK_LOGIC_OP_CLEAR = showString "VK_LOGIC_OP_CLEAR"
  showsPrec _ VK_LOGIC_OP_AND = showString "VK_LOGIC_OP_AND"
  showsPrec _ VK_LOGIC_OP_AND_REVERSE = showString "VK_LOGIC_OP_AND_REVERSE"
  showsPrec _ VK_LOGIC_OP_COPY = showString "VK_LOGIC_OP_COPY"
  showsPrec _ VK_LOGIC_OP_AND_INVERTED = showString "VK_LOGIC_OP_AND_INVERTED"
  showsPrec _ VK_LOGIC_OP_NO_OP = showString "VK_LOGIC_OP_NO_OP"
  showsPrec _ VK_LOGIC_OP_XOR = showString "VK_LOGIC_OP_XOR"
  showsPrec _ VK_LOGIC_OP_OR = showString "VK_LOGIC_OP_OR"
  showsPrec _ VK_LOGIC_OP_NOR = showString "VK_LOGIC_OP_NOR"
  showsPrec _ VK_LOGIC_OP_EQUIVALENT = showString "VK_LOGIC_OP_EQUIVALENT"
  showsPrec _ VK_LOGIC_OP_INVERT = showString "VK_LOGIC_OP_INVERT"
  showsPrec _ VK_LOGIC_OP_OR_REVERSE = showString "VK_LOGIC_OP_OR_REVERSE"
  showsPrec _ VK_LOGIC_OP_COPY_INVERTED = showString "VK_LOGIC_OP_COPY_INVERTED"
  showsPrec _ VK_LOGIC_OP_OR_INVERTED = showString "VK_LOGIC_OP_OR_INVERTED"
  showsPrec _ VK_LOGIC_OP_NAND = showString "VK_LOGIC_OP_NAND"
  showsPrec _ VK_LOGIC_OP_SET = showString "VK_LOGIC_OP_SET"
  showsPrec p (VkLogicOp x) = showParen (p >= 11) (showString "VkLogicOp " . showsPrec 11 x)

instance Read VkLogicOp where
  readPrec = parens ( choose [ ("VK_LOGIC_OP_CLEAR",         pure VK_LOGIC_OP_CLEAR)
                             , ("VK_LOGIC_OP_AND",           pure VK_LOGIC_OP_AND)
                             , ("VK_LOGIC_OP_AND_REVERSE",   pure VK_LOGIC_OP_AND_REVERSE)
                             , ("VK_LOGIC_OP_COPY",          pure VK_LOGIC_OP_COPY)
                             , ("VK_LOGIC_OP_AND_INVERTED",  pure VK_LOGIC_OP_AND_INVERTED)
                             , ("VK_LOGIC_OP_NO_OP",         pure VK_LOGIC_OP_NO_OP)
                             , ("VK_LOGIC_OP_XOR",           pure VK_LOGIC_OP_XOR)
                             , ("VK_LOGIC_OP_OR",            pure VK_LOGIC_OP_OR)
                             , ("VK_LOGIC_OP_NOR",           pure VK_LOGIC_OP_NOR)
                             , ("VK_LOGIC_OP_EQUIVALENT",    pure VK_LOGIC_OP_EQUIVALENT)
                             , ("VK_LOGIC_OP_INVERT",        pure VK_LOGIC_OP_INVERT)
                             , ("VK_LOGIC_OP_OR_REVERSE",    pure VK_LOGIC_OP_OR_REVERSE)
                             , ("VK_LOGIC_OP_COPY_INVERTED", pure VK_LOGIC_OP_COPY_INVERTED)
                             , ("VK_LOGIC_OP_OR_INVERTED",   pure VK_LOGIC_OP_OR_INVERTED)
                             , ("VK_LOGIC_OP_NAND",          pure VK_LOGIC_OP_NAND)
                             , ("VK_LOGIC_OP_SET",           pure VK_LOGIC_OP_SET)
                             ] +++
                      prec 10 (do
                        expectP (Ident "VkLogicOp")
                        v <- step readPrec
                        pure (VkLogicOp v)
                        )
                    )

-- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_CLEAR"
pattern VK_LOGIC_OP_CLEAR :: VkLogicOp
pattern VK_LOGIC_OP_CLEAR = VkLogicOp 0

-- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_AND"
pattern VK_LOGIC_OP_AND :: VkLogicOp
pattern VK_LOGIC_OP_AND = VkLogicOp 1

-- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_AND_REVERSE"
pattern VK_LOGIC_OP_AND_REVERSE :: VkLogicOp
pattern VK_LOGIC_OP_AND_REVERSE = VkLogicOp 2

-- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_COPY"
pattern VK_LOGIC_OP_COPY :: VkLogicOp
pattern VK_LOGIC_OP_COPY = VkLogicOp 3

-- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_AND_INVERTED"
pattern VK_LOGIC_OP_AND_INVERTED :: VkLogicOp
pattern VK_LOGIC_OP_AND_INVERTED = VkLogicOp 4

-- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_NO_OP"
pattern VK_LOGIC_OP_NO_OP :: VkLogicOp
pattern VK_LOGIC_OP_NO_OP = VkLogicOp 5

-- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_XOR"
pattern VK_LOGIC_OP_XOR :: VkLogicOp
pattern VK_LOGIC_OP_XOR = VkLogicOp 6

-- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_OR"
pattern VK_LOGIC_OP_OR :: VkLogicOp
pattern VK_LOGIC_OP_OR = VkLogicOp 7

-- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_NOR"
pattern VK_LOGIC_OP_NOR :: VkLogicOp
pattern VK_LOGIC_OP_NOR = VkLogicOp 8

-- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_EQUIVALENT"
pattern VK_LOGIC_OP_EQUIVALENT :: VkLogicOp
pattern VK_LOGIC_OP_EQUIVALENT = VkLogicOp 9

-- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_INVERT"
pattern VK_LOGIC_OP_INVERT :: VkLogicOp
pattern VK_LOGIC_OP_INVERT = VkLogicOp 10

-- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_OR_REVERSE"
pattern VK_LOGIC_OP_OR_REVERSE :: VkLogicOp
pattern VK_LOGIC_OP_OR_REVERSE = VkLogicOp 11

-- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_COPY_INVERTED"
pattern VK_LOGIC_OP_COPY_INVERTED :: VkLogicOp
pattern VK_LOGIC_OP_COPY_INVERTED = VkLogicOp 12

-- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_OR_INVERTED"
pattern VK_LOGIC_OP_OR_INVERTED :: VkLogicOp
pattern VK_LOGIC_OP_OR_INVERTED = VkLogicOp 13

-- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_NAND"
pattern VK_LOGIC_OP_NAND :: VkLogicOp
pattern VK_LOGIC_OP_NAND = VkLogicOp 14

-- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_SET"
pattern VK_LOGIC_OP_SET :: VkLogicOp
pattern VK_LOGIC_OP_SET = VkLogicOp 15
-- ** VkPrimitiveTopology

-- | VkPrimitiveTopology - Supported primitive topologies
--
-- = Description
-- #_description#
--
-- = See Also
-- #_see_also#
--
-- 'VkPipelineInputAssemblyStateCreateInfo'
newtype VkPrimitiveTopology = VkPrimitiveTopology Int32
  deriving (Eq, Ord, Storable)

instance Show VkPrimitiveTopology where
  showsPrec _ VK_PRIMITIVE_TOPOLOGY_POINT_LIST = showString "VK_PRIMITIVE_TOPOLOGY_POINT_LIST"
  showsPrec _ VK_PRIMITIVE_TOPOLOGY_LINE_LIST = showString "VK_PRIMITIVE_TOPOLOGY_LINE_LIST"
  showsPrec _ VK_PRIMITIVE_TOPOLOGY_LINE_STRIP = showString "VK_PRIMITIVE_TOPOLOGY_LINE_STRIP"
  showsPrec _ VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST = showString "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST"
  showsPrec _ VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP = showString "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP"
  showsPrec _ VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN = showString "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN"
  showsPrec _ VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY = showString "VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY"
  showsPrec _ VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY = showString "VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY"
  showsPrec _ VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY = showString "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY"
  showsPrec _ VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY = showString "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY"
  showsPrec _ VK_PRIMITIVE_TOPOLOGY_PATCH_LIST = showString "VK_PRIMITIVE_TOPOLOGY_PATCH_LIST"
  showsPrec p (VkPrimitiveTopology x) = showParen (p >= 11) (showString "VkPrimitiveTopology " . showsPrec 11 x)

instance Read VkPrimitiveTopology where
  readPrec = parens ( choose [ ("VK_PRIMITIVE_TOPOLOGY_POINT_LIST",                    pure VK_PRIMITIVE_TOPOLOGY_POINT_LIST)
                             , ("VK_PRIMITIVE_TOPOLOGY_LINE_LIST",                     pure VK_PRIMITIVE_TOPOLOGY_LINE_LIST)
                             , ("VK_PRIMITIVE_TOPOLOGY_LINE_STRIP",                    pure VK_PRIMITIVE_TOPOLOGY_LINE_STRIP)
                             , ("VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST",                 pure VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST)
                             , ("VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP",                pure VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP)
                             , ("VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN",                  pure VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN)
                             , ("VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY",      pure VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY)
                             , ("VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY",     pure VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY)
                             , ("VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY",  pure VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY)
                             , ("VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY", pure VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY)
                             , ("VK_PRIMITIVE_TOPOLOGY_PATCH_LIST",                    pure VK_PRIMITIVE_TOPOLOGY_PATCH_LIST)
                             ] +++
                      prec 10 (do
                        expectP (Ident "VkPrimitiveTopology")
                        v <- step readPrec
                        pure (VkPrimitiveTopology v)
                        )
                    )

-- No documentation found for Nested "VkPrimitiveTopology" "VK_PRIMITIVE_TOPOLOGY_POINT_LIST"
pattern VK_PRIMITIVE_TOPOLOGY_POINT_LIST :: VkPrimitiveTopology
pattern VK_PRIMITIVE_TOPOLOGY_POINT_LIST = VkPrimitiveTopology 0

-- No documentation found for Nested "VkPrimitiveTopology" "VK_PRIMITIVE_TOPOLOGY_LINE_LIST"
pattern VK_PRIMITIVE_TOPOLOGY_LINE_LIST :: VkPrimitiveTopology
pattern VK_PRIMITIVE_TOPOLOGY_LINE_LIST = VkPrimitiveTopology 1

-- No documentation found for Nested "VkPrimitiveTopology" "VK_PRIMITIVE_TOPOLOGY_LINE_STRIP"
pattern VK_PRIMITIVE_TOPOLOGY_LINE_STRIP :: VkPrimitiveTopology
pattern VK_PRIMITIVE_TOPOLOGY_LINE_STRIP = VkPrimitiveTopology 2

-- No documentation found for Nested "VkPrimitiveTopology" "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST"
pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST :: VkPrimitiveTopology
pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST = VkPrimitiveTopology 3

-- No documentation found for Nested "VkPrimitiveTopology" "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP"
pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP :: VkPrimitiveTopology
pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP = VkPrimitiveTopology 4

-- No documentation found for Nested "VkPrimitiveTopology" "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN"
pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN :: VkPrimitiveTopology
pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN = VkPrimitiveTopology 5

-- No documentation found for Nested "VkPrimitiveTopology" "VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY"
pattern VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY :: VkPrimitiveTopology
pattern VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY = VkPrimitiveTopology 6

-- No documentation found for Nested "VkPrimitiveTopology" "VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY"
pattern VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY :: VkPrimitiveTopology
pattern VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY = VkPrimitiveTopology 7

-- No documentation found for Nested "VkPrimitiveTopology" "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY"
pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY :: VkPrimitiveTopology
pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY = VkPrimitiveTopology 8

-- No documentation found for Nested "VkPrimitiveTopology" "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY"
pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY :: VkPrimitiveTopology
pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY = VkPrimitiveTopology 9

-- No documentation found for Nested "VkPrimitiveTopology" "VK_PRIMITIVE_TOPOLOGY_PATCH_LIST"
pattern VK_PRIMITIVE_TOPOLOGY_PATCH_LIST :: VkPrimitiveTopology
pattern VK_PRIMITIVE_TOPOLOGY_PATCH_LIST = VkPrimitiveTopology 10
-- ** VkStencilOp

-- | VkStencilOp - Stencil comparison function
--
-- = Description
-- #_description#
--
-- -   @VK_STENCIL_OP_KEEP@ keeps the current value.
--
-- -   @VK_STENCIL_OP_ZERO@ sets the value to 0.
--
-- -   @VK_STENCIL_OP_REPLACE@ sets the value to @reference@.
--
-- -   @VK_STENCIL_OP_INCREMENT_AND_CLAMP@ increments the current value and
--     clamps to the maximum representable unsigned value.
--
-- -   @VK_STENCIL_OP_DECREMENT_AND_CLAMP@ decrements the current value and
--     clamps to 0.
--
-- -   @VK_STENCIL_OP_INVERT@ bitwise-inverts the current value.
--
-- -   @VK_STENCIL_OP_INCREMENT_AND_WRAP@ increments the current value and
--     wraps to 0 when the maximum value would have been exceeded.
--
-- -   @VK_STENCIL_OP_DECREMENT_AND_WRAP@ decrements the current value and
--     wraps to the maximum possible value when the value would go below 0.
--
-- For purposes of increment and decrement, the stencil bits are considered
-- as an unsigned integer.
--
-- If the stencil test fails, the sample’s coverage bit is cleared in the
-- fragment. If there is no stencil framebuffer attachment, stencil
-- modification /cannot/ occur, and it is as if the stencil tests always
-- pass.
--
-- If the stencil test passes, the @writeMask@ member of the
-- 'VkStencilOpState' structures controls how the updated stencil value is
-- written to the stencil framebuffer attachment.
--
-- The least significant s bits of @writeMask@, where s is the number of
-- bits in the stencil framebuffer attachment, specify an integer mask.
-- Where a 1 appears in this mask, the corresponding bit in the stencil
-- value in the depth\/stencil attachment is written; where a 0 appears,
-- the bit is not written. The @writeMask@ value uses either the
-- front-facing or back-facing state based on the facingness of the
-- fragment. Fragments generated by front-facing primitives use the front
-- mask and fragments generated by back-facing primitives use the back
-- mask.
--
-- = See Also
-- #_see_also#
--
-- 'VkStencilOpState'
newtype VkStencilOp = VkStencilOp Int32
  deriving (Eq, Ord, Storable)

instance Show VkStencilOp where
  showsPrec _ VK_STENCIL_OP_KEEP = showString "VK_STENCIL_OP_KEEP"
  showsPrec _ VK_STENCIL_OP_ZERO = showString "VK_STENCIL_OP_ZERO"
  showsPrec _ VK_STENCIL_OP_REPLACE = showString "VK_STENCIL_OP_REPLACE"
  showsPrec _ VK_STENCIL_OP_INCREMENT_AND_CLAMP = showString "VK_STENCIL_OP_INCREMENT_AND_CLAMP"
  showsPrec _ VK_STENCIL_OP_DECREMENT_AND_CLAMP = showString "VK_STENCIL_OP_DECREMENT_AND_CLAMP"
  showsPrec _ VK_STENCIL_OP_INVERT = showString "VK_STENCIL_OP_INVERT"
  showsPrec _ VK_STENCIL_OP_INCREMENT_AND_WRAP = showString "VK_STENCIL_OP_INCREMENT_AND_WRAP"
  showsPrec _ VK_STENCIL_OP_DECREMENT_AND_WRAP = showString "VK_STENCIL_OP_DECREMENT_AND_WRAP"
  showsPrec p (VkStencilOp x) = showParen (p >= 11) (showString "VkStencilOp " . showsPrec 11 x)

instance Read VkStencilOp where
  readPrec = parens ( choose [ ("VK_STENCIL_OP_KEEP",                pure VK_STENCIL_OP_KEEP)
                             , ("VK_STENCIL_OP_ZERO",                pure VK_STENCIL_OP_ZERO)
                             , ("VK_STENCIL_OP_REPLACE",             pure VK_STENCIL_OP_REPLACE)
                             , ("VK_STENCIL_OP_INCREMENT_AND_CLAMP", pure VK_STENCIL_OP_INCREMENT_AND_CLAMP)
                             , ("VK_STENCIL_OP_DECREMENT_AND_CLAMP", pure VK_STENCIL_OP_DECREMENT_AND_CLAMP)
                             , ("VK_STENCIL_OP_INVERT",              pure VK_STENCIL_OP_INVERT)
                             , ("VK_STENCIL_OP_INCREMENT_AND_WRAP",  pure VK_STENCIL_OP_INCREMENT_AND_WRAP)
                             , ("VK_STENCIL_OP_DECREMENT_AND_WRAP",  pure VK_STENCIL_OP_DECREMENT_AND_WRAP)
                             ] +++
                      prec 10 (do
                        expectP (Ident "VkStencilOp")
                        v <- step readPrec
                        pure (VkStencilOp v)
                        )
                    )

-- No documentation found for Nested "VkStencilOp" "VK_STENCIL_OP_KEEP"
pattern VK_STENCIL_OP_KEEP :: VkStencilOp
pattern VK_STENCIL_OP_KEEP = VkStencilOp 0

-- No documentation found for Nested "VkStencilOp" "VK_STENCIL_OP_ZERO"
pattern VK_STENCIL_OP_ZERO :: VkStencilOp
pattern VK_STENCIL_OP_ZERO = VkStencilOp 1

-- No documentation found for Nested "VkStencilOp" "VK_STENCIL_OP_REPLACE"
pattern VK_STENCIL_OP_REPLACE :: VkStencilOp
pattern VK_STENCIL_OP_REPLACE = VkStencilOp 2

-- No documentation found for Nested "VkStencilOp" "VK_STENCIL_OP_INCREMENT_AND_CLAMP"
pattern VK_STENCIL_OP_INCREMENT_AND_CLAMP :: VkStencilOp
pattern VK_STENCIL_OP_INCREMENT_AND_CLAMP = VkStencilOp 3

-- No documentation found for Nested "VkStencilOp" "VK_STENCIL_OP_DECREMENT_AND_CLAMP"
pattern VK_STENCIL_OP_DECREMENT_AND_CLAMP :: VkStencilOp
pattern VK_STENCIL_OP_DECREMENT_AND_CLAMP = VkStencilOp 4

-- No documentation found for Nested "VkStencilOp" "VK_STENCIL_OP_INVERT"
pattern VK_STENCIL_OP_INVERT :: VkStencilOp
pattern VK_STENCIL_OP_INVERT = VkStencilOp 5

-- No documentation found for Nested "VkStencilOp" "VK_STENCIL_OP_INCREMENT_AND_WRAP"
pattern VK_STENCIL_OP_INCREMENT_AND_WRAP :: VkStencilOp
pattern VK_STENCIL_OP_INCREMENT_AND_WRAP = VkStencilOp 6

-- No documentation found for Nested "VkStencilOp" "VK_STENCIL_OP_DECREMENT_AND_WRAP"
pattern VK_STENCIL_OP_DECREMENT_AND_WRAP :: VkStencilOp
pattern VK_STENCIL_OP_DECREMENT_AND_WRAP = VkStencilOp 7
-- ** VkVertexInputRate

-- | VkVertexInputRate - Specify rate at which vertex attributes are pulled
-- from buffers
--
-- = See Also
-- #_see_also#
--
-- 'VkVertexInputBindingDescription'
newtype VkVertexInputRate = VkVertexInputRate Int32
  deriving (Eq, Ord, Storable)

instance Show VkVertexInputRate where
  showsPrec _ VK_VERTEX_INPUT_RATE_VERTEX = showString "VK_VERTEX_INPUT_RATE_VERTEX"
  showsPrec _ VK_VERTEX_INPUT_RATE_INSTANCE = showString "VK_VERTEX_INPUT_RATE_INSTANCE"
  showsPrec p (VkVertexInputRate x) = showParen (p >= 11) (showString "VkVertexInputRate " . showsPrec 11 x)

instance Read VkVertexInputRate where
  readPrec = parens ( choose [ ("VK_VERTEX_INPUT_RATE_VERTEX",   pure VK_VERTEX_INPUT_RATE_VERTEX)
                             , ("VK_VERTEX_INPUT_RATE_INSTANCE", pure VK_VERTEX_INPUT_RATE_INSTANCE)
                             ] +++
                      prec 10 (do
                        expectP (Ident "VkVertexInputRate")
                        v <- step readPrec
                        pure (VkVertexInputRate v)
                        )
                    )

-- | @VK_VERTEX_INPUT_RATE_VERTEX@ specifies that vertex attribute addressing
-- is a function of the vertex index.
pattern VK_VERTEX_INPUT_RATE_VERTEX :: VkVertexInputRate
pattern VK_VERTEX_INPUT_RATE_VERTEX = VkVertexInputRate 0

-- | @VK_VERTEX_INPUT_RATE_INSTANCE@ specifies that vertex attribute
-- addressing is a function of the instance index.
pattern VK_VERTEX_INPUT_RATE_INSTANCE :: VkVertexInputRate
pattern VK_VERTEX_INPUT_RATE_INSTANCE = VkVertexInputRate 1
-- ** VkPipelineDepthStencilStateCreateFlags

-- | VkPipelineDepthStencilStateCreateFlags - Reserved for future use
--
-- = Description
-- #_description#
--
-- @VkPipelineDepthStencilStateCreateFlags@ is a bitmask type for setting a
-- mask, but is currently reserved for future use.
--
-- = See Also
-- #_see_also#
--
-- 'VkPipelineDepthStencilStateCreateInfo'
newtype VkPipelineDepthStencilStateCreateFlags = VkPipelineDepthStencilStateCreateFlags VkFlags
  deriving (Eq, Ord, Storable, Bits, FiniteBits)

instance Show VkPipelineDepthStencilStateCreateFlags where
  
  showsPrec p (VkPipelineDepthStencilStateCreateFlags x) = showParen (p >= 11) (showString "VkPipelineDepthStencilStateCreateFlags " . showsPrec 11 x)

instance Read VkPipelineDepthStencilStateCreateFlags where
  readPrec = parens ( choose [ 
                             ] +++
                      prec 10 (do
                        expectP (Ident "VkPipelineDepthStencilStateCreateFlags")
                        v <- step readPrec
                        pure (VkPipelineDepthStencilStateCreateFlags v)
                        )
                    )


-- ** VkPipelineDynamicStateCreateFlags

-- | VkPipelineDynamicStateCreateFlags - Reserved for future use
--
-- = Description
-- #_description#
--
-- @VkPipelineDynamicStateCreateFlags@ is a bitmask type for setting a
-- mask, but is currently reserved for future use.
--
-- = See Also
-- #_see_also#
--
-- 'VkPipelineDynamicStateCreateInfo'
newtype VkPipelineDynamicStateCreateFlags = VkPipelineDynamicStateCreateFlags VkFlags
  deriving (Eq, Ord, Storable, Bits, FiniteBits)

instance Show VkPipelineDynamicStateCreateFlags where
  
  showsPrec p (VkPipelineDynamicStateCreateFlags x) = showParen (p >= 11) (showString "VkPipelineDynamicStateCreateFlags " . showsPrec 11 x)

instance Read VkPipelineDynamicStateCreateFlags where
  readPrec = parens ( choose [ 
                             ] +++
                      prec 10 (do
                        expectP (Ident "VkPipelineDynamicStateCreateFlags")
                        v <- step readPrec
                        pure (VkPipelineDynamicStateCreateFlags v)
                        )
                    )


-- ** VkPipelineColorBlendStateCreateFlags

-- | VkPipelineColorBlendStateCreateFlags - Reserved for future use
--
-- = Description
-- #_description#
--
-- @VkPipelineColorBlendStateCreateFlags@ is a bitmask type for setting a
-- mask, but is currently reserved for future use.
--
-- = See Also
-- #_see_also#
--
-- 'VkPipelineColorBlendStateCreateInfo'
newtype VkPipelineColorBlendStateCreateFlags = VkPipelineColorBlendStateCreateFlags VkFlags
  deriving (Eq, Ord, Storable, Bits, FiniteBits)

instance Show VkPipelineColorBlendStateCreateFlags where
  
  showsPrec p (VkPipelineColorBlendStateCreateFlags x) = showParen (p >= 11) (showString "VkPipelineColorBlendStateCreateFlags " . showsPrec 11 x)

instance Read VkPipelineColorBlendStateCreateFlags where
  readPrec = parens ( choose [ 
                             ] +++
                      prec 10 (do
                        expectP (Ident "VkPipelineColorBlendStateCreateFlags")
                        v <- step readPrec
                        pure (VkPipelineColorBlendStateCreateFlags v)
                        )
                    )


-- ** VkPipelineMultisampleStateCreateFlags

-- | VkPipelineMultisampleStateCreateFlags - Reserved for future use
--
-- = Description
-- #_description#
--
-- @VkPipelineMultisampleStateCreateFlags@ is a bitmask type for setting a
-- mask, but is currently reserved for future use.
--
-- = See Also
-- #_see_also#
--
-- 'VkPipelineMultisampleStateCreateInfo'
newtype VkPipelineMultisampleStateCreateFlags = VkPipelineMultisampleStateCreateFlags VkFlags
  deriving (Eq, Ord, Storable, Bits, FiniteBits)

instance Show VkPipelineMultisampleStateCreateFlags where
  
  showsPrec p (VkPipelineMultisampleStateCreateFlags x) = showParen (p >= 11) (showString "VkPipelineMultisampleStateCreateFlags " . showsPrec 11 x)

instance Read VkPipelineMultisampleStateCreateFlags where
  readPrec = parens ( choose [ 
                             ] +++
                      prec 10 (do
                        expectP (Ident "VkPipelineMultisampleStateCreateFlags")
                        v <- step readPrec
                        pure (VkPipelineMultisampleStateCreateFlags v)
                        )
                    )


-- ** VkPipelineRasterizationStateCreateFlags

-- | VkPipelineRasterizationStateCreateFlags - Reserved for future use
--
-- = Description
-- #_description#
--
-- @VkPipelineRasterizationStateCreateFlags@ is a bitmask type for setting
-- a mask, but is currently reserved for future use.
--
-- = See Also
-- #_see_also#
--
-- 'VkPipelineRasterizationStateCreateInfo'
newtype VkPipelineRasterizationStateCreateFlags = VkPipelineRasterizationStateCreateFlags VkFlags
  deriving (Eq, Ord, Storable, Bits, FiniteBits)

instance Show VkPipelineRasterizationStateCreateFlags where
  
  showsPrec p (VkPipelineRasterizationStateCreateFlags x) = showParen (p >= 11) (showString "VkPipelineRasterizationStateCreateFlags " . showsPrec 11 x)

instance Read VkPipelineRasterizationStateCreateFlags where
  readPrec = parens ( choose [ 
                             ] +++
                      prec 10 (do
                        expectP (Ident "VkPipelineRasterizationStateCreateFlags")
                        v <- step readPrec
                        pure (VkPipelineRasterizationStateCreateFlags v)
                        )
                    )


-- ** VkPipelineViewportStateCreateFlags

-- | VkPipelineViewportStateCreateFlags - Reserved for future use
--
-- = Description
-- #_description#
--
-- @VkPipelineViewportStateCreateFlags@ is a bitmask type for setting a
-- mask, but is currently reserved for future use.
--
-- = See Also
-- #_see_also#
--
-- 'VkPipelineViewportStateCreateInfo'
newtype VkPipelineViewportStateCreateFlags = VkPipelineViewportStateCreateFlags VkFlags
  deriving (Eq, Ord, Storable, Bits, FiniteBits)

instance Show VkPipelineViewportStateCreateFlags where
  
  showsPrec p (VkPipelineViewportStateCreateFlags x) = showParen (p >= 11) (showString "VkPipelineViewportStateCreateFlags " . showsPrec 11 x)

instance Read VkPipelineViewportStateCreateFlags where
  readPrec = parens ( choose [ 
                             ] +++
                      prec 10 (do
                        expectP (Ident "VkPipelineViewportStateCreateFlags")
                        v <- step readPrec
                        pure (VkPipelineViewportStateCreateFlags v)
                        )
                    )


-- ** VkPipelineTessellationStateCreateFlags

-- | VkPipelineTessellationStateCreateFlags - Reserved for future use
--
-- = Description
-- #_description#
--
-- @VkPipelineTessellationStateCreateFlags@ is a bitmask type for setting a
-- mask, but is currently reserved for future use.
--
-- = See Also
-- #_see_also#
--
-- 'VkPipelineTessellationStateCreateInfo'
newtype VkPipelineTessellationStateCreateFlags = VkPipelineTessellationStateCreateFlags VkFlags
  deriving (Eq, Ord, Storable, Bits, FiniteBits)

instance Show VkPipelineTessellationStateCreateFlags where
  
  showsPrec p (VkPipelineTessellationStateCreateFlags x) = showParen (p >= 11) (showString "VkPipelineTessellationStateCreateFlags " . showsPrec 11 x)

instance Read VkPipelineTessellationStateCreateFlags where
  readPrec = parens ( choose [ 
                             ] +++
                      prec 10 (do
                        expectP (Ident "VkPipelineTessellationStateCreateFlags")
                        v <- step readPrec
                        pure (VkPipelineTessellationStateCreateFlags v)
                        )
                    )


-- ** VkPipelineInputAssemblyStateCreateFlags

-- | VkPipelineInputAssemblyStateCreateFlags - Reserved for future use
--
-- = Description
-- #_description#
--
-- @VkPipelineInputAssemblyStateCreateFlags@ is a bitmask type for setting
-- a mask, but is currently reserved for future use.
--
-- = See Also
-- #_see_also#
--
-- 'VkPipelineInputAssemblyStateCreateInfo'
newtype VkPipelineInputAssemblyStateCreateFlags = VkPipelineInputAssemblyStateCreateFlags VkFlags
  deriving (Eq, Ord, Storable, Bits, FiniteBits)

instance Show VkPipelineInputAssemblyStateCreateFlags where
  
  showsPrec p (VkPipelineInputAssemblyStateCreateFlags x) = showParen (p >= 11) (showString "VkPipelineInputAssemblyStateCreateFlags " . showsPrec 11 x)

instance Read VkPipelineInputAssemblyStateCreateFlags where
  readPrec = parens ( choose [ 
                             ] +++
                      prec 10 (do
                        expectP (Ident "VkPipelineInputAssemblyStateCreateFlags")
                        v <- step readPrec
                        pure (VkPipelineInputAssemblyStateCreateFlags v)
                        )
                    )


-- ** VkPipelineVertexInputStateCreateFlags

-- | VkPipelineVertexInputStateCreateFlags - Reserved for future use
--
-- = Description
-- #_description#
--
-- @VkPipelineVertexInputStateCreateFlags@ is a bitmask type for setting a
-- mask, but is currently reserved for future use.
--
-- = See Also
-- #_see_also#
--
-- 'VkPipelineVertexInputStateCreateInfo'
newtype VkPipelineVertexInputStateCreateFlags = VkPipelineVertexInputStateCreateFlags VkFlags
  deriving (Eq, Ord, Storable, Bits, FiniteBits)

instance Show VkPipelineVertexInputStateCreateFlags where
  
  showsPrec p (VkPipelineVertexInputStateCreateFlags x) = showParen (p >= 11) (showString "VkPipelineVertexInputStateCreateFlags " . showsPrec 11 x)

instance Read VkPipelineVertexInputStateCreateFlags where
  readPrec = parens ( choose [ 
                             ] +++
                      prec 10 (do
                        expectP (Ident "VkPipelineVertexInputStateCreateFlags")
                        v <- step readPrec
                        pure (VkPipelineVertexInputStateCreateFlags v)
                        )
                    )


-- ** VkPipelineShaderStageCreateFlags

-- | VkPipelineShaderStageCreateFlags - Reserved for future use
--
-- = Description
-- #_description#
--
-- @VkPipelineShaderStageCreateFlags@ is a bitmask type for setting a mask,
-- but is currently reserved for future use.
--
-- = See Also
-- #_see_also#
--
-- 'VkPipelineShaderStageCreateInfo'
newtype VkPipelineShaderStageCreateFlags = VkPipelineShaderStageCreateFlags VkFlags
  deriving (Eq, Ord, Storable, Bits, FiniteBits)

instance Show VkPipelineShaderStageCreateFlags where
  
  showsPrec p (VkPipelineShaderStageCreateFlags x) = showParen (p >= 11) (showString "VkPipelineShaderStageCreateFlags " . showsPrec 11 x)

instance Read VkPipelineShaderStageCreateFlags where
  readPrec = parens ( choose [ 
                             ] +++
                      prec 10 (do
                        expectP (Ident "VkPipelineShaderStageCreateFlags")
                        v <- step readPrec
                        pure (VkPipelineShaderStageCreateFlags v)
                        )
                    )


-- ** VkShaderStageFlagBits

-- | VkShaderStageFlagBits - Bitmask specifying a pipeline stage
--
-- = See Also
-- #_see_also#
--
-- 'VkPipelineShaderStageCreateInfo',
-- 'Graphics.Vulkan.Core10.PipelineLayout.VkShaderStageFlags',
-- 'Graphics.Vulkan.Extensions.VK_AMD_shader_info.vkGetShaderInfoAMD'
newtype VkShaderStageFlagBits = VkShaderStageFlagBits VkFlags
  deriving (Eq, Ord, Storable, Bits, FiniteBits)

instance Show VkShaderStageFlagBits where
  showsPrec _ VK_SHADER_STAGE_VERTEX_BIT = showString "VK_SHADER_STAGE_VERTEX_BIT"
  showsPrec _ VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT = showString "VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT"
  showsPrec _ VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT = showString "VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT"
  showsPrec _ VK_SHADER_STAGE_GEOMETRY_BIT = showString "VK_SHADER_STAGE_GEOMETRY_BIT"
  showsPrec _ VK_SHADER_STAGE_FRAGMENT_BIT = showString "VK_SHADER_STAGE_FRAGMENT_BIT"
  showsPrec _ VK_SHADER_STAGE_COMPUTE_BIT = showString "VK_SHADER_STAGE_COMPUTE_BIT"
  showsPrec _ VK_SHADER_STAGE_ALL_GRAPHICS = showString "VK_SHADER_STAGE_ALL_GRAPHICS"
  showsPrec _ VK_SHADER_STAGE_ALL = showString "VK_SHADER_STAGE_ALL"
  showsPrec p (VkShaderStageFlagBits x) = showParen (p >= 11) (showString "VkShaderStageFlagBits " . showsPrec 11 x)

instance Read VkShaderStageFlagBits where
  readPrec = parens ( choose [ ("VK_SHADER_STAGE_VERTEX_BIT",                  pure VK_SHADER_STAGE_VERTEX_BIT)
                             , ("VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT",    pure VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT)
                             , ("VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT", pure VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT)
                             , ("VK_SHADER_STAGE_GEOMETRY_BIT",                pure VK_SHADER_STAGE_GEOMETRY_BIT)
                             , ("VK_SHADER_STAGE_FRAGMENT_BIT",                pure VK_SHADER_STAGE_FRAGMENT_BIT)
                             , ("VK_SHADER_STAGE_COMPUTE_BIT",                 pure VK_SHADER_STAGE_COMPUTE_BIT)
                             , ("VK_SHADER_STAGE_ALL_GRAPHICS",                pure VK_SHADER_STAGE_ALL_GRAPHICS)
                             , ("VK_SHADER_STAGE_ALL",                         pure VK_SHADER_STAGE_ALL)
                             ] +++
                      prec 10 (do
                        expectP (Ident "VkShaderStageFlagBits")
                        v <- step readPrec
                        pure (VkShaderStageFlagBits v)
                        )
                    )

-- | @VK_SHADER_STAGE_VERTEX_BIT@ specifies the vertex stage.
pattern VK_SHADER_STAGE_VERTEX_BIT :: VkShaderStageFlagBits
pattern VK_SHADER_STAGE_VERTEX_BIT = VkShaderStageFlagBits 0x00000001

-- | @VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT@ specifies the tessellation
-- control stage.
pattern VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT :: VkShaderStageFlagBits
pattern VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT = VkShaderStageFlagBits 0x00000002

-- | @VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT@ specifies the tessellation
-- evaluation stage.
pattern VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT :: VkShaderStageFlagBits
pattern VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT = VkShaderStageFlagBits 0x00000004

-- | @VK_SHADER_STAGE_GEOMETRY_BIT@ specifies the geometry stage.
pattern VK_SHADER_STAGE_GEOMETRY_BIT :: VkShaderStageFlagBits
pattern VK_SHADER_STAGE_GEOMETRY_BIT = VkShaderStageFlagBits 0x00000008

-- | @VK_SHADER_STAGE_FRAGMENT_BIT@ specifies the fragment stage.
pattern VK_SHADER_STAGE_FRAGMENT_BIT :: VkShaderStageFlagBits
pattern VK_SHADER_STAGE_FRAGMENT_BIT = VkShaderStageFlagBits 0x00000010

-- | @VK_SHADER_STAGE_COMPUTE_BIT@ specifies the compute stage.
pattern VK_SHADER_STAGE_COMPUTE_BIT :: VkShaderStageFlagBits
pattern VK_SHADER_STAGE_COMPUTE_BIT = VkShaderStageFlagBits 0x00000020

-- | @VK_SHADER_STAGE_ALL_GRAPHICS@ is a combination of bits used as
-- shorthand to specify all graphics stages defined above (excluding the
-- compute stage).
pattern VK_SHADER_STAGE_ALL_GRAPHICS :: VkShaderStageFlagBits
pattern VK_SHADER_STAGE_ALL_GRAPHICS = VkShaderStageFlagBits 0x0000001f

-- | @VK_SHADER_STAGE_ALL@ is a combination of bits used as shorthand to
-- specify all shader stages supported by the device, including all
-- additional stages which are introduced by extensions.
pattern VK_SHADER_STAGE_ALL :: VkShaderStageFlagBits
pattern VK_SHADER_STAGE_ALL = VkShaderStageFlagBits 0x7fffffff
-- ** VkPipelineCreateFlagBits

-- | VkPipelineCreateFlagBits - Bitmask controlling how a pipeline is created
--
-- = Description
-- #_description#
--
-- -   @VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT@ specifies that the
--     created pipeline will not be optimized. Using this flag /may/ reduce
--     the time taken to create the pipeline.
--
-- -   @VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT@ specifies that the
--     pipeline to be created is allowed to be the parent of a pipeline
--     that will be created in a subsequent call to
--     'vkCreateGraphicsPipelines' or 'vkCreateComputePipelines'.
--
-- -   @VK_PIPELINE_CREATE_DERIVATIVE_BIT@ specifies that the pipeline to
--     be created will be a child of a previously created parent pipeline.
--
-- It is valid to set both @VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT@ and
-- @VK_PIPELINE_CREATE_DERIVATIVE_BIT@. This allows a pipeline to be both a
-- parent and possibly a child in a pipeline hierarchy. See
-- <{html_spec_relative}#pipelines-pipeline-derivatives Pipeline Derivatives>
-- for more information.
--
-- = See Also
-- #_see_also#
--
-- 'VkPipelineCreateFlags'
newtype VkPipelineCreateFlagBits = VkPipelineCreateFlagBits VkFlags
  deriving (Eq, Ord, Storable, Bits, FiniteBits)

instance Show VkPipelineCreateFlagBits where
  showsPrec _ VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT = showString "VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT"
  showsPrec _ VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT = showString "VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT"
  showsPrec _ VK_PIPELINE_CREATE_DERIVATIVE_BIT = showString "VK_PIPELINE_CREATE_DERIVATIVE_BIT"
  -- The following values are from extensions, the patterns themselves are exported from the extension modules
  showsPrec _ (VkPipelineCreateFlagBits 0x00000008) = showString "VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT"
  showsPrec _ (VkPipelineCreateFlagBits 0x00000010) = showString "VK_PIPELINE_CREATE_DISPATCH_BASE"
  showsPrec p (VkPipelineCreateFlagBits x) = showParen (p >= 11) (showString "VkPipelineCreateFlagBits " . showsPrec 11 x)

instance Read VkPipelineCreateFlagBits where
  readPrec = parens ( choose [ ("VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT", pure VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT)
                             , ("VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT",    pure VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT)
                             , ("VK_PIPELINE_CREATE_DERIVATIVE_BIT",           pure VK_PIPELINE_CREATE_DERIVATIVE_BIT)
                             , -- The following values are from extensions, the patterns themselves are exported from the extension modules
                               ("VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT", pure (VkPipelineCreateFlagBits 0x00000008))
                             , ("VK_PIPELINE_CREATE_DISPATCH_BASE",                    pure (VkPipelineCreateFlagBits 0x00000010))
                             ] +++
                      prec 10 (do
                        expectP (Ident "VkPipelineCreateFlagBits")
                        v <- step readPrec
                        pure (VkPipelineCreateFlagBits v)
                        )
                    )

-- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT"
pattern VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT :: VkPipelineCreateFlagBits
pattern VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT = VkPipelineCreateFlagBits 0x00000001

-- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT"
pattern VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT :: VkPipelineCreateFlagBits
pattern VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT = VkPipelineCreateFlagBits 0x00000002

-- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_DERIVATIVE_BIT"
pattern VK_PIPELINE_CREATE_DERIVATIVE_BIT :: VkPipelineCreateFlagBits
pattern VK_PIPELINE_CREATE_DERIVATIVE_BIT = VkPipelineCreateFlagBits 0x00000004
-- ** VkColorComponentFlagBits

-- | VkColorComponentFlagBits - Bitmask controlling which components are
-- written to the framebuffer
--
-- = Description
-- #_description#
--
-- -   @VK_COLOR_COMPONENT_R_BIT@ specifies that the R value is written to
--     the color attachment for the appropriate sample. Otherwise, the
--     value in memory is unmodified.
--
-- -   @VK_COLOR_COMPONENT_G_BIT@ specifies that the G value is written to
--     the color attachment for the appropriate sample. Otherwise, the
--     value in memory is unmodified.
--
-- -   @VK_COLOR_COMPONENT_B_BIT@ specifies that the B value is written to
--     the color attachment for the appropriate sample. Otherwise, the
--     value in memory is unmodified.
--
-- -   @VK_COLOR_COMPONENT_A_BIT@ specifies that the A value is written to
--     the color attachment for the appropriate sample. Otherwise, the
--     value in memory is unmodified.
--
-- The color write mask operation is applied regardless of whether blending
-- is enabled.
--
-- = See Also
-- #_see_also#
--
-- 'VkColorComponentFlags'
newtype VkColorComponentFlagBits = VkColorComponentFlagBits VkFlags
  deriving (Eq, Ord, Storable, Bits, FiniteBits)

instance Show VkColorComponentFlagBits where
  showsPrec _ VK_COLOR_COMPONENT_R_BIT = showString "VK_COLOR_COMPONENT_R_BIT"
  showsPrec _ VK_COLOR_COMPONENT_G_BIT = showString "VK_COLOR_COMPONENT_G_BIT"
  showsPrec _ VK_COLOR_COMPONENT_B_BIT = showString "VK_COLOR_COMPONENT_B_BIT"
  showsPrec _ VK_COLOR_COMPONENT_A_BIT = showString "VK_COLOR_COMPONENT_A_BIT"
  showsPrec p (VkColorComponentFlagBits x) = showParen (p >= 11) (showString "VkColorComponentFlagBits " . showsPrec 11 x)

instance Read VkColorComponentFlagBits where
  readPrec = parens ( choose [ ("VK_COLOR_COMPONENT_R_BIT", pure VK_COLOR_COMPONENT_R_BIT)
                             , ("VK_COLOR_COMPONENT_G_BIT", pure VK_COLOR_COMPONENT_G_BIT)
                             , ("VK_COLOR_COMPONENT_B_BIT", pure VK_COLOR_COMPONENT_B_BIT)
                             , ("VK_COLOR_COMPONENT_A_BIT", pure VK_COLOR_COMPONENT_A_BIT)
                             ] +++
                      prec 10 (do
                        expectP (Ident "VkColorComponentFlagBits")
                        v <- step readPrec
                        pure (VkColorComponentFlagBits v)
                        )
                    )

-- No documentation found for Nested "VkColorComponentFlagBits" "VK_COLOR_COMPONENT_R_BIT"
pattern VK_COLOR_COMPONENT_R_BIT :: VkColorComponentFlagBits
pattern VK_COLOR_COMPONENT_R_BIT = VkColorComponentFlagBits 0x00000001

-- No documentation found for Nested "VkColorComponentFlagBits" "VK_COLOR_COMPONENT_G_BIT"
pattern VK_COLOR_COMPONENT_G_BIT :: VkColorComponentFlagBits
pattern VK_COLOR_COMPONENT_G_BIT = VkColorComponentFlagBits 0x00000002

-- No documentation found for Nested "VkColorComponentFlagBits" "VK_COLOR_COMPONENT_B_BIT"
pattern VK_COLOR_COMPONENT_B_BIT :: VkColorComponentFlagBits
pattern VK_COLOR_COMPONENT_B_BIT = VkColorComponentFlagBits 0x00000004

-- No documentation found for Nested "VkColorComponentFlagBits" "VK_COLOR_COMPONENT_A_BIT"
pattern VK_COLOR_COMPONENT_A_BIT :: VkColorComponentFlagBits
pattern VK_COLOR_COMPONENT_A_BIT = VkColorComponentFlagBits 0x00000008
-- ** VkCullModeFlagBits

-- | VkCullModeFlagBits - Bitmask controlling triangle culling
--
-- = Description
-- #_description#
--
-- -   @VK_CULL_MODE_NONE@ specifies that no triangles are discarded
--
-- -   @VK_CULL_MODE_FRONT_BIT@ specifies that front-facing triangles are
--     discarded
--
-- -   @VK_CULL_MODE_BACK_BIT@ specifies that back-facing triangles are
--     discarded
--
-- -   @VK_CULL_MODE_FRONT_AND_BACK@ specifies that all triangles are
--     discarded.
--
-- Following culling, fragments are produced for any triangles which have
-- not been discarded.
--
-- = See Also
-- #_see_also#
--
-- 'VkCullModeFlags'
newtype VkCullModeFlagBits = VkCullModeFlagBits VkFlags
  deriving (Eq, Ord, Storable, Bits, FiniteBits)

instance Show VkCullModeFlagBits where
  showsPrec _ VK_CULL_MODE_FRONT_BIT = showString "VK_CULL_MODE_FRONT_BIT"
  showsPrec _ VK_CULL_MODE_BACK_BIT = showString "VK_CULL_MODE_BACK_BIT"
  showsPrec _ VK_CULL_MODE_NONE = showString "VK_CULL_MODE_NONE"
  showsPrec _ VK_CULL_MODE_FRONT_AND_BACK = showString "VK_CULL_MODE_FRONT_AND_BACK"
  showsPrec p (VkCullModeFlagBits x) = showParen (p >= 11) (showString "VkCullModeFlagBits " . showsPrec 11 x)

instance Read VkCullModeFlagBits where
  readPrec = parens ( choose [ ("VK_CULL_MODE_FRONT_BIT",      pure VK_CULL_MODE_FRONT_BIT)
                             , ("VK_CULL_MODE_BACK_BIT",       pure VK_CULL_MODE_BACK_BIT)
                             , ("VK_CULL_MODE_NONE",           pure VK_CULL_MODE_NONE)
                             , ("VK_CULL_MODE_FRONT_AND_BACK", pure VK_CULL_MODE_FRONT_AND_BACK)
                             ] +++
                      prec 10 (do
                        expectP (Ident "VkCullModeFlagBits")
                        v <- step readPrec
                        pure (VkCullModeFlagBits v)
                        )
                    )

-- No documentation found for Nested "VkCullModeFlagBits" "VK_CULL_MODE_FRONT_BIT"
pattern VK_CULL_MODE_FRONT_BIT :: VkCullModeFlagBits
pattern VK_CULL_MODE_FRONT_BIT = VkCullModeFlagBits 0x00000001

-- No documentation found for Nested "VkCullModeFlagBits" "VK_CULL_MODE_BACK_BIT"
pattern VK_CULL_MODE_BACK_BIT :: VkCullModeFlagBits
pattern VK_CULL_MODE_BACK_BIT = VkCullModeFlagBits 0x00000002

-- No documentation found for Nested "VkCullModeFlagBits" "VK_CULL_MODE_NONE"
pattern VK_CULL_MODE_NONE :: VkCullModeFlagBits
pattern VK_CULL_MODE_NONE = VkCullModeFlagBits 0x00000000

-- No documentation found for Nested "VkCullModeFlagBits" "VK_CULL_MODE_FRONT_AND_BACK"
pattern VK_CULL_MODE_FRONT_AND_BACK :: VkCullModeFlagBits
pattern VK_CULL_MODE_FRONT_AND_BACK = VkCullModeFlagBits 0x00000003
-- | Dummy data to tag the 'Ptr' with
data VkPipeline_T
-- | VkPipeline - Opaque handle to a pipeline object
--
-- = Description
-- #_description#
--
-- = See Also
-- #_see_also#
--
-- 'VkComputePipelineCreateInfo', 'VkGraphicsPipelineCreateInfo',
-- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.VkObjectTablePipelineEntryNVX',
-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdBindPipeline',
-- 'vkCreateComputePipelines', 'vkCreateGraphicsPipelines',
-- 'vkDestroyPipeline',
-- 'Graphics.Vulkan.Extensions.VK_AMD_shader_info.vkGetShaderInfoAMD'
type VkPipeline = Ptr VkPipeline_T
-- | Dummy data to tag the 'Ptr' with
data VkPipelineLayout_T
-- | VkPipelineLayout - Opaque handle to a pipeline layout object
--
-- = Description
-- #_description#
--
-- = See Also
-- #_see_also#
--
-- 'VkComputePipelineCreateInfo',
-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_descriptor_update_template.VkDescriptorUpdateTemplateCreateInfo',
-- 'VkGraphicsPipelineCreateInfo',
-- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.VkObjectTableDescriptorSetEntryNVX',
-- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.VkObjectTablePushConstantEntryNVX',
-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdBindDescriptorSets',
-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdPushConstants',
-- 'Graphics.Vulkan.Extensions.VK_KHR_push_descriptor.vkCmdPushDescriptorSetKHR',
-- 'Graphics.Vulkan.Extensions.VK_KHR_push_descriptor.vkCmdPushDescriptorSetWithTemplateKHR',
-- 'Graphics.Vulkan.Core10.PipelineLayout.vkCreatePipelineLayout',
-- 'Graphics.Vulkan.Core10.PipelineLayout.vkDestroyPipelineLayout'
type VkPipelineLayout = Ptr VkPipelineLayout_T
-- | Dummy data to tag the 'Ptr' with
data VkRenderPass_T
-- | VkRenderPass - Opaque handle to a render pass object
--
-- = Description
-- #_description#
--
-- = See Also
-- #_see_also#
--
-- 'Graphics.Vulkan.Core10.CommandBuffer.VkCommandBufferInheritanceInfo',
-- 'Graphics.Vulkan.Core10.Pass.VkFramebufferCreateInfo',
-- 'VkGraphicsPipelineCreateInfo',
-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.VkRenderPassBeginInfo',
-- 'Graphics.Vulkan.Core10.Pass.vkCreateRenderPass',
-- 'Graphics.Vulkan.Core10.Pass.vkDestroyRenderPass',
-- 'Graphics.Vulkan.Core10.Pass.vkGetRenderAreaGranularity'
type VkRenderPass = Ptr VkRenderPass_T
-- | vkCreateGraphicsPipelines - Create graphics pipelines
--
-- = Parameters
-- #_parameters#
--
-- -   @device@ is the logical device that creates the graphics pipelines.
--
-- -   @pipelineCache@ is either
--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', indicating that
--     pipeline caching is disabled; or the handle of a valid
--     <{html_spec_relative}#pipelines-cache pipeline cache> object, in
--     which case use of that cache is enabled for the duration of the
--     command.
--
-- -   @createInfoCount@ is the length of the @pCreateInfos@ and
--     @pPipelines@ arrays.
--
-- -   @pCreateInfos@ is an array of @VkGraphicsPipelineCreateInfo@
--     structures.
--
-- -   @pAllocator@ controls host memory allocation as described in the
--     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
--
-- -   @pPipelines@ is a pointer to an array in which the resulting
--     graphics pipeline objects are returned.
--
-- = Description
-- #_description#
--
-- The 'VkGraphicsPipelineCreateInfo' structure includes an array of shader
-- create info structures containing all the desired active shader stages,
-- as well as creation info to define all relevant fixed-function stages,
-- and a pipeline layout.
--
-- == Valid Usage
--
-- -   If the @flags@ member of any element of @pCreateInfos@ contains the
--     @VK_PIPELINE_CREATE_DERIVATIVE_BIT@ flag, and the
--     @basePipelineIndex@ member of that same element is not @-1@,
--     @basePipelineIndex@ /must/ be less than the index into
--     @pCreateInfos@ that corresponds to that element
--
-- -   If the @flags@ member of any element of @pCreateInfos@ contains the
--     @VK_PIPELINE_CREATE_DERIVATIVE_BIT@ flag, the base pipeline /must/
--     have been created with the
--     @VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT@ flag set
--
-- == Valid Usage (Implicit)
--
-- -   @device@ /must/ be a valid @VkDevice@ handle
--
-- -   If @pipelineCache@ is not
--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', @pipelineCache@
--     /must/ be a valid @VkPipelineCache@ handle
--
-- -   @pCreateInfos@ /must/ be a valid pointer to an array of
--     @createInfoCount@ valid @VkGraphicsPipelineCreateInfo@ structures
--
-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
--     pointer to a valid @VkAllocationCallbacks@ structure
--
-- -   @pPipelines@ /must/ be a valid pointer to an array of
--     @createInfoCount@ @VkPipeline@ handles
--
-- -   @createInfoCount@ /must/ be greater than @0@
--
-- -   If @pipelineCache@ is a valid handle, it /must/ have been created,
--     allocated, or retrieved from @device@
--
-- == Return Codes
--
-- [<#fundamentals-successcodes Success>]
--     -   @VK_SUCCESS@
--
-- [<#fundamentals-errorcodes Failure>]
--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
--
--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
--
--     -   @VK_ERROR_INVALID_SHADER_NV@
--
-- = See Also
-- #_see_also#
--
-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
-- 'VkGraphicsPipelineCreateInfo', 'VkPipeline',
-- 'Graphics.Vulkan.Core10.PipelineCache.VkPipelineCache'
foreign import ccall "vkCreateGraphicsPipelines" vkCreateGraphicsPipelines :: ("device" ::: VkDevice) -> ("pipelineCache" ::: VkPipelineCache) -> ("createInfoCount" ::: Word32) -> ("pCreateInfos" ::: Ptr VkGraphicsPipelineCreateInfo) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> ("pPipelines" ::: Ptr VkPipeline) -> IO VkResult
-- | vkCreateComputePipelines - Creates a new compute pipeline object
--
-- = Parameters
-- #_parameters#
--
-- -   @device@ is the logical device that creates the compute pipelines.
--
-- -   @pipelineCache@ is either
--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', indicating that
--     pipeline caching is disabled; or the handle of a valid
--     <{html_spec_relative}#pipelines-cache pipeline cache> object, in
--     which case use of that cache is enabled for the duration of the
--     command.
--
-- -   @createInfoCount@ is the length of the @pCreateInfos@ and
--     @pPipelines@ arrays.
--
-- -   @pCreateInfos@ is an array of @VkComputePipelineCreateInfo@
--     structures.
--
-- -   @pAllocator@ controls host memory allocation as described in the
--     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
--
-- -   @pPipelines@ is a pointer to an array in which the resulting compute
--     pipeline objects are returned.
--
-- = Description
-- #_description#
--
-- == Valid Usage
--
-- -   If the @flags@ member of any element of @pCreateInfos@ contains the
--     @VK_PIPELINE_CREATE_DERIVATIVE_BIT@ flag, and the
--     @basePipelineIndex@ member of that same element is not @-1@,
--     @basePipelineIndex@ /must/ be less than the index into
--     @pCreateInfos@ that corresponds to that element
--
-- -   If the @flags@ member of any element of @pCreateInfos@ contains the
--     @VK_PIPELINE_CREATE_DERIVATIVE_BIT@ flag, the base pipeline /must/
--     have been created with the
--     @VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT@ flag set
--
-- == Valid Usage (Implicit)
--
-- -   @device@ /must/ be a valid @VkDevice@ handle
--
-- -   If @pipelineCache@ is not
--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', @pipelineCache@
--     /must/ be a valid @VkPipelineCache@ handle
--
-- -   @pCreateInfos@ /must/ be a valid pointer to an array of
--     @createInfoCount@ valid @VkComputePipelineCreateInfo@ structures
--
-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
--     pointer to a valid @VkAllocationCallbacks@ structure
--
-- -   @pPipelines@ /must/ be a valid pointer to an array of
--     @createInfoCount@ @VkPipeline@ handles
--
-- -   @createInfoCount@ /must/ be greater than @0@
--
-- -   If @pipelineCache@ is a valid handle, it /must/ have been created,
--     allocated, or retrieved from @device@
--
-- == Return Codes
--
-- [<#fundamentals-successcodes Success>]
--     -   @VK_SUCCESS@
--
-- [<#fundamentals-errorcodes Failure>]
--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
--
--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
--
--     -   @VK_ERROR_INVALID_SHADER_NV@
--
-- = See Also
-- #_see_also#
--
-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
-- 'VkComputePipelineCreateInfo',
-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice', 'VkPipeline',
-- 'Graphics.Vulkan.Core10.PipelineCache.VkPipelineCache'
foreign import ccall "vkCreateComputePipelines" vkCreateComputePipelines :: ("device" ::: VkDevice) -> ("pipelineCache" ::: VkPipelineCache) -> ("createInfoCount" ::: Word32) -> ("pCreateInfos" ::: Ptr VkComputePipelineCreateInfo) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> ("pPipelines" ::: Ptr VkPipeline) -> IO VkResult
-- | vkDestroyPipeline - Destroy a pipeline object
--
-- = Parameters
-- #_parameters#
--
-- -   @device@ is the logical device that destroys the pipeline.
--
-- -   @pipeline@ is the handle of the pipeline to destroy.
--
-- -   @pAllocator@ controls host memory allocation as described in the
--     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
--
-- = Description
-- #_description#
--
-- == Valid Usage
--
-- -   All submitted commands that refer to @pipeline@ /must/ have
--     completed execution
--
-- -   If @VkAllocationCallbacks@ were provided when @pipeline@ was
--     created, a compatible set of callbacks /must/ be provided here
--
-- -   If no @VkAllocationCallbacks@ were provided when @pipeline@ was
--     created, @pAllocator@ /must/ be @NULL@
--
-- == Valid Usage (Implicit)
--
-- -   @device@ /must/ be a valid @VkDevice@ handle
--
-- -   If @pipeline@ is not
--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', @pipeline@ /must/
--     be a valid @VkPipeline@ handle
--
-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
--     pointer to a valid @VkAllocationCallbacks@ structure
--
-- -   If @pipeline@ is a valid handle, it /must/ have been created,
--     allocated, or retrieved from @device@
--
-- == Host Synchronization
--
-- -   Host access to @pipeline@ /must/ be externally synchronized
--
-- = See Also
-- #_see_also#
--
-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice', 'VkPipeline'
foreign import ccall "vkDestroyPipeline" vkDestroyPipeline :: ("device" ::: VkDevice) -> ("pipeline" ::: VkPipeline) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> IO ()
-- | VkOffset2D - Structure specifying a two-dimensional offset
--
-- = Description
-- #_description#
--
-- = See Also
-- #_see_also#
--
-- 'Graphics.Vulkan.Extensions.VK_KHR_display.VkDisplayPlaneCapabilitiesKHR',
-- 'VkRect2D',
-- 'Graphics.Vulkan.Extensions.VK_KHR_incremental_present.VkRectLayerKHR'
data VkOffset2D = VkOffset2D
  { -- No documentation found for Nested "VkOffset2D" "vkX"
  vkX :: Int32
  , -- No documentation found for Nested "VkOffset2D" "vkY"
  vkY :: Int32
  }
  deriving (Eq, Show)

instance Storable VkOffset2D where
  sizeOf ~_ = 8
  alignment ~_ = 4
  peek ptr = VkOffset2D <$> peek (ptr `plusPtr` 0)
                        <*> peek (ptr `plusPtr` 4)
  poke ptr poked = poke (ptr `plusPtr` 0) (vkX (poked :: VkOffset2D))
                *> poke (ptr `plusPtr` 4) (vkY (poked :: VkOffset2D))
-- | VkExtent2D - Structure specifying a two-dimensional extent
--
-- = Description
-- #_description#
--
-- = See Also
-- #_see_also#
--
-- 'Graphics.Vulkan.Extensions.VK_KHR_display.VkDisplayModeParametersKHR',
-- 'Graphics.Vulkan.Extensions.VK_KHR_display.VkDisplayPlaneCapabilitiesKHR',
-- 'Graphics.Vulkan.Extensions.VK_KHR_display.VkDisplayPropertiesKHR',
-- 'Graphics.Vulkan.Extensions.VK_KHR_display.VkDisplaySurfaceCreateInfoKHR',
-- 'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.VkMultisamplePropertiesEXT',
-- 'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.VkPhysicalDeviceSampleLocationsPropertiesEXT',
-- 'VkRect2D',
-- 'Graphics.Vulkan.Extensions.VK_KHR_incremental_present.VkRectLayerKHR',
-- 'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.VkSampleLocationsInfoEXT',
-- 'Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter.VkSurfaceCapabilities2EXT',
-- 'Graphics.Vulkan.Extensions.VK_KHR_surface.VkSurfaceCapabilitiesKHR',
-- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.VkSwapchainCreateInfoKHR',
-- 'Graphics.Vulkan.Core10.Pass.vkGetRenderAreaGranularity'
data VkExtent2D = VkExtent2D
  { -- No documentation found for Nested "VkExtent2D" "vkWidth"
  vkWidth :: Word32
  , -- No documentation found for Nested "VkExtent2D" "vkHeight"
  vkHeight :: Word32
  }
  deriving (Eq, Show)

instance Storable VkExtent2D where
  sizeOf ~_ = 8
  alignment ~_ = 4
  peek ptr = VkExtent2D <$> peek (ptr `plusPtr` 0)
                        <*> peek (ptr `plusPtr` 4)
  poke ptr poked = poke (ptr `plusPtr` 0) (vkWidth (poked :: VkExtent2D))
                *> poke (ptr `plusPtr` 4) (vkHeight (poked :: VkExtent2D))
-- | VkViewport - Structure specifying a viewport
--
-- = Description
-- #_description#
--
-- The framebuffer depth coordinate @z@f /may/ be represented using either
-- a fixed-point or floating-point representation. However, a
-- floating-point representation /must/ be used if the depth\/stencil
-- attachment has a floating-point depth component. If an m-bit fixed-point
-- representation is used, we assume that it represents each value
-- <<data:image/png;base64,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 stem 64a1b37b405b2e2dc919e83a12e9feba>>,
-- where k ∈ { 0, 1, …​, 2m-1 }, as k (e.g. 1.0 is represented in binary as
-- a string of all ones).
--
-- The viewport parameters shown in the above equations are found from
-- these values as
--
-- []
--     ox = @x@ + @width@ \/ 2
--
-- []
--     oy = @y@ + @height@ \/ 2
--
-- []
--     oz = @minDepth@
--
-- []
--     px = @width@
--
-- []
--     py = @height@
--
-- []
--     pz = @maxDepth@ - @minDepth@.
--
-- The width and height of the
-- <{html_spec_relative}#features-limits-maxViewportDimensions implementation-dependent maximum viewport dimensions>
-- /must/ be greater than or equal to the width and height of the largest
-- image which /can/ be created and attached to a framebuffer.
--
-- The floating-point viewport bounds are represented with an
-- <{html_spec_relative}#features-limits-viewportSubPixelBits implementation-dependent precision>.
--
-- == Valid Usage
--
-- -   @width@ /must/ be greater than @0.0@
--
-- -   @width@ /must/ be less than or equal to
--     @VkPhysicalDeviceLimits@::@maxViewportDimensions@[0]
--
-- -   @height@ /must/ be greater than @0.0@
--
-- -   The absolute value of @height@ /must/ be less than or equal to
--     @VkPhysicalDeviceLimits@::@maxViewportDimensions@[1]
--
-- -   @x@ /must/ be greater than or equal to @viewportBoundsRange@[0]
--
-- -   (@x@ + @width@) /must/ be less than or equal to
--     @viewportBoundsRange@[1]
--
-- -   @y@ /must/ be greater than or equal to @viewportBoundsRange@[0]
--
-- -   (@y@ + @height@) /must/ be less than or equal to
--     @viewportBoundsRange@[1]
--
-- -   @minDepth@ /must/ be between @0.0@ and @1.0@, inclusive
--
-- -   @maxDepth@ /must/ be between @0.0@ and @1.0@, inclusive
--
-- = See Also
-- #_see_also#
--
-- 'VkPipelineViewportStateCreateInfo',
-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdSetViewport'
data VkViewport = VkViewport
  { -- No documentation found for Nested "VkViewport" "vkX"
  vkX :: CFloat
  , -- No documentation found for Nested "VkViewport" "vkY"
  vkY :: CFloat
  , -- No documentation found for Nested "VkViewport" "vkWidth"
  vkWidth :: CFloat
  , -- No documentation found for Nested "VkViewport" "vkHeight"
  vkHeight :: CFloat
  , -- No documentation found for Nested "VkViewport" "vkMinDepth"
  vkMinDepth :: CFloat
  , -- No documentation found for Nested "VkViewport" "vkMaxDepth"
  vkMaxDepth :: CFloat
  }
  deriving (Eq, Show)

instance Storable VkViewport where
  sizeOf ~_ = 24
  alignment ~_ = 4
  peek ptr = VkViewport <$> peek (ptr `plusPtr` 0)
                        <*> peek (ptr `plusPtr` 4)
                        <*> peek (ptr `plusPtr` 8)
                        <*> peek (ptr `plusPtr` 12)
                        <*> peek (ptr `plusPtr` 16)
                        <*> peek (ptr `plusPtr` 20)
  poke ptr poked = poke (ptr `plusPtr` 0) (vkX (poked :: VkViewport))
                *> poke (ptr `plusPtr` 4) (vkY (poked :: VkViewport))
                *> poke (ptr `plusPtr` 8) (vkWidth (poked :: VkViewport))
                *> poke (ptr `plusPtr` 12) (vkHeight (poked :: VkViewport))
                *> poke (ptr `plusPtr` 16) (vkMinDepth (poked :: VkViewport))
                *> poke (ptr `plusPtr` 20) (vkMaxDepth (poked :: VkViewport))
-- | VkRect2D - Structure specifying a two-dimensional subregion
--
-- = Description
-- #_description#
--
-- = See Also
-- #_see_also#
--
-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group_and_VK_KHR_bind_memory2.VkBindImageMemoryDeviceGroupInfo',
-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.VkClearRect',
-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group.VkDeviceGroupRenderPassBeginInfo',
-- 'Graphics.Vulkan.Extensions.VK_KHR_display_swapchain.VkDisplayPresentInfoKHR',
-- 'VkExtent2D', 'VkOffset2D',
-- 'Graphics.Vulkan.Extensions.VK_EXT_discard_rectangles.VkPipelineDiscardRectangleStateCreateInfoEXT',
-- 'VkPipelineViewportStateCreateInfo',
-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.VkRenderPassBeginInfo',
-- 'Graphics.Vulkan.Extensions.VK_EXT_discard_rectangles.vkCmdSetDiscardRectangleEXT',
-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdSetScissor',
-- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.vkGetPhysicalDevicePresentRectanglesKHR'
data VkRect2D = VkRect2D
  { -- No documentation found for Nested "VkRect2D" "vkOffset"
  vkOffset :: VkOffset2D
  , -- No documentation found for Nested "VkRect2D" "vkExtent"
  vkExtent :: VkExtent2D
  }
  deriving (Eq, Show)

instance Storable VkRect2D where
  sizeOf ~_ = 16
  alignment ~_ = 4
  peek ptr = VkRect2D <$> peek (ptr `plusPtr` 0)
                      <*> peek (ptr `plusPtr` 8)
  poke ptr poked = poke (ptr `plusPtr` 0) (vkOffset (poked :: VkRect2D))
                *> poke (ptr `plusPtr` 8) (vkExtent (poked :: VkRect2D))
-- | VkSpecializationMapEntry - Structure specifying a specialization map
-- entry
--
-- = Description
-- #_description#
--
-- If a @constantID@ value is not a specialization constant ID used in the
-- shader, that map entry does not affect the behavior of the pipeline.
--
-- == Valid Usage
--
-- -   For a @constantID@ specialization constant declared in a shader,
--     @size@ /must/ match the byte size of the @constantID@. If the
--     specialization constant is of type @boolean@, @size@ /must/ be the
--     byte size of @VkBool32@
--
-- = See Also
-- #_see_also#
--
-- 'VkSpecializationInfo'
data VkSpecializationMapEntry = VkSpecializationMapEntry
  { -- No documentation found for Nested "VkSpecializationMapEntry" "vkConstantID"
  vkConstantID :: Word32
  , -- No documentation found for Nested "VkSpecializationMapEntry" "vkOffset"
  vkOffset :: Word32
  , -- No documentation found for Nested "VkSpecializationMapEntry" "vkSize"
  vkSize :: CSize
  }
  deriving (Eq, Show)

instance Storable VkSpecializationMapEntry where
  sizeOf ~_ = 16
  alignment ~_ = 8
  peek ptr = VkSpecializationMapEntry <$> peek (ptr `plusPtr` 0)
                                      <*> peek (ptr `plusPtr` 4)
                                      <*> peek (ptr `plusPtr` 8)
  poke ptr poked = poke (ptr `plusPtr` 0) (vkConstantID (poked :: VkSpecializationMapEntry))
                *> poke (ptr `plusPtr` 4) (vkOffset (poked :: VkSpecializationMapEntry))
                *> poke (ptr `plusPtr` 8) (vkSize (poked :: VkSpecializationMapEntry))
-- | VkSpecializationInfo - Structure specifying specialization info
--
-- = Description
-- #_description#
--
-- @pMapEntries@ points to a structure of type 'VkSpecializationMapEntry'.
--
-- == Valid Usage
--
-- -   The @offset@ member of each element of @pMapEntries@ /must/ be less
--     than @dataSize@
--
-- -   The @size@ member of each element of @pMapEntries@ /must/ be less
--     than or equal to @dataSize@ minus @offset@
--
-- -   If @mapEntryCount@ is not @0@, @pMapEntries@ /must/ be a valid
--     pointer to an array of @mapEntryCount@ valid
--     @VkSpecializationMapEntry@ structures
--
-- == Valid Usage (Implicit)
--
-- -   If @dataSize@ is not @0@, @pData@ /must/ be a valid pointer to an
--     array of @dataSize@ bytes
--
-- = See Also
-- #_see_also#
--
-- 'VkPipelineShaderStageCreateInfo', 'VkSpecializationMapEntry'
data VkSpecializationInfo = VkSpecializationInfo
  { -- No documentation found for Nested "VkSpecializationInfo" "vkMapEntryCount"
  vkMapEntryCount :: Word32
  , -- No documentation found for Nested "VkSpecializationInfo" "vkPMapEntries"
  vkPMapEntries :: Ptr VkSpecializationMapEntry
  , -- No documentation found for Nested "VkSpecializationInfo" "vkDataSize"
  vkDataSize :: CSize
  , -- No documentation found for Nested "VkSpecializationInfo" "vkPData"
  vkPData :: Ptr ()
  }
  deriving (Eq, Show)

instance Storable VkSpecializationInfo where
  sizeOf ~_ = 32
  alignment ~_ = 8
  peek ptr = VkSpecializationInfo <$> peek (ptr `plusPtr` 0)
                                  <*> peek (ptr `plusPtr` 8)
                                  <*> peek (ptr `plusPtr` 16)
                                  <*> peek (ptr `plusPtr` 24)
  poke ptr poked = poke (ptr `plusPtr` 0) (vkMapEntryCount (poked :: VkSpecializationInfo))
                *> poke (ptr `plusPtr` 8) (vkPMapEntries (poked :: VkSpecializationInfo))
                *> poke (ptr `plusPtr` 16) (vkDataSize (poked :: VkSpecializationInfo))
                *> poke (ptr `plusPtr` 24) (vkPData (poked :: VkSpecializationInfo))
-- | VkPipelineShaderStageCreateInfo - Structure specifying parameters of a
-- newly created pipeline shader stage
--
-- = Description
-- #_description#
--
-- == Valid Usage
--
-- -   If the
--     <{html_spec_relative}#features-features-geometryShader geometry shaders>
--     feature is not enabled, @stage@ /must/ not be
--     @VK_SHADER_STAGE_GEOMETRY_BIT@
--
-- -   If the
--     <{html_spec_relative}#features-features-tessellationShader tessellation shaders>
--     feature is not enabled, @stage@ /must/ not be
--     @VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT@ or
--     @VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT@
--
-- -   @stage@ /must/ not be @VK_SHADER_STAGE_ALL_GRAPHICS@, or
--     @VK_SHADER_STAGE_ALL@
--
-- -   @pName@ /must/ be the name of an @OpEntryPoint@ in @module@ with an
--     execution model that matches @stage@
--
-- -   If the identified entry point includes any variable in its interface
--     that is declared with the @ClipDistance@ @BuiltIn@ decoration, that
--     variable /must/ not have an array size greater than
--     @VkPhysicalDeviceLimits@::@maxClipDistances@
--
-- -   If the identified entry point includes any variable in its interface
--     that is declared with the @CullDistance@ @BuiltIn@ decoration, that
--     variable /must/ not have an array size greater than
--     @VkPhysicalDeviceLimits@::@maxCullDistances@
--
-- -   If the identified entry point includes any variables in its
--     interface that are declared with the @ClipDistance@ or
--     @CullDistance@ @BuiltIn@ decoration, those variables /must/ not have
--     array sizes which sum to more than
--     @VkPhysicalDeviceLimits@::@maxCombinedClipAndCullDistances@
--
-- -   If the identified entry point includes any variable in its interface
--     that is declared with the @SampleMask@ @BuiltIn@ decoration, that
--     variable /must/ not have an array size greater than
--     @VkPhysicalDeviceLimits@::@maxSampleMaskWords@
--
-- -   If @stage@ is @VK_SHADER_STAGE_VERTEX_BIT@, the identified entry
--     point /must/ not include any input variable in its interface that is
--     decorated with @CullDistance@
--
-- -   If @stage@ is @VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT@ or
--     @VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT@, and the identified
--     entry point has an @OpExecutionMode@ instruction that specifies a
--     patch size with @OutputVertices@, the patch size /must/ be greater
--     than @0@ and less than or equal to
--     @VkPhysicalDeviceLimits@::@maxTessellationPatchSize@
--
-- -   If @stage@ is @VK_SHADER_STAGE_GEOMETRY_BIT@, the identified entry
--     point /must/ have an @OpExecutionMode@ instruction that specifies a
--     maximum output vertex count that is greater than @0@ and less than
--     or equal to @VkPhysicalDeviceLimits@::@maxGeometryOutputVertices@
--
-- -   If @stage@ is @VK_SHADER_STAGE_GEOMETRY_BIT@, the identified entry
--     point /must/ have an @OpExecutionMode@ instruction that specifies an
--     invocation count that is greater than @0@ and less than or equal to
--     @VkPhysicalDeviceLimits@::@maxGeometryShaderInvocations@
--
-- -   If @stage@ is @VK_SHADER_STAGE_GEOMETRY_BIT@, and the identified
--     entry point writes to @Layer@ for any primitive, it /must/ write the
--     same value to @Layer@ for all vertices of a given primitive
--
-- -   If @stage@ is @VK_SHADER_STAGE_GEOMETRY_BIT@, and the identified
--     entry point writes to @ViewportIndex@ for any primitive, it /must/
--     write the same value to @ViewportIndex@ for all vertices of a given
--     primitive
--
-- -   If @stage@ is @VK_SHADER_STAGE_FRAGMENT_BIT@, the identified entry
--     point /must/ not include any output variables in its interface
--     decorated with @CullDistance@
--
-- -   If @stage@ is @VK_SHADER_STAGE_FRAGMENT_BIT@, and the identified
--     entry point writes to @FragDepth@ in any execution path, it /must/
--     write to @FragDepth@ in all execution paths
--
-- == Valid Usage (Implicit)
--
-- -   @sType@ /must/ be
--     @VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO@
--
-- -   @pNext@ /must/ be @NULL@
--
-- -   @flags@ /must/ be @0@
--
-- -   @stage@ /must/ be a valid 'VkShaderStageFlagBits' value
--
-- -   @module@ /must/ be a valid @VkShaderModule@ handle
--
-- -   @pName@ /must/ be a null-terminated UTF-8 string
--
-- -   If @pSpecializationInfo@ is not @NULL@, @pSpecializationInfo@ /must/
--     be a valid pointer to a valid @VkSpecializationInfo@ structure
--
-- = See Also
-- #_see_also#
--
-- 'VkComputePipelineCreateInfo', 'VkGraphicsPipelineCreateInfo',
-- 'VkPipelineShaderStageCreateFlags',
-- 'Graphics.Vulkan.Core10.Shader.VkShaderModule', 'VkShaderStageFlagBits',
-- 'VkSpecializationInfo', 'Graphics.Vulkan.Core10.Core.VkStructureType'
data VkPipelineShaderStageCreateInfo = VkPipelineShaderStageCreateInfo
  { -- No documentation found for Nested "VkPipelineShaderStageCreateInfo" "vkSType"
  vkSType :: VkStructureType
  , -- No documentation found for Nested "VkPipelineShaderStageCreateInfo" "vkPNext"
  vkPNext :: Ptr ()
  , -- No documentation found for Nested "VkPipelineShaderStageCreateInfo" "vkFlags"
  vkFlags :: VkPipelineShaderStageCreateFlags
  , -- No documentation found for Nested "VkPipelineShaderStageCreateInfo" "vkStage"
  vkStage :: VkShaderStageFlagBits
  , -- No documentation found for Nested "VkPipelineShaderStageCreateInfo" "vkModule"
  vkModule :: VkShaderModule
  , -- No documentation found for Nested "VkPipelineShaderStageCreateInfo" "vkPName"
  vkPName :: Ptr CChar
  , -- No documentation found for Nested "VkPipelineShaderStageCreateInfo" "vkPSpecializationInfo"
  vkPSpecializationInfo :: Ptr VkSpecializationInfo
  }
  deriving (Eq, Show)

instance Storable VkPipelineShaderStageCreateInfo where
  sizeOf ~_ = 48
  alignment ~_ = 8
  peek ptr = VkPipelineShaderStageCreateInfo <$> peek (ptr `plusPtr` 0)
                                             <*> peek (ptr `plusPtr` 8)
                                             <*> peek (ptr `plusPtr` 16)
                                             <*> peek (ptr `plusPtr` 20)
                                             <*> peek (ptr `plusPtr` 24)
                                             <*> peek (ptr `plusPtr` 32)
                                             <*> peek (ptr `plusPtr` 40)
  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineShaderStageCreateInfo))
                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineShaderStageCreateInfo))
                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineShaderStageCreateInfo))
                *> poke (ptr `plusPtr` 20) (vkStage (poked :: VkPipelineShaderStageCreateInfo))
                *> poke (ptr `plusPtr` 24) (vkModule (poked :: VkPipelineShaderStageCreateInfo))
                *> poke (ptr `plusPtr` 32) (vkPName (poked :: VkPipelineShaderStageCreateInfo))
                *> poke (ptr `plusPtr` 40) (vkPSpecializationInfo (poked :: VkPipelineShaderStageCreateInfo))
-- | VkComputePipelineCreateInfo - Structure specifying parameters of a newly
-- created compute pipeline
--
-- = Description
-- #_description#
--
-- The parameters @basePipelineHandle@ and @basePipelineIndex@ are
-- described in more detail in
-- <{html_spec_relative}#pipelines-pipeline-derivatives Pipeline Derivatives>.
--
-- @stage@ points to a structure of type @VkPipelineShaderStageCreateInfo@.
--
-- == Valid Usage
--
-- -   If @flags@ contains the @VK_PIPELINE_CREATE_DERIVATIVE_BIT@ flag,
--     and @basePipelineIndex@ is -1, @basePipelineHandle@ /must/ be a
--     valid handle to a compute @VkPipeline@
--
-- -   If @flags@ contains the @VK_PIPELINE_CREATE_DERIVATIVE_BIT@ flag,
--     and @basePipelineHandle@ is
--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE',
--     @basePipelineIndex@ /must/ be a valid index into the calling
--     command’s @pCreateInfos@ parameter
--
-- -   If @flags@ contains the @VK_PIPELINE_CREATE_DERIVATIVE_BIT@ flag,
--     and @basePipelineIndex@ is not -1, @basePipelineHandle@ /must/ be
--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE'
--
-- -   If @flags@ contains the @VK_PIPELINE_CREATE_DERIVATIVE_BIT@ flag,
--     and @basePipelineHandle@ is not
--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE',
--     @basePipelineIndex@ /must/ be -1
--
-- -   The @stage@ member of @stage@ /must/ be
--     @VK_SHADER_STAGE_COMPUTE_BIT@
--
-- -   The shader code for the entry point identified by @stage@ and the
--     rest of the state identified by this structure /must/ adhere to the
--     pipeline linking rules described in the
--     <{html_spec_relative}#interfaces Shader Interfaces> chapter
--
-- -   @layout@ /must/ be
--     <{html_spec_relative}#descriptorsets-pipelinelayout-consistency consistent>
--     with the layout of the compute shader specified in @stage@
--
-- -   The number of resources in @layout@ accessible to the compute shader
--     stage /must/ be less than or equal to
--     @VkPhysicalDeviceLimits@::@maxPerStageResources@
--
-- == Valid Usage (Implicit)
--
-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO@
--
-- -   @pNext@ /must/ be @NULL@
--
-- -   @flags@ /must/ be a valid combination of 'VkPipelineCreateFlagBits'
--     values
--
-- -   @stage@ /must/ be a valid @VkPipelineShaderStageCreateInfo@
--     structure
--
-- -   @layout@ /must/ be a valid @VkPipelineLayout@ handle
--
-- -   Both of @basePipelineHandle@, and @layout@ that are valid handles
--     /must/ have been created, allocated, or retrieved from the same
--     @VkDevice@
--
-- = See Also
-- #_see_also#
--
-- 'VkPipeline', 'VkPipelineCreateFlags', 'VkPipelineLayout',
-- 'VkPipelineShaderStageCreateInfo',
-- 'Graphics.Vulkan.Core10.Core.VkStructureType',
-- 'vkCreateComputePipelines'
data VkComputePipelineCreateInfo = VkComputePipelineCreateInfo
  { -- No documentation found for Nested "VkComputePipelineCreateInfo" "vkSType"
  vkSType :: VkStructureType
  , -- No documentation found for Nested "VkComputePipelineCreateInfo" "vkPNext"
  vkPNext :: Ptr ()
  , -- No documentation found for Nested "VkComputePipelineCreateInfo" "vkFlags"
  vkFlags :: VkPipelineCreateFlags
  , -- No documentation found for Nested "VkComputePipelineCreateInfo" "vkStage"
  vkStage :: VkPipelineShaderStageCreateInfo
  , -- No documentation found for Nested "VkComputePipelineCreateInfo" "vkLayout"
  vkLayout :: VkPipelineLayout
  , -- No documentation found for Nested "VkComputePipelineCreateInfo" "vkBasePipelineHandle"
  vkBasePipelineHandle :: VkPipeline
  , -- No documentation found for Nested "VkComputePipelineCreateInfo" "vkBasePipelineIndex"
  vkBasePipelineIndex :: Int32
  }
  deriving (Eq, Show)

instance Storable VkComputePipelineCreateInfo where
  sizeOf ~_ = 96
  alignment ~_ = 8
  peek ptr = VkComputePipelineCreateInfo <$> peek (ptr `plusPtr` 0)
                                         <*> peek (ptr `plusPtr` 8)
                                         <*> peek (ptr `plusPtr` 16)
                                         <*> peek (ptr `plusPtr` 24)
                                         <*> peek (ptr `plusPtr` 72)
                                         <*> peek (ptr `plusPtr` 80)
                                         <*> peek (ptr `plusPtr` 88)
  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkComputePipelineCreateInfo))
                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkComputePipelineCreateInfo))
                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkComputePipelineCreateInfo))
                *> poke (ptr `plusPtr` 24) (vkStage (poked :: VkComputePipelineCreateInfo))
                *> poke (ptr `plusPtr` 72) (vkLayout (poked :: VkComputePipelineCreateInfo))
                *> poke (ptr `plusPtr` 80) (vkBasePipelineHandle (poked :: VkComputePipelineCreateInfo))
                *> poke (ptr `plusPtr` 88) (vkBasePipelineIndex (poked :: VkComputePipelineCreateInfo))
-- | VkVertexInputBindingDescription - Structure specifying vertex input
-- binding description
--
-- = Description
-- #_description#
--
-- == Valid Usage
--
-- -   @binding@ /must/ be less than
--     @VkPhysicalDeviceLimits@::@maxVertexInputBindings@
--
-- -   @stride@ /must/ be less than or equal to
--     @VkPhysicalDeviceLimits@::@maxVertexInputBindingStride@
--
-- == Valid Usage (Implicit)
--
-- -   @inputRate@ /must/ be a valid 'VkVertexInputRate' value
--
-- = See Also
-- #_see_also#
--
-- 'VkPipelineVertexInputStateCreateInfo', 'VkVertexInputRate'
data VkVertexInputBindingDescription = VkVertexInputBindingDescription
  { -- No documentation found for Nested "VkVertexInputBindingDescription" "vkBinding"
  vkBinding :: Word32
  , -- No documentation found for Nested "VkVertexInputBindingDescription" "vkStride"
  vkStride :: Word32
  , -- No documentation found for Nested "VkVertexInputBindingDescription" "vkInputRate"
  vkInputRate :: VkVertexInputRate
  }
  deriving (Eq, Show)

instance Storable VkVertexInputBindingDescription where
  sizeOf ~_ = 12
  alignment ~_ = 4
  peek ptr = VkVertexInputBindingDescription <$> peek (ptr `plusPtr` 0)
                                             <*> peek (ptr `plusPtr` 4)
                                             <*> peek (ptr `plusPtr` 8)
  poke ptr poked = poke (ptr `plusPtr` 0) (vkBinding (poked :: VkVertexInputBindingDescription))
                *> poke (ptr `plusPtr` 4) (vkStride (poked :: VkVertexInputBindingDescription))
                *> poke (ptr `plusPtr` 8) (vkInputRate (poked :: VkVertexInputBindingDescription))
-- | VkVertexInputAttributeDescription - Structure specifying vertex input
-- attribute description
--
-- = Description
-- #_description#
--
-- == Valid Usage
--
-- -   @location@ /must/ be less than
--     @VkPhysicalDeviceLimits@::@maxVertexInputAttributes@
--
-- -   @binding@ /must/ be less than
--     @VkPhysicalDeviceLimits@::@maxVertexInputBindings@
--
-- -   @offset@ /must/ be less than or equal to
--     @VkPhysicalDeviceLimits@::@maxVertexInputAttributeOffset@
--
-- -   @format@ /must/ be allowed as a vertex buffer format, as specified
--     by the @VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT@ flag in
--     @VkFormatProperties@::@bufferFeatures@ returned by
--     @vkGetPhysicalDeviceFormatProperties@
--
-- == Valid Usage (Implicit)
--
-- -   @format@ /must/ be a valid 'Graphics.Vulkan.Core10.Core.VkFormat'
--     value
--
-- = See Also
-- #_see_also#
--
-- 'Graphics.Vulkan.Core10.Core.VkFormat',
-- 'VkPipelineVertexInputStateCreateInfo'
data VkVertexInputAttributeDescription = VkVertexInputAttributeDescription
  { -- No documentation found for Nested "VkVertexInputAttributeDescription" "vkLocation"
  vkLocation :: Word32
  , -- No documentation found for Nested "VkVertexInputAttributeDescription" "vkBinding"
  vkBinding :: Word32
  , -- No documentation found for Nested "VkVertexInputAttributeDescription" "vkFormat"
  vkFormat :: VkFormat
  , -- No documentation found for Nested "VkVertexInputAttributeDescription" "vkOffset"
  vkOffset :: Word32
  }
  deriving (Eq, Show)

instance Storable VkVertexInputAttributeDescription where
  sizeOf ~_ = 16
  alignment ~_ = 4
  peek ptr = VkVertexInputAttributeDescription <$> peek (ptr `plusPtr` 0)
                                               <*> peek (ptr `plusPtr` 4)
                                               <*> peek (ptr `plusPtr` 8)
                                               <*> peek (ptr `plusPtr` 12)
  poke ptr poked = poke (ptr `plusPtr` 0) (vkLocation (poked :: VkVertexInputAttributeDescription))
                *> poke (ptr `plusPtr` 4) (vkBinding (poked :: VkVertexInputAttributeDescription))
                *> poke (ptr `plusPtr` 8) (vkFormat (poked :: VkVertexInputAttributeDescription))
                *> poke (ptr `plusPtr` 12) (vkOffset (poked :: VkVertexInputAttributeDescription))
-- | VkPipelineVertexInputStateCreateInfo - Structure specifying parameters
-- of a newly created pipeline vertex input state
--
-- = Description
-- #_description#
--
-- == Valid Usage
--
-- -   @vertexBindingDescriptionCount@ /must/ be less than or equal to
--     @VkPhysicalDeviceLimits@::@maxVertexInputBindings@
--
-- -   @vertexAttributeDescriptionCount@ /must/ be less than or equal to
--     @VkPhysicalDeviceLimits@::@maxVertexInputAttributes@
--
-- -   For every @binding@ specified by each element of
--     @pVertexAttributeDescriptions@, a @VkVertexInputBindingDescription@
--     /must/ exist in @pVertexBindingDescriptions@ with the same value of
--     @binding@
--
-- -   All elements of @pVertexBindingDescriptions@ /must/ describe
--     distinct binding numbers
--
-- -   All elements of @pVertexAttributeDescriptions@ /must/ describe
--     distinct attribute locations
--
-- == Valid Usage (Implicit)
--
-- -   @sType@ /must/ be
--     @VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO@
--
-- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
--     'Graphics.Vulkan.Extensions.VK_EXT_vertex_attribute_divisor.VkPipelineVertexInputDivisorStateCreateInfoEXT'
--
-- -   @flags@ /must/ be @0@
--
-- -   If @vertexBindingDescriptionCount@ is not @0@,
--     @pVertexBindingDescriptions@ /must/ be a valid pointer to an array
--     of @vertexBindingDescriptionCount@ valid
--     @VkVertexInputBindingDescription@ structures
--
-- -   If @vertexAttributeDescriptionCount@ is not @0@,
--     @pVertexAttributeDescriptions@ /must/ be a valid pointer to an array
--     of @vertexAttributeDescriptionCount@ valid
--     @VkVertexInputAttributeDescription@ structures
--
-- = See Also
-- #_see_also#
--
-- 'VkGraphicsPipelineCreateInfo', 'VkPipelineVertexInputStateCreateFlags',
-- 'Graphics.Vulkan.Core10.Core.VkStructureType',
-- 'VkVertexInputAttributeDescription', 'VkVertexInputBindingDescription'
data VkPipelineVertexInputStateCreateInfo = VkPipelineVertexInputStateCreateInfo
  { -- No documentation found for Nested "VkPipelineVertexInputStateCreateInfo" "vkSType"
  vkSType :: VkStructureType
  , -- No documentation found for Nested "VkPipelineVertexInputStateCreateInfo" "vkPNext"
  vkPNext :: Ptr ()
  , -- No documentation found for Nested "VkPipelineVertexInputStateCreateInfo" "vkFlags"
  vkFlags :: VkPipelineVertexInputStateCreateFlags
  , -- No documentation found for Nested "VkPipelineVertexInputStateCreateInfo" "vkVertexBindingDescriptionCount"
  vkVertexBindingDescriptionCount :: Word32
  , -- No documentation found for Nested "VkPipelineVertexInputStateCreateInfo" "vkPVertexBindingDescriptions"
  vkPVertexBindingDescriptions :: Ptr VkVertexInputBindingDescription
  , -- No documentation found for Nested "VkPipelineVertexInputStateCreateInfo" "vkVertexAttributeDescriptionCount"
  vkVertexAttributeDescriptionCount :: Word32
  , -- No documentation found for Nested "VkPipelineVertexInputStateCreateInfo" "vkPVertexAttributeDescriptions"
  vkPVertexAttributeDescriptions :: Ptr VkVertexInputAttributeDescription
  }
  deriving (Eq, Show)

instance Storable VkPipelineVertexInputStateCreateInfo where
  sizeOf ~_ = 48
  alignment ~_ = 8
  peek ptr = VkPipelineVertexInputStateCreateInfo <$> peek (ptr `plusPtr` 0)
                                                  <*> peek (ptr `plusPtr` 8)
                                                  <*> peek (ptr `plusPtr` 16)
                                                  <*> peek (ptr `plusPtr` 20)
                                                  <*> peek (ptr `plusPtr` 24)
                                                  <*> peek (ptr `plusPtr` 32)
                                                  <*> peek (ptr `plusPtr` 40)
  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineVertexInputStateCreateInfo))
                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineVertexInputStateCreateInfo))
                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineVertexInputStateCreateInfo))
                *> poke (ptr `plusPtr` 20) (vkVertexBindingDescriptionCount (poked :: VkPipelineVertexInputStateCreateInfo))
                *> poke (ptr `plusPtr` 24) (vkPVertexBindingDescriptions (poked :: VkPipelineVertexInputStateCreateInfo))
                *> poke (ptr `plusPtr` 32) (vkVertexAttributeDescriptionCount (poked :: VkPipelineVertexInputStateCreateInfo))
                *> poke (ptr `plusPtr` 40) (vkPVertexAttributeDescriptions (poked :: VkPipelineVertexInputStateCreateInfo))
-- | VkPipelineInputAssemblyStateCreateInfo - Structure specifying parameters
-- of a newly created pipeline input assembly state
--
-- = Description
-- #_description#
--
-- Restarting the assembly of primitives discards the most recent index
-- values if those elements formed an incomplete primitive, and restarts
-- the primitive assembly using the subsequent indices, but only assembling
-- the immediately following element through the end of the originally
-- specified elements. The primitive restart index value comparison is
-- performed before adding the @vertexOffset@ value to the index value.
--
-- == Valid Usage
--
-- -   If @topology@ is @VK_PRIMITIVE_TOPOLOGY_POINT_LIST@,
--     @VK_PRIMITIVE_TOPOLOGY_LINE_LIST@,
--     @VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST@,
--     @VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY@,
--     @VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY@ or
--     @VK_PRIMITIVE_TOPOLOGY_PATCH_LIST@, @primitiveRestartEnable@ /must/
--     be @VK_FALSE@
--
-- -   If the
--     <{html_spec_relative}#features-features-geometryShader geometry shaders>
--     feature is not enabled, @topology@ /must/ not be any of
--     @VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY@,
--     @VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY@,
--     @VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY@ or
--     @VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY@
--
-- -   If the
--     <{html_spec_relative}#features-features-tessellationShader tessellation shaders>
--     feature is not enabled, @topology@ /must/ not be
--     @VK_PRIMITIVE_TOPOLOGY_PATCH_LIST@
--
-- == Valid Usage (Implicit)
--
-- -   @sType@ /must/ be
--     @VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO@
--
-- -   @pNext@ /must/ be @NULL@
--
-- -   @flags@ /must/ be @0@
--
-- -   @topology@ /must/ be a valid 'VkPrimitiveTopology' value
--
-- = See Also
-- #_see_also#
--
-- @VkBool32@, 'VkGraphicsPipelineCreateInfo',
-- 'VkPipelineInputAssemblyStateCreateFlags', 'VkPrimitiveTopology',
-- 'Graphics.Vulkan.Core10.Core.VkStructureType'
data VkPipelineInputAssemblyStateCreateInfo = VkPipelineInputAssemblyStateCreateInfo
  { -- No documentation found for Nested "VkPipelineInputAssemblyStateCreateInfo" "vkSType"
  vkSType :: VkStructureType
  , -- No documentation found for Nested "VkPipelineInputAssemblyStateCreateInfo" "vkPNext"
  vkPNext :: Ptr ()
  , -- No documentation found for Nested "VkPipelineInputAssemblyStateCreateInfo" "vkFlags"
  vkFlags :: VkPipelineInputAssemblyStateCreateFlags
  , -- No documentation found for Nested "VkPipelineInputAssemblyStateCreateInfo" "vkTopology"
  vkTopology :: VkPrimitiveTopology
  , -- No documentation found for Nested "VkPipelineInputAssemblyStateCreateInfo" "vkPrimitiveRestartEnable"
  vkPrimitiveRestartEnable :: VkBool32
  }
  deriving (Eq, Show)

instance Storable VkPipelineInputAssemblyStateCreateInfo where
  sizeOf ~_ = 32
  alignment ~_ = 8
  peek ptr = VkPipelineInputAssemblyStateCreateInfo <$> peek (ptr `plusPtr` 0)
                                                    <*> peek (ptr `plusPtr` 8)
                                                    <*> peek (ptr `plusPtr` 16)
                                                    <*> peek (ptr `plusPtr` 20)
                                                    <*> peek (ptr `plusPtr` 24)
  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineInputAssemblyStateCreateInfo))
                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineInputAssemblyStateCreateInfo))
                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineInputAssemblyStateCreateInfo))
                *> poke (ptr `plusPtr` 20) (vkTopology (poked :: VkPipelineInputAssemblyStateCreateInfo))
                *> poke (ptr `plusPtr` 24) (vkPrimitiveRestartEnable (poked :: VkPipelineInputAssemblyStateCreateInfo))
-- | VkPipelineTessellationStateCreateInfo - Structure specifying parameters
-- of a newly created pipeline tessellation state
--
-- = Description
-- #_description#
--
-- == Valid Usage
--
-- -   @patchControlPoints@ /must/ be greater than zero and less than or
--     equal to @VkPhysicalDeviceLimits@::@maxTessellationPatchSize@
--
-- == Valid Usage (Implicit)
--
-- -   @sType@ /must/ be
--     @VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO@
--
-- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_maintenance2.VkPipelineTessellationDomainOriginStateCreateInfo'
--
-- -   @flags@ /must/ be @0@
--
-- = See Also
-- #_see_also#
--
-- 'VkGraphicsPipelineCreateInfo',
-- 'VkPipelineTessellationStateCreateFlags',
-- 'Graphics.Vulkan.Core10.Core.VkStructureType'
data VkPipelineTessellationStateCreateInfo = VkPipelineTessellationStateCreateInfo
  { -- No documentation found for Nested "VkPipelineTessellationStateCreateInfo" "vkSType"
  vkSType :: VkStructureType
  , -- No documentation found for Nested "VkPipelineTessellationStateCreateInfo" "vkPNext"
  vkPNext :: Ptr ()
  , -- No documentation found for Nested "VkPipelineTessellationStateCreateInfo" "vkFlags"
  vkFlags :: VkPipelineTessellationStateCreateFlags
  , -- No documentation found for Nested "VkPipelineTessellationStateCreateInfo" "vkPatchControlPoints"
  vkPatchControlPoints :: Word32
  }
  deriving (Eq, Show)

instance Storable VkPipelineTessellationStateCreateInfo where
  sizeOf ~_ = 24
  alignment ~_ = 8
  peek ptr = VkPipelineTessellationStateCreateInfo <$> peek (ptr `plusPtr` 0)
                                                   <*> peek (ptr `plusPtr` 8)
                                                   <*> peek (ptr `plusPtr` 16)
                                                   <*> peek (ptr `plusPtr` 20)
  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineTessellationStateCreateInfo))
                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineTessellationStateCreateInfo))
                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineTessellationStateCreateInfo))
                *> poke (ptr `plusPtr` 20) (vkPatchControlPoints (poked :: VkPipelineTessellationStateCreateInfo))
-- | VkPipelineViewportStateCreateInfo - Structure specifying parameters of a
-- newly created pipeline viewport state
--
-- = Description
-- #_description#
--
-- == Valid Usage
--
-- -   If the
--     <{html_spec_relative}#features-features-multiViewport multiple viewports>
--     feature is not enabled, @viewportCount@ /must/ be @1@
--
-- -   If the
--     <{html_spec_relative}#features-features-multiViewport multiple viewports>
--     feature is not enabled, @scissorCount@ /must/ be @1@
--
-- -   @viewportCount@ /must/ be between @1@ and
--     @VkPhysicalDeviceLimits@::@maxViewports@, inclusive
--
-- -   @scissorCount@ /must/ be between @1@ and
--     @VkPhysicalDeviceLimits@::@maxViewports@, inclusive
--
-- -   @scissorCount@ and @viewportCount@ /must/ be identical
--
-- == Valid Usage (Implicit)
--
-- -   @sType@ /must/ be
--     @VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO@
--
-- -   Each @pNext@ member of any structure (including this one) in the
--     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
--     instance of
--     'Graphics.Vulkan.Extensions.VK_NV_viewport_swizzle.VkPipelineViewportSwizzleStateCreateInfoNV'
--     or
--     'Graphics.Vulkan.Extensions.VK_NV_clip_space_w_scaling.VkPipelineViewportWScalingStateCreateInfoNV'
--
-- -   Each @sType@ member in the @pNext@ chain /must/ be unique
--
-- -   @flags@ /must/ be @0@
--
-- -   @viewportCount@ /must/ be greater than @0@
--
-- -   @scissorCount@ /must/ be greater than @0@
--
-- = See Also
-- #_see_also#
--
-- 'VkGraphicsPipelineCreateInfo', 'VkPipelineViewportStateCreateFlags',
-- 'VkRect2D', 'Graphics.Vulkan.Core10.Core.VkStructureType', 'VkViewport'
data VkPipelineViewportStateCreateInfo = VkPipelineViewportStateCreateInfo
  { -- No documentation found for Nested "VkPipelineViewportStateCreateInfo" "vkSType"
  vkSType :: VkStructureType
  , -- No documentation found for Nested "VkPipelineViewportStateCreateInfo" "vkPNext"
  vkPNext :: Ptr ()
  , -- No documentation found for Nested "VkPipelineViewportStateCreateInfo" "vkFlags"
  vkFlags :: VkPipelineViewportStateCreateFlags
  , -- No documentation found for Nested "VkPipelineViewportStateCreateInfo" "vkViewportCount"
  vkViewportCount :: Word32
  , -- No documentation found for Nested "VkPipelineViewportStateCreateInfo" "vkPViewports"
  vkPViewports :: Ptr VkViewport
  , -- No documentation found for Nested "VkPipelineViewportStateCreateInfo" "vkScissorCount"
  vkScissorCount :: Word32
  , -- No documentation found for Nested "VkPipelineViewportStateCreateInfo" "vkPScissors"
  vkPScissors :: Ptr VkRect2D
  }
  deriving (Eq, Show)

instance Storable VkPipelineViewportStateCreateInfo where
  sizeOf ~_ = 48
  alignment ~_ = 8
  peek ptr = VkPipelineViewportStateCreateInfo <$> peek (ptr `plusPtr` 0)
                                               <*> peek (ptr `plusPtr` 8)
                                               <*> peek (ptr `plusPtr` 16)
                                               <*> peek (ptr `plusPtr` 20)
                                               <*> peek (ptr `plusPtr` 24)
                                               <*> peek (ptr `plusPtr` 32)
                                               <*> peek (ptr `plusPtr` 40)
  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineViewportStateCreateInfo))
                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineViewportStateCreateInfo))
                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineViewportStateCreateInfo))
                *> poke (ptr `plusPtr` 20) (vkViewportCount (poked :: VkPipelineViewportStateCreateInfo))
                *> poke (ptr `plusPtr` 24) (vkPViewports (poked :: VkPipelineViewportStateCreateInfo))
                *> poke (ptr `plusPtr` 32) (vkScissorCount (poked :: VkPipelineViewportStateCreateInfo))
                *> poke (ptr `plusPtr` 40) (vkPScissors (poked :: VkPipelineViewportStateCreateInfo))
-- | VkPipelineRasterizationStateCreateInfo - Structure specifying parameters
-- of a newly created pipeline rasterization state
--
-- = Description
-- #_description#
--
-- == Valid Usage
--
-- -   If the
--     <{html_spec_relative}#features-features-depthClamp depth clamping>
--     feature is not enabled, @depthClampEnable@ /must/ be @VK_FALSE@
--
-- -   If the
--     <{html_spec_relative}#features-features-fillModeNonSolid non-solid fill modes>
--     feature is not enabled, @polygonMode@ /must/ be
--     @VK_POLYGON_MODE_FILL@
--
-- == Valid Usage (Implicit)
--
-- -   @sType@ /must/ be
--     @VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO@
--
-- -   Each @pNext@ member of any structure (including this one) in the
--     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
--     instance of
--     'Graphics.Vulkan.Extensions.VK_EXT_conservative_rasterization.VkPipelineRasterizationConservativeStateCreateInfoEXT'
--     or
--     'Graphics.Vulkan.Extensions.VK_AMD_rasterization_order.VkPipelineRasterizationStateRasterizationOrderAMD'
--
-- -   Each @sType@ member in the @pNext@ chain /must/ be unique
--
-- -   @flags@ /must/ be @0@
--
-- -   @polygonMode@ /must/ be a valid 'VkPolygonMode' value
--
-- -   @cullMode@ /must/ be a valid combination of 'VkCullModeFlagBits'
--     values
--
-- -   @frontFace@ /must/ be a valid 'VkFrontFace' value
--
-- = See Also
-- #_see_also#
--
-- @VkBool32@, 'VkCullModeFlags', 'VkFrontFace',
-- 'VkGraphicsPipelineCreateInfo',
-- 'VkPipelineRasterizationStateCreateFlags', 'VkPolygonMode',
-- 'Graphics.Vulkan.Core10.Core.VkStructureType'
data VkPipelineRasterizationStateCreateInfo = VkPipelineRasterizationStateCreateInfo
  { -- No documentation found for Nested "VkPipelineRasterizationStateCreateInfo" "vkSType"
  vkSType :: VkStructureType
  , -- No documentation found for Nested "VkPipelineRasterizationStateCreateInfo" "vkPNext"
  vkPNext :: Ptr ()
  , -- No documentation found for Nested "VkPipelineRasterizationStateCreateInfo" "vkFlags"
  vkFlags :: VkPipelineRasterizationStateCreateFlags
  , -- No documentation found for Nested "VkPipelineRasterizationStateCreateInfo" "vkDepthClampEnable"
  vkDepthClampEnable :: VkBool32
  , -- No documentation found for Nested "VkPipelineRasterizationStateCreateInfo" "vkRasterizerDiscardEnable"
  vkRasterizerDiscardEnable :: VkBool32
  , -- No documentation found for Nested "VkPipelineRasterizationStateCreateInfo" "vkPolygonMode"
  vkPolygonMode :: VkPolygonMode
  , -- No documentation found for Nested "VkPipelineRasterizationStateCreateInfo" "vkCullMode"
  vkCullMode :: VkCullModeFlags
  , -- No documentation found for Nested "VkPipelineRasterizationStateCreateInfo" "vkFrontFace"
  vkFrontFace :: VkFrontFace
  , -- No documentation found for Nested "VkPipelineRasterizationStateCreateInfo" "vkDepthBiasEnable"
  vkDepthBiasEnable :: VkBool32
  , -- No documentation found for Nested "VkPipelineRasterizationStateCreateInfo" "vkDepthBiasConstantFactor"
  vkDepthBiasConstantFactor :: CFloat
  , -- No documentation found for Nested "VkPipelineRasterizationStateCreateInfo" "vkDepthBiasClamp"
  vkDepthBiasClamp :: CFloat
  , -- No documentation found for Nested "VkPipelineRasterizationStateCreateInfo" "vkDepthBiasSlopeFactor"
  vkDepthBiasSlopeFactor :: CFloat
  , -- No documentation found for Nested "VkPipelineRasterizationStateCreateInfo" "vkLineWidth"
  vkLineWidth :: CFloat
  }
  deriving (Eq, Show)

instance Storable VkPipelineRasterizationStateCreateInfo where
  sizeOf ~_ = 64
  alignment ~_ = 8
  peek ptr = VkPipelineRasterizationStateCreateInfo <$> peek (ptr `plusPtr` 0)
                                                    <*> peek (ptr `plusPtr` 8)
                                                    <*> peek (ptr `plusPtr` 16)
                                                    <*> peek (ptr `plusPtr` 20)
                                                    <*> peek (ptr `plusPtr` 24)
                                                    <*> peek (ptr `plusPtr` 28)
                                                    <*> peek (ptr `plusPtr` 32)
                                                    <*> peek (ptr `plusPtr` 36)
                                                    <*> peek (ptr `plusPtr` 40)
                                                    <*> peek (ptr `plusPtr` 44)
                                                    <*> peek (ptr `plusPtr` 48)
                                                    <*> peek (ptr `plusPtr` 52)
                                                    <*> peek (ptr `plusPtr` 56)
  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineRasterizationStateCreateInfo))
                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineRasterizationStateCreateInfo))
                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineRasterizationStateCreateInfo))
                *> poke (ptr `plusPtr` 20) (vkDepthClampEnable (poked :: VkPipelineRasterizationStateCreateInfo))
                *> poke (ptr `plusPtr` 24) (vkRasterizerDiscardEnable (poked :: VkPipelineRasterizationStateCreateInfo))
                *> poke (ptr `plusPtr` 28) (vkPolygonMode (poked :: VkPipelineRasterizationStateCreateInfo))
                *> poke (ptr `plusPtr` 32) (vkCullMode (poked :: VkPipelineRasterizationStateCreateInfo))
                *> poke (ptr `plusPtr` 36) (vkFrontFace (poked :: VkPipelineRasterizationStateCreateInfo))
                *> poke (ptr `plusPtr` 40) (vkDepthBiasEnable (poked :: VkPipelineRasterizationStateCreateInfo))
                *> poke (ptr `plusPtr` 44) (vkDepthBiasConstantFactor (poked :: VkPipelineRasterizationStateCreateInfo))
                *> poke (ptr `plusPtr` 48) (vkDepthBiasClamp (poked :: VkPipelineRasterizationStateCreateInfo))
                *> poke (ptr `plusPtr` 52) (vkDepthBiasSlopeFactor (poked :: VkPipelineRasterizationStateCreateInfo))
                *> poke (ptr `plusPtr` 56) (vkLineWidth (poked :: VkPipelineRasterizationStateCreateInfo))
-- | VkPipelineMultisampleStateCreateInfo - Structure specifying parameters
-- of a newly created pipeline multisample state
--
-- = Description
-- #_description#
--
-- == Valid Usage
--
-- -   If the
--     <{html_spec_relative}#features-features-sampleRateShading sample rate shading>
--     feature is not enabled, @sampleShadingEnable@ /must/ be @VK_FALSE@
--
-- -   If the
--     <{html_spec_relative}#features-features-alphaToOne alpha to one>
--     feature is not enabled, @alphaToOneEnable@ /must/ be @VK_FALSE@
--
-- -   @minSampleShading@ /must/ be in the range [0,1]
--
-- == Valid Usage (Implicit)
--
-- -   @sType@ /must/ be
--     @VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO@
--
-- -   Each @pNext@ member of any structure (including this one) in the
--     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
--     instance of
--     'Graphics.Vulkan.Extensions.VK_NV_framebuffer_mixed_samples.VkPipelineCoverageModulationStateCreateInfoNV',
--     'Graphics.Vulkan.Extensions.VK_NV_fragment_coverage_to_color.VkPipelineCoverageToColorStateCreateInfoNV',
--     or
--     'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.VkPipelineSampleLocationsStateCreateInfoEXT'
--
-- -   Each @sType@ member in the @pNext@ chain /must/ be unique
--
-- -   @flags@ /must/ be @0@
--
-- -   @rasterizationSamples@ /must/ be a valid
--     'Graphics.Vulkan.Core10.DeviceInitialization.VkSampleCountFlagBits'
--     value
--
-- -   If @pSampleMask@ is not @NULL@, @pSampleMask@ /must/ be a valid
--     pointer to an array of
--     <<data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAhsAAABOCAYAAACJ+9TQAAAABmJLR0QA/wD/AP+gvaeTAAAXDElEQVR4nO2defQdRZXHP9lIgETCJsoioCDKOrIYFZVBGBHFDZ0zjuOGy8giMw5HFBUFdBxRYWYU0QHR8bgrLqgQFVEYgqKMkQASkW2CAmGHRJIQEvLmj/vad7t//bqrenu/l3w/5/TJe79U3apXfbvqdtWtWyCEEEKIYXwP6OVcZ4+yUuPG1FFXQIiKzAK+BCwHvgNMGW111lvUzuXMAF4CfBa4ErgLWAWsBu4DrsXa7gPAIcAmo6mmqMhs4A/9a637+8LRVEeI5nkacGr/+peR1mTy8XHSbxl7j7Y6I6ctXVE7F/Nm4HbSbbQMWALciRkc2TfiVcBFwFO6r66owUzgUQb3cZ/RVkeI5jiJgWJfMuK6TDZ+xqBtHkBvi23pito5n1nAtxi0zW3AccD2mXTTgX2Bc4F1pI2OJ3VVWdEIB5A2GKePtjpCNMe3GSj36SOuy2TjxVgHvxB4zojrMhloS1fUzvl8jUF7XwzMCchzgstzb3tVEy1xNIP79+sR10WIRvk/Bsr96hHXRUxupCvd8QoGbX0PsFlgvhmYD0cP+HE7VRMt8jnkHCrWQ7YkPeW682irIyYx0pVu+RWDtv63yLyX9vN9pOlKidb5LYP7/uYR12XsmKxrTlOB5wK7Ao/HHK5uxaZyY6YfpwJ7AHsCTwQ2Bh7C3gKvwDzsm2AWtp63O7AF5rF8N3ANcB22VhvLfu7zA1idm2YOcBC2drxZv5xbgMsxR6g2aOrejgtd6GAXutIkmwDPA3bCnpfEofIyYGVLZc4CXgDsgjn6/RHzbbk/Us42wDPd9wWR+ZcBK4D/jczn6apfy2M2tqNmF2zQvQa7b48NSXsosFv//28Cfkp79zhhK6xf2w6717dhS10P1ZA5E2vvhKZ2orTZB7cxLo0NG2M/OG/P8gHANOCfMeXIS/PtgDI2Al4FnI/duDw5PeAR4CzqObxtDXwK60CGlXMP5hy2f4C8FxfIybt+UrHeewHfJe1Z7a/lwMnYtG8obd/bMvkxvGyInJDrlwHyu9DBtnSlyXbOsjvwdex358lfAZwJbBohs6i+z8QG5vdghmxeeW+J/A2HZWT8dWT+qrStUyHt+AHgwZz/X4wZFAlTgPdi/Ug27VLgwMi6JQzT+ZVY/7IDFhNjTU6aVcApVA/3sH9GVt0X9Tb64ISmx6WxZG/g5v51B4Mf/ihmef24/30Ntp1sJekGOimgjFdm8swH3opZ2IdiTlo3uv9fgClqLPOw/fQ9bB32TODvMCv1cMxJ78+unDsCZB7NoH1Wubz3ur/7692RdZ4KnMbAK/5O4INYB3oIcGL/b0m53yP84Wz73g6TvwZ764jhtH7e28lvV389nKnnyQHyu9DBtnSlyXZOmIK122MMOrqPAkcABwPHANe7sn6DvRXXre+WWNsnA9Ifmah3jwF/FfFbXpvJ39VySNs6VdaOyfO7HGvH7IB+IzYwbgp8n3Sbr8qkvRszbmLxOu8NrisxPXoQm734Btb/foa0L1MP+I8K5SZlJzLqOIe22QdDO+PS2HMUgx+8CPgh9sOPYtDRTMUaJ0l3aIDcf2Wg6C8ckmYT0uuu/xhZ9x2x6dce8DtsajWP/RlYrj+ILMPPABwZmTePaaR3LMwn34N+O2wwSNIdW6Gstu5tnvyrK9Tvwn7eHUvSPZ/04PQlwoJadaGDnqZ1JaFuO4Pd5286OT/BjM8sm2JGRpLuKxXK8vW9Ftuauhh7I07eRGcAx7t0PaxDDuXwTN5HMWOp7QCJXepUth3Px5YNDmKg/5ths1S+LQ7H2vxW4OUM2nxj4IxM2ldVrFvC552sy7G3+HOBx2XSTQe+mim7ysxKE86hbffBXYxLY8mnGTTmKuAGYNucdJu6dHmdVJYf9dP+Q0m6Fzm5F4dV+S945T2sJO1F/XSnRMjfivTDUTYohnCuk3cVxW+p73Npb6lQVlv3Nk/+eRXqtxSz+ovYn/Q05AWET512oYMJbehKQt12BjiHtN7NKkj7Qpd2HeaXEENW765i4uCTcLlLe1FEGXOx5Zde5roeMzq2jKxzKF3qVLYdF5C/LDOX9AzHYmyG4/E5aacyeOPuAe+vWLeERaTb/z8L0s4hPRPyzQrlNeEc2nYf3Pa4NLZcyaBhVgNPH5JuKtbRfz5Q7kXYm3TZm8bOxN9MsDdzv+ZcNlWZWOBHRJTh14XLBsUQ/BTsWso78QNJP8g7RZbX1r3Nk39MZN5tGbxhD2N3BlsUe5gjYcwSQts66GlaVzx12hnSW0TXMlwPEjYiHXEzdkDy9V1BseHl34xjt6H6eBnZaw02yOcF+KpDlzrl2/Fh7E17GD566jrSzrNZvIFXZ5CbRdrI+R3lvg0+AFvsc7IR9SOHtt0HdzEujSXTSE9PnzWCOuzryr8tIt9zSStBWcjhbbFQ0jGD1Xud/KpOoAmzSK/BfikgT+JpnlwxCtn2vc3KL+rc8tgY8yrPm2kB66x9e/2KcP+BWKrqoKdJXfHUbeeZpNvxy4H5/ujyfD+ivGx9P1GS/osu7dciykk4jon+H3nXFdibcBVHvyrU1alsO36sJL2f7r+gJK1f4vmnCnVLmEe6jUPiymTD7j8hory6zqFd9MFdjEtjyV6kG6bsjacN3ki6QwjlYNJ1X0jz50X4db3YffxZ3ky6vvMC8jyd+Ic5oe176+WvoXhaPpYnYs5nifxrgc0blJ+lqg56mtQVT912zurdcwPzeWPj5xHlZfVut+LkXOzSnhpRjueJmFFzd6bsvOtWutm5Ulensu341IK0m5IOwf7SEtl+GeVFFeqWcKyTcy9hhtxHSP+uHSPKe7vLV8U5tIs+uItxqRajirPh4wLcDPy+YflbYY5yz8IelrmYBeed+/wg8ocI2b/FphaTt919sfXDSzCL9QfU3+fu26fufm7vJHYbYQ9Ldtq0F1Fe2/fWy78emzpsgi2wASh5I7gZ8yF4sKK8NnXQ06SuDJNbpZ293t0B/CIwX2g0ziy+vjdR3p67u8/XVixzKbZ74L1YZ/9KzDEyb9ZsZyzGxBFUn4HqQqey7XhjQdo9XNmPUnwmz1akHRartjmk6/gjzBguY27me0ievPJ+E5EvoYs+uItxaSw5i4EFFrteX8TmmHPTsL3Lw67YHRevLSjjEWz/dFXLfYuMvJ0qyklkJdsNe9iWpxsCLj/l18M6t1Daurdtyp+NdQCJ3Nup3u5d6SA0qytZ6rRzVu9Cd5ZsTfr3/HdEmTH1zUZc3SminDKmAM/GdCAvzsQSwnY0ebrUKd+OZU7Bx7i0ZbMo3rforgr18njn0NA4KT9xeR4h7h4sdHljnUO77IPbHJfGll8yaISjG5L5FMwS9w/1sVikyuwUcHZdMmRaK8szsC2UXpGy1wLiT3b8G5e/rsOfd9Crc8Wsb7Zxb4fJr9KZZpmFTdcnMu+l+tJP1zrYpK5kqdPOWb0LdS49KJPvfRFl+vqWled3vcRGEI1hLvAFJj5Pe0XI6FqnYp7f81zaot0gkN5dEbP7J0vWOTTUWfNPLk/MrErWaTnWObTrPritcWksmUZ661jdqIRg27IWO5lXUnwKY5Pr/k/CgrLcSv6NvZU4B0N/VHhdh78TM3WJdfKLpY17WyS/SmfqmY5NLybylpGeMo1hFDrYpK546rbzu0nr3fMC852cyffswHzZ+pbpuXeqrbo9NIafkf5dBwfm61qnYp/fq13a15ek/Y5L+6HIenm8c+hqwlwBdiLd/jFO63WdQ7vugxOaHpfGkj1JPxBNeMO+JyOz7CAqH7TmmgbKB5uWO4S041lyvT1CzvkuX12HPz8l2mPiumXTtHFvi+TXMRKnkt6XvhIL4lWVUehgk7riqdvOPk5DD3OkDOFSl+d+wiNgxtbXO9V+NLCMaVjnXEXnsgNO6MxG1zoV8/zOJD1lX7aVc4lL+/IKdUvwzqHXB+Z5C+n2L3Nk9dR1Du26D87S1LhUG79n+/vY/t+Q66s1ysw6nq2uISvhre7zfMoPoqrr8JNHD3uDeSETp393iZDTlsPfWuodRBRCG/d2mPzF1HMOPRtb4wTrWF+NxQGoyih0sAvn0LrtDGF69wTSxt555B/ulUesM2uVdnsbtt5+bmB6j98tsYJwx82udSrm+d2Hwe9aifkZDGNL0rs/6uiqr+OdgXle4z4vJS6uSpNjRRd9cJamxqWEpxBuJ6zFtZ83NqZFXlVpuoPcjnSjhQwYfhteTB1OAN4RkO4M0g9q6Hr65qTfXuq2j1fsmBP+TsDOF/hUZHltDX5Nyz+dwXr0OmwKeP6QtDtj665PLpDXpQ4mNK0rnrrtvCzzPcQZ720M+qNHsNmRUGLquwVph9DQ35eUUcWj3y8HXULYaZ6j0KmYdvRpF1FsGPq092AO2FXxskKM0d2x034TPkv1nShV2rSLPrjtcckzhTg74S/PftH601qGe3XXOR656QFpx8z3smPK9ybt5BNah22xMxRuorwjzBpklwaW4Y8wTo7d9hyCTcHeQ1ggoqvc542w6eylJXl2wwbjGZgSxzAOxsZ7+lfCMRSHL34H1g4vw9Y58+hKBz1N64qnbjtflfm+PcVbKLcA3um+n4Y59IVSdZB8kPLZgmy+2KigO5MOHf3JwHyj0Kmq7dhk2iJmkV6u2SEgz0cYGLF/Iu4cnI2of6x8231wF+OSZxl2BEEe+xC4czE5nCq5Hq5QkTKmkj5Fs66DH9iJjb7eRacwzsC2aFVZj35pP89yyp2EXufKiDHMXl+S73f9/wudcZhN+kyAsoOZNumXm6xPxjhDtXFvi+THbMdN8Cc39rC19DIu66cdFnEUutNBT9O6ktBEOz8Oe6NLZBxfkHYK6VDSP6NdvfNOtT8NLMP7JzzM8AOusmyMxRdJyvtuYD7oXqdi29E7h76xJK33kflwZL082cihPYqDjvnnfS3l54Vk2c/lr3qsfNt9cBfjUijvYuL9yT3CvgtjYw/SD0SVY4azzCB9Mx/AtoVl2YLB4TNVnKiSY8l7pN/CsjyDwbkaK/rfQ3mDK2NB5v+OYPDQlEVH9HjntLsYvuVpu36ZPSzwTMhbg6eNe9uk/L8nvR0s5GjwKZglX/Ym0pUOetrQFWjuPvodH3eS7yQ6k4mHUxXttmiivt6p9vTAMvyOhB62PbTovBCA55COB7GI4YfC5dG1TsW0Y9Y5dM+CtJA+5v0VFeqW4J1Dr8ZmKn7BxCi/0zCj0j/vVcKj13UOTWizD+5iXApl5MbGPAaBSvxe57Wkg5gUvf2U4ZUwsfLOwhys3o6t0z2ETYNdQPo3JuW/qaSMH2bKOB+zFJ+PxTs4CntDSx7Ce4kPT7yPk78aU55DsK2ESYCgUyNlTiF9FPQD2HHVL8bWeP8W+C/M+S3p8EP3YLd9b18XIP/CADkHkN6bv46wwDo39tOHlNGFDnqa1JWm2tkzlfTAfgfW6R6CvWGeRDo0/BcIN2xC9O6DLv0Z7u+rXPq73N+LzpI4kolxC1ZjTvUnY/4mb8IGtE8zmFVKrq9TbZth2zoV044z+r/rBuyAN1+vG/t/90HAfuRk+LRL+n9bRPmhcln84Xln939bD9u59EVsR9Z5pA+He5S4QFyfcfX2hzEuJ1+3QmizD+5iXApl5MZG0QmJ/jqyZjnHYWuwebLvw9bpZ5EOWuOvF0wUmWIHTJmzD1peWf+OheetwieHyH2YtK9BDFOxjtA/PNlrMdaBxUwVtn1v8wIiZa8Qf4T3B9Zz2HVaYH3b1sEsTelKU+2cZRqmI/cPkfkYtpQRu+U4RO/8dPXikrQrKXd63x4z5C4lfbrmsGsZdvhc3eXENnUqph33DUj78X7a2RQHleox0a8nBD9TlBgQx2NtnZW/DjN4yrbkZvFn84ToViht9cFdjUshFBob3kv8QuAl7vsKxi/ox2wsCuFTsbek+7EtXFcSvo0uhF0w57sdsGnfNdjNvA6b3ltbU/7TsA54K8wivQVby64b2346Zknvhm1HW41NcS+k2IFPhNOVDia0pStNMh2r466Y3i3H3j4vx97yxo1ZWLvvim3ZnY31pX/GHHIXY2/AMbseiuhapyYjs7D2TQbifRhEAp0NHIrNBiQnrF7W/3ey0WYf3Pa4VMa7mHja8gHkbBnuwmdDCCGEiMU7h65kdIeIiuEUzmzErpkJIYQQXeO3z15D+2/pomFkbAghhJjstBH1WXSIjA0hhBCTnbYDBoqWkbEhhBBisrENtk02ufzhdae7v8fGkREjQk42QgghJhv7MTFke0ISwXU1w48QEJMMGRtCCCEmG/MJO8BPjAlaRhFCCCFEq8jYEEIIIUSryNgQQgghRKvI2BBCCCFEq8jYEEIIIUSrtLkb5VTglBblCyGEEKI5TsPG7sbRzIYQQgghWkXGhhBCCCFaRcaGEEIIIVpFxoYQQgghWqVtB9FTW5QvhBBCiDFAMxtCCCGEaBUZG0IIIYRoFRkbQgghhGgVGRtCCCGEaBUZG0IIIYRolTZ3owghJi/bAwcBBwJ7AbsAc4EpwDLgRuAK4AvATZGy9wReCszry94amAU8BCwBftGXe13N3yCEGEMuBHrueni01RFCtMAbgYWkn/UHgSuBS4BFwBr3f2uA9wfI3Qx4J/AHl/cxYDHwc+CXwJ8z5Z4LzGzmZwkhRsy7SD/fPWD/vIQyNoRY/7mBwTO+CDiMicup2wDfIt0fHFUi94cu7UrgA8BWmTQbAScB61zaL1f8HUKIyYWMDSEEAHMYDPSXABsXpJ0B3MygP7i+RPbSfrrlwDNL0n6CdF/zrLKKCyEmPYXGhhxEhdhw2BfzyVgOvBZYVZB2DXCx+74bw/uL7YAn9D8fB1xVUo9zMt9fXpJeCDHmyEFUiA2HpwH3A58H7glIv859Xpn57tmv/+/1wFcC5C7JfN8uII8QYoyRsSHEhsM5TJxVKGIP93lhQbrlwJnApdjUaRlzMt8fjKiTEGIMkbEhhMhjW2xbbMIXC9Je1r9C2SPzvcwfRAgx5shnQwiRx+mYkyjYttWQ5ZFQDnefVwMXNChbCDEJkbEhhPDMAM4AXt//vgh4BRYzoyn5b3DfzybMf0QIsZ6gra9CbHhMwyKH7g+ciEUL7WE7VT6GRf5skncw6GNuZqL/hhBiPFGcDSFELtnAXT3gt8AxwJYtlLcDFgq9B6zAtuIKIdYPFGdDCJHLOuDXwO+xwR/gGcD7gOOBTRssaybwbeBxwFrgNZhhI4TYAPC7UeYDt7vvj3RcFyFEt7zGfZ4OvACL7rk3cAoW+Otg4I6a5UwDvoFFFl0LvA4Lby6EWH9YxMSt9fLHEkLkMof0YWpX1JS3ETajkfiBvKymPCGEEEKsBxxFet31wOLkQ9kM+Glfxt3oDBQhhBBC9Hk6aWPjxAoynowF60qcTndsrHZCCCGEGHt2Im1sfCgy/8HAff283wI2abJyQgghhBh/DiRtbBwbkfc47MTYdcAHsVNmhRBCCLGeMgOL/nlYZL53EhCYJ6escxjE6DkyskwhhBBCjCH7MojUGcMCBobGHZTPTmwN/E8//W3APiXpr+2nPSCyXkIIIYSYZLwNG9Tvi8hzMOlZjRNK0u8NLOmnXQA8viT9LGyZ5VEs0JcQQgghxphkWaOHBdQqY1sGhkMPC9JTdDbKkdiSSQ84D4upUca8fvqrA9IKIYQQYpLzGwaGwzXANgVp5wG3uPRLgJ2HpJ2COX+u66d9DFuqCbmW9vN8rvKvEkIIIcSkYAoWKtgvidwPnInNSDwPOBQ7dG0+A8OhB/yYYsPkJRm5Va6jm/qhQgghhBgdc7AD1a7AZh+KBv9HgO8RtnPllBJZIZecQ4XYgNAeeCE2DOZizpy7AptjvhgrgAewU1+vw84uEUKIxvl/LD66bFuCF+cAAAAASUVORK5CYII= stem afc23f1498b2f7d63bea697fcc1fdc8e>>
--     @VkSampleMask@ values
--
-- = See Also
-- #_see_also#
--
-- @VkBool32@, 'VkGraphicsPipelineCreateInfo',
-- 'VkPipelineMultisampleStateCreateFlags',
-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkSampleCountFlagBits',
-- @VkSampleMask@, 'Graphics.Vulkan.Core10.Core.VkStructureType'
data VkPipelineMultisampleStateCreateInfo = VkPipelineMultisampleStateCreateInfo
  { -- No documentation found for Nested "VkPipelineMultisampleStateCreateInfo" "vkSType"
  vkSType :: VkStructureType
  , -- No documentation found for Nested "VkPipelineMultisampleStateCreateInfo" "vkPNext"
  vkPNext :: Ptr ()
  , -- No documentation found for Nested "VkPipelineMultisampleStateCreateInfo" "vkFlags"
  vkFlags :: VkPipelineMultisampleStateCreateFlags
  , -- No documentation found for Nested "VkPipelineMultisampleStateCreateInfo" "vkRasterizationSamples"
  vkRasterizationSamples :: VkSampleCountFlagBits
  , -- No documentation found for Nested "VkPipelineMultisampleStateCreateInfo" "vkSampleShadingEnable"
  vkSampleShadingEnable :: VkBool32
  , -- No documentation found for Nested "VkPipelineMultisampleStateCreateInfo" "vkMinSampleShading"
  vkMinSampleShading :: CFloat
  , -- No documentation found for Nested "VkPipelineMultisampleStateCreateInfo" "vkPSampleMask"
  vkPSampleMask :: Ptr VkSampleMask
  , -- No documentation found for Nested "VkPipelineMultisampleStateCreateInfo" "vkAlphaToCoverageEnable"
  vkAlphaToCoverageEnable :: VkBool32
  , -- No documentation found for Nested "VkPipelineMultisampleStateCreateInfo" "vkAlphaToOneEnable"
  vkAlphaToOneEnable :: VkBool32
  }
  deriving (Eq, Show)

instance Storable VkPipelineMultisampleStateCreateInfo where
  sizeOf ~_ = 48
  alignment ~_ = 8
  peek ptr = VkPipelineMultisampleStateCreateInfo <$> peek (ptr `plusPtr` 0)
                                                  <*> peek (ptr `plusPtr` 8)
                                                  <*> peek (ptr `plusPtr` 16)
                                                  <*> peek (ptr `plusPtr` 20)
                                                  <*> peek (ptr `plusPtr` 24)
                                                  <*> peek (ptr `plusPtr` 28)
                                                  <*> peek (ptr `plusPtr` 32)
                                                  <*> peek (ptr `plusPtr` 40)
                                                  <*> peek (ptr `plusPtr` 44)
  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineMultisampleStateCreateInfo))
                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineMultisampleStateCreateInfo))
                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineMultisampleStateCreateInfo))
                *> poke (ptr `plusPtr` 20) (vkRasterizationSamples (poked :: VkPipelineMultisampleStateCreateInfo))
                *> poke (ptr `plusPtr` 24) (vkSampleShadingEnable (poked :: VkPipelineMultisampleStateCreateInfo))
                *> poke (ptr `plusPtr` 28) (vkMinSampleShading (poked :: VkPipelineMultisampleStateCreateInfo))
                *> poke (ptr `plusPtr` 32) (vkPSampleMask (poked :: VkPipelineMultisampleStateCreateInfo))
                *> poke (ptr `plusPtr` 40) (vkAlphaToCoverageEnable (poked :: VkPipelineMultisampleStateCreateInfo))
                *> poke (ptr `plusPtr` 44) (vkAlphaToOneEnable (poked :: VkPipelineMultisampleStateCreateInfo))
-- | VkPipelineColorBlendAttachmentState - Structure specifying a pipeline
-- color blend attachment state
--
-- = Description
-- #_description#
--
-- == Valid Usage
--
-- -   If the
--     <{html_spec_relative}#features-features-dualSrcBlend dual source blending>
--     feature is not enabled, @srcColorBlendFactor@ /must/ not be
--     @VK_BLEND_FACTOR_SRC1_COLOR@,
--     @VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR@,
--     @VK_BLEND_FACTOR_SRC1_ALPHA@, or
--     @VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA@
--
-- -   If the
--     <{html_spec_relative}#features-features-dualSrcBlend dual source blending>
--     feature is not enabled, @dstColorBlendFactor@ /must/ not be
--     @VK_BLEND_FACTOR_SRC1_COLOR@,
--     @VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR@,
--     @VK_BLEND_FACTOR_SRC1_ALPHA@, or
--     @VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA@
--
-- -   If the
--     <{html_spec_relative}#features-features-dualSrcBlend dual source blending>
--     feature is not enabled, @srcAlphaBlendFactor@ /must/ not be
--     @VK_BLEND_FACTOR_SRC1_COLOR@,
--     @VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR@,
--     @VK_BLEND_FACTOR_SRC1_ALPHA@, or
--     @VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA@
--
-- -   If the
--     <{html_spec_relative}#features-features-dualSrcBlend dual source blending>
--     feature is not enabled, @dstAlphaBlendFactor@ /must/ not be
--     @VK_BLEND_FACTOR_SRC1_COLOR@,
--     @VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR@,
--     @VK_BLEND_FACTOR_SRC1_ALPHA@, or
--     @VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA@
--
-- == Valid Usage (Implicit)
--
-- -   @srcColorBlendFactor@ /must/ be a valid 'VkBlendFactor' value
--
-- -   @dstColorBlendFactor@ /must/ be a valid 'VkBlendFactor' value
--
-- -   @colorBlendOp@ /must/ be a valid 'VkBlendOp' value
--
-- -   @srcAlphaBlendFactor@ /must/ be a valid 'VkBlendFactor' value
--
-- -   @dstAlphaBlendFactor@ /must/ be a valid 'VkBlendFactor' value
--
-- -   @alphaBlendOp@ /must/ be a valid 'VkBlendOp' value
--
-- -   @colorWriteMask@ /must/ be a valid combination of
--     'VkColorComponentFlagBits' values
--
-- = See Also
-- #_see_also#
--
-- 'VkBlendFactor', 'VkBlendOp', @VkBool32@, 'VkColorComponentFlags',
-- 'VkPipelineColorBlendStateCreateInfo'
data VkPipelineColorBlendAttachmentState = VkPipelineColorBlendAttachmentState
  { -- No documentation found for Nested "VkPipelineColorBlendAttachmentState" "vkBlendEnable"
  vkBlendEnable :: VkBool32
  , -- No documentation found for Nested "VkPipelineColorBlendAttachmentState" "vkSrcColorBlendFactor"
  vkSrcColorBlendFactor :: VkBlendFactor
  , -- No documentation found for Nested "VkPipelineColorBlendAttachmentState" "vkDstColorBlendFactor"
  vkDstColorBlendFactor :: VkBlendFactor
  , -- No documentation found for Nested "VkPipelineColorBlendAttachmentState" "vkColorBlendOp"
  vkColorBlendOp :: VkBlendOp
  , -- No documentation found for Nested "VkPipelineColorBlendAttachmentState" "vkSrcAlphaBlendFactor"
  vkSrcAlphaBlendFactor :: VkBlendFactor
  , -- No documentation found for Nested "VkPipelineColorBlendAttachmentState" "vkDstAlphaBlendFactor"
  vkDstAlphaBlendFactor :: VkBlendFactor
  , -- No documentation found for Nested "VkPipelineColorBlendAttachmentState" "vkAlphaBlendOp"
  vkAlphaBlendOp :: VkBlendOp
  , -- No documentation found for Nested "VkPipelineColorBlendAttachmentState" "vkColorWriteMask"
  vkColorWriteMask :: VkColorComponentFlags
  }
  deriving (Eq, Show)

instance Storable VkPipelineColorBlendAttachmentState where
  sizeOf ~_ = 32
  alignment ~_ = 4
  peek ptr = VkPipelineColorBlendAttachmentState <$> peek (ptr `plusPtr` 0)
                                                 <*> peek (ptr `plusPtr` 4)
                                                 <*> peek (ptr `plusPtr` 8)
                                                 <*> peek (ptr `plusPtr` 12)
                                                 <*> peek (ptr `plusPtr` 16)
                                                 <*> peek (ptr `plusPtr` 20)
                                                 <*> peek (ptr `plusPtr` 24)
                                                 <*> peek (ptr `plusPtr` 28)
  poke ptr poked = poke (ptr `plusPtr` 0) (vkBlendEnable (poked :: VkPipelineColorBlendAttachmentState))
                *> poke (ptr `plusPtr` 4) (vkSrcColorBlendFactor (poked :: VkPipelineColorBlendAttachmentState))
                *> poke (ptr `plusPtr` 8) (vkDstColorBlendFactor (poked :: VkPipelineColorBlendAttachmentState))
                *> poke (ptr `plusPtr` 12) (vkColorBlendOp (poked :: VkPipelineColorBlendAttachmentState))
                *> poke (ptr `plusPtr` 16) (vkSrcAlphaBlendFactor (poked :: VkPipelineColorBlendAttachmentState))
                *> poke (ptr `plusPtr` 20) (vkDstAlphaBlendFactor (poked :: VkPipelineColorBlendAttachmentState))
                *> poke (ptr `plusPtr` 24) (vkAlphaBlendOp (poked :: VkPipelineColorBlendAttachmentState))
                *> poke (ptr `plusPtr` 28) (vkColorWriteMask (poked :: VkPipelineColorBlendAttachmentState))
-- | VkPipelineColorBlendStateCreateInfo - Structure specifying parameters of
-- a newly created pipeline color blend state
--
-- = Description
-- #_description#
--
-- Each element of the @pAttachments@ array is a
-- 'VkPipelineColorBlendAttachmentState' structure specifying per-target
-- blending state for each individual color attachment. If the
-- <{html_spec_relative}#features-features-independentBlend independent blending>
-- feature is not enabled on the device, all
-- 'VkPipelineColorBlendAttachmentState' elements in the @pAttachments@
-- array /must/ be identical.
--
-- == Valid Usage
--
-- -   If the
--     <{html_spec_relative}#features-features-independentBlend independent blending>
--     feature is not enabled, all elements of @pAttachments@ /must/ be
--     identical
--
-- -   If the
--     <{html_spec_relative}#features-features-logicOp logic operations>
--     feature is not enabled, @logicOpEnable@ /must/ be @VK_FALSE@
--
-- -   If @logicOpEnable@ is @VK_TRUE@, @logicOp@ /must/ be a valid
--     'VkLogicOp' value
--
-- == Valid Usage (Implicit)
--
-- -   @sType@ /must/ be
--     @VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO@
--
-- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
--     'Graphics.Vulkan.Extensions.VK_EXT_blend_operation_advanced.VkPipelineColorBlendAdvancedStateCreateInfoEXT'
--
-- -   @flags@ /must/ be @0@
--
-- -   If @attachmentCount@ is not @0@, @pAttachments@ /must/ be a valid
--     pointer to an array of @attachmentCount@ valid
--     @VkPipelineColorBlendAttachmentState@ structures
--
-- = See Also
-- #_see_also#
--
-- @VkBool32@, 'VkGraphicsPipelineCreateInfo', 'VkLogicOp',
-- 'VkPipelineColorBlendAttachmentState',
-- 'VkPipelineColorBlendStateCreateFlags',
-- 'Graphics.Vulkan.Core10.Core.VkStructureType'
data VkPipelineColorBlendStateCreateInfo = VkPipelineColorBlendStateCreateInfo
  { -- No documentation found for Nested "VkPipelineColorBlendStateCreateInfo" "vkSType"
  vkSType :: VkStructureType
  , -- No documentation found for Nested "VkPipelineColorBlendStateCreateInfo" "vkPNext"
  vkPNext :: Ptr ()
  , -- No documentation found for Nested "VkPipelineColorBlendStateCreateInfo" "vkFlags"
  vkFlags :: VkPipelineColorBlendStateCreateFlags
  , -- No documentation found for Nested "VkPipelineColorBlendStateCreateInfo" "vkLogicOpEnable"
  vkLogicOpEnable :: VkBool32
  , -- No documentation found for Nested "VkPipelineColorBlendStateCreateInfo" "vkLogicOp"
  vkLogicOp :: VkLogicOp
  , -- No documentation found for Nested "VkPipelineColorBlendStateCreateInfo" "vkAttachmentCount"
  vkAttachmentCount :: Word32
  , -- No documentation found for Nested "VkPipelineColorBlendStateCreateInfo" "vkPAttachments"
  vkPAttachments :: Ptr VkPipelineColorBlendAttachmentState
  , -- No documentation found for Nested "VkPipelineColorBlendStateCreateInfo" "vkBlendConstants"
  vkBlendConstants :: Vector 4 CFloat
  }
  deriving (Eq, Show)

instance Storable VkPipelineColorBlendStateCreateInfo where
  sizeOf ~_ = 56
  alignment ~_ = 8
  peek ptr = VkPipelineColorBlendStateCreateInfo <$> peek (ptr `plusPtr` 0)
                                                 <*> peek (ptr `plusPtr` 8)
                                                 <*> peek (ptr `plusPtr` 16)
                                                 <*> peek (ptr `plusPtr` 20)
                                                 <*> peek (ptr `plusPtr` 24)
                                                 <*> peek (ptr `plusPtr` 28)
                                                 <*> peek (ptr `plusPtr` 32)
                                                 <*> peek (ptr `plusPtr` 40)
  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineColorBlendStateCreateInfo))
                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineColorBlendStateCreateInfo))
                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineColorBlendStateCreateInfo))
                *> poke (ptr `plusPtr` 20) (vkLogicOpEnable (poked :: VkPipelineColorBlendStateCreateInfo))
                *> poke (ptr `plusPtr` 24) (vkLogicOp (poked :: VkPipelineColorBlendStateCreateInfo))
                *> poke (ptr `plusPtr` 28) (vkAttachmentCount (poked :: VkPipelineColorBlendStateCreateInfo))
                *> poke (ptr `plusPtr` 32) (vkPAttachments (poked :: VkPipelineColorBlendStateCreateInfo))
                *> poke (ptr `plusPtr` 40) (vkBlendConstants (poked :: VkPipelineColorBlendStateCreateInfo))
-- | VkPipelineDynamicStateCreateInfo - Structure specifying parameters of a
-- newly created pipeline dynamic state
--
-- = Description
-- #_description#
--
-- == Valid Usage
--
-- -   Each element of @pDynamicStates@ /must/ be unique
--
-- == Valid Usage (Implicit)
--
-- -   @sType@ /must/ be
--     @VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO@
--
-- -   @pNext@ /must/ be @NULL@
--
-- -   @flags@ /must/ be @0@
--
-- -   @pDynamicStates@ /must/ be a valid pointer to an array of
--     @dynamicStateCount@ valid 'VkDynamicState' values
--
-- -   @dynamicStateCount@ /must/ be greater than @0@
--
-- = See Also
-- #_see_also#
--
-- 'VkDynamicState', 'VkGraphicsPipelineCreateInfo',
-- 'VkPipelineDynamicStateCreateFlags',
-- 'Graphics.Vulkan.Core10.Core.VkStructureType'
data VkPipelineDynamicStateCreateInfo = VkPipelineDynamicStateCreateInfo
  { -- No documentation found for Nested "VkPipelineDynamicStateCreateInfo" "vkSType"
  vkSType :: VkStructureType
  , -- No documentation found for Nested "VkPipelineDynamicStateCreateInfo" "vkPNext"
  vkPNext :: Ptr ()
  , -- No documentation found for Nested "VkPipelineDynamicStateCreateInfo" "vkFlags"
  vkFlags :: VkPipelineDynamicStateCreateFlags
  , -- No documentation found for Nested "VkPipelineDynamicStateCreateInfo" "vkDynamicStateCount"
  vkDynamicStateCount :: Word32
  , -- No documentation found for Nested "VkPipelineDynamicStateCreateInfo" "vkPDynamicStates"
  vkPDynamicStates :: Ptr VkDynamicState
  }
  deriving (Eq, Show)

instance Storable VkPipelineDynamicStateCreateInfo where
  sizeOf ~_ = 32
  alignment ~_ = 8
  peek ptr = VkPipelineDynamicStateCreateInfo <$> peek (ptr `plusPtr` 0)
                                              <*> peek (ptr `plusPtr` 8)
                                              <*> peek (ptr `plusPtr` 16)
                                              <*> peek (ptr `plusPtr` 20)
                                              <*> peek (ptr `plusPtr` 24)
  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineDynamicStateCreateInfo))
                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineDynamicStateCreateInfo))
                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineDynamicStateCreateInfo))
                *> poke (ptr `plusPtr` 20) (vkDynamicStateCount (poked :: VkPipelineDynamicStateCreateInfo))
                *> poke (ptr `plusPtr` 24) (vkPDynamicStates (poked :: VkPipelineDynamicStateCreateInfo))
-- | VkStencilOpState - Structure specifying stencil operation state
--
-- = Description
-- #_description#
--
-- == Valid Usage (Implicit)
--
-- -   @failOp@ /must/ be a valid 'VkStencilOp' value
--
-- -   @passOp@ /must/ be a valid 'VkStencilOp' value
--
-- -   @depthFailOp@ /must/ be a valid 'VkStencilOp' value
--
-- -   @compareOp@ /must/ be a valid 'VkCompareOp' value
--
-- = See Also
-- #_see_also#
--
-- 'VkCompareOp', 'VkPipelineDepthStencilStateCreateInfo', 'VkStencilOp'
data VkStencilOpState = VkStencilOpState
  { -- No documentation found for Nested "VkStencilOpState" "vkFailOp"
  vkFailOp :: VkStencilOp
  , -- No documentation found for Nested "VkStencilOpState" "vkPassOp"
  vkPassOp :: VkStencilOp
  , -- No documentation found for Nested "VkStencilOpState" "vkDepthFailOp"
  vkDepthFailOp :: VkStencilOp
  , -- No documentation found for Nested "VkStencilOpState" "vkCompareOp"
  vkCompareOp :: VkCompareOp
  , -- No documentation found for Nested "VkStencilOpState" "vkCompareMask"
  vkCompareMask :: Word32
  , -- No documentation found for Nested "VkStencilOpState" "vkWriteMask"
  vkWriteMask :: Word32
  , -- No documentation found for Nested "VkStencilOpState" "vkReference"
  vkReference :: Word32
  }
  deriving (Eq, Show)

instance Storable VkStencilOpState where
  sizeOf ~_ = 28
  alignment ~_ = 4
  peek ptr = VkStencilOpState <$> peek (ptr `plusPtr` 0)
                              <*> peek (ptr `plusPtr` 4)
                              <*> peek (ptr `plusPtr` 8)
                              <*> peek (ptr `plusPtr` 12)
                              <*> peek (ptr `plusPtr` 16)
                              <*> peek (ptr `plusPtr` 20)
                              <*> peek (ptr `plusPtr` 24)
  poke ptr poked = poke (ptr `plusPtr` 0) (vkFailOp (poked :: VkStencilOpState))
                *> poke (ptr `plusPtr` 4) (vkPassOp (poked :: VkStencilOpState))
                *> poke (ptr `plusPtr` 8) (vkDepthFailOp (poked :: VkStencilOpState))
                *> poke (ptr `plusPtr` 12) (vkCompareOp (poked :: VkStencilOpState))
                *> poke (ptr `plusPtr` 16) (vkCompareMask (poked :: VkStencilOpState))
                *> poke (ptr `plusPtr` 20) (vkWriteMask (poked :: VkStencilOpState))
                *> poke (ptr `plusPtr` 24) (vkReference (poked :: VkStencilOpState))
-- | VkPipelineDepthStencilStateCreateInfo - Structure specifying parameters
-- of a newly created pipeline depth stencil state
--
-- = Description
-- #_description#
--
-- == Valid Usage
--
-- -   If the
--     <{html_spec_relative}#features-features-depthBounds depth bounds testing>
--     feature is not enabled, @depthBoundsTestEnable@ /must/ be @VK_FALSE@
--
-- == Valid Usage (Implicit)
--
-- -   @sType@ /must/ be
--     @VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO@
--
-- -   @pNext@ /must/ be @NULL@
--
-- -   @flags@ /must/ be @0@
--
-- -   @depthCompareOp@ /must/ be a valid 'VkCompareOp' value
--
-- -   @front@ /must/ be a valid @VkStencilOpState@ structure
--
-- -   @back@ /must/ be a valid @VkStencilOpState@ structure
--
-- = See Also
-- #_see_also#
--
-- @VkBool32@, 'VkCompareOp', 'VkGraphicsPipelineCreateInfo',
-- 'VkPipelineDepthStencilStateCreateFlags', 'VkStencilOpState',
-- 'Graphics.Vulkan.Core10.Core.VkStructureType'
data VkPipelineDepthStencilStateCreateInfo = VkPipelineDepthStencilStateCreateInfo
  { -- No documentation found for Nested "VkPipelineDepthStencilStateCreateInfo" "vkSType"
  vkSType :: VkStructureType
  , -- No documentation found for Nested "VkPipelineDepthStencilStateCreateInfo" "vkPNext"
  vkPNext :: Ptr ()
  , -- No documentation found for Nested "VkPipelineDepthStencilStateCreateInfo" "vkFlags"
  vkFlags :: VkPipelineDepthStencilStateCreateFlags
  , -- No documentation found for Nested "VkPipelineDepthStencilStateCreateInfo" "vkDepthTestEnable"
  vkDepthTestEnable :: VkBool32
  , -- No documentation found for Nested "VkPipelineDepthStencilStateCreateInfo" "vkDepthWriteEnable"
  vkDepthWriteEnable :: VkBool32
  , -- No documentation found for Nested "VkPipelineDepthStencilStateCreateInfo" "vkDepthCompareOp"
  vkDepthCompareOp :: VkCompareOp
  , -- No documentation found for Nested "VkPipelineDepthStencilStateCreateInfo" "vkDepthBoundsTestEnable"
  vkDepthBoundsTestEnable :: VkBool32
  , -- No documentation found for Nested "VkPipelineDepthStencilStateCreateInfo" "vkStencilTestEnable"
  vkStencilTestEnable :: VkBool32
  , -- No documentation found for Nested "VkPipelineDepthStencilStateCreateInfo" "vkFront"
  vkFront :: VkStencilOpState
  , -- No documentation found for Nested "VkPipelineDepthStencilStateCreateInfo" "vkBack"
  vkBack :: VkStencilOpState
  , -- No documentation found for Nested "VkPipelineDepthStencilStateCreateInfo" "vkMinDepthBounds"
  vkMinDepthBounds :: CFloat
  , -- No documentation found for Nested "VkPipelineDepthStencilStateCreateInfo" "vkMaxDepthBounds"
  vkMaxDepthBounds :: CFloat
  }
  deriving (Eq, Show)

instance Storable VkPipelineDepthStencilStateCreateInfo where
  sizeOf ~_ = 104
  alignment ~_ = 8
  peek ptr = VkPipelineDepthStencilStateCreateInfo <$> peek (ptr `plusPtr` 0)
                                                   <*> peek (ptr `plusPtr` 8)
                                                   <*> peek (ptr `plusPtr` 16)
                                                   <*> peek (ptr `plusPtr` 20)
                                                   <*> peek (ptr `plusPtr` 24)
                                                   <*> peek (ptr `plusPtr` 28)
                                                   <*> peek (ptr `plusPtr` 32)
                                                   <*> peek (ptr `plusPtr` 36)
                                                   <*> peek (ptr `plusPtr` 40)
                                                   <*> peek (ptr `plusPtr` 68)
                                                   <*> peek (ptr `plusPtr` 96)
                                                   <*> peek (ptr `plusPtr` 100)
  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineDepthStencilStateCreateInfo))
                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineDepthStencilStateCreateInfo))
                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineDepthStencilStateCreateInfo))
                *> poke (ptr `plusPtr` 20) (vkDepthTestEnable (poked :: VkPipelineDepthStencilStateCreateInfo))
                *> poke (ptr `plusPtr` 24) (vkDepthWriteEnable (poked :: VkPipelineDepthStencilStateCreateInfo))
                *> poke (ptr `plusPtr` 28) (vkDepthCompareOp (poked :: VkPipelineDepthStencilStateCreateInfo))
                *> poke (ptr `plusPtr` 32) (vkDepthBoundsTestEnable (poked :: VkPipelineDepthStencilStateCreateInfo))
                *> poke (ptr `plusPtr` 36) (vkStencilTestEnable (poked :: VkPipelineDepthStencilStateCreateInfo))
                *> poke (ptr `plusPtr` 40) (vkFront (poked :: VkPipelineDepthStencilStateCreateInfo))
                *> poke (ptr `plusPtr` 68) (vkBack (poked :: VkPipelineDepthStencilStateCreateInfo))
                *> poke (ptr `plusPtr` 96) (vkMinDepthBounds (poked :: VkPipelineDepthStencilStateCreateInfo))
                *> poke (ptr `plusPtr` 100) (vkMaxDepthBounds (poked :: VkPipelineDepthStencilStateCreateInfo))
-- | VkGraphicsPipelineCreateInfo - Structure specifying parameters of a
-- newly created graphics pipeline
--
-- = Description
-- #_description#
--
-- The parameters @basePipelineHandle@ and @basePipelineIndex@ are
-- described in more detail in
-- <{html_spec_relative}#pipelines-pipeline-derivatives Pipeline Derivatives>.
--
-- @pStages@ points to an array of 'VkPipelineShaderStageCreateInfo'
-- structures, which were previously described in
-- <{html_spec_relative}#pipelines-compute Compute Pipelines>.
--
-- @pDynamicState@ points to a structure of type
-- 'VkPipelineDynamicStateCreateInfo'.
--
-- == Valid Usage
--
-- -   If @flags@ contains the @VK_PIPELINE_CREATE_DERIVATIVE_BIT@ flag,
--     and @basePipelineIndex@ is -1, @basePipelineHandle@ /must/ be a
--     valid handle to a graphics @VkPipeline@
--
-- -   If @flags@ contains the @VK_PIPELINE_CREATE_DERIVATIVE_BIT@ flag,
--     and @basePipelineHandle@ is
--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE',
--     @basePipelineIndex@ /must/ be a valid index into the calling
--     command’s @pCreateInfos@ parameter
--
-- -   If @flags@ contains the @VK_PIPELINE_CREATE_DERIVATIVE_BIT@ flag,
--     and @basePipelineIndex@ is not -1, @basePipelineHandle@ /must/ be
--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE'
--
-- -   If @flags@ contains the @VK_PIPELINE_CREATE_DERIVATIVE_BIT@ flag,
--     and @basePipelineHandle@ is not
--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE',
--     @basePipelineIndex@ /must/ be -1
--
-- -   The @stage@ member of each element of @pStages@ /must/ be unique
--
-- -   The @stage@ member of one element of @pStages@ /must/ be
--     @VK_SHADER_STAGE_VERTEX_BIT@
--
-- -   The @stage@ member of each element of @pStages@ /must/ not be
--     @VK_SHADER_STAGE_COMPUTE_BIT@
--
-- -   If @pStages@ includes a tessellation control shader stage, it /must/
--     include a tessellation evaluation shader stage
--
-- -   If @pStages@ includes a tessellation evaluation shader stage, it
--     /must/ include a tessellation control shader stage
--
-- -   If @pStages@ includes a tessellation control shader stage and a
--     tessellation evaluation shader stage, @pTessellationState@ /must/ be
--     a valid pointer to a valid @VkPipelineTessellationStateCreateInfo@
--     structure
--
-- -   If @pStages@ includes tessellation shader stages, the shader code of
--     at least one stage /must/ contain an @OpExecutionMode@ instruction
--     that specifies the type of subdivision in the pipeline
--
-- -   If @pStages@ includes tessellation shader stages, and the shader
--     code of both stages contain an @OpExecutionMode@ instruction that
--     specifies the type of subdivision in the pipeline, they /must/ both
--     specify the same subdivision mode
--
-- -   If @pStages@ includes tessellation shader stages, the shader code of
--     at least one stage /must/ contain an @OpExecutionMode@ instruction
--     that specifies the output patch size in the pipeline
--
-- -   If @pStages@ includes tessellation shader stages, and the shader
--     code of both contain an @OpExecutionMode@ instruction that specifies
--     the out patch size in the pipeline, they /must/ both specify the
--     same patch size
--
-- -   If @pStages@ includes tessellation shader stages, the @topology@
--     member of @pInputAssembly@ /must/ be
--     @VK_PRIMITIVE_TOPOLOGY_PATCH_LIST@
--
-- -   If the @topology@ member of @pInputAssembly@ is
--     @VK_PRIMITIVE_TOPOLOGY_PATCH_LIST@, @pStages@ /must/ include
--     tessellation shader stages
--
-- -   If @pStages@ includes a geometry shader stage, and does not include
--     any tessellation shader stages, its shader code /must/ contain an
--     @OpExecutionMode@ instruction that specifies an input primitive type
--     that is <{html_spec_relative}#shaders-geometry-execution compatible>
--     with the primitive topology specified in @pInputAssembly@
--
-- -   If @pStages@ includes a geometry shader stage, and also includes
--     tessellation shader stages, its shader code /must/ contain an
--     @OpExecutionMode@ instruction that specifies an input primitive type
--     that is <{html_spec_relative}#shaders-geometry-execution compatible>
--     with the primitive topology that is output by the tessellation
--     stages
--
-- -   If @pStages@ includes a fragment shader stage and a geometry shader
--     stage, and the fragment shader code reads from an input variable
--     that is decorated with @PrimitiveID@, then the geometry shader code
--     /must/ write to a matching output variable, decorated with
--     @PrimitiveID@, in all execution paths
--
-- -   If @pStages@ includes a fragment shader stage, its shader code
--     /must/ not read from any input attachment that is defined as
--     @VK_ATTACHMENT_UNUSED@ in @subpass@
--
-- -   The shader code for the entry points identified by @pStages@, and
--     the rest of the state identified by this structure /must/ adhere to
--     the pipeline linking rules described in the
--     <{html_spec_relative}#interfaces Shader Interfaces> chapter
--
-- -   If rasterization is not disabled and @subpass@ uses a depth\/stencil
--     attachment in @renderPass@ that has a layout of
--     @VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL@ in the
--     @VkAttachmentReference@ defined by @subpass@, the @depthWriteEnable@
--     member of @pDepthStencilState@ /must/ be @VK_FALSE@
--
-- -   If rasterization is not disabled and @subpass@ uses a depth\/stencil
--     attachment in @renderPass@ that has a layout of
--     @VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL@ in the
--     @VkAttachmentReference@ defined by @subpass@, the @failOp@, @passOp@
--     and @depthFailOp@ members of each of the @front@ and @back@ members
--     of @pDepthStencilState@ /must/ be @VK_STENCIL_OP_KEEP@
--
-- -   If rasterization is not disabled and the subpass uses color
--     attachments, then for each color attachment in the subpass the
--     @blendEnable@ member of the corresponding element of the
--     @pAttachment@ member of @pColorBlendState@ /must/ be @VK_FALSE@ if
--     the @format@ of the attachment does not support color blend
--     operations, as specified by the
--     @VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT@ flag in
--     @VkFormatProperties@::@linearTilingFeatures@ or
--     @VkFormatProperties@::@optimalTilingFeatures@ returned by
--     @vkGetPhysicalDeviceFormatProperties@
--
-- -   If rasterization is not disabled and the subpass uses color
--     attachments, the @attachmentCount@ member of @pColorBlendState@
--     /must/ be equal to the @colorAttachmentCount@ used to create
--     @subpass@
--
-- -   If no element of the @pDynamicStates@ member of @pDynamicState@ is
--     @VK_DYNAMIC_STATE_VIEWPORT@, the @pViewports@ member of
--     @pViewportState@ /must/ be a valid pointer to an array of
--     @pViewportState@::@viewportCount@ @VkViewport@ structures
--
-- -   If no element of the @pDynamicStates@ member of @pDynamicState@ is
--     @VK_DYNAMIC_STATE_SCISSOR@, the @pScissors@ member of
--     @pViewportState@ /must/ be a valid pointer to an array of
--     @pViewportState@::@scissorCount@ @VkRect2D@ structures
--
-- -   If the wide lines feature is not enabled, and no element of the
--     @pDynamicStates@ member of @pDynamicState@ is
--     @VK_DYNAMIC_STATE_LINE_WIDTH@, the @lineWidth@ member of
--     @pRasterizationState@ /must/ be @1.0@
--
-- -   If the @rasterizerDiscardEnable@ member of @pRasterizationState@ is
--     @VK_FALSE@, @pViewportState@ /must/ be a valid pointer to a valid
--     @VkPipelineViewportStateCreateInfo@ structure
--
-- -   If the @rasterizerDiscardEnable@ member of @pRasterizationState@ is
--     @VK_FALSE@, @pMultisampleState@ /must/ be a valid pointer to a valid
--     @VkPipelineMultisampleStateCreateInfo@ structure
--
-- -   If the @rasterizerDiscardEnable@ member of @pRasterizationState@ is
--     @VK_FALSE@, and @subpass@ uses a depth\/stencil attachment,
--     @pDepthStencilState@ /must/ be a valid pointer to a valid
--     @VkPipelineDepthStencilStateCreateInfo@ structure
--
-- -   If the @rasterizerDiscardEnable@ member of @pRasterizationState@ is
--     @VK_FALSE@, and @subpass@ uses color attachments, @pColorBlendState@
--     /must/ be a valid pointer to a valid
--     @VkPipelineColorBlendStateCreateInfo@ structure
--
-- -   If the depth bias clamping feature is not enabled, no element of the
--     @pDynamicStates@ member of @pDynamicState@ is
--     @VK_DYNAMIC_STATE_DEPTH_BIAS@, and the @depthBiasEnable@ member of
--     @pRasterizationState@ is @VK_TRUE@, the @depthBiasClamp@ member of
--     @pRasterizationState@ /must/ be @0.0@
--
-- -   If no element of the @pDynamicStates@ member of @pDynamicState@ is
--     @VK_DYNAMIC_STATE_DEPTH_BOUNDS@, and the @depthBoundsTestEnable@
--     member of @pDepthStencilState@ is @VK_TRUE@, the @minDepthBounds@
--     and @maxDepthBounds@ members of @pDepthStencilState@ /must/ be
--     between @0.0@ and @1.0@, inclusive
--
-- -   @layout@ /must/ be
--     <{html_spec_relative}#descriptorsets-pipelinelayout-consistency consistent>
--     with all shaders specified in @pStages@
--
-- -   If @subpass@ uses color and\/or depth\/stencil attachments, then the
--     @rasterizationSamples@ member of @pMultisampleState@ /must/ be the
--     same as the sample count for those subpass attachments
--
-- -   If @subpass@ does not use any color and\/or depth\/stencil
--     attachments, then the @rasterizationSamples@ member of
--     @pMultisampleState@ /must/ follow the rules for a
--     <{html_spec_relative}#renderpass-noattachments zero-attachment subpass>
--
-- -   @subpass@ /must/ be a valid subpass within @renderPass@
--
-- -   The number of resources in @layout@ accessible to each shader stage
--     that is used by the pipeline /must/ be less than or equal to
--     @VkPhysicalDeviceLimits@::@maxPerStageResources@
--
-- == Valid Usage (Implicit)
--
-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO@
--
-- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
--     'Graphics.Vulkan.Extensions.VK_EXT_discard_rectangles.VkPipelineDiscardRectangleStateCreateInfoEXT'
--
-- -   @flags@ /must/ be a valid combination of 'VkPipelineCreateFlagBits'
--     values
--
-- -   @pStages@ /must/ be a valid pointer to an array of @stageCount@
--     valid @VkPipelineShaderStageCreateInfo@ structures
--
-- -   @pVertexInputState@ /must/ be a valid pointer to a valid
--     @VkPipelineVertexInputStateCreateInfo@ structure
--
-- -   @pInputAssemblyState@ /must/ be a valid pointer to a valid
--     @VkPipelineInputAssemblyStateCreateInfo@ structure
--
-- -   @pRasterizationState@ /must/ be a valid pointer to a valid
--     @VkPipelineRasterizationStateCreateInfo@ structure
--
-- -   If @pDynamicState@ is not @NULL@, @pDynamicState@ /must/ be a valid
--     pointer to a valid @VkPipelineDynamicStateCreateInfo@ structure
--
-- -   @layout@ /must/ be a valid @VkPipelineLayout@ handle
--
-- -   @renderPass@ /must/ be a valid @VkRenderPass@ handle
--
-- -   @stageCount@ /must/ be greater than @0@
--
-- -   Each of @basePipelineHandle@, @layout@, and @renderPass@ that are
--     valid handles /must/ have been created, allocated, or retrieved from
--     the same @VkDevice@
--
-- = See Also
-- #_see_also#
--
-- 'VkPipeline', 'VkPipelineColorBlendStateCreateInfo',
-- 'VkPipelineCreateFlags', 'VkPipelineDepthStencilStateCreateInfo',
-- 'VkPipelineDynamicStateCreateInfo',
-- 'VkPipelineInputAssemblyStateCreateInfo', 'VkPipelineLayout',
-- 'VkPipelineMultisampleStateCreateInfo',
-- 'VkPipelineRasterizationStateCreateInfo',
-- 'VkPipelineShaderStageCreateInfo',
-- 'VkPipelineTessellationStateCreateInfo',
-- 'VkPipelineVertexInputStateCreateInfo',
-- 'VkPipelineViewportStateCreateInfo', 'VkRenderPass',
-- 'Graphics.Vulkan.Core10.Core.VkStructureType',
-- 'vkCreateGraphicsPipelines'
data VkGraphicsPipelineCreateInfo = VkGraphicsPipelineCreateInfo
  { -- No documentation found for Nested "VkGraphicsPipelineCreateInfo" "vkSType"
  vkSType :: VkStructureType
  , -- No documentation found for Nested "VkGraphicsPipelineCreateInfo" "vkPNext"
  vkPNext :: Ptr ()
  , -- No documentation found for Nested "VkGraphicsPipelineCreateInfo" "vkFlags"
  vkFlags :: VkPipelineCreateFlags
  , -- No documentation found for Nested "VkGraphicsPipelineCreateInfo" "vkStageCount"
  vkStageCount :: Word32
  , -- No documentation found for Nested "VkGraphicsPipelineCreateInfo" "vkPStages"
  vkPStages :: Ptr VkPipelineShaderStageCreateInfo
  , -- No documentation found for Nested "VkGraphicsPipelineCreateInfo" "vkPVertexInputState"
  vkPVertexInputState :: Ptr VkPipelineVertexInputStateCreateInfo
  , -- No documentation found for Nested "VkGraphicsPipelineCreateInfo" "vkPInputAssemblyState"
  vkPInputAssemblyState :: Ptr VkPipelineInputAssemblyStateCreateInfo
  , -- No documentation found for Nested "VkGraphicsPipelineCreateInfo" "vkPTessellationState"
  vkPTessellationState :: Ptr VkPipelineTessellationStateCreateInfo
  , -- No documentation found for Nested "VkGraphicsPipelineCreateInfo" "vkPViewportState"
  vkPViewportState :: Ptr VkPipelineViewportStateCreateInfo
  , -- No documentation found for Nested "VkGraphicsPipelineCreateInfo" "vkPRasterizationState"
  vkPRasterizationState :: Ptr VkPipelineRasterizationStateCreateInfo
  , -- No documentation found for Nested "VkGraphicsPipelineCreateInfo" "vkPMultisampleState"
  vkPMultisampleState :: Ptr VkPipelineMultisampleStateCreateInfo
  , -- No documentation found for Nested "VkGraphicsPipelineCreateInfo" "vkPDepthStencilState"
  vkPDepthStencilState :: Ptr VkPipelineDepthStencilStateCreateInfo
  , -- No documentation found for Nested "VkGraphicsPipelineCreateInfo" "vkPColorBlendState"
  vkPColorBlendState :: Ptr VkPipelineColorBlendStateCreateInfo
  , -- No documentation found for Nested "VkGraphicsPipelineCreateInfo" "vkPDynamicState"
  vkPDynamicState :: Ptr VkPipelineDynamicStateCreateInfo
  , -- No documentation found for Nested "VkGraphicsPipelineCreateInfo" "vkLayout"
  vkLayout :: VkPipelineLayout
  , -- No documentation found for Nested "VkGraphicsPipelineCreateInfo" "vkRenderPass"
  vkRenderPass :: VkRenderPass
  , -- No documentation found for Nested "VkGraphicsPipelineCreateInfo" "vkSubpass"
  vkSubpass :: Word32
  , -- No documentation found for Nested "VkGraphicsPipelineCreateInfo" "vkBasePipelineHandle"
  vkBasePipelineHandle :: VkPipeline
  , -- No documentation found for Nested "VkGraphicsPipelineCreateInfo" "vkBasePipelineIndex"
  vkBasePipelineIndex :: Int32
  }
  deriving (Eq, Show)

instance Storable VkGraphicsPipelineCreateInfo where
  sizeOf ~_ = 144
  alignment ~_ = 8
  peek ptr = VkGraphicsPipelineCreateInfo <$> peek (ptr `plusPtr` 0)
                                          <*> peek (ptr `plusPtr` 8)
                                          <*> peek (ptr `plusPtr` 16)
                                          <*> peek (ptr `plusPtr` 20)
                                          <*> peek (ptr `plusPtr` 24)
                                          <*> peek (ptr `plusPtr` 32)
                                          <*> peek (ptr `plusPtr` 40)
                                          <*> peek (ptr `plusPtr` 48)
                                          <*> peek (ptr `plusPtr` 56)
                                          <*> peek (ptr `plusPtr` 64)
                                          <*> peek (ptr `plusPtr` 72)
                                          <*> peek (ptr `plusPtr` 80)
                                          <*> peek (ptr `plusPtr` 88)
                                          <*> peek (ptr `plusPtr` 96)
                                          <*> peek (ptr `plusPtr` 104)
                                          <*> peek (ptr `plusPtr` 112)
                                          <*> peek (ptr `plusPtr` 120)
                                          <*> peek (ptr `plusPtr` 128)
                                          <*> peek (ptr `plusPtr` 136)
  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkGraphicsPipelineCreateInfo))
                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkGraphicsPipelineCreateInfo))
                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkGraphicsPipelineCreateInfo))
                *> poke (ptr `plusPtr` 20) (vkStageCount (poked :: VkGraphicsPipelineCreateInfo))
                *> poke (ptr `plusPtr` 24) (vkPStages (poked :: VkGraphicsPipelineCreateInfo))
                *> poke (ptr `plusPtr` 32) (vkPVertexInputState (poked :: VkGraphicsPipelineCreateInfo))
                *> poke (ptr `plusPtr` 40) (vkPInputAssemblyState (poked :: VkGraphicsPipelineCreateInfo))
                *> poke (ptr `plusPtr` 48) (vkPTessellationState (poked :: VkGraphicsPipelineCreateInfo))
                *> poke (ptr `plusPtr` 56) (vkPViewportState (poked :: VkGraphicsPipelineCreateInfo))
                *> poke (ptr `plusPtr` 64) (vkPRasterizationState (poked :: VkGraphicsPipelineCreateInfo))
                *> poke (ptr `plusPtr` 72) (vkPMultisampleState (poked :: VkGraphicsPipelineCreateInfo))
                *> poke (ptr `plusPtr` 80) (vkPDepthStencilState (poked :: VkGraphicsPipelineCreateInfo))
                *> poke (ptr `plusPtr` 88) (vkPColorBlendState (poked :: VkGraphicsPipelineCreateInfo))
                *> poke (ptr `plusPtr` 96) (vkPDynamicState (poked :: VkGraphicsPipelineCreateInfo))
                *> poke (ptr `plusPtr` 104) (vkLayout (poked :: VkGraphicsPipelineCreateInfo))
                *> poke (ptr `plusPtr` 112) (vkRenderPass (poked :: VkGraphicsPipelineCreateInfo))
                *> poke (ptr `plusPtr` 120) (vkSubpass (poked :: VkGraphicsPipelineCreateInfo))
                *> poke (ptr `plusPtr` 128) (vkBasePipelineHandle (poked :: VkGraphicsPipelineCreateInfo))
                *> poke (ptr `plusPtr` 136) (vkBasePipelineIndex (poked :: VkGraphicsPipelineCreateInfo))
-- | VkPipelineCreateFlags - Bitmask of VkPipelineCreateFlagBits
--
-- = Description
-- #_description#
--
-- @VkPipelineCreateFlags@ is a bitmask type for setting a mask of zero or
-- more 'VkPipelineCreateFlagBits'.
--
-- = See Also
-- #_see_also#
--
-- 'VkComputePipelineCreateInfo', 'VkGraphicsPipelineCreateInfo',
-- 'VkPipelineCreateFlagBits'
type VkPipelineCreateFlags = VkPipelineCreateFlagBits
-- | VkColorComponentFlags - Bitmask of VkColorComponentFlagBits
--
-- = Description
-- #_description#
--
-- @VkColorComponentFlags@ is a bitmask type for setting a mask of zero or
-- more 'VkColorComponentFlagBits'.
--
-- = See Also
-- #_see_also#
--
-- 'VkColorComponentFlagBits', 'VkPipelineColorBlendAttachmentState'
type VkColorComponentFlags = VkColorComponentFlagBits
-- | VkCullModeFlags - Bitmask of VkCullModeFlagBits
--
-- = Description
-- #_description#
--
-- @VkCullModeFlags@ is a bitmask type for setting a mask of zero or more
-- 'VkCullModeFlagBits'.
--
-- = See Also
-- #_see_also#
--
-- 'VkCullModeFlagBits', 'VkPipelineRasterizationStateCreateInfo'
type VkCullModeFlags = VkCullModeFlagBits
-- | VkSampleMask - Mask of sample coverage information
--
-- = Description
-- #_description#
--
-- = See Also
-- #_see_also#
--
-- 'VkPipelineMultisampleStateCreateInfo'
type VkSampleMask = Word32