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, |