From 6b89c71c904b7fd79ba5ef8aa50a4e1d46d86af1 Mon Sep 17 00:00:00 2001 From: Iago Toral Quiroga Date: Mon, 11 Dec 2023 10:07:34 +0100 Subject: [PATCH] broadcom: fix scheduling dependencies for SETMSF instruction MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We use SETMSF to implement discard, so we need to ensure that any TMU writes after a SETMSF don't actually execute. We emit a TMU flush before a discard but we also need to ensure that the QPU scheduler honors this. Fixes some tests in dEQP-VK.spirv_assembly.instruction.terminate_invocation.* when we expose the extension that would otherwise fail because the QPU scheduler would incorrectly move some image writes emitted after a SETMSF before the SETMSF instruction. Also fixes spec@arb_shader_atomic_counters@fragment-discard Reviewed-by: Alejandro PiƱeiro Part-of: --- src/broadcom/ci/broadcom-rpi4-fails.txt | 1 - src/broadcom/compiler/qpu_schedule.c | 2 ++ 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/broadcom/ci/broadcom-rpi4-fails.txt b/src/broadcom/ci/broadcom-rpi4-fails.txt index a0ac1bb13f8..d4c3f41cd87 100644 --- a/src/broadcom/ci/broadcom-rpi4-fails.txt +++ b/src/broadcom/ci/broadcom-rpi4-fails.txt @@ -146,7 +146,6 @@ spec@arb_framebuffer_object@fbo-blit-scaled-linear,Fail spec@arb_point_sprite@arb_point_sprite-checkerboard,Fail spec@arb_point_sprite@arb_point_sprite-mipmap,Fail spec@arb_separate_shader_objects@atomic counter,Fail -spec@arb_shader_atomic_counters@fragment-discard,Fail spec@arb_shader_storage_buffer_object@compiler@atomicmin-swizzle.vert,Fail spec@arb_shader_texture_lod@execution@arb_shader_texture_lod-texgrad,Fail spec@arb_shader_texture_lod@execution@arb_shader_texture_lod-texgradcube,Fail diff --git a/src/broadcom/compiler/qpu_schedule.c b/src/broadcom/compiler/qpu_schedule.c index 8c0e65e3fe8..f619ea3c1d8 100644 --- a/src/broadcom/compiler/qpu_schedule.c +++ b/src/broadcom/compiler/qpu_schedule.c @@ -381,6 +381,8 @@ calculate_deps(struct schedule_state *state, struct schedule_node *n) break; case V3D_QPU_A_SETMSF: + add_write_dep(state, &state->last_tmu_write, n); + FALLTHROUGH; case V3D_QPU_A_SETREVF: add_write_dep(state, &state->last_tlb, n); break;