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. > + (!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