[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