diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c index bc1334feed6..1b8f67cf366 100644 --- a/src/amd/vulkan/radv_cmd_buffer.c +++ b/src/amd/vulkan/radv_cmd_buffer.c @@ -840,6 +840,7 @@ radv_ace_internal_finalize(struct radv_cmd_buffer *cmd_buffer) radv_emit_clear_data(cmd_buffer, V_370_ME, gfx2ace_va, 8); } + device->ws->cs_add_buffers(ace_cs, cmd_buffer->cs); return device->ws->cs_finalize(ace_cs); } diff --git a/src/amd/vulkan/radv_radeon_winsys.h b/src/amd/vulkan/radv_radeon_winsys.h index dd7a80e0192..0fad6f44b71 100644 --- a/src/amd/vulkan/radv_radeon_winsys.h +++ b/src/amd/vulkan/radv_radeon_winsys.h @@ -288,6 +288,8 @@ struct radeon_winsys { void (*cs_add_buffer)(struct radeon_cmdbuf *cs, struct radeon_winsys_bo *bo); + void (*cs_add_buffers)(struct radeon_cmdbuf *to, struct radeon_cmdbuf *from); + void (*cs_execute_secondary)(struct radeon_cmdbuf *parent, struct radeon_cmdbuf *child, bool allow_ib2); diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c index f4c6fd79c8a..31fd7f1535e 100644 --- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c +++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c @@ -618,6 +618,22 @@ radv_amdgpu_cs_add_buffer(struct radeon_cmdbuf *_cs, struct radeon_winsys_bo *_b radv_amdgpu_cs_add_buffer_internal(cs, bo->bo_handle, bo->priority); } +static void +radv_amdgpu_cs_add_buffers(struct radeon_cmdbuf *_to, struct radeon_cmdbuf *_from) +{ + struct radv_amdgpu_cs *from = radv_amdgpu_cs(_from); + struct radv_amdgpu_cs *to = radv_amdgpu_cs(_to); + + for (unsigned i = 0; i < from->num_buffers; ++i) { + radv_amdgpu_cs_add_buffer_internal(to, from->handles[i].bo_handle, + from->handles[i].bo_priority); + } + + for (unsigned i = 0; i < from->num_virtual_buffers; ++i) { + radv_amdgpu_cs_add_buffer(&to->base, from->virtual_buffers[i]); + } +} + static void radv_amdgpu_cs_execute_secondary(struct radeon_cmdbuf *_parent, struct radeon_cmdbuf *_child, bool allow_ib2) @@ -1885,6 +1901,7 @@ radv_amdgpu_cs_init_functions(struct radv_amdgpu_winsys *ws) ws->base.cs_finalize = radv_amdgpu_cs_finalize; ws->base.cs_reset = radv_amdgpu_cs_reset; ws->base.cs_add_buffer = radv_amdgpu_cs_add_buffer; + ws->base.cs_add_buffers = radv_amdgpu_cs_add_buffers; ws->base.cs_execute_secondary = radv_amdgpu_cs_execute_secondary; ws->base.cs_submit = radv_amdgpu_winsys_cs_submit; ws->base.cs_dump = radv_amdgpu_winsys_cs_dump;