{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE Strict #-}
{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
module Graphics.Vulkan.Pipeline where
import Graphics.Vulkan.Device( VkDevice(..)
)
import {-# SOURCE #-} Graphics.Vulkan.Pass( VkRenderPass(..)
)
import Data.Word( Word64
, Word32
)
import Foreign.Ptr( Ptr
, plusPtr
)
import Graphics.Vulkan.PipelineCache( VkPipelineCache(..)
)
import Data.Int( Int32
)
import Data.Vector.Fixed.Cont( ToPeano
)
import Data.Bits( Bits
, FiniteBits
)
import Foreign.Storable( Storable(..)
)
import Data.Void( Void
)
import Graphics.Vulkan.Memory( VkInternalAllocationType(..)
, PFN_vkAllocationFunction
, PFN_vkReallocationFunction
, PFN_vkInternalAllocationNotification
, VkAllocationCallbacks(..)
, VkSystemAllocationScope(..)
, PFN_vkFreeFunction
, PFN_vkInternalFreeNotification
)
import Graphics.Vulkan.PipelineLayout( VkPipelineLayout(..)
)
import Graphics.Vulkan.Shader( VkShaderStageFlagBits(..)
, VkShaderModule(..)
)
import Graphics.Vulkan.Sampler( VkSampleCountFlagBits(..)
, VkCompareOp(..)
)
import Data.Vector.Fixed.Storable( Vec
)
import Graphics.Vulkan.Core( VkResult(..)
, VkBool32(..)
, VkExtent2D(..)
, VkFlags(..)
, VkFormat(..)
, VkOffset2D(..)
, VkRect2D(..)
, VkViewport(..)
, VkStructureType(..)
)
import Foreign.C.Types( CSize
, CFloat
, CFloat(..)
, CChar
, CSize(..)
)
data VkPipelineTessellationStateCreateInfo =
VkPipelineTessellationStateCreateInfo{ vkSType :: VkStructureType
, vkPNext :: Ptr Void
, vkFlags :: VkPipelineTessellationStateCreateFlags
, vkPatchControlPoints :: Word32
}
deriving (Eq)
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))
data VkVertexInputAttributeDescription =
VkVertexInputAttributeDescription{ vkLocation :: Word32
, vkBinding :: Word32
, vkFormat :: VkFormat
, vkOffset :: Word32
}
deriving (Eq)
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))
data VkGraphicsPipelineCreateInfo =
VkGraphicsPipelineCreateInfo{ vkSType :: VkStructureType
, vkPNext :: Ptr Void
, vkFlags :: VkPipelineCreateFlags
, vkStageCount :: Word32
, vkPStages :: Ptr VkPipelineShaderStageCreateInfo
, vkPVertexInputState :: Ptr VkPipelineVertexInputStateCreateInfo
, vkPInputAssemblyState :: Ptr VkPipelineInputAssemblyStateCreateInfo
, vkPTessellationState :: Ptr VkPipelineTessellationStateCreateInfo
, vkPViewportState :: Ptr VkPipelineViewportStateCreateInfo
, vkPRasterizationState :: Ptr VkPipelineRasterizationStateCreateInfo
, vkPMultisampleState :: Ptr VkPipelineMultisampleStateCreateInfo
, vkPDepthStencilState :: Ptr VkPipelineDepthStencilStateCreateInfo
, vkPColorBlendState :: Ptr VkPipelineColorBlendStateCreateInfo
, vkPDynamicState :: Ptr VkPipelineDynamicStateCreateInfo
, vkLayout :: VkPipelineLayout
, vkRenderPass :: VkRenderPass
, vkSubpass :: Word32
, vkBasePipelineHandle :: VkPipeline
, vkBasePipelineIndex :: Int32
}
deriving (Eq)
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))
newtype VkCullModeFlagBits = VkCullModeFlagBits VkFlags
deriving (Eq, Storable, Bits, FiniteBits)
type VkCullModeFlags = VkCullModeFlagBits
pattern VK_CULL_MODE_FRONT_BIT = VkCullModeFlagBits 0x1
pattern VK_CULL_MODE_BACK_BIT = VkCullModeFlagBits 0x2
pattern VK_CULL_MODE_NONE = VkCullModeFlagBits 0x0
pattern VK_CULL_MODE_FRONT_AND_BACK = VkCullModeFlagBits 0x3
newtype VkPipelineDepthStencilStateCreateFlags = VkPipelineDepthStencilStateCreateFlags VkFlags
deriving (Eq, Storable)
data VkPipelineShaderStageCreateInfo =
VkPipelineShaderStageCreateInfo{ vkSType :: VkStructureType
, vkPNext :: Ptr Void
, vkFlags :: VkPipelineShaderStageCreateFlags
, vkStage :: VkShaderStageFlagBits
, vkModule :: VkShaderModule
, vkPName :: Ptr CChar
, vkPSpecializationInfo :: Ptr VkSpecializationInfo
}
deriving (Eq)
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))
newtype VkColorComponentFlagBits = VkColorComponentFlagBits VkFlags
deriving (Eq, Storable, Bits, FiniteBits)
type VkColorComponentFlags = VkColorComponentFlagBits
pattern VK_COLOR_COMPONENT_R_BIT = VkColorComponentFlagBits 0x1
pattern VK_COLOR_COMPONENT_G_BIT = VkColorComponentFlagBits 0x2
pattern VK_COLOR_COMPONENT_B_BIT = VkColorComponentFlagBits 0x4
pattern VK_COLOR_COMPONENT_A_BIT = VkColorComponentFlagBits 0x8
data VkComputePipelineCreateInfo =
VkComputePipelineCreateInfo{ vkSType :: VkStructureType
, vkPNext :: Ptr Void
, vkFlags :: VkPipelineCreateFlags
, vkStage :: VkPipelineShaderStageCreateInfo
, vkLayout :: VkPipelineLayout
, vkBasePipelineHandle :: VkPipeline
, vkBasePipelineIndex :: Int32
}
deriving (Eq)
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))
newtype VkStencilOp = VkStencilOp Int32
deriving (Eq, Storable)
pattern VK_STENCIL_OP_KEEP = VkStencilOp 0
pattern VK_STENCIL_OP_ZERO = VkStencilOp 1
pattern VK_STENCIL_OP_REPLACE = VkStencilOp 2
pattern VK_STENCIL_OP_INCREMENT_AND_CLAMP = VkStencilOp 3
pattern VK_STENCIL_OP_DECREMENT_AND_CLAMP = VkStencilOp 4
pattern VK_STENCIL_OP_INVERT = VkStencilOp 5
pattern VK_STENCIL_OP_INCREMENT_AND_WRAP = VkStencilOp 6
pattern VK_STENCIL_OP_DECREMENT_AND_WRAP = VkStencilOp 7
data VkSpecializationInfo =
VkSpecializationInfo{ vkMapEntryCount :: Word32
, vkPMapEntries :: Ptr VkSpecializationMapEntry
, vkDataSize :: CSize
, vkPData :: Ptr Void
}
deriving (Eq)
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))
newtype VkPipelineColorBlendStateCreateFlags = VkPipelineColorBlendStateCreateFlags VkFlags
deriving (Eq, Storable)
newtype VkPipeline = VkPipeline Word64
deriving (Eq, Storable)
newtype VkPipelineInputAssemblyStateCreateFlags = VkPipelineInputAssemblyStateCreateFlags VkFlags
deriving (Eq, Storable)
foreign import ccall "vkCreateGraphicsPipelines" vkCreateGraphicsPipelines ::
VkDevice ->
VkPipelineCache ->
Word32 ->
Ptr VkGraphicsPipelineCreateInfo ->
Ptr VkAllocationCallbacks -> Ptr VkPipeline -> IO VkResult
newtype VkFrontFace = VkFrontFace Int32
deriving (Eq, Storable)
pattern VK_FRONT_FACE_COUNTER_CLOCKWISE = VkFrontFace 0
pattern VK_FRONT_FACE_CLOCKWISE = VkFrontFace 1
newtype VkPolygonMode = VkPolygonMode Int32
deriving (Eq, Storable)
pattern VK_POLYGON_MODE_FILL = VkPolygonMode 0
pattern VK_POLYGON_MODE_LINE = VkPolygonMode 1
pattern VK_POLYGON_MODE_POINT = VkPolygonMode 2
newtype VkPipelineViewportStateCreateFlags = VkPipelineViewportStateCreateFlags VkFlags
deriving (Eq, Storable)
newtype VkLogicOp = VkLogicOp Int32
deriving (Eq, Storable)
pattern VK_LOGIC_OP_CLEAR = VkLogicOp 0
pattern VK_LOGIC_OP_AND = VkLogicOp 1
pattern VK_LOGIC_OP_AND_REVERSE = VkLogicOp 2
pattern VK_LOGIC_OP_COPY = VkLogicOp 3
pattern VK_LOGIC_OP_AND_INVERTED = VkLogicOp 4
pattern VK_LOGIC_OP_NO_OP = VkLogicOp 5
pattern VK_LOGIC_OP_XOR = VkLogicOp 6
pattern VK_LOGIC_OP_OR = VkLogicOp 7
pattern VK_LOGIC_OP_NOR = VkLogicOp 8
pattern VK_LOGIC_OP_EQUIVALENT = VkLogicOp 9
pattern VK_LOGIC_OP_INVERT = VkLogicOp 10
pattern VK_LOGIC_OP_OR_REVERSE = VkLogicOp 11
pattern VK_LOGIC_OP_COPY_INVERTED = VkLogicOp 12
pattern VK_LOGIC_OP_OR_INVERTED = VkLogicOp 13
pattern VK_LOGIC_OP_NAND = VkLogicOp 14
pattern VK_LOGIC_OP_SET = VkLogicOp 15
newtype VkPipelineCreateFlagBits = VkPipelineCreateFlagBits VkFlags
deriving (Eq, Storable, Bits, FiniteBits)
type VkPipelineCreateFlags = VkPipelineCreateFlagBits
pattern VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT = VkPipelineCreateFlagBits 0x1
pattern VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT = VkPipelineCreateFlagBits 0x2
pattern VK_PIPELINE_CREATE_DERIVATIVE_BIT = VkPipelineCreateFlagBits 0x4
newtype VkPipelineRasterizationStateCreateFlags = VkPipelineRasterizationStateCreateFlags VkFlags
deriving (Eq, Storable)
newtype VkDynamicState = VkDynamicState Int32
deriving (Eq, Storable)
pattern VK_DYNAMIC_STATE_VIEWPORT = VkDynamicState 0
pattern VK_DYNAMIC_STATE_SCISSOR = VkDynamicState 1
pattern VK_DYNAMIC_STATE_LINE_WIDTH = VkDynamicState 2
pattern VK_DYNAMIC_STATE_DEPTH_BIAS = VkDynamicState 3
pattern VK_DYNAMIC_STATE_BLEND_CONSTANTS = VkDynamicState 4
pattern VK_DYNAMIC_STATE_DEPTH_BOUNDS = VkDynamicState 5
pattern VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK = VkDynamicState 6
pattern VK_DYNAMIC_STATE_STENCIL_WRITE_MASK = VkDynamicState 7
pattern VK_DYNAMIC_STATE_STENCIL_REFERENCE = VkDynamicState 8
newtype VkPipelineBindPoint = VkPipelineBindPoint Int32
deriving (Eq, Storable)
pattern VK_PIPELINE_BIND_POINT_GRAPHICS = VkPipelineBindPoint 0
pattern VK_PIPELINE_BIND_POINT_COMPUTE = VkPipelineBindPoint 1
newtype VkPipelineDynamicStateCreateFlags = VkPipelineDynamicStateCreateFlags VkFlags
deriving (Eq, Storable)
data VkPipelineRasterizationStateCreateInfo =
VkPipelineRasterizationStateCreateInfo{ vkSType :: VkStructureType
, vkPNext :: Ptr Void
, vkFlags :: VkPipelineRasterizationStateCreateFlags
, vkDepthClampEnable :: VkBool32
, vkRasterizerDiscardEnable :: VkBool32
, vkPolygonMode :: VkPolygonMode
, vkCullMode :: VkCullModeFlags
, vkFrontFace :: VkFrontFace
, vkDepthBiasEnable :: VkBool32
, vkDepthBiasConstantFactor :: CFloat
, vkDepthBiasClamp :: CFloat
, vkDepthBiasSlopeFactor :: CFloat
, vkLineWidth :: CFloat
}
deriving (Eq)
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))
newtype VkBlendOp = VkBlendOp Int32
deriving (Eq, Storable)
pattern VK_BLEND_OP_ADD = VkBlendOp 0
pattern VK_BLEND_OP_SUBTRACT = VkBlendOp 1
pattern VK_BLEND_OP_REVERSE_SUBTRACT = VkBlendOp 2
pattern VK_BLEND_OP_MIN = VkBlendOp 3
pattern VK_BLEND_OP_MAX = VkBlendOp 4
foreign import ccall "vkDestroyPipeline" vkDestroyPipeline ::
VkDevice -> VkPipeline -> Ptr VkAllocationCallbacks -> IO ()
newtype VkPipelineShaderStageCreateFlags = VkPipelineShaderStageCreateFlags VkFlags
deriving (Eq, Storable)
data VkPipelineViewportStateCreateInfo =
VkPipelineViewportStateCreateInfo{ vkSType :: VkStructureType
, vkPNext :: Ptr Void
, vkFlags :: VkPipelineViewportStateCreateFlags
, vkViewportCount :: Word32
, vkPViewports :: Ptr VkViewport
, vkScissorCount :: Word32
, vkPScissors :: Ptr VkRect2D
}
deriving (Eq)
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))
newtype VkPipelineTessellationStateCreateFlags = VkPipelineTessellationStateCreateFlags VkFlags
deriving (Eq, Storable)
data VkPipelineVertexInputStateCreateInfo =
VkPipelineVertexInputStateCreateInfo{ vkSType :: VkStructureType
, vkPNext :: Ptr Void
, vkFlags :: VkPipelineVertexInputStateCreateFlags
, vkVertexBindingDescriptionCount :: Word32
, vkPVertexBindingDescriptions :: Ptr VkVertexInputBindingDescription
, vkVertexAttributeDescriptionCount :: Word32
, vkPVertexAttributeDescriptions :: Ptr VkVertexInputAttributeDescription
}
deriving (Eq)
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))
newtype VkPrimitiveTopology = VkPrimitiveTopology Int32
deriving (Eq, Storable)
pattern VK_PRIMITIVE_TOPOLOGY_POINT_LIST = VkPrimitiveTopology 0
pattern VK_PRIMITIVE_TOPOLOGY_LINE_LIST = VkPrimitiveTopology 1
pattern VK_PRIMITIVE_TOPOLOGY_LINE_STRIP = VkPrimitiveTopology 2
pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST = VkPrimitiveTopology 3
pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP = VkPrimitiveTopology 4
pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN = VkPrimitiveTopology 5
pattern VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY = VkPrimitiveTopology 6
pattern VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY = VkPrimitiveTopology 7
pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY = VkPrimitiveTopology 8
pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY = VkPrimitiveTopology 9
pattern VK_PRIMITIVE_TOPOLOGY_PATCH_LIST = VkPrimitiveTopology 10
data VkPipelineInputAssemblyStateCreateInfo =
VkPipelineInputAssemblyStateCreateInfo{ vkSType :: VkStructureType
, vkPNext :: Ptr Void
, vkFlags :: VkPipelineInputAssemblyStateCreateFlags
, vkTopology :: VkPrimitiveTopology
, vkPrimitiveRestartEnable :: VkBool32
}
deriving (Eq)
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))
data VkPipelineColorBlendStateCreateInfo =
VkPipelineColorBlendStateCreateInfo{ vkSType :: VkStructureType
, vkPNext :: Ptr Void
, vkFlags :: VkPipelineColorBlendStateCreateFlags
, vkLogicOpEnable :: VkBool32
, vkLogicOp :: VkLogicOp
, vkAttachmentCount :: Word32
, vkPAttachments :: Ptr VkPipelineColorBlendAttachmentState
, vkBlendConstants :: Vec (ToPeano 4) CFloat
}
deriving (Eq)
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))
data VkPipelineDynamicStateCreateInfo =
VkPipelineDynamicStateCreateInfo{ vkSType :: VkStructureType
, vkPNext :: Ptr Void
, vkFlags :: VkPipelineDynamicStateCreateFlags
, vkDynamicStateCount :: Word32
, vkPDynamicStates :: Ptr VkDynamicState
}
deriving (Eq)
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))
data VkSpecializationMapEntry =
VkSpecializationMapEntry{ vkConstantID :: Word32
, vkOffset :: Word32
, vkSize :: CSize
}
deriving (Eq)
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))
newtype VkPipelineVertexInputStateCreateFlags = VkPipelineVertexInputStateCreateFlags VkFlags
deriving (Eq, Storable)
newtype VkVertexInputRate = VkVertexInputRate Int32
deriving (Eq, Storable)
pattern VK_VERTEX_INPUT_RATE_VERTEX = VkVertexInputRate 0
pattern VK_VERTEX_INPUT_RATE_INSTANCE = VkVertexInputRate 1
newtype VkPipelineStageFlagBits = VkPipelineStageFlagBits VkFlags
deriving (Eq, Storable, Bits, FiniteBits)
type VkPipelineStageFlags = VkPipelineStageFlagBits
pattern VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT = VkPipelineStageFlagBits 0x1
pattern VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT = VkPipelineStageFlagBits 0x2
pattern VK_PIPELINE_STAGE_VERTEX_INPUT_BIT = VkPipelineStageFlagBits 0x4
pattern VK_PIPELINE_STAGE_VERTEX_SHADER_BIT = VkPipelineStageFlagBits 0x8
pattern VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT = VkPipelineStageFlagBits 0x10
pattern VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT = VkPipelineStageFlagBits 0x20
pattern VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT = VkPipelineStageFlagBits 0x40
pattern VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT = VkPipelineStageFlagBits 0x80
pattern VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT = VkPipelineStageFlagBits 0x100
pattern VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT = VkPipelineStageFlagBits 0x200
pattern VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT = VkPipelineStageFlagBits 0x400
pattern VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT = VkPipelineStageFlagBits 0x800
pattern VK_PIPELINE_STAGE_TRANSFER_BIT = VkPipelineStageFlagBits 0x1000
pattern VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT = VkPipelineStageFlagBits 0x2000
pattern VK_PIPELINE_STAGE_HOST_BIT = VkPipelineStageFlagBits 0x4000
pattern VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT = VkPipelineStageFlagBits 0x8000
pattern VK_PIPELINE_STAGE_ALL_COMMANDS_BIT = VkPipelineStageFlagBits 0x10000
data VkPipelineColorBlendAttachmentState =
VkPipelineColorBlendAttachmentState{ vkBlendEnable :: VkBool32
, vkSrcColorBlendFactor :: VkBlendFactor
, vkDstColorBlendFactor :: VkBlendFactor
, vkColorBlendOp :: VkBlendOp
, vkSrcAlphaBlendFactor :: VkBlendFactor
, vkDstAlphaBlendFactor :: VkBlendFactor
, vkAlphaBlendOp :: VkBlendOp
, vkColorWriteMask :: VkColorComponentFlags
}
deriving (Eq)
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))
newtype VkBlendFactor = VkBlendFactor Int32
deriving (Eq, Storable)
pattern VK_BLEND_FACTOR_ZERO = VkBlendFactor 0
pattern VK_BLEND_FACTOR_ONE = VkBlendFactor 1
pattern VK_BLEND_FACTOR_SRC_COLOR = VkBlendFactor 2
pattern VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR = VkBlendFactor 3
pattern VK_BLEND_FACTOR_DST_COLOR = VkBlendFactor 4
pattern VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR = VkBlendFactor 5
pattern VK_BLEND_FACTOR_SRC_ALPHA = VkBlendFactor 6
pattern VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA = VkBlendFactor 7
pattern VK_BLEND_FACTOR_DST_ALPHA = VkBlendFactor 8
pattern VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA = VkBlendFactor 9
pattern VK_BLEND_FACTOR_CONSTANT_COLOR = VkBlendFactor 10
pattern VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR = VkBlendFactor 11
pattern VK_BLEND_FACTOR_CONSTANT_ALPHA = VkBlendFactor 12
pattern VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA = VkBlendFactor 13
pattern VK_BLEND_FACTOR_SRC_ALPHA_SATURATE = VkBlendFactor 14
pattern VK_BLEND_FACTOR_SRC1_COLOR = VkBlendFactor 15
pattern VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR = VkBlendFactor 16
pattern VK_BLEND_FACTOR_SRC1_ALPHA = VkBlendFactor 17
pattern VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA = VkBlendFactor 18
newtype VkSampleMask = VkSampleMask Word32
deriving (Eq, Storable)
newtype VkPipelineMultisampleStateCreateFlags = VkPipelineMultisampleStateCreateFlags VkFlags
deriving (Eq, Storable)
data VkPipelineMultisampleStateCreateInfo =
VkPipelineMultisampleStateCreateInfo{ vkSType :: VkStructureType
, vkPNext :: Ptr Void
, vkFlags :: VkPipelineMultisampleStateCreateFlags
, vkRasterizationSamples :: VkSampleCountFlagBits
, vkSampleShadingEnable :: VkBool32
, vkMinSampleShading :: CFloat
, vkPSampleMask :: Ptr VkSampleMask
, vkAlphaToCoverageEnable :: VkBool32
, vkAlphaToOneEnable :: VkBool32
}
deriving (Eq)
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))
data VkVertexInputBindingDescription =
VkVertexInputBindingDescription{ vkBinding :: Word32
, vkStride :: Word32
, vkInputRate :: VkVertexInputRate
}
deriving (Eq)
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))
data VkPipelineDepthStencilStateCreateInfo =
VkPipelineDepthStencilStateCreateInfo{ vkSType :: VkStructureType
, vkPNext :: Ptr Void
, vkFlags :: VkPipelineDepthStencilStateCreateFlags
, vkDepthTestEnable :: VkBool32
, vkDepthWriteEnable :: VkBool32
, vkDepthCompareOp :: VkCompareOp
, vkDepthBoundsTestEnable :: VkBool32
, vkStencilTestEnable :: VkBool32
, vkFront :: VkStencilOpState
, vkBack :: VkStencilOpState
, vkMinDepthBounds :: CFloat
, vkMaxDepthBounds :: CFloat
}
deriving (Eq)
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))
foreign import ccall "vkCreateComputePipelines" vkCreateComputePipelines ::
VkDevice ->
VkPipelineCache ->
Word32 ->
Ptr VkComputePipelineCreateInfo ->
Ptr VkAllocationCallbacks -> Ptr VkPipeline -> IO VkResult
data VkStencilOpState =
VkStencilOpState{ vkFailOp :: VkStencilOp
, vkPassOp :: VkStencilOp
, vkDepthFailOp :: VkStencilOp
, vkCompareOp :: VkCompareOp
, vkCompareMask :: Word32
, vkWriteMask :: Word32
, vkReference :: Word32
}
deriving (Eq)
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))