mirror of
https://github.com/ioquake/ioq3.git
synced 2024-11-10 07:11:46 +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 fileHandle_t;
|
||||||
typedef int clipHandle_t;
|
typedef int clipHandle_t;
|
||||||
|
|
||||||
#define PAD(x,y) (((x)+(y)-1) & ~((y)-1))
|
#define PAD(base, alignment) (((base)+(alignment)-1) & ~((alignment)-1))
|
||||||
#define PADLEN(x,y) (PAD((x), (y)) - (x))
|
#define PADLEN(base, alignment) (PAD((base), (alignment)) - (base))
|
||||||
|
|
||||||
|
#define PADP(base, alignment) ((void *) PAD((intptr_t) (base), (alignment)))
|
||||||
|
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
#define QALIGN(x) __attribute__((aligned(x)))
|
#define QALIGN(x) __attribute__((aligned(x)))
|
||||||
|
|
|
@ -1142,6 +1142,8 @@ void RB_ExecuteRenderCommands( const void *data ) {
|
||||||
}
|
}
|
||||||
|
|
||||||
while ( 1 ) {
|
while ( 1 ) {
|
||||||
|
data = PADP(data, sizeof(void *));
|
||||||
|
|
||||||
switch ( *(const int *)data ) {
|
switch ( *(const int *)data ) {
|
||||||
case RC_SET_COLOR:
|
case RC_SET_COLOR:
|
||||||
data = RB_SetColor( data );
|
data = RB_SetColor( data );
|
||||||
|
|
|
@ -195,6 +195,7 @@ void *R_GetCommandBuffer( int bytes ) {
|
||||||
renderCommandList_t *cmdList;
|
renderCommandList_t *cmdList;
|
||||||
|
|
||||||
cmdList = &backEndData[tr.smpFrame]->commands;
|
cmdList = &backEndData[tr.smpFrame]->commands;
|
||||||
|
bytes = PAD(bytes, sizeof(void *));
|
||||||
|
|
||||||
// always leave room for the end of list command
|
// always leave room for the end of list command
|
||||||
if ( cmdList->used + bytes + 4 > MAX_RENDER_COMMANDS ) {
|
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
|
// Allocate a few more bytes so that we can choose an alignment we like
|
||||||
buffer = ri.Hunk_AllocateTempMemory(padwidth * height + *offset + packAlign - 1);
|
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);
|
qglReadPixels(x, y, width, height, GL_RGB, GL_UNSIGNED_BYTE, bufstart);
|
||||||
|
|
||||||
*offset = bufstart - buffer;
|
*offset = bufstart - buffer;
|
||||||
|
@ -780,7 +780,7 @@ const void *RB_TakeVideoFrameCmd( const void *data )
|
||||||
avipadwidth = PAD(linelen, AVI_LINE_PADDING);
|
avipadwidth = PAD(linelen, AVI_LINE_PADDING);
|
||||||
avipadlen = avipadwidth - linelen;
|
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,
|
qglReadPixels(0, 0, cmd->width, cmd->height, GL_RGB,
|
||||||
GL_UNSIGNED_BYTE, cBuf);
|
GL_UNSIGNED_BYTE, cBuf);
|
||||||
|
|
|
@ -1878,6 +1878,8 @@ static void FixRenderCommandList( int newShader ) {
|
||||||
const void *curCmd = cmdList->cmds;
|
const void *curCmd = cmdList->cmds;
|
||||||
|
|
||||||
while ( 1 ) {
|
while ( 1 ) {
|
||||||
|
curCmd = PADP(curCmd, sizeof(void *));
|
||||||
|
|
||||||
switch ( *(const int *)curCmd ) {
|
switch ( *(const int *)curCmd ) {
|
||||||
case RC_SET_COLOR:
|
case RC_SET_COLOR:
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue