| 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 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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 if (context_provider) { | 96 if (context_provider) { |
| 97 if (context_provider->ContextCapabilities().commit_overlay_planes) | 97 if (context_provider->ContextCapabilities().commit_overlay_planes) |
| 98 allow_empty_swap_ = true; | 98 allow_empty_swap_ = true; |
| 99 if (context_provider->ContextCapabilities().dc_layers) | 99 if (context_provider->ContextCapabilities().dc_layers) |
| 100 supports_dc_layers_ = true; | 100 supports_dc_layers_ = true; |
| 101 if (context_provider->ContextCapabilities() |
| 102 .disable_non_empty_post_sub_buffers) { |
| 103 use_partial_swap_ = false; |
| 104 } |
| 101 } | 105 } |
| 102 | 106 |
| 103 initialized_ = true; | 107 initialized_ = true; |
| 104 } | 108 } |
| 105 | 109 |
| 106 // static | 110 // static |
| 107 gfx::RectF DirectRenderer::QuadVertexRect() { | 111 gfx::RectF DirectRenderer::QuadVertexRect() { |
| 108 return gfx::RectF(-0.5f, -0.5f, 1.f, 1.f); | 112 return gfx::RectF(-0.5f, -0.5f, 1.f, 1.f); |
| 109 } | 113 } |
| 110 | 114 |
| (...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 339 | 343 |
| 340 // We can skip all drawing if the damage rect is now empty. | 344 // We can skip all drawing if the damage rect is now empty. |
| 341 bool skip_drawing_root_render_pass = | 345 bool skip_drawing_root_render_pass = |
| 342 current_frame()->root_damage_rect.IsEmpty() && allow_empty_swap_; | 346 current_frame()->root_damage_rect.IsEmpty() && allow_empty_swap_; |
| 343 | 347 |
| 344 // If we have to draw but don't support partial swap, the whole output should | 348 // If we have to draw but don't support partial swap, the whole output should |
| 345 // be considered damaged. | 349 // be considered damaged. |
| 346 if (!skip_drawing_root_render_pass && !use_partial_swap_) | 350 if (!skip_drawing_root_render_pass && !use_partial_swap_) |
| 347 current_frame()->root_damage_rect = root_render_pass->output_rect; | 351 current_frame()->root_damage_rect = root_render_pass->output_rect; |
| 348 | 352 |
| 349 if (skip_drawing_root_render_pass) { | 353 if (!skip_drawing_root_render_pass) |
| 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); | 354 DrawRenderPassAndExecuteCopyRequests(root_render_pass); |
| 361 } | |
| 362 | 355 |
| 363 FinishDrawingFrame(); | 356 FinishDrawingFrame(); |
| 364 render_passes_in_draw_order->clear(); | 357 render_passes_in_draw_order->clear(); |
| 365 render_pass_filters_.clear(); | 358 render_pass_filters_.clear(); |
| 366 render_pass_background_filters_.clear(); | 359 render_pass_background_filters_.clear(); |
| 367 | 360 |
| 368 current_frame_valid_ = false; | 361 current_frame_valid_ = false; |
| 369 } | 362 } |
| 370 | 363 |
| 371 gfx::Rect DirectRenderer::DrawingFrame::ComputeScissorRectForRenderPass() | 364 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) { | 656 gfx::Size DirectRenderer::RenderPassTextureSize(const RenderPass* render_pass) { |
| 664 return render_pass->output_rect.size(); | 657 return render_pass->output_rect.size(); |
| 665 } | 658 } |
| 666 | 659 |
| 667 void DirectRenderer::SetCurrentFrameForTesting(const DrawingFrame& frame) { | 660 void DirectRenderer::SetCurrentFrameForTesting(const DrawingFrame& frame) { |
| 668 current_frame_valid_ = true; | 661 current_frame_valid_ = true; |
| 669 current_frame_ = frame; | 662 current_frame_ = frame; |
| 670 } | 663 } |
| 671 | 664 |
| 672 } // namespace cc | 665 } // namespace cc |
| OLD | NEW |