Shader linking may fail but if glUseProgramStages does not take shader in use, previously set stages to pipeline should continue to work.
This fixes a subtest in following CTS test: ES31-CTS.sepshaderobjs.StateInteraction Signed-off-by: Tapani Pälli <tapani.pa...@intel.com> --- src/mesa/main/context.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c index d73c984..df2c41c 100644 --- a/src/mesa/main/context.c +++ b/src/mesa/main/context.c @@ -1977,6 +1977,24 @@ _mesa_valid_to_render(struct gl_context *ctx, const char *where) bool from_glsl_shader[MESA_SHADER_COMPUTE] = { false }; for (i = 0; i < MESA_SHADER_COMPUTE; i++) { + + /* If stage has not marked as active in the pipeline, it does not + * matter if linking this shader failed. If stage has been set as used + * it should have ValidProgramUse set. + * + * OpenGL ES 3.1 spec (7.3 Program objects): + * + * "If a program object that is active for any shader stage is + * re-linked unsuccessfully, the link status will be set to FALSE, + * but any existing executables and associated state will remain + * part of the current rendering state until a subsequent call to + * UseProgram, UseProgramStages, or BindProgramPipeline removes + * them from use. + */ + if (ctx->_Shader->CurrentProgram[i] && + !ctx->_Shader->CurrentProgram[i]->ValidProgramUse) + continue; + if (!shader_linked_or_absent(ctx, ctx->_Shader->CurrentProgram[i], &from_glsl_shader[i], where)) return GL_FALSE; -- 2.5.0 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev