glsl: fix potential slow compile times for GLSLOptimizeConservatively

See code comment for full description of the change.

Fixes: 0a5018c1a4 ("mesa: add gl_constants::GLSLOptimizeConservatively")

Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/3034

Tested-by: Witold Baryluk <witold.baryluk@gmail.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5346>
This commit is contained in:
Timothy Arceri
2020-06-05 13:57:40 +10:00
committed by Marge Bot
parent dd81f4853c
commit e43ab7bb05

View File

@@ -2361,7 +2361,20 @@ do_common_optimization(exec_list *ir, bool linked,
OPT(lower_vector_insert, ir, false);
OPT(optimize_swizzles, ir);
OPT(optimize_split_arrays, ir, linked);
/* Some drivers only call do_common_optimization() once rather than in a
* loop, and split arrays causes each element of a constant array to
* dereference is own copy of the entire array initilizer. This IR is not
* something that can be generated manually in a shader and is not
* accounted for by NIR optimisations, the result is an exponential slow
* down in compilation speed as a constant arrays element count grows. To
* avoid that here we make sure to always clean up the mess split arrays
* causes to constant arrays.
*/
bool array_split = optimize_split_arrays(ir, linked);
if (array_split)
do_constant_propagation(ir);
progress |= array_split;
OPT(optimize_redundant_jumps, ir);
if (options->MaxUnrollIterations) {