From 18573e4058f27853f2893f0f84d28833c9b68924 Mon Sep 17 00:00:00 2001 From: Danylo Piliaiev Date: Mon, 1 Aug 2022 15:36:43 +0300 Subject: [PATCH] tu: WFI after PC_TESSFACTOR_ADDR update Updating PC_TESSFACTOR_ADDR could race with the next draw which uses it. Fixes GL CTS tests running via Zink: KHR-Single-GL46.enhanced_layouts.glsl_contant_values KHR-GLES32.core.tessellation_shader.tessellation_shader_point_mode.point_rendering KHR-GLES32.core.tessellation_shader.winding.quads_cw KHR-GLES32.core.tessellation_shader.winding.triangles_cw And probably more. Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/6815 Suggested-by: Connor Abbott Signed-off-by: Danylo Piliaiev Part-of: --- src/freedreno/vulkan/tu_cmd_buffer.c | 2 ++ src/gallium/drivers/zink/ci/zink-tu-a630-fails.txt | 6 ------ 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/src/freedreno/vulkan/tu_cmd_buffer.c b/src/freedreno/vulkan/tu_cmd_buffer.c index e0a0efb9841..d6e2608ce1b 100644 --- a/src/freedreno/vulkan/tu_cmd_buffer.c +++ b/src/freedreno/vulkan/tu_cmd_buffer.c @@ -77,6 +77,8 @@ tu6_lazy_emit_tessfactor_addr(struct tu_cmd_buffer *cmd) return; tu_cs_emit_regs(&cmd->cs, A6XX_PC_TESSFACTOR_ADDR(.qword = cmd->device->tess_bo->iova)); + /* Updating PC_TESSFACTOR_ADDR could race with the next draw which uses it. */ + cmd->state.cache.flush_bits |= TU_CMD_FLAG_WAIT_FOR_IDLE; cmd->state.tessfactor_addr_set = true; } diff --git a/src/gallium/drivers/zink/ci/zink-tu-a630-fails.txt b/src/gallium/drivers/zink/ci/zink-tu-a630-fails.txt index 3e8303df22f..b2e8ecc9bb0 100644 --- a/src/gallium/drivers/zink/ci/zink-tu-a630-fails.txt +++ b/src/gallium/drivers/zink/ci/zink-tu-a630-fails.txt @@ -30,11 +30,5 @@ KHR-GL46.gpu_shader_fp64.builtin.mod_dvec4,Fail KHR-GL46.copy_image.functional,Fail KHR-GL46.texture_view.view_classes,Fail -# WFI is likely required after PC_TESSFACTOR_ADDR update, -# otherwise GPU may use not updated address. -KHR-GLES32.core.tessellation_shader.tessellation_shader_point_mode.point_rendering,Fail -KHR-GLES32.core.tessellation_shader.winding.quads_cw,Fail -KHR-GLES32.core.tessellation_shader.winding.triangles_cw,Fail - # https://gerrit.khronos.org/c/vk-gl-cts/+/9891/ KHR-GLES31.core.polygon_offset_clamp.PolygonOffsetClampMinMax,Fail