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

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

Issue 2646243002: Use IDCompositionSurface to implement DirectCompositionSurfaceWin. (Closed)
Patch Set: more changes Created 3 years, 11 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 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 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
80 overlay_processor_->Initialize(); 80 overlay_processor_->Initialize();
81 81
82 auto* context_provider = output_surface_->context_provider(); 82 auto* context_provider = output_surface_->context_provider();
83 83
84 use_partial_swap_ = settings_->partial_swap_enabled && CanPartialSwap(); 84 use_partial_swap_ = settings_->partial_swap_enabled && CanPartialSwap();
85 allow_empty_swap_ = use_partial_swap_; 85 allow_empty_swap_ = use_partial_swap_;
86 if (context_provider && 86 if (context_provider &&
87 context_provider->ContextCapabilities().commit_overlay_planes) 87 context_provider->ContextCapabilities().commit_overlay_planes)
88 allow_empty_swap_ = true; 88 allow_empty_swap_ = true;
89 89
90 if (context_provider &&
91 context_provider->ContextCapabilities().set_draw_rectangle) {
92 use_set_draw_rectangle_ = true;
93 }
94
90 initialized_ = true; 95 initialized_ = true;
91 } 96 }
92 97
93 // static 98 // static
94 gfx::RectF DirectRenderer::QuadVertexRect() { 99 gfx::RectF DirectRenderer::QuadVertexRect() {
95 return gfx::RectF(-0.5f, -0.5f, 1.f, 1.f); 100 return gfx::RectF(-0.5f, -0.5f, 1.f, 1.f);
96 } 101 }
97 102
98 // static 103 // static
99 void DirectRenderer::QuadRectTransform(gfx::Transform* quad_rect_transform, 104 void DirectRenderer::QuadRectTransform(gfx::Transform* quad_rect_transform,
(...skipping 391 matching lines...) Expand 10 before | Expand all | Expand 10 after
491 if (frame->current_render_pass == frame->root_render_pass) { 496 if (frame->current_render_pass == frame->root_render_pass) {
492 render_pass_scissor_in_draw_space.Intersect( 497 render_pass_scissor_in_draw_space.Intersect(
493 DeviceViewportRectInDrawSpace(frame)); 498 DeviceViewportRectInDrawSpace(frame));
494 } 499 }
495 500
496 if (use_partial_swap_) { 501 if (use_partial_swap_) {
497 render_pass_scissor_in_draw_space.Intersect( 502 render_pass_scissor_in_draw_space.Intersect(
498 ComputeScissorRectForRenderPass(frame)); 503 ComputeScissorRectForRenderPass(frame));
499 } 504 }
500 505
501 bool render_pass_is_clipped =
502 !render_pass_scissor_in_draw_space.Contains(surface_rect_in_draw_space);
503 bool is_root_render_pass = 506 bool is_root_render_pass =
504 frame->current_render_pass == frame->root_render_pass; 507 frame->current_render_pass == frame->root_render_pass;
508 bool render_pass_is_clipped =
509 (use_set_draw_rectangle_ && is_root_render_pass) ||
510 !render_pass_scissor_in_draw_space.Contains(surface_rect_in_draw_space);
505 bool has_external_stencil_test = 511 bool has_external_stencil_test =
506 is_root_render_pass && output_surface_->HasExternalStencilTest(); 512 is_root_render_pass && output_surface_->HasExternalStencilTest();
507 bool should_clear_surface = 513 bool should_clear_surface =
508 !has_external_stencil_test && 514 !has_external_stencil_test &&
509 (!is_root_render_pass || settings_->should_clear_root_render_pass); 515 (!is_root_render_pass || settings_->should_clear_root_render_pass);
510 516
511 // If |has_external_stencil_test| we can't discard or clear. Make sure we 517 // If |has_external_stencil_test| we can't discard or clear. Make sure we
512 // don't need to. 518 // don't need to.
513 DCHECK(!has_external_stencil_test || 519 DCHECK(!has_external_stencil_test ||
514 !frame->current_render_pass->has_transparent_background); 520 !frame->current_render_pass->has_transparent_background);
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
565 DoDrawQuad(frame, &quad, nullptr); 571 DoDrawQuad(frame, &quad, nullptr);
566 } 572 }
567 FlushPolygons(&poly_list, frame, render_pass_scissor_in_draw_space, 573 FlushPolygons(&poly_list, frame, render_pass_scissor_in_draw_space,
568 render_pass_is_clipped); 574 render_pass_is_clipped);
569 FinishDrawingQuadList(); 575 FinishDrawingQuadList();
570 } 576 }
571 577
572 bool DirectRenderer::UseRenderPass(DrawingFrame* frame, 578 bool DirectRenderer::UseRenderPass(DrawingFrame* frame,
573 const RenderPass* render_pass) { 579 const RenderPass* render_pass) {
574 frame->current_render_pass = render_pass; 580 frame->current_render_pass = render_pass;
575 frame->current_texture = NULL; 581 frame->current_texture = NULL;
sunnyps 2017/01/28 01:33:58 nit: nullptr
576 if (render_pass == frame->root_render_pass) { 582 if (render_pass == frame->root_render_pass) {
577 BindFramebufferToOutputSurface(frame); 583 BindFramebufferToOutputSurface(frame);
584
585 if (use_set_draw_rectangle_)
586 output_surface_->SetDrawRectangle(frame->root_damage_rect);
587
578 InitializeViewport(frame, render_pass->output_rect, 588 InitializeViewport(frame, render_pass->output_rect,
579 gfx::Rect(frame->device_viewport_size), 589 gfx::Rect(frame->device_viewport_size),
580 frame->device_viewport_size); 590 frame->device_viewport_size);
581 return true; 591 return true;
582 } 592 }
583 593
584 ScopedResource* texture = render_pass_textures_[render_pass->id].get(); 594 ScopedResource* texture = render_pass_textures_[render_pass->id].get();
585 DCHECK(texture); 595 DCHECK(texture);
586 596
587 gfx::Size size = RenderPassTextureSize(render_pass); 597 gfx::Size size = RenderPassTextureSize(render_pass);
(...skipping 20 matching lines...) Expand all
608 auto iter = render_pass_textures_.find(render_pass_id); 618 auto iter = render_pass_textures_.find(render_pass_id);
609 return iter != render_pass_textures_.end() && iter->second->id(); 619 return iter != render_pass_textures_.end() && iter->second->id();
610 } 620 }
611 621
612 // static 622 // static
613 gfx::Size DirectRenderer::RenderPassTextureSize(const RenderPass* render_pass) { 623 gfx::Size DirectRenderer::RenderPassTextureSize(const RenderPass* render_pass) {
614 return render_pass->output_rect.size(); 624 return render_pass->output_rect.size();
615 } 625 }
616 626
617 } // namespace cc 627 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698