diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h index 54eefc56b78..46253af46b0 100644 --- a/src/intel/vulkan/anv_private.h +++ b/src/intel/vulkan/anv_private.h @@ -3381,6 +3381,9 @@ enum anv_pipe_bits { * implement a workaround for Gfx9. */ ANV_PIPE_POST_SYNC_BIT = (1 << 24), + + /* L3 Fabric Flush */ + ANV_PIPE_L3_FABRIC_FLUSH_BIT = (1 << 25), }; /* These bits track the state of buffer writes for queries. They get cleared @@ -3443,7 +3446,8 @@ enum anv_query_bits { ANV_PIPE_HDC_PIPELINE_FLUSH_BIT | \ ANV_PIPE_UNTYPED_DATAPORT_CACHE_FLUSH_BIT | \ ANV_PIPE_RENDER_TARGET_CACHE_FLUSH_BIT | \ - ANV_PIPE_TILE_CACHE_FLUSH_BIT) + ANV_PIPE_TILE_CACHE_FLUSH_BIT | \ + ANV_PIPE_L3_FABRIC_FLUSH_BIT) #define ANV_PIPE_STALL_BITS ( \ ANV_PIPE_STALL_AT_SCOREBOARD_BIT | \ diff --git a/src/intel/vulkan/anv_util.c b/src/intel/vulkan/anv_util.c index a9f82ef200d..1003c8a5906 100644 --- a/src/intel/vulkan/anv_util.c +++ b/src/intel/vulkan/anv_util.c @@ -69,6 +69,8 @@ anv_dump_pipe_bits(enum anv_pipe_bits bits, FILE *f) fputs("+rt_flush ", f); if (bits & ANV_PIPE_TILE_CACHE_FLUSH_BIT) fputs("+tile_flush ", f); + if (bits & ANV_PIPE_L3_FABRIC_FLUSH_BIT) + fputs("+l3_fabric_flush ", f); if (bits & ANV_PIPE_STATE_CACHE_INVALIDATE_BIT) fputs("+state_inval ", f); if (bits & ANV_PIPE_CONSTANT_CACHE_INVALIDATE_BIT) diff --git a/src/intel/vulkan/anv_utrace.c b/src/intel/vulkan/anv_utrace.c index 9adaf26c0fd..6da6ce460c2 100644 --- a/src/intel/vulkan/anv_utrace.c +++ b/src/intel/vulkan/anv_utrace.c @@ -523,6 +523,7 @@ anv_pipe_flush_bit_to_ds_stall_flag(enum anv_pipe_bits bits) { .anv = ANV_PIPE_DEPTH_CACHE_FLUSH_BIT, .ds = INTEL_DS_DEPTH_CACHE_FLUSH_BIT, }, { .anv = ANV_PIPE_DATA_CACHE_FLUSH_BIT, .ds = INTEL_DS_DATA_CACHE_FLUSH_BIT, }, { .anv = ANV_PIPE_TILE_CACHE_FLUSH_BIT, .ds = INTEL_DS_TILE_CACHE_FLUSH_BIT, }, + { .anv = ANV_PIPE_L3_FABRIC_FLUSH_BIT, .ds = INTEL_DS_L3_FABRIC_FLUSH_BIT, }, { .anv = ANV_PIPE_RENDER_TARGET_CACHE_FLUSH_BIT, .ds = INTEL_DS_RENDER_TARGET_CACHE_FLUSH_BIT, }, { .anv = ANV_PIPE_STATE_CACHE_INVALIDATE_BIT, .ds = INTEL_DS_STATE_CACHE_INVALIDATE_BIT, }, { .anv = ANV_PIPE_CONSTANT_CACHE_INVALIDATE_BIT, .ds = INTEL_DS_CONST_CACHE_INVALIDATE_BIT, }, diff --git a/src/intel/vulkan/genX_cmd_buffer.c b/src/intel/vulkan/genX_cmd_buffer.c index 34f1781c267..83554eba08b 100644 --- a/src/intel/vulkan/genX_cmd_buffer.c +++ b/src/intel/vulkan/genX_cmd_buffer.c @@ -50,6 +50,7 @@ convert_pc_to_bits(struct GENX(PIPE_CONTROL) *pc) { #endif #if GFX_VER == 12 bits |= (pc->TileCacheFlushEnable) ? ANV_PIPE_TILE_CACHE_FLUSH_BIT : 0; + bits |= (pc->L3FabricFlush) ? ANV_PIPE_L3_FABRIC_FLUSH_BIT : 0; #endif #if GFX_VER >= 12 bits |= (pc->HDCPipelineFlushEnable) ? ANV_PIPE_HDC_PIPELINE_FLUSH_BIT : 0; @@ -2511,6 +2512,7 @@ genX(batch_emit_pipe_control_write)(struct anv_batch *batch, #endif #if GFX_VER == 12 pipe.TileCacheFlushEnable = bits & ANV_PIPE_TILE_CACHE_FLUSH_BIT; + pipe.L3FabricFlush = bits & ANV_PIPE_L3_FABRIC_FLUSH_BIT; #endif #if GFX_VER > 11 pipe.HDCPipelineFlushEnable = bits & ANV_PIPE_HDC_PIPELINE_FLUSH_BIT;