glsl/linker: Don’t check precision for shader interface
authorNeil Roberts <nroberts@igalia.com>
Tue, 23 Apr 2019 13:19:35 +0000 (15:19 +0200)
committerNeil Roberts <nroberts@igalia.com>
Fri, 14 Jun 2019 07:29:53 +0000 (09:29 +0200)
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 <eric@anholt.net>
src/compiler/glsl/link_varyings.cpp

index 4e00840c53e84b77c76d6e623ff072c3a7f76c3a..1263d6cbdb18db27aacf38e6617ba928e9f520da 100644 (file)
@@ -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 "