Skip to content

lima/ppir: add NIR pass to split varying loads

NIR may emit a single instrinsic to load several packed varyings, but that's suboptimal for Utgard PP for several reasons:

  • varyings that are used as sampler inputs can be passed using pipeline register with increased precision
  • we have small number of regs, so using a vec4 regs for storing two vec2 varyings increases reg pressure.

Add NIR pass to split a single load into several loads and utilize it in lima.

No piglit regressions.

shader-db:

total instructions in shared programs: 81343 -> 81274 (-0.08%)
instructions in affected programs: 217 -> 148 (-31.80%)
helped: 30
HURT: 0
helped stats (abs) min: 1 max: 9 x̄: 2.30 x̃: 2
helped stats (rel) min: 5.26% max: 66.67% x̄: 45.69% x̃: 50.00%
95% mean confidence interval for instructions value: -2.81 -1.79
95% mean confidence interval for instructions %-change: -53.88% -37.49%
Instructions are helped.

total loops in shared programs: 81 -> 81 (0.00%)
loops in affected programs: 0 -> 0
helped: 0
HURT: 0

total spills in shared programs: 80 -> 80 (0.00%)
spills in affected programs: 0 -> 0
helped: 0
HURT: 0

total fills in shared programs: 200 -> 200 (0.00%)
fills in affected programs: 0 -> 0
helped: 0
HURT: 0

LOST:   0
GAINED: 0

Total CPU time (seconds): 121.09 -> 133.92 (10.60%)

Depends on !1981 (merged)

Merge request reports