Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3756c047 authored by John Reck's avatar John Reck Committed by android-build-merger
Browse files

Merge "TextureVuew rebind GL texture, if AHB content has changed" am: 6c5f83aa

am: f9af5e03

Change-Id: I383225ab23c2790fc895eb11f5fa94e4f47d8bbf
parents 054d35b4 f9af5e03
Loading
Loading
Loading
Loading
+15 −3
Original line number Diff line number Diff line
@@ -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;
+0 −5
Original line number Diff line number Diff line
@@ -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 {