Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(121)

Side by Side Diff: cc/trees/layer_tree_host_impl.cc

Issue 1251693003: cc: Fix the format of GpuMemoryBuffer for SurfaceTexture (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Change switches::kContentImageTextureTarget to a list of image texture targets Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/trees/layer_tree_host_impl.h" 5 #include "cc/trees/layer_tree_host_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 #include <map> 9 #include <map>
10 #include <set> 10 #include <set>
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
73 #include "cc/trees/layer_tree_host_common.h" 73 #include "cc/trees/layer_tree_host_common.h"
74 #include "cc/trees/layer_tree_impl.h" 74 #include "cc/trees/layer_tree_impl.h"
75 #include "cc/trees/single_thread_proxy.h" 75 #include "cc/trees/single_thread_proxy.h"
76 #include "cc/trees/tree_synchronizer.h" 76 #include "cc/trees/tree_synchronizer.h"
77 #include "gpu/GLES2/gl2extchromium.h" 77 #include "gpu/GLES2/gl2extchromium.h"
78 #include "gpu/command_buffer/client/gles2_interface.h" 78 #include "gpu/command_buffer/client/gles2_interface.h"
79 #include "ui/gfx/geometry/rect_conversions.h" 79 #include "ui/gfx/geometry/rect_conversions.h"
80 #include "ui/gfx/geometry/scroll_offset.h" 80 #include "ui/gfx/geometry/scroll_offset.h"
81 #include "ui/gfx/geometry/size_conversions.h" 81 #include "ui/gfx/geometry/size_conversions.h"
82 #include "ui/gfx/geometry/vector2d_conversions.h" 82 #include "ui/gfx/geometry/vector2d_conversions.h"
83 #include "ui/gfx/gpu_memory_buffer.h"
83 84
84 namespace cc { 85 namespace cc {
85 namespace { 86 namespace {
86 87
87 // Small helper class that saves the current viewport location as the user sees 88 // Small helper class that saves the current viewport location as the user sees
88 // it and resets to the same location. 89 // it and resets to the same location.
89 class ViewportAnchor { 90 class ViewportAnchor {
90 public: 91 public:
91 ViewportAnchor(LayerImpl* inner_scroll, LayerImpl* outer_scroll) 92 ViewportAnchor(LayerImpl* inner_scroll, LayerImpl* outer_scroll)
92 : inner_(inner_scroll), 93 : inner_(inner_scroll),
(...skipping 2003 matching lines...) Expand 10 before | Expand all | Expand 10 after
2096 // if we're in synchronous single-threaded mode. 2097 // if we're in synchronous single-threaded mode.
2097 TaskGraphRunner* task_graph_runner = task_graph_runner_; 2098 TaskGraphRunner* task_graph_runner = task_graph_runner_;
2098 if (is_synchronous_single_threaded_) { 2099 if (is_synchronous_single_threaded_) {
2099 DCHECK(!single_thread_synchronous_task_graph_runner_); 2100 DCHECK(!single_thread_synchronous_task_graph_runner_);
2100 single_thread_synchronous_task_graph_runner_.reset(new TaskGraphRunner); 2101 single_thread_synchronous_task_graph_runner_.reset(new TaskGraphRunner);
2101 task_graph_runner = single_thread_synchronous_task_graph_runner_.get(); 2102 task_graph_runner = single_thread_synchronous_task_graph_runner_.get();
2102 } 2103 }
2103 2104
2104 ContextProvider* context_provider = output_surface_->context_provider(); 2105 ContextProvider* context_provider = output_surface_->context_provider();
2105 if (!context_provider) { 2106 if (!context_provider) {
2106 *resource_pool = 2107 *resource_pool = ResourcePool::Create(
2107 ResourcePool::Create(resource_provider_.get(), GL_TEXTURE_2D); 2108 resource_provider_.get(),
2109 std::vector<uint>(gfx::GpuMemoryBuffer::FORMAT_LAST + 1,
2110 GL_TEXTURE_2D));
2108 2111
2109 *tile_task_worker_pool = BitmapTileTaskWorkerPool::Create( 2112 *tile_task_worker_pool = BitmapTileTaskWorkerPool::Create(
2110 GetTaskRunner(), task_graph_runner, resource_provider_.get()); 2113 GetTaskRunner(), task_graph_runner, resource_provider_.get());
2111 return; 2114 return;
2112 } 2115 }
2113 2116
2114 if (use_gpu_rasterization_) { 2117 if (use_gpu_rasterization_) {
2115 *resource_pool = 2118 *resource_pool = ResourcePool::Create(
2116 ResourcePool::Create(resource_provider_.get(), GL_TEXTURE_2D); 2119 resource_provider_.get(),
2120 std::vector<uint>(gfx::GpuMemoryBuffer::FORMAT_LAST + 1,
2121 GL_TEXTURE_2D));
2117 2122
2118 int msaa_sample_count = 2123 int msaa_sample_count =
2119 use_msaa_ ? settings_.gpu_rasterization_msaa_sample_count : 0; 2124 use_msaa_ ? settings_.gpu_rasterization_msaa_sample_count : 0;
2120 2125
2121 *tile_task_worker_pool = GpuTileTaskWorkerPool::Create( 2126 *tile_task_worker_pool = GpuTileTaskWorkerPool::Create(
2122 GetTaskRunner(), task_graph_runner, context_provider, 2127 GetTaskRunner(), task_graph_runner, context_provider,
2123 resource_provider_.get(), settings_.use_distance_field_text, 2128 resource_provider_.get(), settings_.use_distance_field_text,
2124 msaa_sample_count); 2129 msaa_sample_count);
2125 return; 2130 return;
2126 } 2131 }
2127 2132
2128 DCHECK(GetRendererCapabilities().using_image); 2133 DCHECK(GetRendererCapabilities().using_image);
2129 unsigned image_target = settings_.use_image_texture_target; 2134 std::vector<uint> image_targets = settings_.use_image_texture_targets;
2130 DCHECK_IMPLIES(image_target == GL_TEXTURE_RECTANGLE_ARB,
2131 context_provider->ContextCapabilities().gpu.texture_rectangle);
2132 DCHECK_IMPLIES(
2133 image_target == GL_TEXTURE_EXTERNAL_OES,
2134 context_provider->ContextCapabilities().gpu.egl_image_external);
2135 2135
2136 if (settings_.use_zero_copy) { 2136 if (settings_.use_zero_copy) {
2137 *resource_pool = 2137 *resource_pool =
2138 ResourcePool::Create(resource_provider_.get(), image_target); 2138 ResourcePool::Create(resource_provider_.get(), image_targets);
2139 2139
2140 *tile_task_worker_pool = ZeroCopyTileTaskWorkerPool::Create( 2140 *tile_task_worker_pool = ZeroCopyTileTaskWorkerPool::Create(
2141 GetTaskRunner(), task_graph_runner, resource_provider_.get()); 2141 GetTaskRunner(), task_graph_runner, resource_provider_.get());
2142 return; 2142 return;
2143 } 2143 }
2144 2144
2145 if (settings_.use_one_copy) { 2145 if (settings_.use_one_copy) {
2146 // Synchronous single-threaded mode depends on tiles being ready to 2146 // Synchronous single-threaded mode depends on tiles being ready to
2147 // draw when raster is complete. Therefore, it must use one of zero 2147 // draw when raster is complete. Therefore, it must use one of zero
2148 // copy, software raster, or GPU raster. 2148 // copy, software raster, or GPU raster.
2149 DCHECK(!is_synchronous_single_threaded_); 2149 DCHECK(!is_synchronous_single_threaded_);
2150 2150
2151 // We need to create a staging resource pool when using copy rasterizer. 2151 // We need to create a staging resource pool when using copy rasterizer.
2152 *staging_resource_pool = 2152 *staging_resource_pool =
2153 ResourcePool::Create(resource_provider_.get(), image_target); 2153 ResourcePool::Create(resource_provider_.get(), image_targets);
2154 *resource_pool = 2154 *resource_pool = ResourcePool::Create(
2155 ResourcePool::Create(resource_provider_.get(), GL_TEXTURE_2D); 2155 resource_provider_.get(),
2156 std::vector<uint>(gfx::GpuMemoryBuffer::FORMAT_LAST + 1,
2157 GL_TEXTURE_2D));
2156 2158
2157 int max_copy_texture_chromium_size = 2159 int max_copy_texture_chromium_size =
2158 context_provider->ContextCapabilities() 2160 context_provider->ContextCapabilities()
2159 .gpu.max_copy_texture_chromium_size; 2161 .gpu.max_copy_texture_chromium_size;
2160 2162
2161 *tile_task_worker_pool = OneCopyTileTaskWorkerPool::Create( 2163 *tile_task_worker_pool = OneCopyTileTaskWorkerPool::Create(
2162 GetTaskRunner(), task_graph_runner, context_provider, 2164 GetTaskRunner(), task_graph_runner, context_provider,
2163 resource_provider_.get(), staging_resource_pool_.get(), 2165 resource_provider_.get(), staging_resource_pool_.get(),
2164 max_copy_texture_chromium_size, 2166 max_copy_texture_chromium_size,
2165 settings_.use_persistent_map_for_gpu_memory_buffers); 2167 settings_.use_persistent_map_for_gpu_memory_buffers);
2166 return; 2168 return;
2167 } 2169 }
2168 2170
2169 // Synchronous single-threaded mode depends on tiles being ready to 2171 // Synchronous single-threaded mode depends on tiles being ready to
2170 // draw when raster is complete. Therefore, it must use one of zero 2172 // draw when raster is complete. Therefore, it must use one of zero
2171 // copy, software raster, or GPU raster (in the branches above). 2173 // copy, software raster, or GPU raster (in the branches above).
2172 DCHECK(!is_synchronous_single_threaded_); 2174 DCHECK(!is_synchronous_single_threaded_);
2173 2175
2174 *resource_pool = ResourcePool::Create( 2176 *resource_pool = ResourcePool::Create(
2175 resource_provider_.get(), GL_TEXTURE_2D); 2177 resource_provider_.get(),
2178 std::vector<uint>(gfx::GpuMemoryBuffer::FORMAT_LAST + 1, GL_TEXTURE_2D));
2176 2179
2177 *tile_task_worker_pool = PixelBufferTileTaskWorkerPool::Create( 2180 *tile_task_worker_pool = PixelBufferTileTaskWorkerPool::Create(
2178 GetTaskRunner(), task_graph_runner_, context_provider, 2181 GetTaskRunner(), task_graph_runner_, context_provider,
2179 resource_provider_.get(), 2182 resource_provider_.get(),
2180 GetMaxTransferBufferUsageBytes(context_provider->ContextCapabilities(), 2183 GetMaxTransferBufferUsageBytes(context_provider->ContextCapabilities(),
2181 settings_.renderer_settings.refresh_rate)); 2184 settings_.renderer_settings.refresh_rate));
2182 } 2185 }
2183 2186
2184 void LayerTreeHostImpl::RecordMainFrameTiming( 2187 void LayerTreeHostImpl::RecordMainFrameTiming(
2185 const BeginFrameArgs& start_of_main_frame_args, 2188 const BeginFrameArgs& start_of_main_frame_args,
(...skipping 1421 matching lines...) Expand 10 before | Expand all | Expand 10 after
3607 if (active_tree()) { 3610 if (active_tree()) {
3608 LayerAnimationValueProvider* layer = active_tree()->LayerById(layer_id); 3611 LayerAnimationValueProvider* layer = active_tree()->LayerById(layer_id);
3609 if (layer) 3612 if (layer)
3610 return layer->ScrollOffsetForAnimation(); 3613 return layer->ScrollOffsetForAnimation();
3611 } 3614 }
3612 3615
3613 return gfx::ScrollOffset(); 3616 return gfx::ScrollOffset();
3614 } 3617 }
3615 3618
3616 } // namespace cc 3619 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698