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

Side by Side Diff: gpu/command_buffer/service/framebuffer_manager.cc

Issue 2149523002: Make invalidateFramebuffer no-op for DEPTH_STENCIL attachment (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Make invalidateFramebuffer no-op for DEPTH_STENCIL attachment Created 4 years, 5 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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 "gpu/command_buffer/service/framebuffer_manager.h" 5 #include "gpu/command_buffer/service/framebuffer_manager.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 385 matching lines...) Expand 10 before | Expand all | Expand 10 after
396 GLenum attachment) const { 396 GLenum attachment) const {
397 AttachmentMap::const_iterator it = 397 AttachmentMap::const_iterator it =
398 attachments_.find(attachment); 398 attachments_.find(attachment);
399 if (it != attachments_.end()) { 399 if (it != attachments_.end()) {
400 const Attachment* attachment = it->second.get(); 400 const Attachment* attachment = it->second.get();
401 return !attachment->cleared(); 401 return !attachment->cleared();
402 } 402 }
403 return false; 403 return false;
404 } 404 }
405 405
406 bool Framebuffer::HasDepthStencilFormatAttachment(
407 GLenum attachment) const {
408 AttachmentMap::const_iterator it = attachments_.find(attachment);
409 if (it != attachments_.end()) {
410 const Attachment* attachment = it->second.get();
411 GLenum internal_format = attachment->internal_format();
412 return TextureManager::ExtractFormatFromStorageFormat(internal_format) ==
413 GL_DEPTH_STENCIL;
414 }
415 return false;
416 }
417
406 bool Framebuffer::HasUnclearedColorAttachments() const { 418 bool Framebuffer::HasUnclearedColorAttachments() const {
407 for (AttachmentMap::const_iterator it = attachments_.begin(); 419 for (AttachmentMap::const_iterator it = attachments_.begin();
408 it != attachments_.end(); ++it) { 420 it != attachments_.end(); ++it) {
409 if (it->first >= GL_COLOR_ATTACHMENT0 && 421 if (it->first >= GL_COLOR_ATTACHMENT0 &&
410 it->first < GL_COLOR_ATTACHMENT0 + manager_->max_draw_buffers_) { 422 it->first < GL_COLOR_ATTACHMENT0 + manager_->max_draw_buffers_) {
411 const Attachment* attachment = it->second.get(); 423 const Attachment* attachment = it->second.get();
412 if (!attachment->cleared()) 424 if (!attachment->cleared())
413 return true; 425 return true;
414 } 426 }
415 } 427 }
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
516 if (attachment->IsPartiallyCleared() || attachment->Is3D() || 528 if (attachment->IsPartiallyCleared() || attachment->Is3D() ||
517 GLES2Util::IsIntegerFormat(attachment->internal_format())) { 529 GLES2Util::IsIntegerFormat(attachment->internal_format())) {
518 texture_manager->ClearTextureLevel(decoder, 530 texture_manager->ClearTextureLevel(decoder,
519 attachment->texture(), 531 attachment->texture(),
520 attachment->target(), 532 attachment->target(),
521 attachment->level()); 533 attachment->level());
522 } 534 }
523 } 535 }
524 } 536 }
525 537
538 // TODO: when the texture or the renderbuffer in format DEPTH_STENCIL, mark
Ken Russell (switch to Gerrit) 2016/07/18 18:34:20 This TODO needs an owner; see https://google.githu
539 // the specific part (depth or stencil) of it as cleared or uncleared instead
540 // of the whole one.
526 void Framebuffer::MarkAttachmentAsCleared( 541 void Framebuffer::MarkAttachmentAsCleared(
527 RenderbufferManager* renderbuffer_manager, 542 RenderbufferManager* renderbuffer_manager,
528 TextureManager* texture_manager, 543 TextureManager* texture_manager,
529 GLenum attachment, 544 GLenum attachment,
530 bool cleared) { 545 bool cleared) {
531 AttachmentMap::iterator it = attachments_.find(attachment); 546 AttachmentMap::iterator it = attachments_.find(attachment);
532 if (it != attachments_.end()) { 547 if (it != attachments_.end()) {
533 Attachment* a = it->second.get(); 548 Attachment* a = it->second.get();
534 if (a->cleared() != cleared) { 549 if (a->cleared() != cleared) {
535 a->SetCleared(renderbuffer_manager, 550 a->SetCleared(renderbuffer_manager,
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
717 GLenum result = glCheckFramebufferStatusEXT(target); 732 GLenum result = glCheckFramebufferStatusEXT(target);
718 733
719 if (result == GL_FRAMEBUFFER_COMPLETE) { 734 if (result == GL_FRAMEBUFFER_COMPLETE) {
720 manager_->GetFramebufferComboCompleteCache()->SetComplete(signature); 735 manager_->GetFramebufferComboCompleteCache()->SetComplete(signature);
721 } 736 }
722 737
723 return result; 738 return result;
724 } 739 }
725 740
726 bool Framebuffer::IsCleared() const { 741 bool Framebuffer::IsCleared() const {
727 // are all the attachments cleaared? 742 // are all the attachments cleared?
728 for (AttachmentMap::const_iterator it = attachments_.begin(); 743 for (AttachmentMap::const_iterator it = attachments_.begin();
729 it != attachments_.end(); ++it) { 744 it != attachments_.end(); ++it) {
730 Attachment* attachment = it->second.get(); 745 Attachment* attachment = it->second.get();
731 if (!attachment->cleared()) { 746 if (!attachment->cleared()) {
732 return false; 747 return false;
733 } 748 }
734 } 749 }
735 return true; 750 return true;
736 } 751 }
737 752
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after
934 949
935 bool FramebufferManager::IsComplete( 950 bool FramebufferManager::IsComplete(
936 Framebuffer* framebuffer) { 951 Framebuffer* framebuffer) {
937 DCHECK(framebuffer); 952 DCHECK(framebuffer);
938 return framebuffer->framebuffer_complete_state_count_id() == 953 return framebuffer->framebuffer_complete_state_count_id() ==
939 framebuffer_state_change_count_; 954 framebuffer_state_change_count_;
940 } 955 }
941 956
942 } // namespace gles2 957 } // namespace gles2
943 } // namespace gpu 958 } // namespace gpu
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698