glsl: Optimize the SoftFP64 shader when first creating it.
By optimizing the shader before inlining, we avoid having to redo this work for each inlined copy of a function. It should also reduce the memory consumption a bit. This cuts the KHR-GL46.arrays_of_arrays_gl.SubroutineFunctionCalls2 runtime by 25% on my Icelake. That test compiles many shaders, which contain large types (dmat4) and division (expensive operations). Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com> Reviewed-by: Matt Turner <mattst88@gmail.com>
This commit is contained in:
parent
914ecc9384
commit
5180a222c0
|
@ -2688,5 +2688,18 @@ glsl_float64_funcs_to_nir(struct gl_context *ctx,
|
|||
NIR_PASS_V(nir, nir_inline_functions);
|
||||
NIR_PASS_V(nir, nir_opt_deref);
|
||||
|
||||
/* Do some optimizations to clean up the shader now. By optimizing the
|
||||
* functions in the library, we avoid having to re-do that work every
|
||||
* time we inline a copy of a function. Reducing basic blocks also helps
|
||||
* with compile times.
|
||||
*/
|
||||
NIR_PASS_V(nir, nir_lower_vars_to_ssa);
|
||||
NIR_PASS_V(nir, nir_copy_prop);
|
||||
NIR_PASS_V(nir, nir_opt_dce);
|
||||
NIR_PASS_V(nir, nir_opt_cse);
|
||||
NIR_PASS_V(nir, nir_opt_gcm, true);
|
||||
NIR_PASS_V(nir, nir_opt_peephole_select, 1, false, false);
|
||||
NIR_PASS_V(nir, nir_opt_dce);
|
||||
|
||||
return nir;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue