[Graphite] Make SkCapabilities be a member of graphite::Caps instead of base class.

Bug: b/239822490
Change-Id: Ib28a7ad47493757bb6f4ebaddc780e5052d6cb3b
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/567440
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
Auto-Submit: Greg Daniel <egdaniel@google.com>
diff --git a/include/core/SkCapabilities.h b/include/core/SkCapabilities.h
index da15f58..ef15c16 100644
--- a/include/core/SkCapabilities.h
+++ b/include/core/SkCapabilities.h
@@ -15,6 +15,10 @@
 namespace SkSL { struct ShaderCaps; }
 #endif
 
+#if defined(SK_GRAPHITE_ENABLED)
+namespace skgpu::graphite { class Caps; }
+#endif
+
 class SK_API SkCapabilities : public SkRefCnt {
 public:
     static sk_sp<const SkCapabilities> RasterBackend();
@@ -24,6 +28,10 @@
 #endif
 
 protected:
+#if defined(SK_GRAPHITE_ENABLED)
+    friend class skgpu::graphite::Caps; // for ctor
+#endif
+
     SkCapabilities() = default;
 
 #ifdef SK_ENABLE_SKSL
diff --git a/src/gpu/graphite/Caps.cpp b/src/gpu/graphite/Caps.cpp
index caf8cdc..bd2c0cb 100644
--- a/src/gpu/graphite/Caps.cpp
+++ b/src/gpu/graphite/Caps.cpp
@@ -7,6 +7,7 @@
 
 #include "src/gpu/graphite/Caps.h"
 
+#include "include/core/SkCapabilities.h"
 #include "include/gpu/ShaderErrorHandler.h"
 #include "include/gpu/graphite/ContextOptions.h"
 #include "include/gpu/graphite/TextureInfo.h"
@@ -14,11 +15,14 @@
 
 namespace skgpu::graphite {
 
-Caps::Caps() : fShaderCaps(std::make_unique<SkSL::ShaderCaps>()) {}
+Caps::Caps()
+        : fShaderCaps(std::make_unique<SkSL::ShaderCaps>())
+        , fCapabilities(new SkCapabilities()) {}
+
 Caps::~Caps() {}
 
 void Caps::finishInitialization(const ContextOptions& options) {
-    this->initSkCaps(fShaderCaps.get());
+    fCapabilities->initSkCaps(fShaderCaps.get());
 
     if (options.fShaderErrorHandler) {
         fShaderErrorHandler = options.fShaderErrorHandler;
@@ -36,6 +40,8 @@
     fSupportBilerpFromGlyphAtlas = options.fSupportBilerpFromGlyphAtlas;
 }
 
+sk_sp<SkCapabilities> Caps::capabilities() const { return fCapabilities; }
+
 bool Caps::isTexturable(const TextureInfo& info) const {
     if (info.numSamples() > 1) {
         return false;
diff --git a/src/gpu/graphite/Caps.h b/src/gpu/graphite/Caps.h
index 3e67deb..8121b18 100644
--- a/src/gpu/graphite/Caps.h
+++ b/src/gpu/graphite/Caps.h
@@ -8,7 +8,6 @@
 #ifndef skgpu_graphite_Caps_DEFINED
 #define skgpu_graphite_Caps_DEFINED
 
-#include "include/core/SkCapabilities.h"
 #include "include/core/SkImageInfo.h"
 #include "include/core/SkRefCnt.h"
 #include "src/core/SkEnumBitMask.h"
@@ -16,6 +15,8 @@
 #include "src/gpu/Swizzle.h"
 #include "src/gpu/graphite/ResourceTypes.h"
 
+class SkCapabilities;
+
 namespace SkSL { struct ShaderCaps; }
 
 namespace skgpu { class ShaderErrorHandler; }
@@ -29,12 +30,14 @@
 struct RenderPassDesc;
 class TextureInfo;
 
-class Caps : public SkCapabilities {
+class Caps : public SkRefCnt {
 public:
     ~Caps() override;
 
     const SkSL::ShaderCaps* shaderCaps() const { return fShaderCaps.get(); }
 
+    sk_sp<SkCapabilities> capabilities() const;
+
     virtual TextureInfo getDefaultSampledTextureInfo(SkColorType,
                                                      uint32_t levelCount,
                                                      Protected,
@@ -147,6 +150,8 @@
 private:
     virtual bool onIsTexturable(const TextureInfo&) const = 0;
     virtual const ColorTypeInfo* getColorTypeInfo(SkColorType, const TextureInfo&) const = 0;
+
+    sk_sp<SkCapabilities> fCapabilities;
 };
 
 } // namespace skgpu::graphite
diff --git a/src/gpu/graphite/Surface_Graphite.cpp b/src/gpu/graphite/Surface_Graphite.cpp
index 57ad45b..c48ded8 100644
--- a/src/gpu/graphite/Surface_Graphite.cpp
+++ b/src/gpu/graphite/Surface_Graphite.cpp
@@ -60,7 +60,7 @@
 }
 
 sk_sp<const SkCapabilities> Surface::onCapabilities() {
-    return fDevice->recorder()->priv().refCaps();
+    return fDevice->recorder()->priv().caps()->capabilities();
 }
 
 #if GRAPHITE_TEST_UTILS && SK_SUPPORT_GPU