Mesa (main): anv: share some code between vkCmdDrawIndirectCount and vkCmdDrawIndexedIndirectCount

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Jul 21 09:37:08 UTC 2021


Module: Mesa
Branch: main
Commit: 8250f2ae29eecf21a3270f4e45282f0612cdddf0
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=8250f2ae29eecf21a3270f4e45282f0612cdddf0

Author: Marcin Ślusarz <marcin.slusarz at intel.com>
Date:   Tue Jul 20 12:00:41 2021 +0200

anv: share some code between vkCmdDrawIndirectCount and vkCmdDrawIndexedIndirectCount

Signed-off-by: Marcin Ślusarz <marcin.slusarz at intel.com>
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11975>

---

 src/intel/vulkan/genX_cmd_buffer.c | 61 +++++++++++++++++++-------------------
 1 file changed, 30 insertions(+), 31 deletions(-)

diff --git a/src/intel/vulkan/genX_cmd_buffer.c b/src/intel/vulkan/genX_cmd_buffer.c
index 4f39e01ad3f..4ad14393848 100644
--- a/src/intel/vulkan/genX_cmd_buffer.c
+++ b/src/intel/vulkan/genX_cmd_buffer.c
@@ -4371,12 +4371,15 @@ void genX(CmdDrawIndexedIndirect)(
 static struct mi_value
 prepare_for_draw_count_predicate(struct anv_cmd_buffer *cmd_buffer,
                                  struct mi_builder *b,
-                                 struct anv_address count_address,
-                                 const bool conditional_render_enabled)
+                                 struct anv_buffer *count_buffer,
+                                 uint64_t countBufferOffset)
 {
+   struct anv_address count_address =
+         anv_address_add(count_buffer->address, countBufferOffset);
+
    struct mi_value ret = mi_imm(0);
 
-   if (conditional_render_enabled) {
+   if (cmd_buffer->state.conditional_render_enabled) {
 #if GFX_VERx10 >= 75
       ret = mi_new_gpr(b);
       mi_store(b, mi_value_ref(b, ret), mi_mem32(count_address));
@@ -4452,6 +4455,24 @@ emit_draw_count_predicate_with_conditional_render(
 }
 #endif
 
+static void
+emit_draw_count_predicate_cond(struct anv_cmd_buffer *cmd_buffer,
+                               struct mi_builder *b,
+                               uint32_t draw_index,
+                               struct mi_value max)
+{
+#if GFX_VERx10 >= 75
+   if (cmd_buffer->state.conditional_render_enabled) {
+      emit_draw_count_predicate_with_conditional_render(
+            cmd_buffer, b, draw_index, mi_value_ref(b, max));
+   } else {
+      emit_draw_count_predicate(cmd_buffer, b, draw_index);
+   }
+#else
+   emit_draw_count_predicate(cmd_buffer, b, draw_index);
+#endif
+}
+
 void genX(CmdDrawIndirectCount)(
     VkCommandBuffer                             commandBuffer,
     VkBuffer                                    _buffer,
@@ -4475,25 +4496,14 @@ void genX(CmdDrawIndirectCount)(
 
    struct mi_builder b;
    mi_builder_init(&b, &cmd_buffer->device->info, &cmd_buffer->batch);
-   struct anv_address count_address =
-      anv_address_add(count_buffer->address, countBufferOffset);
    struct mi_value max =
-      prepare_for_draw_count_predicate(cmd_buffer, &b, count_address,
-                                       cmd_state->conditional_render_enabled);
+      prepare_for_draw_count_predicate(cmd_buffer, &b,
+                                       count_buffer, countBufferOffset);
 
    for (uint32_t i = 0; i < maxDrawCount; i++) {
       struct anv_address draw = anv_address_add(buffer->address, offset);
 
-#if GFX_VERx10 >= 75
-      if (cmd_state->conditional_render_enabled) {
-         emit_draw_count_predicate_with_conditional_render(
-            cmd_buffer, &b, i, mi_value_ref(&b, max));
-      } else {
-         emit_draw_count_predicate(cmd_buffer, &b, i);
-      }
-#else
-      emit_draw_count_predicate(cmd_buffer, &b, i);
-#endif
+      emit_draw_count_predicate_cond(cmd_buffer, &b, i, max);
 
       if (vs_prog_data->uses_firstvertex ||
           vs_prog_data->uses_baseinstance)
@@ -4546,25 +4556,14 @@ void genX(CmdDrawIndexedIndirectCount)(
 
    struct mi_builder b;
    mi_builder_init(&b, &cmd_buffer->device->info, &cmd_buffer->batch);
-   struct anv_address count_address =
-      anv_address_add(count_buffer->address, countBufferOffset);
    struct mi_value max =
-      prepare_for_draw_count_predicate(cmd_buffer, &b, count_address,
-                                       cmd_state->conditional_render_enabled);
+      prepare_for_draw_count_predicate(cmd_buffer, &b,
+                                       count_buffer, countBufferOffset);
 
    for (uint32_t i = 0; i < maxDrawCount; i++) {
       struct anv_address draw = anv_address_add(buffer->address, offset);
 
-#if GFX_VERx10 >= 75
-      if (cmd_state->conditional_render_enabled) {
-         emit_draw_count_predicate_with_conditional_render(
-            cmd_buffer, &b, i, mi_value_ref(&b, max));
-      } else {
-         emit_draw_count_predicate(cmd_buffer, &b, i);
-      }
-#else
-      emit_draw_count_predicate(cmd_buffer, &b, i);
-#endif
+      emit_draw_count_predicate_cond(cmd_buffer, &b, i, max);
 
       /* TODO: We need to stomp base vertex to 0 somehow */
       if (vs_prog_data->uses_firstvertex ||



More information about the mesa-commit mailing list