NOP LQ.xyz VF03, (vertexSize*0+0)(VI11) ; -- load pos[0] NOP LQ.yz VF01, vuSDClipvec1(VI00) ; -- load clipvec1 MULAw.xyzw ACC, VF31, VF00 LOI 2047 ; xform pos[0] ADDi.w VF04, VF00, I NOP MADDAx.xyw ACC, VF28, VF03 LQ.xyz VF04, (vertexSize*1+0)(VI11) ; xform pos[0] -- load pos[1] MADDAy.xyw ACC, VF29, VF03 NOP ; xform pos[0] MADDz.xyzw VF06, VF30, VF03 MR32.x VF03, VF01 ; xform pos[0] MULAw.xyzw ACC, VF31, VF00 LQ.yz VF03, vuSDClipvec2(VI00) ; xform pos[1] -- load clipvec2 MADDAx.xyw ACC, VF28, VF04 LQ.xyzw VF08, (vertexSize*0+2)(VI11) ; xform pos[1] MADDAy.xyw ACC, VF29, VF04 LQ.xyzw VF09, (vertexSize*1+2)(VI11) ; xform pos[1] MADDz.xyzw VF07, VF30, VF04 LQ.xyz VF05, (vertexSize*2+0)(VI11) ; xform pos[1] -- load pos[2] MUL.xy VF04, VF06, VF03 LQ.xy VF10, (vertexSize*0+1)(VI11) ; make clip vect[0].xy ITOF4.w VF10, VF04 IADDIU VI09, VI00, 0 ; set ADC flag ITOF4.w VF01, VF04 IADDIU VI07, VI00, ClippingBuffer ; set ADC flag MUL.xy VF08, VF07, VF03 SQ.xyzw VF08, (vertexSize*0+2)(VI07) ; make clip vect[1].xy -- store rgba[0] MULAw.xyzw ACC, VF31, VF00 SQ.xyzw VF06, (vertexSize*0+0)(VI07) ; xform pos[2] -- store pos[0] MADDAx.xyw ACC, VF28, VF05 SQ.xyzw VF07, (vertexSize*1+0)(VI07) ; xform pos[2] -- store pos[1] MADDAy.xyw ACC, VF29, VF05 SQ.xyzw VF09, (vertexSize*1+2)(VI07) ; xform pos[2] -- store rgba[1] MADDz.xyzw VF05, VF30, VF05 SQ.xyw VF10, (vertexSize*0+1)(VI07) ; xform pos[2] -- store uv,adc[0] ADDA.z ACC, VF00, VF01 IADDIU VI09, VI09, 2 ; make clip vect MADDw.z VF04, VF03, VF06 LQ.xy VF01, (vertexSize*1+1)(VI11) ; make clip vect[0].z -- load uv[1] MADDw.z VF08, VF03, VF07 FCSET 0x0 ; make clip vect[1].z MUL.xy VF07, VF05, VF03 LQ.xyz VF06, (vertexSize*3+0)(VI11) ; make clip vect[2].xy -- load next pos MADDw.z VF07, VF03, VF05 IADDIU VI11, VI11, vertexSize*2 ; make clip vect[2].z CLIPw.xyz VF04, VF06 SQ.xyw VF01, (vertexSize*1+1)(VI07) ; clip vect[0] -- store uv,adc[1] CLIPw.xyz VF08, VF07 IADDIU VI07, VI07, vertexSize*2 ; clip vect[1] GTSCullExpLoop: MULAw.xyzw ACC, VF31, VF00 LQ.xyzw VF10, (vertexSize*0+2)(VI11) ; xform next pos CLIPw.xyz VF07, VF05 LQ.w VF01, (vertexSize*0+0)(VI11) ; clip vect -- load adc MADDAx.xyw ACC, VF28, VF06 LQ.xyz VF08, (vertexSize*0+1)(VI11) ; xform next pos -- load uv MADDAy.xyw ACC, VF29, VF06 IADDIU VI11, VI11, vertexSize ; xform next pos MADDz.xyzw VF09, VF30, VF06 SQ.xyzw VF05, (vertexSize*0+0)(VI07) ; xform next pos -- store pos NOP FCAND VI01, 0x3FFFF ; -- test clip flags NOP IBNE VI01, VI00, GTSCullExpFullClip ; -- cull vertices that are not fully inside NOP SQ.xyzw VF10, (vertexSize*0+2)(VI07) ITOF4.w VF08, VF01 NOP ; make next clip vect -- convert ADC MULw.z VF04, VF03, VF09 B GTSCullExpRedLine ; make next clip vect MUL.xy VF07, VF09, VF03 NOP GTSCullExpFullClip: MULw.z VF04, VF03, VF09 MOVE.w VF08, VF04 ; set ADC flag MUL.xy VF07, VF09, VF03 NOP GTSCullExpRedLine: NOP IADDIU VI07, VI07, vertexSize NOP ISUBIU VI01, VI07, TSClipRedLine NOP SQ.xyzw VF08, (-vertexSize*1+1)(VI07) ; store uv,adc NOP IBGEZ VI01, GTSCullExpExit NOP IADDIU VI09, VI09, 1 MAX.xyzw VF05, VF09, VF09 LQ.xyz VF06, (vertexSize*1+0)(VI11) ; move pos -- load next pos ADD.z VF07, VF04, VF01 IBNE VI11, VI10, GTSCullExpLoop ; make next clip vect NOP NOP GTSCullExpExit: