SUB.w VF23, VF00, VF00 FCSET 0 SUB.w VF25, VF00, VF00 IADDIU VI04, VI00, 0 SUB.xzw VF17, VF00, VF00 LQ.xyzw VF26, vuSDClipvec1(VI00) ; create 0100 -- load clipvec1 ADDw.y VF17, VF00, VF00 LQ.xyzw VF03, (vertexSize*0+0)(VI11) ; create 0100 -- load pos[0] ADDw.z VF19, VF00, VF00 LQ.xyzw VF27, vuSDClipvec2(VI00) ; create 0010 -- load clipvec1 SUB.xyw VF19, VF00, VF00 LQ.xyzw VF04, (vertexSize*1+0)(VI11) ; create 0010 -- load pos[1] MULAw.xyzw ACC, VF31, VF00 LQ.xyzw VF05, (vertexSize*2+0)(VI11) ; -- load pos[2] MADDAx.xyw ACC, VF28, VF03 MR32.x VF26, VF26 MADDAy.xyw ACC, VF29, VF03 MR32.x VF24, VF26 MADDz.xyzw VF03, VF30, VF03 LQ.yz VF24, vuSDClipvec2(VI00) ; xform pos[0] -- load clipvec2 MULAw.xyzw ACC, VF31, VF00 MR32.x VF27, VF27 MADDAx.xyw ACC, VF28, VF04 NOP MADDAy.xyw ACC, VF29, VF04 NOP MADDz.xyzw VF04, VF30, VF04 NOP ; xform pos[1] MULAw.xyzw ACC, VF31, VF00 NOP MADDAx.xyw ACC, VF28, VF05 IADDIU VI02, VI00, 0xC0 ; Sxy FMAC flag MADDAy.xyw ACC, VF29, VF05 MOVE.xyzw VF16, VF03 ; -- copy pos[0] MADDz.xyzw VF05, VF30, VF05 MOVE.xyzw VF18, VF04 ; xform pos[2] -- copy pos[1] ADDA.z ACC, VF00, VF26 IADDIU VI09, VI00, 0 MUL.xy VF01, VF03, VF24 IADDIU VI07, VI00, ClippingBuffer MADDw.z VF01, VF24, VF03 IADDIU VI11, VI11, vertexSize*2 ; make clip pos[0] -- advance vertex pointer MUL.xy VF23, VF04, VF24 IADDIU VI05, VI00, 1 ; -- start new strip MADDw.z VF23, VF24, VF04 SQ.xyzw VF00, 3(VI14) ; make clip pos[1] -- store coef[2] 0001 MUL.xy VF25, VF05, VF24 SQ.xyzw VF17, 5(VI14) ; -- store coef[0] 0100 MADDw.z VF25, VF24, VF05 SQ.xyzw VF19, 1(VI14) ; make clip pos[2] -- store coef[1] 0010 CLIPw.xyz VF00, VF00 LQ.xyzw VF15, (vertexSize*1+0)(VI11) ; clear clip flags -- load next pos[2] TSEExpanderLoop: CLIPw.xyz VF01, VF03 SQ.xyzw VF03, 4(VI14) ; clip pos[0] -- store pos[0] CLIPw.xyz VF23, VF04 SQ.xyzw VF04, 0(VI14) ; clip pos[1] -- store pos[1] CLIPw.xyz VF25, VF05 SQ.xyzw VF05, 2(VI14) ; clip pos[2] -- store pos[2] NOP ILW.w VI01, 0(VI11) ; -- get ADC flag MULAw.xyzw ACC, VF31, VF00 MOVE.xyzw VF01, VF23 MADDAx.xyw ACC, VF28, VF15 IADDIU VI08, VI14, 6 ; -- next clip vertices MADDAy.xyw ACC, VF29, VF15 IADDIU VI03, VI14, 0 ; -- current clip vertices MADDz.xyzw VF15, VF30, VF15 IBNE VI01, VI00, TSEFullClip ; xform next pos[2] -- not visible if ADC flag ; Z = near plane ;--------------- TSEWall1: ADDx.xyzw VF23, VF25, VF00 FCAND VI01, 0xFFFFFF ; next clip pos[1] -- test all planes ADDx.xyzw VF16, VF03, VF00 IBEQ VI01, VI00, TSEFullTrig ; get pos[0] -- all vertices inside NOP FCOR VI01, 0x7DF7DF ; -- test -z 011111 011111 011111 011111 ADDw.y VF06, VF00, VF18 IBNE VI01, VI00, TSEFullClip ; pos[1].z -- all vertices outside near ADDw.x VF06, VF00, VF03 FCAND VI01, 0x820820 ; pos[0].z -- test -z 100000 100000 100000 100000 NOP IBEQ VI01, VI00, TSEWall2 ; -- all vertices inside near, next plane SUBw.w VF20, VF18, VF16 LQ.xyzw VF17, -1(VI08) ; pos[1].z-pos[0].z -- load coef[0] CLIPw.xyz VF00, VF00 IADDIU VI04, VI08, 0 ; clear clip flags -- end of clip buffer TSERing1: SUBw.xy VF07, VF06, VF27 LQ.xyzw VF08, 2(VI03) ; pos[0,1].z-near (flags) -- load pos[2] ADDy.x VF06, VF00, VF06 LQ.xyzw VF19, 1(VI03) ; pos[1].z -- load coef[1] MUL.xy VF09, VF18, VF24 IADDIU VI03, VI03, 2 ; make clip pos[1] ADDA.z ACC, VF00, VF26 DIV Q, VF00w, VF20w ; make clip pos[1] -- recip dist ADDw.y VF06, VF00, VF08 FMAND VI01, VI02 ; pos[2].z -- check if any is in front of near MADDw.z VF09, VF24, VF18 IBEQ VI01, VI02, TSENext1 ; make clip pos[1] -- both outside plane MULAy.xyzw ACC, VF16, VF07 MOVE.xyzw VF16, VF18 ; interp pos -- next pos[0] MSUBx.xyzw VF22, VF18, VF07 IBEQ VI01, VI00, TSESwap1 ; interp pos -- both inside plane MULAy.xyzw ACC, VF17, VF07 NOP ; interp coef MSUBx.xyzw VF21, VF19, VF07 NOP ; interp coef NOP NOP MULq.xyw VF22, VF22, Q NOP ; interp pos SUBw.z VF20, VF00, VF27 NOP ; make clip pos MULq.xyzw VF21, VF21, Q IADDIU VI02, VI00, 0x40 ; interp coef -- pos[1].z flag NOP NOP MUL.xy VF20, VF22, VF24 SQI.xyzw VF22, (VI08++) ; make clip pos -- store new pos NOP NOP NOP SQI.xyzw VF21, (VI08++) ; -- store new coef NOP IBEQ VI01, VI02, TSENext1 ; -- don't store endpoint if outside frustum CLIPw.xyz VF20, VF22 IADDIU VI02, VI00, 0xC0 ; clip interp pos -- pos[0,1].z flags TSESwap1: NOP SQI.xyzw VF18, (VI08++) ; -- store pos[1] CLIPw.xyz VF09, VF18 SQI.xyzw VF19, (VI08++) ; clip pos[1] -- store coef[1] TSENext1: ADDx.xyzw VF18, VF08, VF00 IBNE VI03, VI04, TSERing1 ; next pos[1] SUBw.w VF20, VF08, VF16 MOVE.xyzw VF17, VF19 ; next z-dist -- next coef[0] NOP IBEQ VI08, VI04, TSEFullClip ; no new vertices NOP LQ.xyzw VF16, -2(VI08) ; -- load pos[0] ; Z = far plane ;-------------- TSEWall2: NOP FCAND VI01, 0x7DF7DF ; -- test remaining sides 011111 011111 011111 011111 NOP IBEQ VI01, VI00, TSEMetaFormer ; -- rest is inside SUBw.y VF06, VF00, VF18 FCOR VI01, 0xBEFBEF ; -pos[1].z -- 101111 101111 101111 101111 SUBw.x VF06, VF00, VF16 IBNE VI01, VI00, TSEFullClip ; -pos[0].z -- all outside this plane NOP FCAND VI01, 0x410410 ; -- 010000 010000 010000 010000 NOP IBEQ VI01, VI00, TSEWall3 ; -- all inside this plane NOP LQ.xyzw VF17, -1(VI08) ; -- load coef[0] SUBx.y VF20, VF06, VF06 IADDIU VI04, VI08, 0 ; pos[0].z-pos[1].z -- end of clip buffer TSERing2: ADDw.xy VF07, VF06, VF26 LQ.xyzw VF08, 2(VI03) ; far-pos[0,1].z -- load pos[2] ADDx.xyzw VF22, VF16, VF00 LQ.xyzw VF19, 1(VI03) ; -- load coef[1] ADDx.xyzw VF16, VF18, VF00 IADDIU VI03, VI03, 2 ADDy.x VF06, VF00, VF06 DIV Q, VF00w, VF20y ; pos[1].z -- recip dist SUBw.y VF06, VF00, VF08 FMAND VI01, VI02 ; pos[2].z -- test edge MULAy.xyzw ACC, VF22, VF07 IBEQ VI01, VI02, TSENext2 ; interp pos -- fully outside MSUBx.xyzw VF22, VF16, VF07 SQ.xyzw VF22, 0(VI08) ; interp pos -- store pos[0] MULAy.xyzw ACC, VF17, VF07 SQ.xyzw VF17, 1(VI08) ; interp coef -- store coef[0] MSUBx.xyzw VF21, VF19, VF07 IBEQ VI01, VI00, TSENext2 ; interp coef -- fully inside NOP IADDIU VI08, VI08, 2 NOP NOP MULq.xyzw VF22, VF22, Q IADDIU VI02, VI00, 0x40 ; interp pos -- test pos[1] MULq.xyzw VF21, VF21, Q NOP ; interpo coef NOP IBEQ VI01, VI02, TSESwap2 ; -- outside, store new pos NOP IADDIU VI02, VI00, 0xC0 NOP ISUBIU VI08, VI08, 2 ; -- inside, pos[0] was outside, so remove TSESwap2: NOP SQI.xyzw VF22, (VI08++) ; -- store new pos NOP SQI.xyzw VF21, (VI08++) ; -- store new coef TSENext2: ADDx.xyzw VF18, VF08, VF00 IBNE VI03, VI04, TSERing2 SUBx.y VF20, VF06, VF06 MOVE.xyzw VF17, VF19 NOP LQ.xyzw VF16, -2(VI08) NOP IBEQ VI08, VI04, TSEFullClip NOP NOP ;------------- TSEWall3: ADDAw.y ACC, VF00, VF18 FCAND VI01, 0x3CF3CF ; p1.z+y -- 001111 001111 001111 001111 MADDy.y VF06, VF27, VF18 IBEQ VI01, VI00, TSEMetaFormer ; p1.z+y -- rest completely inside ADDAw.x ACC, VF00, VF16 FCOR VI01, 0xDF7DF7 ; p0.z+y -- 110111 110111 110111 110111 MADDy.x VF06, VF27, VF16 IBNE VI01, VI00, TSEFullClip ; p0.z+y NOP FCAND VI01, 0x208208 ; -- 001000 001000 001000 001000 NOP IBEQ VI01, VI00, TSEWall4 NOP LQ.xyzw VF17, -1(VI08) SUBx.y VF20, VF06, VF06 IADDIU VI04, VI08, 0 ; p1.dist - p0.dist TSERing3: ADD.xy VF07, VF06, VF00 LQ.xyzw VF08, 2(VI03) ; test ADDx.xyzw VF22, VF16, VF00 LQ.xyzw VF19, 1(VI03) ADDx.xyzw VF16, VF18, VF00 IADDIU VI03, VI03, 2 ADDy.x VF06, VF00, VF06 DIV Q, VF00w, VF20y ADDAw.y ACC, VF00, VF08 FMAND VI01, VI02 ; -- test flags MADDy.y VF06, VF27, VF08 SQ.xyzw VF22, 0(VI08) MULAy.xyzw ACC, VF22, VF07 IBEQ VI01, VI02, TSENext3 ; -- both outside MSUBx.xyzw VF22, VF16, VF07 SQ.xyzw VF17, 1(VI08) MULAy.xyzw ACC, VF17, VF07 IBEQ VI01, VI00, TSENext3 ; -- both inside MSUBx.xyzw VF21, VF19, VF07 IADDIU VI08, VI08, 2 NOP NOP NOP IADDIU VI02, VI00, 0x40 MULq.xyzw VF22, VF22, Q NOP MULq.xyzw VF21, VF21, Q NOP NOP IBEQ VI01, VI02, TSESwap3 NOP IADDIU VI02, VI00, 0xC0 NOP ISUBIU VI08, VI08, 2 TSESwap3: NOP SQI.xyzw VF22, (VI08++) NOP SQI.xyzw VF21, (VI08++) TSENext3: ADDx.xyzw VF18, VF08, VF00 IBNE VI03, VI04, TSERing3 SUBx.y VF20, VF06, VF06 MOVE.xyzw VF17, VF19 NOP LQ.xyzw VF16, -2(VI08) NOP IBEQ VI08, VI04, TSEFullClip NOP NOP TSEWall4: ADDAw.y ACC, VF00, VF18 FCAND VI01, 0x1C71C7 ; 000111 000111 000111 000111 MSUBy.y VF06, VF27, VF18 IBEQ VI01, VI00, TSEMetaFormer ADDAw.x ACC, VF00, VF16 FCOR VI01, 0xEFBEFB ; 111011 111011 111011 111011 MSUBy.x VF06, VF27, VF16 IBNE VI01, VI00, TSEFullClip NOP FCAND VI01, 0x104104 ; 000100 000100 000100 000100 NOP IBEQ VI01, VI00, TSEWall5 NOP LQ.xyzw VF17, 0x7FF(VI08) SUBx.y VF20, VF06, VF06 IADDIU VI04, VI08, 0x0 TSERing4: ADD.xy VF07, VF06, VF00 LQ.xyzw VF08, 0x2(VI03) ADDx.xyzw VF22, VF16, VF00 LQ.xyzw VF19, 0x1(VI03) ADDx.xyzw VF16, VF18, VF00 IADDIU VI03, VI03, 0x2 ADDy.x VF06, VF00, VF06 DIV Q, VF00w, VF20y ADDAw.y ACC, VF00, VF08 FMAND VI01, VI02 MSUBy.y VF06, VF27, VF08 SQ.xyzw VF22, 0x0(VI08) MULAy.xyzw ACC, VF22, VF07 IBEQ VI01, VI02, TSENext4 MSUBx.xyzw VF22, VF16, VF07 SQ.xyzw VF17, 0x1(VI08) MULAy.xyzw ACC, VF17, VF07 IBEQ VI01, VI00, TSENext4 MSUBx.xyzw VF21, VF19, VF07 IADDIU VI08, VI08, 0x2 NOP NOP NOP IADDIU VI02, VI00, 0x40 MULq.xyzw VF22, VF22, Q NOP MULq.xyzw VF21, VF21, Q NOP NOP IBEQ VI01, VI02, TSESwap4 NOP IADDIU VI02, VI00, 0xC0 NOP ISUBIU VI08, VI08, 0x2 TSESwap4: NOP SQI.xyzw VF22, (VI08++) NOP SQI.xyzw VF21, (VI08++) TSENext4: ADDx.xyzw VF18, VF08, VF00 IBNE VI03, VI04, TSERing4 SUBx.y VF20, VF06, VF06 MOVE.xyzw VF17, VF19 NOP LQ.xyzw VF16, 0x7FE(VI08) NOP IBEQ VI08, VI04, TSEFullClip NOP NOP TSEWall5: ADDAw.y ACC, VF00, VF18 FCAND VI01, 0x0C30C3 ; 000011 000011 000011 000011 MADDx.y VF06, VF26, VF18 IBEQ VI01, VI00, TSEMetaFormer ADDAw.x ACC, VF00, VF16 FCOR VI01, 0xF7DF7D ; 111101 111101 111101 111101 MADDx.x VF06, VF26, VF16 IBNE VI01, VI00, TSEFullClip NOP FCAND VI01, 0x082082 ; 000010 000010 000010 000010 NOP IBEQ VI01, VI00, TSEWall6 NOP LQ.xyzw VF17, 0x7FF(VI08) SUBx.y VF20, VF06, VF06 IADDIU VI04, VI08, 0x0 TSERing5: ADD.xy VF07, VF06, VF00 LQ.xyzw VF08, 0x2(VI03) ADDx.xyzw VF22, VF16, VF00 LQ.xyzw VF19, 0x1(VI03) ADDx.xyzw VF16, VF18, VF00 IADDIU VI03, VI03, 0x2 ADDy.x VF06, VF00, VF06 DIV Q, VF00w, VF20y ADDAw.y ACC, VF00, VF08 FMAND VI01, VI02 MADDx.y VF06, VF26, VF08 SQ.xyzw VF22, 0x0(VI08) MULAy.xyzw ACC, VF22, VF07 IBEQ VI01, VI02, TSENext5 MSUBx.xyzw VF22, VF16, VF07 SQ.xyzw VF17, 0x1(VI08) MULAy.xyzw ACC, VF17, VF07 IBEQ VI01, VI00, TSENext5 MSUBx.xyzw VF21, VF19, VF07 IADDIU VI08, VI08, 0x2 NOP NOP NOP IADDIU VI02, VI00, 0x40 MULq.xyzw VF22, VF22, Q NOP MULq.xyzw VF21, VF21, Q NOP NOP IBEQ VI01, VI02, TSESwap5 NOP IADDIU VI02, VI00, 0xC0 NOP ISUBIU VI08, VI08, 0x2 TSESwap5: NOP SQI.xyzw VF22, (VI08++) NOP SQI.xyzw VF21, (VI08++) TSENext5: ADDx.xyzw VF18, VF08, VF00 IBNE VI03, VI04, TSERing5 SUBx.y VF20, VF06, VF06 MOVE.xyzw VF17, VF19 NOP LQ.xyzw VF16, 0x7FE(VI08) NOP IBEQ VI08, VI04, TSEFullClip NOP NOP TSEWall6: ADDAw.y ACC, VF00, VF18 FCAND VI01, 0x041041 ; 000001 000001 000001 000001 MSUBx.y VF06, VF26, VF18 IBEQ VI01, VI00, TSEMetaFormer ADDAw.x ACC, VF00, VF16 FCOR VI01, 0xFBEFBE ; 111110 111110 111110 111110 MSUBx.x VF06, VF26, VF16 IBNE VI01, VI00, TSEFullClip NOP FCAND VI01, 0x041041 ; 000001 000001 000001 000001 NOP IBEQ VI01, VI00, TSEMetaFormer NOP LQ.xyzw VF17, 0x7FF(VI08) SUBx.y VF20, VF06, VF06 IADDIU VI04, VI08, 0x0 TSERing6: ADD.xy VF07, VF06, VF00 LQ.xyzw VF08, 0x2(VI03) ADDx.xyzw VF22, VF16, VF00 LQ.xyzw VF19, 0x1(VI03) ADDx.xyzw VF16, VF18, VF00 IADDIU VI03, VI03, 0x2 ADDy.x VF06, VF00, VF06 DIV Q, VF00w, VF20y ADDAw.y ACC, VF00, VF08 FMAND VI01, VI02 MSUBx.y VF06, VF26, VF08 SQ.xyzw VF22, 0x0(VI08) MULAy.xyzw ACC, VF22, VF07 IBEQ VI01, VI02, TSENext6 MSUBx.xyzw VF22, VF16, VF07 SQ.xyzw VF17, 0x1(VI08) MULAy.xyzw ACC, VF17, VF07 IBEQ VI01, VI00, TSENext6 MSUBx.xyzw VF21, VF19, VF07 IADDIU VI08, VI08, 0x2 NOP NOP NOP IADDIU VI02, VI00, 0x40 MULq.xyzw VF22, VF22, Q NOP MULq.xyzw VF21, VF21, Q NOP NOP IBEQ VI01, VI02, TSESwap6 NOP IADDIU VI02, VI00, 0xC0 NOP ISUBIU VI08, VI08, 0x2 TSESwap6: NOP SQI.xyzw VF22, (VI08++) NOP SQI.xyzw VF21, (VI08++) TSENext6: ADDx.xyzw VF18, VF08, VF00 IBNE VI03, VI04, TSERing6 SUBx.y VF20, VF06, VF06 MOVE.xyzw VF17, VF19 ;------------- TSEMetaFormer: NOP LOI 2047 ADDi.w VF01, VF00, I IBEQ VI08, VI04, TSEFullClip ; -- no vertices NOP NOP NOP LQI.xyw VF03, (VI04++) ; -- load vert[0] NOP LQI.yzw VF14, (VI04++) ; -- load coef[0] NOP LQ.xy VF08, (-vertexSize*2+1)(VI11) ; -- load uv[0] NOP LQ.xy VF09, (-vertexSize*1+1)(VI11) ; -- load uv[1] NOP LQ.xyzw VF11, (-vertexSize*2+2)(VI11) ; -- load rgba[0] MAX.z VF03, VF31, VF31 LQ.xyzw VF12, (-vertexSize*1+2)(VI11) ; -- load rgba[1] NOP LQ.xy VF10, (-vertexSize*0+1)(VI11) ; -- load uv[2] MAX.z VF06, VF31, VF31 IADDIU VI07, VI07, vertexSize MULAy.xy ACC, VF08, VF14 LQ.xyzw VF13, (-vertexSize*0+2)(VI11) ; interp uv[0] -- load rgba[2] MADDAz.xy ACC, VF09, VF14 SQ.xyzw VF03, (-vertexSize*1+0)(VI07) ; interp uv[0] -- store vert[0] MADDw.xy VF07, VF10, VF14 LQD.yzw VF16, (--VI08) ; interp uv[0] -- load coef[n] MULAy.xyzw ACC, VF11, VF14 LQD.xyw VF06, (--VI08) ; interp rgba[0] -- load vert[n] MADDAz.xyzw ACC, VF12, VF14 SQ.w VF01, (-vertexSize*1+1)(VI07) ; interp rgba[0] -- store adc[0] MADDw.xyzw VF14, VF13, VF14 LQ.w VF07, (-vertexSize*0+0)(VI11) ; interp rgba[0] -- load pos[2].w, ; would need an ITOF4 but guaranteed to be 0. ; invisible triangles skipped earlier TSEMetaFormerLoop: NOP ISUB VI01, VI08, VI04 NOP SQ.xyzw VF03, (vertexSize*0+0)(VI07) ; -- store vert[0] NOP LQI.xyw VF03, (VI04++) MULAy.xy ACC, VF08, VF16 SQ.xyw VF07, (vertexSize*0+1)(VI07) ; -- store interp uv[0] MADDAz.xy ACC, VF09, VF16 SQ.xyzw VF14, (vertexSize*0+2)(VI07) ; -- store interp rgba[0] MADDw.xy VF07, VF10, VF16 LQI.yzw VF17, (VI04++) MULAy.xyzw ACC, VF11, VF16 IADDIU VI07, VI07, vertexSize MADDAz.xyzw ACC, VF12, VF16 IBLTZ VI01, TSEMetaFormerEnd MADDw.xyzw VF18, VF13, VF16 IADDIU VI09, VI09, 1 NOP ISUB VI01, VI08, VI04 NOP LQD.yzw VF16, (--VI08) ; -- load coef[n] NOP SQ.xyzw VF06, (vertexSize*0+0)(VI07) ; -- store vert[n] MULAy.xy ACC, VF08, VF17 SQ.xyw VF07, (vertexSize*0+1)(VI07) ; -- store uv[n] MADDAz.xy ACC, VF09, VF17 SQ.xyzw VF18, (vertexSize*0+2)(VI07) ; -- store rgba[n] MADDw.xy VF07, VF10, VF17 IADDIU VI07, VI07, vertexSize MULAy.xyzw ACC, VF11, VF17 LQD.xyw VF06, (--VI08) ; -- load vert[n] MADDAz.xyzw ACC, VF12, VF17 IBGEZ VI01, TSEMetaFormerLoop MADDw.xyzw VF14, VF13, VF17 IADDIU VI09, VI09, 1 TSEMetaFormerEnd: NOP B TSEFullClip NOP IADDIU VI09, VI09, 1 ;---------- TSEFullTrig: ; all 3 vertices inside NOP LOI 2047 ADDi.w VF01, VF00, I IBEQ VI05, VI00, TSEByPass ; ADC flag -- continuing string NOP IADDIU VI09, VI09, 1 NOP LQ.xyzw VF09, (-vertexSize*2+2)(VI11) ; -- load rbga[0] NOP LQ.xy VF07, (-vertexSize*2+1)(VI11) ; -- load uv[0] MAX.w VF07, VF01, VF01 LQ.xy VF06, (-vertexSize*1+1)(VI11) ; -- load uv[1] NOP LQ.xyzw VF08, (-vertexSize*1+2)(VI11) ; -- load rgba[1] MAX.w VF06, VF01, VF01 SQ.xyzw VF09, (vertexSize*0+2)(VI07) ; -- store rgba[0] NOP IADDIU VI09, VI09, 2 NOP SQ.xyw VF07, (vertexSize*0+1)(VI07) ; -- store uv,adc[0] NOP SQ.xyzw VF08, (vertexSize*1+2)(VI07) ; -- store rgba[1] NOP SQ.xyw VF06, (vertexSize*1+1)(VI07) ; -- store uv,adc[1] NOP SQ.xyzw VF04, (vertexSize*1+0)(VI07) ; -- store pos[1] NOP SQ.xyzw VF03, (vertexSize*0+0)(VI07) ; -- store pos[0] NOP IADDIU VI07, VI07, vertexSize*2 NOP IADDIU VI05, VI00, 0 ; -- set to continue TSEByPass: NOP LQ.w VF01, (-vertexSize*0+0)(VI11) ; -- load pos[2].w NOP LQ.xyzw VF06, (-vertexSize*0+2)(VI11) ; -- load rbga[2] NOP LQ.xy VF03, (-vertexSize*0+1)(VI11) ; -- load uv[2] ITOF4.w VF03, VF01 SQ.xyzw VF05, (vertexSize*0+0)(VI07) ; -- store pos[2] NOP IADDIU VI07, VI07, vertexSize NOP SQ.xyzw VF06, (-vertexSize*1+2)(VI07) ; -- store rgba[2] NOP B TSERedLine MULw.z VF25, VF24, VF15 SQ.xyw VF03, (-vertexSize*1+1)(VI07) ; -- store uv,adc[2] ;---------- TSEFullClip: MULw.z VF25, VF24, VF15 IADDIU VI05, VI00, 1 ; clipped, have to restart strip TSERedLine: ADDx.xyzw VF03, VF04, VF00 ISUBIU VI01, VI07, TSClipRedLine ; next pos[0] -- check limit ADDx.xyzw VF04, VF05, VF00 IADDIU VI11, VI11, vertexSize ; next pos[1] -- go to next triangle MUL.xy VF25, VF15, VF24 IBGEZ VI01, TSEOverLoad ; -- exit if buffer full ADDx.xyzw VF05, VF15, VF00 LQ.xyzw VF15, (vertexSize*1+0)(VI11) ; next pos[2] -- load next pos[2] ADD.z VF25, VF25, VF26 IBNE VI11, VI10, TSEExpanderLoop ; make clip pos[2] CLIPw.xyz VF00, VF00 MOVE.xyzw VF18, VF04 ; clear clip flags TSEOverLoad: