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 b3911f86ac186be311f4a8878bd179a1853fdd51..778af346a1d4af3214ee8071a6ae78d322c905a5 100644 |
--- a/cc/trees/layer_tree_host_impl.cc |
+++ b/cc/trees/layer_tree_host_impl.cc |
@@ -572,7 +572,10 @@ static DrawMode GetDrawMode(OutputSurface* output_surface) { |
return DRAW_MODE_HARDWARE; |
} else { |
DCHECK_EQ(!output_surface->software_device(), |
- output_surface->capabilities().delegated_rendering); |
+ output_surface->capabilities().delegated_rendering && |
+ !output_surface->capabilities().deferred_gl_initialization) |
+ << output_surface->capabilities().delegated_rendering << " " |
+ << output_surface->capabilities().deferred_gl_initialization; |
return DRAW_MODE_SOFTWARE; |
} |
} |
@@ -1813,12 +1816,13 @@ void LayerTreeHostImpl::ReleaseTreeResources() { |
void LayerTreeHostImpl::CreateAndSetRenderer( |
OutputSurface* output_surface, |
ResourceProvider* resource_provider, |
- bool skip_gl_renderer) { |
+ bool force_software_renderer) { |
DCHECK(!renderer_); |
- if (output_surface->capabilities().delegated_rendering) { |
+ if (output_surface->capabilities().delegated_rendering && |
+ !force_software_renderer) { |
renderer_ = DelegatingRenderer::Create( |
this, &settings_, output_surface, resource_provider); |
- } else if (output_surface->context_provider() && !skip_gl_renderer) { |
+ } else if (output_surface->context_provider() && !force_software_renderer) { |
renderer_ = GLRenderer::Create(this, |
&settings_, |
output_surface, |
@@ -1945,9 +1949,10 @@ bool LayerTreeHostImpl::InitializeRenderer( |
if (output_surface->capabilities().deferred_gl_initialization) |
EnforceZeroBudget(true); |
- bool skip_gl_renderer = false; |
+ bool force_software_renderer = |
+ output_surface->capabilities().deferred_gl_initialization; |
CreateAndSetRenderer( |
- output_surface.get(), resource_provider.get(), skip_gl_renderer); |
+ output_surface.get(), resource_provider.get(), force_software_renderer); |
transfer_buffer_memory_limit_ = |
GetMaxTransferBufferUsageBytes(output_surface->context_provider().get()); |
@@ -2015,9 +2020,9 @@ void LayerTreeHostImpl::DeferredInitialize() { |
resource_provider_->InitializeGL(); |
- bool skip_gl_renderer = false; |
+ bool force_software_renderer = false; |
CreateAndSetRenderer( |
- output_surface_.get(), resource_provider_.get(), skip_gl_renderer); |
+ output_surface_.get(), resource_provider_.get(), force_software_renderer); |
EnforceZeroBudget(false); |
client_->SetNeedsCommitOnImplThread(); |
@@ -2037,9 +2042,9 @@ void LayerTreeHostImpl::ReleaseGL() { |
staging_resource_pool_.reset(); |
resource_provider_->InitializeSoftware(); |
- bool skip_gl_renderer = true; |
+ bool force_software_renderer = true; |
CreateAndSetRenderer( |
- output_surface_.get(), resource_provider_.get(), skip_gl_renderer); |
+ output_surface_.get(), resource_provider_.get(), force_software_renderer); |
EnforceZeroBudget(true); |
DCHECK(GetRendererCapabilities().using_map_image); |
boliu
2014/05/20 20:37:49
Sorry, realized we do need force_software_renderer
|