mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 17:58:26 +02:00
iris: Fix a fast-clear skipping optimization
When support for multi-slice fast-clears was introduced for color surfaces, an existing optimization for skipping fast-clears was not updated (this optimization assumed single-slice fast-clears). As a result, the driver began to skip multi-layer fast-clears if just the first slice was in the CLEAR state (ignoring the state of the others). A Civilization VI trace was the only workload I found to make use of this optimization and it did so for 2D, non-array textures. Therefore, this fix simply checks that the depth of the clear box is 1. It also moves the single-slice aux-state query closer to the optimization to clarify the need for the depth check. Enables iris to pass a case of the fcc-write-after-clear piglit test, [fast-clear tracking across layers 0 -> 1 -> (0,1)]. Fixes:393f659ed8("iris: Enable fast clears on other miplevels and layers than 0.") Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6973> (cherry picked from commit3f3a5f3489)
This commit is contained in:
parent
e29629de7d
commit
332c00a536
2 changed files with 4 additions and 4 deletions
|
|
@ -2461,7 +2461,7 @@
|
|||
"description": "iris: Fix a fast-clear skipping optimization",
|
||||
"nominated": true,
|
||||
"nomination_type": 1,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"master_sha": null,
|
||||
"because_sha": "393f659ed83abfc67d2a57ca1d962d53b22ec03f"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -197,8 +197,6 @@ fast_clear_color(struct iris_context *ice,
|
|||
{
|
||||
struct iris_batch *batch = &ice->batches[IRIS_BATCH_RENDER];
|
||||
struct pipe_resource *p_res = (void *) res;
|
||||
const enum isl_aux_state aux_state =
|
||||
iris_resource_get_aux_state(res, level, box->z);
|
||||
|
||||
color = convert_fast_clear_color(ice, res, color);
|
||||
|
||||
|
|
@ -277,7 +275,9 @@ fast_clear_color(struct iris_context *ice,
|
|||
/* If the buffer is already in ISL_AUX_STATE_CLEAR, and the color hasn't
|
||||
* changed, the clear is redundant and can be skipped.
|
||||
*/
|
||||
if (!color_changed && aux_state == ISL_AUX_STATE_CLEAR)
|
||||
const enum isl_aux_state aux_state =
|
||||
iris_resource_get_aux_state(res, level, box->z);
|
||||
if (!color_changed && box->depth == 1 && aux_state == ISL_AUX_STATE_CLEAR)
|
||||
return;
|
||||
|
||||
/* Ivybrigde PRM Vol 2, Part 1, "11.7 MCS Buffer for Render Target(s)":
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue