From b7010066ccbb97ec9e0a11a161c1375c9e792953 Mon Sep 17 00:00:00 2001 From: Fancy2209 <64917206+Fancy2209@users.noreply.github.com> Date: Fri, 27 Mar 2026 13:03:54 -0100 Subject: [PATCH 1/3] Fix gsKit_prim_triangle allocating wrong amount of memory gsKit_prim_triangle_gouraud used the right bsize and qsize, but not gsKit_prim_triangle. I am surprised it took 20 years for someone to notice. --- ee/gs/src/gsPrimitive.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ee/gs/src/gsPrimitive.c b/ee/gs/src/gsPrimitive.c index 2bcc486..121b2d5 100644 --- a/ee/gs/src/gsPrimitive.c +++ b/ee/gs/src/gsPrimitive.c @@ -357,8 +357,8 @@ void gsKit_prim_triangle_3d(GSGLOBAL *gsGlobal, float x1, float y1, int iz1, float x3, float y3, int iz3, u64 color) { u64* p_data; - int qsize = 3; - int bsize = 48; + int qsize = 4; + int bsize = 64; int ix1 = gsKit_float_to_int_x(gsGlobal, x1); int iy1 = gsKit_float_to_int_y(gsGlobal, y1); From 6b70dadabc0bbb953075e32aa721e71551a9f78b Mon Sep 17 00:00:00 2001 From: Fancy2209 <64917206+Fancy2209@users.noreply.github.com> Date: Sat, 28 Mar 2026 13:20:37 -0100 Subject: [PATCH 2/3] Use GIF AD to actually fix the issue --- ee/gs/src/gsPrimitive.c | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/ee/gs/src/gsPrimitive.c b/ee/gs/src/gsPrimitive.c index 121b2d5..77912d6 100644 --- a/ee/gs/src/gsPrimitive.c +++ b/ee/gs/src/gsPrimitive.c @@ -357,8 +357,8 @@ void gsKit_prim_triangle_3d(GSGLOBAL *gsGlobal, float x1, float y1, int iz1, float x3, float y3, int iz3, u64 color) { u64* p_data; - int qsize = 4; - int bsize = 64; + int qsize = 5; + int bsize = 80; int ix1 = gsKit_float_to_int_x(gsGlobal, x1); int iy1 = gsKit_float_to_int_y(gsGlobal, y1); @@ -369,19 +369,27 @@ void gsKit_prim_triangle_3d(GSGLOBAL *gsGlobal, float x1, float y1, int iz1, int ix3 = gsKit_float_to_int_x(gsGlobal, x3); int iy3 = gsKit_float_to_int_y(gsGlobal, y3); - p_data = gsKit_heap_alloc(gsGlobal, qsize, bsize, GSKIT_GIF_PRIM_TRIANGLE); + p_data = gsKit_heap_alloc(gsGlobal, qsize, bsize, GIF_AD); - *p_data++ = GIF_TAG_TRIANGLE(0); - *p_data++ = GIF_TAG_TRIANGLE_REGS; + *p_data++ = GIF_TAG_AD(5); + *p_data++ = GIF_AD; - *p_data++ = GS_SETREG_PRIM( GS_PRIM_PRIM_TRIANGLE, 0, 0, gsGlobal->PrimFogEnable, + *p_data++ = GS_SETREG_PRIM( GS_PRIM_PRIM_TRIANGLE, 1, 0, gsGlobal->PrimFogEnable, gsGlobal->PrimAlphaEnable, gsGlobal->PrimAAEnable, 0, gsGlobal->PrimContext, 0) ; + *p_data++ = GS_PRIM; *p_data++ = color; - *p_data++ = GS_SETREG_XYZ2( ix1, iy1, iz1 ); - *p_data++ = GS_SETREG_XYZ2( ix2, iy2, iz2 ); - *p_data++ = GS_SETREG_XYZ2( ix3, iy3, iz3 ); + *p_data++ = GS_RGBAQ; + + *p_data++ = GS_SETREG_XYZ2(ix1, iy1, iz1); + *p_data++ = GS_XYZ2; + + *p_data++ = GS_SETREG_XYZ2(ix2, iy2, iz2); + *p_data++ = GS_XYZ2; + + *p_data++ = GS_SETREG_XYZ2(ix3, iy3, iz3); + *p_data++ = GS_XYZ2; } #endif From bf0a591a69fd71d1604d103015e4796561c89be8 Mon Sep 17 00:00:00 2001 From: Fancy2209 <64917206+Fancy2209@users.noreply.github.com> Date: Sat, 28 Mar 2026 13:23:56 -0100 Subject: [PATCH 3/3] Fix accidental change of iip from 0 to 1 in gsKit_prim_triangle_3d --- ee/gs/src/gsPrimitive.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ee/gs/src/gsPrimitive.c b/ee/gs/src/gsPrimitive.c index 77912d6..5dad181 100644 --- a/ee/gs/src/gsPrimitive.c +++ b/ee/gs/src/gsPrimitive.c @@ -374,7 +374,7 @@ void gsKit_prim_triangle_3d(GSGLOBAL *gsGlobal, float x1, float y1, int iz1, *p_data++ = GIF_TAG_AD(5); *p_data++ = GIF_AD; - *p_data++ = GS_SETREG_PRIM( GS_PRIM_PRIM_TRIANGLE, 1, 0, gsGlobal->PrimFogEnable, + *p_data++ = GS_SETREG_PRIM( GS_PRIM_PRIM_TRIANGLE, 0, 0, gsGlobal->PrimFogEnable, gsGlobal->PrimAlphaEnable, gsGlobal->PrimAAEnable, 0, gsGlobal->PrimContext, 0) ; *p_data++ = GS_PRIM;