[Mesa-dev] [PATCH 2/2] radv: Implement VK_KHR_draw_indirect_count.
Samuel Pitoiset
samuel.pitoiset at gmail.com
Mon May 28 09:28:27 UTC 2018
Reviewed-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
On 05/26/2018 11:10 PM, Bas Nieuwenhuizen wrote:
> Literally the same as the AMD ext.
>
> Passes *indirect_draw_count* CTS tests.
> ---
> src/amd/vulkan/radv_cmd_buffer.c | 49 +++++++++++++++++++++++++++++++
> src/amd/vulkan/radv_extensions.py | 1 +
> 2 files changed, 50 insertions(+)
>
> diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c
> index 5ab577b4c59..24dadf1d4e8 100644
> --- a/src/amd/vulkan/radv_cmd_buffer.c
> +++ b/src/amd/vulkan/radv_cmd_buffer.c
> @@ -3384,6 +3384,55 @@ void radv_CmdDrawIndexedIndirectCountAMD(
> radv_draw(cmd_buffer, &info);
> }
>
> +void radv_CmdDrawIndirectCountKHR(
> + VkCommandBuffer commandBuffer,
> + VkBuffer _buffer,
> + VkDeviceSize offset,
> + VkBuffer _countBuffer,
> + VkDeviceSize countBufferOffset,
> + uint32_t maxDrawCount,
> + uint32_t stride)
> +{
> + RADV_FROM_HANDLE(radv_cmd_buffer, cmd_buffer, commandBuffer);
> + RADV_FROM_HANDLE(radv_buffer, buffer, _buffer);
> + RADV_FROM_HANDLE(radv_buffer, count_buffer, _countBuffer);
> + struct radv_draw_info info = {};
> +
> + info.count = maxDrawCount;
> + info.indirect = buffer;
> + info.indirect_offset = offset;
> + info.count_buffer = count_buffer;
> + info.count_buffer_offset = countBufferOffset;
> + info.stride = stride;
> +
> + radv_draw(cmd_buffer, &info);
> +}
> +
> +void radv_CmdDrawIndexedIndirectCountKHR(
> + VkCommandBuffer commandBuffer,
> + VkBuffer _buffer,
> + VkDeviceSize offset,
> + VkBuffer _countBuffer,
> + VkDeviceSize countBufferOffset,
> + uint32_t maxDrawCount,
> + uint32_t stride)
> +{
> + RADV_FROM_HANDLE(radv_cmd_buffer, cmd_buffer, commandBuffer);
> + RADV_FROM_HANDLE(radv_buffer, buffer, _buffer);
> + RADV_FROM_HANDLE(radv_buffer, count_buffer, _countBuffer);
> + struct radv_draw_info info = {};
> +
> + info.indexed = true;
> + info.count = maxDrawCount;
> + info.indirect = buffer;
> + info.indirect_offset = offset;
> + info.count_buffer = count_buffer;
> + info.count_buffer_offset = countBufferOffset;
> + info.stride = stride;
> +
> + radv_draw(cmd_buffer, &info);
> +}
> +
> struct radv_dispatch_info {
> /**
> * Determine the layout of the grid (in block units) to be used.
> diff --git a/src/amd/vulkan/radv_extensions.py b/src/amd/vulkan/radv_extensions.py
> index ec34551696e..a5b5a8dc34e 100644
> --- a/src/amd/vulkan/radv_extensions.py
> +++ b/src/amd/vulkan/radv_extensions.py
> @@ -56,6 +56,7 @@ EXTENSIONS = [
> Extension('VK_KHR_descriptor_update_template', 1, True),
> Extension('VK_KHR_device_group', 1, True),
> Extension('VK_KHR_device_group_creation', 1, True),
> + Extension('VK_KHR_draw_indirect_count', 1, True),
> Extension('VK_KHR_external_fence', 1, 'device->rad_info.has_syncobj_wait_for_submit'),
> Extension('VK_KHR_external_fence_capabilities', 1, True),
> Extension('VK_KHR_external_fence_fd', 1, 'device->rad_info.has_syncobj_wait_for_submit'),
>
More information about the mesa-dev
mailing list