<p dir="ltr">On Nov 13, 2016 14:32, "Marek Olšák" <<a href="mailto:maraeo@gmail.com">maraeo@gmail.com</a>> wrote:<br>
><br>
> Interesting idea. Also added this:<br>
></p>
<p dir="ltr">Oh, nice! Gotta catch them all :-)</p>
<p dir="ltr">> diff --git a/src/compiler/glsl/linker.cpp b/src/compiler/glsl/linker.cpp<br>
> index cc28b26..295d10b 100644<br>
> --- a/src/compiler/glsl/linker.cpp<br>
> +++ b/src/compiler/glsl/linker.cpp<br>
> @@ -4985,10 +4985,9 @@ link_shaders(struct gl_context *ctx, struct<br>
> gl_shader_program *prog)<br>
>           lower_tess_level(prog->_LinkedShaders[i]);<br>
>        }<br>
><br>
> -      while (do_common_optimization(prog->_LinkedShaders[i]->ir, true, false,<br>
> -                                    &ctx->Const.ShaderCompilerOptions[i],<br>
> -                                    ctx->Const.NativeIntegers))<br>
> -         ;<br>
> +      do_common_optimization(prog->_LinkedShaders[i]->ir, true, false,<br>
> +                            &ctx->Const.ShaderCompilerOptions[i],<br>
> +                            ctx->Const.NativeIntegers);<br>
><br>
>        lower_const_arrays_to_uniforms(prog->_LinkedShaders[i]->ir, i);<br>
>        propagate_invariance(prog->_LinkedShaders[i]->ir);<br>
> diff --git a/src/mesa/main/ff_fragment_shader.cpp<br>
> b/src/mesa/main/ff_fragment_shader.cpp<br>
> index 9aa1dc1..3890c54 100644<br>
> --- a/src/mesa/main/ff_fragment_shader.cpp<br>
> +++ b/src/mesa/main/ff_fragment_shader.cpp<br>
> @@ -1251,9 +1251,9 @@ create_new_program(struct gl_context *ctx,<br>
> struct state_key *key)<br>
>     const struct gl_shader_compiler_options *options =<br>
>        &ctx->Const.ShaderCompilerOptions[MESA_SHADER_FRAGMENT];<br>
><br>
> -   while (do_common_optimization(p.shader->ir, false, false, options,<br>
> -                                 ctx->Const.NativeIntegers))<br>
> -      ;<br>
> +   do_common_optimization(p.shader->ir, false, false, options,<br>
> +                         ctx->Const.NativeIntegers);<br>
> +<br>
>     reparent_ir(p.shader->ir, p.shader->ir);<br>
><br>
>     p.shader->CompileStatus = true;<br>
> ------------------<br>
><br>
> I've tested my private shader-db (26011 shaders, many games). I see<br>
> only 2 regressions on radeonsi, both are changes in the code size:<br>
>  WORST REGRESSIONS - Code Size<br>
> Before     After     Delta Percentage<br>
>  shaders/private/alien_isolation/788.shader_test [0]<br>
>  8784      9080       296    3.37 %<br>
>  shaders/private/unigine_tropics/264.shader_test [0]<br>
>  1008      1012         4    0.40 %<br>
><br>
> That's very good. Drivers not using LLVM might see worse regressions though.<br>
><br>
> Now, here are the compile time deltas.<br>
> - GLSL source -> TGSI: -11.5% time<br>
> - GLSL source -> GCN: -6% time<br>
></p>
<p dir="ltr">That's actually better than I had anticipated.<br>
I hadn't gotten around to checking runtime impact.</p>
<p dir="ltr">> Overall, I like it.<br>
></p>
<p dir="ltr">Thanks for the feedback and testing :-)</p>
<p dir="ltr">> Marek<br>
><br>
><br>
> On Sun, Nov 13, 2016 at 2:29 AM, Thomas Helland<br>
> <<a href="mailto:thomashelland90@gmail.com">thomashelland90@gmail.com</a>> wrote:<br>
> > It turns out that only 8% of shaders benefit from more than one run<br>
> > of the do_common_optimization function, now that it has the loop.<br>
> > Doing only one run makes no difference to instruction count with NIR.<br>
> ><br>
> > 8324 shaders were run<br>
> > 8128 benefit from 1 calls to do_common_optimization<br>
> >  679 benefit from 2 calls to do_common_optimization<br>
> >   69 benefit from 3 calls to do_common_optimization<br>
> > ---<br>
> >  src/compiler/glsl/glsl_parser_extras.cpp | 5 ++---<br>
> >  1 file changed, 2 insertions(+), 3 deletions(-)<br>
> ><br>
> > diff --git a/src/compiler/glsl/glsl_parser_extras.cpp b/src/compiler/glsl/glsl_parser_extras.cpp<br>
> > index a5a0837..a1a1f90 100644<br>
> > --- a/src/compiler/glsl/glsl_parser_extras.cpp<br>
> > +++ b/src/compiler/glsl/glsl_parser_extras.cpp<br>
> > @@ -1944,9 +1944,8 @@ _mesa_glsl_compile_shader(struct gl_context *ctx, struct gl_shader *shader,<br>
> >        /* Do some optimization at compile time to reduce shader IR size<br>
> >         * and reduce later work if the same shader is linked multiple times<br>
> >         */<br>
> > -      while (do_common_optimization(shader->ir, false, false, options,<br>
> > -                                    ctx->Const.NativeIntegers))<br>
> > -         ;<br>
> > +      do_common_optimization(shader->ir, false, false, options,<br>
> > +                                    ctx->Const.NativeIntegers);<br>
> ><br>
> >        validate_ir_tree(shader->ir);<br>
> ><br>
> > --<br>
> > 2.9.3<br>
> ><br>
> > _______________________________________________<br>
> > mesa-dev mailing list<br>
> > <a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
> > <a href="https://lists.freedesktop.org/mailman/listinfo/mesa-dev">https://lists.freedesktop.org/mailman/listinfo/mesa-dev</a><br></p>