mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 22:38:05 +02:00
iris/gen12: Work around push constant corruption on context switch.
This has been confirmed to fix sporadic graphics corruption on Gen12 platforms for a number of workloads (including Heaven, Valley and CS:GO among others). Corruption seems to occur during context switch fairly consistently, but unfortunately this problem doesn't seem to be documented. Until the hardware team comes up with a better workaround, fix the problem by reemitting constants at the beginning of each batch. No corruption has been observed so far in GL due to preemption, however this is a possibility to keep in mind, it may be necessary to disable preemption in addition to this patch in order to fully address this problem (see also81201e4617). Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/4412 Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/4454 Cc: mesa-stable Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> (cherry picked from commit20e2c7308f)
This commit is contained in:
parent
28083513fc
commit
fe34ff91d2
2 changed files with 18 additions and 2 deletions
|
|
@ -1210,7 +1210,7 @@
|
|||
"description": "iris/gen12: Work around push constant corruption on context switch.",
|
||||
"nominated": true,
|
||||
"nomination_type": 0,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"master_sha": null,
|
||||
"because_sha": null
|
||||
},
|
||||
|
|
|
|||
|
|
@ -6465,9 +6465,25 @@ iris_upload_render_state(struct iris_context *ice,
|
|||
iris_use_pinned_bo(batch, ice->state.binder.bo, false,
|
||||
IRIS_DOMAIN_NONE);
|
||||
|
||||
if (!batch->contains_draw) {
|
||||
if (GEN_GEN == 12) {
|
||||
/* Re-emit constants when starting a new batch buffer in order to
|
||||
* work around push constant corruption on context switch.
|
||||
*
|
||||
* XXX - Provide hardware spec quotation when available.
|
||||
*/
|
||||
ice->state.stage_dirty |= (IRIS_STAGE_DIRTY_CONSTANTS_VS |
|
||||
IRIS_STAGE_DIRTY_CONSTANTS_TCS |
|
||||
IRIS_STAGE_DIRTY_CONSTANTS_TES |
|
||||
IRIS_STAGE_DIRTY_CONSTANTS_GS |
|
||||
IRIS_STAGE_DIRTY_CONSTANTS_FS);
|
||||
}
|
||||
batch->contains_draw = true;
|
||||
}
|
||||
|
||||
if (!batch->contains_draw_with_next_seqno) {
|
||||
iris_restore_render_saved_bos(ice, batch, draw);
|
||||
batch->contains_draw_with_next_seqno = batch->contains_draw = true;
|
||||
batch->contains_draw_with_next_seqno = true;
|
||||
}
|
||||
|
||||
iris_upload_dirty_render_state(ice, batch, draw);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue