105 lines
2.4 KiB
PHP
105 lines
2.4 KiB
PHP
{$asmmode intel}
|
|
asm
|
|
{$ifdef cpux86_64}
|
|
mov rax, Context
|
|
movaps xmm0,[rax+160] //Context^.vL
|
|
movaps xmm2,[rax+192] //Context^.vH
|
|
movaps xmm1,[rax+16] //Context^.Normal
|
|
{$else}
|
|
mov eax, Context
|
|
movaps xmm0,[eax+160] //Context^.vL
|
|
movaps xmm2,[eax+192] //Context^.vH
|
|
movaps xmm1,[eax+16] //Context^.Normal
|
|
{$endif}
|
|
|
|
{$IFDEF PARAM_POINTLIGHT}
|
|
{$ifdef cpux86_64}
|
|
movaps xmm6,[rax+0] //Context^.Position
|
|
{$else}
|
|
movaps xmm6,[eax+0] //Context^.Position
|
|
{$endif}
|
|
subps xmm0,xmm6 //xmm0 = vL
|
|
movaps xmm6, xmm0
|
|
mulps xmm6, xmm6
|
|
|
|
{$IFDEF PARAM_USESSE3}
|
|
haddps xmm6,xmm6
|
|
haddps xmm6,xmm6
|
|
{$ELSE}
|
|
//mix1
|
|
movaps xmm7, xmm6
|
|
shufps xmm7, xmm7, $4e
|
|
addps xmm6, xmm7
|
|
//mix2
|
|
movaps xmm7, xmm6
|
|
shufps xmm7, xmm7, $11
|
|
addps xmm6, xmm7
|
|
{$ENDIF}
|
|
|
|
movss dist2, xmm6 //dist2 := vL*vL;
|
|
|
|
rsqrtps xmm6, xmm6
|
|
mulps xmm0, xmm6 //xmm0 = normalized vL
|
|
{$ENDIF}
|
|
|
|
{$IFDEF PARAM_POINTLIGHT}
|
|
addps xmm2,xmm0 //vH += normalized vL
|
|
movaps xmm6, xmm2
|
|
mulps xmm2, xmm2
|
|
|
|
{$IFDEF PARAM_USESSE3}
|
|
haddps xmm2,xmm2
|
|
haddps xmm2,xmm2
|
|
{$ELSE}
|
|
//mix1
|
|
movaps xmm7, xmm2
|
|
shufps xmm7, xmm7, $4e
|
|
addps xmm2, xmm7
|
|
//mix2
|
|
movaps xmm7, xmm2
|
|
shufps xmm7, xmm7, $11
|
|
addps xmm2, xmm7
|
|
{$ENDIF}
|
|
|
|
rsqrtps xmm2, xmm2
|
|
mulps xmm2, xmm6 //xmm2 = normalized vH
|
|
{$ENDIF}
|
|
|
|
//vL*Normal
|
|
mulps xmm0, xmm1
|
|
//vH*Normal
|
|
mulps xmm2, xmm1
|
|
|
|
{$IFDEF PARAM_USESSE3}
|
|
haddps xmm0,xmm0
|
|
haddps xmm0,xmm0
|
|
{$ELSE}
|
|
//mix1
|
|
movaps xmm7, xmm0
|
|
shufps xmm7, xmm7, $4e
|
|
addps xmm0, xmm7
|
|
//mix2
|
|
movaps xmm7, xmm0
|
|
shufps xmm7, xmm7, $11
|
|
addps xmm0, xmm7
|
|
{$ENDIF}
|
|
|
|
{$IFDEF PARAM_USESSE3}
|
|
haddps xmm2,xmm2
|
|
haddps xmm2,xmm2
|
|
{$ELSE}
|
|
//mix1
|
|
movaps xmm7, xmm2
|
|
shufps xmm7, xmm7, $4e
|
|
addps xmm2, xmm7
|
|
//mix2
|
|
movaps xmm7, xmm2
|
|
shufps xmm7, xmm7, $11
|
|
addps xmm2, xmm7
|
|
{$ENDIF}
|
|
|
|
movss LdotN, xmm0
|
|
movss NdotH, xmm2
|
|
end;
|
|
|