On Mon, Oct 19, 2015 at 2:31 PM, Ilia Mirkin <imir...@alum.mit.edu> wrote: > 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;
Actually this just occurred to me -- you should only check st->can_force_persamp_interp if PIPE_CAP_SAMPLE_SHADING is enabled. Otherwise it should be unreachable. And it's a bit weird for a driver to say "sample shading = no, force persamp interp = yes". >> + >> + 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