diff --git a/src/gallium/drivers/zink/zink_context.c b/src/gallium/drivers/zink/zink_context.c index 083c21164d5..7d72e387e59 100644 --- a/src/gallium/drivers/zink/zink_context.c +++ b/src/gallium/drivers/zink/zink_context.c @@ -2580,7 +2580,7 @@ begin_rendering(struct zink_context *ctx) bool changed_size = false; bool zsbuf_used = zink_is_zsbuf_used(ctx); bool use_tc_info = !ctx->blitting && ctx->tc && zink_screen(ctx->base.screen)->driver_workarounds.track_renderpasses; - if (ctx->rp_changed || ctx->rp_layout_changed || ctx->rp_loadop_changed) { + if (ctx->rp_changed || ctx->rp_layout_changed || (!ctx->batch.in_rp && ctx->rp_loadop_changed)) { /* init imageviews, base loadOp, formats */ for (int i = 0; i < ctx->fb_state.nr_cbufs; i++) { struct zink_surface *surf = zink_csurface(ctx->fb_state.cbufs[i]); diff --git a/src/gallium/drivers/zink/zink_render_pass.c b/src/gallium/drivers/zink/zink_render_pass.c index f6dbe1ef262..18e7be9847d 100644 --- a/src/gallium/drivers/zink/zink_render_pass.c +++ b/src/gallium/drivers/zink/zink_render_pass.c @@ -571,7 +571,7 @@ setup_framebuffer(struct zink_context *ctx) zink_update_vk_sample_locations(ctx); - if (ctx->rp_changed || ctx->rp_layout_changed || ctx->rp_loadop_changed) { + if (ctx->rp_changed || ctx->rp_layout_changed || (!ctx->batch.in_rp && ctx->rp_loadop_changed)) { /* 0. ensure no stale pointers are set */ ctx->gfx_pipeline_state.next_render_pass = NULL; /* 1. calc new rp */