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

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

Issue 2646243002: Use IDCompositionSurface to implement DirectCompositionSurfaceWin. (Closed)
Patch Set: rebase Created 3 years, 10 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 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
81 overlay_processor_->Initialize(); 81 overlay_processor_->Initialize();
82 82
83 auto* context_provider = output_surface_->context_provider(); 83 auto* context_provider = output_surface_->context_provider();
84 84
85 use_partial_swap_ = settings_->partial_swap_enabled && CanPartialSwap(); 85 use_partial_swap_ = settings_->partial_swap_enabled && CanPartialSwap();
86 allow_empty_swap_ = use_partial_swap_; 86 allow_empty_swap_ = use_partial_swap_;
87 if (context_provider && 87 if (context_provider &&
88 context_provider->ContextCapabilities().commit_overlay_planes) 88 context_provider->ContextCapabilities().commit_overlay_planes)
89 allow_empty_swap_ = true; 89 allow_empty_swap_ = true;
90 90
91 if (context_provider &&
92 context_provider->ContextCapabilities().set_draw_rectangle) {
93 use_set_draw_rectangle_ = true;
94 }
95
91 initialized_ = true; 96 initialized_ = true;
92 } 97 }
93 98
94 // static 99 // static
95 gfx::RectF DirectRenderer::QuadVertexRect() { 100 gfx::RectF DirectRenderer::QuadVertexRect() {
96 return gfx::RectF(-0.5f, -0.5f, 1.f, 1.f); 101 return gfx::RectF(-0.5f, -0.5f, 1.f, 1.f);
97 } 102 }
98 103
99 // static 104 // static
100 void DirectRenderer::QuadRectTransform(gfx::Transform* quad_rect_transform, 105 void DirectRenderer::QuadRectTransform(gfx::Transform* quad_rect_transform,
(...skipping 411 matching lines...) Expand 10 before | Expand all | Expand 10 after
512 if (frame->current_render_pass == frame->root_render_pass) { 517 if (frame->current_render_pass == frame->root_render_pass) {
513 render_pass_scissor_in_draw_space.Intersect( 518 render_pass_scissor_in_draw_space.Intersect(
514 DeviceViewportRectInDrawSpace(frame)); 519 DeviceViewportRectInDrawSpace(frame));
515 } 520 }
516 521
517 if (use_partial_swap_) { 522 if (use_partial_swap_) {
518 render_pass_scissor_in_draw_space.Intersect( 523 render_pass_scissor_in_draw_space.Intersect(
519 ComputeScissorRectForRenderPass(frame)); 524 ComputeScissorRectForRenderPass(frame));
520 } 525 }
521 526
522 bool render_pass_is_clipped =
523 !render_pass_scissor_in_draw_space.Contains(surface_rect_in_draw_space);
524 bool is_root_render_pass = 527 bool is_root_render_pass =
525 frame->current_render_pass == frame->root_render_pass; 528 frame->current_render_pass == frame->root_render_pass;
529 bool render_pass_is_clipped =
530 (use_set_draw_rectangle_ && is_root_render_pass) ||
531 !render_pass_scissor_in_draw_space.Contains(surface_rect_in_draw_space);
526 bool has_external_stencil_test = 532 bool has_external_stencil_test =
527 is_root_render_pass && output_surface_->HasExternalStencilTest(); 533 is_root_render_pass && output_surface_->HasExternalStencilTest();
528 bool should_clear_surface = 534 bool should_clear_surface =
529 !has_external_stencil_test && 535 !has_external_stencil_test &&
530 (!is_root_render_pass || settings_->should_clear_root_render_pass); 536 (!is_root_render_pass || settings_->should_clear_root_render_pass);
531 537
532 // If |has_external_stencil_test| we can't discard or clear. Make sure we 538 // If |has_external_stencil_test| we can't discard or clear. Make sure we
533 // don't need to. 539 // don't need to.
534 DCHECK(!has_external_stencil_test || 540 DCHECK(!has_external_stencil_test ||
535 !frame->current_render_pass->has_transparent_background); 541 !frame->current_render_pass->has_transparent_background);
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
586 DoDrawQuad(frame, &quad, nullptr); 592 DoDrawQuad(frame, &quad, nullptr);
587 } 593 }
588 FlushPolygons(&poly_list, frame, render_pass_scissor_in_draw_space, 594 FlushPolygons(&poly_list, frame, render_pass_scissor_in_draw_space,
589 render_pass_is_clipped); 595 render_pass_is_clipped);
590 FinishDrawingQuadList(); 596 FinishDrawingQuadList();
591 } 597 }
592 598
593 bool DirectRenderer::UseRenderPass(DrawingFrame* frame, 599 bool DirectRenderer::UseRenderPass(DrawingFrame* frame,
594 const RenderPass* render_pass) { 600 const RenderPass* render_pass) {
595 frame->current_render_pass = render_pass; 601 frame->current_render_pass = render_pass;
596 frame->current_texture = NULL; 602 frame->current_texture = nullptr;
597 if (render_pass == frame->root_render_pass) { 603 if (render_pass == frame->root_render_pass) {
598 BindFramebufferToOutputSurface(frame); 604 BindFramebufferToOutputSurface(frame);
605
606 if (use_set_draw_rectangle_)
607 output_surface_->SetDrawRectangle(frame->root_damage_rect);
608
599 InitializeViewport(frame, render_pass->output_rect, 609 InitializeViewport(frame, render_pass->output_rect,
600 gfx::Rect(frame->device_viewport_size), 610 gfx::Rect(frame->device_viewport_size),
601 frame->device_viewport_size); 611 frame->device_viewport_size);
602 return true; 612 return true;
603 } 613 }
604 614
605 ScopedResource* texture = render_pass_textures_[render_pass->id].get(); 615 ScopedResource* texture = render_pass_textures_[render_pass->id].get();
606 DCHECK(texture); 616 DCHECK(texture);
607 617
608 gfx::Size size = RenderPassTextureSize(render_pass); 618 gfx::Size size = RenderPassTextureSize(render_pass);
(...skipping 20 matching lines...) Expand all
629 auto iter = render_pass_textures_.find(render_pass_id); 639 auto iter = render_pass_textures_.find(render_pass_id);
630 return iter != render_pass_textures_.end() && iter->second->id(); 640 return iter != render_pass_textures_.end() && iter->second->id();
631 } 641 }
632 642
633 // static 643 // static
634 gfx::Size DirectRenderer::RenderPassTextureSize(const RenderPass* render_pass) { 644 gfx::Size DirectRenderer::RenderPassTextureSize(const RenderPass* render_pass) {
635 return render_pass->output_rect.size(); 645 return render_pass->output_rect.size();
636 } 646 }
637 647
638 } // namespace cc 648 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698