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

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

Issue 12017032: Add calls to EnsureGPUMemoryAvailable into GLES2DecoderImpl (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 11 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 | Annotate | Revision Log
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/renderbuffer_manager.h" 5 #include "gpu/command_buffer/service/renderbuffer_manager.h"
6 #include "base/logging.h" 6 #include "base/logging.h"
7 #include "base/debug/trace_event.h" 7 #include "base/debug/trace_event.h"
8 #include "base/stringprintf.h" 8 #include "base/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 13
13 namespace gpu { 14 namespace gpu {
14 namespace gles2 { 15 namespace gles2 {
15 16
16 RenderbufferManager::RenderbufferManager( 17 RenderbufferManager::RenderbufferManager(
17 MemoryTracker* memory_tracker, 18 MemoryTracker* memory_tracker,
18 GLint max_renderbuffer_size, 19 GLint max_renderbuffer_size,
19 GLint max_samples) 20 GLint max_samples)
20 : memory_tracker_( 21 : memory_tracker_(
21 new MemoryTypeTracker(memory_tracker, MemoryTracker::kUnmanaged)), 22 new MemoryTypeTracker(memory_tracker, MemoryTracker::kUnmanaged)),
22 max_renderbuffer_size_(max_renderbuffer_size), 23 max_renderbuffer_size_(max_renderbuffer_size),
23 max_samples_(max_samples), 24 max_samples_(max_samples),
24 num_uncleared_renderbuffers_(0), 25 num_uncleared_renderbuffers_(0),
25 renderbuffer_info_count_(0), 26 renderbuffer_info_count_(0),
26 have_context_(true) { 27 have_context_(true) {
27 } 28 }
28 29
29 RenderbufferManager::~RenderbufferManager() { 30 RenderbufferManager::~RenderbufferManager() {
30 DCHECK(renderbuffer_infos_.empty()); 31 DCHECK(renderbuffer_infos_.empty());
31 // If this triggers, that means something is keeping a reference to 32 // If this triggers, that means something is keeping a reference to
32 // a RenderbufferInfo belonging to this. 33 // a RenderbufferInfo belonging to this.
33 CHECK_EQ(renderbuffer_info_count_, 0u); 34 CHECK_EQ(renderbuffer_info_count_, 0u);
34 35
35 DCHECK_EQ(0, num_uncleared_renderbuffers_); 36 DCHECK_EQ(0, num_uncleared_renderbuffers_);
36 } 37 }
37 38
38 size_t RenderbufferManager::RenderbufferInfo::EstimatedSize() { 39 size_t RenderbufferManager::RenderbufferInfo::EstimatedSize() {
39 return width_ * height_ * samples_ * 40 uint32 size = 0;
40 GLES2Util::RenderbufferBytesPerPixel(internal_format_); 41 RenderbufferManager::ComputeEstimatedRenderbufferSize(
42 width_, height_, samples_, internal_format_, &size);
43 return size;
41 } 44 }
42 45
43 void RenderbufferManager::RenderbufferInfo::AddToSignature( 46 void RenderbufferManager::RenderbufferInfo::AddToSignature(
44 std::string* signature) const { 47 std::string* signature) const {
45 DCHECK(signature); 48 DCHECK(signature);
46 *signature += base::StringPrintf( 49 *signature += base::StringPrintf(
47 "|Renderbuffer|internal_format=%04x|samples=%d|width=%d|height=%d", 50 "|Renderbuffer|internal_format=%04x|samples=%d|width=%d|height=%d",
48 internal_format_, samples_, width_, height_); 51 internal_format_, samples_, width_, height_);
49 } 52 }
50 53
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
136 for (RenderbufferInfoMap::const_iterator it = renderbuffer_infos_.begin(); 139 for (RenderbufferInfoMap::const_iterator it = renderbuffer_infos_.begin();
137 it != renderbuffer_infos_.end(); ++it) { 140 it != renderbuffer_infos_.end(); ++it) {
138 if (it->second->service_id() == service_id) { 141 if (it->second->service_id() == service_id) {
139 *client_id = it->first; 142 *client_id = it->first;
140 return true; 143 return true;
141 } 144 }
142 } 145 }
143 return false; 146 return false;
144 } 147 }
145 148
149 bool RenderbufferManager::ComputeEstimatedRenderbufferSize(
150 int width, int height, int samples, int internal_format, uint32* size) {
151 DCHECK(size);
152
153 uint32 temp = 0;
154 if (!SafeMultiplyUint32(width, height, &temp)) {
155 return false;
156 }
157 if (!SafeMultiplyUint32(temp, samples, &temp)) {
158 return false;
159 }
160 GLenum impl_format = InternalRenderbufferFormatToImplFormat(internal_format);
161 if (!SafeMultiplyUint32(
162 temp, GLES2Util::RenderbufferBytesPerPixel(impl_format), &temp)) {
163 return false;
164 }
165 *size = temp;
166 return true;
167 }
168
169 GLenum RenderbufferManager::InternalRenderbufferFormatToImplFormat(
170 GLenum impl_format) {
171 if (gfx::GetGLImplementation() != gfx::kGLImplementationEGLGLES2) {
172 switch (impl_format) {
173 case GL_DEPTH_COMPONENT16:
174 return GL_DEPTH_COMPONENT;
175 case GL_RGBA4:
176 case GL_RGB5_A1:
177 return GL_RGBA;
178 case GL_RGB565:
179 return GL_RGB;
180 }
181 }
182 return impl_format;
183 }
184
146 } // namespace gles2 185 } // namespace gles2
147 } // namespace gpu 186 } // namespace gpu
148 187
149 188
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/renderbuffer_manager.h ('k') | gpu/command_buffer/service/renderbuffer_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698