.equ vertexTop, 0x3f0 .equ numInAttribs, 3 .equ numOutAttribs, 3 .equ numOutBuf, 2 .equ vertCount, ((vertexTop-numOutBuf)/(numInAttribs*2+numOutAttribs*numOutBuf)) .equ offset, (vertCount*numInAttribs) .equ outBuf1, (2*offset) ;.equ outSize, ((vertexTop-outBuf1-numOutBuf)/numOutBuf) .equ outSize, (1 + vertCount*numOutAttribs) .equ outBuf2, (outBuf1+outSize) .equ clipVertCount, ((vertexTop-outBuf1-numOutBuf)/(numInAttribs+numOutAttribs*numOutBuf)) .equ clipOutSize, (1 + clipVertCount*numOutAttribs) .equ clipOutBuf2, (outBuf1+clipOutSize) .equ clipBuf, (clipOutBuf2+clipOutSize) ; up to 9 verts => 7 tris per poly in worst case, a lot for lists unfortunately .equ clipVertLimit, (clipVertCount-21) .include "defines.inc" .balign 16,0 .global vu1_im3d_TLclip vu1_im3d_TLclip: ;;; Register allocation ;;; vf25 colorScale ;;; vf26 xyzwOffset ;;; vf27 xyzwScale ;;; vf28-vf31 matrix DMAret * MPG 0, * .vu start: nop iaddiu vi12,vi00,outBuf1 nop iaddiu vi13,vi00,clipOutBuf2 nop lq vf28,matrix0(vi00) nop lq vf29,matrix1(vi00) nop lq vf30,matrix2(vi00) nop lq vf31,matrix3(vi00) nop lq vf27,xyzwScale(vi00) nop lq vf26,xyzwOffset(vi00) nop lq vf25,colorScale(vi00) restart: nop xtop vi02 ; input pointer nop xitop vi04 ; vertex count nop nop ;; Init input - we're just converting RGBA to float here loop: nop lq vf02,2(vi02) ; rgba nop nop nop nop nop nop itof0 vf02,vf02 nop nop isubiu vi04,vi04,1 nop nop nop nop nop sq vf02,2(vi02) nop ibne vi04,vi00,loop nop iaddiu vi02,vi02,numInAttribs .include "TLclip.vu" nop[e] nop nop nop nop b restart nop nop .include "cliptri.vu" .include "im3d_clipproc.vu" .EndMPG .EndDmaData