diff --git a/code/renderer/tr_local.h b/code/renderer/tr_local.h index 0ff0157a..646cc6fa 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 04e26d14..cb535fd8 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 ); }