mirror of
https://github.com/libretro/RetroArch
synced 2025-03-24 04:44:02 +00:00
(RGL PS3) Integrate rglGcmCopySurface into rglPlatformValidateTextureResources
This commit is contained in:
parent
8552a179b8
commit
469199a017
@ -10,7 +10,3 @@ void rglGcmFifoGlSetRenderTarget (const void *args);
|
||||
void rglCreatePushBuffer (void *data);
|
||||
void rglGcmSend( unsigned int dstId, unsigned dstOffset, unsigned int pitch, const char *src, unsigned int size );
|
||||
void rglGcmFreeTiledSurface (GLuint bufferId);
|
||||
|
||||
void rglGcmCopySurface(const void *data, GLuint srcX, GLuint srcY,
|
||||
const void *data_dst, GLuint dstX, GLuint dstY,
|
||||
GLuint width, GLuint height, GLboolean writeSync);
|
||||
|
@ -1573,60 +1573,6 @@ uint32_t gmmAlloc(void *data,
|
||||
return retId;
|
||||
}
|
||||
|
||||
/*============================================================
|
||||
SURFACE COPYING
|
||||
============================================================ */
|
||||
void rglGcmCopySurface(
|
||||
const void *data,
|
||||
GLuint srcX, GLuint srcY,
|
||||
const void *data_dst,
|
||||
GLuint dstX, GLuint dstY,
|
||||
GLuint width, GLuint height,
|
||||
GLboolean writeSync ) // don't overwrite dst directly (not used yet)
|
||||
{
|
||||
rglGcmSurface *src = (rglGcmSurface*)data;
|
||||
rglGcmSurface *dst = (rglGcmSurface*)data_dst;
|
||||
const GLuint srcPitch = src->pitch ? src->pitch : src->bpp * src->width;
|
||||
const GLuint dstPitch = dst->pitch ? dst->pitch : dst->bpp * dst->width;
|
||||
|
||||
bool bpp_1_transferdata = src->bpp == 1 &&
|
||||
(!(( dstX % 2 ) == 0 && ( srcX % 2 ) == 0 && ( width % 2 ) == 0 ));
|
||||
|
||||
if (( srcPitch >= 0x10000 ) || ( dstPitch >= 0x10000 ) || bpp_1_transferdata )
|
||||
{
|
||||
rglGcmTransferData( dst->dataId, dst->dataIdOffset+(dstPitch*dstY+dstX*dst->bpp), dstPitch,
|
||||
src->dataId, src->dataIdOffset+(srcPitch*srcY+srcX*src->bpp), srcPitch,
|
||||
width*src->bpp, height );
|
||||
return;
|
||||
}
|
||||
|
||||
switch ( src->bpp )
|
||||
{
|
||||
case 1:
|
||||
dstX /= 2;
|
||||
width /= 2;
|
||||
srcX /= 2;
|
||||
src->bpp = 2;
|
||||
break;
|
||||
case 8:
|
||||
case 16:
|
||||
src->bpp /= 4;
|
||||
width *= 4;
|
||||
srcX *= 4;
|
||||
dstX *= 4;
|
||||
break;
|
||||
}
|
||||
|
||||
rglGcmFifoGlTransferDataVidToVid( dst->dataId, dst->dataIdOffset, dstPitch, dstX, dstY,
|
||||
src->dataId, src->dataIdOffset, srcPitch, srcX, srcY,
|
||||
width, height, src->bpp );
|
||||
}
|
||||
|
||||
/*============================================================
|
||||
DATA TRANSFER
|
||||
============================================================ */
|
||||
|
||||
|
||||
/*============================================================
|
||||
FIFO BUFFER
|
||||
============================================================ */
|
||||
|
@ -2422,11 +2422,39 @@ source: RGLGCM_SURFACE_SOURCE_TEXTURE,
|
||||
dst.dataId = gcmTexture->gpuAddressId;
|
||||
dst.dataIdOffset = gcmTexture->gpuAddressIdOffset;
|
||||
|
||||
rglGcmCopySurface(
|
||||
&src, 0, 0,
|
||||
&dst, 0, 0,
|
||||
src.width, src.height,
|
||||
GL_TRUE ); // don't bypass GPU pipeline
|
||||
GLuint width = src.width;
|
||||
GLuint height = src.height;
|
||||
const GLuint srcPitch = src.pitch ? src.pitch : src.bpp * src.width;
|
||||
const GLuint dstPitch = dst.pitch ? dst.pitch : dst.bpp * dst.width;
|
||||
|
||||
bool bpp_1_transferdata = src.bpp == 1 &&
|
||||
(!(( width % 2 ) == 0 ));
|
||||
|
||||
if (( srcPitch >= 0x10000 ) || ( dstPitch >= 0x10000 ) || bpp_1_transferdata )
|
||||
{
|
||||
rglGcmTransferData( dst.dataId, dst.dataIdOffset, dstPitch,
|
||||
src.dataId, src.dataIdOffset, srcPitch,
|
||||
width * src.bpp, height );
|
||||
}
|
||||
else
|
||||
{
|
||||
switch ( src.bpp )
|
||||
{
|
||||
case 1:
|
||||
width /= 2;
|
||||
src.bpp = 2;
|
||||
break;
|
||||
case 8:
|
||||
case 16:
|
||||
src.bpp /= 4;
|
||||
width *= 4;
|
||||
break;
|
||||
}
|
||||
|
||||
rglGcmFifoGlTransferDataVidToVid( dst.dataId, dst.dataIdOffset, dstPitch, 0, 0,
|
||||
src.dataId, src.dataIdOffset, srcPitch, 0, 0,
|
||||
width, height, src.bpp );
|
||||
}
|
||||
|
||||
// free CPU copy of data
|
||||
rglImageFreeCPUStorage( image );
|
||||
|
Loading…
x
Reference in New Issue
Block a user