diff --git a/libs/renderengine/gl/filters/BlurFilter.cpp b/libs/renderengine/gl/filters/BlurFilter.cpp
index 402b5469e3b508ba75141970fe4091440d7752ce..f6660a75cd4c53a6f77b5b5758d46c9199730953 100644
--- a/libs/renderengine/gl/filters/BlurFilter.cpp
+++ b/libs/renderengine/gl/filters/BlurFilter.cpp
@@ -31,6 +31,9 @@ namespace android {
 namespace renderengine {
 namespace gl {
 
+// This needs to be located in .rodata to get a pointer for the OpenGL API.
+static const GLenum kInvalidateAttachment = GL_COLOR_ATTACHMENT0;
+
 BlurFilter::BlurFilter(GLESRenderEngine& engine)
       : mEngine(engine),
         mCompositionFbo(engine),
@@ -122,6 +125,7 @@ status_t BlurFilter::setAsDrawTarget(const DisplaySettings& display, uint32_t ra
     }
 
     mCompositionFbo.bind();
+    glInvalidateFramebuffer(GL_FRAMEBUFFER, 1, &kInvalidateAttachment);
     glViewport(0, 0, mCompositionFbo.getBufferWidth(), mCompositionFbo.getBufferHeight());
     return NO_ERROR;
 }
@@ -152,6 +156,7 @@ status_t BlurFilter::prepare() {
     GLFramebuffer* draw = &mPingFbo;
     read->bindAsReadBuffer();
     draw->bindAsDrawBuffer();
+    glInvalidateFramebuffer(GL_FRAMEBUFFER, 1, &kInvalidateAttachment);
     glBlitFramebuffer(0, 0,
                       read->getBufferWidth(), read->getBufferHeight(),
                       0, 0,
@@ -162,6 +167,7 @@ status_t BlurFilter::prepare() {
 
     // And now we'll ping pong between our textures, to accumulate the result of various offsets.
     mBlurProgram.useProgram();
+    glInvalidateFramebuffer(GL_FRAMEBUFFER, 1, &kInvalidateAttachment);
     glViewport(0, 0, draw->getBufferWidth(), draw->getBufferHeight());
     for (auto i = 1; i < passes; i++) {
         ATRACE_NAME("BlurFilter::renderPass");