sl 1.0

li s0, -1
mul r0, V, s0

li s0, -2
dp3 s1, N, r0
mul s0, s0, s1
mul r1, N, s0

add r0, r0, r1

trace r1, Pw, r0

mul r1, r1, Kr

movc x s0, r1
movc x s1, C0
mul s0, s0, s1
lc x r1, s0

movc y s0, r1
movc y s1, C0
mul s0, s0, s1
lc y r1, s0

movc z s0, r1
movc z s1, C0
mul s0, s0, s1
lc z r1, s0

mov v0, r1

mov s0, I

#c1 = Dot(wo, N)
dp3 s1, V, N

# (1 - c1)
li s2, 1
sub s2, s2, s1

#c2 = 1-(eta*eta*(1-c1))
mul s3, s0, s0
mul s3, s3, s2
li s2, 1
sub s2, s2, s3

li s3, 0
blt s2, s3, 24

#c2 = c2^1/2
li s3, 0.5
pow s2, s2, s3

# (eta*c1 - c2) * N
mul s1, s1, s0
sub s1, s1, s2
mul r0, N, s1

#-eta * wo
li s1, -1
mul s0, s0, s1
mul r2, V, s0

#DirT
add r0, r0, r2

trace r1, Pw, r0

#scale by transmissiveness
mul r1, r1, Kt

#modulate by base color
movc x s0, r1
movc x s1, C0
mul s0, s0, s1
lc x r1, s0

movc y s0, r1
movc y s1, C0
mul s0, s0, s1
lc y r1, s0

movc z s0, r1
movc z s1, C0
mul s0, s0, s1
lc z r1, s0

add v0, v0, r1

#now perform specular and diffuse reflection
dp3 s0, N, L
mul s0, s0, Kd
mul r0, C0, s0

add v0, v0, r0

add r0, L, V
norm r0, r0
dp3 s0, N, r0
pow s0, s0, S
mul s0, s0, Ks
mul r0, C1, s0

#component-wise multiply by dE
#yuck!
add v0, v0, r0

movc r s0, v0
movc r s1, dE
mul s0, s0, s1
lc r v0, s0

movc g s0, v0
movc g s1, dE
mul s0, s0, s1
lc g v0, s0

movc b s0, v0
movc b s1, dE
mul s0, s0, s1
lc b v0, s0
