| 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 ffe2ddb731aad2a0efd5550b35f3a2bde2d45b4c..42054c5bcfd02677d404e33eedbae0f52103659b 100644
|
| --- a/cc/trees/layer_tree_host_impl.cc
|
| +++ b/cc/trees/layer_tree_host_impl.cc
|
| @@ -151,22 +151,6 @@ size_t GetMaxTransferBufferUsageBytes(
|
| max_transfer_buffer_usage_bytes);
|
| }
|
|
|
| -unsigned GetMapImageTextureTarget(
|
| - const ContextProvider::Capabilities& context_capabilities) {
|
| -// TODO(reveman): This should be a setting passed to the compositor instead
|
| -// of hard-coded here. The target that need to be used depends on our choice
|
| -// of GpuMemoryBuffer type. Note: SURFACE_TEXTURE needs EXTERNAL_OES,
|
| -// IO_SURFACE needs RECTANGLE_ARB. crbug.com/431059
|
| -#if defined(OS_ANDROID)
|
| - if (context_capabilities.gpu.egl_image_external)
|
| - return GL_TEXTURE_EXTERNAL_OES;
|
| -#endif
|
| - if (context_capabilities.gpu.texture_rectangle)
|
| - return GL_TEXTURE_RECTANGLE_ARB;
|
| -
|
| - return GL_TEXTURE_2D;
|
| -}
|
| -
|
| size_t GetMaxStagingResourceCount() {
|
| // Upper bound for number of staging resource to allow.
|
| return 32;
|
| @@ -1964,6 +1948,17 @@ void LayerTreeHostImpl::CreateResourceAndRasterWorkerPool(
|
| bool should_use_zero_copy_rasterizer =
|
| settings_.use_zero_copy || IsSynchronousSingleThreaded();
|
|
|
| + unsigned image_target = GL_TEXTURE_2D;
|
| +#if defined(OS_MACOSX)
|
| + // GL_TEXTURE_RECTANGLE_ARB target is required by IOSurface backed images.
|
| + DCHECK(context_provider->ContextCapabilities().gpu.texture_rectangle);
|
| + image_target = GL_TEXTURE_RECTANGLE_ARB;
|
| +#endif
|
| + if (settings_.use_image_external) {
|
| + DCHECK(context_provider->ContextCapabilities().gpu.egl_image_external);
|
| + image_target = GL_TEXTURE_EXTERNAL_OES;
|
| + }
|
| +
|
| if (!context_provider) {
|
| *resource_pool =
|
| ResourcePool::Create(resource_provider_.get(),
|
| @@ -1986,10 +1981,9 @@ void LayerTreeHostImpl::CreateResourceAndRasterWorkerPool(
|
| resource_provider_.get(),
|
| settings_.use_distance_field_text);
|
| } else if (should_use_zero_copy_rasterizer && CanUseZeroCopyRasterizer()) {
|
| - *resource_pool = ResourcePool::Create(
|
| - resource_provider_.get(),
|
| - GetMapImageTextureTarget(context_provider->ContextCapabilities()),
|
| - resource_provider_->best_texture_format());
|
| + *resource_pool =
|
| + ResourcePool::Create(resource_provider_.get(), image_target,
|
| + resource_provider_->best_texture_format());
|
|
|
| TaskGraphRunner* task_graph_runner;
|
| if (IsSynchronousSingleThreaded()) {
|
| @@ -2004,10 +1998,9 @@ void LayerTreeHostImpl::CreateResourceAndRasterWorkerPool(
|
| task_runner, task_graph_runner, resource_provider_.get());
|
| } else if (settings_.use_one_copy && CanUseOneCopyRasterizer()) {
|
| // We need to create a staging resource pool when using copy rasterizer.
|
| - *staging_resource_pool = ResourcePool::Create(
|
| - resource_provider_.get(),
|
| - GetMapImageTextureTarget(context_provider->ContextCapabilities()),
|
| - resource_provider_->best_texture_format());
|
| + *staging_resource_pool =
|
| + ResourcePool::Create(resource_provider_.get(), image_target,
|
| + resource_provider_->best_texture_format());
|
| *resource_pool =
|
| ResourcePool::Create(resource_provider_.get(),
|
| GL_TEXTURE_2D,
|
|
|