From 469199a017bdd42c76de4712f1d10748c3d2fbce Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sat, 30 Mar 2013 23:49:54 +0100 Subject: [PATCH] (RGL PS3) Integrate rglGcmCopySurface into rglPlatformValidateTextureResources --- ps3/rgl/src/ps3/include/rgl-externs.h | 4 -- ps3/rgl/src/ps3/rgl_ps3.cpp | 54 --------------------------- ps3/rgl/src/ps3/rgl_ps3_raster.cpp | 38 ++++++++++++++++--- 3 files changed, 33 insertions(+), 63 deletions(-) diff --git a/ps3/rgl/src/ps3/include/rgl-externs.h b/ps3/rgl/src/ps3/include/rgl-externs.h index fb0b42449e..bf415220e8 100644 --- a/ps3/rgl/src/ps3/include/rgl-externs.h +++ b/ps3/rgl/src/ps3/include/rgl-externs.h @@ -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); diff --git a/ps3/rgl/src/ps3/rgl_ps3.cpp b/ps3/rgl/src/ps3/rgl_ps3.cpp index 9f73b73446..ef46c8f5bd 100644 --- a/ps3/rgl/src/ps3/rgl_ps3.cpp +++ b/ps3/rgl/src/ps3/rgl_ps3.cpp @@ -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 ============================================================ */ diff --git a/ps3/rgl/src/ps3/rgl_ps3_raster.cpp b/ps3/rgl/src/ps3/rgl_ps3_raster.cpp index 101852fdef..0c7e3f94b8 100644 --- a/ps3/rgl/src/ps3/rgl_ps3_raster.cpp +++ b/ps3/rgl/src/ps3/rgl_ps3_raster.cpp @@ -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 );