anv: Add ANV_PIPE_HDC_PIPELINE_FLUSH_BIT
authorFelix DeGrood <felix.j.degrood@intel.com>
Thu, 18 Mar 2021 02:46:41 +0000 (19:46 -0700)
committerMarge Bot <eric+marge@anholt.net>
Tue, 15 Jun 2021 12:57:42 +0000 (12:57 +0000)
Gfx12+ PIPE_CONTROL bit for flushing HDC cache and memory
transactions to L3 cache.

Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9834>

src/intel/vulkan/anv_private.h
src/intel/vulkan/anv_util.c
src/intel/vulkan/genX_cmd_buffer.c

index 5c61c12..196668b 100644 (file)
@@ -2411,6 +2411,12 @@ enum anv_pipe_bits {
    ANV_PIPE_INSTRUCTION_CACHE_INVALIDATE_BIT = (1 << 11),
    ANV_PIPE_RENDER_TARGET_CACHE_FLUSH_BIT    = (1 << 12),
    ANV_PIPE_DEPTH_STALL_BIT                  = (1 << 13),
+
+   /* ANV_PIPE_HDC_PIPELINE_FLUSH_BIT is a precise way to ensure prior data
+    * cache work has completed.  Available on Gfx12+.  For earlier Gfx we
+    * must reinterpret this flush as ANV_PIPE_DATA_CACHE_FLUSH_BIT.
+    */
+   ANV_PIPE_HDC_PIPELINE_FLUSH_BIT           = (1 << 14),
    ANV_PIPE_CS_STALL_BIT                     = (1 << 20),
    ANV_PIPE_END_OF_PIPE_SYNC_BIT             = (1 << 21),
 
index 0d17126..b06ee76 100644 (file)
@@ -121,6 +121,8 @@ anv_dump_pipe_bits(enum anv_pipe_bits bits)
       fputs("+depth_flush ", stderr);
    if (bits & ANV_PIPE_DATA_CACHE_FLUSH_BIT)
       fputs("+dc_flush ", stderr);
+   if (bits & ANV_PIPE_HDC_PIPELINE_FLUSH_BIT)
+      fputs("+hdc_flush ", stderr);
    if (bits & ANV_PIPE_RENDER_TARGET_CACHE_FLUSH_BIT)
       fputs("+rt_flush ", stderr);
    if (bits & ANV_PIPE_TILE_CACHE_FLUSH_BIT)
index 787fde6..56db984 100644 (file)
@@ -57,6 +57,7 @@ convert_pc_to_bits(struct GENX(PIPE_CONTROL) *pc) {
    bits |= (pc->DCFlushEnable) ?  ANV_PIPE_DATA_CACHE_FLUSH_BIT : 0;
 #if GFX_VER >= 12
    bits |= (pc->TileCacheFlushEnable) ?  ANV_PIPE_TILE_CACHE_FLUSH_BIT : 0;
+   bits |= (pc->HDCPipelineFlushEnable) ?  ANV_PIPE_HDC_PIPELINE_FLUSH_BIT : 0;
 #endif
    bits |= (pc->RenderTargetCacheFlushEnable) ?  ANV_PIPE_RENDER_TARGET_CACHE_FLUSH_BIT : 0;
    bits |= (pc->StateCacheInvalidationEnable) ?  ANV_PIPE_STATE_CACHE_INVALIDATE_BIT : 0;