From ad45e351a282c95167e66ae3890e45d0b40552b8 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Thu, 24 Jun 2021 10:40:20 -0400 Subject: [PATCH] zink: move sample part of fs key to renderpass this is more accurate Reviewed-by: Dave Airlie Part-of: --- src/gallium/drivers/zink/zink_context.c | 2 ++ src/gallium/drivers/zink/zink_program.c | 2 +- src/gallium/drivers/zink/zink_render_pass.h | 4 +++- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/gallium/drivers/zink/zink_context.c b/src/gallium/drivers/zink/zink_context.c index d258e7e..de31939 100644 --- a/src/gallium/drivers/zink/zink_context.c +++ b/src/gallium/drivers/zink/zink_context.c @@ -1543,6 +1543,7 @@ get_render_pass(struct zink_context *ctx) struct zink_render_pass_state state = {0}; uint32_t clears = 0; state.swapchain_init = ctx->new_swapchain; + state.samples = fb->samples > 0; u_foreach_bit(i, ctx->fbfetch_outputs) state.rts[i].fbfetch = true; @@ -1598,6 +1599,7 @@ get_render_pass(struct zink_context *ctx) assert(rp->state.clears == clears); } else { struct zink_render_pass_pipeline_state pstate; + pstate.samples = state.samples; rp = zink_create_render_pass(screen, &state, &pstate); if (!_mesa_hash_table_insert_pre_hashed(ctx->render_pass_cache, hash, &rp->state, rp)) return NULL; diff --git a/src/gallium/drivers/zink/zink_program.c b/src/gallium/drivers/zink/zink_program.c index 191175b..20685ee 100644 --- a/src/gallium/drivers/zink/zink_program.c +++ b/src/gallium/drivers/zink/zink_program.c @@ -141,7 +141,7 @@ shader_key_fs_gen(struct zink_context *ctx, struct zink_shader *zs, * in VK, gl_SampleMask[] is never ignored */ if (zs->nir->info.outputs_written & (1 << FRAG_RESULT_SAMPLE_MASK)) - fs_key->samples = !!ctx->fb_state.samples; + fs_key->samples = ctx->gfx_pipeline_state.render_pass->state.samples; fs_key->force_dual_color_blend = screen->driconf.dual_color_blend_by_location && ctx->gfx_pipeline_state.blend_state && ctx->gfx_pipeline_state.blend_state->dual_src_blend && diff --git a/src/gallium/drivers/zink/zink_render_pass.h b/src/gallium/drivers/zink/zink_render_pass.h index 6c9bb5d..38efbc6 100644 --- a/src/gallium/drivers/zink/zink_render_pass.h +++ b/src/gallium/drivers/zink/zink_render_pass.h @@ -46,6 +46,7 @@ struct zink_rt_attrib { struct zink_render_pass_state { uint8_t num_cbufs : 4; /* PIPE_MAX_COLOR_BUFS = 8 */ uint8_t have_zsbuf : 1; + bool samples; //for fs samplemask bool swapchain_init; struct zink_rt_attrib rts[PIPE_MAX_COLOR_BUFS + 1]; unsigned num_rts; @@ -58,7 +59,8 @@ struct zink_pipeline_rt { }; struct zink_render_pass_pipeline_state { - uint32_t num_attachments; + uint32_t num_attachments:31; + bool samples:1; //for fs samplemask struct zink_pipeline_rt attachments[PIPE_MAX_COLOR_BUFS + 1]; unsigned id; }; -- 2.7.4