| 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/context_state.h" | 10 #include "gpu/command_buffer/service/context_state.h" |
| 11 #include "gpu/command_buffer/service/error_state.h" | 11 #include "gpu/command_buffer/service/error_state.h" |
| 12 #include "gpu/command_buffer/service/feature_info.h" | 12 #include "gpu/command_buffer/service/feature_info.h" |
| 13 #include "gpu/command_buffer/service/memory_tracking.h" | 13 #include "gpu/command_buffer/service/memory_tracking.h" |
| 14 #include "ui/gl/gl_bindings.h" | 14 #include "ui/gl/gl_bindings.h" |
| 15 #include "ui/gl/gl_implementation.h" |
| 15 | 16 |
| 16 namespace gpu { | 17 namespace gpu { |
| 17 namespace gles2 { | 18 namespace gles2 { |
| 18 | 19 |
| 19 BufferManager::BufferManager( | 20 BufferManager::BufferManager( |
| 20 MemoryTracker* memory_tracker, | 21 MemoryTracker* memory_tracker, |
| 21 FeatureInfo* feature_info) | 22 FeatureInfo* feature_info) |
| 22 : memory_tracker_( | 23 : memory_tracker_( |
| 23 new MemoryTypeTracker(memory_tracker, MemoryTracker::kManaged)), | 24 new MemoryTypeTracker(memory_tracker, MemoryTracker::kManaged)), |
| 24 feature_info_(feature_info), | 25 feature_info_(feature_info), |
| 25 allow_buffers_on_multiple_targets_(false), | 26 allow_buffers_on_multiple_targets_(false), |
| 27 allow_fixed_attribs_(false), |
| 26 buffer_count_(0), | 28 buffer_count_(0), |
| 27 have_context_(true), | 29 have_context_(true), |
| 28 use_client_side_arrays_for_stream_buffers_( | 30 use_client_side_arrays_for_stream_buffers_( |
| 29 feature_info ? feature_info->workarounds( | 31 feature_info ? feature_info->workarounds( |
| 30 ).use_client_side_arrays_for_stream_buffers : 0) { | 32 ).use_client_side_arrays_for_stream_buffers : 0) { |
| 31 } | 33 } |
| 32 | 34 |
| 33 BufferManager::~BufferManager() { | 35 BufferManager::~BufferManager() { |
| 34 DCHECK(buffers_.empty()); | 36 DCHECK(buffers_.empty()); |
| 35 CHECK_EQ(buffer_count_, 0u); | 37 CHECK_EQ(buffer_count_, 0u); |
| (...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 244 bool BufferManager::UseNonZeroSizeForClientSideArrayBuffer() { | 246 bool BufferManager::UseNonZeroSizeForClientSideArrayBuffer() { |
| 245 return feature_info_.get() && | 247 return feature_info_.get() && |
| 246 feature_info_->workarounds() | 248 feature_info_->workarounds() |
| 247 .use_non_zero_size_for_client_side_stream_buffers; | 249 .use_non_zero_size_for_client_side_stream_buffers; |
| 248 } | 250 } |
| 249 | 251 |
| 250 void BufferManager::SetInfo( | 252 void BufferManager::SetInfo( |
| 251 Buffer* buffer, GLsizeiptr size, GLenum usage, const GLvoid* data) { | 253 Buffer* buffer, GLsizeiptr size, GLenum usage, const GLvoid* data) { |
| 252 DCHECK(buffer); | 254 DCHECK(buffer); |
| 253 memory_tracker_->TrackMemFree(buffer->size()); | 255 memory_tracker_->TrackMemFree(buffer->size()); |
| 254 bool is_client_side_array = IsUsageClientSideArray(usage); | 256 const bool is_client_side_array = IsUsageClientSideArray(usage); |
| 255 bool shadow = buffer->target() == GL_ELEMENT_ARRAY_BUFFER || | 257 const bool support_fixed_attribs = |
| 256 allow_buffers_on_multiple_targets_ || | 258 gfx::GetGLImplementation() == gfx::kGLImplementationEGLGLES2; |
| 257 is_client_side_array; | 259 const bool shadow = buffer->target() == GL_ELEMENT_ARRAY_BUFFER || |
| 260 allow_buffers_on_multiple_targets_ || |
| 261 (allow_fixed_attribs_ && !support_fixed_attribs) || |
| 262 is_client_side_array; |
| 258 buffer->SetInfo(size, usage, shadow, data, is_client_side_array); | 263 buffer->SetInfo(size, usage, shadow, data, is_client_side_array); |
| 259 memory_tracker_->TrackMemAlloc(buffer->size()); | 264 memory_tracker_->TrackMemAlloc(buffer->size()); |
| 260 } | 265 } |
| 261 | 266 |
| 262 void BufferManager::ValidateAndDoBufferData( | 267 void BufferManager::ValidateAndDoBufferData( |
| 263 ContextState* context_state, GLenum target, GLsizeiptr size, | 268 ContextState* context_state, GLenum target, GLsizeiptr size, |
| 264 const GLvoid * data, GLenum usage) { | 269 const GLvoid * data, GLenum usage) { |
| 265 ErrorState* error_state = context_state->GetErrorState(); | 270 ErrorState* error_state = context_state->GetErrorState(); |
| 266 if (!feature_info_->validators()->buffer_target.IsValid(target)) { | 271 if (!feature_info_->validators()->buffer_target.IsValid(target)) { |
| 267 ERRORSTATE_SET_GL_ERROR_INVALID_ENUM( | 272 ERRORSTATE_SET_GL_ERROR_INVALID_ENUM( |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 398 return state->bound_array_buffer.get(); | 403 return state->bound_array_buffer.get(); |
| 399 } else { | 404 } else { |
| 400 return state->vertex_attrib_manager->element_array_buffer(); | 405 return state->vertex_attrib_manager->element_array_buffer(); |
| 401 } | 406 } |
| 402 } | 407 } |
| 403 | 408 |
| 404 } // namespace gles2 | 409 } // namespace gles2 |
| 405 } // namespace gpu | 410 } // namespace gpu |
| 406 | 411 |
| 407 | 412 |
| OLD | NEW |