diff options
author | Teng-Hui Zhu <ztenghui@google.com> | 2011-09-30 12:59:01 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2011-09-30 12:59:01 -0700 |
commit | 480eb21b8da42fec33d8c447f446738e61304be0 (patch) | |
tree | 22b1bb95cd4b87599e3a40a307efe66a0f2cf6f4 /Source/WebCore/platform/graphics/android/TransferQueue.cpp | |
parent | e0b26337fd49de2e4e7f55d9429cd5355bc50784 (diff) | |
parent | 9c68932a992e1d4697374eca5beee18005812424 (diff) | |
download | external_webkit-480eb21b8da42fec33d8c447f446738e61304be0.zip external_webkit-480eb21b8da42fec33d8c447f446738e61304be0.tar.gz external_webkit-480eb21b8da42fec33d8c447f446738e61304be0.tar.bz2 |
Merge "The new Gpu upload code path."
Diffstat (limited to 'Source/WebCore/platform/graphics/android/TransferQueue.cpp')
-rw-r--r-- | Source/WebCore/platform/graphics/android/TransferQueue.cpp | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/Source/WebCore/platform/graphics/android/TransferQueue.cpp b/Source/WebCore/platform/graphics/android/TransferQueue.cpp index e100838..d84033c 100644 --- a/Source/WebCore/platform/graphics/android/TransferQueue.cpp +++ b/Source/WebCore/platform/graphics/android/TransferQueue.cpp @@ -52,6 +52,10 @@ #define ST_BUFFER_NUMBER 4 +// Set this to 1 if we would like to take the new GpuUpload approach which +// relied on the glCopyTexSubImage2D instead of a glDraw call +#define GPU_UPLOAD_WITHOUT_DRAW 0 + namespace WebCore { TransferQueue::TransferQueue() @@ -86,7 +90,11 @@ void TransferQueue::initSharedSurfaceTextures(int width, int height) if (!m_sharedSurfaceTextureId) { glGenTextures(1, &m_sharedSurfaceTextureId); m_sharedSurfaceTexture = +#if GPU_UPLOAD_WITHOUT_DRAW + new android::SurfaceTexture(m_sharedSurfaceTextureId, true, GL_TEXTURE_2D); +#else new android::SurfaceTexture(m_sharedSurfaceTextureId); +#endif m_ANW = new android::SurfaceTextureClient(m_sharedSurfaceTexture); m_sharedSurfaceTexture->setSynchronousMode(true); m_sharedSurfaceTexture->setBufferCount(ST_BUFFER_NUMBER+1); @@ -137,6 +145,18 @@ void TransferQueue::blitTileFromQueue(GLuint fboID, BaseTileTexture* destTex, GLuint srcTexId, GLenum srcTexTarget, int index) { +#if GPU_UPLOAD_WITHOUT_DRAW + glBindFramebuffer(GL_FRAMEBUFFER, fboID); + glFramebufferTexture2D(GL_FRAMEBUFFER, + GL_COLOR_ATTACHMENT0, + GL_TEXTURE_2D, + srcTexId, + 0); + glBindTexture(GL_TEXTURE_2D, destTex->m_ownTextureId); + glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, + destTex->getSize().width(), + destTex->getSize().height()); +#else // Then set up the FBO and copy the SurfTex content in. glBindFramebuffer(GL_FRAMEBUFFER, fboID); glFramebufferTexture2D(GL_FRAMEBUFFER, @@ -174,7 +194,7 @@ void TransferQueue::blitTileFromQueue(GLuint fboID, BaseTileTexture* destTex, 0); } GLUtils::checkEglError("CreateSyncKHR"); - GLUtils::checkGlError("copy the surface texture into the normal one"); +#endif } void TransferQueue::interruptTransferQueue(bool interrupt) @@ -327,6 +347,7 @@ void TransferQueue::updateDirtyBaseTiles() if (usedFboForUpload) { glBindFramebuffer(GL_FRAMEBUFFER, 0); // rebind the standard FBO restoreGLState(); + GLUtils::checkGlError("updateDirtyBaseTiles"); } m_emptyItemCount = ST_BUFFER_NUMBER; |