(RGL PS3) Integrate rglGcmCopySurface into rglPlatformValidateTextureResources

This commit is contained in:
twinaphex 2013-03-30 23:49:54 +01:00
parent 8552a179b8
commit 469199a017
3 changed files with 33 additions and 63 deletions

View File

@ -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);

View File

@ -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
============================================================ */

View File

@ -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 );