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 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 | 8 |
9 #include <limits> | 9 #include <limits> |
10 | 10 |
11 #include "base/logging.h" | 11 #include "base/logging.h" |
12 #include "base/strings/stringprintf.h" | 12 #include "base/strings/stringprintf.h" |
13 #include "base/thread_task_runner_handle.h" | 13 #include "base/thread_task_runner_handle.h" |
14 #include "base/trace_event/memory_dump_manager.h" | 14 #include "base/trace_event/memory_dump_manager.h" |
15 #include "base/trace_event/trace_event.h" | 15 #include "base/trace_event/trace_event.h" |
16 #include "gpu/command_buffer/common/gles2_cmd_utils.h" | 16 #include "gpu/command_buffer/common/gles2_cmd_utils.h" |
17 #include "gpu/command_buffer/service/context_state.h" | 17 #include "gpu/command_buffer/service/context_state.h" |
18 #include "gpu/command_buffer/service/error_state.h" | 18 #include "gpu/command_buffer/service/error_state.h" |
19 #include "gpu/command_buffer/service/feature_info.h" | 19 #include "gpu/command_buffer/service/feature_info.h" |
20 #include "gpu/command_buffer/service/memory_tracking.h" | 20 #include "gpu/command_buffer/service/memory_tracking.h" |
| 21 #include "gpu/command_buffer/service/transform_feedback_manager.h" |
21 #include "ui/gl/gl_bindings.h" | 22 #include "ui/gl/gl_bindings.h" |
22 #include "ui/gl/gl_implementation.h" | 23 #include "ui/gl/gl_implementation.h" |
| 24 #include "ui/gl/gl_version_info.h" |
23 #include "ui/gl/trace_util.h" | 25 #include "ui/gl/trace_util.h" |
24 | 26 |
25 namespace gpu { | 27 namespace gpu { |
26 namespace gles2 { | 28 namespace gles2 { |
27 | 29 |
28 BufferManager::BufferManager(MemoryTracker* memory_tracker, | 30 BufferManager::BufferManager(MemoryTracker* memory_tracker, |
29 FeatureInfo* feature_info) | 31 FeatureInfo* feature_info) |
30 : memory_type_tracker_( | 32 : memory_type_tracker_( |
31 new MemoryTypeTracker(memory_tracker)), | 33 new MemoryTypeTracker(memory_tracker)), |
32 memory_tracker_(memory_tracker), | 34 memory_tracker_(memory_tracker), |
(...skipping 369 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
402 return; | 404 return; |
403 } | 405 } |
404 | 406 |
405 if (!memory_type_tracker_->EnsureGPUMemoryAvailable(size)) { | 407 if (!memory_type_tracker_->EnsureGPUMemoryAvailable(size)) { |
406 ERRORSTATE_SET_GL_ERROR( | 408 ERRORSTATE_SET_GL_ERROR( |
407 error_state, GL_OUT_OF_MEMORY, "glBufferData", "out of memory"); | 409 error_state, GL_OUT_OF_MEMORY, "glBufferData", "out of memory"); |
408 return; | 410 return; |
409 } | 411 } |
410 | 412 |
411 DoBufferData(error_state, buffer, target, size, usage, data); | 413 DoBufferData(error_state, buffer, target, size, usage, data); |
| 414 |
| 415 if (context_state->bound_transform_feedback.get()) { |
| 416 // buffer size might have changed, and on Desktop GL lower than 4.2, |
| 417 // we might need to reset transform feedback buffer range. |
| 418 context_state->bound_transform_feedback->OnBufferData( |
| 419 feature_info_->gl_version_info(), target, buffer); |
| 420 } |
412 } | 421 } |
413 | 422 |
414 | 423 |
415 void BufferManager::DoBufferData( | 424 void BufferManager::DoBufferData( |
416 ErrorState* error_state, | 425 ErrorState* error_state, |
417 Buffer* buffer, | 426 Buffer* buffer, |
418 GLenum target, | 427 GLenum target, |
419 GLsizeiptr size, | 428 GLsizeiptr size, |
420 GLenum usage, | 429 GLenum usage, |
421 const GLvoid* data) { | 430 const GLvoid* data) { |
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
643 auto guid = gfx::GetGLBufferGUIDForTracing( | 652 auto guid = gfx::GetGLBufferGUIDForTracing( |
644 memory_tracker_->ShareGroupTracingGUID(), client_buffer_id); | 653 memory_tracker_->ShareGroupTracingGUID(), client_buffer_id); |
645 pmd->CreateSharedGlobalAllocatorDump(guid); | 654 pmd->CreateSharedGlobalAllocatorDump(guid); |
646 pmd->AddOwnershipEdge(dump->guid(), guid); | 655 pmd->AddOwnershipEdge(dump->guid(), guid); |
647 } | 656 } |
648 return true; | 657 return true; |
649 } | 658 } |
650 | 659 |
651 } // namespace gles2 | 660 } // namespace gles2 |
652 } // namespace gpu | 661 } // namespace gpu |
OLD | NEW |