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

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

Issue 16690007: Revert 205207 "Merge 204571 "Add workaround for Mali-400 zero-si..." (Closed) Base URL: svn://svn.chromium.org/chrome/branches/1500/src/
Patch Set: 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
« no previous file with comments | « gpu/command_buffer/service/buffer_manager.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/buffer_manager.h" 5 #include "gpu/command_buffer/service/buffer_manager.h"
6 #include <limits> 6 #include <limits>
7 #include "base/debug/trace_event.h" 7 #include "base/debug/trace_event.h"
8 #include "base/logging.h" 8 #include "base/logging.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/error_state.h" 10 #include "gpu/command_buffer/service/error_state.h"
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after
233 return true; 233 return true;
234 } 234 }
235 } 235 }
236 return false; 236 return false;
237 } 237 }
238 238
239 bool BufferManager::IsUsageClientSideArray(GLenum usage) { 239 bool BufferManager::IsUsageClientSideArray(GLenum usage) {
240 return usage == GL_STREAM_DRAW && use_client_side_arrays_for_stream_buffers_; 240 return usage == GL_STREAM_DRAW && use_client_side_arrays_for_stream_buffers_;
241 } 241 }
242 242
243 bool BufferManager::UseNonZeroSizeForClientSideArrayBuffer() {
244 return feature_info_ && feature_info_->workarounds(
245 ).use_non_zero_size_for_client_side_stream_buffers;
246 }
247
248 void BufferManager::SetInfo( 243 void BufferManager::SetInfo(
249 Buffer* buffer, GLsizeiptr size, GLenum usage, const GLvoid* data) { 244 Buffer* buffer, GLsizeiptr size, GLenum usage, const GLvoid* data) {
250 DCHECK(buffer); 245 DCHECK(buffer);
251 memory_tracker_->TrackMemFree(buffer->size()); 246 memory_tracker_->TrackMemFree(buffer->size());
252 bool is_client_side_array = IsUsageClientSideArray(usage); 247 bool is_client_side_array = IsUsageClientSideArray(usage);
253 bool shadow = buffer->target() == GL_ELEMENT_ARRAY_BUFFER || 248 bool shadow = buffer->target() == GL_ELEMENT_ARRAY_BUFFER ||
254 allow_buffers_on_multiple_targets_ || 249 allow_buffers_on_multiple_targets_ ||
255 is_client_side_array; 250 is_client_side_array;
256 buffer->SetInfo(size, usage, shadow, data, is_client_side_array); 251 buffer->SetInfo(size, usage, shadow, data, is_client_side_array);
257 memory_tracker_->TrackMemAlloc(buffer->size()); 252 memory_tracker_->TrackMemAlloc(buffer->size());
258 } 253 }
259 254
260 void BufferManager::DoBufferData( 255 void BufferManager::DoBufferData(
261 ErrorState* error_state, 256 ErrorState* error_state,
262 Buffer* buffer, 257 Buffer* buffer,
263 GLsizeiptr size, 258 GLsizeiptr size,
264 GLenum usage, 259 GLenum usage,
265 const GLvoid* data) { 260 const GLvoid* data) {
266 // Clear the buffer to 0 if no initial data was passed in. 261 // Clear the buffer to 0 if no initial data was passed in.
267 scoped_ptr<int8[]> zero; 262 scoped_ptr<int8[]> zero;
268 if (!data) { 263 if (!data) {
269 zero.reset(new int8[size]); 264 zero.reset(new int8[size]);
270 memset(zero.get(), 0, size); 265 memset(zero.get(), 0, size);
271 data = zero.get(); 266 data = zero.get();
272 } 267 }
273 268
274 ERRORSTATE_COPY_REAL_GL_ERRORS_TO_WRAPPER(error_state, "glBufferData"); 269 ERRORSTATE_COPY_REAL_GL_ERRORS_TO_WRAPPER(error_state, "glBufferData");
275 if (IsUsageClientSideArray(usage)) { 270 if (IsUsageClientSideArray(usage)) {
276 GLsizei empty_size = UseNonZeroSizeForClientSideArrayBuffer() ? 1 : 0; 271 glBufferData(buffer->target(), 0, NULL, usage);
277 glBufferData(buffer->target(), empty_size, NULL, usage);
278 } else { 272 } else {
279 glBufferData(buffer->target(), size, data, usage); 273 glBufferData(buffer->target(), size, data, usage);
280 } 274 }
281 GLenum error = ERRORSTATE_PEEK_GL_ERROR(error_state, "glBufferData"); 275 GLenum error = ERRORSTATE_PEEK_GL_ERROR(error_state, "glBufferData");
282 if (error == GL_NO_ERROR) { 276 if (error == GL_NO_ERROR) {
283 SetInfo(buffer, size, usage, data); 277 SetInfo(buffer, size, usage, data);
284 } else { 278 } else {
285 SetInfo(buffer, 0, usage, NULL); 279 SetInfo(buffer, 0, usage, NULL);
286 } 280 }
287 } 281 }
(...skipping 24 matching lines...) Expand all
312 if (buffer->target() == 0) { 306 if (buffer->target() == 0) {
313 buffer->set_target(target); 307 buffer->set_target(target);
314 } 308 }
315 return true; 309 return true;
316 } 310 }
317 311
318 } // namespace gles2 312 } // namespace gles2
319 } // namespace gpu 313 } // namespace gpu
320 314
321 315
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/buffer_manager.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698