diff --git a/src/gallium/drivers/zink/zink_compiler.c b/src/gallium/drivers/zink/zink_compiler.c index a918ef8981f..a3514e2b3ad 100644 --- a/src/gallium/drivers/zink/zink_compiler.c +++ b/src/gallium/drivers/zink/zink_compiler.c @@ -4330,6 +4330,9 @@ zink_shader_create(struct zink_screen *screen, struct nir_shader *nir, struct zink_shader *ret = rzalloc(NULL, struct zink_shader); bool have_psiz = false; + ret->has_edgeflags = nir->info.stage == MESA_SHADER_VERTEX && + nir_find_variable_with_location(nir, nir_var_shader_out, VARYING_SLOT_EDGE); + ret->sinfo.have_vulkan_memory_model = screen->info.have_KHR_vulkan_memory_model; util_queue_fence_init(&ret->precompile.fence); diff --git a/src/gallium/drivers/zink/zink_program.c b/src/gallium/drivers/zink/zink_program.c index 737b262c369..e535ad00ac1 100644 --- a/src/gallium/drivers/zink/zink_program.c +++ b/src/gallium/drivers/zink/zink_program.c @@ -367,6 +367,7 @@ update_gfx_shader_modules(struct zink_context *ctx, bool default_variants = true; assert(prog->modules[MESA_SHADER_VERTEX]); uint32_t variant_hash = prog->last_variant_hash; + prog->has_edgeflags = prog->shaders[MESA_SHADER_VERTEX]->has_edgeflags; for (unsigned i = 0; i < MESA_SHADER_COMPUTE; i++) { if (!(mask & BITFIELD_BIT(i))) continue; @@ -1034,6 +1035,8 @@ zink_create_gfx_program(struct zink_context *ctx, prog->gfx_hash = gfx_hash; prog->base.removed = true; + prog->has_edgeflags = prog->shaders[MESA_SHADER_VERTEX] && + prog->shaders[MESA_SHADER_VERTEX]->has_edgeflags; for (int i = 0; i < ZINK_GFX_SHADER_COUNT; ++i) { util_dynarray_init(&prog->shader_cache[i][0][0], prog); util_dynarray_init(&prog->shader_cache[i][0][1], prog); diff --git a/src/gallium/drivers/zink/zink_types.h b/src/gallium/drivers/zink/zink_types.h index eb447f5a898..6d59c105652 100644 --- a/src/gallium/drivers/zink/zink_types.h +++ b/src/gallium/drivers/zink/zink_types.h @@ -736,6 +736,7 @@ struct zink_shader { bool bindless; bool can_inline; bool has_uniforms; + bool has_edgeflags; struct spirv_shader *spirv; struct { @@ -1022,6 +1023,7 @@ struct zink_gfx_program { unsigned inlined_variant_count[ZINK_GFX_SHADER_COUNT]; uint32_t default_variant_hash; uint8_t inline_variants; //which stages are using inlined uniforms + bool has_edgeflags; /* separable */ struct zink_gfx_program *full_prog;