Fixed Altivec-based mesh rendering.

This commit is contained in:
Ryan C. Gordon 2005-12-04 14:23:46 +00:00
parent e67d270f2a
commit dd4dce194e
2 changed files with 19 additions and 19 deletions

View file

@ -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;

View file

@ -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 );
}