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 Original line Diff line number Diff line
@@ -71,13 +71,16 @@ public:
    void makeImage(sp<GraphicBuffer>& graphicBuffer, android_dataspace dataspace,
    void makeImage(sp<GraphicBuffer>& graphicBuffer, android_dataspace dataspace,
                   GrContext* context);
                   GrContext* context);


    void newBufferContent(GrContext* context);

private:
private:
    // The only way to invoke dtor is with unref, when mUsageCount is 0.
    // The only way to invoke dtor is with unref, when mUsageCount is 0.
    ~AutoBackendTextureRelease() {}
    ~AutoBackendTextureRelease() {}


    GrBackendTexture mBackendTexture;
    GrBackendTexture mBackendTexture;
    GrAHardwareBufferUtils::DeleteImageProc mDeleteProc;
    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
    // Starting with refcount 1, because the first ref is held by SurfaceTexture. Additional refs
    // are held by SkImages.
    // are held by SkImages.
@@ -101,7 +104,8 @@ AutoBackendTextureRelease::AutoBackendTextureRelease(GrContext* context, Graphic
        buffer->getWidth(),
        buffer->getWidth(),
        buffer->getHeight(),
        buffer->getHeight(),
        &mDeleteProc,
        &mDeleteProc,
        &mDeleteCtx,
        &mUpdateProc,
        &mImageCtx,
        createProtectedImage,
        createProtectedImage,
        backendFormat,
        backendFormat,
        false);
        false);
@@ -123,7 +127,7 @@ void AutoBackendTextureRelease::unref(bool releaseImage) {
    mUsageCount--;
    mUsageCount--;
    if (mUsageCount <= 0) {
    if (mUsageCount <= 0) {
        if (mBackendTexture.isValid()) {
        if (mBackendTexture.isValid()) {
            mDeleteProc(mDeleteCtx);
            mDeleteProc(mImageCtx);
            mBackendTexture = {};
            mBackendTexture = {};
        }
        }
        delete this;
        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,
void ImageConsumer::ImageSlot::createIfNeeded(sp<GraphicBuffer> graphicBuffer,
                                              android_dataspace dataspace, bool forceCreate,
                                              android_dataspace dataspace, bool forceCreate,
                                              GrContext* context) {
                                              GrContext* context) {
@@ -166,6 +176,8 @@ void ImageConsumer::ImageSlot::createIfNeeded(sp<GraphicBuffer> graphicBuffer,


        if (!mTextureRelease) {
        if (!mTextureRelease) {
            mTextureRelease = new AutoBackendTextureRelease(context, graphicBuffer.get());
            mTextureRelease = new AutoBackendTextureRelease(context, graphicBuffer.get());
        } else {
            mTextureRelease->newBufferContent(context);
        }
        }


        mDataspace = dataspace;
        mDataspace = dataspace;
+0 −5
Original line number Original line Diff line number Diff line
@@ -26,11 +26,6 @@
#include <gui/BufferItem.h>
#include <gui/BufferItem.h>
#include <system/graphics.h>
#include <system/graphics.h>


namespace GrAHardwareBufferUtils {
typedef void* DeleteImageCtx;
typedef void (*DeleteImageProc)(DeleteImageCtx);
}

namespace android {
namespace android {


namespace uirenderer {
namespace uirenderer {