SurfaceFlinger: tell SurfaceTex about filtering

This change makes SurfaceFlinger set the filtering-enable on each layer's
SurfaceTexture before querying the texture matrix to use for GLES composition.

Change-Id: I40c3defd73ebf96e3cabb3bfdb1fc97f2036753a
diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp
index e15e733..c73d56e 100644
--- a/services/surfaceflinger/Layer.cpp
+++ b/services/surfaceflinger/Layer.cpp
@@ -317,16 +317,24 @@
     }
 
     if (!isProtected()) {
+        // TODO: we could be more subtle with isFixedSize()
+        const bool useFiltering = getFiltering() || needsFiltering() || isFixedSize();
+
+        // Query the texture matrix given our current filtering mode.
+        float textureMatrix[16];
+        mSurfaceTexture->setFilteringEnabled(useFiltering);
+        mSurfaceTexture->getTransformMatrix(textureMatrix);
+
+        // Set things up for texturing.
         glBindTexture(GL_TEXTURE_EXTERNAL_OES, mTextureName);
         GLenum filter = GL_NEAREST;
-        if (getFiltering() || needsFiltering() || isFixedSize() || isCropped()) {
-            // TODO: we could be more subtle with isFixedSize()
+        if (useFiltering) {
             filter = GL_LINEAR;
         }
         glTexParameterx(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_MAG_FILTER, filter);
         glTexParameterx(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_MIN_FILTER, filter);
         glMatrixMode(GL_TEXTURE);
-        glLoadMatrixf(mTextureMatrix);
+        glLoadMatrixf(textureMatrix);
         glMatrixMode(GL_MODELVIEW);
         glDisable(GL_TEXTURE_2D);
         glEnable(GL_TEXTURE_EXTERNAL_OES);
@@ -494,13 +502,6 @@
             mFlinger->invalidateHwcGeometry();
         }
 
-        GLfloat textureMatrix[16];
-        mSurfaceTexture->getTransformMatrix(textureMatrix);
-        if (memcmp(textureMatrix, mTextureMatrix, sizeof(textureMatrix))) {
-            memcpy(mTextureMatrix, textureMatrix, sizeof(textureMatrix));
-            mFlinger->invalidateHwcGeometry();
-        }
-
         uint32_t bufWidth  = mActiveBuffer->getWidth();
         uint32_t bufHeight = mActiveBuffer->getHeight();
         if (oldActiveBuffer != NULL) {