Index: cc/layer_tree_host_impl.cc |
diff --git a/cc/layer_tree_host_impl.cc b/cc/layer_tree_host_impl.cc |
index 55f6452ded8bc55344b72f71dc08478de00335a7..571f990ed845f10b9f25c8ee4f43171c2ebba6b3 100644 |
--- a/cc/layer_tree_host_impl.cc |
+++ b/cc/layer_tree_host_impl.cc |
@@ -491,8 +491,6 @@ static void appendQuadsToFillScreen(RenderPass* targetRenderPass, LayerImpl* roo |
// doesn't have any bounds and so can't generate this itself. |
// FIXME: Make the gutter quads generated by the solid color layer (make it smarter about generating quads to fill unoccluded areas). |
- DCHECK(rootLayer->screenSpaceTransform().IsInvertible()); |
- |
gfx::Rect rootTargetRect = rootLayer->renderSurface()->contentRect(); |
float opacity = 1; |
SharedQuadState* sharedQuadState = quadCuller.useSharedQuadState(SharedQuadState::Create()); |
@@ -504,10 +502,13 @@ static void appendQuadsToFillScreen(RenderPass* targetRenderPass, LayerImpl* roo |
opacity); |
AppendQuadsData appendQuadsData; |
- gfx::Transform transformToLayerSpace = MathUtil::inverse(rootLayer->screenSpaceTransform()); |
+ |
+ gfx::Transform transformToLayerSpace(gfx::Transform::kSkipInitialization); |
+ bool didInvert = rootLayer->screenSpaceTransform().GetInverse(&transformToLayerSpace); |
+ DCHECK(didInvert); |
for (Region::Iterator fillRects(fillRegion); fillRects.has_rect(); fillRects.next()) { |
// The root layer transform is composed of translations and scales only, |
- // no perspective, so mapping is sufficient. |
+ // no perspective, so mapping is sufficient (as opposed to projecting). |
gfx::Rect layerRect = MathUtil::mapClippedRect(transformToLayerSpace, fillRects.rect()); |
// Skip the quad culler and just append the quads directly to avoid |
// occlusion checks. |
@@ -1277,7 +1278,11 @@ static gfx::Vector2dF scrollLayerWithViewportSpaceDelta(PinchZoomViewport* viewp |
// Layers with non-invertible screen space transforms should not have passed the scroll hit |
// test in the first place. |
DCHECK(layerImpl.screenSpaceTransform().IsInvertible()); |
- gfx::Transform inverseScreenSpaceTransform = MathUtil::inverse(layerImpl.screenSpaceTransform()); |
+ gfx::Transform inverseScreenSpaceTransform(gfx::Transform::kSkipInitialization); |
+ bool didInvert = layerImpl.screenSpaceTransform().GetInverse(&inverseScreenSpaceTransform); |
+ // TODO: With the advent of impl-side crolling for non-root layers, we may |
+ // need to explicitly handle uninvertible transforms here. |
+ DCHECK(didInvert); |
gfx::PointF screenSpacePoint = gfx::ScalePoint(viewportPoint, scaleFromViewportToScreenSpace); |