summaryrefslogtreecommitdiff
path: root/libs/renderengine/skia/AutoBackendTexture.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libs/renderengine/skia/AutoBackendTexture.cpp')
-rw-r--r--libs/renderengine/skia/AutoBackendTexture.cpp142
1 files changed, 0 insertions, 142 deletions
diff --git a/libs/renderengine/skia/AutoBackendTexture.cpp b/libs/renderengine/skia/AutoBackendTexture.cpp
deleted file mode 100644
index 5c122d4154..0000000000
--- a/libs/renderengine/skia/AutoBackendTexture.cpp
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Copyright 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "AutoBackendTexture.h"
-
-#undef LOG_TAG
-#define LOG_TAG "RenderEngine"
-#define ATRACE_TAG ATRACE_TAG_GRAPHICS
-
-#include "ColorSpaces.h"
-#include "log/log_main.h"
-#include "utils/Trace.h"
-
-namespace android {
-namespace renderengine {
-namespace skia {
-
-AutoBackendTexture::AutoBackendTexture(GrDirectContext* context, AHardwareBuffer* buffer,
- bool isOutputBuffer, CleanupManager& cleanupMgr)
- : mCleanupMgr(cleanupMgr), mIsOutputBuffer(isOutputBuffer) {
- ATRACE_CALL();
- AHardwareBuffer_Desc desc;
- AHardwareBuffer_describe(buffer, &desc);
- bool createProtectedImage = 0 != (desc.usage & AHARDWAREBUFFER_USAGE_PROTECTED_CONTENT);
- GrBackendFormat backendFormat =
- GrAHardwareBufferUtils::GetBackendFormat(context, buffer, desc.format, false);
- mBackendTexture =
- GrAHardwareBufferUtils::MakeBackendTexture(context, buffer, desc.width, desc.height,
- &mDeleteProc, &mUpdateProc, &mImageCtx,
- createProtectedImage, backendFormat,
- isOutputBuffer);
- mColorType = GrAHardwareBufferUtils::GetSkColorTypeFromBufferFormat(desc.format);
- ALOGE_IF(!mBackendTexture.isValid(),
- "Failed to create a valid texture. [%p]:[%d,%d] isProtected:%d isWriteable:%d "
- "format:%d",
- this, desc.width, desc.height, createProtectedImage, isOutputBuffer, desc.format);
-}
-
-AutoBackendTexture::~AutoBackendTexture() {
- if (mBackendTexture.isValid()) {
- mDeleteProc(mImageCtx);
- mBackendTexture = {};
- }
-}
-
-void AutoBackendTexture::unref(bool releaseLocalResources) {
- if (releaseLocalResources) {
- mSurface = nullptr;
- mImage = nullptr;
- }
-
- mUsageCount--;
- if (mUsageCount <= 0) {
- mCleanupMgr.add(this);
- }
-}
-
-// releaseSurfaceProc is invoked by SkSurface, when the texture is no longer in use.
-// "releaseContext" contains an "AutoBackendTexture*".
-void AutoBackendTexture::releaseSurfaceProc(SkSurface::ReleaseContext releaseContext) {
- AutoBackendTexture* textureRelease = reinterpret_cast<AutoBackendTexture*>(releaseContext);
- textureRelease->unref(false);
-}
-
-// releaseImageProc is invoked by SkImage, when the texture is no longer in use.
-// "releaseContext" contains an "AutoBackendTexture*".
-void AutoBackendTexture::releaseImageProc(SkImage::ReleaseContext releaseContext) {
- AutoBackendTexture* textureRelease = reinterpret_cast<AutoBackendTexture*>(releaseContext);
- textureRelease->unref(false);
-}
-
-sk_sp<SkImage> AutoBackendTexture::makeImage(ui::Dataspace dataspace, SkAlphaType alphaType,
- GrDirectContext* context) {
- ATRACE_CALL();
-
- if (mBackendTexture.isValid()) {
- mUpdateProc(mImageCtx, context);
- }
-
- auto colorType = mColorType;
- if (alphaType == kOpaque_SkAlphaType) {
- if (colorType == kRGBA_8888_SkColorType) {
- colorType = kRGB_888x_SkColorType;
- }
- }
-
- sk_sp<SkImage> image =
- SkImage::MakeFromTexture(context, mBackendTexture, kTopLeft_GrSurfaceOrigin, colorType,
- alphaType, toSkColorSpace(dataspace), releaseImageProc, this);
- if (image.get()) {
- // The following ref will be counteracted by releaseProc, when SkImage is discarded.
- ref();
- }
-
- mImage = image;
- mDataspace = dataspace;
- LOG_ALWAYS_FATAL_IF(mImage == nullptr,
- "Unable to generate SkImage. isTextureValid:%d dataspace:%d",
- mBackendTexture.isValid(), dataspace);
- return mImage;
-}
-
-sk_sp<SkSurface> AutoBackendTexture::getOrCreateSurface(ui::Dataspace dataspace,
- GrDirectContext* context) {
- ATRACE_CALL();
- LOG_ALWAYS_FATAL_IF(!mIsOutputBuffer, "You can't generate a SkSurface for a read-only texture");
- if (!mSurface.get() || mDataspace != dataspace) {
- sk_sp<SkSurface> surface =
- SkSurface::MakeFromBackendTexture(context, mBackendTexture,
- kTopLeft_GrSurfaceOrigin, 0, mColorType,
- toSkColorSpace(dataspace), nullptr,
- releaseSurfaceProc, this);
- if (surface.get()) {
- // The following ref will be counteracted by releaseProc, when SkSurface is discarded.
- ref();
- }
- mSurface = surface;
- }
-
- mDataspace = dataspace;
- LOG_ALWAYS_FATAL_IF(mSurface == nullptr,
- "Unable to generate SkSurface. isTextureValid:%d dataspace:%d",
- mBackendTexture.isValid(), dataspace);
- return mSurface;
-}
-
-} // namespace skia
-} // namespace renderengine
-} // namespace android