Add a GaussianBlurFilter to SkiaRE using Skia blur
This is using Skia's native blur algorithm which is a fully-correct blur
using separate X/Y convolution passes in a pre-baked shader.
The performance is significantly worse than Kawase or dual-filtered
Kawase but it sets the high bar for accuracy and the low bar for
performance.
This can be switched with KawaseBlurFilter by updating the source in
SkiaGLRenderEngine to instantiate GaussianBlurFilter instead.
Test: atest BlurTests
Bug: 185365391
Change-Id: I29fba84e408c75bc8ef7011b6e40f45cb78eabab
diff --git a/libs/renderengine/skia/SkiaGLRenderEngine.cpp b/libs/renderengine/skia/SkiaGLRenderEngine.cpp
index e6fb94d..21d5603 100644
--- a/libs/renderengine/skia/SkiaGLRenderEngine.cpp
+++ b/libs/renderengine/skia/SkiaGLRenderEngine.cpp
@@ -53,6 +53,7 @@
#include "SkBlendMode.h"
#include "SkImageInfo.h"
#include "filters/BlurFilter.h"
+#include "filters/GaussianBlurFilter.h"
#include "filters/KawaseBlurFilter.h"
#include "filters/LinearEffect.h"
#include "log/log_main.h"
@@ -804,11 +805,11 @@
continue;
}
if (layer.backgroundBlurRadius > 0 &&
- layer.backgroundBlurRadius < BlurFilter::kMaxCrossFadeRadius) {
+ layer.backgroundBlurRadius < mBlurFilter->getMaxCrossFadeRadius()) {
requiresCompositionLayer = true;
}
for (auto region : layer.blurRegions) {
- if (region.blurRadius < BlurFilter::kMaxCrossFadeRadius) {
+ if (region.blurRadius < mBlurFilter->getMaxCrossFadeRadius()) {
requiresCompositionLayer = true;
}
}