.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 .equ clipVertLimitTL, (clipVertCount-21) .equ clipVertLimitTS, (clipVertCount-15) ;;; TODO: this crashes when i set it to -9 as it should be .include "defines.inc" .balign 16,0 .global vu1_im3d vu1_im3d: DMAret * MPG 0, * .vu start: nop ilw.y vi12,codeSwitch(vi00) nop ilw.z vi13,codeSwitch(vi00) 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) nop lq vf24,clipConsts(vi00) restart: nop ilw.x vi09,codeSwitch(vi00) ; process switch ;; Init input - we're just converting RGBA to float here nop xtop vi02 ; input pointer nop xitop vi04 ; vertex count PreprocLoop: 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,PreprocLoop nop iaddiu vi02,vi02,numInAttribs nop jr vi09 nop nop Process: .include "im3d_proc.vu" TLClip: .include "TLclip.vu" TSClip: .include "TSclip.vu" LLClip: .include "LLclip.vu" LSClip: .include "LSclip.vu" PointCull: .include "PointCull.vu" End: nop[e] nop nop nop nop b restart nop nop .include "cliptri.vu" .include "clipline.vu" .include "im3d_clipproc.vu" .EndMPG .EndDmaData .global vu1_im3d_desc vu1_im3d_desc: .word Process, outBuf1, outBuf2, 0 .word TLClip, outBuf1, clipOutBuf2, 0 .word TSClip, outBuf1, clipOutBuf2, 0 .word LLClip, outBuf1, outBuf2, 0 .word LSClip, outBuf1, clipOutBuf2, 0 .word PointCull, outBuf1, outBuf2, 0