iris: Add Tile Cache Flush for Unified Cache.
This commit is contained in:
@@ -222,6 +222,7 @@ enum pipe_control_flags
|
||||
PIPE_CONTROL_STATE_CACHE_INVALIDATE = (1 << 22),
|
||||
PIPE_CONTROL_STALL_AT_SCOREBOARD = (1 << 23),
|
||||
PIPE_CONTROL_DEPTH_CACHE_FLUSH = (1 << 24),
|
||||
PIPE_CONTROL_TILE_CACHE_FLUSH = (1 << 25),
|
||||
};
|
||||
|
||||
#define PIPE_CONTROL_CACHE_FLUSH_BITS \
|
||||
|
||||
@@ -6788,6 +6788,23 @@ iris_emit_raw_pipe_control(struct iris_batch *batch,
|
||||
flags |= PIPE_CONTROL_CS_STALL;
|
||||
}
|
||||
|
||||
if (GEN_GEN >= 12 && ((flags & PIPE_CONTROL_RENDER_TARGET_FLUSH) ||
|
||||
(flags & PIPE_CONTROL_DEPTH_CACHE_FLUSH))) {
|
||||
/* From the PIPE_CONTROL instruction table, bit 28 (Tile Cache Flush
|
||||
* Enable):
|
||||
*
|
||||
* Unified Cache (Tile Cache Disabled):
|
||||
*
|
||||
* When the Color and Depth (Z) streams are enabled to be cached in
|
||||
* the DC space of L2, Software must use "Render Target Cache Flush
|
||||
* Enable" and "Depth Cache Flush Enable" along with "Tile Cache
|
||||
* Flush" for getting the color and depth (Z) write data to be
|
||||
* globally observable. In this mode of operation it is not required
|
||||
* to set "CS Stall" upon setting "Tile Cache Flush" bit.
|
||||
*/
|
||||
flags |= PIPE_CONTROL_TILE_CACHE_FLUSH;
|
||||
}
|
||||
|
||||
if (GEN_GEN == 9 && devinfo->gt == 4) {
|
||||
/* TODO: The big Skylake GT4 post sync op workaround */
|
||||
}
|
||||
@@ -6910,6 +6927,9 @@ iris_emit_raw_pipe_control(struct iris_batch *batch,
|
||||
}
|
||||
|
||||
iris_emit_cmd(batch, GENX(PIPE_CONTROL), pc) {
|
||||
#if GEN_GEN >= 12
|
||||
pc.TileCacheFlushEnable = flags & PIPE_CONTROL_TILE_CACHE_FLUSH;
|
||||
#endif
|
||||
pc.LRIPostSyncOperation = NoLRIOperation;
|
||||
pc.PipeControlFlushEnable = flags & PIPE_CONTROL_FLUSH_ENABLE;
|
||||
pc.DCFlushEnable = flags & PIPE_CONTROL_DATA_CACHE_FLUSH;
|
||||
|
||||
Reference in New Issue
Block a user