diff --git a/src/gallium/drivers/zink/zink_surface.c b/src/gallium/drivers/zink/zink_surface.c index 437bba7afdc..243c217d68c 100644 --- a/src/gallium/drivers/zink/zink_surface.c +++ b/src/gallium/drivers/zink/zink_surface.c @@ -295,7 +295,7 @@ zink_create_transient_surface(struct zink_context *ctx, const struct pipe_surfac struct zink_resource *res = zink_resource(psurf->texture); struct zink_resource *transient = res->transient; assert(nr_samples > 1); - if (!res->transient) { + if (!res->transient || res->transient->base.b.nr_samples != nr_samples) { /* transient fb attachment: not cached */ struct pipe_resource rtempl = *psurf->texture; rtempl.nr_samples = nr_samples; @@ -303,6 +303,7 @@ zink_create_transient_surface(struct zink_context *ctx, const struct pipe_surfac rtempl.bind |= ZINK_BIND_TRANSIENT; if (zink_format_needs_mutable(rtempl.format, psurf->format, true)) rtempl.bind |= ZINK_BIND_MUTABLE; + zink_resource_reference(&res->transient, NULL); res->transient = zink_resource(ctx->base.screen->resource_create(ctx->base.screen, &rtempl)); transient = res->transient; if (unlikely(!transient)) {