From 62c0effccdf56a02f5df741fd31c93080854a150 Mon Sep 17 00:00:00 2001 From: Tharo <17233964+Thar0@users.noreply.github.com> Date: Fri, 10 Jan 2025 20:24:37 +0000 Subject: [PATCH] [iQue] Match libultra/gu (#2402) * [iQue] Match libultra/gu * Match sqrtf --- src/libultra/gu/rotate.c | 17 +++++++++-------- src/libultra/gu/sqrtf.c | 9 --------- src/libultra/gu/sqrtf.s | 9 +++++++++ src/libultra/gu/us2dex.c | 22 +++++++++++----------- 4 files changed, 29 insertions(+), 28 deletions(-) delete mode 100644 src/libultra/gu/sqrtf.c create mode 100644 src/libultra/gu/sqrtf.s diff --git a/src/libultra/gu/rotate.c b/src/libultra/gu/rotate.c index 7d495e98ef..dc50aba3c5 100644 --- a/src/libultra/gu/rotate.c +++ b/src/libultra/gu/rotate.c @@ -1,7 +1,7 @@ #include "global.h" void guRotateF(f32 m[4][4], f32 a, f32 x, f32 y, f32 z) { - static f32 D_80134D10 = M_PI / 180.0f; + static f32 dtor = M_PI / 180.0f; f32 sine; f32 cosine; f32 ab; @@ -16,14 +16,15 @@ void guRotateF(f32 m[4][4], f32 a, f32 x, f32 y, f32 z) { guNormalize(&x, &y, &z); - a *= D_80134D10; + a *= dtor; sine = sinf(a); cosine = cosf(a); - ab = x * y * (1 - cosine); - bc = y * z * (1 - cosine); - ca = z * x * (1 - cosine); + t = 1.0f - cosine; + ab = x * y * t; + bc = y * z * t; + ca = z * x * t; guMtxIdentF(m); @@ -38,15 +39,15 @@ void guRotateF(f32 m[4][4], f32 a, f32 x, f32 y, f32 z) { #endif t = x * x; - m[0][0] = (1 - t) * cosine + t; + m[0][0] = t + cosine * (1.0f - t); m[2][1] = bc - xs; m[1][2] = bc + xs; t = y * y; - m[1][1] = (1 - t) * cosine + t; + m[1][1] = t + cosine * (1.0f - t); m[2][0] = ca + ys; m[0][2] = ca - ys; t = z * z; - m[2][2] = (1 - t) * cosine + t; + m[2][2] = t + cosine * (1.0f - t); m[1][0] = ab - zs; m[0][1] = ab + zs; } diff --git a/src/libultra/gu/sqrtf.c b/src/libultra/gu/sqrtf.c deleted file mode 100644 index 5e5fa233cc..0000000000 --- a/src/libultra/gu/sqrtf.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "global.h" - -#ifndef __GNUC__ -#define __builtin_sqrtf sqrtf -#endif - -f32 sqrtf(f32 f) { - return __builtin_sqrtf(f); -} diff --git a/src/libultra/gu/sqrtf.s b/src/libultra/gu/sqrtf.s new file mode 100644 index 0000000000..aaf5023593 --- /dev/null +++ b/src/libultra/gu/sqrtf.s @@ -0,0 +1,9 @@ +#include "ultra64/asm.h" +#include "ultra64/regdef.h" + +.text + +LEAF(sqrtf) + sqrt.s fv0, fa0 + j ra +END(sqrtf) diff --git a/src/libultra/gu/us2dex.c b/src/libultra/gu/us2dex.c index d2e5a2b043..b8708c086c 100644 --- a/src/libultra/gu/us2dex.c +++ b/src/libultra/gu/us2dex.c @@ -1,25 +1,25 @@ #include "global.h" void guS2DInitBg(uObjBg* bg) { - u32 size; - s32 tmem = (bg->b.imageFmt == G_IM_FMT_CI) ? 0x100 : 0x200; - u16 shift = (6 - bg->b.imageSiz); + u16 tmem = (bg->b.imageFmt == G_IM_FMT_CI) ? 0x100 : 0x200; + u16 shift = 6 - bg->b.imageSiz; + u32 tsize; if (bg->b.imageLoad == G_BGLT_LOADBLOCK) { bg->b.tmemW = bg->b.imageW >> shift; - bg->b.tmemH = (tmem / bg->b.tmemW) * 4; - bg->b.tmemSizeW = bg->b.tmemW * 2; + bg->b.tmemH = (tmem / bg->b.tmemW) << 2; + bg->b.tmemSizeW = bg->b.tmemW << 1; bg->b.tmemSize = bg->b.tmemH * bg->b.tmemSizeW; bg->b.tmemLoadSH = (bg->b.tmemSize >> 1) - 1; - bg->b.tmemLoadTH = (0x7FF / bg->b.tmemW) + 1; + bg->b.tmemLoadTH = GS_CALC_DXT(bg->b.tmemW); } else { // G_BGLT_LOADTILE bg->b.tmemW = (bg->b.frameW >> shift) + 3; - bg->b.tmemH = (tmem / bg->b.tmemW) * 4; - bg->b.tmemSizeW = (bg->b.imageW >> shift) * 2; + bg->b.tmemH = (tmem / bg->b.tmemW) << 2; + bg->b.tmemSizeW = (bg->b.imageW >> shift) << 1; - size = bg->b.tmemH * bg->b.tmemSizeW; - bg->b.tmemSize = (size >> 16); - bg->b.tmemLoadSH = (size >> 0) & 0xFFFF; + tsize = bg->b.tmemH * bg->b.tmemSizeW; + bg->b.tmemSize = tsize >> 16; + bg->b.tmemLoadSH = tsize & 0xFFFF; bg->b.tmemLoadTH = bg->b.tmemH - 1; } }