|
|
vs_3_sw
|
|
|
def c3056, 1, 2, 3, 4
|
|
|
|
|
|
dcl_position v0
|
|
|
dcl_normal v1
|
|
|
dcl_normal1 v3
|
|
|
|
|
|
dcl_color4 o3.x
|
|
|
dcl_texcoord3 o3.yz
|
|
|
dcl_fog o3.w
|
|
|
dcl_tangent o4.xyz
|
|
|
dcl_position o7.xyzw
|
|
|
dcl_psize o6
|
|
|
|
|
|
#define oPos o7
|
|
|
#define oD0 o3
|
|
|
|
|
|
def c76, -10.0e5, 2.0e4, 3.3e2, 4.4
|
|
|
def c15, 1, 2, 3, 4
|
|
|
defi i1, 1, 2, 3,0
|
|
|
defb b11, true
|
|
|
defb b12, false
|
|
|
|
|
|
if_le v0.x, v1.y
|
|
|
nop
|
|
|
else
|
|
|
nop
|
|
|
endif
|
|
|
|
|
|
mova a0.yw, v0.argb
|
|
|
loop aL, i1
|
|
|
nop
|
|
|
break_le v1.x, r0.y
|
|
|
breakp !p0.y
|
|
|
nop
|
|
|
endloop
|
|
|
|
|
|
; Decompress position
|
|
|
mov r0.x, v0.x
|
|
|
mov r0.y, c4.w ; 1
|
|
|
mov r0.z, v0.y
|
|
|
mov r0.w, c4.w ; 1
|
|
|
|
|
|
setp_ge p0.yz, v1, v1
|
|
|
|
|
|
callnz l1, b11
|
|
|
callnz l1, !p0.w
|
|
|
|
|
|
|
|
|
if !p0.z
|
|
|
m3x2 r0.xy, r1, c0 ;which will be expanded to:
|
|
|
else
|
|
|
nop
|
|
|
endif
|
|
|
|
|
|
call l1
|
|
|
|
|
|
; Debug code [start]
|
|
|
ret
|
|
|
label l1
|
|
|
m3x2 r0.xy, r1, c0 ;which will be expanded to:
|
|
|
mov r0, r0.xz
|
|
|
; Debug code [end]
|
|
|
|
|
|
; Compute theta from distance and time
|
|
|
mov r4.xz, r0 ; xz
|
|
|
mov r4.y, c4.y ; y = 0
|
|
|
dp3 r4.x, r4, r4 ; d2
|
|
|
rsq r4.x, r4.x
|
|
|
rcp r4.x, r4.x ; d
|
|
|
mul r4.xyz, r4, c4.x ; scale by time
|
|
|
|
|
|
; Clamp theta to -pi..pi
|
|
|
add r4.x, r4.x, c7.x
|
|
|
mul r4.x, r4.x, c7.y
|
|
|
frc r4.xy, r4.x
|
|
|
mul r4.x, r4.x, c7.z
|
|
|
add r4.x, r4.x,-c7.x
|
|
|
|
|
|
; Compute first 4 values in sin and cos series
|
|
|
mov r5.x, c4.w ; d^0
|
|
|
mov r4.x, r4.x ; d^1
|
|
|
mul r5.y, r4.x, r4.x ; d^2
|
|
|
mul r4.y, r4.x, r5.y ; d^3
|
|
|
mul r5.z, r5.y, r5.y ; d^4
|
|
|
mul r4.z, r4.x, r5.z ; d^5
|
|
|
mul r5.w, r5.y, r5.z ; d^6
|
|
|
mul r4.w, r4.x, r5.w ; d^7
|
|
|
|
|
|
mul r4, r4, c10 ; sin
|
|
|
dp4 r4.x, r4, c4.w
|
|
|
|
|
|
mul r5, r5, c11 ; cos
|
|
|
dp4 r5.x, r5, c4.w
|
|
|
|
|
|
; Set color
|
|
|
add r5.x, -r5.x, c4.w ; + 1.0
|
|
|
mul oD0, r5.x, c4.z ; * 0.5
|
|
|
|
|
|
; Scale height
|
|
|
mul r0.y, r4.x, c7.w
|
|
|
|
|
|
; Transform position
|
|
|
dp4 oPos.x, r0, c0
|
|
|
dp4 oPos.y, r0, c1
|
|
|
dp4 oPos.z, r0, c2
|
|
|
dp4 oPos.w, r0, c3
|
|
|
|
|
|
ret
|
|
|
|
|
|
|