From af0d38bfdef95094df9ec8753e4a27aff93e786d Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Fri, 6 Dec 2019 18:26:59 -0600 Subject: [PATCH] anv: Re-emit all compute state on pipeline switch It's a very odd case to hit in the real world. However, there are some CTS tests which switch back and forth between dispatch and clear without changing the pipeline. Fixes: bc612536eb2f "anv: Emit a dummy MEDIA_VFE_STATE before switching..." Reviewed-by: Caio Marcelo de Oliveira Filho (cherry picked from commit 0f60aa4037dfb6aa86d5b9524fe649f13b2b8825) --- src/intel/vulkan/genX_cmd_buffer.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/intel/vulkan/genX_cmd_buffer.c b/src/intel/vulkan/genX_cmd_buffer.c index bb00d0a0e34..2a012a91485 100644 --- a/src/intel/vulkan/genX_cmd_buffer.c +++ b/src/intel/vulkan/genX_cmd_buffer.c @@ -3803,6 +3803,13 @@ genX(flush_pipeline_select)(struct anv_cmd_buffer *cmd_buffer, vfe.NumberofURBEntries = 2; vfe.URBEntryAllocationSize = 2; } + + /* We just emitted a dummy MEDIA_VFE_STATE so now that packet is + * invalid. Set the compute pipeline to dirty to force a re-emit of the + * pipeline in case we get back-to-back dispatch calls with the same + * pipeline and a PIPELINE_SELECT in between. + */ + cmd_buffer->state.compute.pipeline_dirty = true; } #endif