bool changed_layout = false;
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) {
/* init imageviews, base loadOp, formats */
for (int i = 0; i < ctx->fb_state.nr_cbufs; i++) {
ctx->dynamic_fb.attachments[i].loadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE;
else
ctx->dynamic_fb.attachments[i].loadOp = VK_ATTACHMENT_LOAD_OP_LOAD;
- if (ctx->tc && zink_screen(ctx->base.screen)->driver_workarounds.track_renderpasses) {
+ if (use_tc_info) {
if (ctx->dynamic_fb.tc_info.cbuf_invalidate & BITFIELD_BIT(i))
ctx->dynamic_fb.attachments[i].storeOp = VK_ATTACHMENT_STORE_OP_DONT_CARE;
else
else
ctx->dynamic_fb.attachments[PIPE_MAX_COLOR_BUFS].loadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE;
- if (ctx->tc && zink_screen(ctx->base.screen)->driver_workarounds.track_renderpasses) {
+ if (use_tc_info) {
if (ctx->dynamic_fb.tc_info.zsbuf_invalidate)
ctx->dynamic_fb.attachments[PIPE_MAX_COLOR_BUFS].storeOp = VK_ATTACHMENT_STORE_OP_DONT_CARE;
else
ctx->base.clear(&ctx->base, ctx->void_clears, NULL, &color, 0, 0);
ctx->void_clears = 0;
}
- update_tc_info(ctx, ctx->rp_tc_info_updated);
- ctx->rp_tc_info_updated = false;
+ if (!ctx->blitting) {
+ if (ctx->rp_tc_info_updated)
+ update_tc_info(ctx, true);
+ ctx->rp_tc_info_updated = false;
+ }
bool maybe_has_query_ends = !ctx->tc || !zink_screen(ctx->base.screen)->driver_workarounds.track_renderpasses || ctx->dynamic_fb.tc_info.has_query_ends;
ctx->queries_in_rp = maybe_has_query_ends;
/* if possible, out-of-renderpass resume any queries that were stopped when previous rp ended */
struct zink_render_pass_state state = {0};
uint32_t clears = 0;
bool have_zsbuf = fb->zsbuf && zink_is_zsbuf_used(ctx);
+ bool use_tc_info = !ctx->blitting && ctx->tc && zink_screen(ctx->base.screen)->driver_workarounds.track_renderpasses;
state.samples = fb->samples > 0;
for (int i = 0; i < fb->nr_cbufs; i++) {
- if (ctx->tc && screen->driver_workarounds.track_renderpasses)
+ if (use_tc_info)
zink_tc_init_color_attachment(ctx, &ctx->dynamic_fb.tc_info, i, &state.rts[i]);
else
zink_init_color_attachment(ctx, i, &state.rts[i]);
assert(!state.num_cresolves || state.num_cbufs == state.num_cresolves);
if (have_zsbuf) {
- if (ctx->tc && screen->driver_workarounds.track_renderpasses)
+ if (use_tc_info)
zink_tc_init_zs_attachment(ctx, &ctx->dynamic_fb.tc_info, &state.rts[fb->nr_cbufs]);
else
zink_init_zs_attachment(ctx, &state.rts[fb->nr_cbufs]);