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

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

Issue 2471533003: Minor improvement in uniform block backing buffer validation. (Closed)
Patch Set: Fix Created 4 years, 1 month 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 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <limits> 9 #include <limits>
10 10
(...skipping 29 matching lines...) Expand all
40 max_buffer_size_(kDefaultMaxBufferSize), 40 max_buffer_size_(kDefaultMaxBufferSize),
41 allow_buffers_on_multiple_targets_(false), 41 allow_buffers_on_multiple_targets_(false),
42 allow_fixed_attribs_(false), 42 allow_fixed_attribs_(false),
43 buffer_count_(0), 43 buffer_count_(0),
44 primitive_restart_fixed_index_(0), 44 primitive_restart_fixed_index_(0),
45 lost_context_(false), 45 lost_context_(false),
46 use_client_side_arrays_for_stream_buffers_( 46 use_client_side_arrays_for_stream_buffers_(
47 feature_info 47 feature_info
48 ? feature_info->workarounds() 48 ? feature_info->workarounds()
49 .use_client_side_arrays_for_stream_buffers 49 .use_client_side_arrays_for_stream_buffers
50 : 0), 50 : 0) {
51 mapped_buffer_count_(0) {
52 // When created from InProcessCommandBuffer, we won't have a |memory_tracker_| 51 // When created from InProcessCommandBuffer, we won't have a |memory_tracker_|
53 // so don't register a dump provider. 52 // so don't register a dump provider.
54 if (memory_tracker_) { 53 if (memory_tracker_) {
55 base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider( 54 base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider(
56 this, "gpu::BufferManager", base::ThreadTaskRunnerHandle::Get()); 55 this, "gpu::BufferManager", base::ThreadTaskRunnerHandle::Get());
57 } 56 }
58 } 57 }
59 58
60 BufferManager::~BufferManager() { 59 BufferManager::~BufferManager() {
61 DCHECK(buffers_.empty()); 60 DCHECK(buffers_.empty());
(...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after
332 range_set_.insert(std::make_pair(range, max_v)); 331 range_set_.insert(std::make_pair(range, max_v));
333 *max_value = max_v; 332 *max_value = max_v;
334 return true; 333 return true;
335 } 334 }
336 335
337 void Buffer::SetMappedRange(GLintptr offset, GLsizeiptr size, GLenum access, 336 void Buffer::SetMappedRange(GLintptr offset, GLsizeiptr size, GLenum access,
338 void* pointer, scoped_refptr<gpu::Buffer> shm, 337 void* pointer, scoped_refptr<gpu::Buffer> shm,
339 unsigned int shm_offset) { 338 unsigned int shm_offset) {
340 mapped_range_.reset( 339 mapped_range_.reset(
341 new MappedRange(offset, size, access, pointer, shm, shm_offset)); 340 new MappedRange(offset, size, access, pointer, shm, shm_offset));
342 manager_->IncreaseMappedBufferCount();
343 } 341 }
344 342
345 void Buffer::RemoveMappedRange() { 343 void Buffer::RemoveMappedRange() {
346 if (mapped_range_.get())
347 manager_->DecreaseMappedBufferCount();
348 mapped_range_.reset(nullptr); 344 mapped_range_.reset(nullptr);
349 } 345 }
350 346
351 bool BufferManager::GetClientId(GLuint service_id, GLuint* client_id) const { 347 bool BufferManager::GetClientId(GLuint service_id, GLuint* client_id) const {
352 // This doesn't need to be fast. It's only used during slow queries. 348 // This doesn't need to be fast. It's only used during slow queries.
353 for (BufferMap::const_iterator it = buffers_.begin(); 349 for (BufferMap::const_iterator it = buffers_.begin();
354 it != buffers_.end(); ++it) { 350 it != buffers_.end(); ++it) {
355 if (it->second->service_id() == service_id) { 351 if (it->second->service_id() == service_id) {
356 *client_id = it->first; 352 *client_id = it->first;
357 return true; 353 return true;
(...skipping 455 matching lines...) Expand 10 before | Expand all | Expand 10 after
813 bool BufferManager::RequestBuffersAccess( 809 bool BufferManager::RequestBuffersAccess(
814 ErrorState* error_state, 810 ErrorState* error_state,
815 const IndexedBufferBindingHost* bindings, 811 const IndexedBufferBindingHost* bindings,
816 const std::vector<GLsizeiptr>& variable_sizes, 812 const std::vector<GLsizeiptr>& variable_sizes,
817 GLsizei count, 813 GLsizei count,
818 const char* func_name, 814 const char* func_name,
819 const char* message_tag) { 815 const char* message_tag) {
820 DCHECK(error_state); 816 DCHECK(error_state);
821 DCHECK(bindings); 817 DCHECK(bindings);
822 for (size_t ii = 0; ii < variable_sizes.size(); ++ii) { 818 for (size_t ii = 0; ii < variable_sizes.size(); ++ii) {
819 if (variable_sizes[ii] == 0)
820 continue;
823 Buffer* buffer = bindings->GetBufferBinding(ii); 821 Buffer* buffer = bindings->GetBufferBinding(ii);
824 if (!buffer) { 822 if (!buffer) {
825 std::string msg = base::StringPrintf( 823 std::string msg = base::StringPrintf(
826 "%s : no buffer bound at index %zu", message_tag, ii); 824 "%s : no buffer bound at index %zu", message_tag, ii);
827 ERRORSTATE_SET_GL_ERROR( 825 ERRORSTATE_SET_GL_ERROR(
828 error_state, GL_INVALID_OPERATION, func_name, msg.c_str()); 826 error_state, GL_INVALID_OPERATION, func_name, msg.c_str());
829 return false; 827 return false;
830 } 828 }
831 if (buffer->GetMappedRange()) { 829 if (buffer->GetMappedRange()) {
832 std::string msg = base::StringPrintf( 830 std::string msg = base::StringPrintf(
(...skipping 11 matching lines...) Expand all
844 "%s : buffer or buffer range not large enough at index %zu", 842 "%s : buffer or buffer range not large enough at index %zu",
845 message_tag, ii); 843 message_tag, ii);
846 ERRORSTATE_SET_GL_ERROR( 844 ERRORSTATE_SET_GL_ERROR(
847 error_state, GL_INVALID_OPERATION, func_name, msg.c_str()); 845 error_state, GL_INVALID_OPERATION, func_name, msg.c_str());
848 return false; 846 return false;
849 } 847 }
850 } 848 }
851 return true; 849 return true;
852 } 850 }
853 851
854 void BufferManager::IncreaseMappedBufferCount() {
855 DCHECK_GT(std::numeric_limits<uint32_t>::max(), mapped_buffer_count_);
856 mapped_buffer_count_++;
857 }
858
859 void BufferManager::DecreaseMappedBufferCount() {
860 DCHECK_LT(0u, mapped_buffer_count_);
861 mapped_buffer_count_--;
862 }
863
864 } // namespace gles2 852 } // namespace gles2
865 } // namespace gpu 853 } // namespace gpu
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698