Created
January 23, 2020 17:02
-
-
Save dpasca/e26189654b58e55a640420dd5f568374 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/*======================================================================= | |
VF01 - VF04 : perspective + transformation matrix | |
VF05 - VF08 : light color matrix | |
VF09 - VF12 : X light vector matrix(3 lighting vector + 1 ambient) | |
VF13 : temp light / gif tag | |
VF14 : temp light | |
VF15 : temp vert for clipping | |
VF16 : * unused | |
VF17 : * unused | |
VF18 : * unused | |
VF19 : * unused | |
VF20 : source vertex | |
VF21 : source normal | |
VF22 : material color | |
VF23 : ambient color | |
VF24 : * unused | |
VF25 : * unused | |
VF26 : temp color | |
VF27 : vertex (p) | |
VF28 : temp vertex | |
VF29 : * unused | |
VF30 : * unused | |
VF31 : * unused | |
VI02 : last src vert addr | |
VI03 : pointer for vertex | |
VI04 : pointer for normal | |
VI05 : temp clip flags | |
VI06 : no kick flag | |
VI07-VI09 : nodraw flag | |
VI11 : * unused | |
VI12 : obj flags | |
VI10 : counter for vertices | |
VF14 = ACC(L COLOR) + VF23(ambient color) * 1 | |
=======================================================================*/ | |
/*========================== PER OBJECT ================================*/ | |
NOP BAL VI15, OBJECT_SETUP_GMX | |
NOP NOP | |
NOP[E] NOP | |
NOP NOP | |
/*========================== PER STRIP ================================*/ | |
START_GMCSL: | |
NOP BAL VI15, PRIMPACKET_SETUP_GMX | |
NOP LQ VF22, KGL_VU1_MATERIAL_COL_ADDR(VI00) ; material color (reload cause clipping uses vf22) | |
NOP LOI 0.00390625 ;// prepare coefficient for VF29 | |
MULi.xyz VF30, VF22, I NOP | |
;// NOP LOI 2.0 ;// compensate for texture brightness | |
;// MULi.xyzw VF23, VF23, I LOI 0.5 ;// | |
;// MULi.xyzw VF22, VF22, I NOP ;// | |
NOP IADD VI04, VI03, VI00 ;// VI04 = dest data (overwrite source) | |
NOP LQI VF29, (VI03++) ;// load color | |
NOP LQI VF21, (VI03++) ;// load normal | |
NOP LQI VF20, (VI03++) ;// load vertex | |
NOP IBNE VI13, VI00, JUMP_GMCSL_NL | |
ITOF0 VF29, VF29 NOP | |
ITOF12 VF21,VF21 NOP | |
ITOF4.xyz VF20,VF20 NOP | |
MULAx.xyzw ACC, VF05, VF21x NOP | |
MADDAy.xyzw ACC, VF06, VF21y NOP | |
MADDz.xyzw VF13, VF07, VF21z NOP | |
MULAx.xyzw ACC, VF01, VF20x NOP | |
MADDAy.xyzw ACC, VF02, VF20y LQ VF21, 1(VI03) ;// load normal | |
MADDAz.xyzw ACC, VF03, VF20z NOP | |
MAXx.xyzw VF13, VF13, VF00x NOP | |
MADDw.xyzw VF27, VF04, VF00w NOP | |
ITOF12 VF21,VF21 NOP | |
MULAx.xyzw ACC, VF09, VF13x NOP | |
MADDAy.xyzw ACC, VF10, VF13y NOP | |
/*================================================*/ | |
LOOP_GMCSL: | |
MADDz.xyzw VF14, VF11, VF13z DIV Q, VF00w, VF27w | |
;//----- Temporary for shadows ----- | |
NOP MOVE.xyz VF26, VF22 | |
SUBAw.w ACCw, VF00w, VF00w NOP ;// ACCw = 0.0 | |
MADDAx.w ACCw, VF00w, VF13x NOP ;// ACCw = 1.0 * VF14x | |
MADDAy.w ACCw, VF00w, VF13y NOP ;// ACCw = 1.0 * VF14x + 1.0 * VF14y | |
MADDz.w VF26, VF00w, VF13z NOP ;// VF26w = VF14x + VF14y + VF14z | |
NOP LOI -255.0 ;// | |
MULi.w VF26, VF26, I LOI 255.0 ;// VF26w = (VF14x + VF14y + VF14z) * 255 / 3 | |
ADDi.w VF26, VF26, I NOP | |
;//--------------------------------- | |
MULAx.xyzw ACC, VF05, VF21x MOVE.w VF28w, VF20w ;// VF28w = nodraw flag | |
MADDAy.xyzw ACC, VF06, VF21y MTIR VI06, VF20w ;// VI06 = nodraw flag | |
MADDz.xyzw VF13, VF07, VF21z LQ VF20, 2(VI03) ;// load vertex | |
NOP LQ.xyz VF21, 3+1(VI03) ;// . | |
NOP LOI 255.0 | |
NOP LQ VF29, 0(VI03) ;// VF29 = source color | |
MAXx.xyzw VF13, VF13, VF00x MOVE VF15, VF27 ;// for clip section | |
ITOF4.xyz VF20, VF20 NOP | |
MULq.xyz VF28, VF27, Q ISUBIU VI10, VI10, 1 | |
MINIi.xyzw VF26, VF26, I IADDI VI04, VI04, 2 ;// inc dest | |
ITOF0 VF29, VF29 IBEQ VI12, VI00, NOCLIP_GMCSL | |
ITOF12 VF21, VF21 IADDI VI03, VI03, 3 ;// inc source | |
NOP BAL VI15, CLIP_LOOP_SECTION_GMT_NEAR | |
NOP IADDI VI01, VI00, 2 | |
NOCLIP_GMCSL: | |
MULAx.xyzw ACC, VF01, VF20x NOP | |
FTOI0.xyzw VF26, VF26 NOP | |
FTOI4.xyz VF28, VF28 NOP | |
MADDAy.xyzw ACC, VF02, VF20y NOP | |
MADDAz.xyzw ACC, VF03, VF20z NOP | |
MADDw.xyzw VF27, VF04, VF00w SQ VF26, -2+0(VI04) | |
MULAx.xyzw ACC, VF09, VF13x IBNE VI10, VI00, LOOP_GMCSL | |
MADDAy.xyzw ACC, VF10, VF13y SQ VF28, -2+1(VI04) | |
/* --- send result to GIF and stop --- */ | |
NOP XTOP VI01 ;// first row is for triangle fan.. | |
NOP IADDI VI01, VI01, 1 ;// ..giftag for clipping ! | |
KGL_XGKICK VI01 | |
NOP[E] B START_GMCSL | |
NOP NOP | |
/*----------------------------------------------------------------------*/ | |
/*----------------------------------------------------------------------*/ | |
/*----------------------------------------------------------------------*/ | |
/*========================== PER STRIP ================================*/ | |
START_GMCSL_NL: | |
NOP BAL VI15, PRIMPACKET_SETUP_GMX | |
NOP LQ VF22, KGL_VU1_MATERIAL_COL_ADDR(VI00) ; material color (reload cause clipping uses vf22) | |
NOP LOI 0.00390625 ;// prepare coefficient for VF29 | |
MULi.xyz VF30, VF22, I NOP | |
NOP IADD VI04, VI03, VI00 ;// VI04 = dest data (overwrite source) | |
NOP LQI VF29, (VI03++) ;// load color | |
NOP LQI VF21, (VI03++) ;// load normal | |
NOP LQI VF20, (VI03++) ;// load vertex | |
NOP NOP | |
ITOF0 VF29, VF29 NOP | |
JUMP_GMCSL_NL: | |
ITOF12 VF21,VF21 NOP | |
ITOF4.xyz VF20,VF20 NOP | |
MULAx.xyzw ACC, VF01, VF20x NOP | |
MADDAy.xyzw ACC, VF02, VF20y LQ VF21, 1(VI03) ;// load normal | |
MADDAz.xyzw ACC, VF03, VF20z NOP | |
MADDw.xyzw VF27, VF04, VF00w NOP | |
ITOF12 VF21,VF21 NOP | |
/*================================================*/ | |
LOOP_GMCSL_NL: | |
NOP DIV Q, VF00w, VF27w | |
NOP MOVE.w VF28w, VF20w ;// VF28w = nodraw flag | |
NOP MTIR VI06, VF20w ;// VI06 = nodraw flag | |
NOP LQ VF20, 2(VI03) ;// load vertex | |
MUL.xyzw VF26, VF30, VF29 NOP | |
NOP LQ VF29, 0(VI03) ;// VF29 = source color | |
NOP MOVE VF15, VF27 ;// for clip section | |
MULq.xyz VF28, VF27, Q ISUBIU VI10, VI10, 1 | |
ITOF4.xyz VF20, VF20 IADDI VI04, VI04, 2 ;// inc dest | |
ITOF0 VF29, VF29 IBEQ VI12, VI00, NOCLIP_GMCSL_NL | |
ITOF12 VF21, VF21 IADDI VI03, VI03, 3 ;// inc source | |
NOP BAL VI15, CLIP_LOOP_SECTION_GMT_NEAR | |
NOP IADDI VI01, VI00, 2 | |
NOCLIP_GMCSL_NL: | |
FTOI0.xyzw VF26, VF26 NOP | |
FTOI4.xyz VF28, VF28 NOP | |
MULAx.xyzw ACC, VF01, VF20x NOP | |
MADDAy.xyzw ACC, VF02, VF20y NOP | |
MADDAz.xyzw ACC, VF03, VF20z SQ VF26, -2+0(VI04) | |
MADDw.xyzw VF27, VF04, VF00w IBNE VI10, VI00, LOOP_GMCSL_NL | |
NOP SQ VF28, -2+1(VI04) | |
/* --- send result to GIF and stop --- */ | |
NOP XTOP VI01 ;// first row is for triangle fan.. | |
NOP IADDI VI01, VI01, 1 ;// ..giftag for clipping ! | |
KGL_XGKICK VI01 | |
NOP[E] B START_GMCSL_NL | |
NOP NOP |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment