glsl: Raise a link error for non-SSO ES programs with a TES but no TCS.
authorKenneth Graunke <kenneth@whitecape.org>
Thu, 23 Feb 2017 01:16:01 +0000 (17:16 -0800)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 23 Feb 2017 19:07:06 +0000 (11:07 -0800)
OpenGL allows the TCS to be missing and supplies an implicit passthrough
shader, but OpenGL ES does not (see section 7.3 of the ES 3.2 spec,
cited above in the code).

One open question is how to handle this for ARB_ES3_2_compatibility.
This patch raises the link error for all ES shading language programs,
but it might make sense to base it on the API.  The approach taken in
this patch is more restrictive, but should still allow any valid ES
programs to work in GL.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Andres Gomez <agomez@igalia.com>
src/compiler/glsl/linker.cpp

index 7343e4ebe5eb662f8b5056a2e47440390b8b2d82..3eddbe24d0908efd2fcd09fa42885814ba2bfee1 100644 (file)
@@ -4743,6 +4743,16 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog)
                       "tessellation evaluation shader\n");
          goto done;
       }
+
+      if (prog->IsES) {
+         if (num_shaders[MESA_SHADER_TESS_EVAL] > 0 &&
+             num_shaders[MESA_SHADER_TESS_CTRL] == 0) {
+            linker_error(prog, "GLSL ES requires non-separable programs "
+                         "containing a tessellation evaluation shader to also "
+                         "be linked with a tessellation control shader\n");
+            goto done;
+         }
+      }
    }
 
    /* Compute shaders have additional restrictions. */