OLD | NEW |
---|---|
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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/output/direct_renderer.h" | 5 #include "cc/output/direct_renderer.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/containers/hash_tables.h" | 10 #include "base/containers/hash_tables.h" |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
49 | 49 |
50 // Map from ([-1, -1] to [1, 1]) -> ([0, 0] to [1, 1]) | 50 // Map from ([-1, -1] to [1, 1]) -> ([0, 0] to [1, 1]) |
51 canvas.Translate3d(0.5, 0.5, 0.5); | 51 canvas.Translate3d(0.5, 0.5, 0.5); |
52 canvas.Scale3d(0.5, 0.5, 0.5); | 52 canvas.Scale3d(0.5, 0.5, 0.5); |
53 | 53 |
54 return canvas; | 54 return canvas; |
55 } | 55 } |
56 | 56 |
57 namespace cc { | 57 namespace cc { |
58 | 58 |
59 static ResourceProvider::ResourceId WaitOnResourceSyncPoints( | |
60 ResourceProvider* resource_provider, | |
61 ResourceProvider::ResourceId resource_id) { | |
62 resource_provider->WaitSyncPointIfNeeded(resource_id); | |
63 return resource_id; | |
64 } | |
65 | |
59 DirectRenderer::DrawingFrame::DrawingFrame() | 66 DirectRenderer::DrawingFrame::DrawingFrame() |
60 : root_render_pass(NULL), current_render_pass(NULL), current_texture(NULL) { | 67 : root_render_pass(NULL), current_render_pass(NULL), current_texture(NULL) { |
61 } | 68 } |
62 | 69 |
63 DirectRenderer::DrawingFrame::~DrawingFrame() {} | 70 DirectRenderer::DrawingFrame::~DrawingFrame() {} |
64 | 71 |
65 // | 72 // |
66 // static | 73 // static |
67 gfx::RectF DirectRenderer::QuadVertexRect() { | 74 gfx::RectF DirectRenderer::QuadVertexRect() { |
68 return gfx::RectF(-0.5f, -0.5f, 1.f, 1.f); | 75 return gfx::RectF(-0.5f, -0.5f, 1.f, 1.f); |
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
218 overlay_processor_->ProcessForOverlays(render_passes_in_draw_order, | 225 overlay_processor_->ProcessForOverlays(render_passes_in_draw_order, |
219 &frame.overlay_list); | 226 &frame.overlay_list); |
220 | 227 |
221 EnsureBackbuffer(); | 228 EnsureBackbuffer(); |
222 | 229 |
223 // Only reshape when we know we are going to draw. Otherwise, the reshape | 230 // Only reshape when we know we are going to draw. Otherwise, the reshape |
224 // can leave the window at the wrong size if we never draw and the proper | 231 // can leave the window at the wrong size if we never draw and the proper |
225 // viewport size is never set. | 232 // viewport size is never set. |
226 output_surface_->Reshape(device_viewport_rect.size(), device_scale_factor); | 233 output_surface_->Reshape(device_viewport_rect.size(), device_scale_factor); |
227 | 234 |
235 // Insert WaitSyncPointCHROMIUM on quad resources prior to drawing the frame, | |
236 // so that drawing can proceed without GL context switching interruptions. | |
237 // crbug.com/394547 | |
danakj
2014/08/13 23:05:19
git blame will point to the bug, i think you can d
vmiura
2014/08/15 21:20:39
Done.
| |
238 DrawQuad::ResourceIteratorCallback wait_on_resource_syncpoints_callback = | |
239 base::Bind(&WaitOnResourceSyncPoints, resource_provider_); | |
240 | |
241 for (size_t i = 0; i < render_passes_in_draw_order->size(); ++i) { | |
242 RenderPass* pass = render_passes_in_draw_order->at(i); | |
243 for (size_t j = 0; j < pass->quad_list.size(); ++j) { | |
244 DrawQuad* quad = pass->quad_list[j]; | |
245 quad->IterateResources(wait_on_resource_syncpoints_callback); | |
246 } | |
247 } | |
248 | |
228 BeginDrawingFrame(&frame); | 249 BeginDrawingFrame(&frame); |
229 for (size_t i = 0; i < render_passes_in_draw_order->size(); ++i) { | 250 for (size_t i = 0; i < render_passes_in_draw_order->size(); ++i) { |
230 RenderPass* pass = render_passes_in_draw_order->at(i); | 251 RenderPass* pass = render_passes_in_draw_order->at(i); |
231 DrawRenderPass(&frame, pass); | 252 DrawRenderPass(&frame, pass); |
232 | 253 |
233 for (ScopedPtrVector<CopyOutputRequest>::iterator it = | 254 for (ScopedPtrVector<CopyOutputRequest>::iterator it = |
234 pass->copy_requests.begin(); | 255 pass->copy_requests.begin(); |
235 it != pass->copy_requests.end(); | 256 it != pass->copy_requests.end(); |
236 ++it) { | 257 ++it) { |
237 if (i > 0) { | 258 if (i > 0) { |
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
419 ScopedResource* texture = render_pass_textures_.get(id); | 440 ScopedResource* texture = render_pass_textures_.get(id); |
420 return texture && texture->id(); | 441 return texture && texture->id(); |
421 } | 442 } |
422 | 443 |
423 // static | 444 // static |
424 gfx::Size DirectRenderer::RenderPassTextureSize(const RenderPass* render_pass) { | 445 gfx::Size DirectRenderer::RenderPassTextureSize(const RenderPass* render_pass) { |
425 return render_pass->output_rect.size(); | 446 return render_pass->output_rect.size(); |
426 } | 447 } |
427 | 448 |
428 } // namespace cc | 449 } // namespace cc |
OLD | NEW |