From af7f3d1dbb289f2c125ec59b64fd0038fe4c6d00 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Mon, 8 Sep 2025 11:06:15 -0400 Subject: [PATCH] zink: clamp subgroup op return types to required int/uint types required by spec cc: mesa-stable Part-of: (cherry picked from commit a11a02d6f60d3904889938d963a9de715e586b94) --- .pick_status.json | 2 +- src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/.pick_status.json b/.pick_status.json index 6d03b3f7fe5..bbff428ce6d 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -7414,7 +7414,7 @@ "description": "zink: clamp subgroup op return types to required int/uint types", "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 0df38536fb5..d7ed9041646 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 @@ -3329,6 +3329,16 @@ emit_subgroup(struct ntv_context *ctx, nir_intrinsic_instr *intr) atype = nir_type_float; src0 = emit_bitcast(ctx, get_def_type(ctx, intr->src[0].ssa, atype), src0); break; + case SpvOpGroupNonUniformUMin: + case SpvOpGroupNonUniformUMax: + atype = nir_type_uint; + src0 = emit_bitcast(ctx, get_def_type(ctx, intr->src[0].ssa, atype), src0); + break; + case SpvOpGroupNonUniformSMin: + case SpvOpGroupNonUniformSMax: + atype = nir_type_int; + src0 = emit_bitcast(ctx, get_def_type(ctx, intr->src[0].ssa, atype), src0); + break; default: break; } SpvId type = get_def_type(ctx, intr->src[0].ssa, atype);