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;