From 6cf16955f74ae61c37ef8562679f12bd4fc45ee3 Mon Sep 17 00:00:00 2001 From: Lionel Landwerlin Date: Thu, 22 Sep 2022 08:13:22 +0300 Subject: [PATCH] anv: add missing wokraround for texture cache invalidate Signed-off-by: Lionel Landwerlin Reviewed-by: Nanley Chery Cc: mesa-stable Part-of: (cherry picked from commit f9dbb65e7feac3e5d8558e21b2a6a2928f3682b9) --- .pick_status.json | 2 +- src/intel/vulkan/genX_cmd_buffer.c | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/.pick_status.json b/.pick_status.json index 5c3c8be73b6..85daa14d28a 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -1372,7 +1372,7 @@ "description": "anv: add missing wokraround for texture cache invalidate", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null }, diff --git a/src/intel/vulkan/genX_cmd_buffer.c b/src/intel/vulkan/genX_cmd_buffer.c index 64c6f183ae2..240630d8412 100644 --- a/src/intel/vulkan/genX_cmd_buffer.c +++ b/src/intel/vulkan/genX_cmd_buffer.c @@ -286,6 +286,18 @@ genX(cmd_buffer_emit_state_base_address)(struct anv_cmd_buffer *cmd_buffer) pc.StateCacheInvalidationEnable = true; #if GFX_VERx10 == 125 pc.InstructionCacheInvalidateEnable = true; +#endif +#if GFX_VER >= 9 && GFX_VER <= 11 + /* From the SKL PRM, Vol. 2a, "PIPE_CONTROL", + * + * "Workaround : “CS Stall” bit in PIPE_CONTROL command must be + * always set for GPGPU workloads when “Texture Cache Invalidation + * Enable” bit is set". + * + * Workaround stopped appearing in TGL PRMs. + */ + pc.CommandStreamerStallEnable = + cmd_buffer->state.current_pipeline == GPGPU; #endif anv_debug_dump_pc(pc); } @@ -2269,6 +2281,19 @@ genX(emit_apply_pipe_flushes)(struct anv_batch *batch, pipe.InstructionCacheInvalidateEnable = bits & ANV_PIPE_INSTRUCTION_CACHE_INVALIDATE_BIT; +#if GFX_VER >= 9 && GFX_VER <= 11 + /* From the SKL PRM, Vol. 2a, "PIPE_CONTROL", + * + * "Workaround : “CS Stall” bit in PIPE_CONTROL command must be + * always set for GPGPU workloads when “Texture Cache + * Invalidation Enable” bit is set". + * + * Workaround stopped appearing in TGL PRMs. + */ + if (current_pipeline == GPGPU && pipe.TextureCacheInvalidationEnable) + pipe.CommandStreamerStallEnable = true; +#endif + /* From the SKL PRM, Vol. 2a, "PIPE_CONTROL", * * "When VF Cache Invalidate is set “Post Sync Operation” must be