summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/iris
diff options
context:
space:
mode:
authorJason Ekstrand <[email protected]>2020-03-05 17:17:40 -0600
committerMarge Bot <[email protected]>2020-03-06 01:40:02 +0000
commit9d07d598423e4015bbc7beb7a2fdc4c657d5e0cf (patch)
tree6bf229c2cc004c3b0a6ea6a648d90fe3cc8674f3 /src/gallium/drivers/iris
parent382b902a6db87a2b0409b760c320555d1f4eadca (diff)
iris: Don't skip fast depth clears if the color changed
We depend on BLORP to convert the clear color and write it into the clear color buffer for us. However, we weren't bothering to call blorp in the case where the state is ISL_AUX_STATE_CLEAR. This leads to the clear color not getting properly updated if we have back-to-back clears with different clear colors. Technically, we could go out of our way to set the clear color directly from iris in this case but this is a case we're unlikely to see in the wild so let's not bother. This matches what we already do for color surfaces. Cc: [email protected] Reported-by: Mark Janes <[email protected]> Reviewed-by: Nanley Chery <[email protected]> Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4073> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4073>
Diffstat (limited to 'src/gallium/drivers/iris')
-rw-r--r--src/gallium/drivers/iris/iris_clear.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/gallium/drivers/iris/iris_clear.c b/src/gallium/drivers/iris/iris_clear.c
index 5f7914a5ba0..087b32f7180 100644
--- a/src/gallium/drivers/iris/iris_clear.c
+++ b/src/gallium/drivers/iris/iris_clear.c
@@ -521,7 +521,11 @@ fast_clear_depth(struct iris_context *ice,
for (unsigned l = 0; l < box->depth; l++) {
enum isl_aux_state aux_state =
iris_resource_get_aux_state(res, level, box->z + l);
- if (aux_state != ISL_AUX_STATE_CLEAR) {
+ if (update_clear_depth || aux_state != ISL_AUX_STATE_CLEAR) {
+ if (aux_state == ISL_AUX_STATE_CLEAR) {
+ perf_debug(&ice->dbg, "Performing HiZ clear just to update the "
+ "depth clear value\n");
+ }
iris_hiz_exec(ice, batch, res, level,
box->z + l, 1, ISL_AUX_OP_FAST_CLEAR,
update_clear_depth);