97 lines
3.4 KiB
Diff
97 lines
3.4 KiB
Diff
From b13732f6a801d85390feb025d678e2b14effc915 Mon Sep 17 00:00:00 2001
|
|
From: Stan Iliev <stani@google.com>
|
|
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>& 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>& graphicBuffer,
|
|
}
|
|
}
|
|
|
|
+void AutoBackendTextureRelease::newBufferContent(GrContext* context) {
|
|
+ if (mBackendTexture.isValid()) {
|
|
+ mUpdateProc(mImageCtx, context);
|
|
+ }
|
|
+}
|
|
+
|
|
void ImageConsumer::ImageSlot::createIfNeeded(sp<GraphicBuffer> graphicBuffer,
|
|
android_dataspace dataspace, bool forceCreate,
|
|
GrContext* context) {
|
|
@@ -166,6 +176,8 @@ void ImageConsumer::ImageSlot::createIfNeeded(sp<GraphicBuffer> 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 <gui/BufferItem.h>
|
|
#include <system/graphics.h>
|
|
|
|
-namespace GrAHardwareBufferUtils {
|
|
-typedef void* DeleteImageCtx;
|
|
-typedef void (*DeleteImageProc)(DeleteImageCtx);
|
|
-}
|
|
-
|
|
namespace android {
|
|
|
|
namespace uirenderer {
|
|
--
|
|
2.17.1
|
|
|