From 06e47e8776c89b8167a9d765a8e2ecbfc0b5c8b2 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Fri, 14 Feb 2025 12:04:35 +0100 Subject: [PATCH] radv: compute VBO addr at bind time Signed-off-by: Samuel Pitoiset Part-of: --- src/amd/vulkan/radv_cmd_buffer.c | 13 +++---------- src/amd/vulkan/radv_cmd_buffer.h | 1 + 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c index 743bfef6b64..7c499dc66fc 100644 --- a/src/amd/vulkan/radv_cmd_buffer.c +++ b/src/amd/vulkan/radv_cmd_buffer.c @@ -5807,6 +5807,8 @@ radv_get_vbo_info(const struct radv_cmd_buffer *cmd_buffer, uint32_t idx, struct memset(vbo_info, 0, sizeof(*vbo_info)); vbo_info->binding = binding; + vbo_info->va = cmd_buffer->vertex_bindings[binding].addr; + vbo_info->size = cmd_buffer->vertex_bindings[binding].size; vbo_info->stride = cmd_buffer->vertex_bindings[binding].stride; vbo_info->attrib_offset = vi_state->offsets[idx]; @@ -5826,16 +5828,6 @@ radv_get_vbo_info(const struct radv_cmd_buffer *cmd_buffer, uint32_t idx, struct vtx_info->dst_sel | S_008F0C_NUM_FORMAT((hw_format >> 4) & 0x7) | S_008F0C_DATA_FORMAT(hw_format & 0xf); } } - - const struct radv_buffer *buffer = cmd_buffer->vertex_binding_buffers[binding]; - - if (!buffer) - return; - - const uint32_t offset = cmd_buffer->vertex_bindings[binding].offset; - - vbo_info->va = buffer->addr + offset; - vbo_info->size = cmd_buffer->vertex_bindings[binding].size; } static void @@ -6999,6 +6991,7 @@ radv_CmdBindVertexBuffers2(VkCommandBuffer commandBuffer, uint32_t firstBinding, cmd_buffer->vertex_binding_buffers[idx] = buffer; vb[idx].offset = pOffsets[i]; + vb[idx].addr = buffer ? buffer->addr + pOffsets[i] : 0; vb[idx].size = buffer ? vk_buffer_range(&buffer->vk, pOffsets[i], size) : 0; vb[idx].stride = stride; diff --git a/src/amd/vulkan/radv_cmd_buffer.h b/src/amd/vulkan/radv_cmd_buffer.h index 419d0afb1a6..1b06bf6268c 100644 --- a/src/amd/vulkan/radv_cmd_buffer.h +++ b/src/amd/vulkan/radv_cmd_buffer.h @@ -144,6 +144,7 @@ enum radv_cmd_flush_bits { }; struct radv_vertex_binding { + uint64_t addr; VkDeviceSize offset; VkDeviceSize size; VkDeviceSize stride;