On 09/03/2015 09:54 PM, Ilia Mirkin wrote:
On Thu, Sep 3, 2015 at 7:58 AM, Tapani Pälli <tapani.pa...@intel.com> wrote:
Signed-off-by: Tapani Pälli <tapani.pa...@intel.com>
---
  src/glsl/linker.cpp | 31 +++++++++++++++++++++++++++----
  1 file changed, 27 insertions(+), 4 deletions(-)

diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp
index bc76af6..2be5660 100644
--- a/src/glsl/linker.cpp
+++ b/src/glsl/linker.cpp
@@ -3890,10 +3890,33 @@ link_shaders(struct gl_context *ctx, struct 
gl_shader_program *prog)
      * behavior specified in GLSL specification.
      */
     if (!prog->SeparateShader && 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) {
-        linker_error(prog, "program lacks a fragment shader\n");
+      /* With ES < 3.1 one needs to have always vertex + fragment shader. */
+      if (ctx->Version < 31) {
+         if (prog->_LinkedShaders[MESA_SHADER_VERTEX] == NULL) {
+           linker_error(prog, "program lacks a vertex shader\n");
+         } else if (prog->_LinkedShaders[MESA_SHADER_FRAGMENT] == NULL) {
+           linker_error(prog, "program lacks a fragment shader\n");
+         }
+      } else {
+         /* From OpenGL ES 3.1 specification (7.3 Program Objects):
+          *     "Linking can fail for a variety of reasons as specified in the
+          *     OpenGL ES Shading Language Specification, as well as any of the
+          *     following reasons:
+          *
+          *     ...
+          *
+          *     * program contains objects to form either a vertex shader or
+          *       fragment shader, and program is not separable, and does not
+          *       contain objects to form both a vertex shader and fragment
+          *       shader."
+          */
+         if ((prog->_LinkedShaders[MESA_SHADER_VERTEX] ||
+             prog->_LinkedShaders[MESA_SHADER_FRAGMENT]) &&

indentation appears to be off-by-1 here and below (prog's should line
up). Otherwise this is

Reviewed-by: Ilia Mirkin <imir...@alum.mit.edu>

Another quick way to do this is, btw,

!!vertex ^ !!fragment

Which will be 1 iff only one of them is set.

True, will make it more compact. I'll change it, thanks for the review!

+             (!prog->_LinkedShaders[MESA_SHADER_VERTEX] ||
+             !prog->_LinkedShaders[MESA_SHADER_FRAGMENT])) {
+            linker_error(prog, "Program needs to contain both vertex and fragment 
"
+                         "shaders.\n");
+         }
        }
     }

--
2.4.3

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to