https://bugs.freedesktop.org/show_bug.cgi?id=49140
--- Comment #4 from Vadim ptpzz@yandex.ru 2012-04-26 17:38:49 PDT --- Created attachment 60642 --> https://bugs.freedesktop.org/attachment.cgi?id=60642 lorentzTransform function
It seems you could replace the following lines in the lorentzTransform function:
r.w = g*p.w - v.x*g*p.x - v.y*g*p.y - v.z*g*p.z; r.x = -v.x*g*p.w + (1.0 + gm1*v.x*v.x/v2)*p.x + (gm1*v.x*v.y/v2)*p.y + (gm1*v.x*v.z/v2)*p.z; r.y = -v.y*g*p.w + (gm1*v.y*v.x/v2)*p.x + (1.0 + gm1*v.y*v.y/v2)*p.y + (gm1*v.y*v.z/v2)*p.z, r.z = -v.z*g*p.w + (gm1*v.z*v.x/v2)*p.x + (gm1*v.z*v.y/v2)*p.y + (1.0+gm1*v.z*v.z/v2)*p.z;
with
vec3 p3 = vec3(p.x, p.y, p.z); float t = dot(v, p3); float t2 = gm1*t/v2 - g*p.w; r = vec4( v*t2 + p3, g * (p.w - t));
Attachment contains the complete text of the modified function with the separate steps of the transformation in the comments. Please check if all steps are correct. Anyway, it shows the direction.
Original shader uses 130 regs, 1262 vliw alu instructions on my system. Modified version - 81 reg, 778 instructions.