Index: cc/trees/layer_tree_host_impl.cc |
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc |
index eb9697c67186cb00e7e62995057a51d7433ce702..efcc5295465539f182d6628e1092abb1ea3989fe 100644 |
--- a/cc/trees/layer_tree_host_impl.cc |
+++ b/cc/trees/layer_tree_host_impl.cc |
@@ -598,6 +598,8 @@ bool LayerTreeHostImpl::CalculateRenderPasses(FrameData* frame) { |
occlusion_tracker.EnterLayer(it, prevent_occlusion); |
AppendQuadsData append_quads_data(target_render_pass->id); |
+ if (output_surface_->ForcedDrawToSoftwareDevice()) |
+ append_quads_data.allow_tile_draw_quads = false; |
if (it.represents_target_render_surface()) { |
if (it->HasRequestCopyCallback()) { |
@@ -709,7 +711,8 @@ bool LayerTreeHostImpl::CalculateRenderPasses(FrameData* frame) { |
DCHECK(!have_copy_request); |
RemoveRenderPasses(CullRenderPassesWithNoQuads(), frame); |
- renderer_->DecideRenderPassAllocationsForFrame(frame->render_passes); |
+ if (!output_surface_->ForcedDrawToSoftwareDevice()) |
+ renderer_->DecideRenderPassAllocationsForFrame(frame->render_passes); |
RemoveRenderPasses(CullRenderPassesWithCachedTextures(renderer_.get()), |
frame); |
@@ -1112,7 +1115,13 @@ void LayerTreeHostImpl::DrawLayers(FrameData* frame, |
if (active_tree_->hud_layer()) |
active_tree_->hud_layer()->UpdateHudTexture(resource_provider_.get()); |
- renderer_->DrawFrame(&frame->render_passes); |
+ if (output_surface_->ForcedDrawToSoftwareDevice()) { |
+ scoped_ptr<SoftwareRenderer> temp_software_renderer = |
+ SoftwareRenderer::Create(this, output_surface_.get(), NULL); |
+ temp_software_renderer->DrawFrame(&frame->render_passes); |
+ } else { |
+ renderer_->DrawFrame(&frame->render_passes); |
+ } |
// The render passes should be consumed by the renderer. |
DCHECK(frame->render_passes.empty()); |
frame->render_passes_by_id.clear(); |