summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDanny Lin <danny@kdrag0n.dev>2021-04-12 21:46:31 -0700
committeralk3pInjection <webmaster@raspii.tech>2021-09-27 21:17:05 +0800
commitfe6ef85733f662394c6a1ba0abf74dfb2eb93f99 (patch)
treedac6994bfa962d8a0e59f1e90740a2114ccbe0a3
parentd361cdd9c10653230dc9d307c0e7ec226d9171c9 (diff)
[ProtonAOSP] blur: Only set constant shader uniforms once
The values of the 2D texture sampler uniforms never change, so set them when initializing the BlurFilter instance instead of updating them every frame. This reduces clutter in the rendering path and results in a negligible performance gain from reducing API overhead. Change-Id: I335ea0dbdd2d4409ea71b58b7c7f8b87b04a18d7
-rw-r--r--libs/renderengine/gl/filters/BlurFilter.cpp18
1 files changed, 12 insertions, 6 deletions
diff --git a/libs/renderengine/gl/filters/BlurFilter.cpp b/libs/renderengine/gl/filters/BlurFilter.cpp
index 6a3157410b..a48ce26741 100644
--- a/libs/renderengine/gl/filters/BlurFilter.cpp
+++ b/libs/renderengine/gl/filters/BlurFilter.cpp
@@ -65,6 +65,18 @@ BlurFilter::BlurFilter(GLESRenderEngine& engine)
mBTextureLoc = mBlurProgram.getUniformLocation("uTexture");
mBOffsetLoc = mBlurProgram.getUniformLocation("uOffset");
+ // Initialize constant shader uniforms
+ mMixProgram.useProgram();
+ glUniform1i(mMBlurTextureLoc, 0);
+ glUniform1i(mMCompositionTextureLoc, 1);
+ mDitherMixProgram.useProgram();
+ glUniform1i(mDBlurTextureLoc, 0);
+ glUniform1i(mDCompositionTextureLoc, 1);
+ glUniform1i(mDDitherTextureLoc, 2);
+ mBlurProgram.useProgram();
+ glUniform1i(mBTextureLoc, 0);
+ glUseProgram(0);
+
static constexpr auto size = 2.0f;
static constexpr auto translation = 1.0f;
const GLfloat vboData[] = {
@@ -167,7 +179,6 @@ status_t BlurFilter::prepare() {
// Let's start by downsampling and blurring the composited frame simultaneously.
mBlurProgram.useProgram();
glActiveTexture(GL_TEXTURE0);
- glUniform1i(mBTextureLoc, 0);
glBindTexture(GL_TEXTURE_2D, mCompositionFbo.getTextureName());
glUniform2f(mBOffsetLoc, stepX, stepY);
glViewport(0, 0, mPingFbo.getBufferWidth(), mPingFbo.getBufferHeight());
@@ -222,15 +233,10 @@ status_t BlurFilter::render(size_t layers, int currentLayer) {
if (currentLayer == layers - 1) {
mDitherMixProgram.useProgram();
glUniform1f(mDBlurOpacityLoc, opacity);
- glUniform1i(mDBlurTextureLoc, 0);
- glUniform1i(mDCompositionTextureLoc, 1);
- glUniform1i(mDDitherTextureLoc, 2);
drawMesh(mDUvLoc, mDPosLoc);
} else {
mMixProgram.useProgram();
glUniform1f(mMBlurOpacityLoc, opacity);
- glUniform1i(mMBlurTextureLoc, 0);
- glUniform1i(mMCompositionTextureLoc, 1);
drawMesh(mMUvLoc, mMPosLoc);
}