From d6418b173d0729263b5600e56f70331bbc43ceae Mon Sep 17 00:00:00 2001 From: Emma Anholt Date: Thu, 12 Jan 2023 14:43:38 -0800 Subject: [PATCH] zink: Add missing Flat decorations on some inputs. Fixes validation failures: Test case 'dEQP-GLES31.functional.android_extension_pack.shaders.es32.extension_directive.oes_sample_variables'.. MESA: error: Validation Error: [ UNASSIGNED-CoreValidation-Shader-InconsistentSpirv ] Object 0: handle = 0x563a1838b790, type = VK_OBJECT_TYPE_DEVICE; | MessageID = 0x6bbb14 | SPIR-V module not valid: [VUID-StandaloneSpirv-Flat-04744] Fragment OpEntryPoint operand 31 with Input interfaces with integer or float type must have a Flat decoration for Entry Point id 4. %gl_SampleId = OpVariable %_ptr_Input_uint Input Test case 'KHR-GL46.shader_ballot_tests.ShaderBallotAvailability'.. MESA: error: Validation Error: [ UNASSIGNED-CoreValidation-Shader-InconsistentSpirv ] Object 0: handle = 0x5558e12f17e0, type = VK_OBJECT_TYPE_DEVICE; | MessageID = 0x6bbb14 | SPIR-V module not valid: [VUID-StandaloneSpirv-Flat-04744] Fragment OpEntryPoint operand 28 with Input interfaces with integer or float type must have a Flat decoration for Entry Point id 4. %gl_SubgroupLocalInvocationId = OpVariable %_ptr_Input_uint Input Cc: mesa-stable Part-of: (cherry picked from commit 2a33d509ca1c2dcfc6cb9b05d75fda5576cd902e) --- .pick_status.json | 2 +- src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/.pick_status.json b/.pick_status.json index 93755c0c200..cd8344cb493 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -940,7 +940,7 @@ "description": "zink: Add missing Flat decorations on some inputs.", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": 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 53b5eee1838..6a880be0344 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 @@ -2733,6 +2733,17 @@ create_builtin_var(struct ntv_context *ctx, SpvId var_type, spirv_builder_emit_name(&ctx->builder, var, name); spirv_builder_emit_builtin(&ctx->builder, var, builtin); + if (ctx->stage == MESA_SHADER_FRAGMENT) { + switch (builtin) { + case SpvBuiltInSampleId: + case SpvBuiltInSubgroupLocalInvocationId: + spirv_builder_emit_decoration(&ctx->builder, var, SpvDecorationFlat); + break; + default: + break; + } + } + assert(ctx->num_entry_ifaces < ARRAY_SIZE(ctx->entry_ifaces)); ctx->entry_ifaces[ctx->num_entry_ifaces++] = var; return var;