From b13732f6a801d85390feb025d678e2b14effc915 Mon Sep 17 00:00:00 2001 From: Stan Iliev Date: Thu, 1 Aug 2019 14:41:52 -0400 Subject: [PATCH 48/49] TextureVuew rebind GL texture, if AHB content has changed Bug: 138674291 Test: Ran apps with TextureView and CTS Change-Id: Ieecf7daf160761de719356644ddaeda8f9c068e1 --- libs/hwui/surfacetexture/ImageConsumer.cpp | 18 +++++++++++++++--- libs/hwui/surfacetexture/ImageConsumer.h | 5 ----- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/libs/hwui/surfacetexture/ImageConsumer.cpp b/libs/hwui/surfacetexture/ImageConsumer.cpp index bae616bbc63..17ee17d5cd1 100644 --- a/libs/hwui/surfacetexture/ImageConsumer.cpp +++ b/libs/hwui/surfacetexture/ImageConsumer.cpp @@ -71,13 +71,16 @@ public: void makeImage(sp& graphicBuffer, android_dataspace dataspace, GrContext* context); + void newBufferContent(GrContext* context); + private: // The only way to invoke dtor is with unref, when mUsageCount is 0. ~AutoBackendTextureRelease() {} GrBackendTexture mBackendTexture; GrAHardwareBufferUtils::DeleteImageProc mDeleteProc; - GrAHardwareBufferUtils::DeleteImageCtx mDeleteCtx; + GrAHardwareBufferUtils::UpdateImageProc mUpdateProc; + GrAHardwareBufferUtils::TexImageCtx mImageCtx; // Starting with refcount 1, because the first ref is held by SurfaceTexture. Additional refs // are held by SkImages. @@ -101,7 +104,8 @@ AutoBackendTextureRelease::AutoBackendTextureRelease(GrContext* context, Graphic buffer->getWidth(), buffer->getHeight(), &mDeleteProc, - &mDeleteCtx, + &mUpdateProc, + &mImageCtx, createProtectedImage, backendFormat, false); @@ -123,7 +127,7 @@ void AutoBackendTextureRelease::unref(bool releaseImage) { mUsageCount--; if (mUsageCount <= 0) { if (mBackendTexture.isValid()) { - mDeleteProc(mDeleteCtx); + mDeleteProc(mImageCtx); mBackendTexture = {}; } delete this; @@ -154,6 +158,12 @@ void AutoBackendTextureRelease::makeImage(sp& graphicBuffer, } } +void AutoBackendTextureRelease::newBufferContent(GrContext* context) { + if (mBackendTexture.isValid()) { + mUpdateProc(mImageCtx, context); + } +} + void ImageConsumer::ImageSlot::createIfNeeded(sp graphicBuffer, android_dataspace dataspace, bool forceCreate, GrContext* context) { @@ -166,6 +176,8 @@ void ImageConsumer::ImageSlot::createIfNeeded(sp graphicBuffer, if (!mTextureRelease) { mTextureRelease = new AutoBackendTextureRelease(context, graphicBuffer.get()); + } else { + mTextureRelease->newBufferContent(context); } mDataspace = dataspace; diff --git a/libs/hwui/surfacetexture/ImageConsumer.h b/libs/hwui/surfacetexture/ImageConsumer.h index 2fdece98987..3e2a91a251f 100644 --- a/libs/hwui/surfacetexture/ImageConsumer.h +++ b/libs/hwui/surfacetexture/ImageConsumer.h @@ -26,11 +26,6 @@ #include #include -namespace GrAHardwareBufferUtils { -typedef void* DeleteImageCtx; -typedef void (*DeleteImageProc)(DeleteImageCtx); -} - namespace android { namespace uirenderer { -- 2.17.1