(RGL) Cleanups

This commit is contained in:
Twinaphex 2012-07-29 01:10:15 +02:00
parent c9607c4684
commit a75ca75fd1
5 changed files with 924 additions and 994 deletions

View File

@ -186,9 +186,9 @@ typedef struct CgProgramHeader
}
CgProgramHeader;
typedef void( *_cgSetFunction )( struct CgRuntimeParameter* _RGL_RESTRICT, const void* _RGL_RESTRICT );
typedef void( *_cgSetFunction )( struct CgRuntimeParameter* __restrict, const void* __restrict);
typedef void( *_cgSetArrayIndexFunction )( struct CgRuntimeParameter* _RGL_RESTRICT, const void* _RGL_RESTRICT, const int index );
typedef void( *_cgSetArrayIndexFunction )( struct CgRuntimeParameter* __restrict, const void* __restrict, const int index );
typedef struct _CgUniform
{
@ -394,17 +394,14 @@ int _RGLPlatformCopyProgram( _CGprogram* source, _CGprogram* destination );
void _RGLPlatformProgramErase( void* platformProgram );
int _RGLPlatformGenerateVertexProgram( _CGprogram *program, const CgProgramHeader *programHeader, const void *ucode, const CgParameterTableHeader *parameterHeader, const char *stringTable, const float *defaultValues );
int _RGLPlatformGenerateFragmentProgram( _CGprogram *program, const CgProgramHeader *programHeader, const void *ucode, const CgParameterTableHeader *parameterHeader, const char *stringTable, const float *defaultValues );
CGbool _RGLPlatformSupportsFragmentProgram( CGprofile p );
void _RGLPlatformSetVertexRegister4fv( unsigned int reg, const float * _RGL_RESTRICT v );
void _RGLPlatformSetVertexRegisterBlock( unsigned int reg, unsigned int count, const float * _RGL_RESTRICT v );
void _RGLPlatformSetFragmentRegister4fv( unsigned int reg, const float * _RGL_RESTRICT v );
void _RGLPlatformSetFragmentRegisterBlock( unsigned int reg, unsigned int count, const float * _RGL_RESTRICT v );
void _RGLPlatformSetVertexRegister4fv( unsigned int reg, const float * __restrict v );
void _RGLPlatformSetVertexRegisterBlock( unsigned int reg, unsigned int count, const float * __restrict v );
void _RGLPlatformSetFragmentRegister4fv( unsigned int reg, const float * __restrict v );
void _RGLPlatformSetFragmentRegisterBlock( unsigned int reg, unsigned int count, const float * __restrict v );
unsigned int _cgHashString( const char *str );

View File

@ -29,7 +29,7 @@ using namespace cell::Gcm;
#define _RGL_TILED_BUFFER_ALIGNMENT 0x10000
#define _RGL_TILED_BUFFER_HEIGHT_ALIGNMENT 64
#define _RGL_FIFO_SIZE (65536)
#define FIFO_SIZE (65536)
#define _RGL_DMA_PUSH_BUFFER_PREFETCH_PADDING 0x1000
#define RGL_UTIL_LABEL_INDEX 253
@ -153,9 +153,7 @@ static GLboolean _RGLFifoReferenceInUse( RGLFifo *fifo, GLuint reference )
return GL_FALSE;
if ((fifo->lastSWReferenceFlushed - reference) & 0x80000000)
{
_RGLFifoFlush( fifo );
}
_RGLFifoReadReference( fifo );
@ -172,9 +170,7 @@ static GLuint _RGLFifoPutReference( RGLFifo *fifo )
cellGcmSetReferenceCommandInline(&_RGLState.fifo, fifo->lastSWReferenceWritten);
if ((fifo->lastSWReferenceWritten & 0x7fffffff) == 0)
{
_RGLFifoFinish(fifo);
}
return fifo->lastSWReferenceWritten;
}
@ -331,7 +327,6 @@ GLboolean _RGLInit( PSGLinitOptions* options, RGLResource *resource )
return GL_TRUE;
}
void _RGLDestroy(void)
{
RGLState *RGLSt = &_RGLState;
@ -553,16 +548,14 @@ static int _RGLInitRM( RGLResource *gcmResource, unsigned int hostMemorySize, in
{
memset( gcmResource, 0, sizeof( RGLResource ) );
const unsigned int iDPM2DataAreaSize = 0;
dmaPushBufferSize = _RGLPad( dmaPushBufferSize, _RGL_HOST_BUFFER_ALIGNMENT );
gcmResource->hostMemorySize = _RGLPad( _RGL_FIFO_SIZE + hostMemorySize + dmaPushBufferSize + _RGL_DMA_PUSH_BUFFER_PREFETCH_PADDING + iDPM2DataAreaSize + (RGL_LM_MAX_TOTAL_QUERIES * sizeof( GLuint )), 1 << 20 );
gcmResource->hostMemorySize = _RGLPad( FIFO_SIZE + hostMemorySize + dmaPushBufferSize + _RGL_DMA_PUSH_BUFFER_PREFETCH_PADDING + (RGL_LM_MAX_TOTAL_QUERIES * sizeof( GLuint )), 1 << 20 );
if ( gcmResource->hostMemorySize > 0 )
gcmResource->hostMemoryBase = ( char * )memalign( 1 << 20, gcmResource->hostMemorySize );
if ( cellGcmInit( _RGL_FIFO_SIZE, gcmResource->hostMemorySize, gcmResource->hostMemoryBase ) != 0 )
if ( cellGcmInit(FIFO_SIZE, gcmResource->hostMemorySize, gcmResource->hostMemoryBase ) != 0 )
{
RARCH_ERR("RSXIF failed initialization.\n");
return GL_FALSE;
@ -588,7 +581,7 @@ static int _RGLInitRM( RGLResource *gcmResource, unsigned int hostMemorySize, in
gcmResource->dmaPushBuffer = gcmResource->hostMemoryBase + gcmResource->hostMemorySize;
gcmResource->dmaPushBufferOffset = ( char * )gcmResource->dmaPushBuffer - ( char * )gcmResource->hostMemoryBase;
gcmResource->dmaPushBufferSize = dmaPushBufferSize;
gcmResource->hostMemoryReserved = _RGL_FIFO_SIZE;
gcmResource->hostMemoryReserved = FIFO_SIZE;
cellGcmSetJumpCommand(( char * )gcmResource->dmaPushBuffer - ( char * )gcmResource->hostMemoryBase );
@ -807,7 +800,6 @@ static void _RGLSetDisplayMode( const VideoMode *vm, GLushort bitsPerPixel, GLui
cellVideoOutConfigure( CELL_VIDEO_OUT_PRIMARY, &videocfg, NULL, 0 );
}
static int _RGLPlatformCreateDevice( PSGLdevice* device )
{
RGLDevice *gcmDevice = ( RGLDevice * )device->platformDevice;
@ -825,19 +817,28 @@ static int _RGLPlatformCreateDevice( PSGLdevice* device )
if ( params->enable & PSGL_DEVICE_PARAMETERS_TV_STANDARD )
{
vm = findModeByEnum( params->TVStandard );
if ( !vm ) return -1;
if(!vm)
return -1;
params->width = vm->width;
params->height = vm->height;
}
else if ( params->enable & PSGL_DEVICE_PARAMETERS_WIDTH_HEIGHT )
{
vm = findModeByResolution( params->width, params->height );
if ( !vm ) return -1;
if(!vm)
return -1;
}
else
{
vm = _RGLDetectVideoMode();
if ( !vm ) return -1;
if(!vm)
return -1;
params->width = vm->width;
params->height = vm->height;
}
@ -983,7 +984,6 @@ static int _RGLPlatformCreateDevice( PSGLdevice* device )
}
gcmDevice->swapFifoRef = _RGLFifoPutReference( &_RGLState.fifo );
gcmDevice->swapFifoRef2 = gcmDevice->swapFifoRef;
return 0;
@ -1176,7 +1176,7 @@ void psglMakeCurrent( PSGLcontext *context, PSGLdevice *device )
}
}
PSGLdevice *psglGetCurrentDevice()
PSGLdevice *psglGetCurrentDevice(void)
{
return _CurrentDevice;
}
@ -1220,7 +1220,10 @@ GLAPI void psglSwap( void )
if ( res != CELL_OK )
{
RARCH_WARN("RESC cellRescSetConvertAndFlip returned error code %d.\n", res);
if ( _CurrentContext ) _CurrentContext->needValidate |= PSGL_VALIDATE_FRAMEBUFFER;
if(_CurrentContext)
_CurrentContext->needValidate |= PSGL_VALIDATE_FRAMEBUFFER;
return;
}
}

View File

@ -3,21 +3,11 @@
#include "rgl.h"
#ifndef OS_VERSION_NUMERIC
#define OS_VERSION_NUMERIC 0x160
#endif
#ifdef __cplusplus
extern "C"
{
#endif
#ifdef __cplusplus
#define _RGL_EXTERN_C extern "C"
#else
#define _RGL_EXTERN_C
#endif
extern PSGLcontext *_CurrentContext;
extern PSGLdevice *_CurrentDevice;

View File

@ -27,6 +27,7 @@
#define ENDIAN_32(X, F) ((F) ? endianSwapWord(X) : (X))
#define SWAP_IF_BIG_ENDIAN(arg) endianSwapWordByHalf(arg)
#define ROW_MAJOR 0
#define COL_MAJOR 1
@ -86,8 +87,6 @@ DECLARE_FORMAT(GL_GREEN,1) \
DECLARE_FORMAT(GL_BLUE,1) \
DECLARE_FORMAT(GL_ALPHA,1)
#define jsMATRIX_SIZEf (sizeof(GLfloat)*ELEMENTS_IN_MATRIX)
enum
{
M10 = 1, M20, M30,
@ -98,14 +97,11 @@ enum
static int _RGLInitCompleted = 0;
static char *_RGLVendorString = "Retro Arch";
static char *_RGLRendererString = "RGL";
static char *_RGLExtensionsString = "";
static char *_RGLVersionNumber = "1.0";
PSGLcontext* _CurrentContext = NULL;
RGLcontextHookFunction _RGLContextCreateHook = NULL;
RGLcontextHookFunction _RGLContextDestroyHook = NULL;
@ -115,8 +111,9 @@ static volatile uint32_t *pLock = NULL;
static uint32_t cachedLockValue = 0;
static GmmFixedAllocData *pGmmFixedAllocData = NULL;
GLuint nvFenceCounter = 0;
static const unsigned int capacityIncr = 16;
static const int NAME_INCREMENT = 4;
#define CAPACITY_INCR 16
#define NAME_INCREMENT 4
#define DECLARE_TYPE(TYPE,CTYPE,MAXVAL) \
typedef CTYPE type_##TYPE; \
@ -126,8 +123,16 @@ DECLARE_C_TYPES
#undef DECLARE_TYPE
typedef GLfloat type_GL_FLOAT;
static inline type_GL_FLOAT _RGLFloatTo_GL_FLOAT( float v ) {return v;}
static inline float _RGLFloatFrom_GL_FLOAT( type_GL_FLOAT v ) {return v;}
static inline type_GL_FLOAT _RGLFloatTo_GL_FLOAT(float v)
{
return v;
}
static inline float _RGLFloatFrom_GL_FLOAT(type_GL_FLOAT v)
{
return v;
}
typedef GLhalfARB type_GL_HALF_FLOAT_ARB;
@ -146,6 +151,7 @@ const char *findSectionInPlace(const char* memory,unsigned int /*size*/,const ch
size_t sectionCount = ehdr->e_shnum;
const char *sectionHeaderStart = (const char*)ehdr + ehdr->e_shoff;
for(size_t i=0; i < sectionCount; i++)
{
const Elf32_Shdr *sectionHeader = (const Elf32_Shdr *)sectionHeaderStart + i;
@ -165,6 +171,7 @@ const char *findSymbolSectionInPlace(const char *memory, unsigned int /*size*/,
size_t sectionCount = ehdr->e_shnum;
const char *sectionHeaderStart = (const char*)ehdr + ehdr->e_shoff;
for(size_t i = 0; i<sectionCount; i++)
{
const Elf32_Shdr *sectionHeader = (const Elf32_Shdr *)sectionHeaderStart + i;
@ -189,9 +196,8 @@ int lookupSymbolValueInPlace(const char* symbolSection, size_t symbolSize, size_
Elf32_Sym* elf_sym = (Elf32_Sym*)symbolSection;
if (!strcmp(symbolstrtab + elf_sym->st_name, name))
{
return elf_sym->st_value;
}
symbolSection += symbolSize;
}
return -1;
@ -491,11 +497,14 @@ static void _RGLUnbindBufferObject( PSGLcontext *LContext, GLuint name )
GLAPI void APIENTRY glBindBuffer( GLenum target, GLuint name )
{
PSGLcontext *LContext = _CurrentContext;
if ( name ) _RGLTexNameSpaceCreateNameLazy( &LContext->bufferObjectNameSpace, name );
if(name)
_RGLTexNameSpaceCreateNameLazy( &LContext->bufferObjectNameSpace, name );
switch ( target )
{
case GL_ARRAY_BUFFER: LContext->ArrayBuffer = name;
case GL_ARRAY_BUFFER:
LContext->ArrayBuffer = name;
break;
case GL_ELEMENT_ARRAY_BUFFER:
break;
@ -519,6 +528,7 @@ GLAPI void APIENTRY glDeleteBuffers( GLsizei n, const GLuint *buffers )
{
if ( !_RGLTexNameSpaceIsName( &LContext->bufferObjectNameSpace, buffers[i] ) )
continue;
if ( buffers[i] )
_RGLUnbindBufferObject( LContext, buffers[i] );
}
@ -539,7 +549,9 @@ static inline jsFramebuffer *_RGLGetFramebuffer( PSGLcontext *LContext, GLuint n
static inline void _RGLTextureTouchFBOs( jsTexture *texture )
{
PSGLcontext *LContext = _CurrentContext;
if ( !LContext ) return;
if(!LContext)
return;
GLuint fbCount = texture->framebuffers.getCount();
if(fbCount > 0)
{
@ -745,7 +757,9 @@ GLAPI void APIENTRY glBufferData( GLenum target, GLsizeiptr size, const GLvoid *
bufferObject = _RGLGetBufferObject( LContext, name );
}
if ( bufferObject->size > 0 ) _RGLPlatformDestroyBufferObject( bufferObject );
if (bufferObject->size > 0)
_RGLPlatformDestroyBufferObject( bufferObject );
bufferObject->usage = usage;
bufferObject->size = size;
bufferObject->width = 0;
@ -1169,11 +1183,8 @@ static void _RGLRasterToImage(const jsRaster* raster, jsImage* image)
for ( int j = 0; j < raster->height; ++j )
{
const unsigned char *src = ( const unsigned char * )raster->data +
j * raster->ystride;
unsigned char *dst = ( unsigned char * )image->data +
( j ) * image->ystride +
0 * image->xstride;
const unsigned char *src = ( const unsigned char * )raster->data + j * raster->ystride;
unsigned char *dst = ( unsigned char * )image->data + (j) * image->ystride;
for ( int k = 0; k < raster->width; ++k )
{
@ -1286,6 +1297,7 @@ void _RGLPlatformDropTexture( jsTexture *texture )
int _RGLGetPixelSize( GLenum format, GLenum type )
{
int componentSize;
switch ( type )
{
@ -1305,6 +1317,7 @@ int _RGLGetPixelSize( GLenum format, GLenum type )
default:
return 0;
}
return _RGLGetComponentCount( format )*componentSize;
}
@ -1346,6 +1359,7 @@ void _RGLPlatformDropUnboundTextures( GLenum pool )
break;
}
}
for ( j = 0; j < _RGL_MAX_TEXTURE_IMAGE_UNITS; ++j)
{
jsTextureImageUnit *tu = LContext->TextureImageUnits + j;
@ -1355,6 +1369,7 @@ void _RGLPlatformDropUnboundTextures( GLenum pool )
break;
}
}
if ( bound )
continue;
@ -1362,8 +1377,7 @@ void _RGLPlatformDropUnboundTextures( GLenum pool )
if ( gcmTexture->pbo != NULL && gcmTexture->pbo->refCount > 1 )
continue;
if ( pool != _RGL_SURFACE_POOL_NONE &&
pool != gcmTexture->pool )
if ( pool != _RGL_SURFACE_POOL_NONE && pool != gcmTexture->pool )
continue;
_RGLPlatformDropTexture( texture );
@ -1439,9 +1453,12 @@ static void _RGLPlatformReallocateGcmTexture( jsTexture* texture )
static void _RGLImageFreeCPUStorage( jsImage *image )
{
if ( !image->mallocData ) return;
if (!image->mallocData)
return;
if (image->mallocData != NULL)
free( image->mallocData );
image->mallocStorageSize = 0;
image->data = NULL;
image->mallocData = NULL;
@ -1576,7 +1593,9 @@ source: _RGL_SURFACE_SOURCE_TEXTURE,
static void jsPlatformFramebuffer_validate( jsPlatformFramebuffer * fb, PSGLcontext *LContext )
{
fb->complete = ( _RGLPlatformFramebufferCheckStatus(fb) == GL_FRAMEBUFFER_COMPLETE_OES );
if ( !fb->complete ) return;
if(!fb->complete)
return;
GLuint width = CELL_GCM_MAX_RT_DIMENSION;
GLuint height = CELL_GCM_MAX_RT_DIMENSION;
@ -1592,7 +1611,9 @@ static void jsPlatformFramebuffer_validate( jsPlatformFramebuffer * fb, PSGLcont
jsTexture* colorTexture = NULL;
GLuint face = 0;
_RGLFramebufferGetAttachmentTexture(&fb->color[i], &colorTexture, &face );
if ( colorTexture == NULL ) continue;
if(colorTexture == NULL)
continue;
RGLTexture* nvTexture = ( RGLTexture * )colorTexture->platformTexture;
@ -1837,7 +1858,6 @@ GLAPI GLenum APIENTRY glCheckFramebufferStatusOES( GLenum target )
{
PSGLcontext *LContext = _CurrentContext;
if ( LContext->framebuffer )
{
jsFramebuffer* framebuffer = _RGLGetFramebuffer( LContext, LContext->framebuffer );
@ -1975,7 +1995,7 @@ void _RGLEraseName( jsNameSpace* ns, jsName name )
void _RGLTexNameSpaceInit( jsTexNameSpace *ns, jsTexNameSpaceCreateFunction create, jsTexNameSpaceDestroyFunction destroy )
{
ns->capacity = capacityIncr;
ns->capacity = CAPACITY_INCR;
ns->data = ( void ** )malloc( ns->capacity * sizeof( void* ) );
memset( ns->data, 0, ns->capacity*sizeof( void* ) );
ns->create = create;
@ -2008,8 +2028,11 @@ void _RGLTexNameSpaceResetNames( jsTexNameSpace *ns )
GLuint _RGLTexNameSpaceGetFree( jsTexNameSpace *ns )
{
GLuint i;
for(i = 1; i < ns->capacity; ++i)
if ( !ns->data[i] ) break;
if ( !ns->data[i] )
break;
return i;
}
@ -2017,7 +2040,7 @@ GLboolean _RGLTexNameSpaceCreateNameLazy( jsTexNameSpace *ns, GLuint name )
{
if ( name >= ns->capacity )
{
int newCapacity = name >= ns->capacity + capacityIncr ? name + 1 : ns->capacity + capacityIncr;
int newCapacity = name >= ns->capacity + CAPACITY_INCR ? name + 1 : ns->capacity + CAPACITY_INCR;
void **newData = ( void ** )realloc( ns->data, newCapacity * sizeof( void * ) );
memset( newData + ns->capacity, 0, ( newCapacity - ns->capacity )*sizeof( void * ) );
ns->data = newData;
@ -2033,8 +2056,10 @@ GLboolean _RGLTexNameSpaceCreateNameLazy( jsTexNameSpace *ns, GLuint name )
GLboolean _RGLTexNameSpaceIsName( jsTexNameSpace *ns, GLuint name )
{
if (( name > 0 ) && ( name < ns->capacity ) ) return( ns->data[name] != 0 );
else return GL_FALSE;
if (( name > 0 ) && (name < ns->capacity))
return( ns->data[name] != 0 );
else
return GL_FALSE;
}
void _RGLTexNameSpaceGenNames( jsTexNameSpace *ns, GLsizei n, GLuint *names )
@ -2043,7 +2068,9 @@ void _RGLTexNameSpaceGenNames( jsTexNameSpace *ns, GLsizei n, GLuint *names )
{
GLuint name = _RGLTexNameSpaceGetFree( ns );
names[i] = name;
if ( name ) _RGLTexNameSpaceCreateNameLazy( ns, name );
if(name)
_RGLTexNameSpaceCreateNameLazy( ns, name );
}
}
@ -2052,7 +2079,10 @@ void _RGLTexNameSpaceDeleteNames( jsTexNameSpace *ns, GLsizei n, const GLuint *n
for ( int i = 0;i < n;++i )
{
GLuint name = names[i];
if ( !_RGLTexNameSpaceIsName( ns, name ) ) continue;
if(!_RGLTexNameSpaceIsName(ns, name))
continue;
ns->destroy( ns->data[name] );
ns->data[name] = NULL;
}
@ -2078,29 +2108,32 @@ static uint32_t gmmInitFixedAllocator (void)
int blockSize = (i==0) ? sizeof(GmmBlock): sizeof(GmmTileBlock);
pGmmFixedAllocData->ppBlockList[i] = (char **)malloc(sizeof(char *));
if (pGmmFixedAllocData->ppBlockList[i] == NULL)
return GMM_ERROR;
pGmmFixedAllocData->ppBlockList[i][0] = (char *)malloc(blockSize * blockCount);
if (pGmmFixedAllocData->ppBlockList[i][0] == NULL)
return GMM_ERROR;
pGmmFixedAllocData->ppFreeBlockList[i] = (uint16_t **)malloc(sizeof(uint16_t *));
if (pGmmFixedAllocData->ppFreeBlockList[i] == NULL)
return GMM_ERROR;
pGmmFixedAllocData->ppFreeBlockList[i][0] = (uint16_t *)malloc(sizeof(uint16_t) * blockCount);
if (pGmmFixedAllocData->ppFreeBlockList[i][0] == NULL)
return GMM_ERROR;
pGmmFixedAllocData->pBlocksUsed[i] = (uint16_t *)malloc(sizeof(uint16_t));
if (pGmmFixedAllocData->pBlocksUsed[i] == NULL)
return GMM_ERROR;
for (int j=0; j<blockCount; j++)
{
pGmmFixedAllocData->ppFreeBlockList[i][0][j] = j;
}
pGmmFixedAllocData->pBlocksUsed[i][0] = 0;
pGmmFixedAllocData->BlockListCount[i] = 1;
@ -2127,9 +2160,7 @@ static void gmmRemovePendingFree(
pBlock->pPrevFree->pNextFree = pBlock->pNextFree;
}
static uint8_t gmmSizeToFreeIndex(
uint32_t size
)
static uint8_t gmmSizeToFreeIndex(uint32_t size)
{
if (size >= GMM_FREE_BIN_0 && size < GMM_FREE_BIN_1)
return 0;
@ -2302,9 +2333,7 @@ static void *gmmAllocFixed(uint8_t isTile)
pGmmFixedAllocData->pBlocksUsed[isTile] = pBlocksUsed;
for (int i=0; i<blockCount; i++)
{
pGmmFixedAllocData->ppFreeBlockList[isTile][listCount][i] = i;
}
pGmmFixedAllocData->pBlocksUsed[isTile][listCount] = 0;
pGmmFixedAllocData->BlockListCount[isTile]++;
@ -2457,10 +2486,7 @@ static GmmBlock *gmmAllocBlock(GmmAllocator *pAllocator, uint32_t size)
return pNewBlock;
}
static GmmTileBlock *gmmFindFreeTileBlock(
GmmAllocator *pAllocator,
const uint32_t size
)
static GmmTileBlock *gmmFindFreeTileBlock(GmmAllocator *pAllocator, const uint32_t size)
{
GmmTileBlock *pBlock = pAllocator->pTileHead;
GmmTileBlock *pBestAfterBlock = NULL;
@ -2506,15 +2532,10 @@ static GmmTileBlock *gmmFindFreeTileBlock(
return pNewBlock;
}
else
{
return NULL;
}
}
static GmmTileBlock *gmmCreateTileBlock(
GmmAllocator *pAllocator,
const uint32_t size
)
static GmmTileBlock *gmmCreateTileBlock(GmmAllocator *pAllocator, const uint32_t size)
{
GmmTileBlock *pNewBlock;
uint32_t address;
@ -2554,9 +2575,7 @@ static GmmTileBlock *gmmCreateTileBlock(
return pNewBlock;
}
static void gmmFreeTileBlock(
GmmTileBlock *pTileBlock
)
static void gmmFreeTileBlock(GmmTileBlock *pTileBlock)
{
GmmAllocator *pAllocator;
@ -2576,9 +2595,7 @@ static void gmmFreeTileBlock(
pAllocator->pTileHead = pTileBlock->pNext;
if (pAllocator->pTileHead)
{
pAllocator->pTileHead->pPrev = NULL;
}
pAllocator->size = pAllocator->pTileHead ?
pAllocator->pTileHead->base.address - pAllocator->startAddress :
@ -2594,10 +2611,8 @@ static void gmmFreeTileBlock(
pAllocator->pTileTail = pTileBlock->pPrev;
if (pAllocator->pTileTail)
{
pAllocator->pTileTail->pNext = NULL;
}
}
gmmFreeFixed(1, pTileBlock);
}
@ -2751,9 +2766,7 @@ static void gmmFreeBlock (GmmBlock *pBlock)
gmmFreeFixed(0, pBlock);
}
static void gmmAddPendingFree(
GmmBlock *pBlock
)
static void gmmAddPendingFree(GmmBlock *pBlock)
{
GmmAllocator *pAllocator;
@ -3216,7 +3229,6 @@ uint32_t gmmAlloc(const uint8_t isTile, const uint32_t size)
if (!isTile)
{
newSize = pad(size, GMM_ALIGNMENT);
retId = gmmFindFreeBlock(pAllocator, newSize);
}
else
@ -3679,9 +3691,7 @@ static void setSamplerfp( CgRuntimeParameter*ptr, const void*v, int )
const CgParameterResource *parameterResource = _RGLGetParameterResource( program, (( CgRuntimeParameter* )ptr )->parameterEntry );
if ( v )
{
*( GLuint* )ptr->pushBufferPointer = *( GLuint* )v;
}
else
{
jsTextureImageUnit *unit = _CurrentContext->TextureImageUnits + ( parameterResource->resource - CG_TEXUNIT0 );
@ -3811,9 +3821,7 @@ static void _RGLCreatePushBuffer( _CGprogram *program )
}
if (( profileIndex == FRAGMENT_PROFILE_INDEX ) && ( hasSharedParams ) )
{
bufferSize += 8 + 3 + 2;
}
bufferSize = _RGLPad( bufferSize, 4 );
@ -4252,6 +4260,7 @@ static int _RGLGenerateProgram( _CGprogram *program, int profileIndex, const CgP
const CgParameterResource *parameterResource = _RGLGetParameterResource( program, parameterEntry );
const float *itemDefaultValues = program->defaultValues + program->defaultValuesIndices[i].defaultValueIndex;
int registerStride = isMatrix(( CGtype )parameterResource->type ) ? _RGLGetTypeRowCount(( CGtype )parameterResource->type ) : 1;
if ( parameterEntry->flags & CGP_CONTIGUOUS )
memcpy( rtParameter->pushBufferPointer, itemDefaultValues, arrayCount * registerStride *4*sizeof( float ) );
else
@ -4287,14 +4296,6 @@ static int _RGLGenerateProgram( _CGprogram *program, int profileIndex, const CgP
return 1;
}
int _RGLPlatformGenerateFragmentProgram( _CGprogram *program, const CgProgramHeader *programHeader, const void *ucode,
const CgParameterTableHeader *parameterHeader, const char *stringTable, const float *defaultValues )
{
return _RGLGenerateProgram( program, FRAGMENT_PROFILE_INDEX, programHeader, ucode, parameterHeader, NULL, stringTable, defaultValues );
}
void _RGLPlatformVertexProgramErase( void* platformProgram )
{
_CGprogram* program = ( _CGprogram* )platformProgram;
@ -5276,7 +5277,6 @@ PSGLcontext *psglGetCurrentContext()
return _CurrentContext;
}
const GLfloat _RGLIdentityMatrixf[ELEMENTS_IN_MATRIX] =
{
1.f, 0.f, 0.f, 0.f,
@ -5288,7 +5288,7 @@ const GLfloat _RGLIdentityMatrixf[ELEMENTS_IN_MATRIX] =
static void _RGLMatrixStackReset( jsMatrixStack* LMatrixStack )
{
LMatrixStack->MatrixStackPtr = 0;
memcpy( LMatrixStack->MatrixStackf, _RGLIdentityMatrixf, jsMATRIX_SIZEf );
memcpy( LMatrixStack->MatrixStackf, _RGLIdentityMatrixf, sizeof(GLfloat)*ELEMENTS_IN_MATRIX );
LMatrixStack->dirty = GL_TRUE;
}
@ -5359,9 +5359,7 @@ static void _RGLResetContext( PSGLcontext *LContext )
tu->currentTexture = NULL;
}
for ( int i = 0;i < _RGL_MAX_VERTEX_TEXTURE_IMAGE_UNITS;++i )
{
LContext->VertexTextureImages[i] = NULL;
}
LContext->ActiveTexture = 0;
LContext->CurrentImageUnit = LContext->TextureImageUnits;
@ -5396,8 +5394,10 @@ static void _RGLResetContext( PSGLcontext *LContext )
static void _RGLMatrixStackInit( jsMatrixStack* LMatrixStack, GLuint depth )
{
LMatrixStack->MatrixStackf = ( GLfloat * )malloc( jsMATRIX_SIZEf * depth );
if ( !LMatrixStack->MatrixStackf ) return;
LMatrixStack->MatrixStackf = (GLfloat *)malloc( sizeof(GLfloat)*ELEMENTS_IN_MATRIX * depth );
if (!LMatrixStack->MatrixStackf)
return;
_RGLMatrixStackReset( LMatrixStack );
}
@ -5573,9 +5573,7 @@ void psglDestroyContext( PSGLcontext* LContext )
_RGLTexNameSpaceFree( &LContext->attribSetNameSpace );
if ( _CurrentContext == LContext )
{
psglMakeCurrent( NULL, NULL );
}
if(LContext != NULL)
free( LContext );
@ -5626,7 +5624,7 @@ GLAPI void APIENTRY glGetFloatv( GLenum pname, GLfloat* params )
_RGLSetError( GL_INVALID_ENUM );
return;
}
memcpy( params, LMatrixStack->MatrixStackf + LMatrixStack->MatrixStackPtr * ELEMENTS_IN_MATRIX, jsMATRIX_SIZEf );
memcpy( params, LMatrixStack->MatrixStackf + LMatrixStack->MatrixStackPtr * ELEMENTS_IN_MATRIX, sizeof(GLfloat)*ELEMENTS_IN_MATRIX );
}
GLAPI void APIENTRY glEnable( GLenum cap )
@ -5646,22 +5644,18 @@ GLAPI void APIENTRY glEnable( GLenum cap )
LContext->BlendingMrt[2] = GL_TRUE;
LContext->needValidate |= PSGL_VALIDATE_BLENDING;
break;
case GL_BLEND_MRT0_SCE:
LContext->Blending = GL_TRUE;
LContext->needValidate |= PSGL_VALIDATE_BLENDING;
break;
case GL_BLEND_MRT1_SCE:
LContext->BlendingMrt[0] = GL_TRUE;
LContext->needValidate |= PSGL_VALIDATE_BLENDING;
break;
case GL_BLEND_MRT2_SCE:
LContext->BlendingMrt[1] = GL_TRUE;
LContext->needValidate |= PSGL_VALIDATE_BLENDING;
break;
case GL_BLEND_MRT3_SCE:
LContext->BlendingMrt[2] = GL_TRUE;
LContext->needValidate |= PSGL_VALIDATE_BLENDING;
@ -5871,13 +5865,14 @@ void psglExit (void)
#undef __STRICT_ANSI__
GLAPI void APIENTRY glLoadIdentity()
GLAPI void APIENTRY glLoadIdentity(void)
{
PSGLcontext* LContext = _CurrentContext;
jsMatrixStack* LMatrixStack = NULL;
jsContextGetMatrixStack(LContext, LContext->MatrixMode, LMatrixStack);
memcpy( LMatrixStack->MatrixStackf + LMatrixStack->MatrixStackPtr*ELEMENTS_IN_MATRIX, _RGLIdentityMatrixf, jsMATRIX_SIZEf );
memcpy( LMatrixStack->MatrixStackf + LMatrixStack->MatrixStackPtr * ELEMENTS_IN_MATRIX, _RGLIdentityMatrixf, sizeof(GLfloat)*ELEMENTS_IN_MATRIX );
LMatrixStack->dirty = GL_TRUE;
}
@ -5895,6 +5890,7 @@ GLAPI void APIENTRY glOrthof( GLfloat left, GLfloat right, GLfloat bottom, GLflo
GLfloat *LMatrix = NULL;
jsContextGetMatrixStack(LContext, LContext->MatrixMode, LMatrixStack);
if (LMatrixStack)
LMatrix = LMatrixStack->MatrixStackf + LMatrixStack->MatrixStackPtr * ELEMENTS_IN_MATRIX;
@ -5950,8 +5946,6 @@ GLAPI void APIENTRY glOrthof( GLfloat left, GLfloat right, GLfloat bottom, GLflo
LContext->InverseModelViewValid = GL_FALSE;
}
const uint32_t c_rounded_size_of_RGLDrawParams = (sizeof(jsDrawParams)+0x7f)&~0x7f;
static uint8_t s_dparams_buff[ c_rounded_size_of_RGLDrawParams ] __attribute__((aligned(128)));
int _psglCheckDrawElementsVBOBounds = 0;
@ -6195,6 +6189,8 @@ static GLuint _RGLValidateAttributesSlow( jsDrawParams *dparams, GLboolean *isMa
GLAPI void APIENTRY glDrawArrays( GLenum mode, GLint first, GLsizei count )
{
static uint8_t s_dparams_buff[ (sizeof(jsDrawParams) + 0x7f) & ~0x7f ] __attribute__((aligned(128)));
PSGLcontext* LContext = _CurrentContext;
jsAttributeState* as = LContext->attribs;
RGLDriver *driver= (RGLDriver *)_CurrentDevice->rasterDriver;
@ -6202,7 +6198,7 @@ GLAPI void APIENTRY glDrawArrays( GLenum mode, GLint first, GLsizei count )
if ( RGL_UNLIKELY( ! RGLBIT_GET( LContext->attribs->EnabledMask, _RGL_ATTRIB_POSITION_INDEX ) ) ) return;
uint32_t _tmp_clear_loop = c_rounded_size_of_RGLDrawParams >> 7;
uint32_t _tmp_clear_loop = ((sizeof(jsDrawParams) + 0x7f) & ~0x7f) >> 7;
do{
--_tmp_clear_loop;
@ -6230,8 +6226,10 @@ GLAPI void APIENTRY glDrawArrays( GLenum mode, GLint first, GLsizei count )
jsAttribute* attrib = as->attrib + i;
const GLuint freq = attrib->frequency;
GLuint count;
if (RGLBIT_GET(as->ModuloMask, i))
count = maxElements > freq ? freq : maxElements; else
count = maxElements > freq ? freq : maxElements;
else
count = ( maxElements + freq - 1 ) / freq;
const GLuint numBytes = attrib->clientStride * count;
@ -6254,6 +6252,7 @@ GLAPI void APIENTRY glDrawArrays( GLenum mode, GLint first, GLsizei count )
jsAttribSet* attribSet = _RGLGetAttribSet( LContext->attribSetName );
uint32_t totalXfer = 0;
for (GLuint i = 0; i < _RGL_MAX_VERTEX_ATTRIBS; ++i)
totalXfer += dparams->attribXferSize[i];
@ -6382,11 +6381,17 @@ GLAPI void APIENTRY glBindTexture( GLenum target, GLuint name )
static void _RGLReallocateImages( jsTexture *texture, GLsizei dimension )
{
GLuint oldCount = texture->imageCount;
if ( dimension <= 0 ) dimension = 1;
if ( dimension <= 0 )
dimension = 1;
GLuint n = 1 + _RGLLog2( dimension );
n = MAX( n, oldCount );
jsImage *images = ( jsImage * )realloc( texture->image, n * sizeof( jsImage ) );
memset( images + oldCount, 0, ( n - oldCount )*sizeof( jsImage ) );
texture->image = images;
texture->imageCount = n;
}
@ -6408,8 +6413,7 @@ static int _RGLGetImage( GLenum target, GLint level, jsTexture **texture, jsImag
GLAPI void APIENTRY glTexImage2D( GLenum target, GLint level, GLint internalFormat,
GLsizei width, GLsizei height, GLint border, GLenum format,
GLenum type, const GLvoid *pixels )
GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels )
{
PSGLcontext* LContext = _CurrentContext;
jsTexture *texture;
@ -6441,14 +6445,8 @@ GLAPI void APIENTRY glTexImage2D( GLenum target, GLint level, GLint internalForm
(( const GLubyte* )pixels - ( const GLubyte* )NULL );
}
_RGLSetImage(
image,
internalFormat,
width, height, 1,
LContext->unpackAlignment,
format, type,
pixels );
_RGLSetImage(image, internalFormat, width, height, 1, LContext->unpackAlignment,
format, type, pixels);
if ( LContext->PixelUnpackBuffer != 0 )
{
@ -6471,7 +6469,6 @@ GLAPI void APIENTRY glTexImage2D( GLenum target, GLint level, GLint internalForm
if (!pBaseBlock->isTile)
{
GmmBlock *pBlock = (GmmBlock *)jsBuffer->bufferId;
pBlock->isPinned = 0;
}
}
@ -6494,14 +6491,12 @@ GLAPI void APIENTRY glActiveTexture( GLenum texture )
LContext->CurrentCoordsUnit = unit < _RGL_MAX_TEXTURE_COORDS ? LContext->TextureCoordsUnits + unit : NULL;
}
GLAPI void APIENTRY glClientActiveTexture( GLenum texture )
{
PSGLcontext* LContext = _CurrentContext;
LContext->CS_ActiveTexture = texture - GL_TEXTURE0;
}
GLAPI void APIENTRY glPixelStorei( GLenum pname, GLint param )
{
PSGLcontext* LContext = _CurrentContext;
@ -6628,7 +6623,9 @@ void _RGLCgProgramErase( _CGprogram* prog )
break;
}
if ( prog->id ) _RGLEraseName( &_CurrentContext->cgProgramNameSpace, ( jsName )prog->id );
if ( prog->id )
_RGLEraseName( &_CurrentContext->cgProgramNameSpace, ( jsName )prog->id );
if ( prog->runtimeElf )
free( prog->runtimeElf );
@ -6699,22 +6696,27 @@ static bool cgOpenElf( const void *ptr, size_t size, CGELFBinary *elfBinary )
{
while(1)
{
size_t shadertabSize;
size_t consttabSize;
size_t strtabSize;
size_t symbolSize;
size_t symbolCount;
const char *symbolstrtab;
const char *symtab = findSymbolSectionInPlace(( const char * )ptr, size, &symbolSize, &symbolCount, &symbolstrtab );
if ( !symtab )
break;
size_t shadertabSize;
const char *shadertab = findSectionInPlace(( const char* )ptr, size, ".shadertab", &shadertabSize );
if ( !shadertab )
break;
size_t strtabSize;
const char *strtab = findSectionInPlace(( const char* )ptr, size, ".strtab", &strtabSize );
if ( !strtab )
break;
size_t consttabSize;
const char *consttab = findSectionInPlace(( const char* )ptr, size, ".const", &consttabSize );
if ( !consttab )
break;
@ -6770,6 +6772,7 @@ static bool cgGetElfProgramByName( CGELFBinary *elfBinary, const char *name, CGE
{
//if no name try to return the first program
int res;
if ( name == NULL || name[0] == '\0' )
res = 0;
else
@ -6814,7 +6817,6 @@ static CGprogram _RGLCgCreateProgram( CGcontext ctx, CGprofile profile, const Cg
}
prog->id = id;
//hack to counter removal of TypeC during beta
if ( profile == ( CGprofile )7005 )
profile = CG_PROFILE_SCE_VP_RSX;
if ( profile == ( CGprofile )7006 )
@ -6833,7 +6835,7 @@ static CGprogram _RGLCgCreateProgram( CGcontext ctx, CGprofile profile, const Cg
case CG_PROFILE_SCE_FP_TYPEB:
//case CG_PROFILE_SCE_FP_TYPEC:
case CG_PROFILE_SCE_FP_RSX:
success = _RGLPlatformGenerateFragmentProgram( prog, programHeader, ucode, parameterHeader, stringTable, defaultValues );
success = _RGLGenerateProgram( prog, FRAGMENT_PROFILE_INDEX, programHeader, ucode, parameterHeader, NULL, stringTable, defaultValues );
break;
default:
// should never reach here
@ -6869,19 +6871,12 @@ CG_API CGprogram cgCreateProgram( CGcontext ctx,
const char** args )
{
// Load a program from a memory pointer.
// NOTE: in our API all programs are pre-compiled binaries
// so entry point and compiler arguments are ignored.
//hack to counter removal of TypeC during beta
if ( profile == ( CGprofile )7005 )
profile = CG_PROFILE_SCE_VP_RSX;
if ( profile == ( CGprofile )7006 )
profile = CG_PROFILE_SCE_FP_RSX;
//hack to counter change of defines for program_type at r5294
// previously CG_BINARY was defined the same as CG_ROW_MAJOR
// if those values are passed in here, move them to the new values and remove this hack after we have
// an sdk that incorporates these changes so that prebuild libs (aka debugfont) can be used meanwhile
if ( program_type == CG_ROW_MAJOR )
program_type = CG_BINARY;
@ -6924,12 +6919,11 @@ CG_API CGprogram cgCreateProgram( CGcontext ctx,
//At that point we have a binary file which is either any ELF or an NV format file
const unsigned int ElfTag = 0x7F454C46; // == MAKEFOURCC(0x7F,'E','L','F');
if (!(*( unsigned int* )binaryBuffer == ElfTag))
{
//we have an NV file, convert it to the runtime format
//convert NV file to the runtime format
// if it was initially binary, throw warning about old format and recommend conversion to new with cgnv2elf
// don't throw the warning if it was source, cause clearly that would have been on purpose.
if ( program_type == CG_BINARY )
{
RARCH_WARN("A binary shader is being loaded using a deprecated binary format. Please use the cgnv2elf tool to convert to the new, memory-saving, faster-loading format.\n");
@ -6941,8 +6935,10 @@ CG_API CGprogram cgCreateProgram( CGcontext ctx,
STL_NAMESPACE vector<float> defaultValuesArray;
CgBinaryProgram* nvProgram = ( CgBinaryProgram* )binaryBuffer;
char *runtimeElfShader = NULL;
//check the endianness
int totalSize;
if (( nvProgram->profile != CG_PROFILE_SCE_FP_TYPEB ) && ( nvProgram->profile != CG_PROFILE_SCE_VP_TYPEB ) &&
( nvProgram->profile != ( CGprofile )7006 ) && ( nvProgram->profile != ( CGprofile )7005 ) &&
( nvProgram->profile != CG_PROFILE_SCE_FP_RSX ) && ( nvProgram->profile != CG_PROFILE_SCE_VP_RSX ) )
@ -6951,6 +6947,7 @@ CG_API CGprogram cgCreateProgram( CGcontext ctx,
}
else
totalSize = nvProgram->totalSize;
int res = convertNvToElfFromMemory( binaryBuffer, totalSize, 2, 0, ( void** ) & runtimeElfShader, &compiled_program_size, stringTableArray, defaultValuesArray );
if ( res != 0 )
{
@ -6969,6 +6966,7 @@ CG_API CGprogram cgCreateProgram( CGcontext ctx,
int paddedSize = _RGLPad( compiled_program_size, 4 );
char *runtimeElf = (char*)memalign( 16, paddedSize + stringTableSize + defaultTableSize );
if ( !runtimeElf )
{
_RGLCgRaiseError( CG_MEMORY_ALLOC_ERROR );
@ -7122,10 +7120,8 @@ CG_API CGprogram cgCreateProgramFromFile( CGcontext ctx,
if ( entry == NULL )
{
if ( group->programCount == 1 )
{
ret = _RGLCgUpdateProgramAtIndex( group, 0, 1 );
}
}
else
{
int index = _RGLCgGetProgramIndex( group, entry );
@ -7134,11 +7130,9 @@ CG_API CGprogram cgCreateProgramFromFile( CGcontext ctx,
RARCH_ERR("Couldn't find the shader entry in the CG binary.\n");
}
else
{
ret = _RGLCgUpdateProgramAtIndex( group, index, 1 );
}
}
}
return ret;
}
}
@ -7171,9 +7165,7 @@ CG_API CGprogram cgCreateProgramFromFile( CGcontext ctx,
fclose( fp );
if ( program_type == CG_SOURCE )
{
ptr[file_size] = '\0';
}
CGprogram ret = cgCreateProgram( ctx, program_type, ptr, profile, entry, args );
@ -7578,21 +7570,6 @@ CG_API const char* cgGetProfileString( CGprofile profile )
return "";
}
CG_API CGprofile cgGetProfile( const char* profile_string )
{
size_t arraysize = sizeof( RGLcgProfileMap ) / sizeof( RGLcgProfileMapType );
unsigned int i = 0;
while ( i < arraysize )
{
if ( strcmp( RGLcgProfileMap[i].string, profile_string ) == 0 )
{
return RGLcgProfileMap[i].id;
}
++i;
}
return CG_PROFILE_UNKNOWN;
}
CG_API CGerror cgGetError(void)
{
CGerror err = _CurrentContext->RGLcgLastError;
@ -7623,7 +7600,6 @@ static int _RGLGetSizeofSubArray( const short *dimensions, int count )
return res;
}
static _CGparameter *_cgGetNamedParameter( _CGprogram* progPtr, const char* name, CGenum name_space, int *arrayIndex, const CgParameterEntry *_startEntry = NULL, int _entryCount = -1 )
{
if ( name == NULL )
@ -7891,7 +7867,6 @@ CGGL_API void cgGLEnableProfile( CGprofile profile )
LContext->VertexProgram = GL_TRUE;
LContext->needValidate |= PSGL_VALIDATE_VERTEX_PROGRAM | PSGL_VALIDATE_VERTEX_TEXTURES_USED;
break;
case CG_PROFILE_SCE_FP_TYPEB:
case CG_PROFILE_SCE_FP_RSX:
LContext->FragmentProgram = GL_TRUE;
@ -7962,12 +7937,6 @@ CGGL_API void cgGLLoadProgram( CGprogram program )
{
}
CGGL_API CGbool cgGLIsProgramLoaded( CGprogram program )
{
return CG_TRUE;
}
CGGL_API void cgGLBindProgram( CGprogram program )
{
_CGprogram* ptr = _cgGetProgPtr( program );
@ -8031,14 +8000,6 @@ CGGL_API void cgGLUnbindProgram( CGprofile profile )
}
CGGL_API GLuint cgGLGetProgramID( CGprogram program )
{
return 0;
}
CGGL_API void cgGLEnableProgramProfiles( CGprogram program ) {}
CGGL_API void cgGLDisableProgramProfiles( CGprogram program ) {}
CGGL_API void cgGLSetParameter1f( CGparameter param, float x )
{
CgRuntimeParameter *ptr = _RGLCgGLTestParameter( param );
@ -8091,10 +8052,8 @@ CGGL_API void cgGLDisableClientState( CGparameter param )
{
CgRuntimeParameter *_ptr = _RGLCgGLTestParameter( param );
const CgParameterResource *parameterResource = _RGLGetParameterResource( _ptr->program, _ptr->parameterEntry );
GLuint index = ( GLuint )( parameterResource->resource - CG_ATTR0 );
_RGLDisableVertexAttribArrayNV( index );
}
@ -8185,7 +8144,9 @@ static void _RGLCgContextPushFront( _CGcontext* ctx )
static void destroy_context(_CGcontext*ctx)
{
if ( _cgContextDestroyHook ) _cgContextDestroyHook( ctx );
if (_cgContextDestroyHook)
_cgContextDestroyHook(ctx);
_RGLEraseName( &_CurrentContext->cgContextNameSpace, ( jsName )ctx->id );
_RGLCgContextZero( ctx );
free( ctx );

View File

@ -167,19 +167,6 @@ struct jsFramebuffer
#define RGLBIT_FALSE(f,n) ((f) &= ~(1<<(n)))
#define RGLBIT_ASSIGN(f,n,val) do { if(val) RGLBIT_TRUE(f,n); else RGLBIT_FALSE(f,n); } while(0)
#ifndef MSVC
#define ALIGN16 __attribute__((aligned (16)))
#define _RGL_RESTRICT __restrict
#else
#define ALIGN16
#define _RGL_RESTRICT
#pragma warning( push )
#pragma warning ( disable : 4200 )
#endif
typedef intptr_t RGLintptr;
typedef size_t RGLsizeiptr;
typedef struct
{
GLfloat X, Y , Z, W;
@ -454,8 +441,7 @@ typedef struct
GLfloat value[4];
GLuint frequency;
GLboolean normalized;
}
ALIGN16 jsAttribute;
} __attribute__((aligned (16))) jsAttribute;
typedef struct
{
@ -465,8 +451,7 @@ typedef struct
unsigned int NeedsConversionMask;
unsigned int HasVBOMask;
unsigned int ModuloMask;
}
ALIGN16 jsAttributeState;
} __attribute__((aligned (16))) jsAttributeState;
typedef struct
{
@ -475,8 +460,7 @@ typedef struct
unsigned int beenUpdatedMask;
GLvoid* cmdBuffer;
GLuint cmdNumWords;
}
ALIGN16 jsAttribSet;
} __attribute__((aligned (16))) jsAttribSet;
struct jsBufferObject
{
@ -506,8 +490,7 @@ typedef struct jsNameSpace
void** data;
void** firstFree;
unsigned long capacity;
}
jsNameSpace;
} jsNameSpace;
typedef void *( *jsTexNameSpaceCreateFunction )( void );
typedef void( *jsTexNameSpaceDestroyFunction )( void * );
@ -607,10 +590,6 @@ struct PSGLcontext
if (mMatrixStack) mMatrix = (mMatrixStack)->MatrixStackf+(mMatrixStack)->MatrixStackPtr*ELEMENTS_IN_MATRIX;\
} while (0)
#if defined(MSVC)
#pragma warning ( pop )
#endif
#define MAX(A,B) ((A)>(B)?(A):(B))
#define MIN(A,B) ((A)<(B)?(A):(B))
#define RGL_LIKELY(COND) (COND)
@ -648,7 +627,7 @@ static inline unsigned long _RGLPad( unsigned long x, unsigned long pad )
static inline char* _RGLPadPtr(const char* p, unsigned int pad)
{
RGLintptr x = ( RGLintptr )p;
intptr_t x = (intptr_t)p;
x = ( x + pad - 1 ) / pad * pad;
return ( char* )x;
}