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

Side by Side Diff: cc/output/direct_renderer.cc

Issue 2253823002: cc: Remove all impl-side caps from RendererCapabilitiesImpl. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@delete-renderer-base-class
Patch Set: renderercaps: ennereview Created 4 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
« no previous file with comments | « cc/output/direct_renderer.h ('k') | cc/output/gl_renderer.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
65 65
66 DirectRenderer::DrawingFrame::DrawingFrame() = default; 66 DirectRenderer::DrawingFrame::DrawingFrame() = default;
67 DirectRenderer::DrawingFrame::~DrawingFrame() = default; 67 DirectRenderer::DrawingFrame::~DrawingFrame() = default;
68 68
69 DirectRenderer::DirectRenderer(const RendererSettings* settings, 69 DirectRenderer::DirectRenderer(const RendererSettings* settings,
70 OutputSurface* output_surface, 70 OutputSurface* output_surface,
71 ResourceProvider* resource_provider) 71 ResourceProvider* resource_provider)
72 : settings_(settings), 72 : settings_(settings),
73 output_surface_(output_surface), 73 output_surface_(output_surface),
74 resource_provider_(resource_provider), 74 resource_provider_(resource_provider),
75 overlay_processor_(new OverlayProcessor(output_surface)) { 75 overlay_processor_(new OverlayProcessor(output_surface)) {}
76 // TODO(danakj): This should not be happening in the constructor.
77 overlay_processor_->Initialize();
78 }
79 76
80 DirectRenderer::~DirectRenderer() = default; 77 DirectRenderer::~DirectRenderer() = default;
81 78
79 void DirectRenderer::Initialize() {
80 overlay_processor_->Initialize();
81
82 auto* context_provider = output_surface_->context_provider();
83
84 use_partial_swap_ = settings_->partial_swap_enabled && CanPartialSwap();
85 allow_empty_swap_ = use_partial_swap_;
86 if (context_provider &&
87 context_provider->ContextCapabilities().commit_overlay_planes)
88 allow_empty_swap_ = true;
89
90 initialized_ = true;
91 }
92
82 // static 93 // static
83 gfx::RectF DirectRenderer::QuadVertexRect() { 94 gfx::RectF DirectRenderer::QuadVertexRect() {
84 return gfx::RectF(-0.5f, -0.5f, 1.f, 1.f); 95 return gfx::RectF(-0.5f, -0.5f, 1.f, 1.f);
85 } 96 }
86 97
87 // static 98 // static
88 void DirectRenderer::QuadRectTransform(gfx::Transform* quad_rect_transform, 99 void DirectRenderer::QuadRectTransform(gfx::Transform* quad_rect_transform,
89 const gfx::Transform& quad_transform, 100 const gfx::Transform& quad_transform,
90 const gfx::RectF& quad_rect) { 101 const gfx::RectF& quad_rect) {
91 *quad_rect_transform = quad_transform; 102 *quad_rect_transform = quad_transform;
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
138 window_rect.set_y(current_surface_size_.height() - window_rect.bottom()); 149 window_rect.set_y(current_surface_size_.height() - window_rect.bottom());
139 return window_rect; 150 return window_rect;
140 } 151 }
141 152
142 const TileDrawQuad* DirectRenderer::CanPassBeDrawnDirectly( 153 const TileDrawQuad* DirectRenderer::CanPassBeDrawnDirectly(
143 const RenderPass* pass) { 154 const RenderPass* pass) {
144 return nullptr; 155 return nullptr;
145 } 156 }
146 157
147 void DirectRenderer::SetVisible(bool visible) { 158 void DirectRenderer::SetVisible(bool visible) {
159 DCHECK(initialized_);
148 if (visible_ == visible) 160 if (visible_ == visible)
149 return; 161 return;
150 visible_ = visible; 162 visible_ = visible;
151 DidChangeVisibility(); 163 DidChangeVisibility();
152 } 164 }
153 165
154 void DirectRenderer::DecideRenderPassAllocationsForFrame( 166 void DirectRenderer::DecideRenderPassAllocationsForFrame(
155 const RenderPassList& render_passes_in_draw_order) { 167 const RenderPassList& render_passes_in_draw_order) {
156 render_pass_bypass_quads_.clear(); 168 render_pass_bypass_quads_.clear();
157 169
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
254 } 266 }
255 267
256 // Attempt to replace some or all of the quads of the root render pass with 268 // Attempt to replace some or all of the quads of the root render pass with
257 // overlays. 269 // overlays.
258 overlay_processor_->ProcessForOverlays( 270 overlay_processor_->ProcessForOverlays(
259 resource_provider_, root_render_pass, &frame.overlay_list, 271 resource_provider_, root_render_pass, &frame.overlay_list,
260 &frame.ca_layer_overlay_list, &frame.root_damage_rect); 272 &frame.ca_layer_overlay_list, &frame.root_damage_rect);
261 273
262 // We can skip all drawing if the damage rect is now empty. 274 // We can skip all drawing if the damage rect is now empty.
263 bool skip_drawing_root_render_pass = 275 bool skip_drawing_root_render_pass =
264 frame.root_damage_rect.IsEmpty() && Capabilities().allow_empty_swap; 276 frame.root_damage_rect.IsEmpty() && allow_empty_swap_;
265 277
266 // If we have to draw but don't support partial swap, the whole output should 278 // If we have to draw but don't support partial swap, the whole output should
267 // be considered damaged. 279 // be considered damaged.
268 if (!skip_drawing_root_render_pass && !Capabilities().using_partial_swap) 280 if (!skip_drawing_root_render_pass && !use_partial_swap_)
269 frame.root_damage_rect = root_render_pass->output_rect; 281 frame.root_damage_rect = root_render_pass->output_rect;
270 282
271 if (skip_drawing_root_render_pass) { 283 if (skip_drawing_root_render_pass) {
272 // If any of the overlays is the output surface, then ensure that the 284 // If any of the overlays is the output surface, then ensure that the
273 // backbuffer be allocated (allocation of the backbuffer is a side-effect 285 // backbuffer be allocated (allocation of the backbuffer is a side-effect
274 // of BindFramebufferToOutputSurface). 286 // of BindFramebufferToOutputSurface).
275 for (auto& overlay : frame.overlay_list) { 287 for (auto& overlay : frame.overlay_list) {
276 if (overlay.use_output_surface_for_resource) { 288 if (overlay.use_output_surface_for_resource) {
277 BindFramebufferToOutputSurface(&frame); 289 BindFramebufferToOutputSurface(&frame);
278 break; 290 break;
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
444 456
445 const gfx::Rect surface_rect_in_draw_space = 457 const gfx::Rect surface_rect_in_draw_space =
446 OutputSurfaceRectInDrawSpace(frame); 458 OutputSurfaceRectInDrawSpace(frame);
447 gfx::Rect render_pass_scissor_in_draw_space = surface_rect_in_draw_space; 459 gfx::Rect render_pass_scissor_in_draw_space = surface_rect_in_draw_space;
448 460
449 if (frame->current_render_pass == frame->root_render_pass) { 461 if (frame->current_render_pass == frame->root_render_pass) {
450 render_pass_scissor_in_draw_space.Intersect( 462 render_pass_scissor_in_draw_space.Intersect(
451 DeviceViewportRectInDrawSpace(frame)); 463 DeviceViewportRectInDrawSpace(frame));
452 } 464 }
453 465
454 if (Capabilities().using_partial_swap) { 466 if (use_partial_swap_) {
455 render_pass_scissor_in_draw_space.Intersect( 467 render_pass_scissor_in_draw_space.Intersect(
456 ComputeScissorRectForRenderPass(frame)); 468 ComputeScissorRectForRenderPass(frame));
457 } 469 }
458 470
459 if (NeedDeviceClip(frame)) { 471 if (NeedDeviceClip(frame)) {
460 render_pass_scissor_in_draw_space.Intersect( 472 render_pass_scissor_in_draw_space.Intersect(
461 DeviceClipRectInDrawSpace(frame)); 473 DeviceClipRectInDrawSpace(frame));
462 } 474 }
463 475
464 bool render_pass_is_clipped = 476 bool render_pass_is_clipped =
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
573 auto iter = render_pass_textures_.find(id); 585 auto iter = render_pass_textures_.find(id);
574 return iter != render_pass_textures_.end() && iter->second->id(); 586 return iter != render_pass_textures_.end() && iter->second->id();
575 } 587 }
576 588
577 // static 589 // static
578 gfx::Size DirectRenderer::RenderPassTextureSize(const RenderPass* render_pass) { 590 gfx::Size DirectRenderer::RenderPassTextureSize(const RenderPass* render_pass) {
579 return render_pass->output_rect.size(); 591 return render_pass->output_rect.size();
580 } 592 }
581 593
582 } // namespace cc 594 } // namespace cc
OLDNEW
« no previous file with comments | « cc/output/direct_renderer.h ('k') | cc/output/gl_renderer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698