vulkan-2.1.0.0: src/Graphics/Vulkan/Extensions/VK_AMD_draw_indirect_count.hs
{-# language Strict #-}
{-# language CPP #-}
{-# language PatternSynonyms #-}
{-# language OverloadedStrings #-}
{-# language DataKinds #-}
{-# language TypeOperators #-}
module Graphics.Vulkan.Extensions.VK_AMD_draw_indirect_count
( pattern VK_AMD_DRAW_INDIRECT_COUNT_SPEC_VERSION
, pattern VK_AMD_DRAW_INDIRECT_COUNT_EXTENSION_NAME
, vkCmdDrawIndirectCountAMD
, vkCmdDrawIndexedIndirectCountAMD
) where
import Data.String
( IsString
)
import Data.Word
( Word32
)
import Graphics.Vulkan.NamedType
( (:::)
)
import Graphics.Vulkan.Core10.DeviceInitialization
( VkDeviceSize
)
import Graphics.Vulkan.Core10.MemoryManagement
( VkBuffer
)
import Graphics.Vulkan.Core10.Queue
( VkCommandBuffer
)
-- No documentation found for TopLevel "VK_AMD_DRAW_INDIRECT_COUNT_SPEC_VERSION"
pattern VK_AMD_DRAW_INDIRECT_COUNT_SPEC_VERSION :: Integral a => a
pattern VK_AMD_DRAW_INDIRECT_COUNT_SPEC_VERSION = 1
-- No documentation found for TopLevel "VK_AMD_DRAW_INDIRECT_COUNT_EXTENSION_NAME"
pattern VK_AMD_DRAW_INDIRECT_COUNT_EXTENSION_NAME :: (Eq a ,IsString a) => a
pattern VK_AMD_DRAW_INDIRECT_COUNT_EXTENSION_NAME = "VK_AMD_draw_indirect_count"
-- | 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 into @buffer@ where parameters begin.
--
-- - @countBuffer@ is the buffer containing the draw count.
--
-- - @countBufferOffset@ is the byte offset into @countBuffer@ 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 in @countBuffer@ and @maxDrawCount@.
--
-- - @stride@ is the byte stride between successive sets of draw
-- parameters.
--
-- = Description
--
-- @vkCmdDrawIndirectCountAMD@ behaves similarly to
-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.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 single @VkDeviceMemory@ object
--
-- - @buffer@ /must/ have been created with the
-- @VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT@ bit set
--
-- - If @countBuffer@ is non-sparse then it /must/ be bound completely
-- and contiguously to a single @VkDeviceMemory@ object
--
-- - @countBuffer@ /must/ have been created with the
-- @VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT@ bit set
--
-- - @offset@ /must/ be a multiple of @4@
--
-- - @countBufferOffset@ /must/ be a multiple of @4@
--
-- - @stride@ /must/ be a multiple of @4@ and /must/ be greater than or
-- equal to @sizeof@(@VkDrawIndirectCommand@)
--
-- - If @maxDrawCount@ is greater than or equal to @1@, (@stride@ ×
-- (@maxDrawCount@ - 1) + @offset@ + @sizeof@(@VkDrawIndirectCommand@))
-- /must/ be less than or equal to the size of @buffer@
--
-- - If the
-- [drawIndirectFirstInstance](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-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
-- [compatible](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#renderpass-compatibility)
-- 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](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#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](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#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 the count stored in @countBuffer@ is equal to @1@, (@offset@ +
-- @sizeof@(@VkDrawIndirectCommand@)) /must/ be less than or equal to
-- the size of @buffer@
--
-- - If the count stored in @countBuffer@ is greater than @1@, (@stride@
-- × (@drawCount@ - 1) + @offset@ + @sizeof@(@VkDrawIndirectCommand@))
-- /must/ be less than or equal to the size of @buffer@
--
-- - The count stored in @countBuffer@ /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 [robust buffer
-- access](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-robustBufferAccess)
-- 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 [robust buffer
-- access](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-robustBufferAccess)
-- 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.
--
-- - If the draw is recorded in a render pass instance with multiview
-- enabled, the maximum instance index /must/ be less than or equal to
-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_multiview.VkPhysicalDeviceMultiviewProperties'::@maxMultiviewInstanceIndex@.
--
-- - If the bound graphics pipeline was created with
-- 'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.VkPipelineSampleLocationsStateCreateInfoEXT'::@sampleLocationsEnable@
-- set to @VK_TRUE@ and the current subpass has a depth\/stencil
-- attachment, then that attachment /must/ have been created with the
-- @VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT@ bit set
--
-- == Valid Usage (Implicit)
--
-- - @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
--
-- - @buffer@ /must/ be a valid @VkBuffer@ handle
--
-- - @countBuffer@ /must/ be a valid @VkBuffer@ handle
--
-- - @commandBuffer@ /must/ be in the [recording
-- state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
--
-- - The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
-- support graphics operations
--
-- - This command /must/ only be called inside of a render pass instance
--
-- - Each of @buffer@, @commandBuffer@, and @countBuffer@ /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
--
-- \'
--
-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
-- | [Command Buffer | [Render Pass | [Supported Queue | [Pipeline |
-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
-- | Primary | Inside | Graphics | Graphics |
-- | Secondary | | | |
-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
--
-- = See Also
--
-- 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer',
-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer', @VkDeviceSize@
foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
unsafe
#endif
"vkCmdDrawIndirectCountAMD" vkCmdDrawIndirectCountAMD :: ("commandBuffer" ::: VkCommandBuffer) -> ("buffer" ::: VkBuffer) -> ("offset" ::: VkDeviceSize) -> ("countBuffer" ::: VkBuffer) -> ("countBufferOffset" ::: VkDeviceSize) -> ("maxDrawCount" ::: Word32) -> ("stride" ::: Word32) -> IO ()
-- | 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 into @buffer@ where parameters begin.
--
-- - @countBuffer@ is the buffer containing the draw count.
--
-- - @countBufferOffset@ is the byte offset into @countBuffer@ 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 in @countBuffer@ and @maxDrawCount@.
--
-- - @stride@ is the byte stride between successive sets of draw
-- parameters.
--
-- = Description
--
-- @vkCmdDrawIndexedIndirectCountAMD@ behaves similarly to
-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.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 single @VkDeviceMemory@ object
--
-- - @buffer@ /must/ have been created with the
-- @VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT@ bit set
--
-- - If @countBuffer@ is non-sparse then it /must/ be bound completely
-- and contiguously to a single @VkDeviceMemory@ object
--
-- - @countBuffer@ /must/ have been created with the
-- @VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT@ bit set
--
-- - @offset@ /must/ be a multiple of @4@
--
-- - @countBufferOffset@ /must/ be a multiple of @4@
--
-- - @stride@ /must/ be a multiple of @4@ and /must/ be greater than or
-- equal to @sizeof@(@VkDrawIndirectCommand@)
--
-- - If @maxDrawCount@ is greater than or equal to @1@, (@stride@ ×
-- (@maxDrawCount@ - 1) + @offset@ + @sizeof@(@VkDrawIndirectCommand@))
-- /must/ be less than or equal to the size of @buffer@
--
-- - If the
-- [drawIndirectFirstInstance](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-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
-- [compatible](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#renderpass-compatibility)
-- 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](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#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](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#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 count stored in @countBuffer@ is equal to @1@, (@offset@ +
-- @sizeof@(@VkDrawIndexedIndirectCommand@)) /must/ be less than or
-- equal to the size of @buffer@
--
-- - If count stored in @countBuffer@ 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 [robust buffer
-- access](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-robustBufferAccess)
-- 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 [robust buffer
-- access](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-robustBufferAccess)
-- 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.
--
-- - If the draw is recorded in a render pass instance with multiview
-- enabled, the maximum instance index /must/ be less than or equal to
-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_multiview.VkPhysicalDeviceMultiviewProperties'::@maxMultiviewInstanceIndex@.
--
-- - If the bound graphics pipeline was created with
-- 'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.VkPipelineSampleLocationsStateCreateInfoEXT'::@sampleLocationsEnable@
-- set to @VK_TRUE@ and the current subpass has a depth\/stencil
-- attachment, then that attachment /must/ have been created with the
-- @VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT@ bit set
--
-- == Valid Usage (Implicit)
--
-- - @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
--
-- - @buffer@ /must/ be a valid @VkBuffer@ handle
--
-- - @countBuffer@ /must/ be a valid @VkBuffer@ handle
--
-- - @commandBuffer@ /must/ be in the [recording
-- state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
--
-- - The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
-- support graphics operations
--
-- - This command /must/ only be called inside of a render pass instance
--
-- - Each of @buffer@, @commandBuffer@, and @countBuffer@ /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
--
-- \'
--
-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
-- | [Command Buffer | [Render Pass | [Supported Queue | [Pipeline |
-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
-- | Primary | Inside | Graphics | Graphics |
-- | Secondary | | | |
-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
--
-- = See Also
--
-- 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer',
-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer', @VkDeviceSize@
foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
unsafe
#endif
"vkCmdDrawIndexedIndirectCountAMD" vkCmdDrawIndexedIndirectCountAMD :: ("commandBuffer" ::: VkCommandBuffer) -> ("buffer" ::: VkBuffer) -> ("offset" ::: VkDeviceSize) -> ("countBuffer" ::: VkBuffer) -> ("countBufferOffset" ::: VkDeviceSize) -> ("maxDrawCount" ::: Word32) -> ("stride" ::: Word32) -> IO ()