0001: ; diffuse.vsh
0002: ; c0-3   -- world + ビュー + 透視変換行列
0003: ; c8-11  -- 逆(ビュー + 透視変換)行列
0004: ; c12    -- {0.0, 0.5, 1.0, 2.0}
0005: ;
0006: ; v0    頂点の座標値
0007: ; v3    法線ベクトル (w成分は1.0f)
0008: 
0009: vs.1.1
0010: 
0011: ;座標変換
0012: mov oPos,  v0
0013: 
0014: m4x4 r3, v0, c8
0015: // 正規化
0016: dp3 r3.w, r3, r3
0017: rsq r3.w, r3.w
0018: mul r3, r3, r3.w
0019: 
0020: // oT0 = (0<=(N・L1))?L1:-L1
0021: dp3 r0,   r3, c32           ; (N・L1)
0022: sge   r1,  r0,  c12.x
0023: add   r2,  c32, c32
0024: mad  oT0,  r1,  r2, -c32
0025: 
0026: // oT1 = (0<=(N・L2))?L2:-L2
0027: dp3 r0.a,  r3, c33          ; (N・L2)
0028: sge   r1,  r0.a,  c12.x
0029: add   r2,  c33, c33
0030: mad  oT1,  r1,  r2, -c33
0031: 
0032: ;// (|N・L1|, |N・L1|, |N・L1|, |N・L2|)
0033: max oD0, r0, -r0
0034: 
0035: 
0036: // oT2 = (0<=(N・L3))?L3:-L3
0037: dp3 r0,   r3, c34           ; (N・L3)
0038: sge   r1,  r0,  c12.x
0039: add   r2,  c34, c34
0040: mad  oT2,  r1,  r2, -c34
0041: 
0042: // oT3 = (0<=(N・L4))?L4:-L4
0043: dp3 r0.a,  r3, c35          ; (N・L4)
0044: sge   r1,  r0.a,  c12.x
0045: add   r2,  c35, c35
0046: mad  oT3,  r1,  r2, -c35
0047: 
0048: // (|N・L3|, |N・L3|, |N・L3|, |N・L4|)
0049: max oD1, r0, -r0
0050: