From e2bf4b9007d94ae16057fa99f2030421bf75290a Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Mon, 26 Jan 2026 11:51:02 -0500 Subject: [PATCH] ntv: emit demote extension/capability when emitting demote this is cleaner and more accurate cc: mesa-stable Part-of: (cherry picked from commit a842e641d994fd87356a860555d68fc6d4999d9f) --- .pick_status.json | 2 +- .../drivers/zink/nir_to_spirv/nir_to_spirv.c | 16 +++------------- 2 files changed, 4 insertions(+), 14 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index 804ae3d8fa0..851ff183b2f 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -1804,7 +1804,7 @@ "description": "ntv: emit demote extension/capability when emitting demote", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null, "notes": null diff --git a/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c b/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c index ef7a973b4aa..48ffd4e0fe8 100644 --- a/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c +++ b/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c @@ -3605,6 +3605,9 @@ emit_intrinsic(struct ntv_context *ctx, nir_intrinsic_instr *intr) break; case nir_intrinsic_demote: + if (!ctx->have_spirv16) + spirv_builder_emit_extension(&ctx->builder, "SPV_EXT_demote_to_helper_invocation"); + spirv_builder_emit_cap(&ctx->builder, SpvCapabilityDemoteToHelperInvocation); spirv_builder_emit_demote(&ctx->builder); break; @@ -4807,19 +4810,6 @@ nir_to_spirv(struct nir_shader *s, const struct ntv_info *sinfo) case MESA_SHADER_FRAGMENT: if (s->info.fs.uses_sample_shading) spirv_builder_emit_cap(&ctx.builder, SpvCapabilitySampleRateShading); - - if (s->info.fs.uses_discard && sinfo->has_demote_to_helper) { - if (!ctx.have_spirv16) - spirv_builder_emit_extension(&ctx.builder, "SPV_EXT_demote_to_helper_invocation"); - spirv_builder_emit_cap(&ctx.builder, SpvCapabilityDemoteToHelperInvocation); - } - - if (BITSET_TEST(s->info.system_values_read, SYSTEM_VALUE_HELPER_INVOCATION) && - sinfo->has_demote_to_helper && !ctx.have_spirv16) { - spirv_builder_emit_extension(&ctx.builder, "SPV_EXT_demote_to_helper_invocation"); - spirv_builder_emit_cap(&ctx.builder, SpvCapabilityDemoteToHelperInvocation); - } - break; case MESA_SHADER_VERTEX: