Reviewed-by: Samuel Pitoiset <[email protected]>

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'),

_______________________________________________
mesa-dev mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to