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 <michaelludwig@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
diff --git a/src/gpu/SkBaseGpuDevice.h b/src/gpu/SkBaseGpuDevice.h
new file mode 100644
index 0000000..ca55bda
--- /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 9b2fd1c..d48d8b1 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 @@
                                                                         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 6dc03e4..de1561d 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 @@
 
     sk_sp<GrRecordingContext> fContext;
 
-    using INHERITED = SkBaseDevice;
+    using INHERITED = SkBaseGpuDevice;
 };
 
 #endif // SK_NGA