Move some literal constants to push constants
Submitted by Ian Romanick
Assigned to Ian Romanick
Description
I have observed a shader that generates code like this:
mov(16) g17<1>
F 0.321569F { align1 1H };
cmp.ge.f0(16) g15<1>
D -g10<8,8,1>F 0F { align1 1H };
and.nz.f0(16) null g15<8,8,1>D 1D { align1 1H compacted };
mov(16) g19<1>
F 0.498039F { align1 1H };
mov(16) g21<1>
F 0.223529F { align1 1H };
mov(16) g23<1>
F 1F { align1 1H };
(-f0) sel(16) g120<1>
F g17<8,8,1>F 0.12549F { align1 1H };
(-f0) sel(16) g122<1>
F g19<8,8,1>F 0.27451F { align1 1H };
(-f0) sel(16) g124<1>
F g21<8,8,1>F 0.192157F { align1 1H };
(-f0) sel(16) g126<1>
F g23<8,8,1>F 0F { align1 1H };
If one set of literal constants were moved to push constants, we could save 4 instructions. The entire shader in question was only 15 instructions, so that would be worthwhile for that case. In other cases it may be more problematic.
Version: git