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

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

Issue 14188053: gpu: Change Produce/ConsumeTexture to allow texture sharing (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 7 years, 6 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"
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 } 44 }
45 45
46 void Renderbuffer::AddToSignature( 46 void Renderbuffer::AddToSignature(
47 std::string* signature) const { 47 std::string* signature) const {
48 DCHECK(signature); 48 DCHECK(signature);
49 *signature += base::StringPrintf( 49 *signature += base::StringPrintf(
50 "|Renderbuffer|internal_format=%04x|samples=%d|width=%d|height=%d", 50 "|Renderbuffer|internal_format=%04x|samples=%d|width=%d|height=%d",
51 internal_format_, samples_, width_, height_); 51 internal_format_, samples_, width_, height_);
52 } 52 }
53 53
54 Renderbuffer::Renderbuffer(RenderbufferManager* manager, GLuint service_id) 54 Renderbuffer::Renderbuffer(RenderbufferManager* manager,
55 GLuint client_id,
56 GLuint service_id)
55 : manager_(manager), 57 : manager_(manager),
56 deleted_(false), 58 client_id_(client_id),
57 service_id_(service_id), 59 service_id_(service_id),
58 cleared_(true), 60 cleared_(true),
59 has_been_bound_(false), 61 has_been_bound_(false),
60 samples_(0), 62 samples_(0),
61 internal_format_(GL_RGBA4), 63 internal_format_(GL_RGBA4),
62 width_(0), 64 width_(0),
63 height_(0) { 65 height_(0) {
64 manager_->StartTracking(this); 66 manager_->StartTracking(this);
65 } 67 }
66 68
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
115 --num_uncleared_renderbuffers_; 117 --num_uncleared_renderbuffers_;
116 } 118 }
117 renderbuffer->set_cleared(cleared); 119 renderbuffer->set_cleared(cleared);
118 if (!renderbuffer->cleared()) { 120 if (!renderbuffer->cleared()) {
119 ++num_uncleared_renderbuffers_; 121 ++num_uncleared_renderbuffers_;
120 } 122 }
121 } 123 }
122 124
123 void RenderbufferManager::CreateRenderbuffer( 125 void RenderbufferManager::CreateRenderbuffer(
124 GLuint client_id, GLuint service_id) { 126 GLuint client_id, GLuint service_id) {
125 scoped_refptr<Renderbuffer> renderbuffer(new Renderbuffer(this, service_id)); 127 scoped_refptr<Renderbuffer> renderbuffer(
128 new Renderbuffer(this, client_id, service_id));
126 std::pair<RenderbufferMap::iterator, bool> result = 129 std::pair<RenderbufferMap::iterator, bool> result =
127 renderbuffers_.insert(std::make_pair(client_id, renderbuffer)); 130 renderbuffers_.insert(std::make_pair(client_id, renderbuffer));
128 DCHECK(result.second); 131 DCHECK(result.second);
129 if (!renderbuffer->cleared()) { 132 if (!renderbuffer->cleared()) {
130 ++num_uncleared_renderbuffers_; 133 ++num_uncleared_renderbuffers_;
131 } 134 }
132 } 135 }
133 136
134 Renderbuffer* RenderbufferManager::GetRenderbuffer( 137 Renderbuffer* RenderbufferManager::GetRenderbuffer(
135 GLuint client_id) { 138 GLuint client_id) {
136 RenderbufferMap::iterator it = renderbuffers_.find(client_id); 139 RenderbufferMap::iterator it = renderbuffers_.find(client_id);
137 return it != renderbuffers_.end() ? it->second : NULL; 140 return it != renderbuffers_.end() ? it->second : NULL;
138 } 141 }
139 142
140 void RenderbufferManager::RemoveRenderbuffer(GLuint client_id) { 143 void RenderbufferManager::RemoveRenderbuffer(GLuint client_id) {
141 RenderbufferMap::iterator it = renderbuffers_.find(client_id); 144 RenderbufferMap::iterator it = renderbuffers_.find(client_id);
142 if (it != renderbuffers_.end()) { 145 if (it != renderbuffers_.end()) {
143 Renderbuffer* renderbuffer = it->second; 146 Renderbuffer* renderbuffer = it->second;
144 renderbuffer->MarkAsDeleted(); 147 renderbuffer->MarkAsDeleted();
145 renderbuffers_.erase(it); 148 renderbuffers_.erase(it);
146 } 149 }
147 } 150 }
148 151
149 bool RenderbufferManager::GetClientId(
150 GLuint service_id, GLuint* client_id) const {
151 // This doesn't need to be fast. It's only used during slow queries.
152 for (RenderbufferMap::const_iterator it = renderbuffers_.begin();
153 it != renderbuffers_.end(); ++it) {
154 if (it->second->service_id() == service_id) {
155 *client_id = it->first;
156 return true;
157 }
158 }
159 return false;
160 }
161
162 bool RenderbufferManager::ComputeEstimatedRenderbufferSize( 152 bool RenderbufferManager::ComputeEstimatedRenderbufferSize(
163 int width, int height, int samples, int internal_format, uint32* size) { 153 int width, int height, int samples, int internal_format, uint32* size) {
164 DCHECK(size); 154 DCHECK(size);
165 155
166 uint32 temp = 0; 156 uint32 temp = 0;
167 if (!SafeMultiplyUint32(width, height, &temp)) { 157 if (!SafeMultiplyUint32(width, height, &temp)) {
168 return false; 158 return false;
169 } 159 }
170 if (!SafeMultiplyUint32(temp, samples, &temp)) { 160 if (!SafeMultiplyUint32(temp, samples, &temp)) {
171 return false; 161 return false;
(...skipping 20 matching lines...) Expand all
192 return GL_RGB; 182 return GL_RGB;
193 } 183 }
194 } 184 }
195 return impl_format; 185 return impl_format;
196 } 186 }
197 187
198 } // namespace gles2 188 } // namespace gles2
199 } // namespace gpu 189 } // namespace gpu
200 190
201 191
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