From 79bd37189b1454c98b9439a092e85cf0d0a46095 Mon Sep 17 00:00:00 2001 From: Gert Wollny Date: Thu, 7 Mar 2024 14:11:34 +0100 Subject: [PATCH] zink/nir-to-spirv: Make sure sampleid for InterpolateAtSample is int This fixes the validation error VUID-VkShaderModuleCreateInfo-pCode-08737 triggered by piglit: spec@arb_gpu_shader5@execution@built-in-functions@fs-interpolateatsample-block-array: GLSL.std.450 InterpolateAtSample: expected Sample to be 32-bit integer %47 = OpExtInst %float %1 InterpolateAtSample %45 %float_0 Fixes: 9f6be8effb43fcd4ce2fd00045bc6244ddf63529 zink: store and use alu types for ntv defs Signed-off-by: Gert Wollny Part-of: (cherry picked from commit b7d6d90dabad885c2578e2195901f60ac6ac4e7c) --- .pick_status.json | 2 +- src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.pick_status.json b/.pick_status.json index 62689687c40..c7588f67f9c 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -424,7 +424,7 @@ "description": "zink/nir-to-spirv: Make sure sampleid for InterpolateAtSample is int", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "9f6be8effb43fcd4ce2fd00045bc6244ddf63529", "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 7986e0a6fc3..9d3c97085e6 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 @@ -2739,6 +2739,8 @@ emit_interpolate(struct ntv_context *ctx, nir_intrinsic_instr *intr) case nir_intrinsic_interp_deref_at_sample: op = GLSLstd450InterpolateAtSample; src1 = get_src(ctx, &intr->src[1], &atype); + if (atype != nir_type_int) + src1 = emit_bitcast(ctx, get_ivec_type(ctx, 32, 1), src1); break; case nir_intrinsic_interp_deref_at_offset: op = GLSLstd450InterpolateAtOffset;