;//================================================================== ;//================================================================== ;//== == ;//== -PSX2- MULTIPASS - PERSPECTIVE - FOG - TRIANGLES == ;//== == ;//== == ;//== Features : Transform vertices into screen space. Rgbas are == ;//== converted from float to integer. Uv to stq == ;//== perspective correction. Make fog calculation. == ;//== Support 24 bits and 16 bits Zbuffers. == ;//== == ;//== -CHECKED- == ;//== == ;//================================================================== ;//================================================================== ;---------------------------------------------------------------------------- ADDx.xyz VF26, VF31, VF00 LQ.zw VF27, vuSDxMaxyMax(VI00) ; Clone Matrix - Load fog scale/plan ADDx.xy VF23, VF28, VF00 MR32.z VF07, VF00 ; Clone Matrix - Prepare stq-1 ADDx.xy VF24, VF29, VF00 MR32.z VF08, VF00 ; Clone Matrix - Prepare stq-2 ADDx.xyz VF25, VF30, VF00 MR32.z VF09, VF00 ; Clone Matrix - Prepare stq-3 MULz.w VF26, VF31, VF27 MR32.z VF10, VF00 ; Scale fog in w - Prepare stq-4 MULz.w VF23, VF28, VF27 LQ.xyz VF03, (0+0*vertexSize)(VI01) ; Scale fog in w - Load position-1 MULz.w VF24, VF29, VF27 LQ.xy VF07, (1+0*vertexSize)(VI01) ; Scale fog in w - Load uv-1 MULz.w VF25, VF30, VF27 LQ.xyzw VF11, (2+0*vertexSize)(VI01) ; Scale fog in w - Load rgba-1 MULAw.xyzw ACC, VF26, VF00 LQ.xyz VF04, (0+1*vertexSize)(VI01) ; Transform pos-1 - Load position-2 MADDAx.xyw ACC, VF23, VF03 LQ.xy VF08, (1+1*vertexSize)(VI01) ; Transform pos-1 - Load uv-2 MADDAy.xyw ACC, VF24, VF03 LQ.xyzw VF12, (2+1*vertexSize)(VI01) ; Transform pos-1 - Load rgba-2 MADDz.xyzw VF03, VF25, VF03 NOP ; Transform pos-1 SUB.xyz VF22, VF00, VF02 LOI 255.0 ; Fog clamp mini - Fog clamp value MULz.w VF22, VF27, VF27 NOP ; Fog clamp mini MULAi.w ACC, VF00, I NOP ; Fog clamp maxi MADDz.w VF27, VF27, VF27 DIV Q, VF27z, VF03w ; Fog clamp maxi - Inverse zpos-1 MULAw.xyzw ACC, VF26, VF00 LQ.xyz VF05, (0+2*vertexSize)(VI01) ; Transform pos-2 - Load position-3 MAX.w VF21, VF03, VF22 LQ.xy VF09, (1+2*vertexSize)(VI01) ; Clamp fog-1 - Load uv-3 MADDAx.xyw ACC, VF23, VF04 LQ.xyzw VF13, (2+2*vertexSize)(VI01) ; Transform pos-2 - Load rgba-3 MADDAy.xyw ACC, VF24, VF04 NOP ; Transform pos-2 MADDz.xyzw VF04, VF25, VF04 NOP ; Transform pos-2 MINI.w VF03, VF21, VF27 ISW.x VI09, 0(VI14) ; Clamp fog-1 - Store Number of vertices MULq.xyz VF03, VF03, Q IADDIU VI04, VI12, 1 ; Project pos-1 - Multipass Output Buffer adress MULq.xyz VF15, VF07, Q IADDIU VI05, VI14, 1 ; Build stq-1 - Output Buffer adress FTOI0.xyzw VF11, VF11 IADDIU VI06, VI01, 0 ; Int rgba-1 - Input Buffer adress MULAw.xyzw ACC, VF26, VF00 SQ.yzw VF01, 0(VI14) ; Transform pos-3 - Store Gif Tag MPFgeneratorLoop:;--------------------------------------------------------------- SUB.xyzw VF03, VF03, VF22 DIV Q, VF27z, VF04w ; Shift pos-1 - Inverse zpos-2 MADDAx.xyw ACC, VF23, VF05 LQ.xyz VF06, (0+3*vertexSize)(VI06) ; Transform pos-3 - Load position-4 MAX.w VF21, VF04, VF22 LQ.xy VF10, (1+3*vertexSize)(VI06) ; Clamp fog-1 - Load uv-4 MADDAy.xyw ACC, VF24, VF05 LQ.xyzw VF14, (2+3*vertexSize)(VI06) ; Transform pos-3 - Load rgba-4 FTOI4.xyzw VF03, VF03 IADDIU VI06, VI06, vertexSize ; Convert pos-1 - Increment input buffer adress MADDz.xyzw VF05, VF25, VF05 SQI.xyzw VF15, (VI05++) ; Transform pos-3 - Store stq-1 MINI.w VF04, VF21, VF27 SQI.xyzw VF11, (VI05++) ; Clamp fog-2 - Store rgba-1 MULq.xyz VF04, VF04, Q SQ.xyzw VF11, (1+0*OutverSize)(VI04) ; Project pos-2 - Store rgba-1 multipass MULq.xyz VF16, VF08, Q SQ.xyzw VF03, (2+0*OutverSize)(VI04) ; Build stq-2 - Store position-1 multipass FTOI0.xyzw VF12, VF12 IBEQ VI06, VI10, MPFgeneratorEnd ; Int rgba-2 - End test MULAw.xyzw ACC, VF26, VF00 SQI.xyzw VF03, (VI05++) ; Transform pos-4 - Store position-1 SUB.xyzw VF04, VF04, VF22 DIV Q, VF27z, VF05w ; Shift pos-2 - Inverse zpos-3 MADDAx.xyw ACC, VF23, VF06 LQ.xyz VF03, (0+3*vertexSize)(VI06) ; Transform pos-4 - Load position-1 MAX.w VF21, VF05, VF22 LQ.xy VF07, (1+3*vertexSize)(VI06) ; Clamp fog-2 - Load uv-1 MADDAy.xyw ACC, VF24, VF06 LQ.xyzw VF11, (2+3*vertexSize)(VI06) ; Transform pos-4 - Load rgba-1 FTOI4.xyzw VF04, VF04 IADDIU VI06, VI06, vertexSize ; Convert pos-2 - Increment input buffer adress MADDz.xyzw VF06, VF25, VF06 SQI.xyzw VF16, (VI05++) ; Transform pos-4 - Store stq-2 MINI.w VF05, VF21, VF27 SQI.xyzw VF12, (VI05++) ; Clamp fog-3 - Store rgba-2 MULq.xyz VF05, VF05, Q SQ.xyzw VF12, (1+1*OutverSize)(VI04) ; Project pos-3 - Store rgba-2 multipass MULq.xyz VF17, VF09, Q SQ.xyzw VF04, (2+1*OutverSize)(VI04) ; Build stq-3 - Store position-2 multipass FTOI0.xyzw VF13, VF13 IBEQ VI06, VI10, MPFgeneratorEnd ; Int rgba-3 - End test MULAw.xyzw ACC, VF26, VF00 SQI.xyzw VF04, (VI05++) ; Transform pos-1 - Store position-2 SUB.xyzw VF05, VF05, VF22 DIV Q, VF27z, VF06w ; Shift pos-3 - Inverse zpos-4 MADDAx.xyw ACC, VF23, VF03 LQ.xyz VF04, (0+3*vertexSize)(VI06) ; Transform pos-1 - Load position-2 MAX.w VF21, VF06, VF22 LQ.xy VF08, (1+3*vertexSize)(VI06) ; Clamp fog-3 - Load uv-2 MADDAy.xyw ACC, VF24, VF03 LQ.xyzw VF12, (2+3*vertexSize)(VI06) ; Transform pos-1 - Load rgba-2 FTOI4.xyzw VF05, VF05 IADDIU VI06, VI06, vertexSize ; Convert pos-3 - Increment input buffer adress MADDz.xyzw VF03, VF25, VF03 SQI.xyzw VF17, (VI05++) ; Transform pos-1 - Store stq-3 MINI.w VF06, VF21, VF27 SQI.xyzw VF13, (VI05++) ; Clamp fog-4 - Store rgba-3 MULq.xyz VF06, VF06, Q SQ.xyzw VF13, (1+2*OutverSize)(VI04) ; Project pos-4 - Store rgba-3 multipass MULq.xyz VF18, VF10, Q SQ.xyzw VF05, (2+2*OutverSize)(VI04) ; Build stq-4 - Store position-3 multipass FTOI0.xyzw VF14, VF14 IBEQ VI06, VI10, MPFgeneratorEnd ; Int rgba-4 - End test MULAw.xyzw ACC, VF26, VF00 SQI.xyzw VF05, (VI05++) ; Transform pos-2 - Store position-3 SUB.xyzw VF06, VF06, VF22 DIV Q, VF27z, VF03w ; Shift pos-4 - Inverse zpos-1 MADDAx.xyw ACC, VF23, VF04 LQ.xyz VF05, (0+3*vertexSize)(VI06) ; Transform pos-2 - Load position-3 MAX.w VF21, VF03, VF22 LQ.xy VF09, (1+3*vertexSize)(VI06) ; Clamp fog-4 - Load uv-3 MADDAy.xyw ACC, VF24, VF04 LQ.xyzw VF13, (2+3*vertexSize)(VI06) ; Transform pos-2 - Load rgba-3 FTOI4.xyzw VF06, VF06 IADDIU VI06, VI06, vertexSize ; Convert pos-4 - Increment input buffer adress MADDz.xyzw VF04, VF25, VF04 SQI.xyzw VF18, (VI05++) ; Transform pos-2 - Store stq-4 MINI.w VF03, VF21, VF27 SQI.xyzw VF14, (VI05++) ; Clamp fog-1 - Store rgba-4 MULq.xyz VF03, VF03, Q SQ.xyzw VF14, (1+3*OutverSize)(VI04) ; Project pos-1 - Store rgba-4 multipass MULq.xyz VF15, VF07, Q SQ.xyzw VF06, (2+3*OutverSize)(VI04) ; Build stq-1 - Store position-4 multipass NOP IADDIU VI04, VI04, (4*OutverSize) ; - Increment multipass output buffer FTOI0.xyzw VF11, VF11 IBNE VI06, VI10, MPFgeneratorLoop ; Int rgba-1 - End test MULAw.xyzw ACC, VF26, VF00 SQI.xyzw VF06, (VI05++) ; Transform pos-3 - Store position-4 MPFgeneratorEnd:;---------------------------------------------------------------- ;//================================================================================================================ ;//======================================= ======================================================= ;//=================== THE END ========================= ;//======================================= ======================================================= ;//============================================================================================= JCL Janvier 2001 =