Reviewed-by: Marek Olšák <marek.ol...@amd.com> Marek
On Mon, Jan 9, 2017 at 6:13 AM, Timothy Arceri <timothy.arc...@collabora.com> wrote: > We only need to set it when linking was successful and the program > being linked is currently active. > > The programs_in_use mask is just used as a flag for now but in > a following patch we will use it to update the CurrentProgram > array. > > V2: make sure to flush vertices before linking (suggested by Marek) > --- > src/mesa/main/shaderapi.c | 23 ++++++++++++++++++++++- > 1 file changed, 22 insertions(+), 1 deletion(-) > > diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c > index e67dc52..23f8fdd 100644 > --- a/src/mesa/main/shaderapi.c > +++ b/src/mesa/main/shaderapi.c > @@ -1097,10 +1097,31 @@ _mesa_link_program(struct gl_context *ctx, struct > gl_shader_program *shProg) > return; > } > > - FLUSH_VERTICES(ctx, _NEW_PROGRAM); > + unsigned programs_in_use = 0; > + if (ctx->_Shader) > + for (unsigned stage = 0; stage < MESA_SHADER_STAGES; stage++) { > + if (ctx->_Shader->CurrentProgram[stage] == shProg) { > + programs_in_use |= 1 << stage; > + } > + } > > + FLUSH_VERTICES(ctx, 0); > _mesa_glsl_link_shader(ctx, shProg); > > + /* From section 7.3 (Program Objects) of the OpenGL 4.5 spec: > + * > + * "If LinkProgram or ProgramBinary successfully re-links a program > + * object that is active for any shader stage, then the newly > generated > + * executable code will be installed as part of the current rendering > + * state for all shader stages where the program is active. > + * Additionally, the newly generated executable code is made part of > + * the state of any program pipeline for all stages where the program > + * is attached." > + */ > + if (shProg->data->LinkStatus && programs_in_use) { > + ctx->NewState |= _NEW_PROGRAM; > + } > + > /* Capture .shader_test files. */ > const char *capture_path = _mesa_get_shader_capture_path(); > if (shProg->Name != 0 && shProg->Name != ~0 && capture_path != NULL) { > -- > 2.9.3 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev