radv/amdgpu: Add continue preambles to fallback submit.

When splitting a larger submission into several smaller ones,
the flushing at the beginning of the initial preambles is not
really necessary, so it'll be better to use the continue
preambles for this purpose.

Signed-off-by: Timur Kristóf <timur.kristof@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22354>
This commit is contained in:
Timur Kristóf
2023-04-04 23:14:10 +02:00
committed by Marge Bot
parent 6844506c3d
commit 103ebe96c0
@@ -944,7 +944,9 @@ radv_amdgpu_winsys_cs_submit_fallback(struct radv_amdgpu_ctx *ctx, int queue_idx
struct radv_winsys_sem_info *sem_info,
struct radeon_cmdbuf **cs_array, unsigned cs_count,
struct radeon_cmdbuf **initial_preamble_cs,
unsigned initial_preamble_count, bool uses_shadow_regs)
unsigned initial_preamble_count,
struct radeon_cmdbuf **continue_preamble_cs,
unsigned continue_preamble_count, bool uses_shadow_regs)
{
VkResult result;
@@ -952,7 +954,7 @@ radv_amdgpu_winsys_cs_submit_fallback(struct radv_amdgpu_ctx *ctx, int queue_idx
struct radv_amdgpu_cs *last_cs = radv_amdgpu_cs(cs_array[cs_count - 1]);
struct radv_amdgpu_winsys *ws = last_cs->ws;
/* Get the BO list. */
/* Get the BO list. Assume continue preambles don't need more. */
struct drm_amdgpu_bo_list_entry *handles = NULL;
unsigned num_handles = 0;
u_rwlock_rdlock(&ws->global_bo_list.lock);
@@ -974,11 +976,11 @@ radv_amdgpu_winsys_cs_submit_fallback(struct radv_amdgpu_ctx *ctx, int queue_idx
};
assert(cs_count);
assert(initial_preamble_count < RADV_MAX_IBS_PER_SUBMIT);
assert(MAX2(initial_preamble_count, continue_preamble_count) < RADV_MAX_IBS_PER_SUBMIT);
for (unsigned cs_idx = 0; cs_idx < cs_count;) {
struct radeon_cmdbuf **preambles = initial_preamble_cs;
const unsigned preamble_count = initial_preamble_count;
struct radeon_cmdbuf **preambles = cs_idx ? continue_preamble_cs : initial_preamble_cs;
const unsigned preamble_count = cs_idx ? continue_preamble_count : initial_preamble_count;
const unsigned ib_per_submit = RADV_MAX_IBS_PER_SUBMIT - preamble_count;
unsigned num_submitted_ibs = 0;
@@ -1334,7 +1336,8 @@ radv_amdgpu_winsys_cs_submit_internal(struct radv_amdgpu_ctx *ctx,
} else {
result = radv_amdgpu_winsys_cs_submit_fallback(
ctx, submit->queue_index, sem_info, submit->cs_array, submit->cs_count,
submit->initial_preamble_cs, submit->initial_preamble_count, submit->uses_shadow_regs);
submit->initial_preamble_cs, submit->initial_preamble_count, submit->continue_preamble_cs,
submit->continue_preamble_count, submit->uses_shadow_regs);
}
return result;