diff options
author | Danny Lin <danny@kdrag0n.dev> | 2021-04-12 21:46:31 -0700 |
---|---|---|
committer | alk3pInjection <webmaster@raspii.tech> | 2021-09-27 21:17:05 +0800 |
commit | fe6ef85733f662394c6a1ba0abf74dfb2eb93f99 (patch) | |
tree | dac6994bfa962d8a0e59f1e90740a2114ccbe0a3 | |
parent | d361cdd9c10653230dc9d307c0e7ec226d9171c9 (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.cpp | 18 |
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); } |