From ab2351a18f23e82c357393d5d92e1293bd8955bf Mon Sep 17 00:00:00 2001 From: Spoike Date: Wed, 31 Jul 2013 00:17:51 +0000 Subject: [PATCH] Fix sse alignment issues in linux. git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@4443 fc73d0e0-1445-4013-8a0c-d673dee63da5 --- engine/common/zone.c | 13 ++++++++++++- engine/gl/gl_model.c | 4 ++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/engine/common/zone.c b/engine/common/zone.c index 95200ce3c..0c0d93f2d 100644 --- a/engine/common/zone.c +++ b/engine/common/zone.c @@ -189,7 +189,14 @@ void *Z_MallocNamed(int size, char *file, int line) #else void *ZF_Malloc(int size) { +#ifdef __linux__ + void *ret = NULL; + if (!posix_memalign(&ret, max(sizeof(float)*4, sizeof(void*)), size)) + memset(ret, 0, size); + return ret; +#else return calloc(size, 1); +#endif } void *Z_Malloc(int size) { @@ -437,7 +444,11 @@ void BZ_Free(void *data) typedef struct zonegroupblock_s { - struct zonegroupblock_s *next; + union + { + struct zonegroupblock_s *next; + vec4_t align16; + }; } zonegroupblock_t; #ifdef USE_MSVCRT_DEBUG diff --git a/engine/gl/gl_model.c b/engine/gl/gl_model.c index 0ffde7256..c8351ebe7 100644 --- a/engine/gl/gl_model.c +++ b/engine/gl/gl_model.c @@ -2495,7 +2495,8 @@ static void Mod_Batches_BuildModelMeshes(model_t *mod, int maxverts, int maxindi vbo.indicies.dummy = ZG_Malloc(&loadmodel->memgroup, sizeof(index_t) * maxindicies); vbo.coord.dummy = ZG_Malloc(&loadmodel->memgroup, (sizeof(vecV_t)+sizeof(vec2_t)*(1+styles)+sizeof(vec3_t)*3+sizeof(vec4_t))* maxverts); - vbo.texcoord.dummy = (vecV_t*)vbo.coord.dummy + maxverts; + vbo.colours.dummy = (vecV_t*)vbo.coord.dummy + maxverts; + vbo.texcoord.dummy = (vec4_t*)vbo.colours.dummy + maxverts; sty = 0; if (styles) { @@ -2509,7 +2510,6 @@ static void Mod_Batches_BuildModelMeshes(model_t *mod, int maxverts, int maxindi vbo.normals.dummy = styles?((vec2_t*)vbo.lmcoord[styles-1].dummy + maxverts):((vec2_t*)vbo.texcoord.dummy + maxverts); vbo.svector.dummy = (vec3_t*)vbo.normals.dummy + maxverts; vbo.tvector.dummy = (vec3_t*)vbo.svector.dummy + maxverts; - vbo.colours.dummy = (vec3_t*)vbo.tvector.dummy + maxverts; numindicies = 0; numverts = 0;