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

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

Issue 593233002: Modified GPU command signature hash to use a binary representation. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: DCHECK signature size, fixed comments. Created 6 years, 2 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 #include "base/logging.h" 6 #include "base/logging.h"
7 #include "base/strings/stringprintf.h" 7 #include "base/strings/stringprintf.h"
8 #include "gpu/command_buffer/common/gles2_cmd_utils.h" 8 #include "gpu/command_buffer/common/gles2_cmd_utils.h"
9 #include "gpu/command_buffer/service/renderbuffer_manager.h" 9 #include "gpu/command_buffer/service/renderbuffer_manager.h"
10 #include "gpu/command_buffer/service/texture_manager.h" 10 #include "gpu/command_buffer/service/texture_manager.h"
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 uint32 need = GLES2Util::GetChannelsNeededForAttachmentType( 106 uint32 need = GLES2Util::GetChannelsNeededForAttachmentType(
107 attachment_type, max_color_attachments); 107 attachment_type, max_color_attachments);
108 uint32 have = GLES2Util::GetChannelsForFormat(internal_format()); 108 uint32 have = GLES2Util::GetChannelsForFormat(internal_format());
109 return (need & have) != 0; 109 return (need & have) != 0;
110 } 110 }
111 111
112 Renderbuffer* renderbuffer() const { 112 Renderbuffer* renderbuffer() const {
113 return renderbuffer_.get(); 113 return renderbuffer_.get();
114 } 114 }
115 115
116 virtual size_t GetSignatureSize(
117 TextureManager* texture_manager) const OVERRIDE {
118 return renderbuffer_->GetSignatureSize();
119 }
120
116 virtual void AddToSignature( 121 virtual void AddToSignature(
117 TextureManager* texture_manager, std::string* signature) const OVERRIDE { 122 TextureManager* texture_manager, std::string* signature) const OVERRIDE {
118 DCHECK(signature); 123 DCHECK(signature);
119 renderbuffer_->AddToSignature(signature); 124 renderbuffer_->AddToSignature(signature);
120 } 125 }
121 126
122 virtual void OnWillRenderTo() const OVERRIDE {} 127 virtual void OnWillRenderTo() const OVERRIDE {}
123 virtual void OnDidRenderTo() const OVERRIDE {} 128 virtual void OnDidRenderTo() const OVERRIDE {}
124 129
125 protected: 130 protected:
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
232 237
233 // Workaround for NVIDIA drivers that incorrectly expose these formats as 238 // Workaround for NVIDIA drivers that incorrectly expose these formats as
234 // renderable: 239 // renderable:
235 if (internal_format == GL_LUMINANCE || internal_format == GL_ALPHA || 240 if (internal_format == GL_LUMINANCE || internal_format == GL_ALPHA ||
236 internal_format == GL_LUMINANCE_ALPHA) { 241 internal_format == GL_LUMINANCE_ALPHA) {
237 return false; 242 return false;
238 } 243 }
239 return (need & have) != 0; 244 return (need & have) != 0;
240 } 245 }
241 246
247 virtual size_t GetSignatureSize(
248 TextureManager* texture_manager) const OVERRIDE {
249 return texture_manager->GetSignatureSize();
250 }
251
242 virtual void AddToSignature( 252 virtual void AddToSignature(
243 TextureManager* texture_manager, std::string* signature) const OVERRIDE { 253 TextureManager* texture_manager, std::string* signature) const OVERRIDE {
244 DCHECK(signature); 254 DCHECK(signature);
245 texture_manager->AddToSignature( 255 texture_manager->AddToSignature(
246 texture_ref_.get(), target_, level_, signature); 256 texture_ref_.get(), target_, level_, signature);
247 } 257 }
248 258
249 virtual void OnWillRenderTo() const OVERRIDE { 259 virtual void OnWillRenderTo() const OVERRIDE {
250 texture_ref_->texture()->OnWillModifyPixels(); 260 texture_ref_->texture()->OnWillModifyPixels();
251 } 261 }
(...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after
501 // This does not mean the framebuffer is actually complete. It just means our 511 // This does not mean the framebuffer is actually complete. It just means our
502 // checks passed. 512 // checks passed.
503 return GL_FRAMEBUFFER_COMPLETE; 513 return GL_FRAMEBUFFER_COMPLETE;
504 } 514 }
505 515
506 GLenum Framebuffer::GetStatus( 516 GLenum Framebuffer::GetStatus(
507 TextureManager* texture_manager, GLenum target) const { 517 TextureManager* texture_manager, GLenum target) const {
508 // Check if we have this combo already. 518 // Check if we have this combo already.
509 std::string signature; 519 std::string signature;
510 if (allow_framebuffer_combo_complete_map_) { 520 if (allow_framebuffer_combo_complete_map_) {
511 signature = base::StringPrintf("|FBO|target=%04x", target); 521 size_t signature_size = sizeof(target);
512 for (AttachmentMap::const_iterator it = attachments_.begin(); 522 for (AttachmentMap::const_iterator it = attachments_.begin();
513 it != attachments_.end(); ++it) { 523 it != attachments_.end(); ++it) {
514 Attachment* attachment = it->second.get(); 524 Attachment* attachment = it->second.get();
515 signature += 525 signature_size += sizeof(it->first) +
516 base::StringPrintf("|Attachment|attachmentpoint=%04x", it->first); 526 attachment->GetSignatureSize(texture_manager);
527 }
528
529 signature.reserve(signature_size);
530 signature.append(reinterpret_cast<const char*>(&target), sizeof(target));
531
532 for (AttachmentMap::const_iterator it = attachments_.begin();
533 it != attachments_.end(); ++it) {
534 Attachment* attachment = it->second.get();
535 signature.append(reinterpret_cast<const char*>(&it->first),
536 sizeof(it->first));
517 attachment->AddToSignature(texture_manager, &signature); 537 attachment->AddToSignature(texture_manager, &signature);
518 } 538 }
539 DCHECK(signature.size() == signature_size);
519 540
520 if (!framebuffer_combo_complete_map_) { 541 if (!framebuffer_combo_complete_map_) {
521 framebuffer_combo_complete_map_ = new FramebufferComboCompleteMap(); 542 framebuffer_combo_complete_map_ = new FramebufferComboCompleteMap();
522 } 543 }
523 544
524 FramebufferComboCompleteMap::const_iterator it = 545 FramebufferComboCompleteMap::const_iterator it =
525 framebuffer_combo_complete_map_->find(signature); 546 framebuffer_combo_complete_map_->find(signature);
526 if (it != framebuffer_combo_complete_map_->end()) { 547 if (it != framebuffer_combo_complete_map_->end()) {
527 return GL_FRAMEBUFFER_COMPLETE; 548 return GL_FRAMEBUFFER_COMPLETE;
528 } 549 }
(...skipping 29 matching lines...) Expand all
558 index < static_cast<GLsizei>(manager_->max_draw_buffers_)); 579 index < static_cast<GLsizei>(manager_->max_draw_buffers_));
559 return draw_buffers_[index]; 580 return draw_buffers_[index];
560 } 581 }
561 582
562 void Framebuffer::SetDrawBuffers(GLsizei n, const GLenum* bufs) { 583 void Framebuffer::SetDrawBuffers(GLsizei n, const GLenum* bufs) {
563 DCHECK(n <= static_cast<GLsizei>(manager_->max_draw_buffers_)); 584 DCHECK(n <= static_cast<GLsizei>(manager_->max_draw_buffers_));
564 for (GLsizei i = 0; i < n; ++i) 585 for (GLsizei i = 0; i < n; ++i)
565 draw_buffers_[i] = bufs[i]; 586 draw_buffers_[i] = bufs[i];
566 } 587 }
567 588
568
569
570 bool Framebuffer::HasAlphaMRT() const { 589 bool Framebuffer::HasAlphaMRT() const {
571 for (uint32 i = 0; i < manager_->max_draw_buffers_; ++i) { 590 for (uint32 i = 0; i < manager_->max_draw_buffers_; ++i) {
572 if (draw_buffers_[i] != GL_NONE) { 591 if (draw_buffers_[i] != GL_NONE) {
573 const Attachment* attachment = GetAttachment(draw_buffers_[i]); 592 const Attachment* attachment = GetAttachment(draw_buffers_[i]);
574 if (!attachment) 593 if (!attachment)
575 continue; 594 continue;
576 if ((GLES2Util::GetChannelsForFormat( 595 if ((GLES2Util::GetChannelsForFormat(
577 attachment->internal_format()) & 0x0008) != 0) 596 attachment->internal_format()) & 0x0008) != 0)
578 return true; 597 return true;
579 } 598 }
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
735 ++it) { 754 ++it) {
736 TextureDetachObserver* observer = *it; 755 TextureDetachObserver* observer = *it;
737 observer->OnTextureRefDetachedFromFramebuffer(texture); 756 observer->OnTextureRefDetachedFromFramebuffer(texture);
738 } 757 }
739 } 758 }
740 759
741 } // namespace gles2 760 } // namespace gles2
742 } // namespace gpu 761 } // namespace gpu
743 762
744 763
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/framebuffer_manager.h ('k') | gpu/command_buffer/service/renderbuffer_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698