quake: pack structs which could potentially be unaligned
The d*_t structs are from "d"isk, which means they could be unaligned. Packing them saves me from having to rewrite every single access to them. Change-Id: I6d5a9525fff368bf29bdb85cf1672fce02ce3396
This commit is contained in:
parent
f83de422fa
commit
2ca47176f9
1 changed files with 15 additions and 14 deletions
|
@ -79,6 +79,7 @@ typedef struct
|
|||
|
||||
#define HEADER_LUMPS 15
|
||||
|
||||
// packed to avoid unaligned accesses on ARM
|
||||
typedef struct
|
||||
{
|
||||
float mins[3], maxs[3];
|
||||
|
@ -86,19 +87,19 @@ typedef struct
|
|||
int headnode[MAX_MAP_HULLS];
|
||||
int visleafs; // not including the solid leaf 0
|
||||
int firstface, numfaces;
|
||||
} dmodel_t;
|
||||
} __attribute__((packed)) dmodel_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int version;
|
||||
lump_t lumps[HEADER_LUMPS];
|
||||
} dheader_t;
|
||||
} __attribute__((packed)) dheader_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int nummiptex;
|
||||
int dataofs[4]; // [nummiptex]
|
||||
} dmiptexlump_t;
|
||||
} __attribute__((packed)) dmiptexlump_t;
|
||||
|
||||
#define MIPLEVELS 4
|
||||
typedef struct miptex_s
|
||||
|
@ -106,13 +107,13 @@ typedef struct miptex_s
|
|||
char name[16];
|
||||
unsigned width, height;
|
||||
unsigned offsets[MIPLEVELS]; // four mip maps stored
|
||||
} miptex_t;
|
||||
} __attribute__((packed)) miptex_t;
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
float point[3];
|
||||
} dvertex_t;
|
||||
} __attribute__((packed)) dvertex_t;
|
||||
|
||||
|
||||
// 0-2 are axial planes
|
||||
|
@ -130,7 +131,7 @@ typedef struct
|
|||
float normal[3];
|
||||
float dist;
|
||||
int type; // PLANE_X - PLANE_ANYZ ?remove? trivial to regenerate
|
||||
} dplane_t;
|
||||
} __attribute__((packed)) dplane_t;
|
||||
|
||||
|
||||
|
||||
|
@ -160,13 +161,13 @@ typedef struct
|
|||
short maxs[3];
|
||||
unsigned short firstface;
|
||||
unsigned short numfaces; // counting both sides
|
||||
} dnode_t;
|
||||
} __attribute__((packed)) dnode_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int planenum;
|
||||
short children[2]; // negative numbers are contents
|
||||
} dclipnode_t;
|
||||
} __attribute__((packed)) dclipnode_t;
|
||||
|
||||
|
||||
typedef struct texinfo_s
|
||||
|
@ -174,7 +175,7 @@ typedef struct texinfo_s
|
|||
float vecs[2][4]; // [s/t][xyz offset]
|
||||
int miptex;
|
||||
int flags;
|
||||
} texinfo_t;
|
||||
} __attribute__((packed)) texinfo_t;
|
||||
#define TEX_SPECIAL 1 // sky or slime, no lightmap or 256 subdivision
|
||||
|
||||
// note that edge 0 is never used, because negative edge nums are used for
|
||||
|
@ -182,7 +183,7 @@ typedef struct texinfo_s
|
|||
typedef struct
|
||||
{
|
||||
unsigned short v[2]; // vertex numbers
|
||||
} dedge_t;
|
||||
} __attribute__((packed)) dedge_t;
|
||||
|
||||
#define MAXLIGHTMAPS 4
|
||||
typedef struct
|
||||
|
@ -197,7 +198,7 @@ typedef struct
|
|||
// lighting info
|
||||
byte styles[MAXLIGHTMAPS];
|
||||
int lightofs; // start of [numstyles*surfsize] samples
|
||||
} dface_t;
|
||||
} __attribute__((packed)) dface_t;
|
||||
|
||||
|
||||
|
||||
|
@ -222,7 +223,7 @@ typedef struct
|
|||
unsigned short nummarksurfaces;
|
||||
|
||||
byte ambient_level[NUM_AMBIENTS];
|
||||
} dleaf_t;
|
||||
} __attribute__((packed)) dleaf_t;
|
||||
|
||||
|
||||
//============================================================================
|
||||
|
@ -296,7 +297,7 @@ typedef struct epair_s
|
|||
struct epair_s *next;
|
||||
char *key;
|
||||
char *value;
|
||||
} epair_t;
|
||||
} __attribute__((packed)) epair_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
|
@ -304,7 +305,7 @@ typedef struct
|
|||
int firstbrush;
|
||||
int numbrushes;
|
||||
epair_t *epairs;
|
||||
} entity_t;
|
||||
} __attribute__((packed)) entity_t;
|
||||
|
||||
extern int num_entities;
|
||||
extern entity_t entities[MAX_MAP_ENTITIES];
|
||||
|
|
Loading…
Reference in a new issue