diff options
author | Chris Blume <cblume@google.com> | 2018-11-06 11:47:03 -0800 |
---|---|---|
committer | Chris Blume <cblume@google.com> | 2018-12-05 16:26:59 -0800 |
commit | 414233938102e90b2e1ec05d823e3b25a3fa3219 (patch) | |
tree | f8317116d64260271afd87f9f584ddeb6c976109 /libs/hwui/pipeline/skia/VkFunctorDrawable.cpp | |
parent | fdb30ae286ea2dd7435e12d64c09009c39e149ac (diff) |
Add non-interop Vulkan functor
An interop Vulkan functor already exists. It will call the OpenGL
functor and use AHardwareBuffer to translate the OpenGL textures into
something which can be used in Vulkan.
This CL adds the frameworks for a non-interop Vulkan functor. This
functor is not yet complete (and as a result cannot yet be tested). This
is just setting the stage for future work.
Test: This is dead code and cannot yet be tested.
BUG=115613038
Change-Id: I2b87c86cb511abb961c31c17c2fbbc085b07ca4a
Diffstat (limited to 'libs/hwui/pipeline/skia/VkFunctorDrawable.cpp')
-rw-r--r-- | libs/hwui/pipeline/skia/VkFunctorDrawable.cpp | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/libs/hwui/pipeline/skia/VkFunctorDrawable.cpp b/libs/hwui/pipeline/skia/VkFunctorDrawable.cpp new file mode 100644 index 000000000000..71ad5e17301a --- /dev/null +++ b/libs/hwui/pipeline/skia/VkFunctorDrawable.cpp @@ -0,0 +1,84 @@ +/* + * 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. + */ + +#include "VkFunctorDrawable.h" +#include <private/hwui/DrawVkInfo.h> + +#include "thread/ThreadBase.h" +#include "utils/TimeUtils.h" +#include <GrBackendDrawableInfo.h> +#include <thread> +#include <utils/Color.h> +#include <utils/Trace.h> +#include <utils/TraceUtils.h> +#include <SkImage.h> +#include <vk/GrVkTypes.h> + +namespace android { +namespace uirenderer { +namespace skiapipeline { + +VkFunctorDrawHandler::VkFunctorDrawHandler(Functor *functor) + : INHERITED() + , mFunctor(functor) {} + +VkFunctorDrawHandler::~VkFunctorDrawHandler() { + // TODO(cblume) Fill in the DrawVkInfo parameters. + (*mFunctor)(DrawVkInfo::kModePostComposite, nullptr); +} + +void VkFunctorDrawHandler::draw(const GrBackendDrawableInfo& info) { + ATRACE_CALL(); + + GrVkDrawableInfo vulkan_info; + if (!info.getVkDrawableInfo(&vulkan_info)) { + return; + } + + DrawVkInfo draw_vk_info; + // TODO(cblume) Fill in the rest of the parameters and test the actual call. + draw_vk_info.isLayer = true; + + (*mFunctor)(DrawVkInfo::kModeComposite, &draw_vk_info); +} + +VkFunctorDrawable::VkFunctorDrawable(Functor* functor, GlFunctorLifecycleListener* listener, + SkCanvas* canvas) + : FunctorDrawable(functor, listener, canvas) {} + +VkFunctorDrawable::~VkFunctorDrawable() = default; + +void VkFunctorDrawable::syncFunctor() const { + (*mFunctor)(DrawVkInfo::kModeSync, nullptr); +} + +void VkFunctorDrawable::onDraw(SkCanvas* /*canvas*/) { + LOG_ALWAYS_FATAL("VkFunctorDrawable::onDraw() should never be called."); + // Instead of calling onDraw(), the call should come from onSnapGpuDrawHandler. +} + +std::unique_ptr<FunctorDrawable::GpuDrawHandler> VkFunctorDrawable::onSnapGpuDrawHandler( + GrBackendApi backendApi, const SkMatrix& matrix) { + if (backendApi != GrBackendApi::kVulkan) { + return nullptr; + } + std::unique_ptr<VkFunctorDrawHandler> draw(new VkFunctorDrawHandler(mFunctor)); + return std::move(draw); +} + +} // namespace skiapipeline +} // namespace uirenderer +} // namespace android |