diff options
author | Keith Packard <keithp@keithp.com> | 2008-03-29 14:28:05 -0700 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2008-03-30 18:05:32 -0700 |
commit | 4f469189fed541549e5d470b2529275a29cc2f20 (patch) | |
tree | ff2a6ca81398824b1d22d512509aa0726e383028 /src/exa_sf.g4a | |
parent | 7dcb6e627449c80cea9812462ce6a3e125bd1240 (diff) |
Compute du/dv/dw in no-mask SF prog
Diffstat (limited to 'src/exa_sf.g4a')
-rw-r--r-- | src/exa_sf.g4a | 78 |
1 files changed, 70 insertions, 8 deletions
diff --git a/src/exa_sf.g4a b/src/exa_sf.g4a index 5a023992..4da5ebac 100644 --- a/src/exa_sf.g4a +++ b/src/exa_sf.g4a @@ -26,14 +26,76 @@ * */ -send (1) 0 g6<1>F g1.12<0,1,0>F math inv scalar mlen 1 rlen 1 { align1 }; -send (1) 0 g6.4<1>F g1.20<0,1,0>F math inv scalar mlen 1 rlen 1 { align1 }; -add (8) g7<1>F g4<8,8,1>F -g3<8,8,1>F { align1 }; -mul (1) g7<1>F g7<0,1,0>F g6<0,1,0>F { align1 }; -mul (1) g7.4<1>F g7.4<0,1,0>F g6.4<0,1,0>F { align1 }; -mov (8) m1<1>F g7<0,1,0>F { align1 }; -mov (8) m2<1>F g7.4<0,1,0>F { align1 }; -mov (8) m3<1>F g3<8,8,1>F { align1 }; +/* + * Inputs (note all sub-register addresses are bytes, not float indices) + * + * Note that the vertices will have been reordered: + * + * V0 is topmost (leftmost among topmost) (upper left) + * V1 is next clockwise (lower right) + * V2 is remaining (lower left) + * + * V0 ...................... XX + * | . + * | . + * | . + * V2------------------------V1 + * + * G0 thread state -- just pass along + * + * G1 and G2 are fixed by SF spec + * + * G1.0 reserved + * G1.4 Provoking vertex + * G1.8 Determinant + * G1.12 X1 - X0 + * G1.16 X2 - X0 + * G1.20 Y1 - Y0 + * G1.24 Y2 - Y0 + * G1.30 reserved + * + * G2.0 Z0 + * G2.4 1/W0 + * G2.8 Z1 + * G2.12 1/W1 + * G2.16 Z2 + * G2.20 1/W2 + * G2.24 reserved + * G2.30 reserved + * + * G3 is V0 Vertex Attribute Data from URB (upper left) + * + * G3.0 u0 + * G3.4 v0 + * + * G4 is V1 Vertex Attribute Data from URB (lower right) + * + * G4.0 u1 + * G4.4 v1 + * + * G5 is V2 Vertex Attribute Data from URB (lower left) + * + */ + +/* Compute inverses of the input deltas */ +send (4) 0 g6<1>F g1.12<4,4,1>F math inv mlen 1 rlen 1 { align1 }; + +/* texture value at V0 */ +mov (4) m3<1>F g3<4,4,1>F { align1 }; + +/* compute V1 - V2 (motion in X) for texture coordinates */ +add (4) g7<1>F g4<4,4,1>F -g5<4,4,1>F { align1 }; + +/* multiply by 1/dx */ +mul (4) m1<1>F g7<4,4,1>F g6.0<0,1,0>F { align1 }; + +/* Compute V2 - V0 (motion in Y) for texture coordinates */ +add (4) g7<1>F g5<4,4,1>F -g3<4,4,1>F { align1 }; + +/* multiply by 1/dy */ +mul (4) m2<1>F g7<4,4,1>F g6.8<0,1,0>F {align1 }; + +/* and we're done */ send (8) 0 null g0<8,8,1>F urb 0 transpose used complete mlen 4 rlen 0 { align1 EOT }; nop; nop; |