Mesa (10.1): glsl: Fix condition to generate shader link error

Ian Romanick idr at kemper.freedesktop.org
Wed Feb 19 19:06:24 UTC 2014


Module: Mesa
Branch: 10.1
Commit: d623eeb37a99ccc419e7475693b2712930aae8bf
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=d623eeb37a99ccc419e7475693b2712930aae8bf

Author: Anuj Phogat <anuj.phogat at gmail.com>
Date:   Thu Dec 19 14:17:19 2013 -0800

glsl: Fix condition to generate shader link error

GL_ARB_ES2_compatibility doesn't say anything about shader linking
when one of the shaders (vertex or fragment shader) is absent. So,
the extension shouldn't change the behavior specified in GLSL
specification.

Tested the behavior on proprietary linux drivers of NVIDIA and AMD.
Both of them allow linking a version 100 shader program in OpenGL
context, when one of the shaders is absent.

Makes following Khronos CTS tests to pass:
successfulcompilevert_linkprogram.test
successfulcompilefrag_linkprogram.test

Cc: mesa-stable at lists.freedesktop.org
Signed-off-by: Anuj Phogat <anuj.phogat at gmail.com>
Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>
(cherry picked from commit 03597cf802a7a89c4853794e6206ab8ab003898d)

---

 src/glsl/linker.cpp |    9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp
index 93b4754..5635b1d 100644
--- a/src/glsl/linker.cpp
+++ b/src/glsl/linker.cpp
@@ -2329,11 +2329,12 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog)
       goto done;
 
    /* OpenGL ES requires that a vertex shader and a fragment shader both be
-    * present in a linked program.  By checking prog->IsES, we also
-    * catch the GL_ARB_ES2_compatibility case.
+    * present in a linked program. GL_ARB_ES2_compatibility doesn't say
+    * anything about shader linking when one of the shaders (vertex or
+    * fragment shader) is absent. So, the extension shouldn't change the
+    * behavior specified in GLSL specification.
     */
-   if (!prog->InternalSeparateShader &&
-       (ctx->API == API_OPENGLES2 || prog->IsES)) {
+   if (!prog->InternalSeparateShader && ctx->API == API_OPENGLES2) {
       if (prog->_LinkedShaders[MESA_SHADER_VERTEX] == NULL) {
 	 linker_error(prog, "program lacks a vertex shader\n");
       } else if (prog->_LinkedShaders[MESA_SHADER_FRAGMENT] == NULL) {




More information about the mesa-commit mailing list