From 53cb103af2dc8ca1cc7077135a99b0369d94a9f1 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Mon, 13 Jan 2025 15:11:37 -0500 Subject: [PATCH] zink: disable shader objects when viewmask is set this is not supported by EXT_shader_object Part-of: --- src/gallium/drivers/zink/zink_program.c | 4 ++-- src/gallium/drivers/zink/zink_program.h | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/gallium/drivers/zink/zink_program.c b/src/gallium/drivers/zink/zink_program.c index 46e5ecc5022..22928d16b58 100644 --- a/src/gallium/drivers/zink/zink_program.c +++ b/src/gallium/drivers/zink/zink_program.c @@ -1263,7 +1263,7 @@ create_gfx_program_separable(struct zink_context *ctx, struct zink_shader **stag prog->is_separable = true; prog->gfx_hash = ctx->gfx_hash; - prog->base.uses_shobj = screen->info.have_EXT_shader_object; + prog->base.uses_shobj = screen->info.have_EXT_shader_object && !stages[MESA_SHADER_VERTEX]->info.view_mask && !BITSET_TEST(stages[MESA_SHADER_FRAGMENT]->info.system_values_read, SYSTEM_VALUE_SAMPLE_MASK_IN); prog->stages_remaining = prog->stages_present = ctx->shader_stages; memcpy(prog->shaders, stages, sizeof(prog->shaders)); @@ -2247,7 +2247,7 @@ zink_link_gfx_shader(struct pipe_context *pctx, void **shaders) VKSCR(DestroyPipeline)(screen->dev, pipeline, NULL); } else { if (zink_screen(pctx->screen)->info.have_EXT_shader_object) - prog->base.uses_shobj = !BITSET_TEST(zshaders[MESA_SHADER_FRAGMENT]->info.system_values_read, SYSTEM_VALUE_SAMPLE_MASK_IN); + prog->base.uses_shobj = !zshaders[MESA_SHADER_VERTEX]->info.view_mask && !BITSET_TEST(zshaders[MESA_SHADER_FRAGMENT]->info.system_values_read, SYSTEM_VALUE_SAMPLE_MASK_IN); if (zink_debug & ZINK_DEBUG_NOBGC) gfx_program_precompile_job(prog, pctx->screen, 0); else diff --git a/src/gallium/drivers/zink/zink_program.h b/src/gallium/drivers/zink/zink_program.h index 7ae3a92cc21..18ef8d819c7 100644 --- a/src/gallium/drivers/zink/zink_program.h +++ b/src/gallium/drivers/zink/zink_program.h @@ -426,6 +426,8 @@ zink_can_use_shader_objects(const struct zink_context *ctx) ZINK_SHADER_KEY_OPTIMAL_IS_DEFAULT(ctx->gfx_pipeline_state.optimal_key) && /* TODO: is sample shading even possible to handle with GPL? */ !ctx->gfx_stages[MESA_SHADER_FRAGMENT]->info.fs.uses_sample_shading && + /* TODO: maybe someday shader objects + viewmask */ + !ctx->gfx_stages[MESA_SHADER_VERTEX]->info.view_mask && !ctx->gfx_pipeline_state.force_persample_interp && !ctx->gfx_pipeline_state.min_samples && !ctx->is_generated_gs_bound;