blob: 50dc66ac7515cd35f088f846a2c9cb79829f32e4 [file] [log] [blame]
Robert Phillips09b2bcb2021-05-12 11:56:47 -04001/*
2 * Copyright 2021 Google LLC
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#ifndef SkBaseGpuDevice_DEFINED
9#define SkBaseGpuDevice_DEFINED
10
Robert Phillipsc2132ea2021-05-17 14:32:29 -040011#include "src/gpu/GrSurfaceProxyView.h"
12
Robert Phillips09b2bcb2021-05-12 11:56:47 -040013// NOTE: when not defined, SkGpuDevice extends SkBaseDevice directly and manages its clip stack
14// using GrClipStack. When false, SkGpuDevice continues to extend SkClipStackDevice and uses
15// SkClipStack and GrClipStackClip to manage the clip stack.
16#if !defined(SK_DISABLE_NEW_GR_CLIP_STACK)
17 // For staging purposes, disable this for Android Framework
18 #if defined(SK_BUILD_FOR_ANDROID_FRAMEWORK)
19 #define SK_DISABLE_NEW_GR_CLIP_STACK
20 #endif
21#endif
22
23#if !defined(SK_DISABLE_NEW_GR_CLIP_STACK)
24 #include "src/core/SkDevice.h"
25 #define BASE_DEVICE SkBaseDevice
26#else
27 #include "src/core/SkClipStackDevice.h"
28 #define BASE_DEVICE SkClipStackDevice
29#endif
30
31class SkBaseGpuDevice : public BASE_DEVICE {
32public:
Robert Phillips54c878e2021-05-20 13:22:52 -040033 enum InitContents {
34 kClear_InitContents,
35 kUninit_InitContents
36 };
37
Robert Phillips42754922021-06-01 13:12:51 -040038 SkBaseGpuDevice(sk_sp<GrRecordingContext> rContext,
39 const SkImageInfo& ii,
40 const SkSurfaceProps& props)
41 : INHERITED(ii, props)
42 , fContext(std::move(rContext)) {
Robert Phillips09b2bcb2021-05-12 11:56:47 -040043 }
44
Robert Phillipsc2132ea2021-05-17 14:32:29 -040045 virtual GrSurfaceProxyView readSurfaceView() = 0;
46 GrRenderTargetProxy* targetProxy() {
47 return this->readSurfaceView().asRenderTargetProxy();
48 }
Robert Phillips09b2bcb2021-05-12 11:56:47 -040049
Robert Phillips42754922021-06-01 13:12:51 -040050 GrRecordingContext* recordingContext() const override { return fContext.get(); }
51
Robert Phillips0095fcb2021-05-24 14:34:01 -040052 virtual bool wait(int numSemaphores,
53 const GrBackendSemaphore* waitSemaphores,
54 bool deleteSemaphoresAfterWait) = 0;
55
Robert Phillips1e3121a2021-06-02 09:34:57 -040056 virtual bool replaceBackingProxy(SkSurface::ContentChangeMode,
57 sk_sp<GrRenderTargetProxy>,
58 GrColorType,
59 sk_sp<SkColorSpace>,
60 GrSurfaceOrigin,
61 const SkSurfaceProps&) = 0;
62 bool replaceBackingProxy(SkSurface::ContentChangeMode);
63
Robert Phillips09b2bcb2021-05-12 11:56:47 -040064protected:
Robert Phillips42754922021-06-01 13:12:51 -040065 sk_sp<GrRecordingContext> fContext;
Robert Phillips09b2bcb2021-05-12 11:56:47 -040066
67private:
68 using INHERITED = BASE_DEVICE;
69};
70
71#undef BASE_DEVICE
72
73#endif