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

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

Issue 1542513002: Switch to standard integer types in gpu/. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix Created 5 years 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
7 #include <stddef.h>
8 #include <stdint.h>
9
6 #include "base/logging.h" 10 #include "base/logging.h"
11 #include "base/macros.h"
7 #include "base/strings/stringprintf.h" 12 #include "base/strings/stringprintf.h"
8 #include "gpu/command_buffer/common/gles2_cmd_utils.h" 13 #include "gpu/command_buffer/common/gles2_cmd_utils.h"
9 #include "gpu/command_buffer/service/framebuffer_completeness_cache.h" 14 #include "gpu/command_buffer/service/framebuffer_completeness_cache.h"
10 #include "gpu/command_buffer/service/renderbuffer_manager.h" 15 #include "gpu/command_buffer/service/renderbuffer_manager.h"
11 #include "gpu/command_buffer/service/texture_manager.h" 16 #include "gpu/command_buffer/service/texture_manager.h"
12 #include "ui/gl/gl_bindings.h" 17 #include "ui/gl/gl_bindings.h"
13 18
14 namespace gpu { 19 namespace gpu {
15 namespace gles2 { 20 namespace gles2 {
16 21
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 return renderbuffer_.get() == renderbuffer; 67 return renderbuffer_.get() == renderbuffer;
63 } 68 }
64 69
65 bool CanRenderTo() const override { return true; } 70 bool CanRenderTo() const override { return true; }
66 71
67 void DetachFromFramebuffer(Framebuffer* framebuffer) const override { 72 void DetachFromFramebuffer(Framebuffer* framebuffer) const override {
68 // Nothing to do for renderbuffers. 73 // Nothing to do for renderbuffers.
69 } 74 }
70 75
71 bool ValidForAttachmentType(GLenum attachment_type, 76 bool ValidForAttachmentType(GLenum attachment_type,
72 uint32 max_color_attachments) override { 77 uint32_t max_color_attachments) override {
73 uint32 need = GLES2Util::GetChannelsNeededForAttachmentType( 78 uint32_t need = GLES2Util::GetChannelsNeededForAttachmentType(
74 attachment_type, max_color_attachments); 79 attachment_type, max_color_attachments);
75 uint32 have = GLES2Util::GetChannelsForFormat(internal_format()); 80 uint32_t have = GLES2Util::GetChannelsForFormat(internal_format());
76 return (need & have) != 0; 81 return (need & have) != 0;
77 } 82 }
78 83
79 Renderbuffer* renderbuffer() const { 84 Renderbuffer* renderbuffer() const {
80 return renderbuffer_.get(); 85 return renderbuffer_.get();
81 } 86 }
82 87
83 size_t GetSignatureSize(TextureManager* texture_manager) const override { 88 size_t GetSignatureSize(TextureManager* texture_manager) const override {
84 return renderbuffer_->GetSignatureSize(); 89 return renderbuffer_->GetSignatureSize();
85 } 90 }
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
180 185
181 bool CanRenderTo() const override { 186 bool CanRenderTo() const override {
182 return texture_ref_->texture()->CanRenderTo(); 187 return texture_ref_->texture()->CanRenderTo();
183 } 188 }
184 189
185 void DetachFromFramebuffer(Framebuffer* framebuffer) const override { 190 void DetachFromFramebuffer(Framebuffer* framebuffer) const override {
186 texture_ref_->texture()->DetachFromFramebuffer(); 191 texture_ref_->texture()->DetachFromFramebuffer();
187 } 192 }
188 193
189 bool ValidForAttachmentType(GLenum attachment_type, 194 bool ValidForAttachmentType(GLenum attachment_type,
190 uint32 max_color_attachments) override { 195 uint32_t max_color_attachments) override {
191 GLenum type = 0; 196 GLenum type = 0;
192 GLenum internal_format = 0; 197 GLenum internal_format = 0;
193 if (!texture_ref_->texture()->GetLevelType( 198 if (!texture_ref_->texture()->GetLevelType(
194 target_, level_, &type, &internal_format)) { 199 target_, level_, &type, &internal_format)) {
195 return false; 200 return false;
196 } 201 }
197 uint32 need = GLES2Util::GetChannelsNeededForAttachmentType( 202 uint32_t need = GLES2Util::GetChannelsNeededForAttachmentType(
198 attachment_type, max_color_attachments); 203 attachment_type, max_color_attachments);
199 uint32 have = GLES2Util::GetChannelsForFormat(internal_format); 204 uint32_t have = GLES2Util::GetChannelsForFormat(internal_format);
200 205
201 // Workaround for NVIDIA drivers that incorrectly expose these formats as 206 // Workaround for NVIDIA drivers that incorrectly expose these formats as
202 // renderable: 207 // renderable:
203 if (internal_format == GL_LUMINANCE || internal_format == GL_ALPHA || 208 if (internal_format == GL_LUMINANCE || internal_format == GL_ALPHA ||
204 internal_format == GL_LUMINANCE_ALPHA) { 209 internal_format == GL_LUMINANCE_ALPHA) {
205 return false; 210 return false;
206 } 211 }
207 return (need & have) != 0; 212 return (need & have) != 0;
208 } 213 }
209 214
(...skipping 19 matching lines...) Expand all
229 scoped_refptr<TextureRef> texture_ref_; 234 scoped_refptr<TextureRef> texture_ref_;
230 GLenum target_; 235 GLenum target_;
231 GLint level_; 236 GLint level_;
232 GLsizei samples_; 237 GLsizei samples_;
233 GLint layer_; 238 GLint layer_;
234 239
235 DISALLOW_COPY_AND_ASSIGN(TextureAttachment); 240 DISALLOW_COPY_AND_ASSIGN(TextureAttachment);
236 }; 241 };
237 242
238 FramebufferManager::FramebufferManager( 243 FramebufferManager::FramebufferManager(
239 uint32 max_draw_buffers, 244 uint32_t max_draw_buffers,
240 uint32 max_color_attachments, 245 uint32_t max_color_attachments,
241 ContextType context_type, 246 ContextType context_type,
242 const scoped_refptr<FramebufferCompletenessCache>& 247 const scoped_refptr<FramebufferCompletenessCache>&
243 framebuffer_combo_complete_cache) 248 framebuffer_combo_complete_cache)
244 : framebuffer_state_change_count_(1), 249 : framebuffer_state_change_count_(1),
245 framebuffer_count_(0), 250 framebuffer_count_(0),
246 have_context_(true), 251 have_context_(true),
247 max_draw_buffers_(max_draw_buffers), 252 max_draw_buffers_(max_draw_buffers),
248 max_color_attachments_(max_color_attachments), 253 max_color_attachments_(max_color_attachments),
249 context_type_(context_type), 254 context_type_(context_type),
250 framebuffer_combo_complete_cache_(framebuffer_combo_complete_cache) { 255 framebuffer_combo_complete_cache_(framebuffer_combo_complete_cache) {
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
299 : manager_(manager), 304 : manager_(manager),
300 deleted_(false), 305 deleted_(false),
301 service_id_(service_id), 306 service_id_(service_id),
302 has_been_bound_(false), 307 has_been_bound_(false),
303 framebuffer_complete_state_count_id_(0), 308 framebuffer_complete_state_count_id_(0),
304 read_buffer_(GL_COLOR_ATTACHMENT0) { 309 read_buffer_(GL_COLOR_ATTACHMENT0) {
305 manager->StartTracking(this); 310 manager->StartTracking(this);
306 DCHECK_GT(manager->max_draw_buffers_, 0u); 311 DCHECK_GT(manager->max_draw_buffers_, 0u);
307 draw_buffers_.reset(new GLenum[manager->max_draw_buffers_]); 312 draw_buffers_.reset(new GLenum[manager->max_draw_buffers_]);
308 draw_buffers_[0] = GL_COLOR_ATTACHMENT0; 313 draw_buffers_[0] = GL_COLOR_ATTACHMENT0;
309 for (uint32 i = 1; i < manager->max_draw_buffers_; ++i) 314 for (uint32_t i = 1; i < manager->max_draw_buffers_; ++i)
310 draw_buffers_[i] = GL_NONE; 315 draw_buffers_[i] = GL_NONE;
311 } 316 }
312 317
313 Framebuffer::~Framebuffer() { 318 Framebuffer::~Framebuffer() {
314 if (manager_) { 319 if (manager_) {
315 if (manager_->have_context_) { 320 if (manager_->have_context_) {
316 GLuint id = service_id(); 321 GLuint id = service_id();
317 glDeleteFramebuffersEXT(1, &id); 322 glDeleteFramebuffersEXT(1, &id);
318 } 323 }
319 manager_->StopTracking(this); 324 manager_->StopTracking(this);
(...skipping 20 matching lines...) Expand all
340 const Attachment* attachment = it->second.get(); 345 const Attachment* attachment = it->second.get();
341 if (!attachment->cleared()) 346 if (!attachment->cleared())
342 return true; 347 return true;
343 } 348 }
344 } 349 }
345 return false; 350 return false;
346 } 351 }
347 352
348 void Framebuffer::ChangeDrawBuffersHelper(bool recover) const { 353 void Framebuffer::ChangeDrawBuffersHelper(bool recover) const {
349 scoped_ptr<GLenum[]> buffers(new GLenum[manager_->max_draw_buffers_]); 354 scoped_ptr<GLenum[]> buffers(new GLenum[manager_->max_draw_buffers_]);
350 for (uint32 i = 0; i < manager_->max_draw_buffers_; ++i) 355 for (uint32_t i = 0; i < manager_->max_draw_buffers_; ++i)
351 buffers[i] = GL_NONE; 356 buffers[i] = GL_NONE;
352 for (AttachmentMap::const_iterator it = attachments_.begin(); 357 for (AttachmentMap::const_iterator it = attachments_.begin();
353 it != attachments_.end(); ++it) { 358 it != attachments_.end(); ++it) {
354 if (it->first >= GL_COLOR_ATTACHMENT0 && 359 if (it->first >= GL_COLOR_ATTACHMENT0 &&
355 it->first < GL_COLOR_ATTACHMENT0 + manager_->max_draw_buffers_ && 360 it->first < GL_COLOR_ATTACHMENT0 + manager_->max_draw_buffers_ &&
356 !GLES2Util::IsIntegerFormat(it->second->internal_format())) { 361 !GLES2Util::IsIntegerFormat(it->second->internal_format())) {
357 buffers[it->first - GL_COLOR_ATTACHMENT0] = it->first; 362 buffers[it->first - GL_COLOR_ATTACHMENT0] = it->first;
358 } 363 }
359 } 364 }
360 bool different = false; 365 bool different = false;
361 for (uint32 i = 0; i < manager_->max_draw_buffers_; ++i) { 366 for (uint32_t i = 0; i < manager_->max_draw_buffers_; ++i) {
362 if (buffers[i] != draw_buffers_[i]) { 367 if (buffers[i] != draw_buffers_[i]) {
363 different = true; 368 different = true;
364 break; 369 break;
365 } 370 }
366 } 371 }
367 if (different) { 372 if (different) {
368 if (recover) 373 if (recover)
369 glDrawBuffersARB(manager_->max_draw_buffers_, draw_buffers_.get()); 374 glDrawBuffersARB(manager_->max_draw_buffers_, draw_buffers_.get());
370 else 375 else
371 glDrawBuffersARB(manager_->max_draw_buffers_, buffers.get()); 376 glDrawBuffersARB(manager_->max_draw_buffers_, buffers.get());
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
563 return draw_buffers_[index]; 568 return draw_buffers_[index];
564 } 569 }
565 570
566 void Framebuffer::SetDrawBuffers(GLsizei n, const GLenum* bufs) { 571 void Framebuffer::SetDrawBuffers(GLsizei n, const GLenum* bufs) {
567 DCHECK(n <= static_cast<GLsizei>(manager_->max_draw_buffers_)); 572 DCHECK(n <= static_cast<GLsizei>(manager_->max_draw_buffers_));
568 for (GLsizei i = 0; i < n; ++i) 573 for (GLsizei i = 0; i < n; ++i)
569 draw_buffers_[i] = bufs[i]; 574 draw_buffers_[i] = bufs[i];
570 } 575 }
571 576
572 bool Framebuffer::HasAlphaMRT() const { 577 bool Framebuffer::HasAlphaMRT() const {
573 for (uint32 i = 0; i < manager_->max_draw_buffers_; ++i) { 578 for (uint32_t i = 0; i < manager_->max_draw_buffers_; ++i) {
574 if (draw_buffers_[i] != GL_NONE) { 579 if (draw_buffers_[i] != GL_NONE) {
575 const Attachment* attachment = GetAttachment(draw_buffers_[i]); 580 const Attachment* attachment = GetAttachment(draw_buffers_[i]);
576 if (!attachment) 581 if (!attachment)
577 continue; 582 continue;
578 if ((GLES2Util::GetChannelsForFormat( 583 if ((GLES2Util::GetChannelsForFormat(
579 attachment->internal_format()) & 0x0008) != 0) 584 attachment->internal_format()) & 0x0008) != 0)
580 return true; 585 return true;
581 } 586 }
582 } 587 }
583 return false; 588 return false;
584 } 589 }
585 590
586 bool Framebuffer::HasSameInternalFormatsMRT() const { 591 bool Framebuffer::HasSameInternalFormatsMRT() const {
587 GLenum internal_format = 0; 592 GLenum internal_format = 0;
588 for (uint32 i = 0; i < manager_->max_draw_buffers_; ++i) { 593 for (uint32_t i = 0; i < manager_->max_draw_buffers_; ++i) {
589 if (draw_buffers_[i] != GL_NONE) { 594 if (draw_buffers_[i] != GL_NONE) {
590 const Attachment* attachment = GetAttachment(draw_buffers_[i]); 595 const Attachment* attachment = GetAttachment(draw_buffers_[i]);
591 if (!attachment) 596 if (!attachment)
592 continue; 597 continue;
593 if (!internal_format) { 598 if (!internal_format) {
594 internal_format = attachment->internal_format(); 599 internal_format = attachment->internal_format();
595 } else if (internal_format != attachment->internal_format()) { 600 } else if (internal_format != attachment->internal_format()) {
596 return false; 601 return false;
597 } 602 }
598 } 603 }
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
754 759
755 bool FramebufferManager::IsComplete( 760 bool FramebufferManager::IsComplete(
756 Framebuffer* framebuffer) { 761 Framebuffer* framebuffer) {
757 DCHECK(framebuffer); 762 DCHECK(framebuffer);
758 return framebuffer->framebuffer_complete_state_count_id() == 763 return framebuffer->framebuffer_complete_state_count_id() ==
759 framebuffer_state_change_count_; 764 framebuffer_state_change_count_;
760 } 765 }
761 766
762 } // namespace gles2 767 } // namespace gles2
763 } // namespace gpu 768 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/framebuffer_manager.h ('k') | gpu/command_buffer/service/framebuffer_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698