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@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16877>
This commit is contained in:
Mike Blumenkrantz 2022-06-05 09:14:30 -04:00 committed by Marge Bot
parent 3e2c65281d
commit 5897ade22d
2 changed files with 14 additions and 4 deletions

View File

@ -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)

View File

@ -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;