aboutsummaryrefslogtreecommitdiffstats
path: root/code
diff options
context:
space:
mode:
authoricculus <icculus@edf5b092-35ff-0310-97b2-ce42778d08ea>2005-12-04 14:23:46 +0000
committericculus <icculus@edf5b092-35ff-0310-97b2-ce42778d08ea>2005-12-04 14:23:46 +0000
commit743a8fd50fc698f7a45cf54c89943231cd11b5f3 (patch)
treea2ba302ee38f572a91bdc3c8c24e225afa2711a9 /code
parent88dea72cd721b219c24efabec399eafde6ef37ca (diff)
downloadioquake3-aero-743a8fd50fc698f7a45cf54c89943231cd11b5f3.tar.gz
ioquake3-aero-743a8fd50fc698f7a45cf54c89943231cd11b5f3.zip
Fixed Altivec-based mesh rendering.
git-svn-id: svn://svn.icculus.org/quake3/trunk@409 edf5b092-35ff-0310-97b2-ce42778d08ea
Diffstat (limited to 'code')
-rw-r--r--code/renderer/tr_local.h23
-rw-r--r--code/renderer/tr_surface.c15
2 files changed, 19 insertions, 19 deletions
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 );
}