Mesa (main): zink: flag renderpass for change if image resource changes valid state

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Jun 6 00:51:24 UTC 2022


Module: Mesa
Branch: main
Commit: 5897ade22dc34911706ed33a588b8f46ea5e37c6
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=5897ade22dc34911706ed33a588b8f46ea5e37c6

Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date:   Sun Jun  5 09:14:30 2022 -0400

zink: flag renderpass for change if image resource changes valid state

the next renderpass instance will need to use different load ops,
so flag it here to ensure that gets picked up

Reviewed-by: Dave Airlie <airlied at redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16877>

---

 src/gallium/drivers/zink/zink_batch.c    |  5 ++++-
 src/gallium/drivers/zink/zink_resource.c | 13 ++++++++++---
 2 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/src/gallium/drivers/zink/zink_batch.c b/src/gallium/drivers/zink/zink_batch.c
index 9cc316a5234..514a4b77b01 100644
--- a/src/gallium/drivers/zink/zink_batch.c
+++ b/src/gallium/drivers/zink/zink_batch.c
@@ -502,8 +502,11 @@ zink_batch_resource_usage_set(struct zink_batch *batch, struct zink_resource *re
          res->obj->dt_has_data = true;
       }
    }
-   if (write && !res->obj->is_buffer)
+   if (write && !res->obj->is_buffer) {
+      if (!res->valid && res->fb_binds)
+         batch->state->ctx->rp_changed = true;
       res->valid = true;
+   }
    zink_resource_usage_set(res, batch->state, write);
    /* multiple array entries are fine */
    if (!res->obj->coherent && res->obj->persistent_maps)
diff --git a/src/gallium/drivers/zink/zink_resource.c b/src/gallium/drivers/zink/zink_resource.c
index ae5a5137fd2..cd748d9c467 100644
--- a/src/gallium/drivers/zink/zink_resource.c
+++ b/src/gallium/drivers/zink/zink_resource.c
@@ -1544,8 +1544,12 @@ zink_resource_invalidate(struct pipe_context *pctx, struct pipe_resource *pres)
 {
    if (pres->target == PIPE_BUFFER)
       invalidate_buffer(zink_context(pctx), zink_resource(pres));
-   else
-      zink_resource(pres)->valid = false;
+   else {
+      struct zink_resource *res = zink_resource(pres);
+      if (res->valid && res->fb_binds)
+         zink_context(pctx)->rp_changed = true;
+      res->valid = false;
+   }
 }
 
 static void
@@ -1934,8 +1938,11 @@ zink_image_map(struct pipe_context *pctx,
    }
    if (!ptr)
       goto fail;
-   if (usage & PIPE_MAP_WRITE)
+   if (usage & PIPE_MAP_WRITE) {
+      if (!res->valid && res->fb_binds)
+         ctx->rp_changed = true;
       res->valid = true;
+   }
 
    if (sizeof(void*) == 4)
       trans->base.b.usage |= ZINK_MAP_TEMPORARY;



More information about the mesa-commit mailing list