SF: black out layers that doesn't have gpu accessible buffer
If a layer provided a non gpu readable buffer, and that layer needs
to be composited using the gpu, backout the layer instead of asserting
in RenderEngine.
Fixes: 183950013
Test: launch the apk attached to the bug and force client composition
Change-Id: I068d72acf58866150284b3770b7c33da5a3bd3ac
diff --git a/services/surfaceflinger/BufferLayer.cpp b/services/surfaceflinger/BufferLayer.cpp
index 4ace4c2..8f1aef0 100644
--- a/services/surfaceflinger/BufferLayer.cpp
+++ b/services/surfaceflinger/BufferLayer.cpp
@@ -185,10 +185,14 @@
return std::nullopt;
}
}
- bool blackOutLayer = (isProtected() && !targetSettings.supportsProtectedContent) ||
+ const bool blackOutLayer = (isProtected() && !targetSettings.supportsProtectedContent) ||
(isSecure() && !targetSettings.isSecure);
+ const bool bufferCanBeUsedAsHwTexture =
+ mBufferInfo.mBuffer->getUsage() & GraphicBuffer::USAGE_HW_TEXTURE;
compositionengine::LayerFE::LayerSettings& layer = *result;
- if (blackOutLayer) {
+ if (blackOutLayer || !bufferCanBeUsedAsHwTexture) {
+ ALOGE_IF(!bufferCanBeUsedAsHwTexture, "%s is blacked out as buffer is not gpu readable",
+ mName.c_str());
prepareClearClientComposition(layer, true /* blackout */);
return layer;
}