0001: ; Shadow.vsh
0002: ; c0-3   -- world + ビュー + 透視変換行列
0003: ; c12    -- {0.0, 0.5, 1.0, 2.0}
0004: ; c13    -- ライトのベクトル 
0005: ; c15    -- ライトの位置のベクトル 
0006: ;
0007: ; v0    頂点の座標値
0008: ; v3    法線ベクトル (w成分は1.0f)
0009: ; v7    テクスチャ座標
0010: 
0011: vs.1.0
0012: 
0013: ;座標変換
0014: sub r0, v0, c15       ; r0 = v-eye
0015: dp3 r1, r0, r0
0016: rsq r1.w, r1.w        ; r1.w = 1/|v-eye|
0017: mul r1.w, c15.w, r1.w ; r1.w = far/|v-eye|
0018: mad r2, r1.w, r0, -r0 ; r2 = (far-|v-eye|)*(v-eye)/|v-eye|
0019: 
0020: dp3 r1, v3, r0
0021: sge r1.w, r1.w, c12.x ; r1.w = (0<=N・L)?1:0
0022: add r1.w, r1, c16     ; オフセット
0023: 
0024: mad r0, -r2, r1.w, v0 ; r0 =  v - (0<=N・L)?(far-|v-eye|)*(v-eye)/|v-eye|:0
0025: mov r0.w, c12.z       ; r0.w = 1
0026: m4x4 oPos, r0, c0
0027: