Support bilinear filtering in Skia-RE
Test: Manual. Play video on Reddit.
Bug: 173417370
Change-Id: I024f4ba126bc933d74d56ad4d5750f21faccc907
diff --git a/libs/renderengine/skia/SkiaGLRenderEngine.cpp b/libs/renderengine/skia/SkiaGLRenderEngine.cpp
index 8c5f0e6..aefedb4 100644
--- a/libs/renderengine/skia/SkiaGLRenderEngine.cpp
+++ b/libs/renderengine/skia/SkiaGLRenderEngine.cpp
@@ -550,6 +550,7 @@
screenTransform.preRotate(toDegrees(display.orientation));
screenTransform.preTranslate(-clipWidth / 2, -clipHeight / 2);
screenTransform.preTranslate(-display.clip.left, -display.clip.top);
+ // Traverse all layers.
for (const auto& layer : layers) {
const SkMatrix drawTransform = getDrawTransform(layer, screenTransform);
@@ -652,7 +653,16 @@
matrix.postConcat(texMatrix);
matrix.postScale(rotatedBufferWidth, rotatedBufferHeight);
- sk_sp<SkShader> shader = image->makeShader(matrix);
+ sk_sp<SkShader> shader;
+
+ if (layer->source.buffer.useTextureFiltering) {
+ shader = image->makeShader(SkTileMode::kClamp, SkTileMode::kClamp,
+ SkSamplingOptions(
+ {SkSamplingMode::kLinear, SkMipmapMode::kNone}),
+ &matrix);
+ } else {
+ shader = image->makeShader(matrix);
+ }
if (mUseColorManagement &&
needsToneMapping(layer->sourceDataspace, display.outputDataspace)) {