radeonsi: invalidate L2 when using dcc stores
This is only needed on chips with tcc_rb_non_coherent=1.
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/7084
Cc: mesa-stable
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18494>
(cherry picked from commit 07a520f731
)
This commit is contained in:

committed by
Dylan Baker

parent
6ce21ce910
commit
4698093aff
@@ -499,7 +499,7 @@
|
||||
"description": "radeonsi: invalidate L2 when using dcc stores",
|
||||
"nominated": true,
|
||||
"nomination_type": 0,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"main_sha": null,
|
||||
"because_sha": null
|
||||
},
|
||||
|
@@ -199,6 +199,17 @@ static void si_launch_grid_internal(struct si_context *sctx, const struct pipe_g
|
||||
sctx->flags |= sctx->gfx_level <= GFX8 ? SI_CONTEXT_WB_L2 : 0;
|
||||
/* Make sure image stores are visible to all CUs. */
|
||||
sctx->flags |= SI_CONTEXT_INV_VCACHE;
|
||||
/* Make sure RBs see our DCC changes. */
|
||||
if (sctx->gfx_level >= GFX10 && sctx->screen->info.tcc_rb_non_coherent) {
|
||||
unsigned enabled_mask = sctx->images[PIPE_SHADER_COMPUTE].enabled_mask;
|
||||
while (enabled_mask) {
|
||||
int i = u_bit_scan(&enabled_mask);
|
||||
if (sctx->images[PIPE_SHADER_COMPUTE].views[i].access & SI_IMAGE_ACCESS_ALLOW_DCC_STORE) {
|
||||
sctx->flags |= SI_CONTEXT_INV_L2;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
/* Make sure buffer stores are visible to all CUs. */
|
||||
sctx->flags |= SI_CONTEXT_INV_SCACHE | SI_CONTEXT_INV_VCACHE | SI_CONTEXT_PFP_SYNC_ME;
|
||||
|
@@ -5359,6 +5359,10 @@ static void si_memory_barrier(struct pipe_context *ctx, unsigned flags)
|
||||
* automatically at end of shader, but the contents of other
|
||||
* L1 caches might still be stale. */
|
||||
sctx->flags |= SI_CONTEXT_INV_VCACHE;
|
||||
|
||||
if (flags & (PIPE_BARRIER_IMAGE | PIPE_BARRIER_TEXTURE) &&
|
||||
sctx->screen->info.tcc_rb_non_coherent)
|
||||
sctx->flags |= SI_CONTEXT_INV_L2;
|
||||
}
|
||||
|
||||
if (flags & PIPE_BARRIER_INDEX_BUFFER) {
|
||||
|
Reference in New Issue
Block a user