Chromium Code Reviews| 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 <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <unordered_map> | 9 #include <unordered_map> |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 86 | 86 |
| 87 DirectRenderer::~DirectRenderer() = default; | 87 DirectRenderer::~DirectRenderer() = default; |
| 88 | 88 |
| 89 void DirectRenderer::Initialize() { | 89 void DirectRenderer::Initialize() { |
| 90 overlay_processor_->Initialize(); | 90 overlay_processor_->Initialize(); |
| 91 | 91 |
| 92 auto* context_provider = output_surface_->context_provider(); | 92 auto* context_provider = output_surface_->context_provider(); |
| 93 | 93 |
| 94 use_partial_swap_ = settings_->partial_swap_enabled && CanPartialSwap(); | 94 use_partial_swap_ = settings_->partial_swap_enabled && CanPartialSwap(); |
| 95 allow_empty_swap_ = use_partial_swap_; | 95 allow_empty_swap_ = use_partial_swap_; |
| 96 allow_partial_swap_ = use_partial_swap_; | |
| 96 if (context_provider) { | 97 if (context_provider) { |
| 97 if (context_provider->ContextCapabilities().commit_overlay_planes) | 98 if (context_provider->ContextCapabilities().commit_overlay_planes) |
| 98 allow_empty_swap_ = true; | 99 allow_empty_swap_ = true; |
| 99 if (context_provider->ContextCapabilities().dc_layers) | 100 if (context_provider->ContextCapabilities().dc_layers) |
| 100 supports_dc_layers_ = true; | 101 supports_dc_layers_ = true; |
| 102 if (context_provider->ContextCapabilities() | |
| 103 .disable_non_empty_post_sub_buffers) { | |
| 104 allow_partial_swap_ = false; | |
|
jbauman
2017/04/20 21:30:06
If you just set use_partial_swap_=false here, then
reveman
2017/04/20 22:11:40
Good idea. Done.
| |
| 105 } | |
| 101 } | 106 } |
| 102 | 107 |
| 103 initialized_ = true; | 108 initialized_ = true; |
| 104 } | 109 } |
| 105 | 110 |
| 106 // static | 111 // static |
| 107 gfx::RectF DirectRenderer::QuadVertexRect() { | 112 gfx::RectF DirectRenderer::QuadVertexRect() { |
| 108 return gfx::RectF(-0.5f, -0.5f, 1.f, 1.f); | 113 return gfx::RectF(-0.5f, -0.5f, 1.f, 1.f); |
| 109 } | 114 } |
| 110 | 115 |
| (...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 336 current_frame()->root_damage_rect = | 341 current_frame()->root_damage_rect = |
| 337 current_frame()->root_render_pass->output_rect; | 342 current_frame()->root_render_pass->output_rect; |
| 338 } | 343 } |
| 339 | 344 |
| 340 // We can skip all drawing if the damage rect is now empty. | 345 // We can skip all drawing if the damage rect is now empty. |
| 341 bool skip_drawing_root_render_pass = | 346 bool skip_drawing_root_render_pass = |
| 342 current_frame()->root_damage_rect.IsEmpty() && allow_empty_swap_; | 347 current_frame()->root_damage_rect.IsEmpty() && allow_empty_swap_; |
| 343 | 348 |
| 344 // If we have to draw but don't support partial swap, the whole output should | 349 // If we have to draw but don't support partial swap, the whole output should |
| 345 // be considered damaged. | 350 // be considered damaged. |
| 346 if (!skip_drawing_root_render_pass && !use_partial_swap_) | 351 if (!skip_drawing_root_render_pass && !allow_partial_swap_) |
| 347 current_frame()->root_damage_rect = root_render_pass->output_rect; | 352 current_frame()->root_damage_rect = root_render_pass->output_rect; |
| 348 | 353 |
| 349 if (skip_drawing_root_render_pass) { | 354 if (!skip_drawing_root_render_pass) |
|
Daniele Castagna
2017/04/19 19:10:36
In the comment you removed it mentioned that calli
reveman
2017/04/19 23:59:03
Yes, that was kind of a hack. Before this we still
| |
| 350 // If any of the overlays is the output surface, then ensure that the | |
| 351 // backbuffer be allocated (allocation of the backbuffer is a side-effect | |
| 352 // of BindFramebufferToOutputSurface). | |
| 353 for (auto& overlay : current_frame()->overlay_list) { | |
| 354 if (overlay.use_output_surface_for_resource) { | |
| 355 BindFramebufferToOutputSurface(); | |
| 356 break; | |
| 357 } | |
| 358 } | |
| 359 } else { | |
| 360 DrawRenderPassAndExecuteCopyRequests(root_render_pass); | 355 DrawRenderPassAndExecuteCopyRequests(root_render_pass); |
| 361 } | |
| 362 | 356 |
| 363 FinishDrawingFrame(); | 357 FinishDrawingFrame(); |
| 364 render_passes_in_draw_order->clear(); | 358 render_passes_in_draw_order->clear(); |
| 365 render_pass_filters_.clear(); | 359 render_pass_filters_.clear(); |
| 366 render_pass_background_filters_.clear(); | 360 render_pass_background_filters_.clear(); |
| 367 | 361 |
| 368 current_frame_valid_ = false; | 362 current_frame_valid_ = false; |
| 369 } | 363 } |
| 370 | 364 |
| 371 gfx::Rect DirectRenderer::DrawingFrame::ComputeScissorRectForRenderPass() | 365 gfx::Rect DirectRenderer::DrawingFrame::ComputeScissorRectForRenderPass() |
| (...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 663 gfx::Size DirectRenderer::RenderPassTextureSize(const RenderPass* render_pass) { | 657 gfx::Size DirectRenderer::RenderPassTextureSize(const RenderPass* render_pass) { |
| 664 return render_pass->output_rect.size(); | 658 return render_pass->output_rect.size(); |
| 665 } | 659 } |
| 666 | 660 |
| 667 void DirectRenderer::SetCurrentFrameForTesting(const DrawingFrame& frame) { | 661 void DirectRenderer::SetCurrentFrameForTesting(const DrawingFrame& frame) { |
| 668 current_frame_valid_ = true; | 662 current_frame_valid_ = true; |
| 669 current_frame_ = frame; | 663 current_frame_ = frame; |
| 670 } | 664 } |
| 671 | 665 |
| 672 } // namespace cc | 666 } // namespace cc |
| OLD | NEW |