zink: don't use/update tc rp info while blitting

this is illegal

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21800>
This commit is contained in:
Mike Blumenkrantz
2023-03-10 07:40:59 -05:00
committed by Marge Bot
parent a858bcbb37
commit 73528dd3b7
2 changed files with 11 additions and 6 deletions

View File

@@ -2536,6 +2536,7 @@ begin_rendering(struct zink_context *ctx)
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++) {
@@ -2545,7 +2546,7 @@ begin_rendering(struct zink_context *ctx)
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
@@ -2582,7 +2583,7 @@ begin_rendering(struct zink_context *ctx)
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
@@ -2742,8 +2743,11 @@ zink_batch_rp(struct zink_context *ctx)
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 */

View File

@@ -454,10 +454,11 @@ get_render_pass(struct zink_context *ctx)
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]);
@@ -482,7 +483,7 @@ get_render_pass(struct zink_context *ctx)
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]);