This series is Reviewed-by: Ilia Mirkin <imir...@alum.mit.edu> provided that you run a couple of piglit tests through valgrind and get no additional memory leaks.
-ilia On Sat, Oct 10, 2015 at 9:09 PM, Marek Olšák <mar...@gmail.com> wrote: > From: Marek Olšák <marek.ol...@amd.com> > > --- > src/mesa/state_tracker/st_cb_program.c | 5 +++-- > src/mesa/state_tracker/st_context.c | 14 ++++++++++++++ > src/mesa/state_tracker/st_context.h | 7 +++++++ > 3 files changed, 24 insertions(+), 2 deletions(-) > > diff --git a/src/mesa/state_tracker/st_cb_program.c > b/src/mesa/state_tracker/st_cb_program.c > index 40f2af0..611aea7 100644 > --- a/src/mesa/state_tracker/st_cb_program.c > +++ b/src/mesa/state_tracker/st_cb_program.c > @@ -222,6 +222,7 @@ st_program_string_notify( struct gl_context *ctx, > struct gl_program *prog ) > { > struct st_context *st = st_context(ctx); > + gl_shader_stage stage = _mesa_program_enum_to_shader_stage(target); > > if (target == GL_FRAGMENT_PROGRAM_ARB) { > struct st_fragment_program *stfp = (struct st_fragment_program *) prog; > @@ -276,10 +277,10 @@ st_program_string_notify( struct gl_context *ctx, > st->dirty.st |= ST_NEW_TESSEVAL_PROGRAM; > } > > - if (ST_DEBUG & DEBUG_PRECOMPILE) > + if (ST_DEBUG & DEBUG_PRECOMPILE || > + st->shader_has_one_variant[stage]) > st_precompile_shader_variant(st, prog); > > - /* XXX check if program is legal, within limits */ > return GL_TRUE; > } > > diff --git a/src/mesa/state_tracker/st_context.c > b/src/mesa/state_tracker/st_context.c > index 6256c0b..4f3f525 100644 > --- a/src/mesa/state_tracker/st_context.c > +++ b/src/mesa/state_tracker/st_context.c > @@ -293,6 +293,20 @@ st_create_context_priv( struct gl_context *ctx, struct > pipe_context *pipe, > ctx->Const.ShaderCompilerOptions[i].EmitNoIndirectSampler = true; > } > > + /* Set which shader types can be compiled at link time. */ > + st->shader_has_one_variant[MESA_SHADER_VERTEX] = > + st->has_shareable_shaders && > + !st->clamp_vert_color_in_shader; > + > + st->shader_has_one_variant[MESA_SHADER_FRAGMENT] = > + st->has_shareable_shaders && > + !st->clamp_frag_color_in_shader && > + st->can_force_persample_interp; > + > + st->shader_has_one_variant[MESA_SHADER_TESS_CTRL] = > st->has_shareable_shaders; > + st->shader_has_one_variant[MESA_SHADER_TESS_EVAL] = > st->has_shareable_shaders; > + st->shader_has_one_variant[MESA_SHADER_GEOMETRY] = > st->has_shareable_shaders; > + > _mesa_compute_version(ctx); > > if (ctx->Version == 0) { > diff --git a/src/mesa/state_tracker/st_context.h > b/src/mesa/state_tracker/st_context.h > index 446fe5d..d0aed7e 100644 > --- a/src/mesa/state_tracker/st_context.h > +++ b/src/mesa/state_tracker/st_context.h > @@ -101,6 +101,13 @@ struct st_context > boolean can_force_persample_interp; > boolean has_shareable_shaders; > > + /** > + * If a shader can be created when we get its source. > + * This means it has only 1 variant, not counting glBitmap and > + * glDrawPixels. > + */ > + boolean shader_has_one_variant[MESA_SHADER_STAGES]; > + > boolean needs_texcoord_semantic; > boolean apply_texture_swizzle_to_border_color; > > -- > 2.1.4 > > _______________________________________________ > 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