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

Author: Faith Ekstrand <faith.ekstr...@collabora.com>
Date:   Fri Dec  8 18:18:16 2023 -0600

nvk: Rework push_indirect to take an address

The only reason we took a buffer bevore was to support the old kernel
API.  We can simplify the function now.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26615>

---

 src/nouveau/vulkan/nvk_cmd_buffer.c |  7 ++-----
 src/nouveau/vulkan/nvk_cmd_buffer.h |  6 ++----
 src/nouveau/vulkan/nvk_cmd_draw.c   | 22 +++++++++++++---------
 3 files changed, 17 insertions(+), 18 deletions(-)

diff --git a/src/nouveau/vulkan/nvk_cmd_buffer.c 
b/src/nouveau/vulkan/nvk_cmd_buffer.c
index a82aae63068..4c7b49a0865 100644
--- a/src/nouveau/vulkan/nvk_cmd_buffer.c
+++ b/src/nouveau/vulkan/nvk_cmd_buffer.c
@@ -159,14 +159,11 @@ nvk_cmd_buffer_new_push(struct nvk_cmd_buffer *cmd)
 }
 
 void
-nvk_cmd_buffer_push_indirect_buffer(struct nvk_cmd_buffer *cmd,
-                                    struct nvk_buffer *buffer,
-                                    uint64_t offset, uint64_t range)
+nvk_cmd_buffer_push_indirect(struct nvk_cmd_buffer *cmd,
+                             uint64_t addr, uint32_t range)
 {
    nvk_cmd_buffer_flush_push(cmd);
 
-   uint64_t addr = nvk_buffer_address(buffer, offset);
-
    struct nvk_cmd_push push = {
       .addr = addr,
       .range = range,
diff --git a/src/nouveau/vulkan/nvk_cmd_buffer.h 
b/src/nouveau/vulkan/nvk_cmd_buffer.h
index 9a0727710b6..4e64d409463 100644
--- a/src/nouveau/vulkan/nvk_cmd_buffer.h
+++ b/src/nouveau/vulkan/nvk_cmd_buffer.h
@@ -192,10 +192,8 @@ nvk_cmd_buffer_push(struct nvk_cmd_buffer *cmd, uint32_t 
dw_count)
 }
 
 void
-nvk_cmd_buffer_push_indirect_buffer(struct nvk_cmd_buffer *cmd,
-                                    struct nvk_buffer *buffer,
-                                    uint64_t offset,
-                                    uint64_t dw_count);
+nvk_cmd_buffer_push_indirect(struct nvk_cmd_buffer *cmd,
+                             uint64_t addr, uint32_t dw_count);
 
 void nvk_cmd_buffer_begin_graphics(struct nvk_cmd_buffer *cmd,
                                    const VkCommandBufferBeginInfo *pBeginInfo);
diff --git a/src/nouveau/vulkan/nvk_cmd_draw.c 
b/src/nouveau/vulkan/nvk_cmd_draw.c
index 1f1c6c8a137..a2a0be3ae88 100644
--- a/src/nouveau/vulkan/nvk_cmd_draw.c
+++ b/src/nouveau/vulkan/nvk_cmd_draw.c
@@ -2330,6 +2330,8 @@ nvk_CmdDrawIndirect(VkCommandBuffer commandBuffer,
    } else {
       const uint32_t max_draws_per_push =
          ((NV_PUSH_MAX_COUNT - 3) * 4) / stride;
+
+      uint64_t draw_addr = nvk_buffer_address(buffer, offset);
       while (drawCount) {
          const uint32_t count = MIN2(drawCount, max_draws_per_push);
 
@@ -2341,9 +2343,9 @@ nvk_CmdDrawIndirect(VkCommandBuffer commandBuffer,
 
          uint64_t range = count * (uint64_t)stride;
          nv_push_update_count(p, range / 4);
-         nvk_cmd_buffer_push_indirect_buffer(cmd, buffer, offset, range);
+         nvk_cmd_buffer_push_indirect(cmd, draw_addr, range);
 
-         offset += range;
+         draw_addr += range;
          drawCount -= count;
       }
    }
@@ -2443,6 +2445,8 @@ nvk_CmdDrawIndexedIndirect(VkCommandBuffer commandBuffer,
    } else {
       const uint32_t max_draws_per_push =
          ((NV_PUSH_MAX_COUNT - 3) * 4) / stride;
+
+      uint64_t draw_addr = nvk_buffer_address(buffer, offset);
       while (drawCount) {
          const uint32_t count = MIN2(drawCount, max_draws_per_push);
 
@@ -2454,9 +2458,9 @@ nvk_CmdDrawIndexedIndirect(VkCommandBuffer commandBuffer,
 
          uint64_t range = count * (uint64_t)stride;
          nv_push_update_count(p, range / 4);
-         nvk_cmd_buffer_push_indirect_buffer(cmd, buffer, offset, range);
+         nvk_cmd_buffer_push_indirect(cmd, draw_addr, range);
 
-         offset += range;
+         draw_addr += range;
          drawCount -= count;
       }
    }
@@ -2716,6 +2720,9 @@ nvk_CmdDrawIndirectByteCountEXT(VkCommandBuffer 
commandBuffer,
       .split_mode = SPLIT_MODE_NORMAL_BEGIN_NORMAL_END,
    });
 
+   uint64_t counter_addr = nvk_buffer_address(counter_buffer,
+                                              counterBufferOffset);
+
    if (nvk_cmd_buffer_3d_cls(cmd) >= TURING_A) {
       struct nv_push *p = nvk_cmd_buffer_push(cmd, 12);
       P_IMMD(p, NV9097, SET_DRAW_AUTO_START, counterOffset);
@@ -2726,8 +2733,6 @@ nvk_CmdDrawIndirectByteCountEXT(VkCommandBuffer 
commandBuffer,
       P_INLINE_DATA(p, begin);
       P_INLINE_DATA(p, instanceCount);
       P_INLINE_DATA(p, firstInstance);
-      uint64_t counter_addr = nvk_buffer_address(counter_buffer,
-            counterBufferOffset);
       P_INLINE_DATA(p, counter_addr >> 32);
       P_INLINE_DATA(p, counter_addr);
    } else {
@@ -2740,8 +2745,7 @@ nvk_CmdDrawIndirectByteCountEXT(VkCommandBuffer 
commandBuffer,
       P_INLINE_DATA(p, instanceCount);
       P_INLINE_DATA(p, firstInstance);
       nv_push_update_count(p, 1);
-      nvk_cmd_buffer_push_indirect_buffer(cmd, counter_buffer,
-            counterBufferOffset, 4);
+      nvk_cmd_buffer_push_indirect(cmd, counter_addr, 4);
    }
 }
 
@@ -2840,7 +2844,7 @@ nvk_CmdBeginTransformFeedbackEXT(VkCommandBuffer 
commandBuffer,
          P_1INC(p, NV9097, CALL_MME_MACRO(NVK_MME_XFB_COUNTER_LOAD));
          P_INLINE_DATA(p, cb_idx);
          nv_push_update_count(p, 1);
-         nvk_cmd_buffer_push_indirect_buffer(cmd, buffer, offset, 4);
+         nvk_cmd_buffer_push_indirect(cmd, cb_addr, 4);
       }
    }
 }

Reply via email to