From 743a8fd50fc698f7a45cf54c89943231cd11b5f3 Mon Sep 17 00:00:00 2001 From: icculus Date: Sun, 4 Dec 2005 14:23:46 +0000 Subject: Fixed Altivec-based mesh rendering. git-svn-id: svn://svn.icculus.org/quake3/trunk@409 edf5b092-35ff-0310-97b2-ce42778d08ea --- code/renderer/tr_local.h | 23 +++++++++++++++-------- code/renderer/tr_surface.c | 15 ++++----------- 2 files changed, 19 insertions(+), 19 deletions(-) (limited to 'code') diff --git a/code/renderer/tr_local.h b/code/renderer/tr_local.h index 0ff0157..646cc6f 100644 --- a/code/renderer/tr_local.h +++ b/code/renderer/tr_local.h @@ -1273,18 +1273,25 @@ typedef struct stageVars vec2_t texcoords[NUM_TEXTURE_BUNDLES][SHADER_MAX_VERTEXES]; } stageVars_t; + +#ifdef __GNUC__ +#define ALIGN16 __attribute__((aligned(16))) +#else +#define ALIGN16 +#endif + typedef struct shaderCommands_s { - glIndex_t indexes[SHADER_MAX_INDEXES]; - vec4_t xyz[SHADER_MAX_VERTEXES]; - vec4_t normal[SHADER_MAX_VERTEXES]; - vec2_t texCoords[SHADER_MAX_VERTEXES][2]; - color4ub_t vertexColors[SHADER_MAX_VERTEXES]; - int vertexDlightBits[SHADER_MAX_VERTEXES]; + glIndex_t indexes[SHADER_MAX_INDEXES] ALIGN16; + vec4_t xyz[SHADER_MAX_VERTEXES] ALIGN16; + vec4_t normal[SHADER_MAX_VERTEXES] ALIGN16; + vec2_t texCoords[SHADER_MAX_VERTEXES][2] ALIGN16; + color4ub_t vertexColors[SHADER_MAX_VERTEXES] ALIGN16; + int vertexDlightBits[SHADER_MAX_VERTEXES] ALIGN16; - stageVars_t svars; + stageVars_t svars ALIGN16; - color4ub_t constantColor255[SHADER_MAX_VERTEXES]; + color4ub_t constantColor255[SHADER_MAX_VERTEXES] ALIGN16; shader_t *shader; float shaderTime; diff --git a/code/renderer/tr_surface.c b/code/renderer/tr_surface.c index 04e26d1..cb535fd 100644 --- a/code/renderer/tr_surface.c +++ b/code/renderer/tr_surface.c @@ -615,8 +615,10 @@ static void LerpMeshVertexes_altivec(md3Surface_t *surf, float backlerp) { short *oldXyz, *newXyz, *oldNormals, *newNormals; float *outXyz, *outNormal; - float oldXyzScale, newXyzScale; - float oldNormalScale, newNormalScale; + float oldXyzScale ALIGN16; + float newXyzScale ALIGN16; + float oldNormalScale ALIGN16; + float newNormalScale ALIGN16; int vertNum; unsigned lat, lng; int numVerts; @@ -839,20 +841,11 @@ static void LerpMeshVertexes_scalar(md3Surface_t *surf, float backlerp) static void LerpMeshVertexes(md3Surface_t *surf, float backlerp) { #if idppc_altivec - // !!! FIXME: figure out what's broken and remove this. -#ifndef NDEBUG - static int already_complained = 0; - if (!already_complained) { - already_complained = 1; - Com_Printf("WARNING! FIXME! Altivec mesh lerping broken in debug builds!\n"); - } -#else if (com_altivec->integer) { // must be in a seperate function or G3 systems will crash. LerpMeshVertexes_altivec( surf, backlerp ); return; } -#endif #endif // idppc_altivec LerpMeshVertexes_scalar( surf, backlerp ); } -- cgit v1.2.3