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 // This should contain everything to uniquely identify a Renderbuffer. |
| 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 |