From 4bc1bf16252d7a1ad0d3a8df375fca26efabbf58 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Mon, 11 Mar 2024 14:08:18 -0400 Subject: [PATCH] zink: apply zink_shader::uses_sample to fs variant updating not actually doing the shader rewriting yet also add a helper for checking this value Part-of: --- src/gallium/drivers/zink/zink_program.c | 3 +-- src/gallium/drivers/zink/zink_program.h | 10 +++++++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/gallium/drivers/zink/zink_program.c b/src/gallium/drivers/zink/zink_program.c index 5d7bd54825f..e53906e3089 100644 --- a/src/gallium/drivers/zink/zink_program.c +++ b/src/gallium/drivers/zink/zink_program.c @@ -1839,8 +1839,7 @@ zink_update_fs_key_samples(struct zink_context *ctx) { if (!ctx->gfx_stages[MESA_SHADER_FRAGMENT]) return; - shader_info *info = &ctx->gfx_stages[MESA_SHADER_FRAGMENT]->info; - if (info->outputs_written & (1 << FRAG_RESULT_SAMPLE_MASK)) { + if (zink_shader_uses_samples(ctx->gfx_stages[MESA_SHADER_FRAGMENT])) { bool samples = zink_get_fs_base_key(ctx)->samples; if (samples != (ctx->fb_state.samples > 1)) zink_set_fs_base_key(ctx)->samples = ctx->fb_state.samples > 1; diff --git a/src/gallium/drivers/zink/zink_program.h b/src/gallium/drivers/zink/zink_program.h index 432dcb0a9e4..6203ed5a174 100644 --- a/src/gallium/drivers/zink/zink_program.h +++ b/src/gallium/drivers/zink/zink_program.h @@ -429,6 +429,14 @@ zink_driver_thread_add_job(struct pipe_screen *pscreen, void *data, equals_gfx_pipeline_state_func zink_get_gfx_pipeline_eq_func(struct zink_screen *screen, struct zink_gfx_program *prog); +/* determines whether the 'samples' shader key is valid */ +static inline bool +zink_shader_uses_samples(const struct zink_shader *zs) +{ + assert(zs->info.stage == MESA_SHADER_FRAGMENT); + return zs->uses_sample || zs->info.outputs_written & BITFIELD64_BIT(FRAG_RESULT_SAMPLE_MASK); +} + static inline uint32_t zink_sanitize_optimal_key(struct zink_shader **shaders, uint32_t val) { @@ -437,7 +445,7 @@ zink_sanitize_optimal_key(struct zink_shader **shaders, uint32_t val) k.val = val; else k.val = zink_shader_key_optimal_no_tcs(val); - if (!(shaders[MESA_SHADER_FRAGMENT]->info.outputs_written & BITFIELD64_BIT(FRAG_RESULT_SAMPLE_MASK))) + if (!zink_shader_uses_samples(shaders[MESA_SHADER_FRAGMENT])) k.fs.samples = false; if (!(shaders[MESA_SHADER_FRAGMENT]->info.outputs_written & BITFIELD64_BIT(FRAG_RESULT_DATA1))) k.fs.force_dual_color_blend = false;