calculate wether we filter on a per-display basis

Change-Id: I79d80b432b20b3d02428da19add464ac1e2b9378
This commit is contained in:
Mathias Agopian 2012-09-19 23:14:45 -07:00
parent f33e4b6f13
commit eba8c688f6
5 changed files with 12 additions and 2 deletions

View File

@ -397,6 +397,10 @@ void DisplayDevice::updateGeometryTransform() {
// Apply the logical translation, scale to physical size, apply the
// physical translation and finally rotate to the physical orientation.
mGlobalTransform = R * TP * S * TL;
const uint8_t type = mGlobalTransform.getType();
mNeedsFiltering = (!mGlobalTransform.preserveRects() ||
(type >= Transform::SCALE));
}
}

View File

@ -101,6 +101,7 @@ public:
const Transform& getTransform() const { return mGlobalTransform; }
const Rect& getViewport() const { return mViewport; }
const Rect& getFrame() const { return mFrame; }
bool needsFiltering() const { return mNeedsFiltering; }
uint32_t getLayerStack() const { return mLayerStack; }
int32_t getDisplayType() const { return mType; }
@ -195,6 +196,7 @@ private:
Rect mViewport;
Rect mFrame;
Transform mGlobalTransform;
bool mNeedsFiltering;
};
}; // namespace android

View File

@ -344,7 +344,7 @@ void Layer::onDraw(const sp<const DisplayDevice>& hw, const Region& clip) const
if (!isProtected()) {
// TODO: we could be more subtle with isFixedSize()
const bool useFiltering = getFiltering() || needsFiltering() || isFixedSize();
const bool useFiltering = getFiltering() || needsFiltering(hw) || isFixedSize();
// Query the texture matrix given our current filtering mode.
float textureMatrix[16];

View File

@ -87,6 +87,10 @@ void LayerBase::initStates(uint32_t w, uint32_t h, uint32_t flags)
mDrawingState = mCurrentState;
}
bool LayerBase::needsFiltering(const sp<const DisplayDevice>& hw) const {
return mNeedsFiltering || hw->needsFiltering();
}
void LayerBase::commitTransaction() {
mDrawingState = mCurrentState;
}

View File

@ -197,7 +197,7 @@ public:
/**
* needsLinearFiltering - true if this surface's state requires filtering
*/
virtual bool needsFiltering() const { return mNeedsFiltering; }
virtual bool needsFiltering(const sp<const DisplayDevice>& hw) const;
/**
* isSecure - true if this surface is secure, that is if it prevents