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

Author: Samuel Pitoiset <samuel.pitoi...@gmail.com>
Date:   Fri Nov 10 17:21:17 2023 +0100

radv: set the stream VA for DGC graphics

This will be used to emit indirect draws when needed.

Signed-off-by: Samuel Pitoiset <samuel.pitoi...@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26172>

---

 src/amd/vulkan/radv_device_generated_commands.c | 26 +++++++++++++------------
 1 file changed, 14 insertions(+), 12 deletions(-)

diff --git a/src/amd/vulkan/radv_device_generated_commands.c 
b/src/amd/vulkan/radv_device_generated_commands.c
index 997b5c17402..76f730e37b6 100644
--- a/src/amd/vulkan/radv_device_generated_commands.c
+++ b/src/amd/vulkan/radv_device_generated_commands.c
@@ -1537,7 +1537,6 @@ radv_prepare_dgc_compute(struct radv_cmd_buffer 
*cmd_buffer, const VkGeneratedCo
 {
    VK_FROM_HANDLE(radv_indirect_command_layout, layout, 
pGeneratedCommandsInfo->indirectCommandsLayout);
    VK_FROM_HANDLE(radv_pipeline, pipeline, pGeneratedCommandsInfo->pipeline);
-   VK_FROM_HANDLE(radv_buffer, stream_buffer, 
pGeneratedCommandsInfo->pStreams[0].buffer);
    struct radv_compute_pipeline *compute_pipeline = 
radv_pipeline_to_compute(pipeline);
    struct radv_shader *cs = radv_get_shader(compute_pipeline->base.shaders, 
MESA_SHADER_COMPUTE);
 
@@ -1555,13 +1554,9 @@ radv_prepare_dgc_compute(struct radv_cmd_buffer 
*cmd_buffer, const VkGeneratedCo
       dispatch_initiator |= S_00B800_CS_W32_EN(1);
    }
 
-   uint64_t stream_addr =
-      radv_buffer_get_va(stream_buffer->bo) + stream_buffer->offset + 
pGeneratedCommandsInfo->pStreams[0].offset;
-
    params->dispatch_params_offset = layout->dispatch_params_offset;
    params->dispatch_initiator = dispatch_initiator;
    params->is_dispatch = 1;
-   params->stream_addr = stream_addr;
 
    const struct radv_userdata_info *loc = radv_get_user_sgpr(cs, 
AC_UD_CS_GRID_SIZE);
    if (loc->sgpr_idx != -1) {
@@ -1575,6 +1570,7 @@ radv_prepare_dgc(struct radv_cmd_buffer *cmd_buffer, 
const VkGeneratedCommandsIn
    VK_FROM_HANDLE(radv_indirect_command_layout, layout, 
pGeneratedCommandsInfo->indirectCommandsLayout);
    VK_FROM_HANDLE(radv_pipeline, pipeline, pGeneratedCommandsInfo->pipeline);
    VK_FROM_HANDLE(radv_buffer, prep_buffer, 
pGeneratedCommandsInfo->preprocessBuffer);
+   VK_FROM_HANDLE(radv_buffer, stream_buffer, 
pGeneratedCommandsInfo->pStreams[0].buffer);
    struct radv_meta_saved_state saved_state;
    unsigned upload_offset, upload_size;
    struct radv_buffer token_buffer;
@@ -1589,13 +1585,19 @@ radv_prepare_dgc(struct radv_cmd_buffer *cmd_buffer, 
const VkGeneratedCommandsIn
    uint64_t upload_addr =
       radv_buffer_get_va(prep_buffer->bo) + prep_buffer->offset + 
pGeneratedCommandsInfo->preprocessOffset;
 
-   struct radv_dgc_params params = {.cmd_buf_stride = cmd_stride,
-                                    .cmd_buf_size = cmd_buf_size,
-                                    .upload_addr = (uint32_t)upload_addr,
-                                    .upload_stride = upload_stride,
-                                    .sequence_count = 
pGeneratedCommandsInfo->sequencesCount,
-                                    .stream_stride = layout->input_stride,
-                                    .use_preamble = 
radv_dgc_use_preamble(pGeneratedCommandsInfo)};
+   uint64_t stream_addr =
+      radv_buffer_get_va(stream_buffer->bo) + stream_buffer->offset + 
pGeneratedCommandsInfo->pStreams[0].offset;
+
+   struct radv_dgc_params params = {
+      .cmd_buf_stride = cmd_stride,
+      .cmd_buf_size = cmd_buf_size,
+      .upload_addr = (uint32_t)upload_addr,
+      .upload_stride = upload_stride,
+      .sequence_count = pGeneratedCommandsInfo->sequencesCount,
+      .stream_stride = layout->input_stride,
+      .use_preamble = radv_dgc_use_preamble(pGeneratedCommandsInfo),
+      .stream_addr = stream_addr,
+   };
 
    upload_size = pipeline->push_constant_size + 16 * 
pipeline->dynamic_offset_count +
                  sizeof(layout->push_constant_offsets) + 
ARRAY_SIZE(pipeline->shaders) * 12;

Reply via email to