Loading services/surfaceflinger/BufferLayer.cpp +6 −2 Original line number Diff line number Diff line Loading @@ -204,8 +204,8 @@ std::optional<compositionengine::LayerFE::LayerSettings> BufferLayer::prepareCli layer.frameNumber = mCurrentFrameNumber; layer.bufferId = mBufferInfo.mBuffer ? mBufferInfo.mBuffer->getId() : 0; // TODO: we could be more subtle with isFixedSize() const bool useFiltering = targetSettings.needsFiltering || mNeedsFiltering || isFixedSize(); const bool useFiltering = targetSettings.needsFiltering || mNeedsFiltering || bufferNeedsFiltering(); // Query the texture matrix given our current filtering mode. float textureMatrix[16]; Loading Loading @@ -822,6 +822,10 @@ void BufferLayer::setTransformHint(ui::Transform::RotationFlags displayTransform } } bool BufferLayer::bufferNeedsFiltering() const { return isFixedSize(); } } // namespace android #if defined(__gl_h_) Loading services/surfaceflinger/BufferLayer.h +4 −0 Original line number Diff line number Diff line Loading @@ -115,6 +115,10 @@ public: ui::Transform::RotationFlags getTransformHint() const override { return mTransformHint; } // Returns true if the transformed buffer size does not match the layer size and we need // to apply filtering. virtual bool bufferNeedsFiltering() const; protected: struct BufferInfo { nsecs_t mDesiredPresentTime; Loading services/surfaceflinger/BufferStateLayer.cpp +25 −0 Original line number Diff line number Diff line Loading @@ -744,6 +744,31 @@ Layer::RoundedCornerState BufferStateLayer::getRoundedCornerState() const { static_cast<float>(s.active.transform.ty() + s.active.h)), radius); } bool BufferStateLayer::bufferNeedsFiltering() const { const State& s(getDrawingState()); if (!s.buffer) { return false; } uint32_t bufferWidth = s.buffer->width; uint32_t bufferHeight = s.buffer->height; // Undo any transformations on the buffer and return the result. if (s.transform & ui::Transform::ROT_90) { std::swap(bufferWidth, bufferHeight); } if (s.transformToDisplayInverse) { uint32_t invTransform = DisplayDevice::getPrimaryDisplayRotationFlags(); if (invTransform & ui::Transform::ROT_90) { std::swap(bufferWidth, bufferHeight); } } const Rect layerSize{getBounds()}; return layerSize.width() != bufferWidth || layerSize.height() != bufferHeight; } } // namespace android // TODO(b/129481165): remove the #pragma below and fix conversion issues Loading services/surfaceflinger/BufferStateLayer.h +2 −0 Original line number Diff line number Diff line Loading @@ -143,6 +143,8 @@ private: bool willPresentCurrentTransaction() const; bool bufferNeedsFiltering() const override; static const std::array<float, 16> IDENTITY_MATRIX; std::unique_ptr<renderengine::Image> mTextureImage; Loading Loading
services/surfaceflinger/BufferLayer.cpp +6 −2 Original line number Diff line number Diff line Loading @@ -204,8 +204,8 @@ std::optional<compositionengine::LayerFE::LayerSettings> BufferLayer::prepareCli layer.frameNumber = mCurrentFrameNumber; layer.bufferId = mBufferInfo.mBuffer ? mBufferInfo.mBuffer->getId() : 0; // TODO: we could be more subtle with isFixedSize() const bool useFiltering = targetSettings.needsFiltering || mNeedsFiltering || isFixedSize(); const bool useFiltering = targetSettings.needsFiltering || mNeedsFiltering || bufferNeedsFiltering(); // Query the texture matrix given our current filtering mode. float textureMatrix[16]; Loading Loading @@ -822,6 +822,10 @@ void BufferLayer::setTransformHint(ui::Transform::RotationFlags displayTransform } } bool BufferLayer::bufferNeedsFiltering() const { return isFixedSize(); } } // namespace android #if defined(__gl_h_) Loading
services/surfaceflinger/BufferLayer.h +4 −0 Original line number Diff line number Diff line Loading @@ -115,6 +115,10 @@ public: ui::Transform::RotationFlags getTransformHint() const override { return mTransformHint; } // Returns true if the transformed buffer size does not match the layer size and we need // to apply filtering. virtual bool bufferNeedsFiltering() const; protected: struct BufferInfo { nsecs_t mDesiredPresentTime; Loading
services/surfaceflinger/BufferStateLayer.cpp +25 −0 Original line number Diff line number Diff line Loading @@ -744,6 +744,31 @@ Layer::RoundedCornerState BufferStateLayer::getRoundedCornerState() const { static_cast<float>(s.active.transform.ty() + s.active.h)), radius); } bool BufferStateLayer::bufferNeedsFiltering() const { const State& s(getDrawingState()); if (!s.buffer) { return false; } uint32_t bufferWidth = s.buffer->width; uint32_t bufferHeight = s.buffer->height; // Undo any transformations on the buffer and return the result. if (s.transform & ui::Transform::ROT_90) { std::swap(bufferWidth, bufferHeight); } if (s.transformToDisplayInverse) { uint32_t invTransform = DisplayDevice::getPrimaryDisplayRotationFlags(); if (invTransform & ui::Transform::ROT_90) { std::swap(bufferWidth, bufferHeight); } } const Rect layerSize{getBounds()}; return layerSize.width() != bufferWidth || layerSize.height() != bufferHeight; } } // namespace android // TODO(b/129481165): remove the #pragma below and fix conversion issues Loading
services/surfaceflinger/BufferStateLayer.h +2 −0 Original line number Diff line number Diff line Loading @@ -143,6 +143,8 @@ private: bool willPresentCurrentTransaction() const; bool bufferNeedsFiltering() const override; static const std::array<float, 16> IDENTITY_MATRIX; std::unique_ptr<renderengine::Image> mTextureImage; Loading