| 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/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 Loading... |
| 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 |
| OLD | NEW |