Safe Haskell | None |
---|---|
Language | Haskell2010 |
Synopsis
- pattern VK_AMD_DRAW_INDIRECT_COUNT_SPEC_VERSION :: Integral a => a
- pattern VK_AMD_DRAW_INDIRECT_COUNT_EXTENSION_NAME :: (Eq a, IsString a) => a
- vkCmdDrawIndirectCountAMD :: ("commandBuffer" ::: VkCommandBuffer) -> ("buffer" ::: VkBuffer) -> ("offset" ::: VkDeviceSize) -> ("countBuffer" ::: VkBuffer) -> ("countBufferOffset" ::: VkDeviceSize) -> ("maxDrawCount" ::: Word32) -> ("stride" ::: Word32) -> IO ()
- vkCmdDrawIndexedIndirectCountAMD :: ("commandBuffer" ::: VkCommandBuffer) -> ("buffer" ::: VkBuffer) -> ("offset" ::: VkDeviceSize) -> ("countBuffer" ::: VkBuffer) -> ("countBufferOffset" ::: VkDeviceSize) -> ("maxDrawCount" ::: Word32) -> ("stride" ::: Word32) -> IO ()
Documentation
pattern VK_AMD_DRAW_INDIRECT_COUNT_SPEC_VERSION :: Integral a => a Source #
pattern VK_AMD_DRAW_INDIRECT_COUNT_EXTENSION_NAME :: (Eq a, IsString a) => a Source #
vkCmdDrawIndirectCountAMD :: ("commandBuffer" ::: VkCommandBuffer) -> ("buffer" ::: VkBuffer) -> ("offset" ::: VkDeviceSize) -> ("countBuffer" ::: VkBuffer) -> ("countBufferOffset" ::: VkDeviceSize) -> ("maxDrawCount" ::: Word32) -> ("stride" ::: Word32) -> IO () Source #
vkCmdDrawIndirectCountAMD - Perform an indirect draw with the draw count sourced from a buffer
Parameters
commandBuffer
is the command buffer into which the command is recorded.
buffer
is the buffer containing draw parameters.offset
is the byte offset intobuffer
where parameters begin.countBuffer
is the buffer containing the draw count.countBufferOffset
is the byte offset intocountBuffer
where the draw count begins.maxDrawCount
specifies the maximum number of draws that will be executed. The actual number of executed draw calls is the minimum of the count specified incountBuffer
andmaxDrawCount
.stride
is the byte stride between successive sets of draw parameters.
Description
vkCmdDrawIndirectCountAMD
behaves similarly to
vkCmdDrawIndirect
except
that the draw count is read by the device from a buffer during
execution. The command will read an unsigned 32-bit integer from
countBuffer
located at countBufferOffset
and use this as the draw
count.
Valid Usage
- If
buffer
is non-sparse then it must be bound completely and contiguously to a singleVkDeviceMemory
object
buffer
must have been created with theVK_BUFFER_USAGE_INDIRECT_BUFFER_BIT
bit set- If
countBuffer
is non-sparse then it must be bound completely and contiguously to a singleVkDeviceMemory
object countBuffer
must have been created with theVK_BUFFER_USAGE_INDIRECT_BUFFER_BIT
bit setoffset
must be a multiple of4
countBufferOffset
must be a multiple of4
stride
must be a multiple of4
and must be greater than or equal tosizeof
(VkDrawIndirectCommand
)- If
maxDrawCount
is greater than or equal to1
, (stride
× (maxDrawCount
- 1) +offset
+sizeof
(VkDrawIndirectCommand
)) must be less than or equal to the size ofbuffer
- If the
drawIndirectFirstInstance
feature is not enabled, all the
firstInstance
members of theVkDrawIndirectCommand
structures accessed by this command must be0
- The current render pass must be
compatible
with the
renderPass
member of theVkGraphicsPipelineCreateInfo
structure specified when creating theVkPipeline
bound toVK_PIPELINE_BIND_POINT_GRAPHICS
. - The subpass index of the current render pass must be equal to the
subpass
member of theVkGraphicsPipelineCreateInfo
structure specified when creating theVkPipeline
bound toVK_PIPELINE_BIND_POINT_GRAPHICS
. - For each set n that is statically used by the
VkPipeline
bound toVK_PIPELINE_BIND_POINT_GRAPHICS
, a descriptor set must have been bound to n atVK_PIPELINE_BIND_POINT_GRAPHICS
, with aVkPipelineLayout
that is compatible for set n, with theVkPipelineLayout
used to create the currentVkPipeline
, as described in {html_spec_relative}#descriptorsets-compatibility - For each push constant that is statically used by the
VkPipeline
bound toVK_PIPELINE_BIND_POINT_GRAPHICS
, a push constant value must have been set forVK_PIPELINE_BIND_POINT_GRAPHICS
, with aVkPipelineLayout
that is compatible for push constants, with theVkPipelineLayout
used to create the currentVkPipeline
, as described in {html_spec_relative}#descriptorsets-compatibility - Descriptors in each bound descriptor set, specified via
vkCmdBindDescriptorSets
, must be valid if they are statically used by the boundVkPipeline
object, specified viavkCmdBindPipeline
- 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 toVK_PIPELINE_BIND_POINT_GRAPHICS
requires any dynamic state, that state must have been set on the current command buffer - If the count stored in
countBuffer
is equal to1
, (offset
+sizeof
(VkDrawIndirectCommand
)) must be less than or equal to the size ofbuffer
- If the count stored in
countBuffer
is greater than1
, (stride
× (drawCount
- 1) +offset
+sizeof
(VkDrawIndirectCommand
)) must be less than or equal to the size ofbuffer
- The count stored in
countBuffer
must be less than or equal toVkPhysicalDeviceLimits
::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 theVkPipeline
bound toVK_PIPELINE_BIND_POINT_GRAPHICS
uses unnormalized coordinates, it must not be used to sample from anyVkImage
with aVkImageView
of the typeVK_IMAGE_VIEW_TYPE_3D
,VK_IMAGE_VIEW_TYPE_CUBE
,VK_IMAGE_VIEW_TYPE_1D_ARRAY
,VK_IMAGE_VIEW_TYPE_2D_ARRAY
orVK_IMAGE_VIEW_TYPE_CUBE_ARRAY
, in any shader stage - If any
VkSampler
object that is accessed from a shader by theVkPipeline
bound toVK_PIPELINE_BIND_POINT_GRAPHICS
uses unnormalized coordinates, it must not be used with any of the SPIR-VOpImageSample*
orOpImageSparseSample*
instructions withImplicitLod
,Dref
orProj
in their name, in any shader stage - If any
VkSampler
object that is accessed from a shader by theVkPipeline
bound toVK_PIPELINE_BIND_POINT_GRAPHICS
uses unnormalized coordinates, it must not be used with any of the SPIR-VOpImageSample*
orOpImageSparseSample*
instructions that includes a LOD bias or any offset values, in any shader stage - If the robust buffer
access
feature is not enabled, and any shader stage in the
VkPipeline
object bound toVK_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 robust buffer
access
feature is not enabled, and any shader stage in the
VkPipeline
object bound toVK_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 withVK_FILTER_LINEAR
as a result of this command must be of a format which supports linear filtering, as specified by theVK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
flag inVkFormatProperties
::linearTilingFeatures
(for a linear image) orVkFormatProperties
::optimalTilingFeatures
(for an optimally tiled image) returned byvkGetPhysicalDeviceFormatProperties
- 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.
- If the draw is recorded in a render pass instance with multiview
enabled, the maximum instance index must be less than or equal to
VkPhysicalDeviceMultiviewProperties
::maxMultiviewInstanceIndex
. - If the bound graphics pipeline was created with
VkPipelineSampleLocationsStateCreateInfoEXT
::sampleLocationsEnable
set toVK_TRUE
and the current subpass has a depth/stencil attachment, then that attachment must have been created with theVK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT
bit set
Valid Usage (Implicit)
commandBuffer
must be a validVkCommandBuffer
handle
buffer
must be a validVkBuffer
handlecountBuffer
must be a validVkBuffer
handlecommandBuffer
must be in the recording state- The
VkCommandPool
thatcommandBuffer
was allocated from must support graphics operations - This command must only be called inside of a render pass instance
- Each of
buffer
,commandBuffer
, andcountBuffer
must have been created, allocated, or retrieved from the sameVkDevice
Host Synchronization
- Host access to
commandBuffer
must be externally synchronized
- Host access to the
VkCommandPool
thatcommandBuffer
was allocated from must be externally synchronized
Command Properties
'
Command Buffer Levels | Render Pass Scope | Supported Queue Types | Pipeline Type |
---|---|---|---|
Primary Secondary | Inside | Graphics | Graphics |
See Also
VkBuffer
,
VkCommandBuffer
, VkDeviceSize
vkCmdDrawIndexedIndirectCountAMD :: ("commandBuffer" ::: VkCommandBuffer) -> ("buffer" ::: VkBuffer) -> ("offset" ::: VkDeviceSize) -> ("countBuffer" ::: VkBuffer) -> ("countBufferOffset" ::: VkDeviceSize) -> ("maxDrawCount" ::: Word32) -> ("stride" ::: Word32) -> IO () Source #
vkCmdDrawIndexedIndirectCountAMD - Perform an indexed indirect draw with the draw count sourced from a buffer
Parameters
commandBuffer
is the command buffer into which the command is recorded.
buffer
is the buffer containing draw parameters.offset
is the byte offset intobuffer
where parameters begin.countBuffer
is the buffer containing the draw count.countBufferOffset
is the byte offset intocountBuffer
where the draw count begins.maxDrawCount
specifies the maximum number of draws that will be executed. The actual number of executed draw calls is the minimum of the count specified incountBuffer
andmaxDrawCount
.stride
is the byte stride between successive sets of draw parameters.
Description
vkCmdDrawIndexedIndirectCountAMD
behaves similarly to
vkCmdDrawIndexedIndirect
except that the draw count is read by the device from a buffer during
execution. The command will read an unsigned 32-bit integer from
countBuffer
located at countBufferOffset
and use this as the draw
count.
Valid Usage
- If
buffer
is non-sparse then it must be bound completely and contiguously to a singleVkDeviceMemory
object
buffer
must have been created with theVK_BUFFER_USAGE_INDIRECT_BUFFER_BIT
bit set- If
countBuffer
is non-sparse then it must be bound completely and contiguously to a singleVkDeviceMemory
object countBuffer
must have been created with theVK_BUFFER_USAGE_INDIRECT_BUFFER_BIT
bit setoffset
must be a multiple of4
countBufferOffset
must be a multiple of4
stride
must be a multiple of4
and must be greater than or equal tosizeof
(VkDrawIndirectCommand
)- If
maxDrawCount
is greater than or equal to1
, (stride
× (maxDrawCount
- 1) +offset
+sizeof
(VkDrawIndirectCommand
)) must be less than or equal to the size ofbuffer
- If the
drawIndirectFirstInstance
feature is not enabled, all the
firstInstance
members of theVkDrawIndexedIndirectCommand
structures accessed by this command must be0
- The current render pass must be
compatible
with the
renderPass
member of theVkGraphicsPipelineCreateInfo
structure specified when creating theVkPipeline
bound toVK_PIPELINE_BIND_POINT_GRAPHICS
. - The subpass index of the current render pass must be equal to the
subpass
member of theVkGraphicsPipelineCreateInfo
structure specified when creating theVkPipeline
bound toVK_PIPELINE_BIND_POINT_GRAPHICS
. - For each set n that is statically used by the
VkPipeline
bound toVK_PIPELINE_BIND_POINT_GRAPHICS
, a descriptor set must have been bound to n atVK_PIPELINE_BIND_POINT_GRAPHICS
, with aVkPipelineLayout
that is compatible for set n, with theVkPipelineLayout
used to create the currentVkPipeline
, as described in {html_spec_relative}#descriptorsets-compatibility - For each push constant that is statically used by the
VkPipeline
bound toVK_PIPELINE_BIND_POINT_GRAPHICS
, a push constant value must have been set forVK_PIPELINE_BIND_POINT_GRAPHICS
, with aVkPipelineLayout
that is compatible for push constants, with theVkPipelineLayout
used to create the currentVkPipeline
, as described in {html_spec_relative}#descriptorsets-compatibility - Descriptors in each bound descriptor set, specified via
vkCmdBindDescriptorSets
, must be valid if they are statically used by the boundVkPipeline
object, specified viavkCmdBindPipeline
- 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 toVK_PIPELINE_BIND_POINT_GRAPHICS
requires any dynamic state, that state must have been set on the current command buffer - If count stored in
countBuffer
is equal to1
, (offset
+sizeof
(VkDrawIndexedIndirectCommand
)) must be less than or equal to the size ofbuffer
- If count stored in
countBuffer
is greater than1
, (stride
× (drawCount
- 1) +offset
+sizeof
(VkDrawIndexedIndirectCommand
)) must be less than or equal to the size ofbuffer
drawCount
must be less than or equal toVkPhysicalDeviceLimits
::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 theVkPipeline
bound toVK_PIPELINE_BIND_POINT_GRAPHICS
uses unnormalized coordinates, it must not be used to sample from anyVkImage
with aVkImageView
of the typeVK_IMAGE_VIEW_TYPE_3D
,VK_IMAGE_VIEW_TYPE_CUBE
,VK_IMAGE_VIEW_TYPE_1D_ARRAY
,VK_IMAGE_VIEW_TYPE_2D_ARRAY
orVK_IMAGE_VIEW_TYPE_CUBE_ARRAY
, in any shader stage - If any
VkSampler
object that is accessed from a shader by theVkPipeline
bound toVK_PIPELINE_BIND_POINT_GRAPHICS
uses unnormalized coordinates, it must not be used with any of the SPIR-VOpImageSample*
orOpImageSparseSample*
instructions withImplicitLod
,Dref
orProj
in their name, in any shader stage - If any
VkSampler
object that is accessed from a shader by theVkPipeline
bound toVK_PIPELINE_BIND_POINT_GRAPHICS
uses unnormalized coordinates, it must not be used with any of the SPIR-VOpImageSample*
orOpImageSparseSample*
instructions that includes a LOD bias or any offset values, in any shader stage - If the robust buffer
access
feature is not enabled, and any shader stage in the
VkPipeline
object bound toVK_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 robust buffer
access
feature is not enabled, and any shader stage in the
VkPipeline
object bound toVK_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 withVK_FILTER_LINEAR
as a result of this command must be of a format which supports linear filtering, as specified by theVK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
flag inVkFormatProperties
::linearTilingFeatures
(for a linear image) orVkFormatProperties
::optimalTilingFeatures
(for an optimally tiled image) returned byvkGetPhysicalDeviceFormatProperties
- 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.
- If the draw is recorded in a render pass instance with multiview
enabled, the maximum instance index must be less than or equal to
VkPhysicalDeviceMultiviewProperties
::maxMultiviewInstanceIndex
. - If the bound graphics pipeline was created with
VkPipelineSampleLocationsStateCreateInfoEXT
::sampleLocationsEnable
set toVK_TRUE
and the current subpass has a depth/stencil attachment, then that attachment must have been created with theVK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT
bit set
Valid Usage (Implicit)
commandBuffer
must be a validVkCommandBuffer
handle
buffer
must be a validVkBuffer
handlecountBuffer
must be a validVkBuffer
handlecommandBuffer
must be in the recording state- The
VkCommandPool
thatcommandBuffer
was allocated from must support graphics operations - This command must only be called inside of a render pass instance
- Each of
buffer
,commandBuffer
, andcountBuffer
must have been created, allocated, or retrieved from the sameVkDevice
Host Synchronization
- Host access to
commandBuffer
must be externally synchronized
- Host access to the
VkCommandPool
thatcommandBuffer
was allocated from must be externally synchronized
Command Properties
'
Command Buffer Levels | Render Pass Scope | Supported Queue Types | Pipeline Type |
---|---|---|---|
Primary Secondary | Inside | Graphics | Graphics |
See Also
VkBuffer
,
VkCommandBuffer
, VkDeviceSize