From 4146238e1e8191ffe0e1f6372e9591f1cbf5c458 Mon Sep 17 00:00:00 2001 From: Nico de Poel Date: Fri, 3 Feb 2023 16:15:47 +0100 Subject: [PATCH] Moved frustum planes to fast scratchpad RAM for another appreciable speed boost. --- frustum.c | 40 +++++++++++++++++++++++----------------- ps1bsp.h | 12 ++++++++---- test.ps1bsp | Bin 447763 -> 450051 bytes world.c | 2 +- 4 files changed, 32 insertions(+), 22 deletions(-) diff --git a/frustum.c b/frustum.c index e8975e8..e90049b 100644 --- a/frustum.c +++ b/frustum.c @@ -4,7 +4,7 @@ #include -static SVECTOR left, right, top, bottom; +static SVECTOR *left, *right, *top, *bottom; static INLINE void frustum_buildPlane(MATRIX *rot_matrix, VECTOR *normal, SVECTOR *outPlane) { @@ -44,10 +44,16 @@ void frustum_update(int width, int height) MATRIX rot_matrix; RotMatrixQ(&cam_rot, &rot_matrix); - frustum_buildPlane(&rot_matrix, &l, &left); - frustum_buildPlane(&rot_matrix, &r, &right); - frustum_buildPlane(&rot_matrix, &t, &top); - frustum_buildPlane(&rot_matrix, &b, &bottom); + // Place the frustum planes at the start of the fast RAM buffer + left = (SVECTOR*)(scratchpad + sizeof(SVECTOR) * 0); + right = (SVECTOR*)(scratchpad + sizeof(SVECTOR) * 1); + top = (SVECTOR*)(scratchpad + sizeof(SVECTOR) * 2); + bottom = (SVECTOR*)(scratchpad + sizeof(SVECTOR) * 3); + + frustum_buildPlane(&rot_matrix, &l, left); + frustum_buildPlane(&rot_matrix, &r, right); + frustum_buildPlane(&rot_matrix, &t, top); + frustum_buildPlane(&rot_matrix, &b, bottom); // FntPrint(-1, "l = %d %d, r = %d %d, t = %d %d, b = %d %d\n", // left.vx, left.pad, right.vx, right.pad, top.vz, top.pad, bottom.vz, bottom.pad); @@ -55,29 +61,29 @@ void frustum_update(int width, int height) static INLINE u_char frustum_pointInside_(const SVECTOR p) { - if (m_dot12(left, p) + left.pad < 0) return 0; - if (m_dot12(right, p) + right.pad < 0) return 0; - if (m_dot12(top, p) + top.pad < 0) return 0; - if (m_dot12(bottom, p) + bottom.pad < 0) return 0; + if (m_dot12(*left, p) + left->pad < 0) return 0; + if (m_dot12(*right, p) + right->pad < 0) return 0; + if (m_dot12(*top, p) + top->pad < 0) return 0; + if (m_dot12(*bottom, p) + bottom->pad < 0) return 0; return 1; } u_char frustum_pointInside(const SVECTOR *point) { - if (m_dot12(left, *point) + left.pad < 0) return 0; - if (m_dot12(right, *point) + right.pad < 0) return 0; - if (m_dot12(top, *point) + top.pad < 0) return 0; - if (m_dot12(bottom, *point) + bottom.pad < 0) return 0; + if (m_dot12(*left, *point) + left->pad < 0) return 0; + if (m_dot12(*right, *point) + right->pad < 0) return 0; + if (m_dot12(*top, *point) + top->pad < 0) return 0; + if (m_dot12(*bottom, *point) + bottom->pad < 0) return 0; return 1; } u_char frustum_sphereInside(const SVECTOR *sphere) { short radius = -sphere->pad; - if (m_dot12(left, *sphere) + left.pad < radius) return 0; - if (m_dot12(right, *sphere) + right.pad < radius) return 0; - if (m_dot12(top, *sphere) + top.pad < radius) return 0; - if (m_dot12(bottom, *sphere) + bottom.pad < radius) return 0; + if (m_dot12(*left, *sphere) + left->pad < radius) return 0; + if (m_dot12(*right, *sphere) + right->pad < radius) return 0; + if (m_dot12(*top, *sphere) + top->pad < radius) return 0; + if (m_dot12(*bottom, *sphere) + bottom->pad < radius) return 0; return 1; } diff --git a/ps1bsp.h b/ps1bsp.h index 14b9562..0a7cffc 100755 --- a/ps1bsp.h +++ b/ps1bsp.h @@ -89,9 +89,9 @@ typedef struct unsigned char b : 5; } ps1bsp_facevertex_t; -#define SURF_DRAWSKY 0x2 -#define SURF_DRAWLIQUID 0x4 -#define SURF_DRAWWATER 0x8 +#define SURF_DRAWSKY 0x4 +#define SURF_DRAWLIQUID 0x8 +#define SURF_DRAWWATER 0x10 // High quality: Face -> polygons -> polygon vertex indices (index + UV + light) -> vertices // Low quality: Face -> face vertex indices (index + color) -> vertices @@ -147,9 +147,10 @@ typedef struct ps1bsp_leaf_s // Run-time data const struct ps1bsp_leaf_s* nextLeaf; // For chaining leafs in drawing order + const struct ps1bsp_model_s* models; } ps1bsp_leaf_t; -typedef struct +typedef struct ps1bsp_model_s { SVECTOR boundingSphere; SVECTOR origin; @@ -158,6 +159,9 @@ typedef struct u_short nodeId1; u_short nodeId2; u_short nodeId3; + + // Run-time data + const struct ps1bsp_model_s* nextModel; } ps1bsp_model_t; // Pre-parsed and encoded entity data (this runs the risk of becoming too bloated) diff --git a/test.ps1bsp b/test.ps1bsp index bb4139af521f17ad9caf81bc2b8f616ce2fd43b6..65577e3b8a3b93cfed014701daf8cf43f5d90e3b 100755 GIT binary patch delta 39013 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%0AYbbm5r!aHL9i{$K?~ne9U!;sxe|hd_ z!JXb2SQbp-ZUN8BDb$Md2~ueta9HM!ZkFbHGk0fjW#~uTEh1O2fs?%%JxFbZyM?`` zJ*fR~7n;$9RK%~z=yodN_h$4U74h}oG3`M`{Md{xq#}MzMz>QDzc-@?sdyBv|1PvC z_KJ%1*i3q1CcTDQiuPyHdo$^S)P2bR9`rfnr%pwF>Nwo1Q{i8e@o&%g_h$SDsjUBB zP}Wan{h9Q_OnOa5w`X*3Mh{Y1|NEvrsH{Ju3p4gL8Qq?-?}e64J$$p}D%O%tXu-QN z{8*z-d9XOk-#Igi1|9ahY=7N~QKo*!{DJH>hWeSZPBDKT{QW8g@KAAJ>X+^Nu)}R}Kr?!f+5sK%foTuwd~`@g7g7xm zD&ogxbRiY-Ycjf>iuk=5JxJvN{Se9nO638~q!(t=YpA_3pfc=⃥&_59mkG$C01P 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