linker: Generate link errors when ES shaders are missing stages
authorIan Romanick <ian.d.romanick@intel.com>
Fri, 4 Feb 2011 01:10:14 +0000 (17:10 -0800)
committerIan Romanick <ian.d.romanick@intel.com>
Fri, 4 Feb 2011 20:10:04 +0000 (12:10 -0800)
ES requires that a vertex shader and a fragment shader be present.

Fixes bugzilla #32214.

src/glsl/linker.cpp

index c7fb62437db381d26c58a83ee70ec079a4b9f8e0..46cd1950c86b42ccc21d23627462c14296be5e19 100644 (file)
@@ -1682,6 +1682,20 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog)
       demote_shader_inputs_and_outputs(sh, ir_var_in);
    }
 
+   /* OpenGL ES requires that a vertex shader and a fragment shader both be
+    * present in a linked program.  By checking for use of shading language
+    * version 1.00, we also catch the GL_ARB_ES2_compatibility case.
+    */
+   if (ctx->API == API_OPENGLES2 || prog->Version == 100) {
+      if (prog->_LinkedShaders[MESA_SHADER_VERTEX] == NULL) {
+        linker_error_printf(prog, "program lacks a vertex shader\n");
+        prog->LinkStatus = false;
+      } else if (prog->_LinkedShaders[MESA_SHADER_FRAGMENT] == NULL) {
+        linker_error_printf(prog, "program lacks a fragment shader\n");
+        prog->LinkStatus = false;
+      }
+   }
+
    /* FINISHME: Assign fragment shader output locations. */
 
 done: