[graphite] Track aggregate protected status on YUVA images
Change-Id: Ie10ccc2b5d7004d57e67199eeb31ccc4b8792521
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/836916
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
Reviewed-by: Jim Van Verth <jvanverth@google.com>
diff --git a/src/gpu/graphite/Image_YUVA_Graphite.h b/src/gpu/graphite/Image_YUVA_Graphite.h
index 4d78734..46ad173 100644
--- a/src/gpu/graphite/Image_YUVA_Graphite.h
+++ b/src/gpu/graphite/Image_YUVA_Graphite.h
@@ -42,10 +42,7 @@
bool onHasMipmaps() const override { return fYUVAProxies.mipmapped() == Mipmapped::kYes; }
- bool onIsProtected() const override {
- // TODO: add protected content support
- return false;
- }
+ bool onIsProtected() const override { return fYUVAProxies.isProtected() == Protected::kYes; }
sk_sp<SkImage> onReinterpretColorSpace(sk_sp<SkColorSpace>) const override;
diff --git a/src/gpu/graphite/YUVATextureProxies.cpp b/src/gpu/graphite/YUVATextureProxies.cpp
index e960eb7..2a83369 100644
--- a/src/gpu/graphite/YUVATextureProxies.cpp
+++ b/src/gpu/graphite/YUVATextureProxies.cpp
@@ -41,10 +41,14 @@
return;
}
fMipmapped = Mipmapped::kYes;
+ fProtected = Protected::kNo;
for (int i = 0; i < n; ++i) {
if (proxies[i]->mipmapped() == Mipmapped::kNo) {
fMipmapped = Mipmapped::kNo;
}
+ if (proxies[i]->isProtected()) {
+ fProtected = Protected::kYes;
+ }
fProxies[i] = std::move(proxies[i]);
}
SkASSERT(this->isValid());
@@ -62,6 +66,7 @@
return;
}
fMipmapped = Mipmapped::kYes;
+ fProtected = Protected::kNo;
for (int i = 0; i < n; ++i) {
if (!views[i]) {
*this = {};
@@ -72,6 +77,9 @@
if (views[i].proxy()->mipmapped() == Mipmapped::kNo) {
fMipmapped = Mipmapped::kNo;
}
+ if (views[i].proxy()->isProtected()) {
+ fProtected = Protected::kYes;
+ }
}
// Initial locations refer to the CPU pixmap channels.
fYUVALocations = yuvaInfo.toYUVALocations(pixmapChannelMasks);
diff --git a/src/gpu/graphite/YUVATextureProxies.h b/src/gpu/graphite/YUVATextureProxies.h
index 4ae3b7d..a6ef2b6 100644
--- a/src/gpu/graphite/YUVATextureProxies.h
+++ b/src/gpu/graphite/YUVATextureProxies.h
@@ -45,6 +45,9 @@
// Overall set of YUVA proxies is mip mapped if each plane is mip mapped.
Mipmapped mipmapped() const { return fMipmapped; }
+ // Overall set of YUVA proxies is protected if *any* plane is protected.
+ Protected isProtected() const { return fProtected; }
+
TextureProxy* proxy(int i) const { return fProxies[i].get(); }
SkSpan<const sk_sp<TextureProxy>> proxies() const {
@@ -65,6 +68,7 @@
std::array<sk_sp<TextureProxy>, SkYUVAInfo::kMaxPlanes> fProxies;
SkYUVAInfo fYUVAInfo;
Mipmapped fMipmapped = Mipmapped::kNo;
+ Protected fProtected = Protected::kNo;
SkYUVAInfo::YUVALocations fYUVALocations = {};
};