Chromium Code Reviews| 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 a3a03286fdad5b4e1cab889d6ab8220b340bf4c9..8bc11aac93f3fd6755dcec3d40b97df5e8a8e012 100644 |
| --- a/cc/trees/layer_tree_host_impl.cc |
| +++ b/cc/trees/layer_tree_host_impl.cc |
| @@ -78,6 +78,20 @@ |
| namespace cc { |
| namespace { |
| +bool SupportsTextureTarget(unsigned target, |
| + LayerTreeSettings::TextureTargetPrefs prefs) { |
|
reveman
2014/10/22 12:40:39
I find this utility function a bit confusing. Base
|
| + switch (prefs) { |
| + case LayerTreeSettings::USE_DEFAULT_TEXTURE_TARGET: |
| + return true; |
| + case LayerTreeSettings::FORCE_TEXTURE_2D_TARGET: |
| + return target == GL_TEXTURE_2D; |
| + case LayerTreeSettings::FORCE_TEXTURE_RECT_TARGET: |
| + return target == GL_TEXTURE_RECTANGLE_ARB; |
| + } |
| + NOTREACHED(); |
| + return false; |
| +} |
| + |
| // Small helper class that saves the current viewport location as the user sees |
| // it and resets to the same location. |
| class ViewportAnchor { |
| @@ -2013,6 +2027,8 @@ void LayerTreeHostImpl::CreateAndSetTileManager() { |
| ContextProvider* context_provider = output_surface_->context_provider(); |
| if (!context_provider) { |
| + DCHECK( |
| + SupportsTextureTarget(GL_TEXTURE_2D, settings_.texture_target_prefs)); |
| resource_pool_ = |
| ResourcePool::Create(resource_provider_.get(), |
| GL_TEXTURE_2D, |
| @@ -2023,6 +2039,8 @@ void LayerTreeHostImpl::CreateAndSetTileManager() { |
| RasterWorkerPool::GetTaskGraphRunner(), |
| resource_provider_.get()); |
| } else if (use_gpu_rasterization_) { |
| + DCHECK( |
| + SupportsTextureTarget(GL_TEXTURE_2D, settings_.texture_target_prefs)); |
| resource_pool_ = |
| ResourcePool::Create(resource_provider_.get(), |
| GL_TEXTURE_2D, |
| @@ -2031,16 +2049,24 @@ void LayerTreeHostImpl::CreateAndSetTileManager() { |
| raster_worker_pool_ = GpuRasterWorkerPool::Create( |
| task_runner, context_provider, resource_provider_.get()); |
| } else if (UseZeroCopyRasterizer()) { |
| - resource_pool_ = ResourcePool::Create( |
| - resource_provider_.get(), |
| - GetMapImageTextureTarget(context_provider->ContextCapabilities()), |
| - resource_provider_->best_texture_format()); |
| + unsigned target = |
| + GetMapImageTextureTarget(context_provider->ContextCapabilities()); |
| + if (settings_.texture_target_prefs == |
| + LayerTreeSettings::FORCE_TEXTURE_2D_TARGET) |
|
reveman
2014/10/22 12:40:38
I don't think this should be a special case for ze
enne (OOO)
2014/10/22 19:20:44
Maybe I'm mistaken, but I don't think it applies t
reveman
2014/10/22 20:36:47
Correct, GLRenderer is only affected by the target
enne (OOO)
2014/10/22 21:14:30
I'm not sure that these should be the same flag, a
reveman
2014/10/22 23:13:35
I think ((pool type) * (raster target type)) + (dr
|
| + target = GL_TEXTURE_2D; |
| + DCHECK(SupportsTextureTarget(target, settings_.texture_target_prefs)); |
| + resource_pool_ = |
| + ResourcePool::Create(resource_provider_.get(), |
| + target, |
| + resource_provider_->best_texture_format()); |
| raster_worker_pool_ = |
| ZeroCopyRasterWorkerPool::Create(proxy_->ImplThreadTaskRunner(), |
| RasterWorkerPool::GetTaskGraphRunner(), |
| resource_provider_.get()); |
| } else if (UseOneCopyRasterizer()) { |
| + DCHECK( |
| + SupportsTextureTarget(GL_TEXTURE_2D, settings_.texture_target_prefs)); |
| // We need to create a staging resource pool when using copy rasterizer. |
| staging_resource_pool_ = ResourcePool::Create( |
| resource_provider_.get(), |
| @@ -2058,6 +2084,8 @@ void LayerTreeHostImpl::CreateAndSetTileManager() { |
| resource_provider_.get(), |
| staging_resource_pool_.get()); |
| } else { |
| + DCHECK( |
| + SupportsTextureTarget(GL_TEXTURE_2D, settings_.texture_target_prefs)); |
| resource_pool_ = ResourcePool::Create( |
| resource_provider_.get(), |
| GL_TEXTURE_2D, |