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

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

Issue 14308014: Clean up of GLES2 Command Decoder by moving some of the error state into a separate class. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix merge error. Created 7 years, 8 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
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/feature_info.h" 11 #include "gpu/command_buffer/service/feature_info.h"
11 #include "gpu/command_buffer/service/gles2_cmd_decoder.h"
12 #include "gpu/command_buffer/service/memory_tracking.h" 12 #include "gpu/command_buffer/service/memory_tracking.h"
13 #include "ui/gl/gl_bindings.h" 13 #include "ui/gl/gl_bindings.h"
14 14
15 namespace gpu { 15 namespace gpu {
16 namespace gles2 { 16 namespace gles2 {
17 17
18 BufferManager::BufferManager( 18 BufferManager::BufferManager(
19 MemoryTracker* memory_tracker, 19 MemoryTracker* memory_tracker,
20 FeatureInfo* feature_info) 20 FeatureInfo* feature_info)
21 : memory_tracker_( 21 : memory_tracker_(
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after
246 memory_tracker_->TrackMemFree(buffer->size()); 246 memory_tracker_->TrackMemFree(buffer->size());
247 bool is_client_side_array = IsUsageClientSideArray(usage); 247 bool is_client_side_array = IsUsageClientSideArray(usage);
248 bool shadow = buffer->target() == GL_ELEMENT_ARRAY_BUFFER || 248 bool shadow = buffer->target() == GL_ELEMENT_ARRAY_BUFFER ||
249 allow_buffers_on_multiple_targets_ || 249 allow_buffers_on_multiple_targets_ ||
250 is_client_side_array; 250 is_client_side_array;
251 buffer->SetInfo(size, usage, shadow, data, is_client_side_array); 251 buffer->SetInfo(size, usage, shadow, data, is_client_side_array);
252 memory_tracker_->TrackMemAlloc(buffer->size()); 252 memory_tracker_->TrackMemAlloc(buffer->size());
253 } 253 }
254 254
255 void BufferManager::DoBufferData( 255 void BufferManager::DoBufferData(
256 GLES2Decoder* decoder, 256 ErrorState* error_state,
257 Buffer* buffer, 257 Buffer* buffer,
258 GLsizeiptr size, 258 GLsizeiptr size,
259 GLenum usage, 259 GLenum usage,
260 const GLvoid* data) { 260 const GLvoid* data) {
261 // 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.
262 scoped_ptr<int8[]> zero; 262 scoped_ptr<int8[]> zero;
263 if (!data) { 263 if (!data) {
264 zero.reset(new int8[size]); 264 zero.reset(new int8[size]);
265 memset(zero.get(), 0, size); 265 memset(zero.get(), 0, size);
266 data = zero.get(); 266 data = zero.get();
267 } 267 }
268 268
269 GLESDECODER_COPY_REAL_GL_ERRORS_TO_WRAPPER(decoder, "glBufferData"); 269 ERRORSTATE_COPY_REAL_GL_ERRORS_TO_WRAPPER(error_state, "glBufferData");
270 if (IsUsageClientSideArray(usage)) { 270 if (IsUsageClientSideArray(usage)) {
271 glBufferData(buffer->target(), 0, NULL, usage); 271 glBufferData(buffer->target(), 0, NULL, usage);
272 } else { 272 } else {
273 glBufferData(buffer->target(), size, data, usage); 273 glBufferData(buffer->target(), size, data, usage);
274 } 274 }
275 GLenum error = GLESDECODER_PEEK_GL_ERROR(decoder, "glBufferData"); 275 GLenum error = ERRORSTATE_PEEK_GL_ERROR(error_state, "glBufferData");
276 if (error == GL_NO_ERROR) { 276 if (error == GL_NO_ERROR) {
277 SetInfo(buffer, size, usage, data); 277 SetInfo(buffer, size, usage, data);
278 } else { 278 } else {
279 SetInfo(buffer, 0, usage, NULL); 279 SetInfo(buffer, 0, usage, NULL);
280 } 280 }
281 } 281 }
282 282
283 void BufferManager::DoBufferSubData( 283 void BufferManager::DoBufferSubData(
284 GLES2Decoder* decoder, 284 ErrorState* error_state,
285 Buffer* buffer, 285 Buffer* buffer,
286 GLintptr offset, 286 GLintptr offset,
287 GLsizeiptr size, 287 GLsizeiptr size,
288 const GLvoid* data) { 288 const GLvoid* data) {
289 if (!buffer->SetRange(offset, size, data)) { 289 if (!buffer->SetRange(offset, size, data)) {
290 GLESDECODER_SET_GL_ERROR( 290 ERRORSTATE_SET_GL_ERROR(
291 decoder, GL_INVALID_VALUE, "glBufferSubData", "out of range"); 291 error_state, GL_INVALID_VALUE, "glBufferSubData", "out of range");
292 return; 292 return;
293 } 293 }
294 294
295 if (!buffer->IsClientSideArray()) { 295 if (!buffer->IsClientSideArray()) {
296 glBufferSubData(buffer->target(), offset, size, data); 296 glBufferSubData(buffer->target(), offset, size, data);
297 } 297 }
298 } 298 }
299 299
300 bool BufferManager::SetTarget(Buffer* buffer, GLenum target) { 300 bool BufferManager::SetTarget(Buffer* buffer, GLenum target) {
301 // Check that we are not trying to bind it to a different target. 301 // Check that we are not trying to bind it to a different target.
302 if (buffer->target() != 0 && buffer->target() != target && 302 if (buffer->target() != 0 && buffer->target() != target &&
303 !allow_buffers_on_multiple_targets_) { 303 !allow_buffers_on_multiple_targets_) {
304 return false; 304 return false;
305 } 305 }
306 if (buffer->target() == 0) { 306 if (buffer->target() == 0) {
307 buffer->set_target(target); 307 buffer->set_target(target);
308 } 308 }
309 return true; 309 return true;
310 } 310 }
311 311
312 } // namespace gles2 312 } // namespace gles2
313 } // namespace gpu 313 } // namespace gpu
314 314
315 315
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/buffer_manager.h ('k') | gpu/command_buffer/service/buffer_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698