diff options
Diffstat (limited to 'services/surfaceflinger/BufferLayer.cpp')
| -rw-r--r-- | services/surfaceflinger/BufferLayer.cpp | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/services/surfaceflinger/BufferLayer.cpp b/services/surfaceflinger/BufferLayer.cpp index 4e4d7dd371..4eafeac293 100644 --- a/services/surfaceflinger/BufferLayer.cpp +++ b/services/surfaceflinger/BufferLayer.cpp @@ -176,7 +176,7 @@ void BufferLayer::onDraw(const RenderArea& renderArea, const Region& clip, if (!blackOutLayer) { // TODO: we could be more subtle with isFixedSize() - const bool useFiltering = needsFiltering(renderArea) || isFixedSize(); + const bool useFiltering = needsFiltering() || renderArea.needsFiltering() || isFixedSize(); // Query the texture matrix given our current filtering mode. float textureMatrix[16]; @@ -597,8 +597,11 @@ bool BufferLayer::getOpacityForFormat(uint32_t format) { return true; } -bool BufferLayer::needsFiltering(const RenderArea& renderArea) const { - return mNeedsFiltering || renderArea.needsFiltering(); +bool BufferLayer::needsFiltering() const { + const auto displayFrame = getBE().compositionInfo.hwc.displayFrame; + const auto sourceCrop = getBE().compositionInfo.hwc.sourceCrop; + return mNeedsFiltering || sourceCrop.getHeight() != displayFrame.getHeight() || + sourceCrop.getWidth() != displayFrame.getWidth(); } void BufferLayer::drawWithOpenGL(const RenderArea& renderArea, bool useIdentityTransform) const { @@ -623,7 +626,6 @@ void BufferLayer::drawWithOpenGL(const RenderArea& renderArea, bool useIdentityT */ const Rect bounds{computeBounds()}; // Rounds from FloatRect - ui::Transform t = getTransform(); Rect win = bounds; const int bufferWidth = getBufferSize(s).getWidth(); const int bufferHeight = getBufferSize(s).getHeight(); |