Chromium Code Reviews| OLD | NEW |
|---|---|
| 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/renderbuffer_manager.h" | 5 #include "gpu/command_buffer/service/renderbuffer_manager.h" |
| 6 #include "base/debug/trace_event.h" | 6 #include "base/debug/trace_event.h" |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "base/strings/stringprintf.h" | 8 #include "base/strings/stringprintf.h" |
| 9 #include "gpu/command_buffer/common/gles2_cmd_utils.h" | 9 #include "gpu/command_buffer/common/gles2_cmd_utils.h" |
| 10 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" | 10 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" |
| 11 #include "gpu/command_buffer/service/memory_tracking.h" | 11 #include "gpu/command_buffer/service/memory_tracking.h" |
| 12 #include "ui/gl/gl_implementation.h" | 12 #include "ui/gl/gl_implementation.h" |
| 13 | 13 |
| 14 namespace gpu { | 14 namespace gpu { |
| 15 namespace gles2 { | 15 namespace gles2 { |
| 16 | 16 |
| 17 // The should contain everything to uniquely identify a Renderbuffer. | |
|
vmiura
2014/09/26 23:36:36
nit: This
David Yen
2014/09/29 16:42:58
Done.
| |
| 18 static const char RenderbufferTag[] = "|Renderbuffer|"; | |
| 19 struct RenderbufferSignature { | |
| 20 GLenum internal_format_; | |
| 21 GLsizei samples_; | |
| 22 GLsizei width_; | |
| 23 GLsizei height_; | |
| 24 | |
| 25 // Since we will be hashing this signature structure, the padding must be | |
| 26 // zero initialized. Although the C++11 specifications specify that this is | |
| 27 // true, we will use a constructor with a memset to further enforce it instead | |
| 28 // of relying on compilers adhering to this deep dark corner specification. | |
| 29 RenderbufferSignature(GLenum internal_format, | |
| 30 GLsizei samples, | |
| 31 GLsizei width, | |
| 32 GLsizei height) { | |
| 33 memset(this, 0, sizeof(RenderbufferSignature)); | |
| 34 internal_format_ = internal_format; | |
| 35 samples_ = samples; | |
| 36 width_ = width; | |
| 37 height_ = height; | |
| 38 } | |
| 39 }; | |
| 40 | |
| 17 RenderbufferManager::RenderbufferManager( | 41 RenderbufferManager::RenderbufferManager( |
| 18 MemoryTracker* memory_tracker, | 42 MemoryTracker* memory_tracker, |
| 19 GLint max_renderbuffer_size, | 43 GLint max_renderbuffer_size, |
| 20 GLint max_samples, | 44 GLint max_samples, |
| 21 bool depth24_supported) | 45 bool depth24_supported) |
| 22 : memory_tracker_( | 46 : memory_tracker_( |
| 23 new MemoryTypeTracker(memory_tracker, MemoryTracker::kUnmanaged)), | 47 new MemoryTypeTracker(memory_tracker, MemoryTracker::kUnmanaged)), |
| 24 max_renderbuffer_size_(max_renderbuffer_size), | 48 max_renderbuffer_size_(max_renderbuffer_size), |
| 25 max_samples_(max_samples), | 49 max_samples_(max_samples), |
| 26 depth24_supported_(depth24_supported), | 50 depth24_supported_(depth24_supported), |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 38 DCHECK_EQ(0, num_uncleared_renderbuffers_); | 62 DCHECK_EQ(0, num_uncleared_renderbuffers_); |
| 39 } | 63 } |
| 40 | 64 |
| 41 size_t Renderbuffer::EstimatedSize() { | 65 size_t Renderbuffer::EstimatedSize() { |
| 42 uint32 size = 0; | 66 uint32 size = 0; |
| 43 manager_->ComputeEstimatedRenderbufferSize( | 67 manager_->ComputeEstimatedRenderbufferSize( |
| 44 width_, height_, samples_, internal_format_, &size); | 68 width_, height_, samples_, internal_format_, &size); |
| 45 return size; | 69 return size; |
| 46 } | 70 } |
| 47 | 71 |
| 48 void Renderbuffer::AddToSignature( | 72 |
| 49 std::string* signature) const { | 73 size_t Renderbuffer::GetSignatureSize() const { |
| 74 return sizeof(RenderbufferTag) + sizeof(RenderbufferSignature); | |
| 75 } | |
| 76 | |
| 77 void Renderbuffer::AddToSignature(std::string* signature) const { | |
| 50 DCHECK(signature); | 78 DCHECK(signature); |
| 51 *signature += base::StringPrintf( | 79 RenderbufferSignature signature_data(internal_format_, |
| 52 "|Renderbuffer|internal_format=%04x|samples=%d|width=%d|height=%d", | 80 samples_, |
| 53 internal_format_, samples_, width_, height_); | 81 width_, |
| 82 height_); | |
| 83 | |
| 84 signature->append(RenderbufferTag, sizeof(RenderbufferTag)); | |
| 85 signature->append(reinterpret_cast<const char*>(&signature_data), | |
| 86 sizeof(signature_data)); | |
| 54 } | 87 } |
| 55 | 88 |
| 56 Renderbuffer::Renderbuffer(RenderbufferManager* manager, | 89 Renderbuffer::Renderbuffer(RenderbufferManager* manager, |
| 57 GLuint client_id, | 90 GLuint client_id, |
| 58 GLuint service_id) | 91 GLuint service_id) |
| 59 : manager_(manager), | 92 : manager_(manager), |
| 60 client_id_(client_id), | 93 client_id_(client_id), |
| 61 service_id_(service_id), | 94 service_id_(service_id), |
| 62 cleared_(true), | 95 cleared_(true), |
| 63 has_been_bound_(false), | 96 has_been_bound_(false), |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 191 if (impl_format == GL_DEPTH_COMPONENT16 && depth24_supported_) | 224 if (impl_format == GL_DEPTH_COMPONENT16 && depth24_supported_) |
| 192 return GL_DEPTH_COMPONENT24; | 225 return GL_DEPTH_COMPONENT24; |
| 193 } | 226 } |
| 194 return impl_format; | 227 return impl_format; |
| 195 } | 228 } |
| 196 | 229 |
| 197 } // namespace gles2 | 230 } // namespace gles2 |
| 198 } // namespace gpu | 231 } // namespace gpu |
| 199 | 232 |
| 200 | 233 |
| OLD | NEW |