| Stan Iliev | 500a0c3 | 2016-10-26 10:30:09 -0400 | [diff] [blame] | 1 | /* | 
|  | 2 | * Copyright (C) 2016 The Android Open Source Project | 
|  | 3 | * | 
|  | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); | 
|  | 5 | * you may not use this file except in compliance with the License. | 
|  | 6 | * You may obtain a copy of the License at | 
|  | 7 | * | 
|  | 8 | *      http://www.apache.org/licenses/LICENSE-2.0 | 
|  | 9 | * | 
|  | 10 | * Unless required by applicable law or agreed to in writing, software | 
|  | 11 | * distributed under the License is distributed on an "AS IS" BASIS, | 
|  | 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
|  | 13 | * See the License for the specific language governing permissions and | 
|  | 14 | * limitations under the License. | 
|  | 15 | */ | 
|  | 16 |  | 
|  | 17 | #pragma once | 
|  | 18 |  | 
|  | 19 | #include "SkiaPipeline.h" | 
| Derek Sollenberger | 0e3cba3 | 2016-11-09 11:58:36 -0500 | [diff] [blame] | 20 | #include "renderthread/VulkanManager.h" | 
| Derek Sollenberger | a19b71a | 2019-02-15 16:36:30 -0500 | [diff] [blame] | 21 | #include "renderthread/VulkanSurface.h" | 
| Stan Iliev | 500a0c3 | 2016-10-26 10:30:09 -0400 | [diff] [blame] | 22 |  | 
| Stan Iliev | 90276c8 | 2019-02-03 18:01:02 -0500 | [diff] [blame] | 23 | #include "renderstate/RenderState.h" | 
|  | 24 |  | 
| Stan Iliev | 500a0c3 | 2016-10-26 10:30:09 -0400 | [diff] [blame] | 25 | namespace android { | 
|  | 26 | namespace uirenderer { | 
|  | 27 | namespace skiapipeline { | 
|  | 28 |  | 
| Stan Iliev | 90276c8 | 2019-02-03 18:01:02 -0500 | [diff] [blame] | 29 | class SkiaVulkanPipeline : public SkiaPipeline, public IGpuContextCallback { | 
| Stan Iliev | 500a0c3 | 2016-10-26 10:30:09 -0400 | [diff] [blame] | 30 | public: | 
| Chih-Hung Hsieh | f933641 | 2018-12-20 13:48:57 -0800 | [diff] [blame] | 31 | explicit SkiaVulkanPipeline(renderthread::RenderThread& thread); | 
| Stan Iliev | 90276c8 | 2019-02-03 18:01:02 -0500 | [diff] [blame] | 32 | virtual ~SkiaVulkanPipeline(); | 
| Stan Iliev | 500a0c3 | 2016-10-26 10:30:09 -0400 | [diff] [blame] | 33 |  | 
|  | 34 | renderthread::MakeCurrentResult makeCurrent() override; | 
|  | 35 | renderthread::Frame getFrame() override; | 
| Alec Mouri | 3afb397 | 2022-05-27 22:03:11 +0000 | [diff] [blame] | 36 | renderthread::IRenderPipeline::DrawResult draw(const renderthread::Frame& frame, | 
|  | 37 | const SkRect& screenDirty, const SkRect& dirty, | 
|  | 38 | const LightGeometry& lightGeometry, | 
|  | 39 | LayerUpdateQueue* layerUpdateQueue, | 
|  | 40 | const Rect& contentDrawBounds, bool opaque, | 
|  | 41 | const LightInfo& lightInfo, | 
|  | 42 | const std::vector<sp<RenderNode> >& renderNodes, | 
|  | 43 | FrameInfoVisualizer* profiler) override; | 
| Derek Sollenberger | 25833d2 | 2019-01-14 13:55:55 -0500 | [diff] [blame] | 44 | GrSurfaceOrigin getSurfaceOrigin() override { return kTopLeft_GrSurfaceOrigin; } | 
| Stan Iliev | 500a0c3 | 2016-10-26 10:30:09 -0400 | [diff] [blame] | 45 | bool swapBuffers(const renderthread::Frame& frame, bool drew, const SkRect& screenDirty, | 
| John Reck | 1bcacfd | 2017-11-03 10:12:19 -0700 | [diff] [blame] | 46 | FrameInfo* currentFrameInfo, bool* requireSwap) override; | 
| Stan Iliev | 500a0c3 | 2016-10-26 10:30:09 -0400 | [diff] [blame] | 47 | DeferredLayerUpdater* createTextureLayer() override; | 
| John Reck | 8ddbc59 | 2020-05-07 16:11:18 -0700 | [diff] [blame] | 48 | bool setSurface(ANativeWindow* surface, renderthread::SwapBehavior swapBehavior) override; | 
| Stan Iliev | 500a0c3 | 2016-10-26 10:30:09 -0400 | [diff] [blame] | 49 | void onStop() override; | 
|  | 50 | bool isSurfaceReady() override; | 
|  | 51 | bool isContextReady() override; | 
|  | 52 |  | 
|  | 53 | static void invokeFunctor(const renderthread::RenderThread& thread, Functor* functor); | 
| Stan Iliev | 7bc3bc6 | 2017-05-24 13:28:36 -0400 | [diff] [blame] | 54 | static sk_sp<Bitmap> allocateHardwareBitmap(renderthread::RenderThread& thread, | 
| John Reck | 1bcacfd | 2017-11-03 10:12:19 -0700 | [diff] [blame] | 55 | SkBitmap& skBitmap); | 
| Stan Iliev | 500a0c3 | 2016-10-26 10:30:09 -0400 | [diff] [blame] | 56 |  | 
| Stan Iliev | 90276c8 | 2019-02-03 18:01:02 -0500 | [diff] [blame] | 57 | protected: | 
|  | 58 | void onContextDestroyed() override; | 
|  | 59 |  | 
| Stan Iliev | 500a0c3 | 2016-10-26 10:30:09 -0400 | [diff] [blame] | 60 | private: | 
| Greg Daniel | d2317a4 | 2021-04-08 11:39:02 -0400 | [diff] [blame] | 61 | renderthread::VulkanManager& vulkanManager(); | 
|  | 62 |  | 
| Derek Sollenberger | 0e3cba3 | 2016-11-09 11:58:36 -0500 | [diff] [blame] | 63 | renderthread::VulkanSurface* mVkSurface = nullptr; | 
| Derek Sollenberger | 289380f | 2022-08-30 14:24:22 -0400 | [diff] [blame] | 64 | sp<ANativeWindow> mNativeWindow; | 
| Stan Iliev | 500a0c3 | 2016-10-26 10:30:09 -0400 | [diff] [blame] | 65 | }; | 
|  | 66 |  | 
|  | 67 | } /* namespace skiapipeline */ | 
|  | 68 | } /* namespace uirenderer */ | 
|  | 69 | } /* namespace android */ |