Don't hardcode ContentHostTexture in PaintedLayerMLGPU. (bug 1420674 part 1, r=rhunt)

This commit is contained in:
David Anderson 2017-11-28 18:34:58 -08:00
parent 6c3abcde6a
commit af51bf9ed7
5 changed files with 24 additions and 8 deletions

View File

@ -46,6 +46,7 @@ class ThebesBufferData;
class TiledContentHost;
class CompositableParentManager;
class WebRenderImageHost;
class ContentHost;
class ContentHostTexture;
struct EffectChain;
@ -149,6 +150,7 @@ public:
Layer* GetLayer() const { return mLayer; }
void SetLayer(Layer* aLayer) { mLayer = aLayer; }
virtual ContentHost* AsContentHost() { return nullptr; }
virtual ContentHostTexture* AsContentHostTexture() { return nullptr; }
virtual ImageHost* AsImageHost() { return nullptr; }
virtual TiledContentHost* AsTiledContentHost() { return nullptr; }

View File

@ -68,6 +68,7 @@ public:
MOZ_ASSERT_UNREACHABLE("Must be implemented in derived class");
return gfx::IntRect();
}
virtual ContentHost* AsContentHost() { return this; }
protected:
explicit ContentHost(const TextureInfo& aTextureInfo)

View File

@ -36,11 +36,17 @@ PaintedLayerMLGPU::OnPrepareToRender(FrameBuilder* aBuilder)
return false;
}
mTexture = mHost->AcquireTextureSource();
ContentHostTexture* single = mHost->AsContentHostTexture();
if (!single) {
return false;
}
mTexture = single->AcquireTextureSource();
if (!mTexture) {
return false;
}
mTextureOnWhite = mHost->AcquireTextureSourceOnWhite();
mTextureOnWhite = single->AcquireTextureSourceOnWhite();
mDestOrigin = single->GetOriginOffset();
return true;
}
@ -77,9 +83,10 @@ bool
PaintedLayerMLGPU::SetCompositableHost(CompositableHost* aHost)
{
switch (aHost->GetType()) {
case CompositableType::CONTENT_TILED:
case CompositableType::CONTENT_SINGLE:
case CompositableType::CONTENT_DOUBLE:
mHost = static_cast<ContentHostBase*>(aHost)->AsContentHostTexture();
mHost = aHost->AsContentHost();
if (!mHost) {
gfxWarning() << "ContentHostBase is not a ContentHostTexture";
}
@ -95,6 +102,12 @@ PaintedLayerMLGPU::GetCompositableHost()
return mHost;
}
gfx::Point
PaintedLayerMLGPU::GetDestOrigin() const
{
return mDestOrigin;
}
void
PaintedLayerMLGPU::CleanupResources()
{

View File

@ -48,9 +48,8 @@ public:
MOZ_ASSERT(HasComponentAlpha());
return mTextureOnWhite;
}
ContentHostTexture* GetContentHost() const {
return mHost;
}
gfx::Point GetDestOrigin() const;
SamplerMode GetSamplerMode() {
// Note that when resamping, we must break the texture coordinates into
// no-repeat rects. When we have simple integer translations we can
@ -78,12 +77,13 @@ protected:
void CleanupResources();
private:
RefPtr<ContentHostTexture> mHost;
RefPtr<ContentHost> mHost;
RefPtr<TextureSource> mTexture;
RefPtr<TextureSource> mTextureOnWhite;
#ifndef MOZ_IGNORE_PAINT_WILL_RESAMPLE
LayerIntRegion mDrawRects;
#endif
IntPoint mDestOrigin;
};
} // namespace layers

View File

@ -457,7 +457,7 @@ TexturedRenderPass::TexturedRenderPass(FrameBuilder* aBuilder, const ItemInfo& a
TexturedRenderPass::Info::Info(const ItemInfo& aItem, PaintedLayerMLGPU* aLayer)
: item(aItem),
textureSize(aLayer->GetTexture()->GetSize()),
destOrigin(aLayer->GetContentHost()->GetOriginOffset()),
destOrigin(aLayer->GetDestOrigin()),
decomposeIntoNoRepeatRects(aLayer->MayResample())
{
}