Skip to content
  • Timothy Arceri's avatar
    st/glsl: start spilling out common st glsl conversion code · ecceb076
    Timothy Arceri authored
    
    
    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: default avatarEric Anholt <eric@anholt.net>
    ecceb076