st/glsl: start spilling out common st glsl conversion code
authorTimothy Arceri <tarceri@itsqueeze.com>
Wed, 4 Apr 2018 06:01:21 +0000 (16:01 +1000)
committerTimothy Arceri <tarceri@itsqueeze.com>
Wed, 6 Mar 2019 23:05:20 +0000 (23:05 +0000)
commitecceb076e5c99cea94b853a9600947fe78b3ca74
tree6a48b2ef025f4e9d6ca7803814d62ce6820ecef8
parente2fd96a563bbb63d8e3c1f874c65c1350fb19a0d
st/glsl: start spilling out common st glsl conversion code

The NIR and TGSI paths are currently intertwined which makes it
not only hard to follow but also makes it hard to take advantage
of the differences in IR.

Here we take the first step to splitting that path apart. With
this we take the opportunity to no longer call the GLSL IR
optimisation passes after the final lowering calls for NIR. We
can instead just use the NIR passes which can produce better code
and should also result in faster compile times.

The speed-up can be measured in some dolphin uber shaders due to
no longer calling lower_if_to_cond_assign() for example
dolphin/ubershaders/120.shader_test goes from ~1.63 -> ~1.53
seconds on my machine.

There are some code changes as a result of not calling
lower_if_to_cond_assign(), this is because it flattens ifs that
contain UBOs where as NIR's peephole select doesn't. This is
were most of the regressions in Max Waves happens with shader-db.

shader-db results (VEGA):

Totals from affected shaders:
SGPRS: 2349056 -> 2349640 (0.02 %)
VGPRS: 1322160 -> 1323300 (0.09 %)
Spilled SGPRs: 21190 -> 21527 (1.59 %)
Spilled VGPRs: 99 -> 99 (0.00 %)
Private memory VGPRs: 0 -> 0 (0.00 %)
Scratch size: 72 -> 72 (0.00 %) dwords per thread
Code Size: 57260904 -> 57270932 (0.02 %) bytes
Compile Time: 1107186 -> 1022942 (-7.61 %) milliseconds
LDS: 786 -> 786 (0.00 %) blocks
Max Waves: 391932 -> 391619 (-0.08 %)
Wait states: 0 -> 0 (0.00 %)

Reviewed-by: Eric Anholt <eric@anholt.net>
src/mesa/Makefile.sources
src/mesa/meson.build
src/mesa/state_tracker/st_cb_program.c
src/mesa/state_tracker/st_glsl_to_ir.cpp [new file with mode: 0644]
src/mesa/state_tracker/st_glsl_to_ir.h [new file with mode: 0644]
src/mesa/state_tracker/st_glsl_to_tgsi.cpp
src/mesa/state_tracker/st_glsl_to_tgsi.h