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