zink: disable shader objects when viewmask is set

this is not supported by EXT_shader_object

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/33005>
This commit is contained in:
Mike Blumenkrantz 2025-01-13 15:11:37 -05:00 committed by Marge Bot
parent 50c7d05568
commit 53cb103af2
2 changed files with 4 additions and 2 deletions

View file

@ -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

View file

@ -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;