From a31973fe3a672bb3c17cd3d541134d8fb19d021b Mon Sep 17 00:00:00 2001 From: Stan Iliev Date: Fri, 12 Jan 2018 11:50:29 -0500 Subject: [PATCH] Create an empty stub for Vulkan readback Create a stub for Vulkan readback. This avoids crashing, because OpenGL readback does not work for Vulkan. Test: Ran calc and gmail apps with skiavk pipeline. Change-Id: I11cddde0a1efae1aa549e7a47d01051ec975f470 --- libs/hwui/pipeline/skia/SkiaVulkanReadback.h | 44 ++++++++++++++++++++++++++++ libs/hwui/renderthread/RenderThread.cpp | 8 ++--- 2 files changed, 48 insertions(+), 4 deletions(-) create mode 100644 libs/hwui/pipeline/skia/SkiaVulkanReadback.h diff --git a/libs/hwui/pipeline/skia/SkiaVulkanReadback.h b/libs/hwui/pipeline/skia/SkiaVulkanReadback.h new file mode 100644 index 000000000000..65b89d617f7b --- /dev/null +++ b/libs/hwui/pipeline/skia/SkiaVulkanReadback.h @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2018 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. + */ + +#pragma once + +#include "Readback.h" + +namespace android { +namespace uirenderer { +namespace skiapipeline { + +class SkiaVulkanReadback : public Readback { +public: + SkiaVulkanReadback(renderthread::RenderThread& thread) : Readback(thread) {} + + virtual CopyResult copySurfaceInto(Surface& surface, const Rect& srcRect, + SkBitmap* bitmap) override { + //TODO: implement Vulkan readback. + return CopyResult::UnknownError; + } + + virtual CopyResult copyGraphicBufferInto(GraphicBuffer* graphicBuffer, + SkBitmap* bitmap) override { + //TODO: implement Vulkan readback. + return CopyResult::UnknownError; + } +}; + +} /* namespace skiapipeline */ +} /* namespace uirenderer */ +} /* namespace android */ diff --git a/libs/hwui/renderthread/RenderThread.cpp b/libs/hwui/renderthread/RenderThread.cpp index 79dc09ffbf1d..8e0546b529af 100644 --- a/libs/hwui/renderthread/RenderThread.cpp +++ b/libs/hwui/renderthread/RenderThread.cpp @@ -24,6 +24,7 @@ #include "hwui/Bitmap.h" #include "pipeline/skia/SkiaOpenGLPipeline.h" #include "pipeline/skia/SkiaOpenGLReadback.h" +#include "pipeline/skia/SkiaVulkanReadback.h" #include "pipeline/skia/SkiaVulkanPipeline.h" #include "renderstate/RenderState.h" #include "renderthread/OpenGLPipeline.h" @@ -158,12 +159,11 @@ Readback& RenderThread::readback() { mReadback = new OpenGLReadbackImpl(*this); break; case RenderPipelineType::SkiaGL: - case RenderPipelineType::SkiaVulkan: - // It works to use the OpenGL pipeline for Vulkan but this is not - // ideal as it causes us to create an OpenGL context in addition - // to the Vulkan one. mReadback = new skiapipeline::SkiaOpenGLReadback(*this); break; + case RenderPipelineType::SkiaVulkan: + mReadback = new skiapipeline::SkiaVulkanReadback(*this); + break; default: LOG_ALWAYS_FATAL("canvas context type %d not supported", (int32_t)renderType); break; -- 2.11.0