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

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

Issue 24239006: cc: Don't discard framebuffer when using partial swaps (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 7 years, 3 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 | Annotate | Revision Log
« 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 <utility> 7 #include <utility>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/containers/hash_tables.h" 10 #include "base/containers/hash_tables.h"
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after
326 void DirectRenderer::DrawRenderPass(DrawingFrame* frame, 326 void DirectRenderer::DrawRenderPass(DrawingFrame* frame,
327 const RenderPass* render_pass, 327 const RenderPass* render_pass,
328 bool allow_partial_swap) { 328 bool allow_partial_swap) {
329 TRACE_EVENT0("cc", "DirectRenderer::DrawRenderPass"); 329 TRACE_EVENT0("cc", "DirectRenderer::DrawRenderPass");
330 if (!UseRenderPass(frame, render_pass)) 330 if (!UseRenderPass(frame, render_pass))
331 return; 331 return;
332 332
333 bool using_scissor_as_optimization = 333 bool using_scissor_as_optimization =
334 Capabilities().using_partial_swap && allow_partial_swap; 334 Capabilities().using_partial_swap && allow_partial_swap;
335 gfx::RectF render_pass_scissor; 335 gfx::RectF render_pass_scissor;
336 bool redraw_rect_covers_full_surface = true;
danakj 2013/09/20 00:41:46 ok cool.. don't hate me for suggesting: "draw_rect
piman 2013/09/20 00:51:51 Done.
337 if (frame->current_render_pass == frame->root_render_pass &&
338 !client_->DeviceViewport().Contains(
339 gfx::Rect(output_surface_->SurfaceSize())))
340 redraw_rect_covers_full_surface = false;
336 341
337 if (using_scissor_as_optimization) { 342 if (using_scissor_as_optimization) {
338 render_pass_scissor = ComputeScissorRectForRenderPass(frame); 343 render_pass_scissor = ComputeScissorRectForRenderPass(frame);
339 SetScissorTestRectInDrawSpace(frame, render_pass_scissor); 344 SetScissorTestRectInDrawSpace(frame, render_pass_scissor);
345 if (!render_pass_scissor.Contains(frame->current_render_pass->output_rect))
346 redraw_rect_covers_full_surface = false;
340 } 347 }
341 348
342 if (frame->current_render_pass != frame->root_render_pass || 349 if (frame->current_render_pass != frame->root_render_pass ||
343 settings_->should_clear_root_render_pass) { 350 settings_->should_clear_root_render_pass) {
344 if (NeedDeviceClip(frame)) 351 if (NeedDeviceClip(frame)) {
345 SetScissorTestRect(DeviceClipRect(frame)); 352 SetScissorTestRect(DeviceClipRect(frame));
346 else if (!using_scissor_as_optimization) 353 redraw_rect_covers_full_surface = false;
354 } else if (!using_scissor_as_optimization) {
347 EnsureScissorTestDisabled(); 355 EnsureScissorTestDisabled();
348 ClearFramebuffer(frame); 356 }
357
358 bool has_external_stencil_test =
359 output_surface_->HasExternalStencilTest() &&
360 frame->current_render_pass == frame->root_render_pass;
361
362 DiscardPixels(has_external_stencil_test,
363 redraw_rect_covers_full_surface);
364 ClearFramebuffer(frame,
danakj 2013/09/20 00:41:46 git cl format? :)
piman 2013/09/20 00:51:51 Done.
365 has_external_stencil_test);
349 } 366 }
350 367
351 const QuadList& quad_list = render_pass->quad_list; 368 const QuadList& quad_list = render_pass->quad_list;
352 for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin(); 369 for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin();
353 it != quad_list.BackToFrontEnd(); 370 it != quad_list.BackToFrontEnd();
354 ++it) { 371 ++it) {
355 const DrawQuad& quad = *(*it); 372 const DrawQuad& quad = *(*it);
356 bool should_skip_quad = false; 373 bool should_skip_quad = false;
357 374
358 if (using_scissor_as_optimization) { 375 if (using_scissor_as_optimization) {
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
420 return render_pass->output_rect.size(); 437 return render_pass->output_rect.size();
421 } 438 }
422 439
423 // static 440 // static
424 ResourceFormat DirectRenderer::RenderPassTextureFormat( 441 ResourceFormat DirectRenderer::RenderPassTextureFormat(
425 const RenderPass* render_pass) { 442 const RenderPass* render_pass) {
426 return RGBA_8888; 443 return RGBA_8888;
427 } 444 }
428 445
429 } // namespace cc 446 } // 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