From 19b27a85694bd2440609a218386ab6d9f834019a Mon Sep 17 00:00:00 2001 From: Neil Roberts Date: Tue, 23 Apr 2019 15:19:35 +0200 Subject: [PATCH] =?utf8?q?glsl/linker:=20Don=E2=80=99t=20check=20precision?= =?utf8?q?=20for=20shader=20interface?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit On GLES, the interface between vertex and fragment shaders doesn’t need to have matching precision. Section 4.3.10 of the GLSL ES 3.00 spec: “The type of vertex outputs and fragment inputs with the same name must match, otherwise the link command will fail. The precision does not need to match.” Reviewed-by: Eric Anholt --- src/compiler/glsl/link_varyings.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/compiler/glsl/link_varyings.cpp b/src/compiler/glsl/link_varyings.cpp index 4e00840c53e..1263d6cbdb1 100644 --- a/src/compiler/glsl/link_varyings.cpp +++ b/src/compiler/glsl/link_varyings.cpp @@ -218,9 +218,12 @@ cross_validate_types_and_qualifiers(struct gl_context *ctx, /* Structures across shader stages can have different name * and considered to match in type if and only if structure * members match in name, type, qualification, and declaration - * order. + * order. The precision doesn’t need to match. */ - if (!output->type->record_compare(type_to_match, false, true)) { + if (!output->type->record_compare(type_to_match, + false, /* match_name */ + true, /* match_locations */ + false /* match_precision */)) { linker_error(prog, "%s shader output `%s' declared as struct `%s', " "doesn't match in type with %s shader input " -- 2.30.2