vulkan-2.0.0.0: src/Graphics/Vulkan/Core10/CommandBufferBuilding.hs
{-# language Strict #-}
{-# language CPP #-}
{-# language GeneralizedNewtypeDeriving #-}
{-# language PatternSynonyms #-}
{-# language DataKinds #-}
{-# language TypeOperators #-}
{-# language DuplicateRecordFields #-}
{-# language LambdaCase #-}
module Graphics.Vulkan.Core10.CommandBufferBuilding
( VkIndexType(..)
, pattern VK_INDEX_TYPE_UINT16
, pattern VK_INDEX_TYPE_UINT32
, VkSubpassContents(..)
, pattern VK_SUBPASS_CONTENTS_INLINE
, pattern VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS
, VkStencilFaceFlagBits(..)
, pattern VK_STENCIL_FACE_FRONT_BIT
, pattern VK_STENCIL_FACE_BACK_BIT
, pattern VK_STENCIL_FRONT_AND_BACK
, vkCmdBindPipeline
, vkCmdSetViewport
, vkCmdSetScissor
, vkCmdSetLineWidth
, vkCmdSetDepthBias
, vkCmdSetBlendConstants
, vkCmdSetDepthBounds
, vkCmdSetStencilCompareMask
, vkCmdSetStencilWriteMask
, vkCmdSetStencilReference
, vkCmdBindDescriptorSets
, vkCmdBindIndexBuffer
, vkCmdBindVertexBuffers
, vkCmdDraw
, vkCmdDrawIndexed
, vkCmdDrawIndirect
, vkCmdDrawIndexedIndirect
, vkCmdDispatch
, vkCmdDispatchIndirect
, vkCmdCopyBuffer
, vkCmdCopyImage
, vkCmdBlitImage
, vkCmdCopyBufferToImage
, vkCmdCopyImageToBuffer
, vkCmdUpdateBuffer
, vkCmdFillBuffer
, vkCmdClearColorImage
, vkCmdClearDepthStencilImage
, vkCmdClearAttachments
, vkCmdResolveImage
, vkCmdSetEvent
, vkCmdResetEvent
, vkCmdWaitEvents
, vkCmdPipelineBarrier
, vkCmdBeginQuery
, vkCmdEndQuery
, vkCmdResetQueryPool
, vkCmdWriteTimestamp
, vkCmdCopyQueryPoolResults
, vkCmdPushConstants
, vkCmdBeginRenderPass
, vkCmdNextSubpass
, vkCmdEndRenderPass
, vkCmdExecuteCommands
, VkClearRect(..)
, VkImageSubresourceLayers(..)
, VkMemoryBarrier(..)
, VkBufferMemoryBarrier(..)
, VkImageMemoryBarrier(..)
, VkBufferCopy(..)
, VkImageCopy(..)
, VkImageBlit(..)
, VkBufferImageCopy(..)
, VkImageResolve(..)
, VkRenderPassBeginInfo(..)
, VkClearDepthStencilValue(..)
, VkClearAttachment(..)
, VkDrawIndirectCommand(..)
, VkDrawIndexedIndirectCommand(..)
, VkDispatchIndirectCommand(..)
, VkClearColorValue(..)
, VkClearValue(..)
, VkStencilFaceFlags
) 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(..)
)
import Foreign.Ptr
( castPtr
, 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.CommandBuffer
( VkQueryControlFlagBits(..)
, VkQueryControlFlags
)
import Graphics.Vulkan.Core10.Core
( VkStructureType(..)
, VkFlags
)
import Graphics.Vulkan.Core10.DescriptorSet
( VkDescriptorSet
)
import Graphics.Vulkan.Core10.DeviceInitialization
( VkExtent3D(..)
, VkDeviceSize
)
import Graphics.Vulkan.Core10.Event
( VkEvent
)
import Graphics.Vulkan.Core10.Image
( VkImageLayout(..)
)
import Graphics.Vulkan.Core10.ImageView
( VkImageSubresourceRange(..)
)
import Graphics.Vulkan.Core10.MemoryManagement
( VkImage
, VkBuffer
)
import Graphics.Vulkan.Core10.Pass
( VkFramebuffer
, VkAccessFlags
, VkDependencyFlagBits(..)
, VkDependencyFlags
, VkPipelineBindPoint(..)
)
import Graphics.Vulkan.Core10.Pipeline
( VkRenderPass
, VkShaderStageFlagBits(..)
, VkPipelineLayout
, VkRect2D(..)
, VkViewport(..)
, VkPipeline
)
import Graphics.Vulkan.Core10.PipelineLayout
( VkShaderStageFlags
)
import Graphics.Vulkan.Core10.Query
( VkQueryResultFlagBits(..)
, VkQueryResultFlags
, VkQueryPool
)
import Graphics.Vulkan.Core10.Queue
( VkPipelineStageFlagBits(..)
, VkPipelineStageFlags
, VkCommandBuffer
)
import Graphics.Vulkan.Core10.Sampler
( VkFilter(..)
)
import Graphics.Vulkan.Core10.SparseResourceMemoryManagement
( VkOffset3D(..)
, VkImageAspectFlags
)
-- ** VkIndexType
-- | VkIndexType - Type of index buffer indices
--
-- = See Also
-- #_see_also#
--
-- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.VkObjectTableIndexBufferEntryNVX',
-- 'vkCmdBindIndexBuffer'
newtype VkIndexType = VkIndexType Int32
deriving (Eq, Ord, Storable)
instance Show VkIndexType where
showsPrec _ VK_INDEX_TYPE_UINT16 = showString "VK_INDEX_TYPE_UINT16"
showsPrec _ VK_INDEX_TYPE_UINT32 = showString "VK_INDEX_TYPE_UINT32"
showsPrec p (VkIndexType x) = showParen (p >= 11) (showString "VkIndexType " . showsPrec 11 x)
instance Read VkIndexType where
readPrec = parens ( choose [ ("VK_INDEX_TYPE_UINT16", pure VK_INDEX_TYPE_UINT16)
, ("VK_INDEX_TYPE_UINT32", pure VK_INDEX_TYPE_UINT32)
] +++
prec 10 (do
expectP (Ident "VkIndexType")
v <- step readPrec
pure (VkIndexType v)
)
)
-- | @VK_INDEX_TYPE_UINT16@ specifies that indices are 16-bit unsigned
-- integer values.
pattern VK_INDEX_TYPE_UINT16 :: VkIndexType
pattern VK_INDEX_TYPE_UINT16 = VkIndexType 0
-- | @VK_INDEX_TYPE_UINT32@ specifies that indices are 32-bit unsigned
-- integer values.
pattern VK_INDEX_TYPE_UINT32 :: VkIndexType
pattern VK_INDEX_TYPE_UINT32 = VkIndexType 1
-- ** VkSubpassContents
-- | VkSubpassContents - Specify how commands in the first subpass of a
-- render pass are provided
--
-- = See Also
-- #_see_also#
--
-- 'vkCmdBeginRenderPass', 'vkCmdNextSubpass'
newtype VkSubpassContents = VkSubpassContents Int32
deriving (Eq, Ord, Storable)
instance Show VkSubpassContents where
showsPrec _ VK_SUBPASS_CONTENTS_INLINE = showString "VK_SUBPASS_CONTENTS_INLINE"
showsPrec _ VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS = showString "VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS"
showsPrec p (VkSubpassContents x) = showParen (p >= 11) (showString "VkSubpassContents " . showsPrec 11 x)
instance Read VkSubpassContents where
readPrec = parens ( choose [ ("VK_SUBPASS_CONTENTS_INLINE", pure VK_SUBPASS_CONTENTS_INLINE)
, ("VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS", pure VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS)
] +++
prec 10 (do
expectP (Ident "VkSubpassContents")
v <- step readPrec
pure (VkSubpassContents v)
)
)
-- | @VK_SUBPASS_CONTENTS_INLINE@ specifies that the contents of the subpass
-- will be recorded inline in the primary command buffer, and secondary
-- command buffers /must/ not be executed within the subpass.
pattern VK_SUBPASS_CONTENTS_INLINE :: VkSubpassContents
pattern VK_SUBPASS_CONTENTS_INLINE = VkSubpassContents 0
-- | @VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS@ specifies that the
-- contents are recorded in secondary command buffers that will be called
-- from the primary command buffer, and 'vkCmdExecuteCommands' is the only
-- valid command on the command buffer until 'vkCmdNextSubpass' or
-- 'vkCmdEndRenderPass'.
pattern VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS :: VkSubpassContents
pattern VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS = VkSubpassContents 1
-- ** VkStencilFaceFlagBits
-- | VkStencilFaceFlagBits - Bitmask specifying sets of stencil state for
-- which to update the compare mask
--
-- = See Also
-- #_see_also#
--
-- 'VkStencilFaceFlags'
newtype VkStencilFaceFlagBits = VkStencilFaceFlagBits VkFlags
deriving (Eq, Ord, Storable, Bits, FiniteBits)
instance Show VkStencilFaceFlagBits where
showsPrec _ VK_STENCIL_FACE_FRONT_BIT = showString "VK_STENCIL_FACE_FRONT_BIT"
showsPrec _ VK_STENCIL_FACE_BACK_BIT = showString "VK_STENCIL_FACE_BACK_BIT"
showsPrec _ VK_STENCIL_FRONT_AND_BACK = showString "VK_STENCIL_FRONT_AND_BACK"
showsPrec p (VkStencilFaceFlagBits x) = showParen (p >= 11) (showString "VkStencilFaceFlagBits " . showsPrec 11 x)
instance Read VkStencilFaceFlagBits where
readPrec = parens ( choose [ ("VK_STENCIL_FACE_FRONT_BIT", pure VK_STENCIL_FACE_FRONT_BIT)
, ("VK_STENCIL_FACE_BACK_BIT", pure VK_STENCIL_FACE_BACK_BIT)
, ("VK_STENCIL_FRONT_AND_BACK", pure VK_STENCIL_FRONT_AND_BACK)
] +++
prec 10 (do
expectP (Ident "VkStencilFaceFlagBits")
v <- step readPrec
pure (VkStencilFaceFlagBits v)
)
)
-- | @VK_STENCIL_FACE_FRONT_BIT@ specifies that only the front set of stencil
-- state is updated.
pattern VK_STENCIL_FACE_FRONT_BIT :: VkStencilFaceFlagBits
pattern VK_STENCIL_FACE_FRONT_BIT = VkStencilFaceFlagBits 0x00000001
-- | @VK_STENCIL_FACE_BACK_BIT@ specifies that only the back set of stencil
-- state is updated.
pattern VK_STENCIL_FACE_BACK_BIT :: VkStencilFaceFlagBits
pattern VK_STENCIL_FACE_BACK_BIT = VkStencilFaceFlagBits 0x00000002
-- | @VK_STENCIL_FRONT_AND_BACK@ is the combination of
-- @VK_STENCIL_FACE_FRONT_BIT@ and @VK_STENCIL_FACE_BACK_BIT@, and
-- specifies that both sets of stencil state are updated.
pattern VK_STENCIL_FRONT_AND_BACK :: VkStencilFaceFlagBits
pattern VK_STENCIL_FRONT_AND_BACK = VkStencilFaceFlagBits 0x00000003
-- | vkCmdBindPipeline - Bind a pipeline object to a command buffer
--
-- = Parameters
-- #_parameters#
--
-- - @commandBuffer@ is the command buffer that the pipeline will be
-- bound to.
--
-- - @pipelineBindPoint@ is a
-- 'Graphics.Vulkan.Core10.Pass.VkPipelineBindPoint' value specifying
-- whether to bind to the compute or graphics bind point. Binding one
-- does not disturb the other.
--
-- - @pipeline@ is the pipeline to be bound.
--
-- = Description
-- #_description#
--
-- Once bound, a pipeline binding affects subsequent graphics or compute
-- commands in the command buffer until a different pipeline is bound to
-- the bind point. The pipeline bound to @VK_PIPELINE_BIND_POINT_COMPUTE@
-- controls the behavior of 'vkCmdDispatch' and 'vkCmdDispatchIndirect'.
-- The pipeline bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ controls the
-- behavior of all <{html_spec_relative}#drawing drawing commands>. No
-- other commands are affected by the pipeline state.
--
-- == Valid Usage
--
-- - If @pipelineBindPoint@ is @VK_PIPELINE_BIND_POINT_COMPUTE@, the
-- @VkCommandPool@ that @commandBuffer@ was allocated from /must/
-- support compute operations
--
-- - If @pipelineBindPoint@ is @VK_PIPELINE_BIND_POINT_GRAPHICS@, the
-- @VkCommandPool@ that @commandBuffer@ was allocated from /must/
-- support graphics operations
--
-- - If @pipelineBindPoint@ is @VK_PIPELINE_BIND_POINT_COMPUTE@,
-- @pipeline@ /must/ be a compute pipeline
--
-- - If @pipelineBindPoint@ is @VK_PIPELINE_BIND_POINT_GRAPHICS@,
-- @pipeline@ /must/ be a graphics pipeline
--
-- - If the
-- <{html_spec_relative}#features-features-variableMultisampleRate variable multisample rate>
-- feature is not supported, @pipeline@ is a graphics pipeline, the
-- current subpass has no attachments, and this is not the first call
-- to this function with a graphics pipeline after transitioning to the
-- current subpass, then the sample count specified by this pipeline
-- /must/ match that set in the previous pipeline
--
-- == Valid Usage (Implicit)
--
-- - @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
--
-- - @pipelineBindPoint@ /must/ be a valid
-- 'Graphics.Vulkan.Core10.Pass.VkPipelineBindPoint' value
--
-- - @pipeline@ /must/ be a valid @VkPipeline@ handle
--
-- - @commandBuffer@ /must/ be in the
-- <#commandbuffers-lifecycle recording state>
--
-- - The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
-- support graphics, or compute operations
--
-- - Both of @commandBuffer@, and @pipeline@ /must/ have been created,
-- allocated, or retrieved from the same @VkDevice@
--
-- == Host Synchronization
--
-- - Host access to @commandBuffer@ /must/ be externally synchronized
--
-- - Host access to the @VkCommandPool@ that @commandBuffer@ was
-- allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- > +-----------------+-----------------+-----------------+-----------------+
-- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
-- > | erLevel Command | derPass Render | ts Supported Qu | on-pipeline-sta |
-- > | Buffer Levels> | Pass Scope> | eue Types> | ges-types Pipel |
-- > | | | | ine Type> |
-- > +=================+=================+=================+=================+
-- > | Primary | Both | Graphics | |
-- > | Secondary | | Compute | |
-- > +-----------------+-----------------+-----------------+-----------------+
--
-- = See Also
-- #_see_also#
--
-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
-- 'Graphics.Vulkan.Core10.Pipeline.VkPipeline',
-- 'Graphics.Vulkan.Core10.Pass.VkPipelineBindPoint'
foreign import ccall "vkCmdBindPipeline" vkCmdBindPipeline :: ("commandBuffer" ::: VkCommandBuffer) -> ("pipelineBindPoint" ::: VkPipelineBindPoint) -> ("pipeline" ::: VkPipeline) -> IO ()
-- | vkCmdSetViewport - Set the viewport on a command buffer
--
-- = Parameters
-- #_parameters#
--
-- - @commandBuffer@ is the command buffer into which the command will be
-- recorded.
--
-- - @firstViewport@ is the index of the first viewport whose parameters
-- are updated by the command.
--
-- - @viewportCount@ is the number of viewports whose parameters are
-- updated by the command.
--
-- - @pViewports@ is a pointer to an array of
-- 'Graphics.Vulkan.Core10.Pipeline.VkViewport' structures specifying
-- viewport parameters.
--
-- = Description
-- #_description#
--
-- The viewport parameters taken from element i of @pViewports@ replace the
-- current state for the viewport index @firstViewport@ + i, for i in [0,
-- @viewportCount@).
--
-- == Valid Usage
--
-- - The bound graphics pipeline /must/ have been created with the
-- @VK_DYNAMIC_STATE_VIEWPORT@ dynamic state enabled
--
-- - @firstViewport@ /must/ be less than
-- @VkPhysicalDeviceLimits@::@maxViewports@
--
-- - The sum of @firstViewport@ and @viewportCount@ /must/ be between @1@
-- and @VkPhysicalDeviceLimits@::@maxViewports@, inclusive
--
-- - If the
-- <{html_spec_relative}#features-features-multiViewport multiple viewports>
-- feature is not enabled, @firstViewport@ /must/ be @0@
--
-- - If the
-- <{html_spec_relative}#features-features-multiViewport multiple viewports>
-- feature is not enabled, @viewportCount@ /must/ be @1@
--
-- == Valid Usage (Implicit)
--
-- - @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
--
-- - @pViewports@ /must/ be a valid pointer to an array of
-- @viewportCount@ @VkViewport@ structures
--
-- - @commandBuffer@ /must/ be in the
-- <#commandbuffers-lifecycle recording state>
--
-- - The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
-- support graphics operations
--
-- - @viewportCount@ /must/ be greater than @0@
--
-- == Host Synchronization
--
-- - Host access to @commandBuffer@ /must/ be externally synchronized
--
-- - Host access to the @VkCommandPool@ that @commandBuffer@ was
-- allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- > +-----------------+-----------------+-----------------+-----------------+
-- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
-- > | erLevel Command | derPass Render | ts Supported Qu | on-pipeline-sta |
-- > | Buffer Levels> | Pass Scope> | eue Types> | ges-types Pipel |
-- > | | | | ine Type> |
-- > +=================+=================+=================+=================+
-- > | Primary | Both | Graphics | |
-- > | Secondary | | | |
-- > +-----------------+-----------------+-----------------+-----------------+
--
-- = See Also
-- #_see_also#
--
-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
-- 'Graphics.Vulkan.Core10.Pipeline.VkViewport'
foreign import ccall "vkCmdSetViewport" vkCmdSetViewport :: ("commandBuffer" ::: VkCommandBuffer) -> ("firstViewport" ::: Word32) -> ("viewportCount" ::: Word32) -> ("pViewports" ::: Ptr VkViewport) -> IO ()
-- | vkCmdSetScissor - Set the dynamic scissor rectangles on a command buffer
--
-- = Parameters
-- #_parameters#
--
-- - @commandBuffer@ is the command buffer into which the command will be
-- recorded.
--
-- - @firstScissor@ is the index of the first scissor whose state is
-- updated by the command.
--
-- - @scissorCount@ is the number of scissors whose rectangles are
-- updated by the command.
--
-- - @pScissors@ is a pointer to an array of
-- 'Graphics.Vulkan.Core10.Pipeline.VkRect2D' structures defining
-- scissor rectangles.
--
-- = Description
-- #_description#
--
-- The scissor rectangles taken from element i of @pScissors@ replace the
-- current state for the scissor index @firstScissor@ + i, for i in [0,
-- @scissorCount@).
--
-- Each scissor rectangle is described by a
-- 'Graphics.Vulkan.Core10.Pipeline.VkRect2D' structure, with the
-- @offset.x@ and @offset.y@ values determining the upper left corner of
-- the scissor rectangle, and the @extent.width@ and @extent.height@ values
-- determining the size in pixels.
--
-- == Valid Usage
--
-- - The bound graphics pipeline /must/ have been created with the
-- @VK_DYNAMIC_STATE_SCISSOR@ dynamic state enabled
--
-- - @firstScissor@ /must/ be less than
-- @VkPhysicalDeviceLimits@::@maxViewports@
--
-- - The sum of @firstScissor@ and @scissorCount@ /must/ be between @1@
-- and @VkPhysicalDeviceLimits@::@maxViewports@, inclusive
--
-- - If the
-- <{html_spec_relative}#features-features-multiViewport multiple viewports>
-- feature is not enabled, @firstScissor@ /must/ be @0@
--
-- - If the
-- <{html_spec_relative}#features-features-multiViewport multiple viewports>
-- feature is not enabled, @scissorCount@ /must/ be @1@
--
-- - The @x@ and @y@ members of @offset@ /must/ be greater than or equal
-- to @0@
--
-- - Evaluation of (@offset.x@ + @extent.width@) /must/ not cause a
-- signed integer addition overflow
--
-- - Evaluation of (@offset.y@ + @extent.height@) /must/ not cause a
-- signed integer addition overflow
--
-- == Valid Usage (Implicit)
--
-- - @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
--
-- - @pScissors@ /must/ be a valid pointer to an array of @scissorCount@
-- @VkRect2D@ structures
--
-- - @commandBuffer@ /must/ be in the
-- <#commandbuffers-lifecycle recording state>
--
-- - The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
-- support graphics operations
--
-- - @scissorCount@ /must/ be greater than @0@
--
-- == Host Synchronization
--
-- - Host access to @commandBuffer@ /must/ be externally synchronized
--
-- - Host access to the @VkCommandPool@ that @commandBuffer@ was
-- allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- > +-----------------+-----------------+-----------------+-----------------+
-- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
-- > | erLevel Command | derPass Render | ts Supported Qu | on-pipeline-sta |
-- > | Buffer Levels> | Pass Scope> | eue Types> | ges-types Pipel |
-- > | | | | ine Type> |
-- > +=================+=================+=================+=================+
-- > | Primary | Both | Graphics | |
-- > | Secondary | | | |
-- > +-----------------+-----------------+-----------------+-----------------+
--
-- = See Also
-- #_see_also#
--
-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
-- 'Graphics.Vulkan.Core10.Pipeline.VkRect2D'
foreign import ccall "vkCmdSetScissor" vkCmdSetScissor :: ("commandBuffer" ::: VkCommandBuffer) -> ("firstScissor" ::: Word32) -> ("scissorCount" ::: Word32) -> ("pScissors" ::: Ptr VkRect2D) -> IO ()
-- | vkCmdSetLineWidth - Set the dynamic line width state
--
-- = Parameters
-- #_parameters#
--
-- - @commandBuffer@ is the command buffer into which the command will be
-- recorded.
--
-- - @lineWidth@ is the width of rasterized line segments.
--
-- = Description
-- #_description#
--
-- == Valid Usage
--
-- - The bound graphics pipeline /must/ have been created with the
-- @VK_DYNAMIC_STATE_LINE_WIDTH@ dynamic state enabled
--
-- - If the <{html_spec_relative}#features-features-wideLines wide lines>
-- feature is not enabled, @lineWidth@ /must/ be @1.0@
--
-- == Valid Usage (Implicit)
--
-- - @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
--
-- - @commandBuffer@ /must/ be in the
-- <#commandbuffers-lifecycle recording state>
--
-- - The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
-- support graphics operations
--
-- == Host Synchronization
--
-- - Host access to @commandBuffer@ /must/ be externally synchronized
--
-- - Host access to the @VkCommandPool@ that @commandBuffer@ was
-- allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- > +-----------------+-----------------+-----------------+-----------------+
-- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
-- > | erLevel Command | derPass Render | ts Supported Qu | on-pipeline-sta |
-- > | Buffer Levels> | Pass Scope> | eue Types> | ges-types Pipel |
-- > | | | | ine Type> |
-- > +=================+=================+=================+=================+
-- > | Primary | Both | Graphics | |
-- > | Secondary | | | |
-- > +-----------------+-----------------+-----------------+-----------------+
--
-- = See Also
-- #_see_also#
--
-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer'
foreign import ccall "vkCmdSetLineWidth" vkCmdSetLineWidth :: ("commandBuffer" ::: VkCommandBuffer) -> ("lineWidth" ::: CFloat) -> IO ()
-- | vkCmdSetDepthBias - Set the depth bias dynamic state
--
-- = Parameters
-- #_parameters#
--
-- - @commandBuffer@ is the command buffer into which the command will be
-- recorded.
--
-- - @depthBiasConstantFactor@ is a scalar factor controlling the
-- constant depth value added to each fragment.
--
-- - @depthBiasClamp@ is the maximum (or minimum) depth bias of a
-- fragment.
--
-- - @depthBiasSlopeFactor@ is a scalar factor applied to a fragment’s
-- slope in depth bias calculations.
--
-- = Description
-- #_description#
--
-- If @depthBiasEnable@ is @VK_FALSE@, no depth bias is applied and the
-- fragment’s depth values are unchanged.
--
-- @depthBiasSlopeFactor@ scales the maximum depth slope of the polygon,
-- and @depthBiasConstantFactor@ scales an implementation-dependent
-- constant that relates to the usable resolution of the depth buffer. The
-- resulting values are summed to produce the depth bias value which is
-- then clamped to a minimum or maximum value specified by
-- @depthBiasClamp@. @depthBiasSlopeFactor@, @depthBiasConstantFactor@, and
-- @depthBiasClamp@ /can/ each be positive, negative, or zero.
--
-- The maximum depth slope m of a triangle is
--
-- <<data:image/png;base64,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 $$m = \\sqrt{ \\left({{\\partial z_f} \\over {\\partial x_f}}\\right)^2 + \\left({{\\partial z_f} \\over {\\partial y_f}}\\right)^2}$$>>
--
-- where (xf, yf, zf) is a point on the triangle. m /may/ be approximated
-- as
--
-- <<data:image/png;base64,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 $$m = \\max\\left( \\left| { {\\partial z_f} \\over {\\partial x_f} } \\right|, \\left| { {\\partial z_f} \\over {\\partial y_f} } \\right| \\right).$$>>
--
-- The minimum resolvable difference r is an implementation-dependent
-- parameter that depends on the depth buffer representation. It is the
-- smallest difference in framebuffer coordinate z values that is
-- guaranteed to remain distinct throughout polygon rasterization and in
-- the depth buffer. All pairs of fragments generated by the rasterization
-- of two polygons with otherwise identical vertices, but @z@f values that
-- differ by $r$, will have distinct depth values.
--
-- For fixed-point depth buffer representations, r is constant throughout
-- the range of the entire depth buffer. For floating-point depth buffers,
-- there is no single minimum resolvable difference. In this case, the
-- minimum resolvable difference for a given polygon is dependent on the
-- maximum exponent, e, in the range of z values spanned by the primitive.
-- If n is the number of bits in the floating-point mantissa, the minimum
-- resolvable difference, r, for the given primitive is defined as
--
-- []
-- r = 2e-n
--
-- If no depth buffer is present, r is undefined.
--
-- The bias value o for a polygon is
--
-- <<data:image/png;base64,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 $$o = \\begin{cases} m \\times depthBiasSlopeFactor + r \\times depthBiasConstantFactor & depthBiasClamp = 0\\ or\\ NaN \\\\ \\min(m \\times depthBiasSlopeFactor + r \\times depthBiasConstantFactor, depthBiasClamp) & depthBiasClamp > 0 \\\\ \\max(m \\times depthBiasSlopeFactor + r \\times depthBiasConstantFactor, depthBiasClamp) & depthBiasClamp \< 0 \\\\ \\end{cases}$$>>
--
-- m is computed as described above. If the depth buffer uses a fixed-point
-- representation, m is a function of depth values in the range [0,1], and
-- o is applied to depth values in the same range.
--
-- For fixed-point depth buffers, fragment depth values are always limited
-- to the range [0,1] by clamping after depth bias addition is performed.
-- Fragment depth values are clamped even when the depth buffer uses a
-- floating-point representation.
--
-- == Valid Usage
--
-- - The bound graphics pipeline /must/ have been created with the
-- @VK_DYNAMIC_STATE_DEPTH_BIAS@ dynamic state enabled
--
-- - If the
-- <{html_spec_relative}#features-features-depthBiasClamp depth bias clamping>
-- feature is not enabled, @depthBiasClamp@ /must/ be @0.0@
--
-- == Valid Usage (Implicit)
--
-- - @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
--
-- - @commandBuffer@ /must/ be in the
-- <#commandbuffers-lifecycle recording state>
--
-- - The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
-- support graphics operations
--
-- == Host Synchronization
--
-- - Host access to @commandBuffer@ /must/ be externally synchronized
--
-- - Host access to the @VkCommandPool@ that @commandBuffer@ was
-- allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- > +-----------------+-----------------+-----------------+-----------------+
-- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
-- > | erLevel Command | derPass Render | ts Supported Qu | on-pipeline-sta |
-- > | Buffer Levels> | Pass Scope> | eue Types> | ges-types Pipel |
-- > | | | | ine Type> |
-- > +=================+=================+=================+=================+
-- > | Primary | Both | Graphics | |
-- > | Secondary | | | |
-- > +-----------------+-----------------+-----------------+-----------------+
--
-- = See Also
-- #_see_also#
--
-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer'
foreign import ccall "vkCmdSetDepthBias" vkCmdSetDepthBias :: ("commandBuffer" ::: VkCommandBuffer) -> ("depthBiasConstantFactor" ::: CFloat) -> ("depthBiasClamp" ::: CFloat) -> ("depthBiasSlopeFactor" ::: CFloat) -> IO ()
-- | vkCmdSetBlendConstants - Set the values of blend constants
--
-- = Parameters
-- #_parameters#
--
-- - @commandBuffer@ is the command buffer into which the command will be
-- recorded.
--
-- - @blendConstants@ is an array of four values specifying the R, G, B,
-- and A components of the blend constant color used in blending,
-- depending on the
-- <{html_spec_relative}#framebuffer-blendfactors blend factor>.
--
-- = Description
-- #_description#
--
-- == Valid Usage
--
-- - The bound graphics pipeline /must/ have been created with the
-- @VK_DYNAMIC_STATE_BLEND_CONSTANTS@ dynamic state enabled
--
-- == Valid Usage (Implicit)
--
-- - @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
--
-- - @commandBuffer@ /must/ be in the
-- <#commandbuffers-lifecycle recording state>
--
-- - The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
-- support graphics operations
--
-- == Host Synchronization
--
-- - Host access to @commandBuffer@ /must/ be externally synchronized
--
-- - Host access to the @VkCommandPool@ that @commandBuffer@ was
-- allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- > +-----------------+-----------------+-----------------+-----------------+
-- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
-- > | erLevel Command | derPass Render | ts Supported Qu | on-pipeline-sta |
-- > | Buffer Levels> | Pass Scope> | eue Types> | ges-types Pipel |
-- > | | | | ine Type> |
-- > +=================+=================+=================+=================+
-- > | Primary | Both | Graphics | |
-- > | Secondary | | | |
-- > +-----------------+-----------------+-----------------+-----------------+
--
-- = See Also
-- #_see_also#
--
-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer'
foreign import ccall "vkCmdSetBlendConstants" vkCmdSetBlendConstants :: ("commandBuffer" ::: VkCommandBuffer) -> ("blendConstants" ::: Ptr CFloat) -> IO ()
-- | vkCmdSetDepthBounds - Set the depth bounds test values for a command
-- buffer
--
-- = Parameters
-- #_parameters#
--
-- - @commandBuffer@ is the command buffer into which the command will be
-- recorded.
--
-- - @minDepthBounds@ is the lower bound of the range of depth values
-- used in the depth bounds test.
--
-- - @maxDepthBounds@ is the upper bound of the range.
--
-- = Description
-- #_description#
--
-- == Valid Usage
--
-- - The bound graphics pipeline /must/ have been created with the
-- @VK_DYNAMIC_STATE_DEPTH_BOUNDS@ dynamic state enabled
--
-- - @minDepthBounds@ /must/ be between @0.0@ and @1.0@, inclusive
--
-- - @maxDepthBounds@ /must/ be between @0.0@ and @1.0@, inclusive
--
-- == Valid Usage (Implicit)
--
-- - @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
--
-- - @commandBuffer@ /must/ be in the
-- <#commandbuffers-lifecycle recording state>
--
-- - The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
-- support graphics operations
--
-- == Host Synchronization
--
-- - Host access to @commandBuffer@ /must/ be externally synchronized
--
-- - Host access to the @VkCommandPool@ that @commandBuffer@ was
-- allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- > +-----------------+-----------------+-----------------+-----------------+
-- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
-- > | erLevel Command | derPass Render | ts Supported Qu | on-pipeline-sta |
-- > | Buffer Levels> | Pass Scope> | eue Types> | ges-types Pipel |
-- > | | | | ine Type> |
-- > +=================+=================+=================+=================+
-- > | Primary | Both | Graphics | |
-- > | Secondary | | | |
-- > +-----------------+-----------------+-----------------+-----------------+
--
-- = See Also
-- #_see_also#
--
-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer'
foreign import ccall "vkCmdSetDepthBounds" vkCmdSetDepthBounds :: ("commandBuffer" ::: VkCommandBuffer) -> ("minDepthBounds" ::: CFloat) -> ("maxDepthBounds" ::: CFloat) -> IO ()
-- | vkCmdSetStencilCompareMask - Set the stencil compare mask dynamic state
--
-- = Parameters
-- #_parameters#
--
-- - @commandBuffer@ is the command buffer into which the command will be
-- recorded.
--
-- - @faceMask@ is a bitmask of 'VkStencilFaceFlagBits' specifying the
-- set of stencil state for which to update the compare mask.
--
-- - @compareMask@ is the new value to use as the stencil compare mask.
--
-- = Description
-- #_description#
--
-- == Valid Usage
--
-- - The bound graphics pipeline /must/ have been created with the
-- @VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK@ dynamic state enabled
--
-- == Valid Usage (Implicit)
--
-- - @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
--
-- - @faceMask@ /must/ be a valid combination of 'VkStencilFaceFlagBits'
-- values
--
-- - @faceMask@ /must/ not be @0@
--
-- - @commandBuffer@ /must/ be in the
-- <#commandbuffers-lifecycle recording state>
--
-- - The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
-- support graphics operations
--
-- == Host Synchronization
--
-- - Host access to @commandBuffer@ /must/ be externally synchronized
--
-- - Host access to the @VkCommandPool@ that @commandBuffer@ was
-- allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- > +-----------------+-----------------+-----------------+-----------------+
-- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
-- > | erLevel Command | derPass Render | ts Supported Qu | on-pipeline-sta |
-- > | Buffer Levels> | Pass Scope> | eue Types> | ges-types Pipel |
-- > | | | | ine Type> |
-- > +=================+=================+=================+=================+
-- > | Primary | Both | Graphics | |
-- > | Secondary | | | |
-- > +-----------------+-----------------+-----------------+-----------------+
--
-- = See Also
-- #_see_also#
--
-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer', 'VkStencilFaceFlags'
foreign import ccall "vkCmdSetStencilCompareMask" vkCmdSetStencilCompareMask :: ("commandBuffer" ::: VkCommandBuffer) -> ("faceMask" ::: VkStencilFaceFlags) -> ("compareMask" ::: Word32) -> IO ()
-- | vkCmdSetStencilWriteMask - Set the stencil write mask dynamic state
--
-- = Parameters
-- #_parameters#
--
-- - @commandBuffer@ is the command buffer into which the command will be
-- recorded.
--
-- - @faceMask@ is a bitmask of 'VkStencilFaceFlagBits' specifying the
-- set of stencil state for which to update the write mask, as
-- described above for 'vkCmdSetStencilCompareMask'.
--
-- - @writeMask@ is the new value to use as the stencil write mask.
--
-- = Description
-- #_description#
--
-- == Valid Usage
--
-- - The bound graphics pipeline /must/ have been created with the
-- @VK_DYNAMIC_STATE_STENCIL_WRITE_MASK@ dynamic state enabled
--
-- == Valid Usage (Implicit)
--
-- - @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
--
-- - @faceMask@ /must/ be a valid combination of 'VkStencilFaceFlagBits'
-- values
--
-- - @faceMask@ /must/ not be @0@
--
-- - @commandBuffer@ /must/ be in the
-- <#commandbuffers-lifecycle recording state>
--
-- - The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
-- support graphics operations
--
-- == Host Synchronization
--
-- - Host access to @commandBuffer@ /must/ be externally synchronized
--
-- - Host access to the @VkCommandPool@ that @commandBuffer@ was
-- allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- > +-----------------+-----------------+-----------------+-----------------+
-- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
-- > | erLevel Command | derPass Render | ts Supported Qu | on-pipeline-sta |
-- > | Buffer Levels> | Pass Scope> | eue Types> | ges-types Pipel |
-- > | | | | ine Type> |
-- > +=================+=================+=================+=================+
-- > | Primary | Both | Graphics | |
-- > | Secondary | | | |
-- > +-----------------+-----------------+-----------------+-----------------+
--
-- = See Also
-- #_see_also#
--
-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer', 'VkStencilFaceFlags'
foreign import ccall "vkCmdSetStencilWriteMask" vkCmdSetStencilWriteMask :: ("commandBuffer" ::: VkCommandBuffer) -> ("faceMask" ::: VkStencilFaceFlags) -> ("writeMask" ::: Word32) -> IO ()
-- | vkCmdSetStencilReference - Set the stencil reference dynamic state
--
-- = Parameters
-- #_parameters#
--
-- - @commandBuffer@ is the command buffer into which the command will be
-- recorded.
--
-- - @faceMask@ is a bitmask of 'VkStencilFaceFlagBits' specifying the
-- set of stencil state for which to update the reference value, as
-- described above for 'vkCmdSetStencilCompareMask'.
--
-- - @reference@ is the new value to use as the stencil reference value.
--
-- = Description
-- #_description#
--
-- == Valid Usage
--
-- - The bound graphics pipeline /must/ have been created with the
-- @VK_DYNAMIC_STATE_STENCIL_REFERENCE@ dynamic state enabled
--
-- == Valid Usage (Implicit)
--
-- - @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
--
-- - @faceMask@ /must/ be a valid combination of 'VkStencilFaceFlagBits'
-- values
--
-- - @faceMask@ /must/ not be @0@
--
-- - @commandBuffer@ /must/ be in the
-- <#commandbuffers-lifecycle recording state>
--
-- - The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
-- support graphics operations
--
-- == Host Synchronization
--
-- - Host access to @commandBuffer@ /must/ be externally synchronized
--
-- - Host access to the @VkCommandPool@ that @commandBuffer@ was
-- allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- > +-----------------+-----------------+-----------------+-----------------+
-- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
-- > | erLevel Command | derPass Render | ts Supported Qu | on-pipeline-sta |
-- > | Buffer Levels> | Pass Scope> | eue Types> | ges-types Pipel |
-- > | | | | ine Type> |
-- > +=================+=================+=================+=================+
-- > | Primary | Both | Graphics | |
-- > | Secondary | | | |
-- > +-----------------+-----------------+-----------------+-----------------+
--
-- = See Also
-- #_see_also#
--
-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer', 'VkStencilFaceFlags'
foreign import ccall "vkCmdSetStencilReference" vkCmdSetStencilReference :: ("commandBuffer" ::: VkCommandBuffer) -> ("faceMask" ::: VkStencilFaceFlags) -> ("reference" ::: Word32) -> IO ()
-- | vkCmdBindDescriptorSets - Binds descriptor sets to a command buffer
--
-- = Parameters
-- #_parameters#
--
-- - @commandBuffer@ is the command buffer that the descriptor sets will
-- be bound to.
--
-- - @pipelineBindPoint@ is a
-- 'Graphics.Vulkan.Core10.Pass.VkPipelineBindPoint' indicating whether
-- the descriptors will be used by graphics pipelines or compute
-- pipelines. There is a separate set of bind points for each of
-- graphics and compute, so binding one does not disturb the other.
--
-- - @layout@ is a @VkPipelineLayout@ object used to program the
-- bindings.
--
-- - @firstSet@ is the set number of the first descriptor set to be
-- bound.
--
-- - @descriptorSetCount@ is the number of elements in the
-- @pDescriptorSets@ array.
--
-- - @pDescriptorSets@ is an array of handles to @VkDescriptorSet@
-- objects describing the descriptor sets to write to.
--
-- - @dynamicOffsetCount@ is the number of dynamic offsets in the
-- @pDynamicOffsets@ array.
--
-- - @pDynamicOffsets@ is a pointer to an array of @uint32_t@ values
-- specifying dynamic offsets.
--
-- = Description
-- #_description#
--
-- @vkCmdBindDescriptorSets@ causes the sets numbered [@firstSet@..
-- @firstSet@+@descriptorSetCount@-1] to use the bindings stored in
-- @pDescriptorSets@[0..@descriptorSetCount@-1] for subsequent rendering
-- commands (either compute or graphics, according to the
-- @pipelineBindPoint@). Any bindings that were previously applied via
-- these sets are no longer valid.
--
-- Once bound, a descriptor set affects rendering of subsequent graphics or
-- compute commands in the command buffer until a different set is bound to
-- the same set number, or else until the set is disturbed as described in
-- <{html_spec_relative}#descriptorsets-compatibility Pipeline Layout Compatibility>.
--
-- A compatible descriptor set /must/ be bound for all set numbers that any
-- shaders in a pipeline access, at the time that a draw or dispatch
-- command is recorded to execute using that pipeline. However, if none of
-- the shaders in a pipeline statically use any bindings with a particular
-- set number, then no descriptor set need be bound for that set number,
-- even if the pipeline layout includes a non-trivial descriptor set layout
-- for that set number.
--
-- If any of the sets being bound include dynamic uniform or storage
-- buffers, then @pDynamicOffsets@ includes one element for each array
-- element in each dynamic descriptor type binding in each set. Values are
-- taken from @pDynamicOffsets@ in an order such that all entries for set N
-- come before set N+1; within a set, entries are ordered by the binding
-- numbers in the descriptor set layouts; and within a binding array,
-- elements are in order. @dynamicOffsetCount@ /must/ equal the total
-- number of dynamic descriptors in the sets being bound.
--
-- The effective offset used for dynamic uniform and storage buffer
-- bindings is the sum of the relative offset taken from @pDynamicOffsets@,
-- and the base address of the buffer plus base offset in the descriptor
-- set. The length of the dynamic uniform and storage buffer bindings is
-- the buffer range as specified in the descriptor set.
--
-- Each of the @pDescriptorSets@ /must/ be compatible with the pipeline
-- layout specified by @layout@. The layout used to program the bindings
-- /must/ also be compatible with the pipeline used in subsequent graphics
-- or compute commands, as defined in the
-- <{html_spec_relative}#descriptorsets-compatibility Pipeline Layout Compatibility>
-- section.
--
-- The descriptor set contents bound by a call to @vkCmdBindDescriptorSets@
-- /may/ be consumed at the following times:
--
-- - during host execution of the command, or during shader execution of
-- the resulting draws and dispatches, or any time in between.
--
-- Thus, the contents of a descriptor set binding /must/ not be altered
-- (overwritten by an update command, or freed) between the first point in
-- time that it /may/ be consumed, and and when the command completes
-- executing on the queue.
--
-- The contents of @pDynamicOffsets@ are consumed immediately during
-- execution of @vkCmdBindDescriptorSets@. Once all pending uses have
-- completed, it is legal to update and reuse a descriptor set.
--
-- == Valid Usage
--
-- - Each element of @pDescriptorSets@ /must/ have been allocated with a
-- @VkDescriptorSetLayout@ that matches (is the same as, or identically
-- defined as) the @VkDescriptorSetLayout@ at set /n/ in @layout@,
-- where /n/ is the sum of @firstSet@ and the index into
-- @pDescriptorSets@
--
-- - @dynamicOffsetCount@ /must/ be equal to the total number of dynamic
-- descriptors in @pDescriptorSets@
--
-- - The sum of @firstSet@ and @descriptorSetCount@ /must/ be less than
-- or equal to @VkPipelineLayoutCreateInfo@::@setLayoutCount@ provided
-- when @layout@ was created
--
-- - @pipelineBindPoint@ /must/ be supported by the @commandBuffer@’s
-- parent @VkCommandPool@’s queue family
--
-- - Each element of @pDynamicOffsets@ /must/ satisfy the required
-- alignment for the corresponding descriptor binding’s descriptor type
--
-- == Valid Usage (Implicit)
--
-- - @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
--
-- - @pipelineBindPoint@ /must/ be a valid
-- 'Graphics.Vulkan.Core10.Pass.VkPipelineBindPoint' value
--
-- - @layout@ /must/ be a valid @VkPipelineLayout@ handle
--
-- - @pDescriptorSets@ /must/ be a valid pointer to an array of
-- @descriptorSetCount@ valid @VkDescriptorSet@ handles
--
-- - If @dynamicOffsetCount@ is not @0@, @pDynamicOffsets@ /must/ be a
-- valid pointer to an array of @dynamicOffsetCount@ @uint32_t@ values
--
-- - @commandBuffer@ /must/ be in the
-- <#commandbuffers-lifecycle recording state>
--
-- - The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
-- support graphics, or compute operations
--
-- - @descriptorSetCount@ /must/ be greater than @0@
--
-- - Each of @commandBuffer@, @layout@, and the elements of
-- @pDescriptorSets@ /must/ have been created, allocated, or retrieved
-- from the same @VkDevice@
--
-- == Host Synchronization
--
-- - Host access to @commandBuffer@ /must/ be externally synchronized
--
-- - Host access to the @VkCommandPool@ that @commandBuffer@ was
-- allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- > +-----------------+-----------------+-----------------+-----------------+
-- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
-- > | erLevel Command | derPass Render | ts Supported Qu | on-pipeline-sta |
-- > | Buffer Levels> | Pass Scope> | eue Types> | ges-types Pipel |
-- > | | | | ine Type> |
-- > +=================+=================+=================+=================+
-- > | Primary | Both | Graphics | |
-- > | Secondary | | Compute | |
-- > +-----------------+-----------------+-----------------+-----------------+
--
-- = See Also
-- #_see_also#
--
-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
-- 'Graphics.Vulkan.Core10.DescriptorSet.VkDescriptorSet',
-- 'Graphics.Vulkan.Core10.Pass.VkPipelineBindPoint',
-- 'Graphics.Vulkan.Core10.Pipeline.VkPipelineLayout'
foreign import ccall "vkCmdBindDescriptorSets" vkCmdBindDescriptorSets :: ("commandBuffer" ::: VkCommandBuffer) -> ("pipelineBindPoint" ::: VkPipelineBindPoint) -> ("layout" ::: VkPipelineLayout) -> ("firstSet" ::: Word32) -> ("descriptorSetCount" ::: Word32) -> ("pDescriptorSets" ::: Ptr VkDescriptorSet) -> ("dynamicOffsetCount" ::: Word32) -> ("pDynamicOffsets" ::: Ptr Word32) -> IO ()
-- | vkCmdBindIndexBuffer - Bind an index buffer to a command buffer
--
-- = Parameters
-- #_parameters#
--
-- - @commandBuffer@ is the command buffer into which the command is
-- recorded.
--
-- - @buffer@ is the buffer being bound.
--
-- - @offset@ is the starting offset in bytes within @buffer@ used in
-- index buffer address calculations.
--
-- - @indexType@ is a 'VkIndexType' value specifying whether indices are
-- treated as 16 bits or 32 bits.
--
-- = Description
-- #_description#
--
-- == Valid Usage
--
-- - @offset@ /must/ be less than the size of @buffer@
--
-- - The sum of @offset@ and the address of the range of @VkDeviceMemory@
-- object that is backing @buffer@, /must/ be a multiple of the type
-- indicated by @indexType@
--
-- - @buffer@ /must/ have been created with the
-- @VK_BUFFER_USAGE_INDEX_BUFFER_BIT@ flag
--
-- - If @buffer@ is non-sparse then it /must/ be bound completely and
-- contiguously to a single @VkDeviceMemory@ object
--
-- == Valid Usage (Implicit)
--
-- - @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
--
-- - @buffer@ /must/ be a valid @VkBuffer@ handle
--
-- - @indexType@ /must/ be a valid 'VkIndexType' value
--
-- - @commandBuffer@ /must/ be in the
-- <#commandbuffers-lifecycle recording state>
--
-- - The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
-- support graphics operations
--
-- - Both of @buffer@, and @commandBuffer@ /must/ have been created,
-- allocated, or retrieved from the same @VkDevice@
--
-- == Host Synchronization
--
-- - Host access to @commandBuffer@ /must/ be externally synchronized
--
-- - Host access to the @VkCommandPool@ that @commandBuffer@ was
-- allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- > +-----------------+-----------------+-----------------+-----------------+
-- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
-- > | erLevel Command | derPass Render | ts Supported Qu | on-pipeline-sta |
-- > | Buffer Levels> | Pass Scope> | eue Types> | ges-types Pipel |
-- > | | | | ine Type> |
-- > +=================+=================+=================+=================+
-- > | Primary | Both | Graphics | |
-- > | Secondary | | | |
-- > +-----------------+-----------------+-----------------+-----------------+
--
-- = See Also
-- #_see_also#
--
-- 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer',
-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer', @VkDeviceSize@,
-- 'VkIndexType'
foreign import ccall "vkCmdBindIndexBuffer" vkCmdBindIndexBuffer :: ("commandBuffer" ::: VkCommandBuffer) -> ("buffer" ::: VkBuffer) -> ("offset" ::: VkDeviceSize) -> ("indexType" ::: VkIndexType) -> IO ()
-- | vkCmdBindVertexBuffers - Bind vertex buffers to a command buffer
--
-- = Parameters
-- #_parameters#
--
-- - @commandBuffer@ is the command buffer into which the command is
-- recorded.
--
-- - @firstBinding@ is the index of the first vertex input binding whose
-- state is updated by the command.
--
-- - @bindingCount@ is the number of vertex input bindings whose state is
-- updated by the command.
--
-- - @pBuffers@ is a pointer to an array of buffer handles.
--
-- - @pOffsets@ is a pointer to an array of buffer offsets.
--
-- = Description
-- #_description#
--
-- The values taken from elements i of @pBuffers@ and @pOffsets@ replace
-- the current state for the vertex input binding @firstBinding@ + i, for i
-- in [0, @bindingCount@). The vertex input binding is updated to start at
-- the offset indicated by @pOffsets@[i] from the start of the buffer
-- @pBuffers@[i]. All vertex input attributes that use each of these
-- bindings will use these updated addresses in their address calculations
-- for subsequent draw commands.
--
-- == Valid Usage
--
-- - @firstBinding@ /must/ be less than
-- @VkPhysicalDeviceLimits@::@maxVertexInputBindings@
--
-- - The sum of @firstBinding@ and @bindingCount@ /must/ be less than or
-- equal to @VkPhysicalDeviceLimits@::@maxVertexInputBindings@
--
-- - All elements of @pOffsets@ /must/ be less than the size of the
-- corresponding element in @pBuffers@
--
-- - All elements of @pBuffers@ /must/ have been created with the
-- @VK_BUFFER_USAGE_VERTEX_BUFFER_BIT@ flag
--
-- - Each element of @pBuffers@ that is non-sparse /must/ be bound
-- completely and contiguously to a single @VkDeviceMemory@ object
--
-- == Valid Usage (Implicit)
--
-- - @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
--
-- - @pBuffers@ /must/ be a valid pointer to an array of @bindingCount@
-- valid @VkBuffer@ handles
--
-- - @pOffsets@ /must/ be a valid pointer to an array of @bindingCount@
-- @VkDeviceSize@ values
--
-- - @commandBuffer@ /must/ be in the
-- <#commandbuffers-lifecycle recording state>
--
-- - The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
-- support graphics operations
--
-- - @bindingCount@ /must/ be greater than @0@
--
-- - Both of @commandBuffer@, and the elements of @pBuffers@ /must/ have
-- been created, allocated, or retrieved from the same @VkDevice@
--
-- == Host Synchronization
--
-- - Host access to @commandBuffer@ /must/ be externally synchronized
--
-- - Host access to the @VkCommandPool@ that @commandBuffer@ was
-- allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- > +-----------------+-----------------+-----------------+-----------------+
-- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
-- > | erLevel Command | derPass Render | ts Supported Qu | on-pipeline-sta |
-- > | Buffer Levels> | Pass Scope> | eue Types> | ges-types Pipel |
-- > | | | | ine Type> |
-- > +=================+=================+=================+=================+
-- > | Primary | Both | Graphics | |
-- > | Secondary | | | |
-- > +-----------------+-----------------+-----------------+-----------------+
--
-- = See Also
-- #_see_also#
--
-- 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer',
-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer', @VkDeviceSize@
foreign import ccall "vkCmdBindVertexBuffers" vkCmdBindVertexBuffers :: ("commandBuffer" ::: VkCommandBuffer) -> ("firstBinding" ::: Word32) -> ("bindingCount" ::: Word32) -> ("pBuffers" ::: Ptr VkBuffer) -> ("pOffsets" ::: Ptr VkDeviceSize) -> IO ()
-- | vkCmdDraw - Draw primitives
--
-- = Parameters
-- #_parameters#
--
-- - @commandBuffer@ is the command buffer into which the command is
-- recorded.
--
-- - @vertexCount@ is the number of vertices to draw.
--
-- - @instanceCount@ is the number of instances to draw.
--
-- - @firstVertex@ is the index of the first vertex to draw.
--
-- - @firstInstance@ is the instance ID of the first instance to draw.
--
-- = Description
-- #_description#
--
-- When the command is executed, primitives are assembled using the current
-- primitive topology and @vertexCount@ consecutive vertex indices with the
-- first @vertexIndex@ value equal to @firstVertex@. The primitives are
-- drawn @instanceCount@ times with @instanceIndex@ starting with
-- @firstInstance@ and increasing sequentially for each instance. The
-- assembled primitives execute the bound graphics pipeline.
--
-- == Valid Usage
--
-- - The current render pass /must/ be
-- <{html_spec_relative}#renderpass-compatibility compatible> with the
-- @renderPass@ member of the @VkGraphicsPipelineCreateInfo@ structure
-- specified when creating the @VkPipeline@ bound to
-- @VK_PIPELINE_BIND_POINT_GRAPHICS@.
--
-- - The subpass index of the current render pass /must/ be equal to the
-- @subpass@ member of the @VkGraphicsPipelineCreateInfo@ structure
-- specified when creating the @VkPipeline@ bound to
-- @VK_PIPELINE_BIND_POINT_GRAPHICS@.
--
-- - For each set /n/ that is statically used by the @VkPipeline@ bound
-- to @VK_PIPELINE_BIND_POINT_GRAPHICS@, a descriptor set /must/ have
-- been bound to /n/ at @VK_PIPELINE_BIND_POINT_GRAPHICS@, with a
-- @VkPipelineLayout@ that is compatible for set /n/, with the
-- @VkPipelineLayout@ used to create the current @VkPipeline@, as
-- described in
-- <{html_spec_relative}#descriptorsets-compatibility {html_spec_relative}#descriptorsets-compatibility>
--
-- - For each push constant that is statically used by the @VkPipeline@
-- bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@, a push constant value
-- /must/ have been set for @VK_PIPELINE_BIND_POINT_GRAPHICS@, with a
-- @VkPipelineLayout@ that is compatible for push constants, with the
-- @VkPipelineLayout@ used to create the current @VkPipeline@, as
-- described in
-- <{html_spec_relative}#descriptorsets-compatibility {html_spec_relative}#descriptorsets-compatibility>
--
-- - Descriptors in each bound descriptor set, specified via
-- @vkCmdBindDescriptorSets@, /must/ be valid if they are statically
-- used by the bound @VkPipeline@ object, specified via
-- @vkCmdBindPipeline@
--
-- - All vertex input bindings accessed via vertex input variables
-- declared in the vertex shader entry point’s interface /must/ have
-- valid buffers bound
--
-- - For a given vertex buffer binding, any attribute data fetched /must/
-- be entirely contained within the corresponding vertex buffer
-- binding, as described in
-- <{html_spec_relative}#fxvertex-input {html_spec_relative}#fxvertex-input>
--
-- - A valid graphics pipeline /must/ be bound to the current command
-- buffer with @VK_PIPELINE_BIND_POINT_GRAPHICS@
--
-- - If the @VkPipeline@ object bound to
-- @VK_PIPELINE_BIND_POINT_GRAPHICS@ requires any dynamic state, that
-- state /must/ have been set on the current command buffer
--
-- - Every input attachment used by the current subpass /must/ be bound
-- to the pipeline via a descriptor set
--
-- - If any @VkSampler@ object that is accessed from a shader by the
-- @VkPipeline@ bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ uses
-- unnormalized coordinates, it /must/ not be used to sample from any
-- @VkImage@ with a @VkImageView@ of the type @VK_IMAGE_VIEW_TYPE_3D@,
-- @VK_IMAGE_VIEW_TYPE_CUBE@, @VK_IMAGE_VIEW_TYPE_1D_ARRAY@,
-- @VK_IMAGE_VIEW_TYPE_2D_ARRAY@ or @VK_IMAGE_VIEW_TYPE_CUBE_ARRAY@, in
-- any shader stage
--
-- - If any @VkSampler@ object that is accessed from a shader by the
-- @VkPipeline@ bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ uses
-- unnormalized coordinates, it /must/ not be used with any of the
-- SPIR-V @OpImageSample*@ or @OpImageSparseSample*@ instructions with
-- @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage
--
-- - If any @VkSampler@ object that is accessed from a shader by the
-- @VkPipeline@ bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ uses
-- unnormalized coordinates, it /must/ not be used with any of the
-- SPIR-V @OpImageSample*@ or @OpImageSparseSample*@ instructions that
-- includes a LOD bias or any offset values, in any shader stage
--
-- - If the
-- <{html_spec_relative}#features-features-robustBufferAccess robust buffer access>
-- feature is not enabled, and any shader stage in the @VkPipeline@
-- object bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ accesses a uniform
-- buffer, it /must/ not access values outside of the range of that
-- buffer specified in the bound descriptor set
--
-- - If the
-- <{html_spec_relative}#features-features-robustBufferAccess robust buffer access>
-- feature is not enabled, and any shader stage in the @VkPipeline@
-- object bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ accesses a storage
-- buffer, it /must/ not access values outside of the range of that
-- buffer specified in the bound descriptor set
--
-- - Any @VkImageView@ being sampled with @VK_FILTER_LINEAR@ as a result
-- of this command /must/ be of a format which supports linear
-- filtering, as specified by the
-- @VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT@ flag in
-- @VkFormatProperties@::@linearTilingFeatures@ (for a linear image) or
-- @VkFormatProperties@::@optimalTilingFeatures@(for an optimally tiled
-- image) returned by @vkGetPhysicalDeviceFormatProperties@
--
-- - Image subresources used as attachments in the current render pass
-- /must/ not be accessed in any way other than as an attachment by
-- this command.
--
-- == Valid Usage (Implicit)
--
-- - @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
--
-- - @commandBuffer@ /must/ be in the
-- <#commandbuffers-lifecycle recording state>
--
-- - The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
-- support graphics operations
--
-- - This command /must/ only be called inside of a render pass instance
--
-- == Host Synchronization
--
-- - Host access to @commandBuffer@ /must/ be externally synchronized
--
-- - Host access to the @VkCommandPool@ that @commandBuffer@ was
-- allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- > +-----------------+-----------------+-----------------+-----------------+
-- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
-- > | erLevel Command | derPass Render | ts Supported Qu | on-pipeline-sta |
-- > | Buffer Levels> | Pass Scope> | eue Types> | ges-types Pipel |
-- > | | | | ine Type> |
-- > +=================+=================+=================+=================+
-- > | Primary | Inside | Graphics | Graphics |
-- > | Secondary | | | |
-- > +-----------------+-----------------+-----------------+-----------------+
--
-- = See Also
-- #_see_also#
--
-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer'
foreign import ccall "vkCmdDraw" vkCmdDraw :: ("commandBuffer" ::: VkCommandBuffer) -> ("vertexCount" ::: Word32) -> ("instanceCount" ::: Word32) -> ("firstVertex" ::: Word32) -> ("firstInstance" ::: Word32) -> IO ()
-- | vkCmdDrawIndexed - Issue an indexed draw into a command buffer
--
-- = Parameters
-- #_parameters#
--
-- - @commandBuffer@ is the command buffer into which the command is
-- recorded.
--
-- - @indexCount@ is the number of vertices to draw.
--
-- - @instanceCount@ is the number of instances to draw.
--
-- - @firstIndex@ is the base index within the index buffer.
--
-- - @vertexOffset@ is the value added to the vertex index before
-- indexing into the vertex buffer.
--
-- - @firstInstance@ is the instance ID of the first instance to draw.
--
-- = Description
-- #_description#
--
-- When the command is executed, primitives are assembled using the current
-- primitive topology and @indexCount@ vertices whose indices are retrieved
-- from the index buffer. The index buffer is treated as an array of
-- tightly packed unsigned integers of size defined by the
-- 'vkCmdBindIndexBuffer'::@indexType@ parameter with which the buffer was
-- bound.
--
-- The first vertex index is at an offset of @firstIndex@ * @indexSize@ +
-- @offset@ within the bound index buffer, where @offset@ is the offset
-- specified by @vkCmdBindIndexBuffer@ and @indexSize@ is the byte size of
-- the type specified by @indexType@. Subsequent index values are retrieved
-- from consecutive locations in the index buffer. Indices are first
-- compared to the primitive restart value, then zero extended to 32 bits
-- (if the @indexType@ is @VK_INDEX_TYPE_UINT16@) and have @vertexOffset@
-- added to them, before being supplied as the @vertexIndex@ value.
--
-- The primitives are drawn @instanceCount@ times with @instanceIndex@
-- starting with @firstInstance@ and increasing sequentially for each
-- instance. The assembled primitives execute the bound graphics pipeline.
--
-- == Valid Usage
--
-- - The current render pass /must/ be
-- <{html_spec_relative}#renderpass-compatibility compatible> with the
-- @renderPass@ member of the @VkGraphicsPipelineCreateInfo@ structure
-- specified when creating the @VkPipeline@ bound to
-- @VK_PIPELINE_BIND_POINT_GRAPHICS@.
--
-- - The subpass index of the current render pass /must/ be equal to the
-- @subpass@ member of the @VkGraphicsPipelineCreateInfo@ structure
-- specified when creating the @VkPipeline@ bound to
-- @VK_PIPELINE_BIND_POINT_GRAPHICS@.
--
-- - For each set /n/ that is statically used by the @VkPipeline@ bound
-- to @VK_PIPELINE_BIND_POINT_GRAPHICS@, a descriptor set /must/ have
-- been bound to /n/ at @VK_PIPELINE_BIND_POINT_GRAPHICS@, with a
-- @VkPipelineLayout@ that is compatible for set /n/, with the
-- @VkPipelineLayout@ used to create the current @VkPipeline@, as
-- described in
-- <{html_spec_relative}#descriptorsets-compatibility {html_spec_relative}#descriptorsets-compatibility>
--
-- - For each push constant that is statically used by the @VkPipeline@
-- bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@, a push constant value
-- /must/ have been set for @VK_PIPELINE_BIND_POINT_GRAPHICS@, with a
-- @VkPipelineLayout@ that is compatible for push constants, with the
-- @VkPipelineLayout@ used to create the current @VkPipeline@, as
-- described in
-- <{html_spec_relative}#descriptorsets-compatibility {html_spec_relative}#descriptorsets-compatibility>
--
-- - Descriptors in each bound descriptor set, specified via
-- @vkCmdBindDescriptorSets@, /must/ be valid if they are statically
-- used by the bound @VkPipeline@ object, specified via
-- @vkCmdBindPipeline@
--
-- - All vertex input bindings accessed via vertex input variables
-- declared in the vertex shader entry point’s interface /must/ have
-- valid buffers bound
--
-- - For a given vertex buffer binding, any attribute data fetched /must/
-- be entirely contained within the corresponding vertex buffer
-- binding, as described in
-- <{html_spec_relative}#fxvertex-input {html_spec_relative}#fxvertex-input>
--
-- - A valid graphics pipeline /must/ be bound to the current command
-- buffer with @VK_PIPELINE_BIND_POINT_GRAPHICS@
--
-- - If the @VkPipeline@ object bound to
-- @VK_PIPELINE_BIND_POINT_GRAPHICS@ requires any dynamic state, that
-- state /must/ have been set on the current command buffer
--
-- - (@indexSize@ * (@firstIndex@ + @indexCount@) + @offset@) /must/ be
-- less than or equal to the size of the bound index buffer, with
-- indexSize being based on the type specified by @indexType@, where
-- the index buffer, @indexType@, and @offset@ are specified via
-- @vkCmdBindIndexBuffer@
--
-- - Every input attachment used by the current subpass /must/ be bound
-- to the pipeline via a descriptor set
--
-- - If any @VkSampler@ object that is accessed from a shader by the
-- @VkPipeline@ bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ uses
-- unnormalized coordinates, it /must/ not be used to sample from any
-- @VkImage@ with a @VkImageView@ of the type @VK_IMAGE_VIEW_TYPE_3D@,
-- @VK_IMAGE_VIEW_TYPE_CUBE@, @VK_IMAGE_VIEW_TYPE_1D_ARRAY@,
-- @VK_IMAGE_VIEW_TYPE_2D_ARRAY@ or @VK_IMAGE_VIEW_TYPE_CUBE_ARRAY@, in
-- any shader stage
--
-- - If any @VkSampler@ object that is accessed from a shader by the
-- @VkPipeline@ bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ uses
-- unnormalized coordinates, it /must/ not be used with any of the
-- SPIR-V @OpImageSample*@ or @OpImageSparseSample*@ instructions with
-- @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage
--
-- - If any @VkSampler@ object that is accessed from a shader by the
-- @VkPipeline@ bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ uses
-- unnormalized coordinates, it /must/ not be used with any of the
-- SPIR-V @OpImageSample*@ or @OpImageSparseSample*@ instructions that
-- includes a LOD bias or any offset values, in any shader stage
--
-- - If the
-- <{html_spec_relative}#features-features-robustBufferAccess robust buffer access>
-- feature is not enabled, and any shader stage in the @VkPipeline@
-- object bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ accesses a uniform
-- buffer, it /must/ not access values outside of the range of that
-- buffer specified in the bound descriptor set
--
-- - If the
-- <{html_spec_relative}#features-features-robustBufferAccess robust buffer access>
-- feature is not enabled, and any shader stage in the @VkPipeline@
-- object bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ accesses a storage
-- buffer, it /must/ not access values outside of the range of that
-- buffer specified in the bound descriptor set
--
-- - Any @VkImageView@ being sampled with @VK_FILTER_LINEAR@ as a result
-- of this command /must/ be of a format which supports linear
-- filtering, as specified by the
-- @VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT@ flag in
-- @VkFormatProperties@::@linearTilingFeatures@ (for a linear image) or
-- @VkFormatProperties@::@optimalTilingFeatures@(for an optimally tiled
-- image) returned by @vkGetPhysicalDeviceFormatProperties@
--
-- - Image subresources used as attachments in the current render pass
-- /must/ not be accessed in any way other than as an attachment by
-- this command.
--
-- == Valid Usage (Implicit)
--
-- - @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
--
-- - @commandBuffer@ /must/ be in the
-- <#commandbuffers-lifecycle recording state>
--
-- - The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
-- support graphics operations
--
-- - This command /must/ only be called inside of a render pass instance
--
-- == Host Synchronization
--
-- - Host access to @commandBuffer@ /must/ be externally synchronized
--
-- - Host access to the @VkCommandPool@ that @commandBuffer@ was
-- allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- > +-----------------+-----------------+-----------------+-----------------+
-- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
-- > | erLevel Command | derPass Render | ts Supported Qu | on-pipeline-sta |
-- > | Buffer Levels> | Pass Scope> | eue Types> | ges-types Pipel |
-- > | | | | ine Type> |
-- > +=================+=================+=================+=================+
-- > | Primary | Inside | Graphics | Graphics |
-- > | Secondary | | | |
-- > +-----------------+-----------------+-----------------+-----------------+
--
-- = See Also
-- #_see_also#
--
-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer'
foreign import ccall "vkCmdDrawIndexed" vkCmdDrawIndexed :: ("commandBuffer" ::: VkCommandBuffer) -> ("indexCount" ::: Word32) -> ("instanceCount" ::: Word32) -> ("firstIndex" ::: Word32) -> ("vertexOffset" ::: Int32) -> ("firstInstance" ::: Word32) -> IO ()
-- | vkCmdDrawIndirect - Issue an indirect draw into a command buffer
--
-- = Parameters
-- #_parameters#
--
-- - @commandBuffer@ is the command buffer into which the command is
-- recorded.
--
-- - @buffer@ is the buffer containing draw parameters.
--
-- - @offset@ is the byte offset into @buffer@ where parameters begin.
--
-- - @drawCount@ is the number of draws to execute, and /can/ be zero.
--
-- - @stride@ is the byte stride between successive sets of draw
-- parameters.
--
-- = Description
-- #_description#
--
-- @vkCmdDrawIndirect@ behaves similarly to 'vkCmdDraw' except that the
-- parameters are read by the device from a buffer during execution.
-- @drawCount@ draws are executed by the command, with parameters taken
-- from @buffer@ starting at @offset@ and increasing by @stride@ bytes for
-- each successive draw. The parameters of each draw are encoded in an
-- array of 'VkDrawIndirectCommand' structures. If @drawCount@ is less than
-- or equal to one, @stride@ is ignored.
--
-- == Valid Usage
--
-- - If @buffer@ is non-sparse then it /must/ be bound completely and
-- contiguously to a single @VkDeviceMemory@ object
--
-- - @buffer@ /must/ have been created with the
-- @VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT@ bit set
--
-- - @offset@ /must/ be a multiple of @4@
--
-- - If @drawCount@ is greater than @1@, @stride@ /must/ be a multiple of
-- @4@ and /must/ be greater than or equal to
-- @sizeof@(@VkDrawIndirectCommand@)
--
-- - If the
-- <{html_spec_relative}#features-features-multiDrawIndirect multi-draw indirect>
-- feature is not enabled, @drawCount@ /must/ be @0@ or @1@
--
-- - If the
-- <{html_spec_relative}#features-features-drawIndirectFirstInstance drawIndirectFirstInstance>
-- feature is not enabled, all the @firstInstance@ members of the
-- @VkDrawIndirectCommand@ structures accessed by this command /must/
-- be @0@
--
-- - The current render pass /must/ be
-- <{html_spec_relative}#renderpass-compatibility compatible> with the
-- @renderPass@ member of the @VkGraphicsPipelineCreateInfo@ structure
-- specified when creating the @VkPipeline@ bound to
-- @VK_PIPELINE_BIND_POINT_GRAPHICS@.
--
-- - The subpass index of the current render pass /must/ be equal to the
-- @subpass@ member of the @VkGraphicsPipelineCreateInfo@ structure
-- specified when creating the @VkPipeline@ bound to
-- @VK_PIPELINE_BIND_POINT_GRAPHICS@.
--
-- - For each set /n/ that is statically used by the @VkPipeline@ bound
-- to @VK_PIPELINE_BIND_POINT_GRAPHICS@, a descriptor set /must/ have
-- been bound to /n/ at @VK_PIPELINE_BIND_POINT_GRAPHICS@, with a
-- @VkPipelineLayout@ that is compatible for set /n/, with the
-- @VkPipelineLayout@ used to create the current @VkPipeline@, as
-- described in
-- <{html_spec_relative}#descriptorsets-compatibility {html_spec_relative}#descriptorsets-compatibility>
--
-- - For each push constant that is statically used by the @VkPipeline@
-- bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@, a push constant value
-- /must/ have been set for @VK_PIPELINE_BIND_POINT_GRAPHICS@, with a
-- @VkPipelineLayout@ that is compatible for push constants, with the
-- @VkPipelineLayout@ used to create the current @VkPipeline@, as
-- described in
-- <{html_spec_relative}#descriptorsets-compatibility {html_spec_relative}#descriptorsets-compatibility>
--
-- - Descriptors in each bound descriptor set, specified via
-- @vkCmdBindDescriptorSets@, /must/ be valid if they are statically
-- used by the bound @VkPipeline@ object, specified via
-- @vkCmdBindPipeline@
--
-- - All vertex input bindings accessed via vertex input variables
-- declared in the vertex shader entry point’s interface /must/ have
-- valid buffers bound
--
-- - A valid graphics pipeline /must/ be bound to the current command
-- buffer with @VK_PIPELINE_BIND_POINT_GRAPHICS@
--
-- - If the @VkPipeline@ object bound to
-- @VK_PIPELINE_BIND_POINT_GRAPHICS@ requires any dynamic state, that
-- state /must/ have been set on the current command buffer
--
-- - If @drawCount@ is equal to @1@, (@offset@ +
-- @sizeof@('VkDrawIndirectCommand')) /must/ be less than or equal to
-- the size of @buffer@
--
-- - If @drawCount@ is greater than @1@, (@stride@ × (@drawCount@ - 1) +
-- @offset@ + @sizeof@('VkDrawIndirectCommand')) /must/ be less than or
-- equal to the size of @buffer@
--
-- - @drawCount@ /must/ be less than or equal to
-- @VkPhysicalDeviceLimits@::@maxDrawIndirectCount@
--
-- - Every input attachment used by the current subpass /must/ be bound
-- to the pipeline via a descriptor set
--
-- - If any @VkSampler@ object that is accessed from a shader by the
-- @VkPipeline@ bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ uses
-- unnormalized coordinates, it /must/ not be used to sample from any
-- @VkImage@ with a @VkImageView@ of the type @VK_IMAGE_VIEW_TYPE_3D@,
-- @VK_IMAGE_VIEW_TYPE_CUBE@, @VK_IMAGE_VIEW_TYPE_1D_ARRAY@,
-- @VK_IMAGE_VIEW_TYPE_2D_ARRAY@ or @VK_IMAGE_VIEW_TYPE_CUBE_ARRAY@, in
-- any shader stage
--
-- - If any @VkSampler@ object that is accessed from a shader by the
-- @VkPipeline@ bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ uses
-- unnormalized coordinates, it /must/ not be used with any of the
-- SPIR-V @OpImageSample*@ or @OpImageSparseSample*@ instructions with
-- @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage
--
-- - If any @VkSampler@ object that is accessed from a shader by the
-- @VkPipeline@ bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ uses
-- unnormalized coordinates, it /must/ not be used with any of the
-- SPIR-V @OpImageSample*@ or @OpImageSparseSample*@ instructions that
-- includes a LOD bias or any offset values, in any shader stage
--
-- - If the
-- <{html_spec_relative}#features-features-robustBufferAccess robust buffer access>
-- feature is not enabled, and any shader stage in the @VkPipeline@
-- object bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ accesses a uniform
-- buffer, it /must/ not access values outside of the range of that
-- buffer specified in the bound descriptor set
--
-- - If the
-- <{html_spec_relative}#features-features-robustBufferAccess robust buffer access>
-- feature is not enabled, and any shader stage in the @VkPipeline@
-- object bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ accesses a storage
-- buffer, it /must/ not access values outside of the range of that
-- buffer specified in the bound descriptor set
--
-- - Any @VkImageView@ being sampled with @VK_FILTER_LINEAR@ as a result
-- of this command /must/ be of a format which supports linear
-- filtering, as specified by the
-- @VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT@ flag in
-- @VkFormatProperties@::@linearTilingFeatures@ (for a linear image) or
-- @VkFormatProperties@::@optimalTilingFeatures@(for an optimally tiled
-- image) returned by @vkGetPhysicalDeviceFormatProperties@
--
-- - Image subresources used as attachments in the current render pass
-- /must/ not be accessed in any way other than as an attachment by
-- this command.
--
-- == Valid Usage (Implicit)
--
-- - @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
--
-- - @buffer@ /must/ be a valid @VkBuffer@ handle
--
-- - @commandBuffer@ /must/ be in the
-- <#commandbuffers-lifecycle recording state>
--
-- - The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
-- support graphics operations
--
-- - This command /must/ only be called inside of a render pass instance
--
-- - Both of @buffer@, and @commandBuffer@ /must/ have been created,
-- allocated, or retrieved from the same @VkDevice@
--
-- == Host Synchronization
--
-- - Host access to @commandBuffer@ /must/ be externally synchronized
--
-- - Host access to the @VkCommandPool@ that @commandBuffer@ was
-- allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- > +-----------------+-----------------+-----------------+-----------------+
-- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
-- > | erLevel Command | derPass Render | ts Supported Qu | on-pipeline-sta |
-- > | Buffer Levels> | Pass Scope> | eue Types> | ges-types Pipel |
-- > | | | | ine Type> |
-- > +=================+=================+=================+=================+
-- > | Primary | Inside | Graphics | Graphics |
-- > | Secondary | | | |
-- > +-----------------+-----------------+-----------------+-----------------+
--
-- = See Also
-- #_see_also#
--
-- 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer',
-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer', @VkDeviceSize@
foreign import ccall "vkCmdDrawIndirect" vkCmdDrawIndirect :: ("commandBuffer" ::: VkCommandBuffer) -> ("buffer" ::: VkBuffer) -> ("offset" ::: VkDeviceSize) -> ("drawCount" ::: Word32) -> ("stride" ::: Word32) -> IO ()
-- | vkCmdDrawIndexedIndirect - Perform an indexed indirect draw
--
-- = Parameters
-- #_parameters#
--
-- - @commandBuffer@ is the command buffer into which the command is
-- recorded.
--
-- - @buffer@ is the buffer containing draw parameters.
--
-- - @offset@ is the byte offset into @buffer@ where parameters begin.
--
-- - @drawCount@ is the number of draws to execute, and /can/ be zero.
--
-- - @stride@ is the byte stride between successive sets of draw
-- parameters.
--
-- = Description
-- #_description#
--
-- @vkCmdDrawIndexedIndirect@ behaves similarly to 'vkCmdDrawIndexed'
-- except that the parameters are read by the device from a buffer during
-- execution. @drawCount@ draws are executed by the command, with
-- parameters taken from @buffer@ starting at @offset@ and increasing by
-- @stride@ bytes for each successive draw. The parameters of each draw are
-- encoded in an array of 'VkDrawIndexedIndirectCommand' structures. If
-- @drawCount@ is less than or equal to one, @stride@ is ignored.
--
-- == Valid Usage
--
-- - If @buffer@ is non-sparse then it /must/ be bound completely and
-- contiguously to a single @VkDeviceMemory@ object
--
-- - @buffer@ /must/ have been created with the
-- @VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT@ bit set
--
-- - @offset@ /must/ be a multiple of @4@
--
-- - If @drawCount@ is greater than @1@, @stride@ /must/ be a multiple of
-- @4@ and /must/ be greater than or equal to
-- @sizeof@(@VkDrawIndexedIndirectCommand@)
--
-- - If the
-- <{html_spec_relative}#features-features-multiDrawIndirect multi-draw indirect>
-- feature is not enabled, @drawCount@ /must/ be @0@ or @1@
--
-- - If the
-- <{html_spec_relative}#features-features-drawIndirectFirstInstance drawIndirectFirstInstance>
-- feature is not enabled, all the @firstInstance@ members of the
-- @VkDrawIndexedIndirectCommand@ structures accessed by this command
-- /must/ be @0@
--
-- - The current render pass /must/ be
-- <{html_spec_relative}#renderpass-compatibility compatible> with the
-- @renderPass@ member of the @VkGraphicsPipelineCreateInfo@ structure
-- specified when creating the @VkPipeline@ bound to
-- @VK_PIPELINE_BIND_POINT_GRAPHICS@.
--
-- - The subpass index of the current render pass /must/ be equal to the
-- @subpass@ member of the @VkGraphicsPipelineCreateInfo@ structure
-- specified when creating the @VkPipeline@ bound to
-- @VK_PIPELINE_BIND_POINT_GRAPHICS@.
--
-- - For each set /n/ that is statically used by the @VkPipeline@ bound
-- to @VK_PIPELINE_BIND_POINT_GRAPHICS@, a descriptor set /must/ have
-- been bound to /n/ at @VK_PIPELINE_BIND_POINT_GRAPHICS@, with a
-- @VkPipelineLayout@ that is compatible for set /n/, with the
-- @VkPipelineLayout@ used to create the current @VkPipeline@, as
-- described in
-- <{html_spec_relative}#descriptorsets-compatibility {html_spec_relative}#descriptorsets-compatibility>
--
-- - For each push constant that is statically used by the @VkPipeline@
-- bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@, a push constant value
-- /must/ have been set for @VK_PIPELINE_BIND_POINT_GRAPHICS@, with a
-- @VkPipelineLayout@ that is compatible for push constants, with the
-- @VkPipelineLayout@ used to create the current @VkPipeline@, as
-- described in
-- <{html_spec_relative}#descriptorsets-compatibility {html_spec_relative}#descriptorsets-compatibility>
--
-- - Descriptors in each bound descriptor set, specified via
-- @vkCmdBindDescriptorSets@, /must/ be valid if they are statically
-- used by the bound @VkPipeline@ object, specified via
-- @vkCmdBindPipeline@
--
-- - All vertex input bindings accessed via vertex input variables
-- declared in the vertex shader entry point’s interface /must/ have
-- valid buffers bound
--
-- - A valid graphics pipeline /must/ be bound to the current command
-- buffer with @VK_PIPELINE_BIND_POINT_GRAPHICS@
--
-- - If the @VkPipeline@ object bound to
-- @VK_PIPELINE_BIND_POINT_GRAPHICS@ requires any dynamic state, that
-- state /must/ have been set on the current command buffer
--
-- - If @drawCount@ is equal to @1@, (@offset@ +
-- @sizeof@(@VkDrawIndexedIndirectCommand@)) /must/ be less than or
-- equal to the size of @buffer@
--
-- - If @drawCount@ is greater than @1@, (@stride@ × (@drawCount@ - 1) +
-- @offset@ + @sizeof@(@VkDrawIndexedIndirectCommand@)) /must/ be less
-- than or equal to the size of @buffer@
--
-- - @drawCount@ /must/ be less than or equal to
-- @VkPhysicalDeviceLimits@::@maxDrawIndirectCount@
--
-- - Every input attachment used by the current subpass /must/ be bound
-- to the pipeline via a descriptor set
--
-- - If any @VkSampler@ object that is accessed from a shader by the
-- @VkPipeline@ bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ uses
-- unnormalized coordinates, it /must/ not be used to sample from any
-- @VkImage@ with a @VkImageView@ of the type @VK_IMAGE_VIEW_TYPE_3D@,
-- @VK_IMAGE_VIEW_TYPE_CUBE@, @VK_IMAGE_VIEW_TYPE_1D_ARRAY@,
-- @VK_IMAGE_VIEW_TYPE_2D_ARRAY@ or @VK_IMAGE_VIEW_TYPE_CUBE_ARRAY@, in
-- any shader stage
--
-- - If any @VkSampler@ object that is accessed from a shader by the
-- @VkPipeline@ bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ uses
-- unnormalized coordinates, it /must/ not be used with any of the
-- SPIR-V @OpImageSample*@ or @OpImageSparseSample*@ instructions with
-- @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage
--
-- - If any @VkSampler@ object that is accessed from a shader by the
-- @VkPipeline@ bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ uses
-- unnormalized coordinates, it /must/ not be used with any of the
-- SPIR-V @OpImageSample*@ or @OpImageSparseSample*@ instructions that
-- includes a LOD bias or any offset values, in any shader stage
--
-- - If the
-- <{html_spec_relative}#features-features-robustBufferAccess robust buffer access>
-- feature is not enabled, and any shader stage in the @VkPipeline@
-- object bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ accesses a uniform
-- buffer, it /must/ not access values outside of the range of that
-- buffer specified in the bound descriptor set
--
-- - If the
-- <{html_spec_relative}#features-features-robustBufferAccess robust buffer access>
-- feature is not enabled, and any shader stage in the @VkPipeline@
-- object bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ accesses a storage
-- buffer, it /must/ not access values outside of the range of that
-- buffer specified in the bound descriptor set
--
-- - Any @VkImageView@ being sampled with @VK_FILTER_LINEAR@ as a result
-- of this command /must/ be of a format which supports linear
-- filtering, as specified by the
-- @VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT@ flag in
-- @VkFormatProperties@::@linearTilingFeatures@ (for a linear image) or
-- @VkFormatProperties@::@optimalTilingFeatures@(for an optimally tiled
-- image) returned by @vkGetPhysicalDeviceFormatProperties@
--
-- - Image subresources used as attachments in the current render pass
-- /must/ not be accessed in any way other than as an attachment by
-- this command.
--
-- == Valid Usage (Implicit)
--
-- - @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
--
-- - @buffer@ /must/ be a valid @VkBuffer@ handle
--
-- - @commandBuffer@ /must/ be in the
-- <#commandbuffers-lifecycle recording state>
--
-- - The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
-- support graphics operations
--
-- - This command /must/ only be called inside of a render pass instance
--
-- - Both of @buffer@, and @commandBuffer@ /must/ have been created,
-- allocated, or retrieved from the same @VkDevice@
--
-- == Host Synchronization
--
-- - Host access to @commandBuffer@ /must/ be externally synchronized
--
-- - Host access to the @VkCommandPool@ that @commandBuffer@ was
-- allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- > +-----------------+-----------------+-----------------+-----------------+
-- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
-- > | erLevel Command | derPass Render | ts Supported Qu | on-pipeline-sta |
-- > | Buffer Levels> | Pass Scope> | eue Types> | ges-types Pipel |
-- > | | | | ine Type> |
-- > +=================+=================+=================+=================+
-- > | Primary | Inside | Graphics | Graphics |
-- > | Secondary | | | |
-- > +-----------------+-----------------+-----------------+-----------------+
--
-- = See Also
-- #_see_also#
--
-- 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer',
-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer', @VkDeviceSize@
foreign import ccall "vkCmdDrawIndexedIndirect" vkCmdDrawIndexedIndirect :: ("commandBuffer" ::: VkCommandBuffer) -> ("buffer" ::: VkBuffer) -> ("offset" ::: VkDeviceSize) -> ("drawCount" ::: Word32) -> ("stride" ::: Word32) -> IO ()
-- | vkCmdDispatch - Dispatch compute work items
--
-- = Parameters
-- #_parameters#
--
-- - @commandBuffer@ is the command buffer into which the command will be
-- recorded.
--
-- - @groupCountX@ is the number of local workgroups to dispatch in the X
-- dimension.
--
-- - @groupCountY@ is the number of local workgroups to dispatch in the Y
-- dimension.
--
-- - @groupCountZ@ is the number of local workgroups to dispatch in the Z
-- dimension.
--
-- = Description
-- #_description#
--
-- When the command is executed, a global workgroup consisting of
-- groupCountX × groupCountY × groupCountZ local workgroups is assembled.
--
-- == Valid Usage
--
-- - @groupCountX@ /must/ be less than or equal to
-- @VkPhysicalDeviceLimits@::@maxComputeWorkGroupCount@[0]
--
-- - @groupCountY@ /must/ be less than or equal to
-- @VkPhysicalDeviceLimits@::@maxComputeWorkGroupCount@[1]
--
-- - @groupCountZ@ /must/ be less than or equal to
-- @VkPhysicalDeviceLimits@::@maxComputeWorkGroupCount@[2]
--
-- - For each set /n/ that is statically used by the @VkPipeline@ bound
-- to @VK_PIPELINE_BIND_POINT_COMPUTE@, a descriptor set /must/ have
-- been bound to /n/ at @VK_PIPELINE_BIND_POINT_COMPUTE@, with a
-- @VkPipelineLayout@ that is compatible for set /n/, with the
-- @VkPipelineLayout@ used to create the current @VkPipeline@, as
-- described in
-- <{html_spec_relative}#descriptorsets-compatibility {html_spec_relative}#descriptorsets-compatibility>
--
-- - Descriptors in each bound descriptor set, specified via
-- @vkCmdBindDescriptorSets@, /must/ be valid if they are statically
-- used by the bound @VkPipeline@ object, specified via
-- @vkCmdBindPipeline@
--
-- - A valid compute pipeline /must/ be bound to the current command
-- buffer with @VK_PIPELINE_BIND_POINT_COMPUTE@
--
-- - For each push constant that is statically used by the @VkPipeline@
-- bound to @VK_PIPELINE_BIND_POINT_COMPUTE@, a push constant value
-- /must/ have been set for @VK_PIPELINE_BIND_POINT_COMPUTE@, with a
-- @VkPipelineLayout@ that is compatible for push constants with the
-- one used to create the current @VkPipeline@, as described in
-- <{html_spec_relative}#descriptorsets-compatibility {html_spec_relative}#descriptorsets-compatibility>
--
-- - If any @VkSampler@ object that is accessed from a shader by the
-- @VkPipeline@ bound to @VK_PIPELINE_BIND_POINT_COMPUTE@ uses
-- unnormalized coordinates, it /must/ not be used to sample from any
-- @VkImage@ with a @VkImageView@ of the type @VK_IMAGE_VIEW_TYPE_3D@,
-- @VK_IMAGE_VIEW_TYPE_CUBE@, @VK_IMAGE_VIEW_TYPE_1D_ARRAY@,
-- @VK_IMAGE_VIEW_TYPE_2D_ARRAY@ or @VK_IMAGE_VIEW_TYPE_CUBE_ARRAY@, in
-- any shader stage
--
-- - If any @VkSampler@ object that is accessed from a shader by the
-- @VkPipeline@ bound to @VK_PIPELINE_BIND_POINT_COMPUTE@ uses
-- unnormalized coordinates, it /must/ not be used with any of the
-- SPIR-V @OpImageSample*@ or @OpImageSparseSample*@ instructions with
-- @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage
--
-- - If any @VkSampler@ object that is accessed from a shader by the
-- @VkPipeline@ bound to @VK_PIPELINE_BIND_POINT_COMPUTE@ uses
-- unnormalized coordinates, it /must/ not be used with any of the
-- SPIR-V @OpImageSample*@ or @OpImageSparseSample*@ instructions that
-- includes a LOD bias or any offset values, in any shader stage
--
-- - If the
-- <{html_spec_relative}#features-features-robustBufferAccess robust buffer access>
-- feature is not enabled, and any shader stage in the @VkPipeline@
-- object bound to @VK_PIPELINE_BIND_POINT_COMPUTE@ accesses a uniform
-- buffer, it /must/ not access values outside of the range of that
-- buffer specified in the bound descriptor set
--
-- - If the
-- <{html_spec_relative}#features-features-robustBufferAccess robust buffer access>
-- feature is not enabled, and any shader stage in the @VkPipeline@
-- object bound to @VK_PIPELINE_BIND_POINT_COMPUTE@ accesses a storage
-- buffer, it /must/ not access values outside of the range of that
-- buffer specified in the bound descriptor set
--
-- - Any @VkImageView@ being sampled with @VK_FILTER_LINEAR@ as a result
-- of this command /must/ be of a format which supports linear
-- filtering, as specified by the
-- @VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT@ flag in
-- @VkFormatProperties@::@linearTilingFeatures@ (for a linear image) or
-- @VkFormatProperties@::@optimalTilingFeatures@(for an optimally tiled
-- image) returned by @vkGetPhysicalDeviceFormatProperties@
--
-- == Valid Usage (Implicit)
--
-- - @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
--
-- - @commandBuffer@ /must/ be in the
-- <#commandbuffers-lifecycle recording state>
--
-- - The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
-- support compute operations
--
-- - This command /must/ only be called outside of a render pass instance
--
-- == Host Synchronization
--
-- - Host access to @commandBuffer@ /must/ be externally synchronized
--
-- - Host access to the @VkCommandPool@ that @commandBuffer@ was
-- allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- > +-----------------+-----------------+-----------------+-----------------+
-- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
-- > | erLevel Command | derPass Render | ts Supported Qu | on-pipeline-sta |
-- > | Buffer Levels> | Pass Scope> | eue Types> | ges-types Pipel |
-- > | | | | ine Type> |
-- > +=================+=================+=================+=================+
-- > | Primary | Outside | Compute | Compute |
-- > | Secondary | | | |
-- > +-----------------+-----------------+-----------------+-----------------+
--
-- = See Also
-- #_see_also#
--
-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer'
foreign import ccall "vkCmdDispatch" vkCmdDispatch :: ("commandBuffer" ::: VkCommandBuffer) -> ("groupCountX" ::: Word32) -> ("groupCountY" ::: Word32) -> ("groupCountZ" ::: Word32) -> IO ()
-- | vkCmdDispatchIndirect - Dispatch compute work items using indirect
-- parameters
--
-- = Parameters
-- #_parameters#
--
-- - @commandBuffer@ is the command buffer into which the command will be
-- recorded.
--
-- - @buffer@ is the buffer containing dispatch parameters.
--
-- - @offset@ is the byte offset into @buffer@ where parameters begin.
--
-- = Description
-- #_description#
--
-- @vkCmdDispatchIndirect@ behaves similarly to 'vkCmdDispatch' except that
-- the parameters are read by the device from a buffer during execution.
-- The parameters of the dispatch are encoded in a
-- 'VkDispatchIndirectCommand' structure taken from @buffer@ starting at
-- @offset@.
--
-- == Valid Usage
--
-- - If @buffer@ is non-sparse then it /must/ be bound completely and
-- contiguously to a single @VkDeviceMemory@ object
--
-- - For each set /n/ that is statically used by the @VkPipeline@ bound
-- to @VK_PIPELINE_BIND_POINT_COMPUTE@, a descriptor set /must/ have
-- been bound to /n/ at @VK_PIPELINE_BIND_POINT_COMPUTE@, with a
-- @VkPipelineLayout@ that is compatible for set /n/, with the
-- @VkPipelineLayout@ used to create the current @VkPipeline@, as
-- described in
-- <{html_spec_relative}#descriptorsets-compatibility {html_spec_relative}#descriptorsets-compatibility>
--
-- - Descriptors in each bound descriptor set, specified via
-- @vkCmdBindDescriptorSets@, /must/ be valid if they are statically
-- used by the bound @VkPipeline@ object, specified via
-- @vkCmdBindPipeline@
--
-- - A valid compute pipeline /must/ be bound to the current command
-- buffer with @VK_PIPELINE_BIND_POINT_COMPUTE@
--
-- - @buffer@ /must/ have been created with the
-- @VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT@ bit set
--
-- - @offset@ /must/ be a multiple of @4@
--
-- - The sum of @offset@ and the size of @VkDispatchIndirectCommand@
-- /must/ be less than or equal to the size of @buffer@
--
-- - For each push constant that is statically used by the @VkPipeline@
-- bound to @VK_PIPELINE_BIND_POINT_COMPUTE@, a push constant value
-- /must/ have been set for @VK_PIPELINE_BIND_POINT_COMPUTE@, with a
-- @VkPipelineLayout@ that is compatible for push constants with the
-- one used to create the current @VkPipeline@, as described in
-- <{html_spec_relative}#descriptorsets-compatibility {html_spec_relative}#descriptorsets-compatibility>
--
-- - If any @VkSampler@ object that is accessed from a shader by the
-- @VkPipeline@ bound to @VK_PIPELINE_BIND_POINT_COMPUTE@ uses
-- unnormalized coordinates, it /must/ not be used to sample from any
-- @VkImage@ with a @VkImageView@ of the type @VK_IMAGE_VIEW_TYPE_3D@,
-- @VK_IMAGE_VIEW_TYPE_CUBE@, @VK_IMAGE_VIEW_TYPE_1D_ARRAY@,
-- @VK_IMAGE_VIEW_TYPE_2D_ARRAY@ or @VK_IMAGE_VIEW_TYPE_CUBE_ARRAY@, in
-- any shader stage
--
-- - If any @VkSampler@ object that is accessed from a shader by the
-- @VkPipeline@ bound to @VK_PIPELINE_BIND_POINT_COMPUTE@ uses
-- unnormalized coordinates, it /must/ not be used with any of the
-- SPIR-V @OpImageSample*@ or @OpImageSparseSample*@ instructions with
-- @ImplicitLod@, @Dref@ or @Proj@ in their name, in any shader stage
--
-- - If any @VkSampler@ object that is accessed from a shader by the
-- @VkPipeline@ bound to @VK_PIPELINE_BIND_POINT_COMPUTE@ uses
-- unnormalized coordinates, it /must/ not be used with any of the
-- SPIR-V @OpImageSample*@ or @OpImageSparseSample*@ instructions that
-- includes a LOD bias or any offset values, in any shader stage
--
-- - If the
-- <{html_spec_relative}#features-features-robustBufferAccess robust buffer access>
-- feature is not enabled, and any shader stage in the @VkPipeline@
-- object bound to @VK_PIPELINE_BIND_POINT_COMPUTE@ accesses a uniform
-- buffer, it /must/ not access values outside of the range of that
-- buffer specified in the bound descriptor set
--
-- - If the
-- <{html_spec_relative}#features-features-robustBufferAccess robust buffer access>
-- feature is not enabled, and any shader stage in the @VkPipeline@
-- object bound to @VK_PIPELINE_BIND_POINT_COMPUTE@ accesses a storage
-- buffer, it /must/ not access values outside of the range of that
-- buffer specified in the bound descriptor set
--
-- - Any @VkImageView@ being sampled with @VK_FILTER_LINEAR@ as a result
-- of this command /must/ be of a format which supports linear
-- filtering, as specified by the
-- @VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT@ flag in
-- @VkFormatProperties@::@linearTilingFeatures@ (for a linear image) or
-- @VkFormatProperties@::@optimalTilingFeatures@(for an optimally tiled
-- image) returned by @vkGetPhysicalDeviceFormatProperties@
--
-- == Valid Usage (Implicit)
--
-- - @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
--
-- - @buffer@ /must/ be a valid @VkBuffer@ handle
--
-- - @commandBuffer@ /must/ be in the
-- <#commandbuffers-lifecycle recording state>
--
-- - The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
-- support compute operations
--
-- - This command /must/ only be called outside of a render pass instance
--
-- - Both of @buffer@, and @commandBuffer@ /must/ have been created,
-- allocated, or retrieved from the same @VkDevice@
--
-- == Host Synchronization
--
-- - Host access to @commandBuffer@ /must/ be externally synchronized
--
-- - Host access to the @VkCommandPool@ that @commandBuffer@ was
-- allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- > +-----------------+-----------------+-----------------+-----------------+
-- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
-- > | erLevel Command | derPass Render | ts Supported Qu | on-pipeline-sta |
-- > | Buffer Levels> | Pass Scope> | eue Types> | ges-types Pipel |
-- > | | | | ine Type> |
-- > +=================+=================+=================+=================+
-- > | Primary | Outside | Compute | Compute |
-- > | Secondary | | | |
-- > +-----------------+-----------------+-----------------+-----------------+
--
-- = See Also
-- #_see_also#
--
-- 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer',
-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer', @VkDeviceSize@
foreign import ccall "vkCmdDispatchIndirect" vkCmdDispatchIndirect :: ("commandBuffer" ::: VkCommandBuffer) -> ("buffer" ::: VkBuffer) -> ("offset" ::: VkDeviceSize) -> IO ()
-- | vkCmdCopyBuffer - Copy data between buffer regions
--
-- = Parameters
-- #_parameters#
--
-- - @commandBuffer@ is the command buffer into which the command will be
-- recorded.
--
-- - @srcBuffer@ is the source buffer.
--
-- - @dstBuffer@ is the destination buffer.
--
-- - @regionCount@ is the number of regions to copy.
--
-- - @pRegions@ is a pointer to an array of 'VkBufferCopy' structures
-- specifying the regions to copy.
--
-- = Description
-- #_description#
--
-- Each region in @pRegions@ is copied from the source buffer to the same
-- region of the destination buffer. @srcBuffer@ and @dstBuffer@ /can/ be
-- the same buffer or alias the same memory, but the result is undefined if
-- the copy regions overlap in memory.
--
-- == Valid Usage
--
-- - The @size@ member of each element of @pRegions@ /must/ be greater
-- than @0@
--
-- - The @srcOffset@ member of each element of @pRegions@ /must/ be less
-- than the size of @srcBuffer@
--
-- - The @dstOffset@ member of each element of @pRegions@ /must/ be less
-- than the size of @dstBuffer@
--
-- - The @size@ member of each element of @pRegions@ /must/ be less than
-- or equal to the size of @srcBuffer@ minus @srcOffset@
--
-- - The @size@ member of each element of @pRegions@ /must/ be less than
-- or equal to the size of @dstBuffer@ minus @dstOffset@
--
-- - The union of the source regions, and the union of the destination
-- regions, specified by the elements of @pRegions@, /must/ not overlap
-- in memory
--
-- - @srcBuffer@ /must/ have been created with
-- @VK_BUFFER_USAGE_TRANSFER_SRC_BIT@ usage flag
--
-- - If @srcBuffer@ is non-sparse then it /must/ be bound completely and
-- contiguously to a single @VkDeviceMemory@ object
--
-- - @dstBuffer@ /must/ have been created with
-- @VK_BUFFER_USAGE_TRANSFER_DST_BIT@ usage flag
--
-- - If @dstBuffer@ is non-sparse then it /must/ be bound completely and
-- contiguously to a single @VkDeviceMemory@ object
--
-- == Valid Usage (Implicit)
--
-- - @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
--
-- - @srcBuffer@ /must/ be a valid @VkBuffer@ handle
--
-- - @dstBuffer@ /must/ be a valid @VkBuffer@ handle
--
-- - @pRegions@ /must/ be a valid pointer to an array of @regionCount@
-- @VkBufferCopy@ structures
--
-- - @commandBuffer@ /must/ be in the
-- <#commandbuffers-lifecycle recording state>
--
-- - The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
-- support transfer, graphics, or compute operations
--
-- - This command /must/ only be called outside of a render pass instance
--
-- - @regionCount@ /must/ be greater than @0@
--
-- - Each of @commandBuffer@, @dstBuffer@, and @srcBuffer@ /must/ have
-- been created, allocated, or retrieved from the same @VkDevice@
--
-- == Host Synchronization
--
-- - Host access to @commandBuffer@ /must/ be externally synchronized
--
-- - Host access to the @VkCommandPool@ that @commandBuffer@ was
-- allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- > +-----------------+-----------------+-----------------+-----------------+
-- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
-- > | erLevel Command | derPass Render | ts Supported Qu | on-pipeline-sta |
-- > | Buffer Levels> | Pass Scope> | eue Types> | ges-types Pipel |
-- > | | | | ine Type> |
-- > +=================+=================+=================+=================+
-- > | Primary | Outside | Transfer | Transfer |
-- > | Secondary | | Graphics | |
-- > | | | Compute | |
-- > +-----------------+-----------------+-----------------+-----------------+
--
-- = See Also
-- #_see_also#
--
-- 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer', 'VkBufferCopy',
-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer'
foreign import ccall "vkCmdCopyBuffer" vkCmdCopyBuffer :: ("commandBuffer" ::: VkCommandBuffer) -> ("srcBuffer" ::: VkBuffer) -> ("dstBuffer" ::: VkBuffer) -> ("regionCount" ::: Word32) -> ("pRegions" ::: Ptr VkBufferCopy) -> IO ()
-- | vkCmdCopyImage - Copy data between images
--
-- = Parameters
-- #_parameters#
--
-- - @commandBuffer@ is the command buffer into which the command will be
-- recorded.
--
-- - @srcImage@ is the source image.
--
-- - @srcImageLayout@ is the current layout of the source image
-- subresource.
--
-- - @dstImage@ is the destination image.
--
-- - @dstImageLayout@ is the current layout of the destination image
-- subresource.
--
-- - @regionCount@ is the number of regions to copy.
--
-- - @pRegions@ is a pointer to an array of 'VkImageCopy' structures
-- specifying the regions to copy.
--
-- = Description
-- #_description#
--
-- Each region in @pRegions@ is copied from the source image to the same
-- region of the destination image. @srcImage@ and @dstImage@ /can/ be the
-- same image or alias the same memory.
--
-- The formats of @srcImage@ and @dstImage@ /must/ be compatible. Formats
-- are considered compatible if their element size is the same between both
-- formats. For example, @VK_FORMAT_R8G8B8A8_UNORM@ is compatible with
-- @VK_FORMAT_R32_UINT@ because both texels are 4 bytes in size.
-- Depth\/stencil formats /must/ match exactly.
--
-- @vkCmdCopyImage@ allows copying between /size-compatible/ compressed and
-- uncompressed internal formats. Formats are size-compatible if the
-- element size of the uncompressed format is equal to the element size
-- (compressed texel block size) of the compressed format. Such a copy does
-- not perform on-the-fly compression or decompression. When copying from
-- an uncompressed format to a compressed format, each texel of
-- uncompressed data of the source image is copied as a raw value to the
-- corresponding compressed texel block of the destination image. When
-- copying from a compressed format to an uncompressed format, each
-- compressed texel block of the source image is copied as a raw value to
-- the corresponding texel of uncompressed data in the destination image.
-- Thus, for example, it is legal to copy between a 128-bit uncompressed
-- format and a compressed format which has a 128-bit sized compressed
-- texel block representing 4×4 texels (using 8 bits per texel), or between
-- a 64-bit uncompressed format and a compressed format which has a 64-bit
-- sized compressed texel block representing 4×4 texels (using 4 bits per
-- texel).
--
-- When copying between compressed and uncompressed formats the @extent@
-- members represent the texel dimensions of the source image and not the
-- destination. When copying from a compressed image to an uncompressed
-- image the image texel dimensions written to the uncompressed image will
-- be source extent divided by the compressed texel block dimensions. When
-- copying from an uncompressed image to a compressed image the image texel
-- dimensions written to the compressed image will be the source extent
-- multiplied by the compressed texel block dimensions. In both cases the
-- number of bytes read and the number of bytes written will be identical.
--
-- Copying to or from block-compressed images is typically done in
-- multiples of the compressed texel block size. For this reason the
-- @extent@ /must/ be a multiple of the compressed texel block dimension.
-- There is one exception to this rule which is /required/ to handle
-- compressed images created with dimensions that are not a multiple of the
-- compressed texel block dimensions: if the @srcImage@ is compressed,
-- then:
--
-- - If @extent.width@ is not a multiple of the compressed texel block
-- width, then (@extent.width@ + @srcOffset.x@) /must/ equal the image
-- subresource width.
--
-- - If @extent.height@ is not a multiple of the compressed texel block
-- height, then (@extent.height@ + @srcOffset.y@) /must/ equal the
-- image subresource height.
--
-- - If @extent.depth@ is not a multiple of the compressed texel block
-- depth, then (@extent.depth@ + @srcOffset.z@) /must/ equal the image
-- subresource depth.
--
-- Similarly, if the @dstImage@ is compressed, then:
--
-- - If @extent.width@ is not a multiple of the compressed texel block
-- width, then (@extent.width@ + @dstOffset.x@) /must/ equal the image
-- subresource width.
--
-- - If @extent.height@ is not a multiple of the compressed texel block
-- height, then (@extent.height@ + @dstOffset.y@) /must/ equal the
-- image subresource height.
--
-- - If @extent.depth@ is not a multiple of the compressed texel block
-- depth, then (@extent.depth@ + @dstOffset.z@) /must/ equal the image
-- subresource depth.
--
-- This allows the last compressed texel block of the image in each
-- non-multiple dimension to be included as a source or destination of the
-- copy.
--
-- @vkCmdCopyImage@ /can/ be used to copy image data between multisample
-- images, but both images /must/ have the same number of samples.
--
-- == Valid Usage
--
-- - The source region specified by each element of @pRegions@ /must/ be
-- a region that is contained within @srcImage@
--
-- - The destination region specified by each element of @pRegions@
-- /must/ be a region that is contained within @dstImage@
--
-- - The union of all source regions, and the union of all destination
-- regions, specified by the elements of @pRegions@, /must/ not overlap
-- in memory
--
-- - @srcImage@ /must/ have been created with
-- @VK_IMAGE_USAGE_TRANSFER_SRC_BIT@ usage flag
--
-- - If @srcImage@ is non-sparse then it /must/ be bound completely and
-- contiguously to a single @VkDeviceMemory@ object
--
-- - @srcImageLayout@ /must/ specify the layout of the image subresources
-- of @srcImage@ specified in @pRegions@ at the time this command is
-- executed on a @VkDevice@
--
-- - @srcImageLayout@ /must/ be @VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL@ or
-- @VK_IMAGE_LAYOUT_GENERAL@
--
-- - @dstImage@ /must/ have been created with
-- @VK_IMAGE_USAGE_TRANSFER_DST_BIT@ usage flag
--
-- - If @dstImage@ is non-sparse then it /must/ be bound completely and
-- contiguously to a single @VkDeviceMemory@ object
--
-- - @dstImageLayout@ /must/ specify the layout of the image subresources
-- of @dstImage@ specified in @pRegions@ at the time this command is
-- executed on a @VkDevice@
--
-- - @dstImageLayout@ /must/ be @VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL@ or
-- @VK_IMAGE_LAYOUT_GENERAL@
--
-- - The 'Graphics.Vulkan.Core10.Core.VkFormat' of each of @srcImage@ and
-- @dstImage@ /must/ be compatible, as defined
-- <{html_spec_relative}#copies-images-format-compatibility below>
--
-- - The sample count of @srcImage@ and @dstImage@ /must/ match
--
-- - The @srcSubresource.mipLevel@ member of each element of @pRegions@
-- /must/ be less than the @mipLevels@ specified in
-- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @srcImage@ was
-- created
--
-- - The @dstSubresource.mipLevel@ member of each element of @pRegions@
-- /must/ be less than the @mipLevels@ specified in
-- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @dstImage@ was
-- created
--
-- - The @srcSubresource.baseArrayLayer@ + @srcSubresource.layerCount@ of
-- each element of @pRegions@ /must/ be less than or equal to the
-- @arrayLayers@ specified in
-- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @srcImage@ was
-- created
--
-- - The @dstSubresource.baseArrayLayer@ + @dstSubresource.layerCount@ of
-- each element of @pRegions@ /must/ be less than or equal to the
-- @arrayLayers@ specified in
-- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @dstImage@ was
-- created
--
-- - The @srcOffset@ and and @extent@ members of each element of
-- @pRegions@ /must/ respect the image transfer granularity
-- requirements of @commandBuffer@’s command pool’s queue family, as
-- described in
-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkQueueFamilyProperties'
--
-- - The @dstOffset@ and and @extent@ members of each element of
-- @pRegions@ /must/ respect the image transfer granularity
-- requirements of @commandBuffer@’s command pool’s queue family, as
-- described in
-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkQueueFamilyProperties'
--
-- == Valid Usage (Implicit)
--
-- - @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
--
-- - @srcImage@ /must/ be a valid @VkImage@ handle
--
-- - @srcImageLayout@ /must/ be a valid
-- 'Graphics.Vulkan.Core10.Image.VkImageLayout' value
--
-- - @dstImage@ /must/ be a valid @VkImage@ handle
--
-- - @dstImageLayout@ /must/ be a valid
-- 'Graphics.Vulkan.Core10.Image.VkImageLayout' value
--
-- - @pRegions@ /must/ be a valid pointer to an array of @regionCount@
-- valid @VkImageCopy@ structures
--
-- - @commandBuffer@ /must/ be in the
-- <#commandbuffers-lifecycle recording state>
--
-- - The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
-- support transfer, graphics, or compute operations
--
-- - This command /must/ only be called outside of a render pass instance
--
-- - @regionCount@ /must/ be greater than @0@
--
-- - Each of @commandBuffer@, @dstImage@, and @srcImage@ /must/ have been
-- created, allocated, or retrieved from the same @VkDevice@
--
-- == Host Synchronization
--
-- - Host access to @commandBuffer@ /must/ be externally synchronized
--
-- - Host access to the @VkCommandPool@ that @commandBuffer@ was
-- allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- > +-----------------+-----------------+-----------------+-----------------+
-- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
-- > | erLevel Command | derPass Render | ts Supported Qu | on-pipeline-sta |
-- > | Buffer Levels> | Pass Scope> | eue Types> | ges-types Pipel |
-- > | | | | ine Type> |
-- > +=================+=================+=================+=================+
-- > | Primary | Outside | Transfer | Transfer |
-- > | Secondary | | Graphics | |
-- > | | | Compute | |
-- > +-----------------+-----------------+-----------------+-----------------+
--
-- = See Also
-- #_see_also#
--
-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
-- 'Graphics.Vulkan.Core10.MemoryManagement.VkImage', 'VkImageCopy',
-- 'Graphics.Vulkan.Core10.Image.VkImageLayout'
foreign import ccall "vkCmdCopyImage" vkCmdCopyImage :: ("commandBuffer" ::: VkCommandBuffer) -> ("srcImage" ::: VkImage) -> ("srcImageLayout" ::: VkImageLayout) -> ("dstImage" ::: VkImage) -> ("dstImageLayout" ::: VkImageLayout) -> ("regionCount" ::: Word32) -> ("pRegions" ::: Ptr VkImageCopy) -> IO ()
-- | vkCmdBlitImage - Copy regions of an image, potentially performing format
-- conversion,
--
-- = Parameters
-- #_parameters#
--
-- - @commandBuffer@ is the command buffer into which the command will be
-- recorded.
--
-- - @srcImage@ is the source image.
--
-- - @srcImageLayout@ is the layout of the source image subresources for
-- the blit.
--
-- - @dstImage@ is the destination image.
--
-- - @dstImageLayout@ is the layout of the destination image subresources
-- for the blit.
--
-- - @regionCount@ is the number of regions to blit.
--
-- - @pRegions@ is a pointer to an array of 'VkImageBlit' structures
-- specifying the regions to blit.
--
-- - @filter@ is a 'Graphics.Vulkan.Core10.Sampler.VkFilter' specifying
-- the filter to apply if the blits require scaling.
--
-- = Description
-- #_description#
--
-- @vkCmdBlitImage@ /must/ not be used for multisampled source or
-- destination images. Use 'vkCmdResolveImage' for this purpose.
--
-- As the sizes of the source and destination extents /can/ differ in any
-- dimension, texels in the source extent are scaled and filtered to the
-- destination extent. Scaling occurs via the following operations:
--
-- - For each destination texel, the integer coordinate of that texel is
-- converted to an unnormalized texture coordinate, using the effective
-- inverse of the equations described in
-- <{html_spec_relative}#textures-unnormalized-to-integer unnormalized to integer conversion>:
--
-- []
-- ubase = i + ½
--
-- []
-- vbase = j + ½
--
-- []
-- wbase = k + ½
--
-- - These base coordinates are then offset by the first destination
-- offset:
--
-- []
-- uoffset = ubase - xdst0
--
-- []
-- voffset = vbase - ydst0
--
-- []
-- woffset = wbase - zdst0
--
-- []
-- aoffset = a - @baseArrayCount@dst
--
-- - The scale is determined from the source and destination regions, and
-- applied to the offset coordinates:
--
-- []
-- scale_u = (xsrc1 - xsrc0) \/ (xdst1 - xdst0)
--
-- []
-- scale_v = (ysrc1 - ysrc0) \/ (ydst1 - ydst0)
--
-- []
-- scale_w = (zsrc1 - zsrc0) \/ (zdst1 - zdst0)
--
-- []
-- uscaled = uoffset * scaleu
--
-- []
-- vscaled = voffset * scalev
--
-- []
-- wscaled = woffset * scalew
--
-- - Finally the source offset is added to the scaled coordinates, to
-- determine the final unnormalized coordinates used to sample from
-- @srcImage@:
--
-- []
-- u = uscaled + xsrc0
--
-- []
-- v = vscaled + ysrc0
--
-- []
-- w = wscaled + zsrc0
--
-- []
-- q = @mipLevel@
--
-- []
-- a = aoffset + @baseArrayCount@src
--
-- These coordinates are used to sample from the source image, as described
-- in <{html_spec_relative}#textures Image Operations chapter>, with the
-- filter mode equal to that of @filter@, a mipmap mode of
-- @VK_SAMPLER_MIPMAP_MODE_NEAREST@ and an address mode of
-- @VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE@. Implementations /must/ clamp at
-- the edge of the source image, and /may/ additionally clamp to the edge
-- of the source region.
--
-- __Note__
--
-- Due to allowable rounding errors in the generation of the source texture
-- coordinates, it is not always possible to guarantee exactly which source
-- texels will be sampled for a given blit. As rounding errors are
-- implementation dependent, the exact results of a blitting operation are
-- also implementation dependent.
--
-- Blits are done layer by layer starting with the @baseArrayLayer@ member
-- of @srcSubresource@ for the source and @dstSubresource@ for the
-- destination. @layerCount@ layers are blitted to the destination image.
--
-- 3D textures are blitted slice by slice. Slices in the source region
-- bounded by @srcOffsets@[0].@z@ and @srcOffsets@[1].@z@ are copied to
-- slices in the destination region bounded by @dstOffsets@[0].@z@ and
-- @dstOffsets@[1].@z@. For each destination slice, a source __z__
-- coordinate is linearly interpolated between @srcOffsets@[0].@z@ and
-- @srcOffsets@[1].@z@. If the @filter@ parameter is @VK_FILTER_LINEAR@
-- then the value sampled from the source image is taken by doing linear
-- filtering using the interpolated __z__ coordinate. If @filter@ parameter
-- is @VK_FILTER_NEAREST@ then value sampled from the source image is taken
-- from the single nearest slice (with undefined rounding mode).
--
-- The following filtering and conversion rules apply:
--
-- - Integer formats /can/ only be converted to other integer formats
-- with the same signedness.
--
-- - No format conversion is supported between depth\/stencil images. The
-- formats /must/ match.
--
-- - Format conversions on unorm, snorm, unscaled and packed float
-- formats of the copied aspect of the image are performed by first
-- converting the pixels to float values.
--
-- - For sRGB source formats, nonlinear RGB values are converted to
-- linear representation prior to filtering.
--
-- - After filtering, the float values are first clamped and then cast to
-- the destination image format. In case of sRGB destination format,
-- linear RGB values are converted to nonlinear representation before
-- writing the pixel to the image.
--
-- Signed and unsigned integers are converted by first clamping to the
-- representable range of the destination format, then casting the value.
--
-- == Valid Usage
--
-- - The source region specified by each element of @pRegions@ /must/ be
-- a region that is contained within @srcImage@
--
-- - The destination region specified by each element of @pRegions@
-- /must/ be a region that is contained within @dstImage@
--
-- - The union of all destination regions, specified by the elements of
-- @pRegions@, /must/ not overlap in memory with any texel that /may/
-- be sampled during the blit operation
--
-- - @srcImage@ /must/ use a format that supports
-- @VK_FORMAT_FEATURE_BLIT_SRC_BIT@, which is indicated by
-- @VkFormatProperties@::@linearTilingFeatures@ (for linearly tiled
-- images) or @VkFormatProperties@::@optimalTilingFeatures@ (for
-- optimally tiled images) - as returned by
-- @vkGetPhysicalDeviceFormatProperties@
--
-- - @srcImage@ /must/ have been created with
-- @VK_IMAGE_USAGE_TRANSFER_SRC_BIT@ usage flag
--
-- - If @srcImage@ is non-sparse then it /must/ be bound completely and
-- contiguously to a single @VkDeviceMemory@ object
--
-- - @srcImageLayout@ /must/ specify the layout of the image subresources
-- of @srcImage@ specified in @pRegions@ at the time this command is
-- executed on a @VkDevice@
--
-- - @srcImageLayout@ /must/ be @VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL@ or
-- @VK_IMAGE_LAYOUT_GENERAL@
--
-- - @dstImage@ /must/ use a format that supports
-- @VK_FORMAT_FEATURE_BLIT_DST_BIT@, which is indicated by
-- @VkFormatProperties@::@linearTilingFeatures@ (for linearly tiled
-- images) or @VkFormatProperties@::@optimalTilingFeatures@ (for
-- optimally tiled images) - as returned by
-- @vkGetPhysicalDeviceFormatProperties@
--
-- - @dstImage@ /must/ have been created with
-- @VK_IMAGE_USAGE_TRANSFER_DST_BIT@ usage flag
--
-- - If @dstImage@ is non-sparse then it /must/ be bound completely and
-- contiguously to a single @VkDeviceMemory@ object
--
-- - @dstImageLayout@ /must/ specify the layout of the image subresources
-- of @dstImage@ specified in @pRegions@ at the time this command is
-- executed on a @VkDevice@
--
-- - @dstImageLayout@ /must/ be @VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL@ or
-- @VK_IMAGE_LAYOUT_GENERAL@
--
-- - The sample count of @srcImage@ and @dstImage@ /must/ both be equal
-- to @VK_SAMPLE_COUNT_1_BIT@
--
-- - If either of @srcImage@ or @dstImage@ was created with a signed
-- integer 'Graphics.Vulkan.Core10.Core.VkFormat', the other /must/
-- also have been created with a signed integer
-- 'Graphics.Vulkan.Core10.Core.VkFormat'
--
-- - If either of @srcImage@ or @dstImage@ was created with an unsigned
-- integer 'Graphics.Vulkan.Core10.Core.VkFormat', the other /must/
-- also have been created with an unsigned integer
-- 'Graphics.Vulkan.Core10.Core.VkFormat'
--
-- - If either of @srcImage@ or @dstImage@ was created with a
-- depth\/stencil format, the other /must/ have exactly the same format
--
-- - If @srcImage@ was created with a depth\/stencil format, @filter@
-- /must/ be @VK_FILTER_NEAREST@
--
-- - @srcImage@ /must/ have been created with a @samples@ value of
-- @VK_SAMPLE_COUNT_1_BIT@
--
-- - @dstImage@ /must/ have been created with a @samples@ value of
-- @VK_SAMPLE_COUNT_1_BIT@
--
-- - If @filter@ is @VK_FILTER_LINEAR@, @srcImage@ /must/ be of a format
-- which supports linear filtering, as specified by the
-- @VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT@ flag in
-- @VkFormatProperties@::@linearTilingFeatures@ (for a linear image) or
-- @VkFormatProperties@::@optimalTilingFeatures@(for an optimally tiled
-- image) returned by @vkGetPhysicalDeviceFormatProperties@
--
-- - The @srcSubresource.mipLevel@ member of each element of @pRegions@
-- /must/ be less than the @mipLevels@ specified in
-- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @srcImage@ was
-- created
--
-- - The @dstSubresource.mipLevel@ member of each element of @pRegions@
-- /must/ be less than the @mipLevels@ specified in
-- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @dstImage@ was
-- created
--
-- - The @srcSubresource.baseArrayLayer@ + @srcSubresource.layerCount@ of
-- each element of @pRegions@ /must/ be less than or equal to the
-- @arrayLayers@ specified in
-- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @srcImage@ was
-- created
--
-- - The @dstSubresource.baseArrayLayer@ + @dstSubresource.layerCount@ of
-- each element of @pRegions@ /must/ be less than or equal to the
-- @arrayLayers@ specified in
-- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @dstImage@ was
-- created
--
-- == Valid Usage (Implicit)
--
-- - @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
--
-- - @srcImage@ /must/ be a valid @VkImage@ handle
--
-- - @srcImageLayout@ /must/ be a valid
-- 'Graphics.Vulkan.Core10.Image.VkImageLayout' value
--
-- - @dstImage@ /must/ be a valid @VkImage@ handle
--
-- - @dstImageLayout@ /must/ be a valid
-- 'Graphics.Vulkan.Core10.Image.VkImageLayout' value
--
-- - @pRegions@ /must/ be a valid pointer to an array of @regionCount@
-- valid @VkImageBlit@ structures
--
-- - @filter@ /must/ be a valid 'Graphics.Vulkan.Core10.Sampler.VkFilter'
-- value
--
-- - @commandBuffer@ /must/ be in the
-- <#commandbuffers-lifecycle recording state>
--
-- - The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
-- support graphics operations
--
-- - This command /must/ only be called outside of a render pass instance
--
-- - @regionCount@ /must/ be greater than @0@
--
-- - Each of @commandBuffer@, @dstImage@, and @srcImage@ /must/ have been
-- created, allocated, or retrieved from the same @VkDevice@
--
-- == Host Synchronization
--
-- - Host access to @commandBuffer@ /must/ be externally synchronized
--
-- - Host access to the @VkCommandPool@ that @commandBuffer@ was
-- allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- > +-----------------+-----------------+-----------------+-----------------+
-- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
-- > | erLevel Command | derPass Render | ts Supported Qu | on-pipeline-sta |
-- > | Buffer Levels> | Pass Scope> | eue Types> | ges-types Pipel |
-- > | | | | ine Type> |
-- > +=================+=================+=================+=================+
-- > | Primary | Outside | Graphics | Transfer |
-- > | Secondary | | | |
-- > +-----------------+-----------------+-----------------+-----------------+
--
-- = See Also
-- #_see_also#
--
-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
-- 'Graphics.Vulkan.Core10.Sampler.VkFilter',
-- 'Graphics.Vulkan.Core10.MemoryManagement.VkImage', 'VkImageBlit',
-- 'Graphics.Vulkan.Core10.Image.VkImageLayout'
foreign import ccall "vkCmdBlitImage" vkCmdBlitImage :: ("commandBuffer" ::: VkCommandBuffer) -> ("srcImage" ::: VkImage) -> ("srcImageLayout" ::: VkImageLayout) -> ("dstImage" ::: VkImage) -> ("dstImageLayout" ::: VkImageLayout) -> ("regionCount" ::: Word32) -> ("pRegions" ::: Ptr VkImageBlit) -> ("filter" ::: VkFilter) -> IO ()
-- | vkCmdCopyBufferToImage - Copy data from a buffer into an image
--
-- = Parameters
-- #_parameters#
--
-- - @commandBuffer@ is the command buffer into which the command will be
-- recorded.
--
-- - @srcBuffer@ is the source buffer.
--
-- - @dstImage@ is the destination image.
--
-- - @dstImageLayout@ is the layout of the destination image subresources
-- for the copy.
--
-- - @regionCount@ is the number of regions to copy.
--
-- - @pRegions@ is a pointer to an array of 'VkBufferImageCopy'
-- structures specifying the regions to copy.
--
-- = Description
-- #_description#
--
-- Each region in @pRegions@ is copied from the specified region of the
-- source buffer to the specified region of the destination image.
--
-- == Valid Usage
--
-- - The buffer region specified by each element of @pRegions@ /must/ be
-- a region that is contained within @srcBuffer@
--
-- - The image region specified by each element of @pRegions@ /must/ be a
-- region that is contained within @dstImage@
--
-- - The union of all source regions, and the union of all destination
-- regions, specified by the elements of @pRegions@, /must/ not overlap
-- in memory
--
-- - @srcBuffer@ /must/ have been created with
-- @VK_BUFFER_USAGE_TRANSFER_SRC_BIT@ usage flag
--
-- - If @srcBuffer@ is non-sparse then it /must/ be bound completely and
-- contiguously to a single @VkDeviceMemory@ object
--
-- - @dstImage@ /must/ have been created with
-- @VK_IMAGE_USAGE_TRANSFER_DST_BIT@ usage flag
--
-- - If @dstImage@ is non-sparse then it /must/ be bound completely and
-- contiguously to a single @VkDeviceMemory@ object
--
-- - @dstImage@ /must/ have a sample count equal to
-- @VK_SAMPLE_COUNT_1_BIT@
--
-- - @dstImageLayout@ /must/ specify the layout of the image subresources
-- of @dstImage@ specified in @pRegions@ at the time this command is
-- executed on a @VkDevice@
--
-- - @dstImageLayout@ /must/ be @VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL@ or
-- @VK_IMAGE_LAYOUT_GENERAL@
--
-- - The @imageSubresource.mipLevel@ member of each element of @pRegions@
-- /must/ be less than the @mipLevels@ specified in
-- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @dstImage@ was
-- created
--
-- - The @imageSubresource.baseArrayLayer@ +
-- @imageSubresource.layerCount@ of each element of @pRegions@ /must/
-- be less than or equal to the @arrayLayers@ specified in
-- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @dstImage@ was
-- created
--
-- - The @imageOffset@ and and @imageExtent@ members of each element of
-- @pRegions@ /must/ respect the image transfer granularity
-- requirements of @commandBuffer@’s command pool’s queue family, as
-- described in
-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkQueueFamilyProperties'
--
-- == Valid Usage (Implicit)
--
-- - @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
--
-- - @srcBuffer@ /must/ be a valid @VkBuffer@ handle
--
-- - @dstImage@ /must/ be a valid @VkImage@ handle
--
-- - @dstImageLayout@ /must/ be a valid
-- 'Graphics.Vulkan.Core10.Image.VkImageLayout' value
--
-- - @pRegions@ /must/ be a valid pointer to an array of @regionCount@
-- valid @VkBufferImageCopy@ structures
--
-- - @commandBuffer@ /must/ be in the
-- <#commandbuffers-lifecycle recording state>
--
-- - The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
-- support transfer, graphics, or compute operations
--
-- - This command /must/ only be called outside of a render pass instance
--
-- - @regionCount@ /must/ be greater than @0@
--
-- - Each of @commandBuffer@, @dstImage@, and @srcBuffer@ /must/ have
-- been created, allocated, or retrieved from the same @VkDevice@
--
-- == Host Synchronization
--
-- - Host access to @commandBuffer@ /must/ be externally synchronized
--
-- - Host access to the @VkCommandPool@ that @commandBuffer@ was
-- allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- > +-----------------+-----------------+-----------------+-----------------+
-- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
-- > | erLevel Command | derPass Render | ts Supported Qu | on-pipeline-sta |
-- > | Buffer Levels> | Pass Scope> | eue Types> | ges-types Pipel |
-- > | | | | ine Type> |
-- > +=================+=================+=================+=================+
-- > | Primary | Outside | Transfer | Transfer |
-- > | Secondary | | Graphics | |
-- > | | | Compute | |
-- > +-----------------+-----------------+-----------------+-----------------+
--
-- = See Also
-- #_see_also#
--
-- 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer', 'VkBufferImageCopy',
-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
-- 'Graphics.Vulkan.Core10.MemoryManagement.VkImage',
-- 'Graphics.Vulkan.Core10.Image.VkImageLayout'
foreign import ccall "vkCmdCopyBufferToImage" vkCmdCopyBufferToImage :: ("commandBuffer" ::: VkCommandBuffer) -> ("srcBuffer" ::: VkBuffer) -> ("dstImage" ::: VkImage) -> ("dstImageLayout" ::: VkImageLayout) -> ("regionCount" ::: Word32) -> ("pRegions" ::: Ptr VkBufferImageCopy) -> IO ()
-- | vkCmdCopyImageToBuffer - Copy image data into a buffer
--
-- = Parameters
-- #_parameters#
--
-- - @commandBuffer@ is the command buffer into which the command will be
-- recorded.
--
-- - @srcImage@ is the source image.
--
-- - @srcImageLayout@ is the layout of the source image subresources for
-- the copy.
--
-- - @dstBuffer@ is the destination buffer.
--
-- - @regionCount@ is the number of regions to copy.
--
-- - @pRegions@ is a pointer to an array of 'VkBufferImageCopy'
-- structures specifying the regions to copy.
--
-- = Description
-- #_description#
--
-- Each region in @pRegions@ is copied from the specified region of the
-- source image to the specified region of the destination buffer.
--
-- == Valid Usage
--
-- - The image region specified by each element of @pRegions@ /must/ be a
-- region that is contained within @srcImage@
--
-- - The buffer region specified by each element of @pRegions@ /must/ be
-- a region that is contained within @dstBuffer@
--
-- - The union of all source regions, and the union of all destination
-- regions, specified by the elements of @pRegions@, /must/ not overlap
-- in memory
--
-- - @srcImage@ /must/ have been created with
-- @VK_IMAGE_USAGE_TRANSFER_SRC_BIT@ usage flag
--
-- - If @srcImage@ is non-sparse then it /must/ be bound completely and
-- contiguously to a single @VkDeviceMemory@ object
--
-- - @srcImage@ /must/ have a sample count equal to
-- @VK_SAMPLE_COUNT_1_BIT@
--
-- - @srcImageLayout@ /must/ specify the layout of the image subresources
-- of @srcImage@ specified in @pRegions@ at the time this command is
-- executed on a @VkDevice@
--
-- - @srcImageLayout@ /must/ be @VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL@ or
-- @VK_IMAGE_LAYOUT_GENERAL@
--
-- - @dstBuffer@ /must/ have been created with
-- @VK_BUFFER_USAGE_TRANSFER_DST_BIT@ usage flag
--
-- - If @dstBuffer@ is non-sparse then it /must/ be bound completely and
-- contiguously to a single @VkDeviceMemory@ object
--
-- - The @imageSubresource.mipLevel@ member of each element of @pRegions@
-- /must/ be less than the @mipLevels@ specified in
-- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @srcImage@ was
-- created
--
-- - The @imageSubresource.baseArrayLayer@ +
-- @imageSubresource.layerCount@ of each element of @pRegions@ /must/
-- be less than or equal to the @arrayLayers@ specified in
-- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @srcImage@ was
-- created
--
-- - The @imageOffset@ and and @imageExtent@ members of each element of
-- @pRegions@ /must/ respect the image transfer granularity
-- requirements of @commandBuffer@’s command pool’s queue family, as
-- described in
-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkQueueFamilyProperties'
--
-- == Valid Usage (Implicit)
--
-- - @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
--
-- - @srcImage@ /must/ be a valid @VkImage@ handle
--
-- - @srcImageLayout@ /must/ be a valid
-- 'Graphics.Vulkan.Core10.Image.VkImageLayout' value
--
-- - @dstBuffer@ /must/ be a valid @VkBuffer@ handle
--
-- - @pRegions@ /must/ be a valid pointer to an array of @regionCount@
-- valid @VkBufferImageCopy@ structures
--
-- - @commandBuffer@ /must/ be in the
-- <#commandbuffers-lifecycle recording state>
--
-- - The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
-- support transfer, graphics, or compute operations
--
-- - This command /must/ only be called outside of a render pass instance
--
-- - @regionCount@ /must/ be greater than @0@
--
-- - Each of @commandBuffer@, @dstBuffer@, and @srcImage@ /must/ have
-- been created, allocated, or retrieved from the same @VkDevice@
--
-- == Host Synchronization
--
-- - Host access to @commandBuffer@ /must/ be externally synchronized
--
-- - Host access to the @VkCommandPool@ that @commandBuffer@ was
-- allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- > +-----------------+-----------------+-----------------+-----------------+
-- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
-- > | erLevel Command | derPass Render | ts Supported Qu | on-pipeline-sta |
-- > | Buffer Levels> | Pass Scope> | eue Types> | ges-types Pipel |
-- > | | | | ine Type> |
-- > +=================+=================+=================+=================+
-- > | Primary | Outside | Transfer | Transfer |
-- > | Secondary | | Graphics | |
-- > | | | Compute | |
-- > +-----------------+-----------------+-----------------+-----------------+
--
-- = See Also
-- #_see_also#
--
-- 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer', 'VkBufferImageCopy',
-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
-- 'Graphics.Vulkan.Core10.MemoryManagement.VkImage',
-- 'Graphics.Vulkan.Core10.Image.VkImageLayout'
foreign import ccall "vkCmdCopyImageToBuffer" vkCmdCopyImageToBuffer :: ("commandBuffer" ::: VkCommandBuffer) -> ("srcImage" ::: VkImage) -> ("srcImageLayout" ::: VkImageLayout) -> ("dstBuffer" ::: VkBuffer) -> ("regionCount" ::: Word32) -> ("pRegions" ::: Ptr VkBufferImageCopy) -> IO ()
-- | vkCmdUpdateBuffer - Update a buffer’s contents from host memory
--
-- = Parameters
-- #_parameters#
--
-- - @commandBuffer@ is the command buffer into which the command will be
-- recorded.
--
-- - @dstBuffer@ is a handle to the buffer to be updated.
--
-- - @dstOffset@ is the byte offset into the buffer to start updating,
-- and /must/ be a multiple of 4.
--
-- - @dataSize@ is the number of bytes to update, and /must/ be a
-- multiple of 4.
--
-- - @pData@ is a pointer to the source data for the buffer update, and
-- /must/ be at least @dataSize@ bytes in size.
--
-- = Description
-- #_description#
--
-- @dataSize@ /must/ be less than or equal to 65536 bytes. For larger
-- updates, applications /can/ use buffer to buffer
-- <{html_spec_relative}#copies-buffers copies>.
--
-- __Note__
--
-- Buffer updates performed with @vkCmdUpdateBuffer@ first copy the data
-- into command buffer memory when the command is recorded (which requires
-- additional storage and may incur an additional allocation), and then
-- copy the data from the command buffer into @dstBuffer@ when the command
-- is executed on a device.
--
-- The additional cost of this functionality compared to
-- <{html_spec_relative}#copies-buffers buffer to buffer copies> means it
-- is only recommended for very small amounts of data, and is why it is
-- limited to only 65536 bytes.
--
-- Applications /can/ work around this by issuing multiple
-- @vkCmdUpdateBuffer@ commands to different ranges of the same buffer, but
-- it is strongly recommended that they /should/ not.
--
-- The source data is copied from the user pointer to the command buffer
-- when the command is called.
--
-- @vkCmdUpdateBuffer@ is only allowed outside of a render pass. This
-- command is treated as “transfer” operation, for the purposes of
-- synchronization barriers. The @VK_BUFFER_USAGE_TRANSFER_DST_BIT@ /must/
-- be specified in @usage@ of
-- 'Graphics.Vulkan.Core10.Buffer.VkBufferCreateInfo' in order for the
-- buffer to be compatible with @vkCmdUpdateBuffer@.
--
-- == Valid Usage
--
-- - @dstOffset@ /must/ be less than the size of @dstBuffer@
--
-- - @dataSize@ /must/ be less than or equal to the size of @dstBuffer@
-- minus @dstOffset@
--
-- - @dstBuffer@ /must/ have been created with
-- @VK_BUFFER_USAGE_TRANSFER_DST_BIT@ usage flag
--
-- - If @dstBuffer@ is non-sparse then it /must/ be bound completely and
-- contiguously to a single @VkDeviceMemory@ object
--
-- - @dstOffset@ /must/ be a multiple of @4@
--
-- - @dataSize@ /must/ be less than or equal to @65536@
--
-- - @dataSize@ /must/ be a multiple of @4@
--
-- == Valid Usage (Implicit)
--
-- - @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
--
-- - @dstBuffer@ /must/ be a valid @VkBuffer@ handle
--
-- - @pData@ /must/ be a valid pointer to an array of @dataSize@ bytes
--
-- - @commandBuffer@ /must/ be in the
-- <#commandbuffers-lifecycle recording state>
--
-- - The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
-- support transfer, graphics, or compute operations
--
-- - This command /must/ only be called outside of a render pass instance
--
-- - @dataSize@ /must/ be greater than @0@
--
-- - Both of @commandBuffer@, and @dstBuffer@ /must/ have been created,
-- allocated, or retrieved from the same @VkDevice@
--
-- == Host Synchronization
--
-- - Host access to @commandBuffer@ /must/ be externally synchronized
--
-- - Host access to the @VkCommandPool@ that @commandBuffer@ was
-- allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- > +-----------------+-----------------+-----------------+-----------------+
-- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
-- > | erLevel Command | derPass Render | ts Supported Qu | on-pipeline-sta |
-- > | Buffer Levels> | Pass Scope> | eue Types> | ges-types Pipel |
-- > | | | | ine Type> |
-- > +=================+=================+=================+=================+
-- > | Primary | Outside | Transfer | Transfer |
-- > | Secondary | | Graphics | |
-- > | | | Compute | |
-- > +-----------------+-----------------+-----------------+-----------------+
--
-- = See Also
-- #_see_also#
--
-- 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer',
-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer', @VkDeviceSize@
foreign import ccall "vkCmdUpdateBuffer" vkCmdUpdateBuffer :: ("commandBuffer" ::: VkCommandBuffer) -> ("dstBuffer" ::: VkBuffer) -> ("dstOffset" ::: VkDeviceSize) -> ("dataSize" ::: VkDeviceSize) -> ("pData" ::: Ptr ()) -> IO ()
-- | vkCmdFillBuffer - Fill a region of a buffer with a fixed value
--
-- = Parameters
-- #_parameters#
--
-- - @commandBuffer@ is the command buffer into which the command will be
-- recorded.
--
-- - @dstBuffer@ is the buffer to be filled.
--
-- - @dstOffset@ is the byte offset into the buffer at which to start
-- filling, and /must/ be a multiple of 4.
--
-- - @size@ is the number of bytes to fill, and /must/ be either a
-- multiple of 4, or @VK_WHOLE_SIZE@ to fill the range from @offset@ to
-- the end of the buffer. If @VK_WHOLE_SIZE@ is used and the remaining
-- size of the buffer is not a multiple of 4, then the nearest smaller
-- multiple is used.
--
-- - @data@ is the 4-byte word written repeatedly to the buffer to fill
-- @size@ bytes of data. The data word is written to memory according
-- to the host endianness.
--
-- = Description
-- #_description#
--
-- @vkCmdFillBuffer@ is treated as “transfer” operation for the purposes of
-- synchronization barriers. The @VK_BUFFER_USAGE_TRANSFER_DST_BIT@ /must/
-- be specified in @usage@ of @VkBufferCreateInfo@ in order for the buffer
-- to be compatible with @vkCmdFillBuffer@.
--
-- == Valid Usage
--
-- - @dstOffset@ /must/ be less than the size of @dstBuffer@
--
-- - @dstOffset@ /must/ be a multiple of @4@
--
-- - If @size@ is not equal to @VK_WHOLE_SIZE@, @size@ /must/ be greater
-- than @0@
--
-- - If @size@ is not equal to @VK_WHOLE_SIZE@, @size@ /must/ be less
-- than or equal to the size of @dstBuffer@ minus @dstOffset@
--
-- - If @size@ is not equal to @VK_WHOLE_SIZE@, @size@ /must/ be a
-- multiple of @4@
--
-- - @dstBuffer@ /must/ have been created with
-- @VK_BUFFER_USAGE_TRANSFER_DST_BIT@ usage flag
--
-- - The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
-- support graphics or compute operations
--
-- - If @dstBuffer@ is non-sparse then it /must/ be bound completely and
-- contiguously to a single @VkDeviceMemory@ object
--
-- == Valid Usage (Implicit)
--
-- - @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
--
-- - @dstBuffer@ /must/ be a valid @VkBuffer@ handle
--
-- - @commandBuffer@ /must/ be in the
-- <#commandbuffers-lifecycle recording state>
--
-- - The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
-- support transfer, graphics or compute operations
--
-- - This command /must/ only be called outside of a render pass instance
--
-- - Both of @commandBuffer@, and @dstBuffer@ /must/ have been created,
-- allocated, or retrieved from the same @VkDevice@
--
-- == Host Synchronization
--
-- - Host access to @commandBuffer@ /must/ be externally synchronized
--
-- - Host access to the @VkCommandPool@ that @commandBuffer@ was
-- allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- > +-----------------+-----------------+-----------------+-----------------+
-- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
-- > | erLevel Command | derPass Render | ts Supported Qu | on-pipeline-sta |
-- > | Buffer Levels> | Pass Scope> | eue Types> | ges-types Pipel |
-- > | | | | ine Type> |
-- > +=================+=================+=================+=================+
-- > | Primary | Outside | Transfer | Transfer |
-- > | Secondary | | Graphics | |
-- > | | | Compute | |
-- > +-----------------+-----------------+-----------------+-----------------+
--
-- = See Also
-- #_see_also#
--
-- 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer',
-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer', @VkDeviceSize@
foreign import ccall "vkCmdFillBuffer" vkCmdFillBuffer :: ("commandBuffer" ::: VkCommandBuffer) -> ("dstBuffer" ::: VkBuffer) -> ("dstOffset" ::: VkDeviceSize) -> ("size" ::: VkDeviceSize) -> ("data" ::: Word32) -> IO ()
-- | vkCmdClearColorImage - Clear regions of a color image
--
-- = Parameters
-- #_parameters#
--
-- - @commandBuffer@ is the command buffer into which the command will be
-- recorded.
--
-- - @image@ is the image to be cleared.
--
-- - @imageLayout@ specifies the current layout of the image subresource
-- ranges to be cleared, and /must/ be @VK_IMAGE_LAYOUT_GENERAL@ or
-- @VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL@.
--
-- - @pColor@ is a pointer to a 'VkClearColorValue' structure that
-- contains the values the image subresource ranges will be cleared to
-- (see
-- <{html_spec_relative}#clears-values {html_spec_relative}#clears-values>
-- below).
--
-- - @rangeCount@ is the number of image subresource range structures in
-- @pRanges@.
--
-- - @pRanges@ points to an array of
-- 'Graphics.Vulkan.Core10.ImageView.VkImageSubresourceRange'
-- structures that describe a range of mipmap levels, array layers, and
-- aspects to be cleared, as described in
-- <{html_spec_relative}#resources-image-views Image Views>. The
-- @aspectMask@ of all image subresource ranges /must/ only include
-- @VK_IMAGE_ASPECT_COLOR_BIT@.
--
-- = Description
-- #_description#
--
-- Each specified range in @pRanges@ is cleared to the value specified by
-- @pColor@.
--
-- == Valid Usage
--
-- - @image@ /must/ have been created with
-- @VK_IMAGE_USAGE_TRANSFER_DST_BIT@ usage flag
--
-- - If @image@ is non-sparse then it /must/ be bound completely and
-- contiguously to a single @VkDeviceMemory@ object
--
-- - @imageLayout@ /must/ specify the layout of the image subresource
-- ranges of @image@ specified in @pRanges@ at the time this command is
-- executed on a @VkDevice@
--
-- - @imageLayout@ /must/ be @VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL@ or
-- @VK_IMAGE_LAYOUT_GENERAL@
--
-- - The
-- 'Graphics.Vulkan.Core10.ImageView.VkImageSubresourceRange'::@baseMipLevel@
-- members of the elements of the @pRanges@ array /must/ each be less
-- than the @mipLevels@ specified in
-- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @image@ was
-- created
--
-- - For each 'Graphics.Vulkan.Core10.ImageView.VkImageSubresourceRange'
-- element of @pRanges@, if the @levelCount@ member is not
-- @VK_REMAINING_MIP_LEVELS@, then @baseMipLevel@ + @levelCount@ /must/
-- be less than the @mipLevels@ specified in
-- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @image@ was
-- created
--
-- - The
-- 'Graphics.Vulkan.Core10.ImageView.VkImageSubresourceRange'::@baseArrayLayer@
-- members of the elements of the @pRanges@ array /must/ each be less
-- than the @arrayLayers@ specified in
-- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @image@ was
-- created
--
-- - For each 'Graphics.Vulkan.Core10.ImageView.VkImageSubresourceRange'
-- element of @pRanges@, if the @layerCount@ member is not
-- @VK_REMAINING_ARRAY_LAYERS@, then @baseArrayLayer@ + @layerCount@
-- /must/ be less than the @arrayLayers@ specified in
-- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @image@ was
-- created
--
-- - @image@ /must/ not have a compressed or depth\/stencil format
--
-- == Valid Usage (Implicit)
--
-- - @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
--
-- - @image@ /must/ be a valid @VkImage@ handle
--
-- - @imageLayout@ /must/ be a valid
-- 'Graphics.Vulkan.Core10.Image.VkImageLayout' value
--
-- - @pColor@ /must/ be a valid pointer to a valid @VkClearColorValue@
-- union
--
-- - @pRanges@ /must/ be a valid pointer to an array of @rangeCount@
-- valid @VkImageSubresourceRange@ structures
--
-- - @commandBuffer@ /must/ be in the
-- <#commandbuffers-lifecycle recording state>
--
-- - The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
-- support graphics, or compute operations
--
-- - This command /must/ only be called outside of a render pass instance
--
-- - @rangeCount@ /must/ be greater than @0@
--
-- - Both of @commandBuffer@, and @image@ /must/ have been created,
-- allocated, or retrieved from the same @VkDevice@
--
-- == Host Synchronization
--
-- - Host access to @commandBuffer@ /must/ be externally synchronized
--
-- - Host access to the @VkCommandPool@ that @commandBuffer@ was
-- allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- > +-----------------+-----------------+-----------------+-----------------+
-- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
-- > | erLevel Command | derPass Render | ts Supported Qu | on-pipeline-sta |
-- > | Buffer Levels> | Pass Scope> | eue Types> | ges-types Pipel |
-- > | | | | ine Type> |
-- > +=================+=================+=================+=================+
-- > | Primary | Outside | Graphics | Transfer |
-- > | Secondary | | Compute | |
-- > +-----------------+-----------------+-----------------+-----------------+
--
-- = See Also
-- #_see_also#
--
-- 'VkClearColorValue', 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
-- 'Graphics.Vulkan.Core10.MemoryManagement.VkImage',
-- 'Graphics.Vulkan.Core10.Image.VkImageLayout',
-- 'Graphics.Vulkan.Core10.ImageView.VkImageSubresourceRange'
foreign import ccall "vkCmdClearColorImage" vkCmdClearColorImage :: ("commandBuffer" ::: VkCommandBuffer) -> ("image" ::: VkImage) -> ("imageLayout" ::: VkImageLayout) -> ("pColor" ::: Ptr VkClearColorValue) -> ("rangeCount" ::: Word32) -> ("pRanges" ::: Ptr VkImageSubresourceRange) -> IO ()
-- | vkCmdClearDepthStencilImage - Fill regions of a combined depth\/stencil
-- image
--
-- = Parameters
-- #_parameters#
--
-- - @commandBuffer@ is the command buffer into which the command will be
-- recorded.
--
-- - @image@ is the image to be cleared.
--
-- - @imageLayout@ specifies the current layout of the image subresource
-- ranges to be cleared, and /must/ be @VK_IMAGE_LAYOUT_GENERAL@ or
-- @VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL@.
--
-- - @pDepthStencil@ is a pointer to a 'VkClearDepthStencilValue'
-- structure that contains the values the depth and stencil image
-- subresource ranges will be cleared to (see
-- <{html_spec_relative}#clears-values {html_spec_relative}#clears-values>
-- below).
--
-- - @rangeCount@ is the number of image subresource range structures in
-- @pRanges@.
--
-- - @pRanges@ points to an array of
-- 'Graphics.Vulkan.Core10.ImageView.VkImageSubresourceRange'
-- structures that describe a range of mipmap levels, array layers, and
-- aspects to be cleared, as described in
-- <{html_spec_relative}#resources-image-views Image Views>. The
-- @aspectMask@ of each image subresource range in @pRanges@ /can/
-- include @VK_IMAGE_ASPECT_DEPTH_BIT@ if the image format has a depth
-- component, and @VK_IMAGE_ASPECT_STENCIL_BIT@ if the image format has
-- a stencil component. @pDepthStencil@ is a pointer to a
-- @VkClearDepthStencilValue@ structure that contains the values the
-- image subresource ranges will be cleared to (see
-- <{html_spec_relative}#clears-values {html_spec_relative}#clears-values>
-- below).
--
-- = Description
-- #_description#
--
-- == Valid Usage
--
-- - @image@ /must/ have been created with
-- @VK_IMAGE_USAGE_TRANSFER_DST_BIT@ usage flag
--
-- - If @image@ is non-sparse then it /must/ be bound completely and
-- contiguously to a single @VkDeviceMemory@ object
--
-- - @imageLayout@ /must/ specify the layout of the image subresource
-- ranges of @image@ specified in @pRanges@ at the time this command is
-- executed on a @VkDevice@
--
-- - @imageLayout@ /must/ be either of
-- @VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL@ or @VK_IMAGE_LAYOUT_GENERAL@
--
-- - The
-- 'Graphics.Vulkan.Core10.ImageView.VkImageSubresourceRange'::@baseMipLevel@
-- members of the elements of the @pRanges@ array /must/ each be less
-- than the @mipLevels@ specified in
-- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @image@ was
-- created
--
-- - For each 'Graphics.Vulkan.Core10.ImageView.VkImageSubresourceRange'
-- element of @pRanges@, if the @levelCount@ member is not
-- @VK_REMAINING_MIP_LEVELS@, then @baseMipLevel@ + @levelCount@ /must/
-- be less than the @mipLevels@ specified in
-- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @image@ was
-- created
--
-- - The
-- 'Graphics.Vulkan.Core10.ImageView.VkImageSubresourceRange'::@baseArrayLayer@
-- members of the elements of the @pRanges@ array /must/ each be less
-- than the @arrayLayers@ specified in
-- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @image@ was
-- created
--
-- - For each 'Graphics.Vulkan.Core10.ImageView.VkImageSubresourceRange'
-- element of @pRanges@, if the @layerCount@ member is not
-- @VK_REMAINING_ARRAY_LAYERS@, then @baseArrayLayer@ + @layerCount@
-- /must/ be less than the @arrayLayers@ specified in
-- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @image@ was
-- created
--
-- - @image@ /must/ have a depth\/stencil format
--
-- == Valid Usage (Implicit)
--
-- - @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
--
-- - @image@ /must/ be a valid @VkImage@ handle
--
-- - @imageLayout@ /must/ be a valid
-- 'Graphics.Vulkan.Core10.Image.VkImageLayout' value
--
-- - @pDepthStencil@ /must/ be a valid pointer to a valid
-- @VkClearDepthStencilValue@ structure
--
-- - @pRanges@ /must/ be a valid pointer to an array of @rangeCount@
-- valid @VkImageSubresourceRange@ structures
--
-- - @commandBuffer@ /must/ be in the
-- <#commandbuffers-lifecycle recording state>
--
-- - The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
-- support graphics operations
--
-- - This command /must/ only be called outside of a render pass instance
--
-- - @rangeCount@ /must/ be greater than @0@
--
-- - Both of @commandBuffer@, and @image@ /must/ have been created,
-- allocated, or retrieved from the same @VkDevice@
--
-- == Host Synchronization
--
-- - Host access to @commandBuffer@ /must/ be externally synchronized
--
-- - Host access to the @VkCommandPool@ that @commandBuffer@ was
-- allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- > +-----------------+-----------------+-----------------+-----------------+
-- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
-- > | erLevel Command | derPass Render | ts Supported Qu | on-pipeline-sta |
-- > | Buffer Levels> | Pass Scope> | eue Types> | ges-types Pipel |
-- > | | | | ine Type> |
-- > +=================+=================+=================+=================+
-- > | Primary | Outside | Graphics | Transfer |
-- > | Secondary | | | |
-- > +-----------------+-----------------+-----------------+-----------------+
--
-- = See Also
-- #_see_also#
--
-- 'VkClearDepthStencilValue',
-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
-- 'Graphics.Vulkan.Core10.MemoryManagement.VkImage',
-- 'Graphics.Vulkan.Core10.Image.VkImageLayout',
-- 'Graphics.Vulkan.Core10.ImageView.VkImageSubresourceRange'
foreign import ccall "vkCmdClearDepthStencilImage" vkCmdClearDepthStencilImage :: ("commandBuffer" ::: VkCommandBuffer) -> ("image" ::: VkImage) -> ("imageLayout" ::: VkImageLayout) -> ("pDepthStencil" ::: Ptr VkClearDepthStencilValue) -> ("rangeCount" ::: Word32) -> ("pRanges" ::: Ptr VkImageSubresourceRange) -> IO ()
-- | vkCmdClearAttachments - Clear regions within bound framebuffer
-- attachments
--
-- = Parameters
-- #_parameters#
--
-- - @commandBuffer@ is the command buffer into which the command will be
-- recorded.
--
-- - @attachmentCount@ is the number of entries in the @pAttachments@
-- array.
--
-- - @pAttachments@ is a pointer to an array of 'VkClearAttachment'
-- structures defining the attachments to clear and the clear values to
-- use.
--
-- - @rectCount@ is the number of entries in the @pRects@ array.
--
-- - @pRects@ points to an array of 'VkClearRect' structures defining
-- regions within each selected attachment to clear.
--
-- = Description
-- #_description#
--
-- @vkCmdClearAttachments@ /can/ clear multiple regions of each attachment
-- used in the current subpass of a render pass instance. This command
-- /must/ be called only inside a render pass instance, and implicitly
-- selects the images to clear based on the current framebuffer attachments
-- and the command parameters.
--
-- == Valid Usage
--
-- - If the @aspectMask@ member of any element of @pAttachments@ contains
-- @VK_IMAGE_ASPECT_COLOR_BIT@, the @colorAttachment@ member of that
-- element /must/ refer to a valid color attachment in the current
-- subpass
--
-- - The rectangular region specified by each element of @pRects@ /must/
-- be contained within the render area of the current render pass
-- instance
--
-- - The layers specified by each element of @pRects@ /must/ be contained
-- within every attachment that @pAttachments@ refers to
--
-- == Valid Usage (Implicit)
--
-- - @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
--
-- - @pAttachments@ /must/ be a valid pointer to an array of
-- @attachmentCount@ valid @VkClearAttachment@ structures
--
-- - @pRects@ /must/ be a valid pointer to an array of @rectCount@
-- @VkClearRect@ structures
--
-- - @commandBuffer@ /must/ be in the
-- <#commandbuffers-lifecycle recording state>
--
-- - The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
-- support graphics operations
--
-- - This command /must/ only be called inside of a render pass instance
--
-- - @attachmentCount@ /must/ be greater than @0@
--
-- - @rectCount@ /must/ be greater than @0@
--
-- == Host Synchronization
--
-- - Host access to @commandBuffer@ /must/ be externally synchronized
--
-- - Host access to the @VkCommandPool@ that @commandBuffer@ was
-- allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- > +-----------------+-----------------+-----------------+-----------------+
-- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
-- > | erLevel Command | derPass Render | ts Supported Qu | on-pipeline-sta |
-- > | Buffer Levels> | Pass Scope> | eue Types> | ges-types Pipel |
-- > | | | | ine Type> |
-- > +=================+=================+=================+=================+
-- > | Primary | Inside | Graphics | Graphics |
-- > | Secondary | | | |
-- > +-----------------+-----------------+-----------------+-----------------+
--
-- = See Also
-- #_see_also#
--
-- 'VkClearAttachment', 'VkClearRect',
-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer'
foreign import ccall "vkCmdClearAttachments" vkCmdClearAttachments :: ("commandBuffer" ::: VkCommandBuffer) -> ("attachmentCount" ::: Word32) -> ("pAttachments" ::: Ptr VkClearAttachment) -> ("rectCount" ::: Word32) -> ("pRects" ::: Ptr VkClearRect) -> IO ()
-- | vkCmdResolveImage - Resolve regions of an image
--
-- = Parameters
-- #_parameters#
--
-- - @commandBuffer@ is the command buffer into which the command will be
-- recorded.
--
-- - @srcImage@ is the source image.
--
-- - @srcImageLayout@ is the layout of the source image subresources for
-- the resolve.
--
-- - @dstImage@ is the destination image.
--
-- - @dstImageLayout@ is the layout of the destination image subresources
-- for the resolve.
--
-- - @regionCount@ is the number of regions to resolve.
--
-- - @pRegions@ is a pointer to an array of 'VkImageResolve' structures
-- specifying the regions to resolve.
--
-- = Description
-- #_description#
--
-- During the resolve the samples corresponding to each pixel location in
-- the source are converted to a single sample before being written to the
-- destination. If the source formats are floating-point or normalized
-- types, the sample values for each pixel are resolved in an
-- implementation-dependent manner. If the source formats are integer
-- types, a single sample’s value is selected for each pixel.
--
-- @srcOffset@ and @dstOffset@ select the initial @x@, @y@, and @z@ offsets
-- in texels of the sub-regions of the source and destination image data.
-- @extent@ is the size in texels of the source image to resolve in
-- @width@, @height@ and @depth@.
--
-- Resolves are done layer by layer starting with @baseArrayLayer@ member
-- of @srcSubresource@ for the source and @dstSubresource@ for the
-- destination. @layerCount@ layers are resolved to the destination image.
--
-- == Valid Usage
--
-- - The source region specified by each element of @pRegions@ /must/ be
-- a region that is contained within @srcImage@
--
-- - The destination region specified by each element of @pRegions@
-- /must/ be a region that is contained within @dstImage@
--
-- - The union of all source regions, and the union of all destination
-- regions, specified by the elements of @pRegions@, /must/ not overlap
-- in memory
--
-- - If @srcImage@ is non-sparse then it /must/ be bound completely and
-- contiguously to a single @VkDeviceMemory@ object
--
-- - @srcImage@ /must/ have a sample count equal to any valid sample
-- count value other than @VK_SAMPLE_COUNT_1_BIT@
--
-- - If @dstImage@ is non-sparse then it /must/ be bound completely and
-- contiguously to a single @VkDeviceMemory@ object
--
-- - @dstImage@ /must/ have a sample count equal to
-- @VK_SAMPLE_COUNT_1_BIT@
--
-- - @srcImageLayout@ /must/ specify the layout of the image subresources
-- of @srcImage@ specified in @pRegions@ at the time this command is
-- executed on a @VkDevice@
--
-- - @srcImageLayout@ /must/ be @VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL@ or
-- @VK_IMAGE_LAYOUT_GENERAL@
--
-- - @dstImageLayout@ /must/ specify the layout of the image subresources
-- of @dstImage@ specified in @pRegions@ at the time this command is
-- executed on a @VkDevice@
--
-- - @dstImageLayout@ /must/ be @VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL@ or
-- @VK_IMAGE_LAYOUT_GENERAL@
--
-- - If @dstImage@ was created with @tiling@ equal to
-- @VK_IMAGE_TILING_LINEAR@, @dstImage@ /must/ have been created with a
-- @format@ that supports being a color attachment, as specified by the
-- @VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT@ flag in
-- @VkFormatProperties@::@linearTilingFeatures@ returned by
-- @vkGetPhysicalDeviceFormatProperties@
--
-- - If @dstImage@ was created with @tiling@ equal to
-- @VK_IMAGE_TILING_OPTIMAL@, @dstImage@ /must/ have been created with
-- a @format@ that supports being a color attachment, as specified by
-- the @VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT@ flag in
-- @VkFormatProperties@::@optimalTilingFeatures@ returned by
-- @vkGetPhysicalDeviceFormatProperties@
--
-- - @srcImage@ and @dstImage@ /must/ have been created with the same
-- image format
--
-- - The @srcSubresource.mipLevel@ member of each element of @pRegions@
-- /must/ be less than the @mipLevels@ specified in
-- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @srcImage@ was
-- created
--
-- - The @dstSubresource.mipLevel@ member of each element of @pRegions@
-- /must/ be less than the @mipLevels@ specified in
-- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @dstImage@ was
-- created
--
-- - The @srcSubresource.baseArrayLayer@ + @srcSubresource.layerCount@ of
-- each element of @pRegions@ /must/ be less than or equal to the
-- @arrayLayers@ specified in
-- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @srcImage@ was
-- created
--
-- - The @dstSubresource.baseArrayLayer@ + @dstSubresource.layerCount@ of
-- each element of @pRegions@ /must/ be less than or equal to the
-- @arrayLayers@ specified in
-- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @dstImage@ was
-- created
--
-- == Valid Usage (Implicit)
--
-- - @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
--
-- - @srcImage@ /must/ be a valid @VkImage@ handle
--
-- - @srcImageLayout@ /must/ be a valid
-- 'Graphics.Vulkan.Core10.Image.VkImageLayout' value
--
-- - @dstImage@ /must/ be a valid @VkImage@ handle
--
-- - @dstImageLayout@ /must/ be a valid
-- 'Graphics.Vulkan.Core10.Image.VkImageLayout' value
--
-- - @pRegions@ /must/ be a valid pointer to an array of @regionCount@
-- valid @VkImageResolve@ structures
--
-- - @commandBuffer@ /must/ be in the
-- <#commandbuffers-lifecycle recording state>
--
-- - The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
-- support graphics operations
--
-- - This command /must/ only be called outside of a render pass instance
--
-- - @regionCount@ /must/ be greater than @0@
--
-- - Each of @commandBuffer@, @dstImage@, and @srcImage@ /must/ have been
-- created, allocated, or retrieved from the same @VkDevice@
--
-- == Host Synchronization
--
-- - Host access to @commandBuffer@ /must/ be externally synchronized
--
-- - Host access to the @VkCommandPool@ that @commandBuffer@ was
-- allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- > +-----------------+-----------------+-----------------+-----------------+
-- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
-- > | erLevel Command | derPass Render | ts Supported Qu | on-pipeline-sta |
-- > | Buffer Levels> | Pass Scope> | eue Types> | ges-types Pipel |
-- > | | | | ine Type> |
-- > +=================+=================+=================+=================+
-- > | Primary | Outside | Graphics | Transfer |
-- > | Secondary | | | |
-- > +-----------------+-----------------+-----------------+-----------------+
--
-- = See Also
-- #_see_also#
--
-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
-- 'Graphics.Vulkan.Core10.MemoryManagement.VkImage',
-- 'Graphics.Vulkan.Core10.Image.VkImageLayout', 'VkImageResolve'
foreign import ccall "vkCmdResolveImage" vkCmdResolveImage :: ("commandBuffer" ::: VkCommandBuffer) -> ("srcImage" ::: VkImage) -> ("srcImageLayout" ::: VkImageLayout) -> ("dstImage" ::: VkImage) -> ("dstImageLayout" ::: VkImageLayout) -> ("regionCount" ::: Word32) -> ("pRegions" ::: Ptr VkImageResolve) -> IO ()
-- | vkCmdSetEvent - Set an event object to signaled state
--
-- = Parameters
-- #_parameters#
--
-- - @commandBuffer@ is the command buffer into which the command is
-- recorded.
--
-- - @event@ is the event that will be signaled.
--
-- - @stageMask@ specifies the
-- <{html_spec_relative}#synchronization-pipeline-stages source stage mask>
-- used to determine when the @event@ is signaled.
--
-- = Description
-- #_description#
--
-- When 'vkCmdSetEvent' is submitted to a queue, it defines an execution
-- dependency on commands that were submitted before it, and defines an
-- event signal operation which sets the event to the signaled state.
--
-- The first
-- <{html_spec_relative}#synchronization-dependencies-scopes synchronization scope>
-- includes all commands that occur earlier in
-- <{html_spec_relative}#synchronization-submission-order submission order>.
-- The synchronization scope is limited to operations on the pipeline
-- stages determined by the
-- <{html_spec_relative}#synchronization-pipeline-stages-masks source stage mask>
-- specified by @stageMask@.
--
-- The second
-- <{html_spec_relative}#synchronization-dependencies-scopes synchronization scope>
-- includes only the event signal operation.
--
-- If @event@ is already in the signaled state when 'vkCmdSetEvent' is
-- executed on the device, then 'vkCmdSetEvent' has no effect, no event
-- signal operation occurs, and no execution dependency is generated.
--
-- == Valid Usage
--
-- - @stageMask@ /must/ not include @VK_PIPELINE_STAGE_HOST_BIT@
--
-- - If the
-- <{html_spec_relative}#features-features-geometryShader geometry shaders>
-- feature is not enabled, @stageMask@ /must/ not contain
-- @VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT@
--
-- - If the
-- <{html_spec_relative}#features-features-tessellationShader tessellation shaders>
-- feature is not enabled, @stageMask@ /must/ not contain
-- @VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT@ or
-- @VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT@
--
-- == Valid Usage (Implicit)
--
-- - @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
--
-- - @event@ /must/ be a valid @VkEvent@ handle
--
-- - @stageMask@ /must/ be a valid combination of
-- 'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlagBits' values
--
-- - @stageMask@ /must/ not be @0@
--
-- - @commandBuffer@ /must/ be in the
-- <#commandbuffers-lifecycle recording state>
--
-- - The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
-- support graphics, or compute operations
--
-- - This command /must/ only be called outside of a render pass instance
--
-- - Both of @commandBuffer@, and @event@ /must/ have been created,
-- allocated, or retrieved from the same @VkDevice@
--
-- == Host Synchronization
--
-- - Host access to @commandBuffer@ /must/ be externally synchronized
--
-- - Host access to the @VkCommandPool@ that @commandBuffer@ was
-- allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- > +-----------------+-----------------+-----------------+-----------------+
-- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
-- > | erLevel Command | derPass Render | ts Supported Qu | on-pipeline-sta |
-- > | Buffer Levels> | Pass Scope> | eue Types> | ges-types Pipel |
-- > | | | | ine Type> |
-- > +=================+=================+=================+=================+
-- > | Primary | Outside | Graphics | |
-- > | Secondary | | Compute | |
-- > +-----------------+-----------------+-----------------+-----------------+
--
-- = See Also
-- #_see_also#
--
-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
-- 'Graphics.Vulkan.Core10.Event.VkEvent',
-- 'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlags'
foreign import ccall "vkCmdSetEvent" vkCmdSetEvent :: ("commandBuffer" ::: VkCommandBuffer) -> ("event" ::: VkEvent) -> ("stageMask" ::: VkPipelineStageFlags) -> IO ()
-- | vkCmdResetEvent - Reset an event object to non-signaled state
--
-- = Parameters
-- #_parameters#
--
-- - @commandBuffer@ is the command buffer into which the command is
-- recorded.
--
-- - @event@ is the event that will be unsignaled.
--
-- - @stageMask@ is a bitmask of
-- 'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlagBits' specifying
-- the
-- <{html_spec_relative}#synchronization-pipeline-stages source stage mask>
-- used to determine when the @event@ is unsignaled.
--
-- = Description
-- #_description#
--
-- When 'vkCmdResetEvent' is submitted to a queue, it defines an execution
-- dependency on commands that were submitted before it, and defines an
-- event unsignal operation which resets the event to the unsignaled state.
--
-- The first
-- <{html_spec_relative}#synchronization-dependencies-scopes synchronization scope>
-- includes all commands that occur earlier in
-- <{html_spec_relative}#synchronization-submission-order submission order>.
-- The synchronization scope is limited to operations on the pipeline
-- stages determined by the
-- <{html_spec_relative}#synchronization-pipeline-stages-masks source stage mask>
-- specified by @stageMask@.
--
-- The second
-- <{html_spec_relative}#synchronization-dependencies-scopes synchronization scope>
-- includes only the event unsignal operation.
--
-- If @event@ is already in the unsignaled state when 'vkCmdResetEvent' is
-- executed on the device, then 'vkCmdResetEvent' has no effect, no event
-- unsignal operation occurs, and no execution dependency is generated.
--
-- == Valid Usage
--
-- - @stageMask@ /must/ not include @VK_PIPELINE_STAGE_HOST_BIT@
--
-- - If the
-- <{html_spec_relative}#features-features-geometryShader geometry shaders>
-- feature is not enabled, @stageMask@ /must/ not contain
-- @VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT@
--
-- - If the
-- <{html_spec_relative}#features-features-tessellationShader tessellation shaders>
-- feature is not enabled, @stageMask@ /must/ not contain
-- @VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT@ or
-- @VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT@
--
-- - When this command executes, @event@ /must/ not be waited on by a
-- @vkCmdWaitEvents@ command that is currently executing
--
-- == Valid Usage (Implicit)
--
-- - @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
--
-- - @event@ /must/ be a valid @VkEvent@ handle
--
-- - @stageMask@ /must/ be a valid combination of
-- 'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlagBits' values
--
-- - @stageMask@ /must/ not be @0@
--
-- - @commandBuffer@ /must/ be in the
-- <#commandbuffers-lifecycle recording state>
--
-- - The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
-- support graphics, or compute operations
--
-- - This command /must/ only be called outside of a render pass instance
--
-- - Both of @commandBuffer@, and @event@ /must/ have been created,
-- allocated, or retrieved from the same @VkDevice@
--
-- == Host Synchronization
--
-- - Host access to @commandBuffer@ /must/ be externally synchronized
--
-- - Host access to the @VkCommandPool@ that @commandBuffer@ was
-- allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- > +-----------------+-----------------+-----------------+-----------------+
-- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
-- > | erLevel Command | derPass Render | ts Supported Qu | on-pipeline-sta |
-- > | Buffer Levels> | Pass Scope> | eue Types> | ges-types Pipel |
-- > | | | | ine Type> |
-- > +=================+=================+=================+=================+
-- > | Primary | Outside | Graphics | |
-- > | Secondary | | Compute | |
-- > +-----------------+-----------------+-----------------+-----------------+
--
-- = See Also
-- #_see_also#
--
-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
-- 'Graphics.Vulkan.Core10.Event.VkEvent',
-- 'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlags'
foreign import ccall "vkCmdResetEvent" vkCmdResetEvent :: ("commandBuffer" ::: VkCommandBuffer) -> ("event" ::: VkEvent) -> ("stageMask" ::: VkPipelineStageFlags) -> IO ()
-- | vkCmdWaitEvents - Wait for one or more events and insert a set of memory
--
-- = Parameters
-- #_parameters#
--
-- - @commandBuffer@ is the command buffer into which the command is
-- recorded.
--
-- - @eventCount@ is the length of the @pEvents@ array.
--
-- - @pEvents@ is an array of event object handles to wait on.
--
-- - @srcStageMask@ is a bitmask of
-- 'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlagBits' specifying
-- the
-- <{html_spec_relative}#synchronization-pipeline-stages source stage mask>.
--
-- - @dstStageMask@ is a bitmask of
-- 'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlagBits' specifying
-- the
-- <{html_spec_relative}#synchronization-pipeline-stages destination stage mask>.
--
-- - @memoryBarrierCount@ is the length of the @pMemoryBarriers@ array.
--
-- - @pMemoryBarriers@ is a pointer to an array of 'VkMemoryBarrier'
-- structures.
--
-- - @bufferMemoryBarrierCount@ is the length of the
-- @pBufferMemoryBarriers@ array.
--
-- - @pBufferMemoryBarriers@ is a pointer to an array of
-- 'VkBufferMemoryBarrier' structures.
--
-- - @imageMemoryBarrierCount@ is the length of the
-- @pImageMemoryBarriers@ array.
--
-- - @pImageMemoryBarriers@ is a pointer to an array of
-- 'VkImageMemoryBarrier' structures.
--
-- = Description
-- #_description#
--
-- When @vkCmdWaitEvents@ is submitted to a queue, it defines a memory
-- dependency between prior event signal operations on the same queue or
-- the host, and subsequent commands. @vkCmdWaitEvents@ /must/ not be used
-- to wait on event signal operations occuring on other queues.
--
-- The first synchronization scope only includes event signal operations
-- that operate on members of @pEvents@, and the operations that
-- happened-before the event signal operations. Event signal operations
-- performed by 'vkCmdSetEvent' that occur earlier in
-- <{html_spec_relative}#synchronization-submission-order submission order>
-- are included in the first synchronization scope, if the
-- <{html_spec_relative}#synchronization-pipeline-stages-order logically latest>
-- pipeline stage in their @stageMask@ parameter is
-- <{html_spec_relative}#synchronization-pipeline-stages-order logically earlier>
-- than or equal to the
-- <{html_spec_relative}#synchronization-pipeline-stages-order logically latest>
-- pipeline stage in @srcStageMask@. Event signal operations performed by
-- 'Graphics.Vulkan.Core10.Event.vkSetEvent' are only included in the first
-- synchronization scope if @VK_PIPELINE_STAGE_HOST_BIT@ is included in
-- @srcStageMask@.
--
-- The second
-- <{html_spec_relative}#synchronization-dependencies-scopes synchronization scope>
-- includes all commands that occur later in
-- <{html_spec_relative}#synchronization-submission-order submission order>.
-- The second synchronization scope is limited to operations on the
-- pipeline stages determined by the
-- <{html_spec_relative}#synchronization-pipeline-stages-masks destination stage mask>
-- specified by @dstStageMask@.
--
-- The first
-- <{html_spec_relative}#synchronization-dependencies-access-scopes access scope>
-- is limited to access in the pipeline stages determined by the
-- <{html_spec_relative}#synchronization-pipeline-stages-masks source stage mask>
-- specified by @srcStageMask@. Within that, the first access scope only
-- includes the first access scopes defined by elements of the
-- @pMemoryBarriers@, @pBufferMemoryBarriers@ and @pImageMemoryBarriers@
-- arrays, which each define a set of
-- <{html_spec_relative}#synchronization-memory-barriers memory barriers>.
-- If no memory barriers are specified, then the first access scope
-- includes no accesses.
--
-- The second
-- <{html_spec_relative}#synchronization-dependencies-access-scopes access scope>
-- is limited to access in the pipeline stages determined by the
-- <{html_spec_relative}#synchronization-pipeline-stages-masks destination stage mask>
-- specified by @dstStageMask@. Within that, the second access scope only
-- includes the second access scopes defined by elements of the
-- @pMemoryBarriers@, @pBufferMemoryBarriers@ and @pImageMemoryBarriers@
-- arrays, which each define a set of
-- <{html_spec_relative}#synchronization-memory-barriers memory barriers>.
-- If no memory barriers are specified, then the second access scope
-- includes no accesses.
--
-- __Note__
--
-- 'vkCmdWaitEvents' is used with 'vkCmdSetEvent' to define a memory
-- dependency between two sets of action commands, roughly in the same way
-- as pipeline barriers, but split into two commands such that work between
-- the two /may/ execute unhindered.
--
-- __Note__
--
-- Applications /should/ be careful to avoid race conditions when using
-- events. There is no direct ordering guarantee between a
-- 'vkCmdResetEvent' command and a 'vkCmdWaitEvents' command submitted
-- after it, so some other execution dependency /must/ be included between
-- these commands (e.g. a semaphore).
--
-- == Valid Usage
--
-- - @srcStageMask@ /must/ be the bitwise OR of the @stageMask@ parameter
-- used in previous calls to @vkCmdSetEvent@ with any of the members of
-- @pEvents@ and @VK_PIPELINE_STAGE_HOST_BIT@ if any of the members of
-- @pEvents@ was set using @vkSetEvent@
--
-- - If the
-- <{html_spec_relative}#features-features-geometryShader geometry shaders>
-- feature is not enabled, @srcStageMask@ /must/ not contain
-- @VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT@
--
-- - If the
-- <{html_spec_relative}#features-features-geometryShader geometry shaders>
-- feature is not enabled, @dstStageMask@ /must/ not contain
-- @VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT@
--
-- - If the
-- <{html_spec_relative}#features-features-tessellationShader tessellation shaders>
-- feature is not enabled, @srcStageMask@ /must/ not contain
-- @VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT@ or
-- @VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT@
--
-- - If the
-- <{html_spec_relative}#features-features-tessellationShader tessellation shaders>
-- feature is not enabled, @dstStageMask@ /must/ not contain
-- @VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT@ or
-- @VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT@
--
-- - If @pEvents@ includes one or more events that will be signaled by
-- @vkSetEvent@ after @commandBuffer@ has been submitted to a queue,
-- then @vkCmdWaitEvents@ /must/ not be called inside a render pass
-- instance
--
-- - Any pipeline stage included in @srcStageMask@ or @dstStageMask@
-- /must/ be supported by the capabilities of the queue family
-- specified by the @queueFamilyIndex@ member of the
-- 'Graphics.Vulkan.Core10.CommandPool.VkCommandPoolCreateInfo'
-- structure that was used to create the @VkCommandPool@ that
-- @commandBuffer@ was allocated from, as specified in the
-- <{html_spec_relative}#synchronization-pipeline-stages-supported table of supported pipeline stages>.
--
-- - Each element of @pMemoryBarriers@, @pBufferMemoryBarriers@ or
-- @pImageMemoryBarriers@ /must/ not have any access flag included in
-- its @srcAccessMask@ member if that bit is not supported by any of
-- the pipeline stages in @srcStageMask@, as specified in the
-- <{html_spec_relative}#synchronization-access-types-supported table of supported access types>.
--
-- - Each element of @pMemoryBarriers@, @pBufferMemoryBarriers@ or
-- @pImageMemoryBarriers@ /must/ not have any access flag included in
-- its @dstAccessMask@ member if that bit is not supported by any of
-- the pipeline stages in @dstStageMask@, as specified in the
-- <{html_spec_relative}#synchronization-access-types-supported table of supported access types>.
--
-- == Valid Usage (Implicit)
--
-- - @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
--
-- - @pEvents@ /must/ be a valid pointer to an array of @eventCount@
-- valid @VkEvent@ handles
--
-- - @srcStageMask@ /must/ be a valid combination of
-- 'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlagBits' values
--
-- - @srcStageMask@ /must/ not be @0@
--
-- - @dstStageMask@ /must/ be a valid combination of
-- 'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlagBits' values
--
-- - @dstStageMask@ /must/ not be @0@
--
-- - If @memoryBarrierCount@ is not @0@, @pMemoryBarriers@ /must/ be a
-- valid pointer to an array of @memoryBarrierCount@ valid
-- @VkMemoryBarrier@ structures
--
-- - If @bufferMemoryBarrierCount@ is not @0@, @pBufferMemoryBarriers@
-- /must/ be a valid pointer to an array of @bufferMemoryBarrierCount@
-- valid @VkBufferMemoryBarrier@ structures
--
-- - If @imageMemoryBarrierCount@ is not @0@, @pImageMemoryBarriers@
-- /must/ be a valid pointer to an array of @imageMemoryBarrierCount@
-- valid @VkImageMemoryBarrier@ structures
--
-- - @commandBuffer@ /must/ be in the
-- <#commandbuffers-lifecycle recording state>
--
-- - The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
-- support graphics, or compute operations
--
-- - @eventCount@ /must/ be greater than @0@
--
-- - Both of @commandBuffer@, and the elements of @pEvents@ /must/ have
-- been created, allocated, or retrieved from the same @VkDevice@
--
-- == Host Synchronization
--
-- - Host access to @commandBuffer@ /must/ be externally synchronized
--
-- - Host access to the @VkCommandPool@ that @commandBuffer@ was
-- allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- > +-----------------+-----------------+-----------------+-----------------+
-- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
-- > | erLevel Command | derPass Render | ts Supported Qu | on-pipeline-sta |
-- > | Buffer Levels> | Pass Scope> | eue Types> | ges-types Pipel |
-- > | | | | ine Type> |
-- > +=================+=================+=================+=================+
-- > | Primary | Both | Graphics | |
-- > | Secondary | | Compute | |
-- > +-----------------+-----------------+-----------------+-----------------+
--
-- = See Also
-- #_see_also#
--
-- 'VkBufferMemoryBarrier', 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
-- 'Graphics.Vulkan.Core10.Event.VkEvent', 'VkImageMemoryBarrier',
-- 'VkMemoryBarrier', 'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlags'
foreign import ccall "vkCmdWaitEvents" vkCmdWaitEvents :: ("commandBuffer" ::: VkCommandBuffer) -> ("eventCount" ::: Word32) -> ("pEvents" ::: Ptr VkEvent) -> ("srcStageMask" ::: VkPipelineStageFlags) -> ("dstStageMask" ::: VkPipelineStageFlags) -> ("memoryBarrierCount" ::: Word32) -> ("pMemoryBarriers" ::: Ptr VkMemoryBarrier) -> ("bufferMemoryBarrierCount" ::: Word32) -> ("pBufferMemoryBarriers" ::: Ptr VkBufferMemoryBarrier) -> ("imageMemoryBarrierCount" ::: Word32) -> ("pImageMemoryBarriers" ::: Ptr VkImageMemoryBarrier) -> IO ()
-- | vkCmdPipelineBarrier - Insert a memory dependency
--
-- = Parameters
-- #_parameters#
--
-- - @commandBuffer@ is the command buffer into which the command is
-- recorded.
--
-- - @srcStageMask@ is a bitmask of
-- 'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlagBits' specifying
-- the
-- <{html_spec_relative}#synchronization-pipeline-stages-masks source stage mask>.
--
-- - @dstStageMask@ is a bitmask of
-- 'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlagBits' specifying
-- the
-- <{html_spec_relative}#synchronization-pipeline-stages-masks destination stage mask>.
--
-- - @dependencyFlags@ is a bitmask of
-- 'Graphics.Vulkan.Core10.Pass.VkDependencyFlagBits' specifying how
-- execution and memory dependencies are formed.
--
-- - @memoryBarrierCount@ is the length of the @pMemoryBarriers@ array.
--
-- - @pMemoryBarriers@ is a pointer to an array of 'VkMemoryBarrier'
-- structures.
--
-- - @bufferMemoryBarrierCount@ is the length of the
-- @pBufferMemoryBarriers@ array.
--
-- - @pBufferMemoryBarriers@ is a pointer to an array of
-- 'VkBufferMemoryBarrier' structures.
--
-- - @imageMemoryBarrierCount@ is the length of the
-- @pImageMemoryBarriers@ array.
--
-- - @pImageMemoryBarriers@ is a pointer to an array of
-- 'VkImageMemoryBarrier' structures.
--
-- = Description
-- #_description#
--
-- When 'vkCmdPipelineBarrier' is submitted to a queue, it defines a memory
-- dependency between commands that were submitted before it, and those
-- submitted after it.
--
-- If 'vkCmdPipelineBarrier' was recorded outside a render pass instance,
-- the first
-- <{html_spec_relative}#synchronization-dependencies-scopes synchronization scope>
-- includes all commands that occur earlier in
-- <{html_spec_relative}#synchronization-submission-order submission order>.
-- If 'vkCmdPipelineBarrier' was recorded inside a render pass instance,
-- the first synchronization scope includes only commands that occur
-- earlier in
-- <{html_spec_relative}#synchronization-submission-order submission order>
-- within the same subpass. In either case, the first synchronization scope
-- is limited to operations on the pipeline stages determined by the
-- <{html_spec_relative}#synchronization-pipeline-stages-masks source stage mask>
-- specified by @srcStageMask@.
--
-- If 'vkCmdPipelineBarrier' was recorded outside a render pass instance,
-- the second
-- <{html_spec_relative}#synchronization-dependencies-scopes synchronization scope>
-- includes all commands that occur later in
-- <{html_spec_relative}#synchronization-submission-order submission order>.
-- If 'vkCmdPipelineBarrier' was recorded inside a render pass instance,
-- the second synchronization scope includes only commands that occur later
-- in
-- <{html_spec_relative}#synchronization-submission-order submission order>
-- within the same subpass. In either case, the second synchronization
-- scope is limited to operations on the pipeline stages determined by the
-- <{html_spec_relative}#synchronization-pipeline-stages-masks destination stage mask>
-- specified by @dstStageMask@.
--
-- The first
-- <{html_spec_relative}#synchronization-dependencies-access-scopes access scope>
-- is limited to access in the pipeline stages determined by the
-- <{html_spec_relative}#synchronization-pipeline-stages-masks source stage mask>
-- specified by @srcStageMask@. Within that, the first access scope only
-- includes the first access scopes defined by elements of the
-- @pMemoryBarriers@, @pBufferMemoryBarriers@ and @pImageMemoryBarriers@
-- arrays, which each define a set of
-- <{html_spec_relative}#synchronization-memory-barriers memory barriers>.
-- If no memory barriers are specified, then the first access scope
-- includes no accesses.
--
-- The second
-- <{html_spec_relative}#synchronization-dependencies-access-scopes access scope>
-- is limited to access in the pipeline stages determined by the
-- <{html_spec_relative}#synchronization-pipeline-stages-masks destination stage mask>
-- specified by @dstStageMask@. Within that, the second access scope only
-- includes the second access scopes defined by elements of the
-- @pMemoryBarriers@, @pBufferMemoryBarriers@ and @pImageMemoryBarriers@
-- arrays, which each define a set of
-- <{html_spec_relative}#synchronization-memory-barriers memory barriers>.
-- If no memory barriers are specified, then the second access scope
-- includes no accesses.
--
-- If @dependencyFlags@ includes @VK_DEPENDENCY_BY_REGION_BIT@, then any
-- dependency between
-- <{html_spec_relative}#synchronization-framebuffer-regions framebuffer-space>
-- pipeline stages is
-- <{html_spec_relative}#synchronization-framebuffer-regions framebuffer-local>
-- - otherwise it is
-- <{html_spec_relative}#synchronization-framebuffer-regions framebuffer-global>.
--
-- == Valid Usage
--
-- - If the
-- <{html_spec_relative}#features-features-geometryShader geometry shaders>
-- feature is not enabled, @srcStageMask@ /must/ not contain
-- @VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT@
--
-- - If the
-- <{html_spec_relative}#features-features-geometryShader geometry shaders>
-- feature is not enabled, @dstStageMask@ /must/ not contain
-- @VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT@
--
-- - If the
-- <{html_spec_relative}#features-features-tessellationShader tessellation shaders>
-- feature is not enabled, @srcStageMask@ /must/ not contain
-- @VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT@ or
-- @VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT@
--
-- - If the
-- <{html_spec_relative}#features-features-tessellationShader tessellation shaders>
-- feature is not enabled, @dstStageMask@ /must/ not contain
-- @VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT@ or
-- @VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT@
--
-- - If @vkCmdPipelineBarrier@ is called within a render pass instance,
-- the render pass /must/ have been created with a
-- @VkSubpassDependency@ instance in @pDependencies@ that expresses a
-- dependency from the current subpass to itself.
--
-- - If @vkCmdPipelineBarrier@ is called within a render pass instance,
-- @srcStageMask@ /must/ contain a subset of the bit values in the
-- @srcStageMask@ member of that instance of @VkSubpassDependency@
--
-- - If @vkCmdPipelineBarrier@ is called within a render pass instance,
-- @dstStageMask@ /must/ contain a subset of the bit values in the
-- @dstStageMask@ member of that instance of @VkSubpassDependency@
--
-- - If @vkCmdPipelineBarrier@ is called within a render pass instance,
-- the @srcAccessMask@ of any element of @pMemoryBarriers@ or
-- @pImageMemoryBarriers@ /must/ contain a subset of the bit values the
-- @srcAccessMask@ member of that instance of @VkSubpassDependency@
--
-- - If @vkCmdPipelineBarrier@ is called within a render pass instance,
-- the @dstAccessMask@ of any element of @pMemoryBarriers@ or
-- @pImageMemoryBarriers@ /must/ contain a subset of the bit values the
-- @dstAccessMask@ member of that instance of @VkSubpassDependency@
--
-- - If @vkCmdPipelineBarrier@ is called within a render pass instance,
-- @dependencyFlags@ /must/ be equal to the @dependencyFlags@ member of
-- that instance of @VkSubpassDependency@
--
-- - If @vkCmdPipelineBarrier@ is called within a render pass instance,
-- @bufferMemoryBarrierCount@ /must/ be @0@
--
-- - If @vkCmdPipelineBarrier@ is called within a render pass instance,
-- the @image@ member of any element of @pImageMemoryBarriers@ /must/
-- be equal to one of the elements of @pAttachments@ that the current
-- @framebuffer@ was created with, that is also referred to by one of
-- the elements of the @pColorAttachments@, @pResolveAttachments@ or
-- @pDepthStencilAttachment@ members of the @VkSubpassDescription@
-- instance that the current subpass was created with
--
-- - If @vkCmdPipelineBarrier@ is called within a render pass instance,
-- the @oldLayout@ and @newLayout@ members of any element of
-- @pImageMemoryBarriers@ /must/ be equal to the @layout@ member of an
-- element of the @pColorAttachments@, @pResolveAttachments@ or
-- @pDepthStencilAttachment@ members of the @VkSubpassDescription@
-- instance that the current subpass was created with, that refers to
-- the same @image@
--
-- - If @vkCmdPipelineBarrier@ is called within a render pass instance,
-- the @oldLayout@ and @newLayout@ members of an element of
-- @pImageMemoryBarriers@ /must/ be equal
--
-- - If @vkCmdPipelineBarrier@ is called within a render pass instance,
-- the @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ members of any
-- element of @pImageMemoryBarriers@ /must/ be
-- @VK_QUEUE_FAMILY_IGNORED@
--
-- - Any pipeline stage included in @srcStageMask@ or @dstStageMask@
-- /must/ be supported by the capabilities of the queue family
-- specified by the @queueFamilyIndex@ member of the
-- 'Graphics.Vulkan.Core10.CommandPool.VkCommandPoolCreateInfo'
-- structure that was used to create the @VkCommandPool@ that
-- @commandBuffer@ was allocated from, as specified in the
-- <{html_spec_relative}#synchronization-pipeline-stages-supported table of supported pipeline stages>.
--
-- - Each element of @pMemoryBarriers@, @pBufferMemoryBarriers@ and
-- @pImageMemoryBarriers@ /must/ not have any access flag included in
-- its @srcAccessMask@ member if that bit is not supported by any of
-- the pipeline stages in @srcStageMask@, as specified in the
-- <{html_spec_relative}#synchronization-access-types-supported table of supported access types>.
--
-- - Each element of @pMemoryBarriers@, @pBufferMemoryBarriers@ and
-- @pImageMemoryBarriers@ /must/ not have any access flag included in
-- its @dstAccessMask@ member if that bit is not supported by any of
-- the pipeline stages in @dstStageMask@, as specified in the
-- <{html_spec_relative}#synchronization-access-types-supported table of supported access types>.
--
-- == Valid Usage (Implicit)
--
-- - @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
--
-- - @srcStageMask@ /must/ be a valid combination of
-- 'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlagBits' values
--
-- - @srcStageMask@ /must/ not be @0@
--
-- - @dstStageMask@ /must/ be a valid combination of
-- 'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlagBits' values
--
-- - @dstStageMask@ /must/ not be @0@
--
-- - @dependencyFlags@ /must/ be a valid combination of
-- 'Graphics.Vulkan.Core10.Pass.VkDependencyFlagBits' values
--
-- - If @memoryBarrierCount@ is not @0@, @pMemoryBarriers@ /must/ be a
-- valid pointer to an array of @memoryBarrierCount@ valid
-- @VkMemoryBarrier@ structures
--
-- - If @bufferMemoryBarrierCount@ is not @0@, @pBufferMemoryBarriers@
-- /must/ be a valid pointer to an array of @bufferMemoryBarrierCount@
-- valid @VkBufferMemoryBarrier@ structures
--
-- - If @imageMemoryBarrierCount@ is not @0@, @pImageMemoryBarriers@
-- /must/ be a valid pointer to an array of @imageMemoryBarrierCount@
-- valid @VkImageMemoryBarrier@ structures
--
-- - @commandBuffer@ /must/ be in the
-- <#commandbuffers-lifecycle recording state>
--
-- - The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
-- support transfer, graphics, or compute operations
--
-- == Host Synchronization
--
-- - Host access to @commandBuffer@ /must/ be externally synchronized
--
-- - Host access to the @VkCommandPool@ that @commandBuffer@ was
-- allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- > +-----------------+-----------------+-----------------+-----------------+
-- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
-- > | erLevel Command | derPass Render | ts Supported Qu | on-pipeline-sta |
-- > | Buffer Levels> | Pass Scope> | eue Types> | ges-types Pipel |
-- > | | | | ine Type> |
-- > +=================+=================+=================+=================+
-- > | Primary | Both | Transfer | |
-- > | Secondary | | Graphics | |
-- > | | | Compute | |
-- > +-----------------+-----------------+-----------------+-----------------+
--
-- = See Also
-- #_see_also#
--
-- 'VkBufferMemoryBarrier', 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
-- 'Graphics.Vulkan.Core10.Pass.VkDependencyFlags', 'VkImageMemoryBarrier',
-- 'VkMemoryBarrier', 'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlags'
foreign import ccall "vkCmdPipelineBarrier" vkCmdPipelineBarrier :: ("commandBuffer" ::: VkCommandBuffer) -> ("srcStageMask" ::: VkPipelineStageFlags) -> ("dstStageMask" ::: VkPipelineStageFlags) -> ("dependencyFlags" ::: VkDependencyFlags) -> ("memoryBarrierCount" ::: Word32) -> ("pMemoryBarriers" ::: Ptr VkMemoryBarrier) -> ("bufferMemoryBarrierCount" ::: Word32) -> ("pBufferMemoryBarriers" ::: Ptr VkBufferMemoryBarrier) -> ("imageMemoryBarrierCount" ::: Word32) -> ("pImageMemoryBarriers" ::: Ptr VkImageMemoryBarrier) -> IO ()
-- | vkCmdBeginQuery - Begin a query
--
-- = Parameters
-- #_parameters#
--
-- - @commandBuffer@ is the command buffer into which this command will
-- be recorded.
--
-- - @queryPool@ is the query pool that will manage the results of the
-- query.
--
-- - @query@ is the query index within the query pool that will contain
-- the results.
--
-- - @flags@ is a bitmask of
-- 'Graphics.Vulkan.Core10.CommandBuffer.VkQueryControlFlagBits'
-- specifying constraints on the types of queries that /can/ be
-- performed.
--
-- = Description
-- #_description#
--
-- If the @queryType@ of the pool is @VK_QUERY_TYPE_OCCLUSION@ and @flags@
-- contains @VK_QUERY_CONTROL_PRECISE_BIT@, an implementation /must/ return
-- a result that matches the actual number of samples passed. This is
-- described in more detail in
-- <{html_spec_relative}#queries-occlusion Occlusion Queries>.
--
-- After beginning a query, that query is considered /active/ within the
-- command buffer it was called in until that same query is ended. Queries
-- active in a primary command buffer when secondary command buffers are
-- executed are considered active for those secondary command buffers.
--
-- == Valid Usage
--
-- - @queryPool@ /must/ have been created with a @queryType@ that differs
-- from that of any queries that are
-- <{html_spec_relative}#queries-operation-active active> within
-- @commandBuffer@
--
-- - All queries used by the command /must/ be unavailable
--
-- - If the
-- <{html_spec_relative}#features-features-occlusionQueryPrecise precise occlusion queries>
-- feature is not enabled, or the @queryType@ used to create
-- @queryPool@ was not @VK_QUERY_TYPE_OCCLUSION@, @flags@ /must/ not
-- contain @VK_QUERY_CONTROL_PRECISE_BIT@
--
-- - @query@ /must/ be less than the number of queries in @queryPool@
--
-- - If the @queryType@ used to create @queryPool@ was
-- @VK_QUERY_TYPE_OCCLUSION@, the @VkCommandPool@ that @commandBuffer@
-- was allocated from /must/ support graphics operations
--
-- - If the @queryType@ used to create @queryPool@ was
-- @VK_QUERY_TYPE_PIPELINE_STATISTICS@ and any of the
-- @pipelineStatistics@ indicate graphics operations, the
-- @VkCommandPool@ that @commandBuffer@ was allocated from /must/
-- support graphics operations
--
-- - If the @queryType@ used to create @queryPool@ was
-- @VK_QUERY_TYPE_PIPELINE_STATISTICS@ and any of the
-- @pipelineStatistics@ indicate compute operations, the
-- @VkCommandPool@ that @commandBuffer@ was allocated from /must/
-- support compute operations
--
-- == Valid Usage (Implicit)
--
-- - @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
--
-- - @queryPool@ /must/ be a valid @VkQueryPool@ handle
--
-- - @flags@ /must/ be a valid combination of
-- 'Graphics.Vulkan.Core10.CommandBuffer.VkQueryControlFlagBits' values
--
-- - @commandBuffer@ /must/ be in the
-- <#commandbuffers-lifecycle recording state>
--
-- - The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
-- support graphics, or compute operations
--
-- - Both of @commandBuffer@, and @queryPool@ /must/ have been created,
-- allocated, or retrieved from the same @VkDevice@
--
-- == Host Synchronization
--
-- - Host access to @commandBuffer@ /must/ be externally synchronized
--
-- - Host access to the @VkCommandPool@ that @commandBuffer@ was
-- allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- > +-----------------+-----------------+-----------------+-----------------+
-- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
-- > | erLevel Command | derPass Render | ts Supported Qu | on-pipeline-sta |
-- > | Buffer Levels> | Pass Scope> | eue Types> | ges-types Pipel |
-- > | | | | ine Type> |
-- > +=================+=================+=================+=================+
-- > | Primary | Both | Graphics | |
-- > | Secondary | | Compute | |
-- > +-----------------+-----------------+-----------------+-----------------+
--
-- = See Also
-- #_see_also#
--
-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
-- 'Graphics.Vulkan.Core10.CommandBuffer.VkQueryControlFlags',
-- 'Graphics.Vulkan.Core10.Query.VkQueryPool'
foreign import ccall "vkCmdBeginQuery" vkCmdBeginQuery :: ("commandBuffer" ::: VkCommandBuffer) -> ("queryPool" ::: VkQueryPool) -> ("query" ::: Word32) -> ("flags" ::: VkQueryControlFlags) -> IO ()
-- | vkCmdEndQuery - Ends a query
--
-- = Parameters
-- #_parameters#
--
-- - @commandBuffer@ is the command buffer into which this command will
-- be recorded.
--
-- - @queryPool@ is the query pool that is managing the results of the
-- query.
--
-- - @query@ is the query index within the query pool where the result is
-- stored.
--
-- = Description
-- #_description#
--
-- As queries operate asynchronously, ending a query does not immediately
-- set the query’s status to available. A query is considered /finished/
-- when the final results of the query are ready to be retrieved by
-- 'Graphics.Vulkan.Core10.Query.vkGetQueryPoolResults' and
-- 'vkCmdCopyQueryPoolResults', and this is when the query’s status is set
-- to available.
--
-- Once a query is ended the query /must/ finish in finite time, unless the
-- state of the query is changed using other commands, e.g. by issuing a
-- reset of the query.
--
-- == Valid Usage
--
-- - All queries used by the command /must/ be
-- <{html_spec_relative}#queries-operation-active active>
--
-- - @query@ /must/ be less than the number of queries in @queryPool@
--
-- == Valid Usage (Implicit)
--
-- - @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
--
-- - @queryPool@ /must/ be a valid @VkQueryPool@ handle
--
-- - @commandBuffer@ /must/ be in the
-- <#commandbuffers-lifecycle recording state>
--
-- - The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
-- support graphics, or compute operations
--
-- - Both of @commandBuffer@, and @queryPool@ /must/ have been created,
-- allocated, or retrieved from the same @VkDevice@
--
-- == Host Synchronization
--
-- - Host access to @commandBuffer@ /must/ be externally synchronized
--
-- - Host access to the @VkCommandPool@ that @commandBuffer@ was
-- allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- > +-----------------+-----------------+-----------------+-----------------+
-- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
-- > | erLevel Command | derPass Render | ts Supported Qu | on-pipeline-sta |
-- > | Buffer Levels> | Pass Scope> | eue Types> | ges-types Pipel |
-- > | | | | ine Type> |
-- > +=================+=================+=================+=================+
-- > | Primary | Both | Graphics | |
-- > | Secondary | | Compute | |
-- > +-----------------+-----------------+-----------------+-----------------+
--
-- = See Also
-- #_see_also#
--
-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
-- 'Graphics.Vulkan.Core10.Query.VkQueryPool'
foreign import ccall "vkCmdEndQuery" vkCmdEndQuery :: ("commandBuffer" ::: VkCommandBuffer) -> ("queryPool" ::: VkQueryPool) -> ("query" ::: Word32) -> IO ()
-- | vkCmdResetQueryPool - Reset queries in a query pool
--
-- = Parameters
-- #_parameters#
--
-- - @commandBuffer@ is the command buffer into which this command will
-- be recorded.
--
-- - @queryPool@ is the handle of the query pool managing the queries
-- being reset.
--
-- - @firstQuery@ is the initial query index to reset.
--
-- - @queryCount@ is the number of queries to reset.
--
-- = Description
-- #_description#
--
-- When executed on a queue, this command sets the status of query indices
-- [@firstQuery@, @firstQuery@ + @queryCount@ - 1] to unavailable.
--
-- == Valid Usage
--
-- - @firstQuery@ /must/ be less than the number of queries in
-- @queryPool@
--
-- - The sum of @firstQuery@ and @queryCount@ /must/ be less than or
-- equal to the number of queries in @queryPool@
--
-- == Valid Usage (Implicit)
--
-- - @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
--
-- - @queryPool@ /must/ be a valid @VkQueryPool@ handle
--
-- - @commandBuffer@ /must/ be in the
-- <#commandbuffers-lifecycle recording state>
--
-- - The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
-- support graphics, or compute operations
--
-- - This command /must/ only be called outside of a render pass instance
--
-- - Both of @commandBuffer@, and @queryPool@ /must/ have been created,
-- allocated, or retrieved from the same @VkDevice@
--
-- == Host Synchronization
--
-- - Host access to @commandBuffer@ /must/ be externally synchronized
--
-- - Host access to the @VkCommandPool@ that @commandBuffer@ was
-- allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- > +-----------------+-----------------+-----------------+-----------------+
-- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
-- > | erLevel Command | derPass Render | ts Supported Qu | on-pipeline-sta |
-- > | Buffer Levels> | Pass Scope> | eue Types> | ges-types Pipel |
-- > | | | | ine Type> |
-- > +=================+=================+=================+=================+
-- > | Primary | Outside | Graphics | |
-- > | Secondary | | Compute | |
-- > +-----------------+-----------------+-----------------+-----------------+
--
-- = See Also
-- #_see_also#
--
-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
-- 'Graphics.Vulkan.Core10.Query.VkQueryPool'
foreign import ccall "vkCmdResetQueryPool" vkCmdResetQueryPool :: ("commandBuffer" ::: VkCommandBuffer) -> ("queryPool" ::: VkQueryPool) -> ("firstQuery" ::: Word32) -> ("queryCount" ::: Word32) -> IO ()
-- | vkCmdWriteTimestamp - Write a device timestamp into a query object
--
-- = Parameters
-- #_parameters#
--
-- - @commandBuffer@ is the command buffer into which the command will be
-- recorded.
--
-- - @pipelineStage@ is one of the
-- 'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlagBits', specifying a
-- stage of the pipeline.
--
-- - @queryPool@ is the query pool that will manage the timestamp.
--
-- - @query@ is the query within the query pool that will contain the
-- timestamp.
--
-- = Description
-- #_description#
--
-- @vkCmdWriteTimestamp@ latches the value of the timer when all previous
-- commands have completed executing as far as the specified pipeline
-- stage, and writes the timestamp value to memory. When the timestamp
-- value is written, the availability status of the query is set to
-- available.
--
-- __Note__
--
-- If an implementation is unable to detect completion and latch the timer
-- at any specific stage of the pipeline, it /may/ instead do so at any
-- logically later stage.
--
-- 'vkCmdCopyQueryPoolResults' /can/ then be called to copy the timestamp
-- value from the query pool into buffer memory, with ordering and
-- synchronization behavior equivalent to how other queries operate.
-- Timestamp values /can/ also be retrieved from the query pool using
-- 'Graphics.Vulkan.Core10.Query.vkGetQueryPoolResults'. As with other
-- queries, the query /must/ be reset using 'vkCmdResetQueryPool' before
-- requesting the timestamp value be written to it.
--
-- While @vkCmdWriteTimestamp@ /can/ be called inside or outside of a
-- render pass instance, 'vkCmdCopyQueryPoolResults' /must/ only be called
-- outside of a render pass instance.
--
-- Timestamps /may/ only be meaningfully compared if they are written by
-- commands submitted to the same queue.
--
-- __Note__
--
-- An example of such a comparison is determining the execution time of a
-- sequence of commands.
--
-- == Valid Usage
--
-- - @queryPool@ /must/ have been created with a @queryType@ of
-- @VK_QUERY_TYPE_TIMESTAMP@
--
-- - The query identified by @queryPool@ and @query@ /must/ be
-- /unavailable/
--
-- - The command pool’s queue family /must/ support a non-zero
-- @timestampValidBits@
--
-- == Valid Usage (Implicit)
--
-- - @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
--
-- - @pipelineStage@ /must/ be a valid
-- 'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlagBits' value
--
-- - @queryPool@ /must/ be a valid @VkQueryPool@ handle
--
-- - @commandBuffer@ /must/ be in the
-- <#commandbuffers-lifecycle recording state>
--
-- - The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
-- support transfer, graphics, or compute operations
--
-- - Both of @commandBuffer@, and @queryPool@ /must/ have been created,
-- allocated, or retrieved from the same @VkDevice@
--
-- == Host Synchronization
--
-- - Host access to @commandBuffer@ /must/ be externally synchronized
--
-- - Host access to the @VkCommandPool@ that @commandBuffer@ was
-- allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- > +-----------------+-----------------+-----------------+-----------------+
-- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
-- > | erLevel Command | derPass Render | ts Supported Qu | on-pipeline-sta |
-- > | Buffer Levels> | Pass Scope> | eue Types> | ges-types Pipel |
-- > | | | | ine Type> |
-- > +=================+=================+=================+=================+
-- > | Primary | Both | Transfer | Transfer |
-- > | Secondary | | Graphics | |
-- > | | | Compute | |
-- > +-----------------+-----------------+-----------------+-----------------+
--
-- = See Also
-- #_see_also#
--
-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
-- 'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlagBits',
-- 'Graphics.Vulkan.Core10.Query.VkQueryPool'
foreign import ccall "vkCmdWriteTimestamp" vkCmdWriteTimestamp :: ("commandBuffer" ::: VkCommandBuffer) -> ("pipelineStage" ::: VkPipelineStageFlagBits) -> ("queryPool" ::: VkQueryPool) -> ("query" ::: Word32) -> IO ()
-- | vkCmdCopyQueryPoolResults - Copy the results of queries in a query pool
-- to a buffer object
--
-- = Parameters
-- #_parameters#
--
-- - @commandBuffer@ is the command buffer into which this command will
-- be recorded.
--
-- - @queryPool@ is the query pool managing the queries containing the
-- desired results.
--
-- - @firstQuery@ is the initial query index.
--
-- - @queryCount@ is the number of queries. @firstQuery@ and @queryCount@
-- together define a range of queries.
--
-- - @dstBuffer@ is a @VkBuffer@ object that will receive the results of
-- the copy command.
--
-- - @dstOffset@ is an offset into @dstBuffer@.
--
-- - @stride@ is the stride in bytes between results for individual
-- queries within @dstBuffer@. The required size of the backing memory
-- for @dstBuffer@ is determined as described above for
-- 'Graphics.Vulkan.Core10.Query.vkGetQueryPoolResults'.
--
-- - @flags@ is a bitmask of
-- 'Graphics.Vulkan.Core10.Query.VkQueryResultFlagBits' specifying how
-- and when results are returned.
--
-- = Description
-- #_description#
--
-- @vkCmdCopyQueryPoolResults@ is guaranteed to see the effect of previous
-- uses of @vkCmdResetQueryPool@ in the same queue, without any additional
-- synchronization. Thus, the results will always reflect the most recent
-- use of the query.
--
-- @flags@ has the same possible values described above for the @flags@
-- parameter of 'Graphics.Vulkan.Core10.Query.vkGetQueryPoolResults', but
-- the different style of execution causes some subtle behavioral
-- differences. Because @vkCmdCopyQueryPoolResults@ executes in order with
-- respect to other query commands, there is less ambiguity about which use
-- of a query is being requested.
--
-- If no bits are set in @flags@, results for all requested queries in the
-- available state are written as 32-bit unsigned integer values, and
-- nothing is written for queries in the unavailable state.
--
-- If @VK_QUERY_RESULT_64_BIT@ is set, the results are written as an array
-- of 64-bit unsigned integer values as described for
-- 'Graphics.Vulkan.Core10.Query.vkGetQueryPoolResults'.
--
-- If @VK_QUERY_RESULT_WAIT_BIT@ is set, the implementation will wait for
-- each query’s status to be in the available state before retrieving the
-- numerical results for that query. This is guaranteed to reflect the most
-- recent use of the query on the same queue, assuming that the query is
-- not being simultaneously used by other queues. If the query does not
-- become available in a finite amount of time (e.g. due to not issuing a
-- query since the last reset), a @VK_ERROR_DEVICE_LOST@ error /may/ occur.
--
-- Similarly, if @VK_QUERY_RESULT_WITH_AVAILABILITY_BIT@ is set and
-- @VK_QUERY_RESULT_WAIT_BIT@ is not set, the availability is guaranteed to
-- reflect the most recent use of the query on the same queue, assuming
-- that the query is not being simultaneously used by other queues. As with
-- @vkGetQueryPoolResults@, implementations /must/ guarantee that if they
-- return a non-zero availability value, then the numerical results are
-- valid.
--
-- If @VK_QUERY_RESULT_PARTIAL_BIT@ is set, @VK_QUERY_RESULT_WAIT_BIT@ is
-- not set, and the query’s status is unavailable, an intermediate result
-- value between zero and the final result value is written for that query.
--
-- @VK_QUERY_RESULT_PARTIAL_BIT@ /must/ not be used if the pool’s
-- @queryType@ is @VK_QUERY_TYPE_TIMESTAMP@.
--
-- @vkCmdCopyQueryPoolResults@ is considered to be a transfer operation,
-- and its writes to buffer memory /must/ be synchronized using
-- @VK_PIPELINE_STAGE_TRANSFER_BIT@ and @VK_ACCESS_TRANSFER_WRITE_BIT@
-- before using the results.
--
-- == Valid Usage
--
-- - @dstOffset@ /must/ be less than the size of @dstBuffer@
--
-- - @firstQuery@ /must/ be less than the number of queries in
-- @queryPool@
--
-- - The sum of @firstQuery@ and @queryCount@ /must/ be less than or
-- equal to the number of queries in @queryPool@
--
-- - If @VK_QUERY_RESULT_64_BIT@ is not set in @flags@ then @dstOffset@
-- and @stride@ /must/ be multiples of @4@
--
-- - If @VK_QUERY_RESULT_64_BIT@ is set in @flags@ then @dstOffset@ and
-- @stride@ /must/ be multiples of @8@
--
-- - @dstBuffer@ /must/ have enough storage, from @dstOffset@, to contain
-- the result of each query, as described
-- <{html_spec_relative}#queries-operation-memorylayout here>
--
-- - @dstBuffer@ /must/ have been created with
-- @VK_BUFFER_USAGE_TRANSFER_DST_BIT@ usage flag
--
-- - If @dstBuffer@ is non-sparse then it /must/ be bound completely and
-- contiguously to a single @VkDeviceMemory@ object
--
-- - If the @queryType@ used to create @queryPool@ was
-- @VK_QUERY_TYPE_TIMESTAMP@, @flags@ /must/ not contain
-- @VK_QUERY_RESULT_PARTIAL_BIT@
--
-- == Valid Usage (Implicit)
--
-- - @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
--
-- - @queryPool@ /must/ be a valid @VkQueryPool@ handle
--
-- - @dstBuffer@ /must/ be a valid @VkBuffer@ handle
--
-- - @flags@ /must/ be a valid combination of
-- 'Graphics.Vulkan.Core10.Query.VkQueryResultFlagBits' values
--
-- - @commandBuffer@ /must/ be in the
-- <#commandbuffers-lifecycle recording state>
--
-- - The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
-- support graphics, or compute operations
--
-- - This command /must/ only be called outside of a render pass instance
--
-- - Each of @commandBuffer@, @dstBuffer@, and @queryPool@ /must/ have
-- been created, allocated, or retrieved from the same @VkDevice@
--
-- == Host Synchronization
--
-- - Host access to @commandBuffer@ /must/ be externally synchronized
--
-- - Host access to the @VkCommandPool@ that @commandBuffer@ was
-- allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- > +-----------------+-----------------+-----------------+-----------------+
-- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
-- > | erLevel Command | derPass Render | ts Supported Qu | on-pipeline-sta |
-- > | Buffer Levels> | Pass Scope> | eue Types> | ges-types Pipel |
-- > | | | | ine Type> |
-- > +=================+=================+=================+=================+
-- > | Primary | Outside | Graphics | Transfer |
-- > | Secondary | | Compute | |
-- > +-----------------+-----------------+-----------------+-----------------+
--
-- = See Also
-- #_see_also#
--
-- 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer',
-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer', @VkDeviceSize@,
-- 'Graphics.Vulkan.Core10.Query.VkQueryPool',
-- 'Graphics.Vulkan.Core10.Query.VkQueryResultFlags'
foreign import ccall "vkCmdCopyQueryPoolResults" vkCmdCopyQueryPoolResults :: ("commandBuffer" ::: VkCommandBuffer) -> ("queryPool" ::: VkQueryPool) -> ("firstQuery" ::: Word32) -> ("queryCount" ::: Word32) -> ("dstBuffer" ::: VkBuffer) -> ("dstOffset" ::: VkDeviceSize) -> ("stride" ::: VkDeviceSize) -> ("flags" ::: VkQueryResultFlags) -> IO ()
-- | vkCmdPushConstants - Update the values of push constants
--
-- = Parameters
-- #_parameters#
--
-- - @commandBuffer@ is the command buffer in which the push constant
-- update will be recorded.
--
-- - @layout@ is the pipeline layout used to program the push constant
-- updates.
--
-- - @stageFlags@ is a bitmask of
-- 'Graphics.Vulkan.Core10.Pipeline.VkShaderStageFlagBits' specifying
-- the shader stages that will use the push constants in the updated
-- range.
--
-- - @offset@ is the start offset of the push constant range to update,
-- in units of bytes.
--
-- - @size@ is the size of the push constant range to update, in units of
-- bytes.
--
-- - @pValues@ is an array of @size@ bytes containing the new push
-- constant values.
--
-- = Description
-- #_description#
--
-- == Valid Usage
--
-- - For each byte in the range specified by @offset@ and @size@ and for
-- each shader stage in @stageFlags@, there /must/ be a push constant
-- range in @layout@ that includes that byte and that stage
--
-- - For each byte in the range specified by @offset@ and @size@ and for
-- each push constant range that overlaps that byte, @stageFlags@
-- /must/ include all stages in that push constant range’s
-- 'Graphics.Vulkan.Core10.PipelineLayout.VkPushConstantRange'::@stageFlags@
--
-- - @offset@ /must/ be a multiple of @4@
--
-- - @size@ /must/ be a multiple of @4@
--
-- - @offset@ /must/ be less than
-- @VkPhysicalDeviceLimits@::@maxPushConstantsSize@
--
-- - @size@ /must/ be less than or equal to
-- @VkPhysicalDeviceLimits@::@maxPushConstantsSize@ minus @offset@
--
-- == Valid Usage (Implicit)
--
-- - @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
--
-- - @layout@ /must/ be a valid @VkPipelineLayout@ handle
--
-- - @stageFlags@ /must/ be a valid combination of
-- 'Graphics.Vulkan.Core10.Pipeline.VkShaderStageFlagBits' values
--
-- - @stageFlags@ /must/ not be @0@
--
-- - @pValues@ /must/ be a valid pointer to an array of @size@ bytes
--
-- - @commandBuffer@ /must/ be in the
-- <#commandbuffers-lifecycle recording state>
--
-- - The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
-- support graphics, or compute operations
--
-- - @size@ /must/ be greater than @0@
--
-- - Both of @commandBuffer@, and @layout@ /must/ have been created,
-- allocated, or retrieved from the same @VkDevice@
--
-- == Host Synchronization
--
-- - Host access to @commandBuffer@ /must/ be externally synchronized
--
-- - Host access to the @VkCommandPool@ that @commandBuffer@ was
-- allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- > +-----------------+-----------------+-----------------+-----------------+
-- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
-- > | erLevel Command | derPass Render | ts Supported Qu | on-pipeline-sta |
-- > | Buffer Levels> | Pass Scope> | eue Types> | ges-types Pipel |
-- > | | | | ine Type> |
-- > +=================+=================+=================+=================+
-- > | Primary | Both | Graphics | |
-- > | Secondary | | Compute | |
-- > +-----------------+-----------------+-----------------+-----------------+
--
-- = See Also
-- #_see_also#
--
-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
-- 'Graphics.Vulkan.Core10.Pipeline.VkPipelineLayout',
-- 'Graphics.Vulkan.Core10.PipelineLayout.VkShaderStageFlags'
foreign import ccall "vkCmdPushConstants" vkCmdPushConstants :: ("commandBuffer" ::: VkCommandBuffer) -> ("layout" ::: VkPipelineLayout) -> ("stageFlags" ::: VkShaderStageFlags) -> ("offset" ::: Word32) -> ("size" ::: Word32) -> ("pValues" ::: Ptr ()) -> IO ()
-- | vkCmdBeginRenderPass - Begin a new render pass
--
-- = Parameters
-- #_parameters#
--
-- - @commandBuffer@ is the command buffer in which to record the
-- command.
--
-- - @pRenderPassBegin@ is a pointer to a 'VkRenderPassBeginInfo'
-- structure (defined below) which specifies the render pass to begin
-- an instance of, and the framebuffer the instance uses.
--
-- - @contents@ is a 'VkSubpassContents' value specifying how the
-- commands in the first subpass will be provided.
--
-- = Description
-- #_description#
--
-- After beginning a render pass instance, the command buffer is ready to
-- record the commands for the first subpass of that render pass.
--
-- == Valid Usage
--
-- - If any of the @initialLayout@ or @finalLayout@ member of the
-- @VkAttachmentDescription@ structures or the @layout@ member of the
-- @VkAttachmentReference@ structures specified when creating the
-- render pass specified in the @renderPass@ member of
-- @pRenderPassBegin@ is @VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL@
-- then the corresponding attachment image subresource of the
-- framebuffer specified in the @framebuffer@ member of
-- @pRenderPassBegin@ /must/ have been created with
-- @VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT@ set
--
-- - If any of the @initialLayout@ or @finalLayout@ member of the
-- @VkAttachmentDescription@ structures or the @layout@ member of the
-- @VkAttachmentReference@ structures specified when creating the
-- render pass specified in the @renderPass@ member of
-- @pRenderPassBegin@ is
-- @VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL@, or
-- @VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL@ then the
-- corresponding attachment image subresource of the framebuffer
-- specified in the @framebuffer@ member of @pRenderPassBegin@ /must/
-- have been created with @VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT@
-- set
--
-- - If any of the @initialLayout@ or @finalLayout@ member of the
-- @VkAttachmentDescription@ structures or the @layout@ member of the
-- @VkAttachmentReference@ structures specified when creating the
-- render pass specified in the @renderPass@ member of
-- @pRenderPassBegin@ is @VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL@
-- then the corresponding attachment image subresource of the
-- framebuffer specified in the @framebuffer@ member of
-- @pRenderPassBegin@ /must/ have been created with
-- @VK_IMAGE_USAGE_SAMPLED_BIT@ or
-- @VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT@ set
--
-- - If any of the @initialLayout@ or @finalLayout@ member of the
-- @VkAttachmentDescription@ structures or the @layout@ member of the
-- @VkAttachmentReference@ structures specified when creating the
-- render pass specified in the @renderPass@ member of
-- @pRenderPassBegin@ is @VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL@ then
-- the corresponding attachment image subresource of the framebuffer
-- specified in the @framebuffer@ member of @pRenderPassBegin@ /must/
-- have been created with @VK_IMAGE_USAGE_TRANSFER_SRC_BIT@ set
--
-- - If any of the @initialLayout@ or @finalLayout@ member of the
-- @VkAttachmentDescription@ structures or the @layout@ member of the
-- @VkAttachmentReference@ structures specified when creating the
-- render pass specified in the @renderPass@ member of
-- @pRenderPassBegin@ is @VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL@ then
-- the corresponding attachment image subresource of the framebuffer
-- specified in the @framebuffer@ member of @pRenderPassBegin@ /must/
-- have been created with @VK_IMAGE_USAGE_TRANSFER_DST_BIT@ set
--
-- - If any of the @initialLayout@ members of the
-- @VkAttachmentDescription@ structures specified when creating the
-- render pass specified in the @renderPass@ member of
-- @pRenderPassBegin@ is not @VK_IMAGE_LAYOUT_UNDEFINED@, then each
-- such @initialLayout@ /must/ be equal to the current layout of the
-- corresponding attachment image subresource of the framebuffer
-- specified in the @framebuffer@ member of @pRenderPassBegin@
--
-- - The @srcStageMask@ and @dstStageMask@ members of any element of the
-- @pDependencies@ member of
-- 'Graphics.Vulkan.Core10.Pass.VkRenderPassCreateInfo' used to create
-- @renderPass@ /must/ be supported by the capabilities of the queue
-- family identified by the @queueFamilyIndex@ member of the
-- 'Graphics.Vulkan.Core10.CommandPool.VkCommandPoolCreateInfo' used to
-- create the command pool which @commandBuffer@ was allocated from.
--
-- == Valid Usage (Implicit)
--
-- - @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
--
-- - @pRenderPassBegin@ /must/ be a valid pointer to a valid
-- @VkRenderPassBeginInfo@ structure
--
-- - @contents@ /must/ be a valid 'VkSubpassContents' value
--
-- - @commandBuffer@ /must/ be in the
-- <#commandbuffers-lifecycle recording state>
--
-- - The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
-- support graphics operations
--
-- - This command /must/ only be called outside of a render pass instance
--
-- - @commandBuffer@ /must/ be a primary @VkCommandBuffer@
--
-- == Host Synchronization
--
-- - Host access to @commandBuffer@ /must/ be externally synchronized
--
-- - Host access to the @VkCommandPool@ that @commandBuffer@ was
-- allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- > +-----------------+-----------------+-----------------+-----------------+
-- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
-- > | erLevel Command | derPass Render | ts Supported Qu | on-pipeline-sta |
-- > | Buffer Levels> | Pass Scope> | eue Types> | ges-types Pipel |
-- > | | | | ine Type> |
-- > +=================+=================+=================+=================+
-- > | Primary | Outside | Graphics | Graphics |
-- > +-----------------+-----------------+-----------------+-----------------+
--
-- = See Also
-- #_see_also#
--
-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer', 'VkRenderPassBeginInfo',
-- 'VkSubpassContents'
foreign import ccall "vkCmdBeginRenderPass" vkCmdBeginRenderPass :: ("commandBuffer" ::: VkCommandBuffer) -> ("pRenderPassBegin" ::: Ptr VkRenderPassBeginInfo) -> ("contents" ::: VkSubpassContents) -> IO ()
-- | vkCmdNextSubpass - Transition to the next subpass of a render pass
--
-- = Parameters
-- #_parameters#
--
-- - @commandBuffer@ is the command buffer in which to record the
-- command.
--
-- - @contents@ specifies how the commands in the next subpass will be
-- provided, in the same fashion as the corresponding parameter of
-- 'vkCmdBeginRenderPass'.
--
-- = Description
-- #_description#
--
-- The subpass index for a render pass begins at zero when
-- @vkCmdBeginRenderPass@ is recorded, and increments each time
-- @vkCmdNextSubpass@ is recorded.
--
-- Moving to the next subpass automatically performs any multisample
-- resolve operations in the subpass being ended. End-of-subpass
-- multisample resolves are treated as color attachment writes for the
-- purposes of synchronization. That is, they are considered to execute in
-- the @VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT@ pipeline stage and
-- their writes are synchronized with
-- @VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT@. Synchronization between
-- rendering within a subpass and any resolve operations at the end of the
-- subpass occurs automatically, without need for explicit dependencies or
-- pipeline barriers. However, if the resolve attachment is also used in a
-- different subpass, an explicit dependency is needed.
--
-- After transitioning to the next subpass, the application /can/ record
-- the commands for that subpass.
--
-- == Valid Usage
--
-- - The current subpass index /must/ be less than the number of
-- subpasses in the render pass minus one
--
-- == Valid Usage (Implicit)
--
-- - @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
--
-- - @contents@ /must/ be a valid 'VkSubpassContents' value
--
-- - @commandBuffer@ /must/ be in the
-- <#commandbuffers-lifecycle recording state>
--
-- - The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
-- support graphics operations
--
-- - This command /must/ only be called inside of a render pass instance
--
-- - @commandBuffer@ /must/ be a primary @VkCommandBuffer@
--
-- == Host Synchronization
--
-- - Host access to @commandBuffer@ /must/ be externally synchronized
--
-- - Host access to the @VkCommandPool@ that @commandBuffer@ was
-- allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- > +-----------------+-----------------+-----------------+-----------------+
-- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
-- > | erLevel Command | derPass Render | ts Supported Qu | on-pipeline-sta |
-- > | Buffer Levels> | Pass Scope> | eue Types> | ges-types Pipel |
-- > | | | | ine Type> |
-- > +=================+=================+=================+=================+
-- > | Primary | Inside | Graphics | Graphics |
-- > +-----------------+-----------------+-----------------+-----------------+
--
-- = See Also
-- #_see_also#
--
-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer', 'VkSubpassContents'
foreign import ccall "vkCmdNextSubpass" vkCmdNextSubpass :: ("commandBuffer" ::: VkCommandBuffer) -> ("contents" ::: VkSubpassContents) -> IO ()
-- | vkCmdEndRenderPass - End the current render pass
--
-- = Parameters
-- #_parameters#
--
-- - @commandBuffer@ is the command buffer in which to end the current
-- render pass instance.
--
-- = Description
-- #_description#
--
-- Ending a render pass instance performs any multisample resolve
-- operations on the final subpass.
--
-- == Valid Usage
--
-- - The current subpass index /must/ be equal to the number of subpasses
-- in the render pass minus one
--
-- == Valid Usage (Implicit)
--
-- - @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
--
-- - @commandBuffer@ /must/ be in the
-- <#commandbuffers-lifecycle recording state>
--
-- - The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
-- support graphics operations
--
-- - This command /must/ only be called inside of a render pass instance
--
-- - @commandBuffer@ /must/ be a primary @VkCommandBuffer@
--
-- == Host Synchronization
--
-- - Host access to @commandBuffer@ /must/ be externally synchronized
--
-- - Host access to the @VkCommandPool@ that @commandBuffer@ was
-- allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- > +-----------------+-----------------+-----------------+-----------------+
-- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
-- > | erLevel Command | derPass Render | ts Supported Qu | on-pipeline-sta |
-- > | Buffer Levels> | Pass Scope> | eue Types> | ges-types Pipel |
-- > | | | | ine Type> |
-- > +=================+=================+=================+=================+
-- > | Primary | Inside | Graphics | Graphics |
-- > +-----------------+-----------------+-----------------+-----------------+
--
-- = See Also
-- #_see_also#
--
-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer'
foreign import ccall "vkCmdEndRenderPass" vkCmdEndRenderPass :: ("commandBuffer" ::: VkCommandBuffer) -> IO ()
-- | vkCmdExecuteCommands - Execute a secondary command buffer from a primary
-- command buffer
--
-- = Parameters
-- #_parameters#
--
-- - @commandBuffer@ is a handle to a primary command buffer that the
-- secondary command buffers are executed in.
--
-- - @commandBufferCount@ is the length of the @pCommandBuffers@ array.
--
-- - @pCommandBuffers@ is an array of secondary command buffer handles,
-- which are recorded to execute in the primary command buffer in the
-- order they are listed in the array.
--
-- = Description
-- #_description#
--
-- If any element of @pCommandBuffers@ was not recorded with the
-- @VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT@ flag, and it was recorded
-- into any other primary command buffer which is currently in the
-- <{html_spec_relative}#commandbuffers-lifecycle executable or recording state>,
-- that primary command buffer becomes
-- <{html_spec_relative}#commandbuffers-lifecycle invalid>.
--
-- == Valid Usage
--
-- - @commandBuffer@ /must/ have been allocated with a @level@ of
-- @VK_COMMAND_BUFFER_LEVEL_PRIMARY@
--
-- - Each element of @pCommandBuffers@ /must/ have been allocated with a
-- @level@ of @VK_COMMAND_BUFFER_LEVEL_SECONDARY@
--
-- - Each element of @pCommandBuffers@ /must/ be in the
-- <{html_spec_relative}#commandbuffers-lifecycle pending or executable state>.
--
-- - If any element of @pCommandBuffers@ was not recorded with the
-- @VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT@ flag, and it was
-- recorded into any other primary command buffer, that primary command
-- buffer /must/ not be in the
-- <{html_spec_relative}#commandbuffers-lifecycle pending state>
--
-- - If any element of @pCommandBuffers@ was not recorded with the
-- @VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT@ flag, it /must/ not
-- be in the
-- <{html_spec_relative}#commandbuffers-lifecycle pending state>.
--
-- - If any element of @pCommandBuffers@ was not recorded with the
-- @VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT@ flag, it /must/ not
-- have already been recorded to @commandBuffer@.
--
-- - If any element of @pCommandBuffers@ was not recorded with the
-- @VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT@ flag, it /must/ not
-- appear more than once in @pCommandBuffers@.
--
-- - Each element of @pCommandBuffers@ /must/ have been allocated from a
-- @VkCommandPool@ that was created for the same queue family as the
-- @VkCommandPool@ from which @commandBuffer@ was allocated
--
-- - If @vkCmdExecuteCommands@ is being called within a render pass
-- instance, that render pass instance /must/ have been begun with the
-- @contents@ parameter of @vkCmdBeginRenderPass@ set to
-- @VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS@
--
-- - If @vkCmdExecuteCommands@ is being called within a render pass
-- instance, each element of @pCommandBuffers@ /must/ have been
-- recorded with the @VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT@
--
-- - If @vkCmdExecuteCommands@ is being called within a render pass
-- instance, each element of @pCommandBuffers@ /must/ have been
-- recorded with @VkCommandBufferInheritanceInfo@::@subpass@ set to the
-- index of the subpass which the given command buffer will be executed
-- in
--
-- - If @vkCmdExecuteCommands@ is being called within a render pass
-- instance, the render passes specified in the
-- pname::pBeginInfo::@pInheritanceInfo@::@renderPass@ members of the
-- 'Graphics.Vulkan.Core10.CommandBuffer.vkBeginCommandBuffer' commands
-- used to begin recording each element of @pCommandBuffers@ /must/ be
-- <{html_spec_relative}#renderpass-compatibility compatible> with the
-- current render pass.
--
-- - If @vkCmdExecuteCommands@ is being called within a render pass
-- instance, and any element of @pCommandBuffers@ was recorded with
-- @VkCommandBufferInheritanceInfo@::@framebuffer@ not equal to
-- 'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', that
-- @VkFramebuffer@ /must/ match the @VkFramebuffer@ used in the current
-- render pass instance
--
-- - If @vkCmdExecuteCommands@ is not being called within a render pass
-- instance, each element of @pCommandBuffers@ /must/ not have been
-- recorded with the @VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT@
--
-- - If the
-- <{html_spec_relative}#features-features-inheritedQueries inherited queries>
-- feature is not enabled, @commandBuffer@ /must/ not have any queries
-- <{html_spec_relative}#queries-operation-active active>
--
-- - If @commandBuffer@ has a @VK_QUERY_TYPE_OCCLUSION@ query
-- <{html_spec_relative}#queries-operation-active active>, then each
-- element of @pCommandBuffers@ /must/ have been recorded with
-- @VkCommandBufferInheritanceInfo@::@occlusionQueryEnable@ set to
-- @VK_TRUE@
--
-- - If @commandBuffer@ has a @VK_QUERY_TYPE_OCCLUSION@ query
-- <{html_spec_relative}#queries-operation-active active>, then each
-- element of @pCommandBuffers@ /must/ have been recorded with
-- @VkCommandBufferInheritanceInfo@::@queryFlags@ having all bits set
-- that are set for the query
--
-- - If @commandBuffer@ has a @VK_QUERY_TYPE_PIPELINE_STATISTICS@ query
-- <{html_spec_relative}#queries-operation-active active>, then each
-- element of @pCommandBuffers@ /must/ have been recorded with
-- @VkCommandBufferInheritanceInfo@::@pipelineStatistics@ having all
-- bits set that are set in the @VkQueryPool@ the query uses
--
-- - Each element of @pCommandBuffers@ /must/ not begin any query types
-- that are <{html_spec_relative}#queries-operation-active active> in
-- @commandBuffer@
--
-- == Valid Usage (Implicit)
--
-- - @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
--
-- - @pCommandBuffers@ /must/ be a valid pointer to an array of
-- @commandBufferCount@ valid @VkCommandBuffer@ handles
--
-- - @commandBuffer@ /must/ be in the
-- <#commandbuffers-lifecycle recording state>
--
-- - The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
-- support transfer, graphics, or compute operations
--
-- - @commandBuffer@ /must/ be a primary @VkCommandBuffer@
--
-- - @commandBufferCount@ /must/ be greater than @0@
--
-- - Both of @commandBuffer@, and the elements of @pCommandBuffers@
-- /must/ have been created, allocated, or retrieved from the same
-- @VkDevice@
--
-- == Host Synchronization
--
-- - Host access to @commandBuffer@ /must/ be externally synchronized
--
-- - Host access to the @VkCommandPool@ that @commandBuffer@ was
-- allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- > +-----------------+-----------------+-----------------+-----------------+
-- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
-- > | erLevel Command | derPass Render | ts Supported Qu | on-pipeline-sta |
-- > | Buffer Levels> | Pass Scope> | eue Types> | ges-types Pipel |
-- > | | | | ine Type> |
-- > +=================+=================+=================+=================+
-- > | Primary | Both | Transfer | |
-- > | | | Graphics | |
-- > | | | Compute | |
-- > +-----------------+-----------------+-----------------+-----------------+
--
-- = See Also
-- #_see_also#
--
-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer'
foreign import ccall "vkCmdExecuteCommands" vkCmdExecuteCommands :: ("commandBuffer" ::: VkCommandBuffer) -> ("commandBufferCount" ::: Word32) -> ("pCommandBuffers" ::: Ptr VkCommandBuffer) -> IO ()
-- | VkClearRect - Structure specifying a clear rectangle
--
-- = Description
-- #_description#
--
-- The layers [@baseArrayLayer@, @baseArrayLayer@ + @layerCount@) counting
-- from the base layer of the attachment image view are cleared.
--
-- = See Also
-- #_see_also#
--
-- 'Graphics.Vulkan.Core10.Pipeline.VkRect2D', 'vkCmdClearAttachments'
data VkClearRect = VkClearRect
{ -- No documentation found for Nested "VkClearRect" "vkRect"
vkRect :: VkRect2D
, -- No documentation found for Nested "VkClearRect" "vkBaseArrayLayer"
vkBaseArrayLayer :: Word32
, -- No documentation found for Nested "VkClearRect" "vkLayerCount"
vkLayerCount :: Word32
}
deriving (Eq, Show)
instance Storable VkClearRect where
sizeOf ~_ = 24
alignment ~_ = 4
peek ptr = VkClearRect <$> peek (ptr `plusPtr` 0)
<*> peek (ptr `plusPtr` 16)
<*> peek (ptr `plusPtr` 20)
poke ptr poked = poke (ptr `plusPtr` 0) (vkRect (poked :: VkClearRect))
*> poke (ptr `plusPtr` 16) (vkBaseArrayLayer (poked :: VkClearRect))
*> poke (ptr `plusPtr` 20) (vkLayerCount (poked :: VkClearRect))
-- | VkImageSubresourceLayers - Structure specifying a image subresource
-- layers
--
-- = Description
-- #_description#
--
-- == Valid Usage
--
-- - If @aspectMask@ contains @VK_IMAGE_ASPECT_COLOR_BIT@, it /must/ not
-- contain either of @VK_IMAGE_ASPECT_DEPTH_BIT@ or
-- @VK_IMAGE_ASPECT_STENCIL_BIT@
--
-- - @aspectMask@ /must/ not contain @VK_IMAGE_ASPECT_METADATA_BIT@
--
-- - @layerCount@ /must/ be greater than 0
--
-- == Valid Usage (Implicit)
--
-- - @aspectMask@ /must/ be a valid combination of
-- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkImageAspectFlagBits'
-- values
--
-- - @aspectMask@ /must/ not be @0@
--
-- = See Also
-- #_see_also#
--
-- 'VkBufferImageCopy',
-- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkImageAspectFlags',
-- 'VkImageBlit', 'VkImageCopy', 'VkImageResolve'
data VkImageSubresourceLayers = VkImageSubresourceLayers
{ -- No documentation found for Nested "VkImageSubresourceLayers" "vkAspectMask"
vkAspectMask :: VkImageAspectFlags
, -- No documentation found for Nested "VkImageSubresourceLayers" "vkMipLevel"
vkMipLevel :: Word32
, -- No documentation found for Nested "VkImageSubresourceLayers" "vkBaseArrayLayer"
vkBaseArrayLayer :: Word32
, -- No documentation found for Nested "VkImageSubresourceLayers" "vkLayerCount"
vkLayerCount :: Word32
}
deriving (Eq, Show)
instance Storable VkImageSubresourceLayers where
sizeOf ~_ = 16
alignment ~_ = 4
peek ptr = VkImageSubresourceLayers <$> peek (ptr `plusPtr` 0)
<*> peek (ptr `plusPtr` 4)
<*> peek (ptr `plusPtr` 8)
<*> peek (ptr `plusPtr` 12)
poke ptr poked = poke (ptr `plusPtr` 0) (vkAspectMask (poked :: VkImageSubresourceLayers))
*> poke (ptr `plusPtr` 4) (vkMipLevel (poked :: VkImageSubresourceLayers))
*> poke (ptr `plusPtr` 8) (vkBaseArrayLayer (poked :: VkImageSubresourceLayers))
*> poke (ptr `plusPtr` 12) (vkLayerCount (poked :: VkImageSubresourceLayers))
-- | VkMemoryBarrier - Structure specifying a global memory barrier
--
-- = Description
-- #_description#
--
-- The first
-- <{html_spec_relative}#synchronization-dependencies-access-scopes access scope>
-- is limited to access types in the
-- <{html_spec_relative}#synchronization-access-masks source access mask>
-- specified by @srcAccessMask@.
--
-- The second
-- <{html_spec_relative}#synchronization-dependencies-access-scopes access scope>
-- is limited to access types in the
-- <{html_spec_relative}#synchronization-access-masks destination access mask>
-- specified by @dstAccessMask@.
--
-- == Valid Usage (Implicit)
--
-- - @sType@ /must/ be @VK_STRUCTURE_TYPE_MEMORY_BARRIER@
--
-- - @pNext@ /must/ be @NULL@
--
-- - @srcAccessMask@ /must/ be a valid combination of
-- 'Graphics.Vulkan.Core10.Pass.VkAccessFlagBits' values
--
-- - @dstAccessMask@ /must/ be a valid combination of
-- 'Graphics.Vulkan.Core10.Pass.VkAccessFlagBits' values
--
-- = See Also
-- #_see_also#
--
-- 'Graphics.Vulkan.Core10.Pass.VkAccessFlags',
-- 'Graphics.Vulkan.Core10.Core.VkStructureType', 'vkCmdPipelineBarrier',
-- 'vkCmdWaitEvents'
data VkMemoryBarrier = VkMemoryBarrier
{ -- No documentation found for Nested "VkMemoryBarrier" "vkSType"
vkSType :: VkStructureType
, -- No documentation found for Nested "VkMemoryBarrier" "vkPNext"
vkPNext :: Ptr ()
, -- No documentation found for Nested "VkMemoryBarrier" "vkSrcAccessMask"
vkSrcAccessMask :: VkAccessFlags
, -- No documentation found for Nested "VkMemoryBarrier" "vkDstAccessMask"
vkDstAccessMask :: VkAccessFlags
}
deriving (Eq, Show)
instance Storable VkMemoryBarrier where
sizeOf ~_ = 24
alignment ~_ = 8
peek ptr = VkMemoryBarrier <$> 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 :: VkMemoryBarrier))
*> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkMemoryBarrier))
*> poke (ptr `plusPtr` 16) (vkSrcAccessMask (poked :: VkMemoryBarrier))
*> poke (ptr `plusPtr` 20) (vkDstAccessMask (poked :: VkMemoryBarrier))
-- | VkBufferMemoryBarrier - Structure specifying a buffer memory barrier
--
-- = Description
-- #_description#
--
-- The first
-- <{html_spec_relative}#synchronization-dependencies-access-scopes access scope>
-- is limited to access to memory through the specified buffer range, via
-- access types in the
-- <{html_spec_relative}#synchronization-access-masks source access mask>
-- specified by @srcAccessMask@. If @srcAccessMask@ includes
-- @VK_ACCESS_HOST_WRITE_BIT@, memory writes performed by that access type
-- are also made visible, as that access type is not performed through a
-- resource.
--
-- The second
-- <{html_spec_relative}#synchronization-dependencies-access-scopes access scope>
-- is limited to access to memory through the specified buffer range, via
-- access types in the
-- <{html_spec_relative}#synchronization-access-masks destination access mask>.
-- specified by @dstAccessMask@. If @dstAccessMask@ includes
-- @VK_ACCESS_HOST_WRITE_BIT@ or @VK_ACCESS_HOST_READ_BIT@, available
-- memory writes are also made visible to accesses of those types, as those
-- access types are not performed through a resource.
--
-- If @srcQueueFamilyIndex@ is not equal to @dstQueueFamilyIndex@, and
-- @srcQueueFamilyIndex@ is equal to the current queue family, then the
-- memory barrier defines a
-- <{html_spec_relative}#synchronization-queue-transfers-release queue family release operation>
-- for the specified buffer range, and the second access scope includes no
-- access, as if @dstAccessMask@ was @0@.
--
-- If @dstQueueFamilyIndex@ is not equal to @srcQueueFamilyIndex@, and
-- @dstQueueFamilyIndex@ is equal to the current queue family, then the
-- memory barrier defines a
-- <{html_spec_relative}#synchronization-queue-transfers-acquire queue family acquire operation>
-- for the specified buffer range, and the first access scope includes no
-- access, as if @srcAccessMask@ was @0@.
--
-- == Valid Usage
--
-- - @offset@ /must/ be less than the size of @buffer@
--
-- - If @size@ is not equal to @VK_WHOLE_SIZE@, @size@ /must/ be greater
-- than @0@
--
-- - If @size@ is not equal to @VK_WHOLE_SIZE@, @size@ /must/ be less
-- than or equal to than the size of @buffer@ minus @offset@
--
-- - If @buffer@ was created with a sharing mode of
-- @VK_SHARING_MODE_CONCURRENT@, @srcQueueFamilyIndex@ and
-- @dstQueueFamilyIndex@ /must/ both be @VK_QUEUE_FAMILY_IGNORED@
--
-- - If @buffer@ was created with a sharing mode of
-- @VK_SHARING_MODE_EXCLUSIVE@, @srcQueueFamilyIndex@ and
-- @dstQueueFamilyIndex@ /must/ either both be
-- @VK_QUEUE_FAMILY_IGNORED@, or both be a valid queue family (see
-- <{html_spec_relative}#devsandqueues-queueprops {html_spec_relative}#devsandqueues-queueprops>)
--
-- - If @buffer@ was created with a sharing mode of
-- @VK_SHARING_MODE_EXCLUSIVE@, and @srcQueueFamilyIndex@ and
-- @dstQueueFamilyIndex@ are not @VK_QUEUE_FAMILY_IGNORED@, at least
-- one of them /must/ be the same as the family of the queue that will
-- execute this barrier
--
-- == Valid Usage (Implicit)
--
-- - @sType@ /must/ be @VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER@
--
-- - @pNext@ /must/ be @NULL@
--
-- - @srcAccessMask@ /must/ be a valid combination of
-- 'Graphics.Vulkan.Core10.Pass.VkAccessFlagBits' values
--
-- - @dstAccessMask@ /must/ be a valid combination of
-- 'Graphics.Vulkan.Core10.Pass.VkAccessFlagBits' values
--
-- - @buffer@ /must/ be a valid @VkBuffer@ handle
--
-- = See Also
-- #_see_also#
--
-- 'Graphics.Vulkan.Core10.Pass.VkAccessFlags',
-- 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer', @VkDeviceSize@,
-- 'Graphics.Vulkan.Core10.Core.VkStructureType', 'vkCmdPipelineBarrier',
-- 'vkCmdWaitEvents'
data VkBufferMemoryBarrier = VkBufferMemoryBarrier
{ -- No documentation found for Nested "VkBufferMemoryBarrier" "vkSType"
vkSType :: VkStructureType
, -- No documentation found for Nested "VkBufferMemoryBarrier" "vkPNext"
vkPNext :: Ptr ()
, -- No documentation found for Nested "VkBufferMemoryBarrier" "vkSrcAccessMask"
vkSrcAccessMask :: VkAccessFlags
, -- No documentation found for Nested "VkBufferMemoryBarrier" "vkDstAccessMask"
vkDstAccessMask :: VkAccessFlags
, -- No documentation found for Nested "VkBufferMemoryBarrier" "vkSrcQueueFamilyIndex"
vkSrcQueueFamilyIndex :: Word32
, -- No documentation found for Nested "VkBufferMemoryBarrier" "vkDstQueueFamilyIndex"
vkDstQueueFamilyIndex :: Word32
, -- No documentation found for Nested "VkBufferMemoryBarrier" "vkBuffer"
vkBuffer :: VkBuffer
, -- No documentation found for Nested "VkBufferMemoryBarrier" "vkOffset"
vkOffset :: VkDeviceSize
, -- No documentation found for Nested "VkBufferMemoryBarrier" "vkSize"
vkSize :: VkDeviceSize
}
deriving (Eq, Show)
instance Storable VkBufferMemoryBarrier where
sizeOf ~_ = 56
alignment ~_ = 8
peek ptr = VkBufferMemoryBarrier <$> 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` 48)
poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkBufferMemoryBarrier))
*> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkBufferMemoryBarrier))
*> poke (ptr `plusPtr` 16) (vkSrcAccessMask (poked :: VkBufferMemoryBarrier))
*> poke (ptr `plusPtr` 20) (vkDstAccessMask (poked :: VkBufferMemoryBarrier))
*> poke (ptr `plusPtr` 24) (vkSrcQueueFamilyIndex (poked :: VkBufferMemoryBarrier))
*> poke (ptr `plusPtr` 28) (vkDstQueueFamilyIndex (poked :: VkBufferMemoryBarrier))
*> poke (ptr `plusPtr` 32) (vkBuffer (poked :: VkBufferMemoryBarrier))
*> poke (ptr `plusPtr` 40) (vkOffset (poked :: VkBufferMemoryBarrier))
*> poke (ptr `plusPtr` 48) (vkSize (poked :: VkBufferMemoryBarrier))
-- | VkImageMemoryBarrier - Structure specifying the parameters of an image
-- memory barrier
--
-- = Description
-- #_description#
--
-- The first
-- <{html_spec_relative}#synchronization-dependencies-access-scopes access scope>
-- is limited to access to memory through the specified image subresource
-- range, via access types in the
-- <{html_spec_relative}#synchronization-access-masks source access mask>
-- specified by @srcAccessMask@. If @srcAccessMask@ includes
-- @VK_ACCESS_HOST_WRITE_BIT@, memory writes performed by that access type
-- are also made visible, as that access type is not performed through a
-- resource.
--
-- The second
-- <{html_spec_relative}#synchronization-dependencies-access-scopes access scope>
-- is limited to access to memory through the specified image subresource
-- range, via access types in the
-- <{html_spec_relative}#synchronization-access-masks destination access mask>
-- specified by @dstAccessMask@. If @dstAccessMask@ includes
-- @VK_ACCESS_HOST_WRITE_BIT@ or @VK_ACCESS_HOST_READ_BIT@, available
-- memory writes are also made visible to accesses of those types, as those
-- access types are not performed through a resource.
--
-- If @srcQueueFamilyIndex@ is not equal to @dstQueueFamilyIndex@, and
-- @srcQueueFamilyIndex@ is equal to the current queue family, then the
-- memory barrier defines a
-- <{html_spec_relative}#synchronization-queue-transfers-release queue family release operation>
-- for the specified image subresource range, and the second access scope
-- includes no access, as if @dstAccessMask@ was @0@.
--
-- If @dstQueueFamilyIndex@ is not equal to @srcQueueFamilyIndex@, and
-- @dstQueueFamilyIndex@ is equal to the current queue family, then the
-- memory barrier defines a
-- <{html_spec_relative}#synchronization-queue-transfers-acquire queue family acquire operation>
-- for the specified image subresource range, and the first access scope
-- includes no access, as if @srcAccessMask@ was @0@.
--
-- If @oldLayout@ is not equal to @newLayout@, then the memory barrier
-- defines an
-- <{html_spec_relative}#synchronization-image-layout-transitions image layout transition>
-- for the specified image subresource range.
--
-- Layout transitions that are performed via image memory barriers execute
-- in their entirety in
-- <{html_spec_relative}#synchronization-submission-order submission order>,
-- relative to other image layout transitions submitted to the same queue,
-- including those performed by
-- <{html_spec_relative}#renderpass render passes>. In effect there is an
-- implicit execution dependency from each such layout transition to all
-- layout transitions previously submitted to the same queue.
--
-- == Valid Usage
--
-- - @oldLayout@ /must/ be @VK_IMAGE_LAYOUT_UNDEFINED@ or the current
-- layout of the image subresources affected by the barrier
--
-- - @newLayout@ /must/ not be @VK_IMAGE_LAYOUT_UNDEFINED@ or
-- @VK_IMAGE_LAYOUT_PREINITIALIZED@
--
-- - If @image@ was created with a sharing mode of
-- @VK_SHARING_MODE_CONCURRENT@, @srcQueueFamilyIndex@ and
-- @dstQueueFamilyIndex@ /must/ both be @VK_QUEUE_FAMILY_IGNORED@
--
-- - If @image@ was created with a sharing mode of
-- @VK_SHARING_MODE_EXCLUSIVE@, @srcQueueFamilyIndex@ and
-- @dstQueueFamilyIndex@ /must/ either both be
-- @VK_QUEUE_FAMILY_IGNORED@, or both be a valid queue family (see
-- <{html_spec_relative}#devsandqueues-queueprops {html_spec_relative}#devsandqueues-queueprops>).
--
-- - If @image@ was created with a sharing mode of
-- @VK_SHARING_MODE_EXCLUSIVE@, and @srcQueueFamilyIndex@ and
-- @dstQueueFamilyIndex@ are not @VK_QUEUE_FAMILY_IGNORED@, at least
-- one of them /must/ be the same as the family of the queue that will
-- execute this barrier
--
-- - @subresourceRange.baseMipLevel@ /must/ be less than the @mipLevels@
-- specified in 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when
-- @image@ was created
--
-- - If @subresourceRange.levelCount@ is not @VK_REMAINING_MIP_LEVELS@,
-- @subresourceRange.baseMipLevel@ + @subresourceRange.levelCount@
-- /must/ be less than or equal to the @mipLevels@ specified in
-- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @image@ was
-- created
--
-- - @subresourceRange.baseArrayLayer@ /must/ be less than the
-- @arrayLayers@ specified in
-- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @image@ was
-- created
--
-- - If @subresourceRange.layerCount@ is not @VK_REMAINING_ARRAY_LAYERS@,
-- @subresourceRange.baseArrayLayer@ + @subresourceRange.layerCount@
-- /must/ be less than or equal to the @arrayLayers@ specified in
-- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @image@ was
-- created
--
-- - If @image@ has a depth\/stencil format with both depth and stencil
-- components, then the @aspectMask@ member of @subresourceRange@
-- /must/ include both @VK_IMAGE_ASPECT_DEPTH_BIT@ and
-- @VK_IMAGE_ASPECT_STENCIL_BIT@
--
-- - If either @oldLayout@ or @newLayout@ is
-- @VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL@ then @image@ /must/ have
-- been created with @VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT@ set
--
-- - If either @oldLayout@ or @newLayout@ is
-- @VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL@ then @image@
-- /must/ have been created with
-- @VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT@ set
--
-- - If either @oldLayout@ or @newLayout@ is
-- @VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL@ then @image@
-- /must/ have been created with
-- @VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT@ set
--
-- - If either @oldLayout@ or @newLayout@ is
-- @VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL@ then @image@ /must/ have
-- been created with @VK_IMAGE_USAGE_SAMPLED_BIT@ or
-- @VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT@ set
--
-- - If either @oldLayout@ or @newLayout@ is
-- @VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL@ then @image@ /must/ have been
-- created with @VK_IMAGE_USAGE_TRANSFER_SRC_BIT@ set
--
-- - If either @oldLayout@ or @newLayout@ is
-- @VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL@ then @image@ /must/ have been
-- created with @VK_IMAGE_USAGE_TRANSFER_DST_BIT@ set
--
-- == Valid Usage (Implicit)
--
-- - @sType@ /must/ be @VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER@
--
-- - @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
-- 'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.VkSampleLocationsInfoEXT'
--
-- - @srcAccessMask@ /must/ be a valid combination of
-- 'Graphics.Vulkan.Core10.Pass.VkAccessFlagBits' values
--
-- - @dstAccessMask@ /must/ be a valid combination of
-- 'Graphics.Vulkan.Core10.Pass.VkAccessFlagBits' values
--
-- - @oldLayout@ /must/ be a valid
-- 'Graphics.Vulkan.Core10.Image.VkImageLayout' value
--
-- - @newLayout@ /must/ be a valid
-- 'Graphics.Vulkan.Core10.Image.VkImageLayout' value
--
-- - @image@ /must/ be a valid @VkImage@ handle
--
-- - @subresourceRange@ /must/ be a valid @VkImageSubresourceRange@
-- structure
--
-- = See Also
-- #_see_also#
--
-- 'Graphics.Vulkan.Core10.Pass.VkAccessFlags',
-- 'Graphics.Vulkan.Core10.MemoryManagement.VkImage',
-- 'Graphics.Vulkan.Core10.Image.VkImageLayout',
-- 'Graphics.Vulkan.Core10.ImageView.VkImageSubresourceRange',
-- 'Graphics.Vulkan.Core10.Core.VkStructureType', 'vkCmdPipelineBarrier',
-- 'vkCmdWaitEvents'
data VkImageMemoryBarrier = VkImageMemoryBarrier
{ -- No documentation found for Nested "VkImageMemoryBarrier" "vkSType"
vkSType :: VkStructureType
, -- No documentation found for Nested "VkImageMemoryBarrier" "vkPNext"
vkPNext :: Ptr ()
, -- No documentation found for Nested "VkImageMemoryBarrier" "vkSrcAccessMask"
vkSrcAccessMask :: VkAccessFlags
, -- No documentation found for Nested "VkImageMemoryBarrier" "vkDstAccessMask"
vkDstAccessMask :: VkAccessFlags
, -- No documentation found for Nested "VkImageMemoryBarrier" "vkOldLayout"
vkOldLayout :: VkImageLayout
, -- No documentation found for Nested "VkImageMemoryBarrier" "vkNewLayout"
vkNewLayout :: VkImageLayout
, -- No documentation found for Nested "VkImageMemoryBarrier" "vkSrcQueueFamilyIndex"
vkSrcQueueFamilyIndex :: Word32
, -- No documentation found for Nested "VkImageMemoryBarrier" "vkDstQueueFamilyIndex"
vkDstQueueFamilyIndex :: Word32
, -- No documentation found for Nested "VkImageMemoryBarrier" "vkImage"
vkImage :: VkImage
, -- No documentation found for Nested "VkImageMemoryBarrier" "vkSubresourceRange"
vkSubresourceRange :: VkImageSubresourceRange
}
deriving (Eq, Show)
instance Storable VkImageMemoryBarrier where
sizeOf ~_ = 72
alignment ~_ = 8
peek ptr = VkImageMemoryBarrier <$> 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` 48)
poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkImageMemoryBarrier))
*> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkImageMemoryBarrier))
*> poke (ptr `plusPtr` 16) (vkSrcAccessMask (poked :: VkImageMemoryBarrier))
*> poke (ptr `plusPtr` 20) (vkDstAccessMask (poked :: VkImageMemoryBarrier))
*> poke (ptr `plusPtr` 24) (vkOldLayout (poked :: VkImageMemoryBarrier))
*> poke (ptr `plusPtr` 28) (vkNewLayout (poked :: VkImageMemoryBarrier))
*> poke (ptr `plusPtr` 32) (vkSrcQueueFamilyIndex (poked :: VkImageMemoryBarrier))
*> poke (ptr `plusPtr` 36) (vkDstQueueFamilyIndex (poked :: VkImageMemoryBarrier))
*> poke (ptr `plusPtr` 40) (vkImage (poked :: VkImageMemoryBarrier))
*> poke (ptr `plusPtr` 48) (vkSubresourceRange (poked :: VkImageMemoryBarrier))
-- | VkBufferCopy - Structure specifying a buffer copy operation
--
-- = Description
-- #_description#
--
-- = See Also
-- #_see_also#
--
-- @VkDeviceSize@, 'vkCmdCopyBuffer'
data VkBufferCopy = VkBufferCopy
{ -- No documentation found for Nested "VkBufferCopy" "vkSrcOffset"
vkSrcOffset :: VkDeviceSize
, -- No documentation found for Nested "VkBufferCopy" "vkDstOffset"
vkDstOffset :: VkDeviceSize
, -- No documentation found for Nested "VkBufferCopy" "vkSize"
vkSize :: VkDeviceSize
}
deriving (Eq, Show)
instance Storable VkBufferCopy where
sizeOf ~_ = 24
alignment ~_ = 8
peek ptr = VkBufferCopy <$> peek (ptr `plusPtr` 0)
<*> peek (ptr `plusPtr` 8)
<*> peek (ptr `plusPtr` 16)
poke ptr poked = poke (ptr `plusPtr` 0) (vkSrcOffset (poked :: VkBufferCopy))
*> poke (ptr `plusPtr` 8) (vkDstOffset (poked :: VkBufferCopy))
*> poke (ptr `plusPtr` 16) (vkSize (poked :: VkBufferCopy))
-- | VkImageCopy - Structure specifying an image copy operation
--
-- = Description
-- #_description#
--
-- Copies are done layer by layer starting with @baseArrayLayer@ member of
-- @srcSubresource@ for the source and @dstSubresource@ for the
-- destination. @layerCount@ layers are copied to the destination image.
--
-- == Valid Usage
--
-- - The @aspectMask@ member of @srcSubresource@ and @dstSubresource@
-- /must/ match
--
-- - The @layerCount@ member of @srcSubresource@ and @dstSubresource@
-- /must/ match
--
-- - If either of the calling command’s @srcImage@ or @dstImage@
-- parameters are of
-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkImageType'
-- @VK_IMAGE_TYPE_3D@, the @baseArrayLayer@ and @layerCount@ members of
-- both @srcSubresource@ and @dstSubresource@ /must/ be @0@ and @1@,
-- respectively
--
-- - The @aspectMask@ member of @srcSubresource@ /must/ specify aspects
-- present in the calling command’s @srcImage@
--
-- - The @aspectMask@ member of @dstSubresource@ /must/ specify aspects
-- present in the calling command’s @dstImage@
--
-- - @srcOffset.x@ and (@extent.width@ + @srcOffset.x@) /must/ both be
-- greater than or equal to @0@ and less than or equal to the source
-- image subresource width
--
-- - @srcOffset.y@ and (@extent.height@ + @srcOffset.y@) /must/ both be
-- greater than or equal to @0@ and less than or equal to the source
-- image subresource height
--
-- - If the calling command’s @srcImage@ is of type @VK_IMAGE_TYPE_1D@,
-- then @srcOffset.y@ /must/ be @0@ and @extent.height@ /must/ be @1@.
--
-- - @srcOffset.z@ and (@extent.depth@ + @srcOffset.z@) /must/ both be
-- greater than or equal to @0@ and less than or equal to the source
-- image subresource depth
--
-- - If the calling command’s @srcImage@ is of type @VK_IMAGE_TYPE_1D@,
-- then @srcOffset.z@ /must/ be @0@ and @extent.depth@ /must/ be @1@.
--
-- - If the calling command’s @dstImage@ is of type @VK_IMAGE_TYPE_1D@,
-- then @dstOffset.z@ /must/ be @0@ and @extent.depth@ /must/ be @1@.
--
-- - If the calling command’s @srcImage@ is of type @VK_IMAGE_TYPE_2D@,
-- then @srcOffset.z@ /must/ be @0@.
--
-- - If the calling command’s @dstImage@ is of type @VK_IMAGE_TYPE_2D@,
-- then @dstOffset.z@ /must/ be @0@.
--
-- - If the calling command’s @srcImage@ or @dstImage@ is of type
-- @VK_IMAGE_TYPE_2D@, then @extent.depth@ /must/ be @1@.
--
-- - @dstOffset.x@ and (@extent.width@ + @dstOffset.x@) /must/ both be
-- greater than or equal to @0@ and less than or equal to the
-- destination image subresource width
--
-- - @dstOffset.y@ and (@extent.height@ + @dstOffset.y@) /must/ both be
-- greater than or equal to @0@ and less than or equal to the
-- destination image subresource height
--
-- - If the calling command’s @dstImage@ is of type @VK_IMAGE_TYPE_1D@,
-- then @dstOffset.y@ /must/ be @0@ and @extent.height@ /must/ be @1@.
--
-- - @dstOffset.z@ and (@extent.depth@ + @dstOffset.z@) /must/ both be
-- greater than or equal to @0@ and less than or equal to the
-- destination image subresource depth
--
-- - If the calling command’s @srcImage@ is a compressed image, all
-- members of @srcOffset@ /must/ be a multiple of the corresponding
-- dimensions of the compressed texel block
--
-- - If the calling command’s @srcImage@ is a compressed image,
-- @extent.width@ /must/ be a multiple of the compressed texel block
-- width or (@extent.width@ + @srcOffset.x@) /must/ equal the source
-- image subresource width
--
-- - If the calling command’s @srcImage@ is a compressed image,
-- @extent.height@ /must/ be a multiple of the compressed texel block
-- height or (@extent.height@ + @srcOffset.y@) /must/ equal the source
-- image subresource height
--
-- - If the calling command’s @srcImage@ is a compressed image,
-- @extent.depth@ /must/ be a multiple of the compressed texel block
-- depth or (@extent.depth@ + @srcOffset.z@) /must/ equal the source
-- image subresource depth
--
-- - If the calling command’s @dstImage@ is a compressed format image,
-- all members of @dstOffset@ /must/ be a multiple of the corresponding
-- dimensions of the compressed texel block
--
-- - If the calling command’s @dstImage@ is a compressed format image,
-- @extent.width@ /must/ be a multiple of the compressed texel block
-- width or (@extent.width@ + @dstOffset.x@) /must/ equal the
-- destination image subresource width
--
-- - If the calling command’s @dstImage@ is a compressed format image,
-- @extent.height@ /must/ be a multiple of the compressed texel block
-- height or (@extent.height@ + @dstOffset.y@) /must/ equal the
-- destination image subresource height
--
-- - If the calling command’s @dstImage@ is a compressed format image,
-- @extent.depth@ /must/ be a multiple of the compressed texel block
-- depth or (@extent.depth@ + @dstOffset.z@) /must/ equal the
-- destination image subresource depth
--
-- == Valid Usage (Implicit)
--
-- - @srcSubresource@ /must/ be a valid @VkImageSubresourceLayers@
-- structure
--
-- - @dstSubresource@ /must/ be a valid @VkImageSubresourceLayers@
-- structure
--
-- = See Also
-- #_see_also#
--
-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkExtent3D',
-- 'VkImageSubresourceLayers',
-- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkOffset3D',
-- 'vkCmdCopyImage'
data VkImageCopy = VkImageCopy
{ -- No documentation found for Nested "VkImageCopy" "vkSrcSubresource"
vkSrcSubresource :: VkImageSubresourceLayers
, -- No documentation found for Nested "VkImageCopy" "vkSrcOffset"
vkSrcOffset :: VkOffset3D
, -- No documentation found for Nested "VkImageCopy" "vkDstSubresource"
vkDstSubresource :: VkImageSubresourceLayers
, -- No documentation found for Nested "VkImageCopy" "vkDstOffset"
vkDstOffset :: VkOffset3D
, -- No documentation found for Nested "VkImageCopy" "vkExtent"
vkExtent :: VkExtent3D
}
deriving (Eq, Show)
instance Storable VkImageCopy where
sizeOf ~_ = 68
alignment ~_ = 4
peek ptr = VkImageCopy <$> peek (ptr `plusPtr` 0)
<*> peek (ptr `plusPtr` 16)
<*> peek (ptr `plusPtr` 28)
<*> peek (ptr `plusPtr` 44)
<*> peek (ptr `plusPtr` 56)
poke ptr poked = poke (ptr `plusPtr` 0) (vkSrcSubresource (poked :: VkImageCopy))
*> poke (ptr `plusPtr` 16) (vkSrcOffset (poked :: VkImageCopy))
*> poke (ptr `plusPtr` 28) (vkDstSubresource (poked :: VkImageCopy))
*> poke (ptr `plusPtr` 44) (vkDstOffset (poked :: VkImageCopy))
*> poke (ptr `plusPtr` 56) (vkExtent (poked :: VkImageCopy))
-- | VkImageBlit - Structure specifying an image blit operation
--
-- = Description
-- #_description#
--
-- For each element of the @pRegions@ array, a blit operation is performed
-- the specified source and destination regions.
--
-- == Valid Usage
--
-- - The @aspectMask@ member of @srcSubresource@ and @dstSubresource@
-- /must/ match
--
-- - The @layerCount@ member of @srcSubresource@ and @dstSubresource@
-- /must/ match
--
-- - If either of the calling command’s @srcImage@ or @dstImage@
-- parameters are of
-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkImageType'
-- @VK_IMAGE_TYPE_3D@, the @baseArrayLayer@ and @layerCount@ members of
-- both @srcSubresource@ and @dstSubresource@ /must/ be @0@ and @1@,
-- respectively
--
-- - The @aspectMask@ member of @srcSubresource@ /must/ specify aspects
-- present in the calling command’s @srcImage@
--
-- - The @aspectMask@ member of @dstSubresource@ /must/ specify aspects
-- present in the calling command’s @dstImage@
--
-- - @srcOffset@[0].@x@ and @srcOffset@[1].@x@ /must/ both be greater
-- than or equal to @0@ and less than or equal to the source image
-- subresource width
--
-- - @srcOffset@[0].@y@ and @srcOffset@[1].@y@ /must/ both be greater
-- than or equal to @0@ and less than or equal to the source image
-- subresource height
--
-- - If the calling command’s @srcImage@ is of type @VK_IMAGE_TYPE_1D@,
-- then @srcOffset@[0].y /must/ be @0@ and @srcOffset@[1].y /must/ be
-- @1@.
--
-- - @srcOffset@[0].@z@ and @srcOffset@[1].@z@ /must/ both be greater
-- than or equal to @0@ and less than or equal to the source image
-- subresource depth
--
-- - If the calling command’s @srcImage@ is of type @VK_IMAGE_TYPE_1D@ or
-- @VK_IMAGE_TYPE_2D@, then @srcOffset@[0].z /must/ be @0@ and
-- @srcOffset@[1].z /must/ be @1@.
--
-- - @dstOffset@[0].@x@ and @dstOffset@[1].@x@ /must/ both be greater
-- than or equal to @0@ and less than or equal to the destination image
-- subresource width
--
-- - @dstOffset@[0].@y@ and @dstOffset@[1].@y@ /must/ both be greater
-- than or equal to @0@ and less than or equal to the destination image
-- subresource height
--
-- - If the calling command’s @dstImage@ is of type @VK_IMAGE_TYPE_1D@,
-- then @dstOffset@[0].y /must/ be @0@ and @dstOffset@[1].y /must/ be
-- @1@.
--
-- - @dstOffset@[0].@z@ and @dstOffset@[1].@z@ /must/ both be greater
-- than or equal to @0@ and less than or equal to the destination image
-- subresource depth
--
-- - If the calling command’s @dstImage@ is of type @VK_IMAGE_TYPE_1D@ or
-- @VK_IMAGE_TYPE_2D@, then @dstOffset@[0].z /must/ be @0@ and
-- @dstOffset@[1].z /must/ be @1@.
--
-- == Valid Usage (Implicit)
--
-- - @srcSubresource@ /must/ be a valid @VkImageSubresourceLayers@
-- structure
--
-- - @dstSubresource@ /must/ be a valid @VkImageSubresourceLayers@
-- structure
--
-- = See Also
-- #_see_also#
--
-- 'VkImageSubresourceLayers',
-- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkOffset3D',
-- 'vkCmdBlitImage'
data VkImageBlit = VkImageBlit
{ -- No documentation found for Nested "VkImageBlit" "vkSrcSubresource"
vkSrcSubresource :: VkImageSubresourceLayers
, -- No documentation found for Nested "VkImageBlit" "vkSrcOffsets"
vkSrcOffsets :: Vector 2 VkOffset3D
, -- No documentation found for Nested "VkImageBlit" "vkDstSubresource"
vkDstSubresource :: VkImageSubresourceLayers
, -- No documentation found for Nested "VkImageBlit" "vkDstOffsets"
vkDstOffsets :: Vector 2 VkOffset3D
}
deriving (Eq, Show)
instance Storable VkImageBlit where
sizeOf ~_ = 80
alignment ~_ = 4
peek ptr = VkImageBlit <$> peek (ptr `plusPtr` 0)
<*> peek (ptr `plusPtr` 16)
<*> peek (ptr `plusPtr` 40)
<*> peek (ptr `plusPtr` 56)
poke ptr poked = poke (ptr `plusPtr` 0) (vkSrcSubresource (poked :: VkImageBlit))
*> poke (ptr `plusPtr` 16) (vkSrcOffsets (poked :: VkImageBlit))
*> poke (ptr `plusPtr` 40) (vkDstSubresource (poked :: VkImageBlit))
*> poke (ptr `plusPtr` 56) (vkDstOffsets (poked :: VkImageBlit))
-- | VkBufferImageCopy - Structure specifying a buffer image copy operation
--
-- = Description
-- #_description#
--
-- When copying to or from a depth or stencil aspect, the data in buffer
-- memory uses a layout that is a (mostly) tightly packed representation of
-- the depth or stencil data. Specifically:
--
-- - data copied to or from the stencil aspect of any depth\/stencil
-- format is tightly packed with one @VK_FORMAT_S8_UINT@ value per
-- texel.
--
-- - data copied to or from the depth aspect of a @VK_FORMAT_D16_UNORM@
-- or @VK_FORMAT_D16_UNORM_S8_UINT@ format is tightly packed with one
-- @VK_FORMAT_D16_UNORM@ value per texel.
--
-- - data copied to or from the depth aspect of a @VK_FORMAT_D32_SFLOAT@
-- or @VK_FORMAT_D32_SFLOAT_S8_UINT@ format is tightly packed with one
-- @VK_FORMAT_D32_SFLOAT@ value per texel.
--
-- - data copied to or from the depth aspect of a
-- @VK_FORMAT_X8_D24_UNORM_PACK32@ or @VK_FORMAT_D24_UNORM_S8_UINT@
-- format is packed with one 32-bit word per texel with the D24 value
-- in the LSBs of the word, and undefined values in the eight MSBs.
--
-- __Note__
--
-- To copy both the depth and stencil aspects of a depth\/stencil format,
-- two entries in @pRegions@ /can/ be used, where one specifies the depth
-- aspect in @imageSubresource@, and the other specifies the stencil
-- aspect.
--
-- Because depth or stencil aspect buffer to image copies /may/ require
-- format conversions on some implementations, they are not supported on
-- queues that do not support graphics. When copying to a depth aspect, the
-- data in buffer memory /must/ be in the the range [0,1] or undefined
-- results occur.
--
-- Copies are done layer by layer starting with image layer
-- @baseArrayLayer@ member of @imageSubresource@. @layerCount@ layers are
-- copied from the source image or to the destination image.
--
-- == Valid Usage
--
-- - If the calling command’s @VkImage@ parameter’s format is not a
-- depth\/stencil format, then @bufferOffset@ /must/ be a multiple of
-- the format’s element size
--
-- - @bufferOffset@ /must/ be a multiple of @4@
--
-- - @bufferRowLength@ /must/ be @0@, or greater than or equal to the
-- @width@ member of @imageExtent@
--
-- - @bufferImageHeight@ /must/ be @0@, or greater than or equal to the
-- @height@ member of @imageExtent@
--
-- - @imageOffset.x@ and (@imageExtent.width@ + @imageOffset.x@) /must/
-- both be greater than or equal to @0@ and less than or equal to the
-- image subresource width
--
-- - @imageOffset.y@ and (imageExtent.height + @imageOffset.y@) /must/
-- both be greater than or equal to @0@ and less than or equal to the
-- image subresource height
--
-- - If the calling command’s @srcImage@ ('vkCmdCopyImageToBuffer') or
-- @dstImage@ ('vkCmdCopyBufferToImage') is of type @VK_IMAGE_TYPE_1D@,
-- then @imageOffset.y@ /must/ be @0@ and @imageExtent.height@ /must/
-- be @1@.
--
-- - @imageOffset.z@ and (imageExtent.depth + @imageOffset.z@) /must/
-- both be greater than or equal to @0@ and less than or equal to the
-- image subresource depth
--
-- - If the calling command’s @srcImage@ ('vkCmdCopyImageToBuffer') or
-- @dstImage@ ('vkCmdCopyBufferToImage') is of type @VK_IMAGE_TYPE_1D@
-- or @VK_IMAGE_TYPE_2D@, then @imageOffset.z@ /must/ be @0@ and
-- @imageExtent.depth@ /must/ be @1@
--
-- - If the calling command’s @VkImage@ parameter is a compressed image,
-- @bufferRowLength@ /must/ be a multiple of the compressed texel block
-- width
--
-- - If the calling command’s @VkImage@ parameter is a compressed image,
-- @bufferImageHeight@ /must/ be a multiple of the compressed texel
-- block height
--
-- - If the calling command’s @VkImage@ parameter is a compressed image,
-- all members of @imageOffset@ /must/ be a multiple of the
-- corresponding dimensions of the compressed texel block
--
-- - If the calling command’s @VkImage@ parameter is a compressed image,
-- @bufferOffset@ /must/ be a multiple of the compressed texel block
-- size in bytes
--
-- - If the calling command’s @VkImage@ parameter is a compressed image,
-- @imageExtent.width@ /must/ be a multiple of the compressed texel
-- block width or (@imageExtent.width@ + @imageOffset.x@) /must/ equal
-- the image subresource width
--
-- - If the calling command’s @VkImage@ parameter is a compressed image,
-- @imageExtent.height@ /must/ be a multiple of the compressed texel
-- block height or (@imageExtent.height@ + @imageOffset.y@) /must/
-- equal the image subresource height
--
-- - If the calling command’s @VkImage@ parameter is a compressed image,
-- @imageExtent.depth@ /must/ be a multiple of the compressed texel
-- block depth or (@imageExtent.depth@ + @imageOffset.z@) /must/ equal
-- the image subresource depth
--
-- - The @aspectMask@ member of @imageSubresource@ /must/ specify aspects
-- present in the calling command’s @VkImage@ parameter
--
-- - The @aspectMask@ member of @imageSubresource@ /must/ only have a
-- single bit set
--
-- - If the calling command’s @VkImage@ parameter is of
-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkImageType'
-- @VK_IMAGE_TYPE_3D@, the @baseArrayLayer@ and @layerCount@ members of
-- @imageSubresource@ /must/ be @0@ and @1@, respectively
--
-- - When copying to the depth aspect of an image subresource, the data
-- in the source buffer /must/ be in the range [0,1]
--
-- == Valid Usage (Implicit)
--
-- - @imageSubresource@ /must/ be a valid @VkImageSubresourceLayers@
-- structure
--
-- = See Also
-- #_see_also#
--
-- @VkDeviceSize@,
-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkExtent3D',
-- 'VkImageSubresourceLayers',
-- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkOffset3D',
-- 'vkCmdCopyBufferToImage', 'vkCmdCopyImageToBuffer'
data VkBufferImageCopy = VkBufferImageCopy
{ -- No documentation found for Nested "VkBufferImageCopy" "vkBufferOffset"
vkBufferOffset :: VkDeviceSize
, -- No documentation found for Nested "VkBufferImageCopy" "vkBufferRowLength"
vkBufferRowLength :: Word32
, -- No documentation found for Nested "VkBufferImageCopy" "vkBufferImageHeight"
vkBufferImageHeight :: Word32
, -- No documentation found for Nested "VkBufferImageCopy" "vkImageSubresource"
vkImageSubresource :: VkImageSubresourceLayers
, -- No documentation found for Nested "VkBufferImageCopy" "vkImageOffset"
vkImageOffset :: VkOffset3D
, -- No documentation found for Nested "VkBufferImageCopy" "vkImageExtent"
vkImageExtent :: VkExtent3D
}
deriving (Eq, Show)
instance Storable VkBufferImageCopy where
sizeOf ~_ = 56
alignment ~_ = 8
peek ptr = VkBufferImageCopy <$> peek (ptr `plusPtr` 0)
<*> peek (ptr `plusPtr` 8)
<*> peek (ptr `plusPtr` 12)
<*> peek (ptr `plusPtr` 16)
<*> peek (ptr `plusPtr` 32)
<*> peek (ptr `plusPtr` 44)
poke ptr poked = poke (ptr `plusPtr` 0) (vkBufferOffset (poked :: VkBufferImageCopy))
*> poke (ptr `plusPtr` 8) (vkBufferRowLength (poked :: VkBufferImageCopy))
*> poke (ptr `plusPtr` 12) (vkBufferImageHeight (poked :: VkBufferImageCopy))
*> poke (ptr `plusPtr` 16) (vkImageSubresource (poked :: VkBufferImageCopy))
*> poke (ptr `plusPtr` 32) (vkImageOffset (poked :: VkBufferImageCopy))
*> poke (ptr `plusPtr` 44) (vkImageExtent (poked :: VkBufferImageCopy))
-- | VkImageResolve - Structure specifying an image resolve operation
--
-- = Description
-- #_description#
--
-- == Valid Usage
--
-- - The @aspectMask@ member of @srcSubresource@ and @dstSubresource@
-- /must/ only contain @VK_IMAGE_ASPECT_COLOR_BIT@
--
-- - The @layerCount@ member of @srcSubresource@ and @dstSubresource@
-- /must/ match
--
-- - If either of the calling command’s @srcImage@ or @dstImage@
-- parameters are of
-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkImageType'
-- @VK_IMAGE_TYPE_3D@, the @baseArrayLayer@ and @layerCount@ members of
-- both @srcSubresource@ and @dstSubresource@ /must/ be @0@ and @1@,
-- respectively
--
-- - @srcOffset.x@ and (@extent.width@ + @srcOffset.x@) /must/ both be
-- greater than or equal to @0@ and less than or equal to the source
-- image subresource width
--
-- - @srcOffset.y@ and (@extent.height@ + @srcOffset.y@) /must/ both be
-- greater than or equal to @0@ and less than or equal to the source
-- image subresource height
--
-- - If the calling command’s @srcImage@ is of type @VK_IMAGE_TYPE_1D@,
-- then @srcOffset.y@ /must/ be @0@ and @extent.height@ /must/ be @1@.
--
-- - @srcOffset.z@ and (@extent.depth@ + @srcOffset.z@) /must/ both be
-- greater than or equal to @0@ and less than or equal to the source
-- image subresource depth
--
-- - If the calling command’s @srcImage@ is of type @VK_IMAGE_TYPE_1D@ or
-- @VK_IMAGE_TYPE_2D@, then @srcOffset.z@ /must/ be @0@ and
-- @extent.depth@ /must/ be @1@.
--
-- - @dstOffset.x@ and (@extent.width@ + @dstOffset.x@) /must/ both be
-- greater than or equal to @0@ and less than or equal to the
-- destination image subresource width
--
-- - @dstOffset.y@ and (@extent.height@ + @dstOffset.y@) /must/ both be
-- greater than or equal to @0@ and less than or equal to the
-- destination image subresource height
--
-- - If the calling command’s @dstImage@ is of type @VK_IMAGE_TYPE_1D@,
-- then @dstOffset.y@ /must/ be @0@ and @extent.height@ /must/ be @1@.
--
-- - @dstOffset.z@ and (@extent.depth@ + @dstOffset.z@) /must/ both be
-- greater than or equal to @0@ and less than or equal to the
-- destination image subresource depth
--
-- - If the calling command’s @dstImage@ is of type @VK_IMAGE_TYPE_1D@ or
-- @VK_IMAGE_TYPE_2D@, then @dstOffset.z@ /must/ be @0@ and
-- @extent.depth@ /must/ be @1@.
--
-- == Valid Usage (Implicit)
--
-- - @srcSubresource@ /must/ be a valid @VkImageSubresourceLayers@
-- structure
--
-- - @dstSubresource@ /must/ be a valid @VkImageSubresourceLayers@
-- structure
--
-- = See Also
-- #_see_also#
--
-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkExtent3D',
-- 'VkImageSubresourceLayers',
-- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkOffset3D',
-- 'vkCmdResolveImage'
data VkImageResolve = VkImageResolve
{ -- No documentation found for Nested "VkImageResolve" "vkSrcSubresource"
vkSrcSubresource :: VkImageSubresourceLayers
, -- No documentation found for Nested "VkImageResolve" "vkSrcOffset"
vkSrcOffset :: VkOffset3D
, -- No documentation found for Nested "VkImageResolve" "vkDstSubresource"
vkDstSubresource :: VkImageSubresourceLayers
, -- No documentation found for Nested "VkImageResolve" "vkDstOffset"
vkDstOffset :: VkOffset3D
, -- No documentation found for Nested "VkImageResolve" "vkExtent"
vkExtent :: VkExtent3D
}
deriving (Eq, Show)
instance Storable VkImageResolve where
sizeOf ~_ = 68
alignment ~_ = 4
peek ptr = VkImageResolve <$> peek (ptr `plusPtr` 0)
<*> peek (ptr `plusPtr` 16)
<*> peek (ptr `plusPtr` 28)
<*> peek (ptr `plusPtr` 44)
<*> peek (ptr `plusPtr` 56)
poke ptr poked = poke (ptr `plusPtr` 0) (vkSrcSubresource (poked :: VkImageResolve))
*> poke (ptr `plusPtr` 16) (vkSrcOffset (poked :: VkImageResolve))
*> poke (ptr `plusPtr` 28) (vkDstSubresource (poked :: VkImageResolve))
*> poke (ptr `plusPtr` 44) (vkDstOffset (poked :: VkImageResolve))
*> poke (ptr `plusPtr` 56) (vkExtent (poked :: VkImageResolve))
-- | VkRenderPassBeginInfo - Structure specifying render pass begin info
--
-- = Description
-- #_description#
--
-- @renderArea@ is the render area that is affected by the render pass
-- instance. The effects of attachment load, store and multisample resolve
-- operations are restricted to the pixels whose x and y coordinates fall
-- within the render area on all attachments. The render area extends to
-- all layers of @framebuffer@. The application /must/ ensure (using
-- scissor if necessary) that all rendering is contained within the render
-- area, otherwise the pixels outside of the render area become undefined
-- and shader side effects /may/ occur for fragments outside the render
-- area. The render area /must/ be contained within the framebuffer
-- dimensions.
--
-- __Note__
--
-- There /may/ be a performance cost for using a render area smaller than
-- the framebuffer, unless it matches the render area granularity for the
-- render pass.
--
-- == Valid Usage
--
-- - @clearValueCount@ /must/ be greater than the largest attachment
-- index in @renderPass@ that specifies a @loadOp@ (or @stencilLoadOp@,
-- if the attachment has a depth\/stencil format) of
-- @VK_ATTACHMENT_LOAD_OP_CLEAR@
--
-- - If @clearValueCount@ is not @0@, @pClearValues@ /must/ be a valid
-- pointer to an array of @clearValueCount@ valid @VkClearValue@ unions
--
-- - @renderPass@ /must/ be
-- <{html_spec_relative}#renderpass-compatibility compatible> with the
-- @renderPass@ member of the @VkFramebufferCreateInfo@ structure
-- specified when creating @framebuffer@.
--
-- == Valid Usage (Implicit)
--
-- - @sType@ /must/ be @VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_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.Core11.Promoted_from_VK_KHR_device_group.VkDeviceGroupRenderPassBeginInfo'
-- or
-- 'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.VkRenderPassSampleLocationsBeginInfoEXT'
--
-- - Each @sType@ member in the @pNext@ chain /must/ be unique
--
-- - @renderPass@ /must/ be a valid @VkRenderPass@ handle
--
-- - @framebuffer@ /must/ be a valid @VkFramebuffer@ handle
--
-- - Both of @framebuffer@, and @renderPass@ /must/ have been created,
-- allocated, or retrieved from the same @VkDevice@
--
-- = See Also
-- #_see_also#
--
-- 'VkClearValue', 'Graphics.Vulkan.Core10.Pass.VkFramebuffer',
-- 'Graphics.Vulkan.Core10.Pipeline.VkRect2D',
-- 'Graphics.Vulkan.Core10.Pipeline.VkRenderPass',
-- 'Graphics.Vulkan.Core10.Core.VkStructureType', 'vkCmdBeginRenderPass'
data VkRenderPassBeginInfo = VkRenderPassBeginInfo
{ -- No documentation found for Nested "VkRenderPassBeginInfo" "vkSType"
vkSType :: VkStructureType
, -- No documentation found for Nested "VkRenderPassBeginInfo" "vkPNext"
vkPNext :: Ptr ()
, -- No documentation found for Nested "VkRenderPassBeginInfo" "vkRenderPass"
vkRenderPass :: VkRenderPass
, -- No documentation found for Nested "VkRenderPassBeginInfo" "vkFramebuffer"
vkFramebuffer :: VkFramebuffer
, -- No documentation found for Nested "VkRenderPassBeginInfo" "vkRenderArea"
vkRenderArea :: VkRect2D
, -- No documentation found for Nested "VkRenderPassBeginInfo" "vkClearValueCount"
vkClearValueCount :: Word32
, -- No documentation found for Nested "VkRenderPassBeginInfo" "vkPClearValues"
vkPClearValues :: Ptr VkClearValue
}
deriving (Eq, Show)
instance Storable VkRenderPassBeginInfo where
sizeOf ~_ = 64
alignment ~_ = 8
peek ptr = VkRenderPassBeginInfo <$> peek (ptr `plusPtr` 0)
<*> peek (ptr `plusPtr` 8)
<*> peek (ptr `plusPtr` 16)
<*> peek (ptr `plusPtr` 24)
<*> peek (ptr `plusPtr` 32)
<*> peek (ptr `plusPtr` 48)
<*> peek (ptr `plusPtr` 56)
poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkRenderPassBeginInfo))
*> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkRenderPassBeginInfo))
*> poke (ptr `plusPtr` 16) (vkRenderPass (poked :: VkRenderPassBeginInfo))
*> poke (ptr `plusPtr` 24) (vkFramebuffer (poked :: VkRenderPassBeginInfo))
*> poke (ptr `plusPtr` 32) (vkRenderArea (poked :: VkRenderPassBeginInfo))
*> poke (ptr `plusPtr` 48) (vkClearValueCount (poked :: VkRenderPassBeginInfo))
*> poke (ptr `plusPtr` 56) (vkPClearValues (poked :: VkRenderPassBeginInfo))
-- | VkClearDepthStencilValue - Structure specifying a clear depth stencil
-- value
--
-- = Description
-- #_description#
--
-- == Valid Usage
--
-- - @depth@ /must/ be between @0.0@ and @1.0@, inclusive
--
-- = See Also
-- #_see_also#
--
-- 'VkClearValue', 'vkCmdClearDepthStencilImage'
data VkClearDepthStencilValue = VkClearDepthStencilValue
{ -- No documentation found for Nested "VkClearDepthStencilValue" "vkDepth"
vkDepth :: CFloat
, -- No documentation found for Nested "VkClearDepthStencilValue" "vkStencil"
vkStencil :: Word32
}
deriving (Eq, Show)
instance Storable VkClearDepthStencilValue where
sizeOf ~_ = 8
alignment ~_ = 4
peek ptr = VkClearDepthStencilValue <$> peek (ptr `plusPtr` 0)
<*> peek (ptr `plusPtr` 4)
poke ptr poked = poke (ptr `plusPtr` 0) (vkDepth (poked :: VkClearDepthStencilValue))
*> poke (ptr `plusPtr` 4) (vkStencil (poked :: VkClearDepthStencilValue))
-- | VkClearAttachment - Structure specifying a clear attachment
--
-- = Description
-- #_description#
--
-- No memory barriers are needed between @vkCmdClearAttachments@ and
-- preceding or subsequent draw or attachment clear commands in the same
-- subpass.
--
-- The @vkCmdClearAttachments@ command is not affected by the bound
-- pipeline state.
--
-- Attachments /can/ also be cleared at the beginning of a render pass
-- instance by setting @loadOp@ (or @stencilLoadOp@) of
-- 'Graphics.Vulkan.Core10.Pass.VkAttachmentDescription' to
-- @VK_ATTACHMENT_LOAD_OP_CLEAR@, as described for
-- 'Graphics.Vulkan.Core10.Pass.vkCreateRenderPass'.
--
-- == Valid Usage
--
-- - If @aspectMask@ includes @VK_IMAGE_ASPECT_COLOR_BIT@, it /must/ not
-- include @VK_IMAGE_ASPECT_DEPTH_BIT@ or @VK_IMAGE_ASPECT_STENCIL_BIT@
--
-- - @aspectMask@ /must/ not include @VK_IMAGE_ASPECT_METADATA_BIT@
--
-- - @clearValue@ /must/ be a valid @VkClearValue@ union
--
-- == Valid Usage (Implicit)
--
-- - @aspectMask@ /must/ be a valid combination of
-- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkImageAspectFlagBits'
-- values
--
-- - @aspectMask@ /must/ not be @0@
--
-- = See Also
-- #_see_also#
--
-- 'VkClearValue',
-- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkImageAspectFlags',
-- 'vkCmdClearAttachments'
data VkClearAttachment = VkClearAttachment
{ -- No documentation found for Nested "VkClearAttachment" "vkAspectMask"
vkAspectMask :: VkImageAspectFlags
, -- No documentation found for Nested "VkClearAttachment" "vkColorAttachment"
vkColorAttachment :: Word32
, -- No documentation found for Nested "VkClearAttachment" "vkClearValue"
vkClearValue :: VkClearValue
}
deriving (Eq, Show)
instance Storable VkClearAttachment where
sizeOf ~_ = 24
alignment ~_ = 4
peek ptr = VkClearAttachment <$> peek (ptr `plusPtr` 0)
<*> peek (ptr `plusPtr` 4)
<*> peek (ptr `plusPtr` 8)
poke ptr poked = poke (ptr `plusPtr` 0) (vkAspectMask (poked :: VkClearAttachment))
*> poke (ptr `plusPtr` 4) (vkColorAttachment (poked :: VkClearAttachment))
*> poke (ptr `plusPtr` 8) (vkClearValue (poked :: VkClearAttachment))
-- | VkDrawIndirectCommand - Structure specifying a draw indirect command
--
-- = Description
-- #_description#
--
-- The members of @VkDrawIndirectCommand@ have the same meaning as the
-- similarly named parameters of 'vkCmdDraw'.
--
-- == Valid Usage
--
-- - For a given vertex buffer binding, any attribute data fetched /must/
-- be entirely contained within the corresponding vertex buffer
-- binding, as described in
-- <{html_spec_relative}#fxvertex-input {html_spec_relative}#fxvertex-input>
--
-- - If the
-- <{html_spec_relative}#features-features-drawIndirectFirstInstance drawIndirectFirstInstance>
-- feature is not enabled, @firstInstance@ /must/ be @0@
--
-- = See Also
-- #_see_also#
--
-- 'vkCmdDrawIndirect'
data VkDrawIndirectCommand = VkDrawIndirectCommand
{ -- No documentation found for Nested "VkDrawIndirectCommand" "vkVertexCount"
vkVertexCount :: Word32
, -- No documentation found for Nested "VkDrawIndirectCommand" "vkInstanceCount"
vkInstanceCount :: Word32
, -- No documentation found for Nested "VkDrawIndirectCommand" "vkFirstVertex"
vkFirstVertex :: Word32
, -- No documentation found for Nested "VkDrawIndirectCommand" "vkFirstInstance"
vkFirstInstance :: Word32
}
deriving (Eq, Show)
instance Storable VkDrawIndirectCommand where
sizeOf ~_ = 16
alignment ~_ = 4
peek ptr = VkDrawIndirectCommand <$> peek (ptr `plusPtr` 0)
<*> peek (ptr `plusPtr` 4)
<*> peek (ptr `plusPtr` 8)
<*> peek (ptr `plusPtr` 12)
poke ptr poked = poke (ptr `plusPtr` 0) (vkVertexCount (poked :: VkDrawIndirectCommand))
*> poke (ptr `plusPtr` 4) (vkInstanceCount (poked :: VkDrawIndirectCommand))
*> poke (ptr `plusPtr` 8) (vkFirstVertex (poked :: VkDrawIndirectCommand))
*> poke (ptr `plusPtr` 12) (vkFirstInstance (poked :: VkDrawIndirectCommand))
-- | VkDrawIndexedIndirectCommand - Structure specifying a draw indexed
-- indirect command
--
-- = Description
-- #_description#
--
-- The members of @VkDrawIndexedIndirectCommand@ have the same meaning as
-- the similarly named parameters of 'vkCmdDrawIndexed'.
--
-- == Valid Usage
--
-- - For a given vertex buffer binding, any attribute data fetched /must/
-- be entirely contained within the corresponding vertex buffer
-- binding, as described in
-- <{html_spec_relative}#fxvertex-input {html_spec_relative}#fxvertex-input>
--
-- - (@indexSize@ * (@firstIndex@ + @indexCount@) + @offset@) /must/ be
-- less than or equal to the size of the bound index buffer, with
-- @indexSize@ being based on the type specified by @indexType@, where
-- the index buffer, @indexType@, and @offset@ are specified via
-- @vkCmdBindIndexBuffer@
--
-- - If the
-- <{html_spec_relative}#features-features-drawIndirectFirstInstance drawIndirectFirstInstance>
-- feature is not enabled, @firstInstance@ /must/ be @0@
--
-- = See Also
-- #_see_also#
--
-- 'vkCmdDrawIndexedIndirect'
data VkDrawIndexedIndirectCommand = VkDrawIndexedIndirectCommand
{ -- No documentation found for Nested "VkDrawIndexedIndirectCommand" "vkIndexCount"
vkIndexCount :: Word32
, -- No documentation found for Nested "VkDrawIndexedIndirectCommand" "vkInstanceCount"
vkInstanceCount :: Word32
, -- No documentation found for Nested "VkDrawIndexedIndirectCommand" "vkFirstIndex"
vkFirstIndex :: Word32
, -- No documentation found for Nested "VkDrawIndexedIndirectCommand" "vkVertexOffset"
vkVertexOffset :: Int32
, -- No documentation found for Nested "VkDrawIndexedIndirectCommand" "vkFirstInstance"
vkFirstInstance :: Word32
}
deriving (Eq, Show)
instance Storable VkDrawIndexedIndirectCommand where
sizeOf ~_ = 20
alignment ~_ = 4
peek ptr = VkDrawIndexedIndirectCommand <$> peek (ptr `plusPtr` 0)
<*> peek (ptr `plusPtr` 4)
<*> peek (ptr `plusPtr` 8)
<*> peek (ptr `plusPtr` 12)
<*> peek (ptr `plusPtr` 16)
poke ptr poked = poke (ptr `plusPtr` 0) (vkIndexCount (poked :: VkDrawIndexedIndirectCommand))
*> poke (ptr `plusPtr` 4) (vkInstanceCount (poked :: VkDrawIndexedIndirectCommand))
*> poke (ptr `plusPtr` 8) (vkFirstIndex (poked :: VkDrawIndexedIndirectCommand))
*> poke (ptr `plusPtr` 12) (vkVertexOffset (poked :: VkDrawIndexedIndirectCommand))
*> poke (ptr `plusPtr` 16) (vkFirstInstance (poked :: VkDrawIndexedIndirectCommand))
-- | VkDispatchIndirectCommand - Structure specifying a dispatch indirect
-- command
--
-- = Description
-- #_description#
--
-- The members of @VkDispatchIndirectCommand@ have the same meaning as the
-- corresponding parameters of 'vkCmdDispatch'.
--
-- == Valid Usage
--
-- - @x@ /must/ be less than or equal to
-- @VkPhysicalDeviceLimits@::@maxComputeWorkGroupCount@[0]
--
-- - @y@ /must/ be less than or equal to
-- @VkPhysicalDeviceLimits@::@maxComputeWorkGroupCount@[1]
--
-- - @z@ /must/ be less than or equal to
-- @VkPhysicalDeviceLimits@::@maxComputeWorkGroupCount@[2]
--
-- = See Also
-- #_see_also#
--
-- 'vkCmdDispatchIndirect'
data VkDispatchIndirectCommand = VkDispatchIndirectCommand
{ -- No documentation found for Nested "VkDispatchIndirectCommand" "vkX"
vkX :: Word32
, -- No documentation found for Nested "VkDispatchIndirectCommand" "vkY"
vkY :: Word32
, -- No documentation found for Nested "VkDispatchIndirectCommand" "vkZ"
vkZ :: Word32
}
deriving (Eq, Show)
instance Storable VkDispatchIndirectCommand where
sizeOf ~_ = 12
alignment ~_ = 4
peek ptr = VkDispatchIndirectCommand <$> peek (ptr `plusPtr` 0)
<*> peek (ptr `plusPtr` 4)
<*> peek (ptr `plusPtr` 8)
poke ptr poked = poke (ptr `plusPtr` 0) (vkX (poked :: VkDispatchIndirectCommand))
*> poke (ptr `plusPtr` 4) (vkY (poked :: VkDispatchIndirectCommand))
*> poke (ptr `plusPtr` 8) (vkZ (poked :: VkDispatchIndirectCommand))
-- | VkClearColorValue - Structure specifying a clear color value
--
-- = Description
-- #_description#
--
-- The four array elements of the clear color map to R, G, B, and A
-- components of image formats, in order.
--
-- If the image has more than one sample, the same value is written to all
-- samples for any pixels being cleared.
--
-- = See Also
-- #_see_also#
--
-- 'VkClearValue', 'vkCmdClearColorImage'
data VkClearColorValue
= -- No documentation found for Nested "VkClearColorValue" "VkFloat32"
VkFloat32 (Vector 4 CFloat)
| -- No documentation found for Nested "VkClearColorValue" "VkInt32"
VkInt32 (Vector 4 Int32)
| -- No documentation found for Nested "VkClearColorValue" "VkUint32"
VkUint32 (Vector 4 Word32)
deriving (Eq, Show)
-- | _Note_: peek is undefined as we wouldn't know which constructor to use
instance Storable VkClearColorValue where
sizeOf ~_ = 16
alignment ~_ = 4
peek _ = error "peek @VkClearColorValue"
poke ptr = \case
VkFloat32 e -> poke (castPtr ptr) e
VkInt32 e -> poke (castPtr ptr) e
VkUint32 e -> poke (castPtr ptr) e
-- | VkClearValue - Structure specifying a clear value
--
-- = Description
-- #_description#
--
-- This union is used where part of the API requires either color or
-- depth\/stencil clear values, depending on the attachment, and defines
-- the initial clear values in the 'VkRenderPassBeginInfo' structure.
--
-- == Valid Usage
--
-- - @depthStencil@ /must/ be a valid @VkClearDepthStencilValue@
-- structure
--
-- = See Also
-- #_see_also#
--
-- 'VkClearAttachment', 'VkClearColorValue', 'VkClearDepthStencilValue',
-- 'VkRenderPassBeginInfo'
data VkClearValue
= -- No documentation found for Nested "VkClearValue" "VkColor"
VkColor VkClearColorValue
| -- No documentation found for Nested "VkClearValue" "VkDepthStencil"
VkDepthStencil VkClearDepthStencilValue
deriving (Eq, Show)
-- | _Note_: peek is undefined as we wouldn't know which constructor to use
instance Storable VkClearValue where
sizeOf ~_ = 16
alignment ~_ = 4
peek _ = error "peek @VkClearValue"
poke ptr = \case
VkColor e -> poke (castPtr ptr) e
VkDepthStencil e -> poke (castPtr ptr) e
-- | VkStencilFaceFlags - Bitmask of VkStencilFaceFlagBits
--
-- = Description
-- #_description#
--
-- @VkStencilFaceFlags@ is a bitmask type for setting a mask of zero or
-- more 'VkStencilFaceFlagBits'.
--
-- = See Also
-- #_see_also#
--
-- 'VkStencilFaceFlagBits', 'vkCmdSetStencilCompareMask',
-- 'vkCmdSetStencilReference', 'vkCmdSetStencilWriteMask'
type VkStencilFaceFlags = VkStencilFaceFlagBits