anv: implement state cache invalidate for Wa_16013063087
authorTapani Pälli <tapani.palli@intel.com>
Mon, 24 Apr 2023 10:11:48 +0000 (13:11 +0300)
committerMarge Bot <emma+marge@anholt.net>
Tue, 25 Apr 2023 10:45:55 +0000 (10:45 +0000)
Cc: mesa-stable
Signed-off-by: Tapani Pälli <tapani.palli@intel.com>
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22651>

src/intel/vulkan/genX_cmd_buffer.c

index fe3f7e6..9d3aee9 100644 (file)
@@ -6556,6 +6556,17 @@ genX(flush_pipeline_select)(struct anv_cmd_buffer *cmd_buffer,
            ANV_PIPE_UNTYPED_DATAPORT_CACHE_FLUSH_BIT;
 #endif
 
+   /* Wa_16013063087 -  State Cache Invalidate must be issued prior to
+    * PIPELINE_SELECT when switching from 3D to Compute.
+    *
+    * SW must do this by programming of PIPECONTROL with “CS Stall” followed by
+    * a PIPECONTROL with State Cache Invalidate bit set.
+    *
+    */
+   if (cmd_buffer->state.current_pipeline == _3D && pipeline == GPGPU &&
+       intel_needs_workaround(cmd_buffer->device->info, 16013063087))
+      bits |= ANV_PIPE_STATE_CACHE_INVALIDATE_BIT;
+
    anv_add_pending_pipe_bits(cmd_buffer, bits, "flush/invalidate PIPELINE_SELECT");
    genX(cmd_buffer_apply_pipe_flushes)(cmd_buffer);