mirror of
https://github.com/UberGames/ioef.git
synced 2025-02-17 17:31:08 +00:00
Choose better alignment for heavy-duty rendering structures, patch by Matt Turner (#4981)
This commit is contained in:
parent
185d2d6b60
commit
5f63ab9160
5 changed files with 11 additions and 4 deletions
|
@ -183,8 +183,10 @@ typedef int sfxHandle_t;
|
|||
typedef int fileHandle_t;
|
||||
typedef int clipHandle_t;
|
||||
|
||||
#define PAD(x,y) (((x)+(y)-1) & ~((y)-1))
|
||||
#define PADLEN(x,y) (PAD((x), (y)) - (x))
|
||||
#define PAD(base, alignment) (((base)+(alignment)-1) & ~((alignment)-1))
|
||||
#define PADLEN(base, alignment) (PAD((base), (alignment)) - (base))
|
||||
|
||||
#define PADP(base, alignment) ((void *) PAD((intptr_t) (base), (alignment)))
|
||||
|
||||
#ifdef __GNUC__
|
||||
#define QALIGN(x) __attribute__((aligned(x)))
|
||||
|
|
|
@ -1142,6 +1142,8 @@ void RB_ExecuteRenderCommands( const void *data ) {
|
|||
}
|
||||
|
||||
while ( 1 ) {
|
||||
data = PADP(data, sizeof(void *));
|
||||
|
||||
switch ( *(const int *)data ) {
|
||||
case RC_SET_COLOR:
|
||||
data = RB_SetColor( data );
|
||||
|
|
|
@ -195,6 +195,7 @@ void *R_GetCommandBuffer( int bytes ) {
|
|||
renderCommandList_t *cmdList;
|
||||
|
||||
cmdList = &backEndData[tr.smpFrame]->commands;
|
||||
bytes = PAD(bytes, sizeof(void *));
|
||||
|
||||
// always leave room for the end of list command
|
||||
if ( cmdList->used + bytes + 4 > MAX_RENDER_COMMANDS ) {
|
||||
|
|
|
@ -382,7 +382,7 @@ byte *RB_ReadPixels(int x, int y, int width, int height, size_t *offset, int *pa
|
|||
// Allocate a few more bytes so that we can choose an alignment we like
|
||||
buffer = ri.Hunk_AllocateTempMemory(padwidth * height + *offset + packAlign - 1);
|
||||
|
||||
bufstart = (byte *) PAD((intptr_t) buffer + *offset, packAlign);
|
||||
bufstart = PADP((intptr_t) buffer + *offset, packAlign);
|
||||
qglReadPixels(x, y, width, height, GL_RGB, GL_UNSIGNED_BYTE, bufstart);
|
||||
|
||||
*offset = bufstart - buffer;
|
||||
|
@ -780,7 +780,7 @@ const void *RB_TakeVideoFrameCmd( const void *data )
|
|||
avipadwidth = PAD(linelen, AVI_LINE_PADDING);
|
||||
avipadlen = avipadwidth - linelen;
|
||||
|
||||
cBuf = (byte *) PAD((intptr_t) cmd->captureBuffer, packAlign);
|
||||
cBuf = PADP(cmd->captureBuffer, packAlign);
|
||||
|
||||
qglReadPixels(0, 0, cmd->width, cmd->height, GL_RGB,
|
||||
GL_UNSIGNED_BYTE, cBuf);
|
||||
|
|
|
@ -1878,6 +1878,8 @@ static void FixRenderCommandList( int newShader ) {
|
|||
const void *curCmd = cmdList->cmds;
|
||||
|
||||
while ( 1 ) {
|
||||
curCmd = PADP(curCmd, sizeof(void *));
|
||||
|
||||
switch ( *(const int *)curCmd ) {
|
||||
case RC_SET_COLOR:
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue