mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 09:08:10 +02:00
radeonsi/gfx10: flush gfx cs on ngg -> legacy transition
with a sequence like this:
glClear(STENCIL)
glBeginTransformFeedback()
...
glEndTransformFeedback()
glClear(STENCIL)
The second clear sometimes may produce an unexpected result.
Calling si_flush_gfx_cs() when doing ngg -> legacy transition seems to be a
valid workaround (both for the synthetic reproducer and the real Blender bug).
Using flush flags or events (BOTTOM_OF_PIPE_TS, RESET_TO_LOWEST_VGT) didn't help.
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/2941
Cc: mesa-stable
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7750>
(cherry picked from commit 0b3bd7c516)
This commit is contained in:
parent
99aec40f08
commit
2a74f0ceb6
2 changed files with 7 additions and 2 deletions
|
|
@ -2020,7 +2020,7 @@
|
|||
"description": "radeonsi/gfx10: flush gfx cs on ngg -> legacy transition",
|
||||
"nominated": true,
|
||||
"nomination_type": 0,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"master_sha": null,
|
||||
"because_sha": null
|
||||
},
|
||||
|
|
|
|||
|
|
@ -2954,8 +2954,13 @@ bool si_update_ngg(struct si_context *sctx)
|
|||
* VGT_FLUSH is also emitted at the beginning of IBs when legacy GS ring
|
||||
* pointers are set.
|
||||
*/
|
||||
if ((sctx->chip_class == GFX10 || sctx->family == CHIP_SIENNA_CICHLID) && !new_ngg)
|
||||
if ((sctx->chip_class == GFX10 || sctx->family == CHIP_SIENNA_CICHLID) && !new_ngg) {
|
||||
sctx->flags |= SI_CONTEXT_VGT_FLUSH;
|
||||
if (sctx->chip_class == GFX10) {
|
||||
/* Workaround for https://gitlab.freedesktop.org/mesa/mesa/-/issues/2941 */
|
||||
si_flush_gfx_cs(sctx, RADEON_FLUSH_ASYNC_START_NEXT_GFX_IB_NOW, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
sctx->ngg = new_ngg;
|
||||
sctx->last_gs_out_prim = -1; /* reset this so that it gets updated */
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue