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