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

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

Issue 2471533003: Minor improvement in uniform block backing buffer validation. (Closed)
Patch Set: rebase 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 448 matching lines...) Expand 10 before | Expand all | Expand 10 after
806 bool BufferManager::RequestBuffersAccess( 802 bool BufferManager::RequestBuffersAccess(
807 ErrorState* error_state, 803 ErrorState* error_state,
808 const IndexedBufferBindingHost* bindings, 804 const IndexedBufferBindingHost* bindings,
809 const std::vector<GLsizeiptr>& variable_sizes, 805 const std::vector<GLsizeiptr>& variable_sizes,
810 GLsizei count, 806 GLsizei count,
811 const char* func_name, 807 const char* func_name,
812 const char* message_tag) { 808 const char* message_tag) {
813 DCHECK(error_state); 809 DCHECK(error_state);
814 DCHECK(bindings); 810 DCHECK(bindings);
815 for (size_t ii = 0; ii < variable_sizes.size(); ++ii) { 811 for (size_t ii = 0; ii < variable_sizes.size(); ++ii) {
812 if (variable_sizes[ii] == 0)
813 continue;
816 Buffer* buffer = bindings->GetBufferBinding(ii); 814 Buffer* buffer = bindings->GetBufferBinding(ii);
817 if (!buffer) { 815 if (!buffer) {
818 std::string msg = base::StringPrintf( 816 std::string msg = base::StringPrintf(
819 "%s : no buffer bound at index %zu", message_tag, ii); 817 "%s : no buffer bound at index %zu", message_tag, ii);
820 ERRORSTATE_SET_GL_ERROR( 818 ERRORSTATE_SET_GL_ERROR(
821 error_state, GL_INVALID_OPERATION, func_name, msg.c_str()); 819 error_state, GL_INVALID_OPERATION, func_name, msg.c_str());
822 return false; 820 return false;
823 } 821 }
824 if (buffer->GetMappedRange()) { 822 if (buffer->GetMappedRange()) {
825 std::string msg = base::StringPrintf( 823 std::string msg = base::StringPrintf(
(...skipping 11 matching lines...) Expand all
837 "%s : buffer or buffer range not large enough at index %zu", 835 "%s : buffer or buffer range not large enough at index %zu",
838 message_tag, ii); 836 message_tag, ii);
839 ERRORSTATE_SET_GL_ERROR( 837 ERRORSTATE_SET_GL_ERROR(
840 error_state, GL_INVALID_OPERATION, func_name, msg.c_str()); 838 error_state, GL_INVALID_OPERATION, func_name, msg.c_str());
841 return false; 839 return false;
842 } 840 }
843 } 841 }
844 return true; 842 return true;
845 } 843 }
846 844
847 void BufferManager::IncreaseMappedBufferCount() {
848 DCHECK_GT(std::numeric_limits<uint32_t>::max(), mapped_buffer_count_);
849 mapped_buffer_count_++;
850 }
851
852 void BufferManager::DecreaseMappedBufferCount() {
853 DCHECK_LT(0u, mapped_buffer_count_);
854 mapped_buffer_count_--;
855 }
856
857 bool BufferManager::RequestBufferAccessV(ErrorState* error_state, 845 bool BufferManager::RequestBufferAccessV(ErrorState* error_state,
858 Buffer* buffer, 846 Buffer* buffer,
859 const char* func_name, 847 const char* func_name,
860 const char* error_message_format, 848 const char* error_message_format,
861 va_list varargs) { 849 va_list varargs) {
862 DCHECK(error_state); 850 DCHECK(error_state);
863 851
864 if (!buffer || buffer->IsDeleted()) { 852 if (!buffer || buffer->IsDeleted()) {
865 std::string message_tag = base::StringPrintV(error_message_format, varargs); 853 std::string message_tag = base::StringPrintV(error_message_format, varargs);
866 std::string msg = base::StringPrintf("%s : no buffer", message_tag.c_str()); 854 std::string msg = base::StringPrintf("%s : no buffer", message_tag.c_str());
867 ERRORSTATE_SET_GL_ERROR(error_state, GL_INVALID_OPERATION, func_name, 855 ERRORSTATE_SET_GL_ERROR(error_state, GL_INVALID_OPERATION, func_name,
868 msg.c_str()); 856 msg.c_str());
869 return false; 857 return false;
870 } 858 }
871 if (buffer->GetMappedRange()) { 859 if (buffer->GetMappedRange()) {
872 std::string message_tag = base::StringPrintV(error_message_format, varargs); 860 std::string message_tag = base::StringPrintV(error_message_format, varargs);
873 std::string msg = base::StringPrintf("%s : buffer is mapped", 861 std::string msg = base::StringPrintf("%s : buffer is mapped",
874 message_tag.c_str()); 862 message_tag.c_str());
875 ERRORSTATE_SET_GL_ERROR(error_state, GL_INVALID_OPERATION, func_name, 863 ERRORSTATE_SET_GL_ERROR(error_state, GL_INVALID_OPERATION, func_name,
876 msg.c_str()); 864 msg.c_str());
877 return false; 865 return false;
878 } 866 }
879 return true; 867 return true;
880 } 868 }
881 869
882 } // namespace gles2 870 } // namespace gles2
883 } // namespace gpu 871 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/buffer_manager.h ('k') | gpu/command_buffer/service/gles2_cmd_decoder.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698