;//================================================================== ;//================================================================== ;//== == ;//== -PSX2- FXNORMALS PERSPECTIVE - TRIANGLE STRIP - FAST CULLING == ;//== == ;//== == ;//== Features : Transform vertices into camera space and == ;//== perform clipping using the frustum info. == ;//== Clipped triangles are inserted as a new strip == ;//== in the previous strip. == ;//== Process Normals. == ;//== == ;//== -CHECKED- == ;//== == ;//================================================================== ;//================================================================== ;---------------------------------------------------------------------------- NOP LQ.xyzw VF03, (0+0*vertexSize)(VI11) ; - Load position-1 NOP LQ.xyzw VF26, vuSDClipvec1(VI00) ; - Load Clipping vector-1 NOP LQ.xyzw VF06, (1+0*vertexSize)(VI11) ; - Load uv-1 MULAw.xyzw ACC, VF31, VF00 LQ.xyzw VF09, (2+0*vertexSize)(VI11) ; Transform pos-1 - Load rgba-1 MADDAx.xyw ACC, VF28, VF03 LQ.xyzw VF04, (0+1*vertexSize)(VI11) ; Transform pos-1 - Load position-2 MADDAy.xyw ACC, VF29, VF03 MR32.x VF26, VF26 ; Transform pos-1 - Clone Frustrum x coef MADDz.xyzw VF03, VF30, VF03 MR32.x VF24, VF26 ; Transform pos-1 - Transfert Frustrum x coef MULAw.xyzw ACC, VF31, VF00 LQ.yz VF24, vuSDClipvec2(VI00) ; Transform pos-2 - Load Frustrum y-z1 MADDAx.xyw ACC, VF28, VF04 LQ.xyzw VF05, (0+2*vertexSize)(VI11) ; Transform pos-2 - Load position-3 MADDAy.xyw ACC, VF29, VF04 NOP ; Transform pos-2 MADDz.xyzw VF04, VF30, VF04 NOP ; Transform pos-2 MULAw.xyzw ACC, VF31, VF00 NOP ; Transform pos-3 MADDAx.xyw ACC, VF28, VF05 NOP ; Transform pos-3 MADDAy.xyw ACC, VF29, VF05 NOP ; Transform pos-3 MADDz.xyzw VF05, VF30, VF05 NOP ; Transform pos-3 ADDA.z ACC, VF00, VF26 LQ.xyzw VF12, (3+0*vertexSize)(VI11) ; Zmapping offset - Load normal-1 MUL.xy VF16, VF03, VF24 LQ.xyzw VF07, (1+1*vertexSize)(VI11) ; Zmapping pos-1 - Load uv-2 MADDw.z VF16, VF24, VF03 LQ.xyzw VF10, (2+1*vertexSize)(VI11) ; Zmapping pos-1 - Load rgba-2 MUL.xy VF17, VF04, VF24 LQ.xyzw VF13, (3+1*vertexSize)(VI11) ; Zmapping pos-2 - Load normal-2 MADDw.z VF17, VF24, VF04 IADDIU VI09, VI00, 0 ; Zmapping pos-2 - Set vertex counter to 0 MUL.xy VF25, VF05, VF24 IADDIU VI07, VI00, ClippingBuffer ; Zmapping pos-3 - Set Clipping buffer adress MADDw.z VF25, VF24, VF05 IADDIU VI11, VI11, (2*vertexSize) ; Zmapping pos-3 - Set position in the input buffer CLIPw.xyz VF16, VF03 LQ.xyzw VF15, (0+1*vertexSize)(VI11) ; Clip pos-1 - Load new pos-3 CLIPw.xyz VF17, VF04 IADDIU VI05, VI00, 1 ; Clip pos-2 - Set Degeneration flag to active GTSCullExpLoop:;----------------------------------------------------------------- MULAw.xyzw ACC, VF31, VF00 LQ.xyzw VF08, (1-0*vertexSize)(VI11) ; Transform pos-3 - Load uvs CLIPw.xyz VF25, VF05 LQ.xyzw VF11, (2-0*vertexSize)(VI11) ; Clip pos-3 - Load rgbas MADDAx.xyw ACC, VF28, VF15 LQ.xyzw VF14, (3-0*vertexSize)(VI11) ; Transform pos-3 - Load normal MADDAy.xyw ACC, VF29, VF15 NOP ; Transform pos-3 MADDz.xyzw VF15, VF30, VF15 NOP ; Transform pos-3 ADDx.xyzw VF18, VF03, VF00 FCAND VI01, 0x03ffff ; Save pos-1 - Test clipping flag 0000 0011 1111 1111 1111 1111 ADDx.xyzw VF03, VF04, VF00 IBNE VI01, VI00, GTSCullExpFullClip ; Shift pos2-1 - Not inside frustum ADDx.xyzw VF04, VF05, VF00 IADDIU VI11, VI11, (1*vertexSize) ; Shift pos3-2 - Increment input buffe adress NOP IBEQ VI05, VI00, GTSCullExpByPass ; - Degeration test NOP IADDIU VI09, VI09, 1 ; - Increment number of vertices NOP IADDIU VI07, VI07, vertexSize ; - Increment clipping buffer adress NOP SQ.xyzw VF18, (0-1*vertexSize)(VI07) ; - Store degenerated vertex NOP SQI.xyzw VF18, (VI07++) ; - Store position NOP SQI.xyzw VF06, (VI07++) ; - Store uvs NOP SQI.xyzw VF09, (VI07++) ; - Store rgbas NOP SQI.xyzw VF12, (VI07++) ; - Store normal NOP SQI.xyzw VF03, (VI07++) ; - Store position NOP SQI.xyzw VF07, (VI07++) ; - Store uvs NOP SQI.xyzw VF10, (VI07++) ; - Store rgbas NOP SQI.xyzw VF13, (VI07++) ; - Store normal NOP IADDIU VI09, VI09, 3 ; - Increment number of vertices NOP IADDIU VI05, VI00, 0 ; - Reset Clipping flag GTSCullExpByPass:;--------------------------------------------------------------- NOP SQI.xyzw VF04, (VI07++) ; - Store position NOP SQI.xyzw VF08, (VI07++) ; - Store uv NOP SQI.xyzw VF11, (VI07++) ; - Store rgbas MULw.z VF25, VF24, VF15 B GTSCullExpRedLine ; Zmapping pos-3 - Bypass Clipping MUL.xy VF25, VF15, VF24 SQI.xyzw VF14, (VI07++) ; XYZmapping pos-3 - Store normal GTSCullExpFullClip:;------------------------------------------------------------- MULw.z VF25, VF24, VF15 IBNE VI05, VI00, GTSCullExpRedLine ; Zmapping pos-3 - Degeneration test MUL.xy VF25, VF15, VF24 IADDIU VI05, VI00, 1 ; XYZmapping pos-3 - Degeneration flag NOP IADDIU VI09, VI09, 1 ; - Increment number of vertices NOP IADDIU VI07, VI07, vertexSize ; - Increment clipping buffer adress NOP SQ.xyzw VF03, (0-1*vertexSize)(VI07) ; - Store degenerated vertex GTSCullExpRedLine:;-------------------------------------------------------------- ADDx.xyzw VF05, VF15, VF00 ISUBIU VI01, VI07, TSClipRedLine ; Retreive pos-3 - Test Clipping buffer limit ADDx.xyzw VF06, VF07, VF00 MOVE.xyzw VF07, VF08 ; Shift uv2-1 - Shift uv3-2 ADD.z VF25, VF25, VF26 IBGEZ VI01, GTSCullExpExit ; Zmapping pos-3 - Test clipping buffer filling ADDx.xyzw VF09, VF10, VF00 LQ.xyzw VF15, (0+1*vertexSize)(VI11) ; Shift rgba2-1 - Load vertex position ADDx.xyzw VF12, VF13, VF00 IBNE VI11, VI10, GTSCullExpLoop ; Shift normal2-1 - End test ADDx.xyzw VF10, VF11, VF00 MOVE.xyzw VF13, VF14 ; Shift rgba3-2 - Shift normal3-2 GTSCullExpExit:;//=============================================================== ;//================================================================================================================ ;//======================================= ======================================================= ;//=================== THE END ========================= ;//======================================= ======================================================= ;//============================================================================================= JCL Janvier 2001 =