[Mesa-dev] [PATCH] glsl: lower constant arrays to uniform arrays before optimisation loop

Timothy Arceri timothy.arceri at collabora.com
Tue Jan 17 23:02:36 UTC 2017


On Wed, 2017-01-18 at 09:50 +1100, Timothy Arceri wrote:
> Previously the last stage would not get optimised until the backend
> did
> its GLSL IR opt loop.

Wait that would be all stages would not get optimised until the backend
called the glsl ir opts. Forgot we worked on a stage at a time for a
second there.

>  I plan on removing that from i965 shortly which
> caused huge regressions in Deus-ex and Tomb Raider which have large
> constant arrays. Moving lowering before the opt loop in the GLSL
> linker
> fixes this and unexpectedly improves some compute shaders also.
> 
> shader-db results BDW:
> 
> instructions helped:   shaders/closed/steam/deus-ex-mankind-
> divided/374.shader_test CS SIMD16: 204 -> 194 (-4.90%)
> instructions helped:   shaders/closed/steam/deus-ex-mankind-
> divided/318.shader_test CS SIMD8: 1010 -> 741 (-26.63%)
> instructions helped:   shaders/closed/steam/deus-ex-mankind-
> divided/144.shader_test CS SIMD8: 542 -> 385 (-28.97%)
> 
> cycles helped:   shaders/closed/steam/deus-ex-mankind-
> divided/318.shader_test CS SIMD8: 1831382 -> 1818492 (-0.70%)
> cycles helped:   shaders/closed/steam/deus-ex-mankind-
> divided/144.shader_test CS SIMD8: 216238 -> 206180 (-4.65%)
> cycles helped:   shaders/closed/steam/deus-ex-mankind-
> divided/374.shader_test CS SIMD16: 18484 -> 16644 (-9.95%)
> 
> total instructions in shared programs: 13060313 -> 13059877 (-0.00%)
> instructions in affected programs: 1756 -> 1320 (-24.83%)
> helped: 3
> HURT: 0
> 
> total cycles in shared programs: 256586698 -> 256561910 (-0.01%)
> cycles in affected programs: 2066104 -> 2041316 (-1.20%)
> helped: 3
> HURT: 0
> ---
>  src/compiler/glsl/linker.cpp | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/src/compiler/glsl/linker.cpp
> b/src/compiler/glsl/linker.cpp
> index d187b66..5233d43 100644
> --- a/src/compiler/glsl/linker.cpp
> +++ b/src/compiler/glsl/linker.cpp
> @@ -5051,6 +5051,8 @@ link_shaders(struct gl_context *ctx, struct
> gl_shader_program *prog)
>           lower_tess_level(prog->_LinkedShaders[i]);
>        }
>  
> +      lower_const_arrays_to_uniforms(prog->_LinkedShaders[i]->ir,
> i);
> +
>        if (ctx->Const.GLSLOptimizeConservatively) {
>           /* Run it just once. */
>           do_common_optimization(prog->_LinkedShaders[i]->ir, true,
> false,
> @@ -5064,7 +5066,6 @@ link_shaders(struct gl_context *ctx, struct
> gl_shader_program *prog)
>              ;
>        }
>  
> -      lower_const_arrays_to_uniforms(prog->_LinkedShaders[i]->ir,
> i);
>        propagate_invariance(prog->_LinkedShaders[i]->ir);
>     }
>  


More information about the mesa-dev mailing list