mirror of
https://github.com/libretro/RetroArch
synced 2025-04-10 15:45:19 +00:00
(RGL PS3) Implement our own version of cellGcmSetInvalidateVertexCache
This commit is contained in:
parent
90cd21821f
commit
964aff3773
@ -42,6 +42,20 @@ static inline GLuint rglPlatformGetBitsPerPixel (GLenum internalFormat)
|
|||||||
(thisContext->current)[1] = (value); \
|
(thisContext->current)[1] = (value); \
|
||||||
(thisContext->current) += 2;
|
(thisContext->current) += 2;
|
||||||
|
|
||||||
|
#define rglGcmSetInvalidateVertexCache(thisContext) \
|
||||||
|
(thisContext->current)[0] = (((1) << (18)) | ((0x00001710))); \
|
||||||
|
(thisContext->current)[1] = 0; \
|
||||||
|
(thisContext->current) += 2; \
|
||||||
|
(thisContext->current)[0] = (((1) << (18)) | ((0x00001714))); \
|
||||||
|
(thisContext->current)[1] = 0; \
|
||||||
|
(thisContext->current) += 2; \
|
||||||
|
(thisContext->current)[0] = (((1) << (18)) | ((0x00001714))); \
|
||||||
|
(thisContext->current)[1] = 0; \
|
||||||
|
(thisContext->current) += 2; \
|
||||||
|
(thisContext->current)[0] = (((1) << (18)) | ((0x00001714))); \
|
||||||
|
(thisContext->current)[1] = 0; \
|
||||||
|
(thisContext->current) += 2;
|
||||||
|
|
||||||
static inline void rglGcmFifoGlViewport(void *data, GLclampf zNear, GLclampf zFar)
|
static inline void rglGcmFifoGlViewport(void *data, GLclampf zNear, GLclampf zFar)
|
||||||
{
|
{
|
||||||
rglGcmViewportState *vp = (rglGcmViewportState*)data;
|
rglGcmViewportState *vp = (rglGcmViewportState*)data;
|
||||||
|
@ -1904,10 +1904,11 @@ void rglPsglPlatformInit (void *data)
|
|||||||
void rglPsglPlatformExit(void)
|
void rglPsglPlatformExit(void)
|
||||||
{
|
{
|
||||||
RGLcontext* LContext = _CurrentContext;
|
RGLcontext* LContext = _CurrentContext;
|
||||||
|
CellGcmContextData *thisContext = (CellGcmContextData*)gCellGcmCurrentContext;
|
||||||
|
|
||||||
if ( LContext )
|
if ( LContext )
|
||||||
{
|
{
|
||||||
GCM_FUNC_NO_ARGS( cellGcmSetInvalidateVertexCache );
|
rglGcmSetInvalidateVertexCache(thisContext);
|
||||||
rglGcmFifoFlush( &rglGcmState_i.fifo );
|
rglGcmFifoFlush( &rglGcmState_i.fifo );
|
||||||
|
|
||||||
psglMakeCurrent( NULL, NULL );
|
psglMakeCurrent( NULL, NULL );
|
||||||
@ -2773,6 +2774,7 @@ static void rglSetDisplayMode( const VideoMode *vm, GLushort bitsPerPixel, GLuin
|
|||||||
|
|
||||||
int rglPlatformCreateDevice (void *data)
|
int rglPlatformCreateDevice (void *data)
|
||||||
{
|
{
|
||||||
|
CellGcmContextData *thisContext = (CellGcmContextData*)gCellGcmCurrentContext;
|
||||||
RGLdevice *device = (RGLdevice*)data;
|
RGLdevice *device = (RGLdevice*)data;
|
||||||
rglGcmDevice *gcmDevice = ( rglGcmDevice * )device->platformDevice;
|
rglGcmDevice *gcmDevice = ( rglGcmDevice * )device->platformDevice;
|
||||||
RGLdeviceParameters* params = &device->deviceParameters;
|
RGLdeviceParameters* params = &device->deviceParameters;
|
||||||
@ -2995,7 +2997,7 @@ int rglPlatformCreateDevice (void *data)
|
|||||||
rglSetDisplayMode( vm, gcmDevice->color[0].bpp*8, gcmDevice->color[0].pitch );
|
rglSetDisplayMode( vm, gcmDevice->color[0].bpp*8, gcmDevice->color[0].pitch );
|
||||||
|
|
||||||
cellGcmSetFlipMode( gcmDevice->vsync ? CELL_GCM_DISPLAY_VSYNC : CELL_GCM_DISPLAY_HSYNC );
|
cellGcmSetFlipMode( gcmDevice->vsync ? CELL_GCM_DISPLAY_VSYNC : CELL_GCM_DISPLAY_HSYNC );
|
||||||
GCM_FUNC_NO_ARGS( cellGcmSetInvalidateVertexCache );
|
rglGcmSetInvalidateVertexCache(thisContext);
|
||||||
rglGcmFifoFinish( &rglGcmState_i.fifo );
|
rglGcmFifoFinish( &rglGcmState_i.fifo );
|
||||||
|
|
||||||
for ( int i = 0; i < params->bufferingMode; ++i )
|
for ( int i = 0; i < params->bufferingMode; ++i )
|
||||||
@ -3021,8 +3023,9 @@ void rglPlatformDestroyDevice (void *data)
|
|||||||
RGLdevice *device = (RGLdevice*)data;
|
RGLdevice *device = (RGLdevice*)data;
|
||||||
rglGcmDevice *gcmDevice = ( rglGcmDevice * )device->platformDevice;
|
rglGcmDevice *gcmDevice = ( rglGcmDevice * )device->platformDevice;
|
||||||
RGLdeviceParameters *params = &device->deviceParameters;
|
RGLdeviceParameters *params = &device->deviceParameters;
|
||||||
|
CellGcmContextData *thisContext = (CellGcmContextData*)gCellGcmCurrentContext;
|
||||||
|
|
||||||
GCM_FUNC_NO_ARGS( cellGcmSetInvalidateVertexCache );
|
rglGcmSetInvalidateVertexCache(thisContext);
|
||||||
rglGcmFifoFinish( &rglGcmState_i.fifo );
|
rglGcmFifoFinish( &rglGcmState_i.fifo );
|
||||||
|
|
||||||
// Stop flip callback
|
// Stop flip callback
|
||||||
@ -3060,6 +3063,7 @@ void rglPlatformDestroyDevice (void *data)
|
|||||||
|
|
||||||
GLAPI void RGL_EXPORT psglSwap (void)
|
GLAPI void RGL_EXPORT psglSwap (void)
|
||||||
{
|
{
|
||||||
|
CellGcmContextData *thisContext = (CellGcmContextData*)gCellGcmCurrentContext;
|
||||||
const uint32_t fence = rglGcmState_i.semaphores->userSemaphores[RGLGCM_SEMA_FENCE].val;
|
const uint32_t fence = rglGcmState_i.semaphores->userSemaphores[RGLGCM_SEMA_FENCE].val;
|
||||||
GmmBlock *pBlock = NULL;
|
GmmBlock *pBlock = NULL;
|
||||||
GmmBlock *pTemp = NULL;
|
GmmBlock *pTemp = NULL;
|
||||||
@ -3135,12 +3139,12 @@ GLAPI void RGL_EXPORT psglSwap (void)
|
|||||||
context->needValidate = RGL_VALIDATE_ALL;
|
context->needValidate = RGL_VALIDATE_ALL;
|
||||||
context->attribs->DirtyMask = ( 1 << RGL_MAX_VERTEX_ATTRIBS ) - 1;
|
context->attribs->DirtyMask = ( 1 << RGL_MAX_VERTEX_ATTRIBS ) - 1;
|
||||||
|
|
||||||
GCM_FUNC_NO_ARGS( cellGcmSetInvalidateVertexCache );
|
rglGcmSetInvalidateVertexCache(thisContext);
|
||||||
rglGcmFifoFlush( &rglGcmState_i.fifo );
|
rglGcmFifoFlush( &rglGcmState_i.fifo );
|
||||||
|
|
||||||
while (sys_semaphore_wait(FlipSem,1000) != CELL_OK);
|
while (sys_semaphore_wait(FlipSem,1000) != CELL_OK);
|
||||||
|
|
||||||
GCM_FUNC_NO_ARGS( cellGcmSetInvalidateVertexCache );
|
rglGcmSetInvalidateVertexCache(thisContext);
|
||||||
rglGcmFifoFlush( &rglGcmState_i.fifo );
|
rglGcmFifoFlush( &rglGcmState_i.fifo );
|
||||||
|
|
||||||
if ( device->deviceParameters.bufferingMode == RGL_BUFFERING_MODE_DOUBLE )
|
if ( device->deviceParameters.bufferingMode == RGL_BUFFERING_MODE_DOUBLE )
|
||||||
@ -4108,10 +4112,11 @@ RGLcontext *psglGetCurrentContext(void)
|
|||||||
|
|
||||||
void RGL_EXPORT psglDestroyContext (void *data)
|
void RGL_EXPORT psglDestroyContext (void *data)
|
||||||
{
|
{
|
||||||
|
CellGcmContextData *thisContext = (CellGcmContextData*)gCellGcmCurrentContext;
|
||||||
RGLcontext *LContext = (RGLcontext*)data;
|
RGLcontext *LContext = (RGLcontext*)data;
|
||||||
if ( _CurrentContext == LContext )
|
if ( _CurrentContext == LContext )
|
||||||
{
|
{
|
||||||
GCM_FUNC_NO_ARGS( cellGcmSetInvalidateVertexCache );
|
rglGcmSetInvalidateVertexCache(thisContext);
|
||||||
rglGcmFifoFinish( &rglGcmState_i.fifo );
|
rglGcmFifoFinish( &rglGcmState_i.fifo );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1234,6 +1234,7 @@ char *rglPlatformBufferObjectMap (void *data, GLenum access)
|
|||||||
{
|
{
|
||||||
rglBufferObject *bufferObject = (rglBufferObject*)data;
|
rglBufferObject *bufferObject = (rglBufferObject*)data;
|
||||||
rglGcmBufferObject *rglBuffer = (rglGcmBufferObject*)bufferObject->platformBufferObject;
|
rglGcmBufferObject *rglBuffer = (rglGcmBufferObject*)bufferObject->platformBufferObject;
|
||||||
|
CellGcmContextData *thisContext = (CellGcmContextData*)gCellGcmCurrentContext;
|
||||||
|
|
||||||
if (rglBuffer->mapCount++ == 0)
|
if (rglBuffer->mapCount++ == 0)
|
||||||
{
|
{
|
||||||
@ -1252,7 +1253,7 @@ char *rglPlatformBufferObjectMap (void *data, GLenum access)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// must wait in order to read
|
// must wait in order to read
|
||||||
GCM_FUNC_NO_ARGS( cellGcmSetInvalidateVertexCache );
|
rglGcmSetInvalidateVertexCache(thisContext);
|
||||||
rglGcmFifoFinish( &rglGcmState_i.fifo );
|
rglGcmFifoFinish( &rglGcmState_i.fifo );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1310,6 +1311,7 @@ GLAPI void APIENTRY glClear( GLbitfield mask )
|
|||||||
{
|
{
|
||||||
RGLcontext* LContext = _CurrentContext;
|
RGLcontext* LContext = _CurrentContext;
|
||||||
rglGcmDriver *driver = (rglGcmDriver*)_CurrentDevice->rasterDriver;
|
rglGcmDriver *driver = (rglGcmDriver*)_CurrentDevice->rasterDriver;
|
||||||
|
CellGcmContextData *thisContext = (CellGcmContextData*)gCellGcmCurrentContext;
|
||||||
|
|
||||||
if ( LContext->needValidate & RGL_VALIDATE_FRAMEBUFFER )
|
if ( LContext->needValidate & RGL_VALIDATE_FRAMEBUFFER )
|
||||||
{
|
{
|
||||||
@ -1353,7 +1355,7 @@ GLAPI void APIENTRY glClear( GLbitfield mask )
|
|||||||
CELL_GCM_CLEAR_B | CELL_GCM_CLEAR_A );
|
CELL_GCM_CLEAR_B | CELL_GCM_CLEAR_A );
|
||||||
|
|
||||||
|
|
||||||
GCM_FUNC_NO_ARGS( cellGcmSetInvalidateVertexCache );
|
rglGcmSetInvalidateVertexCache(thisContext);
|
||||||
rglGcmFifoFlush( &rglGcmState_i.fifo );
|
rglGcmFifoFlush( &rglGcmState_i.fifo );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1530,7 +1532,8 @@ void rglPlatformFramebuffer::validate (void *data)
|
|||||||
// shader and needed connections between GL state and the shader
|
// shader and needed connections between GL state and the shader
|
||||||
void *rglPlatformRasterInit (void)
|
void *rglPlatformRasterInit (void)
|
||||||
{
|
{
|
||||||
GCM_FUNC_NO_ARGS( cellGcmSetInvalidateVertexCache );
|
CellGcmContextData *thisContext = (CellGcmContextData*)gCellGcmCurrentContext;
|
||||||
|
rglGcmSetInvalidateVertexCache(thisContext);
|
||||||
rglGcmFifoFinish( &rglGcmState_i.fifo );
|
rglGcmFifoFinish( &rglGcmState_i.fifo );
|
||||||
|
|
||||||
rglGcmDriver *driver = (rglGcmDriver*)malloc(sizeof(rglGcmDriver));
|
rglGcmDriver *driver = (rglGcmDriver*)malloc(sizeof(rglGcmDriver));
|
||||||
@ -1577,6 +1580,7 @@ static uint8_t s_dparams_buff[ c_rounded_size_ofrglDrawParams ] __attribute__((a
|
|||||||
GLAPI void APIENTRY glDrawArrays (GLenum mode, GLint first, GLsizei count)
|
GLAPI void APIENTRY glDrawArrays (GLenum mode, GLint first, GLsizei count)
|
||||||
{
|
{
|
||||||
RGLcontext* LContext = _CurrentContext;
|
RGLcontext* LContext = _CurrentContext;
|
||||||
|
CellGcmContextData *thisContext = (CellGcmContextData*)gCellGcmCurrentContext;
|
||||||
|
|
||||||
if (RGL_UNLIKELY(!RGLBIT_GET(LContext->attribs->EnabledMask, RGL_ATTRIB_POSITION_INDEX)))
|
if (RGL_UNLIKELY(!RGLBIT_GET(LContext->attribs->EnabledMask, RGL_ATTRIB_POSITION_INDEX)))
|
||||||
return;
|
return;
|
||||||
@ -2101,7 +2105,7 @@ beginning:
|
|||||||
if ( driver->invalidateVertexCache )
|
if ( driver->invalidateVertexCache )
|
||||||
{
|
{
|
||||||
driver->invalidateVertexCache = GL_FALSE;
|
driver->invalidateVertexCache = GL_FALSE;
|
||||||
GCM_FUNC_NO_ARGS( cellGcmSetInvalidateVertexCache );
|
rglGcmSetInvalidateVertexCache(thisContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
GCM_FUNC( cellGcmSetUpdateFragmentProgramParameter,
|
GCM_FUNC( cellGcmSetUpdateFragmentProgramParameter,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user