From 09b2bcbb818c89d1547896c19f6e91e0210c9d99 Mon Sep 17 00:00:00 2001 From: Robert Phillips Date: Wed, 12 May 2021 11:56:47 -0400 Subject: [PATCH] Add SkBaseGpuDevice ... between SkBaseDevice/SkClipStackDevice and SkGpuDevice/SkGpuDevice_nga The idea is that SkCanvas will deal with SkBaseGpuDevices rather than SkGpuDevice*s Change-Id: I1bffeccab44d2a2b73413f50d7c905fa2df8eedc Reviewed-on: https://skia-review.googlesource.com/c/skia/+/407459 Reviewed-by: Michael Ludwig Commit-Queue: Robert Phillips --- gn/gpu.gni | 1 + src/gpu/SkBaseGpuDevice.h | 45 +++++++++++++++++++++++++++++++++++++++ src/gpu/SkGpuDevice.h | 23 ++++---------------- src/gpu/SkGpuDevice_nga.h | 7 +++--- 4 files changed, 54 insertions(+), 22 deletions(-) create mode 100644 src/gpu/SkBaseGpuDevice.h diff --git a/gn/gpu.gni b/gn/gpu.gni index b2fbc8ec2a..7c18823190 100644 --- a/gn/gpu.gni +++ b/gn/gpu.gni @@ -541,6 +541,7 @@ skia_gpu_sources = [ "$_src/gpu/mock/GrMockTypes.cpp", # Sk files + "$_src/gpu/SkBaseGpuDevice.h", "$_src/gpu/SkGpuDevice.cpp", "$_src/gpu/SkGpuDevice.h", "$_src/gpu/SkGpuDevice_drawTexture.cpp", diff --git a/src/gpu/SkBaseGpuDevice.h b/src/gpu/SkBaseGpuDevice.h new file mode 100644 index 0000000000..ca55bda0d9 --- /dev/null +++ b/src/gpu/SkBaseGpuDevice.h @@ -0,0 +1,45 @@ +/* + * Copyright 2021 Google LLC + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef SkBaseGpuDevice_DEFINED +#define SkBaseGpuDevice_DEFINED + +// NOTE: when not defined, SkGpuDevice extends SkBaseDevice directly and manages its clip stack +// using GrClipStack. When false, SkGpuDevice continues to extend SkClipStackDevice and uses +// SkClipStack and GrClipStackClip to manage the clip stack. +#if !defined(SK_DISABLE_NEW_GR_CLIP_STACK) + // For staging purposes, disable this for Android Framework + #if defined(SK_BUILD_FOR_ANDROID_FRAMEWORK) + #define SK_DISABLE_NEW_GR_CLIP_STACK + #endif +#endif + +#if !defined(SK_DISABLE_NEW_GR_CLIP_STACK) + #include "src/core/SkDevice.h" + #define BASE_DEVICE SkBaseDevice +#else + #include "src/core/SkClipStackDevice.h" + #define BASE_DEVICE SkClipStackDevice +#endif + +class SkBaseGpuDevice : public BASE_DEVICE { +public: + SkBaseGpuDevice(const SkImageInfo& ii, const SkSurfaceProps& props) + : INHERITED(ii, props) { + } + + // TODO: SkGpuDevice/SkGpuDevice_nga shared stuff goes here + +protected: + +private: + using INHERITED = BASE_DEVICE; +}; + +#undef BASE_DEVICE + +#endif diff --git a/src/gpu/SkGpuDevice.h b/src/gpu/SkGpuDevice.h index 9b2fd1ca1c..d48d8b11fd 100644 --- a/src/gpu/SkGpuDevice.h +++ b/src/gpu/SkGpuDevice.h @@ -14,39 +14,25 @@ #include "include/core/SkSurface.h" #include "include/gpu/GrTypes.h" #include "src/gpu/GrSurfaceDrawContext.h" +#include "src/gpu/SkBaseGpuDevice.h" #include "src/gpu/SkGr.h" class SkSpecialImage; class SkSurface; class SkVertices; -// NOTE: when not defined, SkGpuDevice extends SkBaseDevice directly and manages its clip stack -// using GrClipStack. When false, SkGpuDevice continues to extend SkClipStackDevice and uses -// SkClipStack and GrClipStackClip to manage the clip stack. #if !defined(SK_DISABLE_NEW_GR_CLIP_STACK) - // For staging purposes, disable this for Android Framework - #if defined(SK_BUILD_FOR_ANDROID_FRAMEWORK) - #define SK_DISABLE_NEW_GR_CLIP_STACK - #endif -#endif - -#if !defined(SK_DISABLE_NEW_GR_CLIP_STACK) - #include "src/core/SkDevice.h" #include "src/gpu/GrClipStack.h" - #define BASE_DEVICE SkBaseDevice #define GR_CLIP_STACK GrClipStack #else - #include "src/core/SkClipStackDevice.h" #include "src/gpu/GrClipStackClip.h" - #define BASE_DEVICE SkClipStackDevice #define GR_CLIP_STACK GrClipStackClip #endif /** - * Subclass of SkBaseDevice, which directs all drawing to the GrGpu owned by the - * canvas. + * Subclass of SkBaseGpuDevice, which directs all drawing to the GrGpu owned by the canvas. */ -class SkGpuDevice : public BASE_DEVICE { +class SkGpuDevice : public SkBaseGpuDevice { public: enum InitContents { kClear_InitContents, @@ -221,10 +207,9 @@ private: GrMipmapped); friend class SkSurface_Gpu; // for access to surfaceProps - using INHERITED = BASE_DEVICE; + using INHERITED = SkBaseGpuDevice; }; -#undef BASE_DEVICE #undef GR_CLIP_STACK #endif diff --git a/src/gpu/SkGpuDevice_nga.h b/src/gpu/SkGpuDevice_nga.h index 6dc03e45d5..de1561d48a 100644 --- a/src/gpu/SkGpuDevice_nga.h +++ b/src/gpu/SkGpuDevice_nga.h @@ -12,11 +12,12 @@ #ifdef SK_NGA -#include "src/core/SkDevice.h" +#include "src/gpu/SkBaseGpuDevice.h" /** + * Subclass of SkBaseGpuDevice, which directs all drawing to the GrGpu owned by the canvas. */ -class SkGpuDevice_nga : public SkBaseDevice { +class SkGpuDevice_nga : public SkBaseGpuDevice { public: ~SkGpuDevice_nga() override; @@ -94,7 +95,7 @@ private: sk_sp fContext; - using INHERITED = SkBaseDevice; + using INHERITED = SkBaseGpuDevice; }; #endif // SK_NGA