public class KHRDrawIndirectCount
extends java.lang.Object
VK_AMD_draw_indirect_count extension. This extension allows an application to source the number of draw calls for indirect draw calls from a buffer. This enables applications to generate arbitrary amounts of draw commands and execute them without host intervention.
VK_KHR_draw_indirect_count| Modifier and Type | Field and Description |
|---|---|
static java.lang.String |
VK_KHR_DRAW_INDIRECT_COUNT_EXTENSION_NAME
The extension name.
|
static int |
VK_KHR_DRAW_INDIRECT_COUNT_SPEC_VERSION
The extension specification version.
|
| Modifier and Type | Method and Description |
|---|---|
static void |
vkCmdDrawIndexedIndirectCountKHR(org.lwjgl.vulkan.VkCommandBuffer commandBuffer,
long buffer,
long offset,
long countBuffer,
long countBufferOffset,
int maxDrawCount,
int stride)
Perform an indexed indirect draw with the draw count sourced from a buffer.
|
static void |
vkCmdDrawIndirectCountKHR(org.lwjgl.vulkan.VkCommandBuffer commandBuffer,
long buffer,
long offset,
long countBuffer,
long countBufferOffset,
int maxDrawCount,
int stride)
Perform an indirect draw with the draw count sourced from a buffer.
|
public static final int VK_KHR_DRAW_INDIRECT_COUNT_SPEC_VERSION
public static final java.lang.String VK_KHR_DRAW_INDIRECT_COUNT_EXTENSION_NAME
public static void vkCmdDrawIndirectCountKHR(org.lwjgl.vulkan.VkCommandBuffer commandBuffer,
long buffer,
long offset,
long countBuffer,
long countBufferOffset,
int maxDrawCount,
int stride)
To record a non-indexed draw call with a draw call count sourced from a buffer, call:
void vkCmdDrawIndirectCountKHR(
VkCommandBuffer commandBuffer,
VkBuffer buffer,
VkDeviceSize offset,
VkBuffer countBuffer,
VkDeviceSize countBufferOffset,
uint32_t maxDrawCount,
uint32_t stride);
or the equivalent command
void vkCmdDrawIndirectCountAMD(
VkCommandBuffer commandBuffer,
VkBuffer buffer,
VkDeviceSize offset,
VkBuffer countBuffer,
VkDeviceSize countBufferOffset,
uint32_t maxDrawCount,
uint32_t stride);
vkCmdDrawIndirectCountKHR behaves similarly to CmdDrawIndirect 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.
VkImageView is sampled with FILTER_LINEAR as a result of this command, then the image view’s format features must contain FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BITVkImageView is accessed using atomic operations as a result of this command, then the image view’s format features must contain FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BITVkImageView is sampled with FILTER_CUBIC_EXT as a result of this command, then the image view’s format features must contain FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXTVkImageView being sampled with FILTER_CUBIC_EXT as a result of this command must have a VkImageViewType and format that supports cubic filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubic returned by vkGetPhysicalDeviceImageFormatProperties2VkImageView being sampled with FILTER_CUBIC_EXT with a reduction mode of either SAMPLER_REDUCTION_MODE_MIN_EXT or SAMPLER_REDUCTION_MODE_MAX_EXT as a result of this command must have a VkImageViewType and format that supports cubic filtering together with minmax filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubicMinmax returned by vkGetPhysicalDeviceImageFormatProperties2VkImage created with a VkImageCreateInfo::flags containing IMAGE_CREATE_CORNER_SAMPLED_BIT_NV sampled as a result of this command must only be sampled using a VkSamplerAddressMode of SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE.VkPipeline bound to the pipeline bind point used by this command, a descriptor set must have been bound to n at the same pipeline bind point, with a VkPipelineLayout that is compatible for set n, with the VkPipelineLayout used to create the current VkPipeline, as described in Pipeline Layout CompatibilityVkPipeline bound to the pipeline bind point used by this command, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline, as described in Pipeline Layout CompatibilityvkCmdBindDescriptorSets, must be valid if they are statically used by the VkPipeline bound to the pipeline bind point used by this commandVkPipeline object bound to the pipeline bind point used by this command requires any dynamic state, that state must have been set for commandBufferVkPipeline object bound to the pipeline bind point used by this command accesses a VkSampler object that uses unnormalized coordinates, that sampler must not be used to sample from any VkImage with a VkImageView of the type IMAGE_VIEW_TYPE_3D, IMAGE_VIEW_TYPE_CUBE, IMAGE_VIEW_TYPE_1D_ARRAY, IMAGE_VIEW_TYPE_2D_ARRAY or IMAGE_VIEW_TYPE_CUBE_ARRAY, in any shader stageVkPipeline object bound to the pipeline bind point used by this command accesses a VkSampler object that uses unnormalized coordinates, that sampler 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 stageVkPipeline object bound to the pipeline bind point used by this command accesses a VkSampler object that uses unnormalized coordinates, that sampler 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 stageVkPipeline object bound to the pipeline bind point used by this command accesses a uniform buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind pointVkPipeline object bound to the pipeline bind point used by this command accesses a storage buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind pointcommandBuffer is an unprotected command buffer, any resource accessed by the VkPipeline object bound to the pipeline bind point used by this command must not be a protected resourcerenderPass member of the VkGraphicsPipelineCreateInfo structure specified when creating the VkPipeline bound to PIPELINE_BIND_POINT_GRAPHICS.subpass member of the VkGraphicsPipelineCreateInfo structure specified when creating the VkPipeline bound to PIPELINE_BIND_POINT_GRAPHICS.VkPhysicalDeviceMultiviewProperties::maxMultiviewInstanceIndex.VkPipelineSampleLocationsStateCreateInfoEXT::sampleLocationsEnable set to TRUE and the current subpass has a depth/stencil attachment, then that attachment must have been created with the IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT bit setbuffer is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory objectbuffer must have been created with the BUFFER_USAGE_INDIRECT_BUFFER_BIT bit setoffset must be a multiple of 4commandBuffer must not be a protected command buffercountBuffer is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory objectcountBuffer must have been created with the BUFFER_USAGE_INDIRECT_BUFFER_BIT bit setcountBufferOffset must be a multiple of 4countBuffer must be less than or equal to VkPhysicalDeviceLimits::maxDrawIndirectCountstride must be a multiple of 4 and must be greater than or equal to sizeof(VkDrawIndirectCommand)maxDrawCount is greater than or equal to 1, (stride × (maxDrawCount - 1) + offset + sizeof(VkDrawIndirectCommand)) must be less than or equal to the size of buffercountBuffer is equal to 1, (offset + sizeof(VkDrawIndirectCommand)) must be less than or equal to the size of buffercountBuffer is greater than 1, (stride × (drawCount - 1) + offset + sizeof(VkDrawIndirectCommand)) must be less than or equal to the size of buffercommandBuffer must be a valid VkCommandBuffer handlebuffer must be a valid VkBuffer handlecountBuffer must be a valid VkBuffer handlecommandBuffer must be in the recording stateVkCommandPool that commandBuffer was allocated from must support graphics operationsbuffer, commandBuffer, and countBuffer must have been created, allocated, or retrieved from the same VkDevicecommandBuffer must be externally synchronizedVkCommandPool that commandBuffer was allocated from must be externally synchronized| Command Buffer Levels | Render Pass Scope | Supported Queue Types | Pipeline Type |
|---|---|---|---|
| Primary Secondary | Inside | Graphics | Graphics |
commandBuffer - the command buffer into which the command is recorded.buffer - the buffer containing draw parameters.offset - the byte offset into buffer where parameters begin.countBuffer - the buffer containing the draw count.countBufferOffset - 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 - the byte stride between successive sets of draw parameters.public static void vkCmdDrawIndexedIndirectCountKHR(org.lwjgl.vulkan.VkCommandBuffer commandBuffer,
long buffer,
long offset,
long countBuffer,
long countBufferOffset,
int maxDrawCount,
int stride)
To record an indexed draw call with a draw call count sourced from a buffer, call:
void vkCmdDrawIndexedIndirectCountKHR(
VkCommandBuffer commandBuffer,
VkBuffer buffer,
VkDeviceSize offset,
VkBuffer countBuffer,
VkDeviceSize countBufferOffset,
uint32_t maxDrawCount,
uint32_t stride);
or the equivalent command
void vkCmdDrawIndexedIndirectCountAMD(
VkCommandBuffer commandBuffer,
VkBuffer buffer,
VkDeviceSize offset,
VkBuffer countBuffer,
VkDeviceSize countBufferOffset,
uint32_t maxDrawCount,
uint32_t stride);
vkCmdDrawIndexedIndirectCountKHR behaves similarly to CmdDrawIndexedIndirect 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.
VkImageView is sampled with FILTER_LINEAR as a result of this command, then the image view’s format features must contain FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BITVkImageView is accessed using atomic operations as a result of this command, then the image view’s format features must contain FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BITVkImageView is sampled with FILTER_CUBIC_EXT as a result of this command, then the image view’s format features must contain FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXTVkImageView being sampled with FILTER_CUBIC_EXT as a result of this command must have a VkImageViewType and format that supports cubic filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubic returned by vkGetPhysicalDeviceImageFormatProperties2VkImageView being sampled with FILTER_CUBIC_EXT with a reduction mode of either SAMPLER_REDUCTION_MODE_MIN_EXT or SAMPLER_REDUCTION_MODE_MAX_EXT as a result of this command must have a VkImageViewType and format that supports cubic filtering together with minmax filtering, as specified by VkFilterCubicImageViewImageFormatPropertiesEXT::filterCubicMinmax returned by vkGetPhysicalDeviceImageFormatProperties2VkImage created with a VkImageCreateInfo::flags containing IMAGE_CREATE_CORNER_SAMPLED_BIT_NV sampled as a result of this command must only be sampled using a VkSamplerAddressMode of SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE.VkPipeline bound to the pipeline bind point used by this command, a descriptor set must have been bound to n at the same pipeline bind point, with a VkPipelineLayout that is compatible for set n, with the VkPipelineLayout used to create the current VkPipeline, as described in Pipeline Layout CompatibilityVkPipeline bound to the pipeline bind point used by this command, a push constant value must have been set for the same pipeline bind point, with a VkPipelineLayout that is compatible for push constants, with the VkPipelineLayout used to create the current VkPipeline, as described in Pipeline Layout CompatibilityvkCmdBindDescriptorSets, must be valid if they are statically used by the VkPipeline bound to the pipeline bind point used by this commandVkPipeline object bound to the pipeline bind point used by this command requires any dynamic state, that state must have been set for commandBufferVkPipeline object bound to the pipeline bind point used by this command accesses a VkSampler object that uses unnormalized coordinates, that sampler must not be used to sample from any VkImage with a VkImageView of the type IMAGE_VIEW_TYPE_3D, IMAGE_VIEW_TYPE_CUBE, IMAGE_VIEW_TYPE_1D_ARRAY, IMAGE_VIEW_TYPE_2D_ARRAY or IMAGE_VIEW_TYPE_CUBE_ARRAY, in any shader stageVkPipeline object bound to the pipeline bind point used by this command accesses a VkSampler object that uses unnormalized coordinates, that sampler 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 stageVkPipeline object bound to the pipeline bind point used by this command accesses a VkSampler object that uses unnormalized coordinates, that sampler 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 stageVkPipeline object bound to the pipeline bind point used by this command accesses a uniform buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind pointVkPipeline object bound to the pipeline bind point used by this command accesses a storage buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind pointcommandBuffer is an unprotected command buffer, any resource accessed by the VkPipeline object bound to the pipeline bind point used by this command must not be a protected resourcerenderPass member of the VkGraphicsPipelineCreateInfo structure specified when creating the VkPipeline bound to PIPELINE_BIND_POINT_GRAPHICS.subpass member of the VkGraphicsPipelineCreateInfo structure specified when creating the VkPipeline bound to PIPELINE_BIND_POINT_GRAPHICS.VkPhysicalDeviceMultiviewProperties::maxMultiviewInstanceIndex.VkPipelineSampleLocationsStateCreateInfoEXT::sampleLocationsEnable set to TRUE and the current subpass has a depth/stencil attachment, then that attachment must have been created with the IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT bit setbuffer is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory objectbuffer must have been created with the BUFFER_USAGE_INDIRECT_BUFFER_BIT bit setoffset must be a multiple of 4commandBuffer must not be a protected command buffercountBuffer is non-sparse then it must be bound completely and contiguously to a single VkDeviceMemory objectcountBuffer must have been created with the BUFFER_USAGE_INDIRECT_BUFFER_BIT bit setcountBufferOffset must be a multiple of 4countBuffer must be less than or equal to VkPhysicalDeviceLimits::maxDrawIndirectCountstride must be a multiple of 4 and must be greater than or equal to sizeof(VkDrawIndexedIndirectCommand)maxDrawCount is greater than or equal to 1, (stride × (maxDrawCount - 1) + offset + sizeof(VkDrawIndexedIndirectCommand)) must be less than or equal to the size of buffercountBuffer is equal to 1, (offset + sizeof(VkDrawIndexedIndirectCommand)) must be less than or equal to the size of buffercountBuffer is greater than 1, (stride × (drawCount - 1) + offset + sizeof(VkDrawIndexedIndirectCommand)) must be less than or equal to the size of buffercommandBuffer must be a valid VkCommandBuffer handlebuffer must be a valid VkBuffer handlecountBuffer must be a valid VkBuffer handlecommandBuffer must be in the recording stateVkCommandPool that commandBuffer was allocated from must support graphics operationsbuffer, commandBuffer, and countBuffer must have been created, allocated, or retrieved from the same VkDevicecommandBuffer must be externally synchronizedVkCommandPool that commandBuffer was allocated from must be externally synchronized| Command Buffer Levels | Render Pass Scope | Supported Queue Types | Pipeline Type |
|---|---|---|---|
| Primary Secondary | Inside | Graphics | Graphics |
commandBuffer - the command buffer into which the command is recorded.buffer - the buffer containing draw parameters.offset - the byte offset into buffer where parameters begin.countBuffer - the buffer containing the draw count.countBufferOffset - 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 - the byte stride between successive sets of draw parameters.Copyright LWJGL. All Rights Reserved. License terms.