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

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

Issue 2469803003: Revert of Initialize buffers before allowing access to them. (Closed)
Patch Set: 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 #ifndef GPU_COMMAND_BUFFER_SERVICE_BUFFER_MANAGER_H_ 5 #ifndef GPU_COMMAND_BUFFER_SERVICE_BUFFER_MANAGER_H_
6 #define GPU_COMMAND_BUFFER_SERVICE_BUFFER_MANAGER_H_ 6 #define GPU_COMMAND_BUFFER_SERVICE_BUFFER_MANAGER_H_
7 7
8 #include <stddef.h> 8 #include <stddef.h>
9 #include <stdint.h> 9 #include <stdint.h>
10 10
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 // count is in elements of type. 71 // count is in elements of type.
72 bool GetMaxValueForRange(GLuint offset, GLsizei count, GLenum type, 72 bool GetMaxValueForRange(GLuint offset, GLsizei count, GLenum type,
73 bool primitive_restart_enabled, GLuint* max_value); 73 bool primitive_restart_enabled, GLuint* max_value);
74 74
75 // Returns a pointer to shadowed data. 75 // Returns a pointer to shadowed data.
76 const void* GetRange(GLintptr offset, GLsizeiptr size) const; 76 const void* GetRange(GLintptr offset, GLsizeiptr size) const;
77 77
78 // Check if an offset, size range is valid for the current buffer. 78 // Check if an offset, size range is valid for the current buffer.
79 bool CheckRange(GLintptr offset, GLsizeiptr size) const; 79 bool CheckRange(GLintptr offset, GLsizeiptr size) const;
80 80
81 // Sets a range of this buffer's shadowed data. 81 // Sets a range of this buffer's shadowed data. Returns false if offset/size
82 void SetRange(GLintptr offset, GLsizeiptr size, const GLvoid * data); 82 // is out of range.
83 bool SetRange(GLintptr offset, GLsizeiptr size, const GLvoid * data);
83 84
84 bool IsDeleted() const { 85 bool IsDeleted() const {
85 return deleted_; 86 return deleted_;
86 } 87 }
87 88
88 bool IsValid() const { 89 bool IsValid() const {
89 return initial_target() && !IsDeleted(); 90 return initial_target() && !IsDeleted();
90 } 91 }
91 92
92 bool IsClientSideArray() const { 93 bool IsClientSideArray() const {
93 return is_client_side_array_; 94 return is_client_side_array_;
94 } 95 }
95 96
96 void SetMappedRange(GLintptr offset, GLsizeiptr size, GLenum access, 97 void SetMappedRange(GLintptr offset, GLsizeiptr size, GLenum access,
97 void* pointer, scoped_refptr<gpu::Buffer> shm, 98 void* pointer, scoped_refptr<gpu::Buffer> shm,
98 unsigned int shm_offset); 99 unsigned int shm_offset) {
99 void RemoveMappedRange(); 100 mapped_range_.reset(
101 new MappedRange(offset, size, access, pointer, shm, shm_offset));
102 }
103
104 void RemoveMappedRange() {
105 mapped_range_.reset(nullptr);
106 }
107
100 const MappedRange* GetMappedRange() const { 108 const MappedRange* GetMappedRange() const {
101 return mapped_range_.get(); 109 return mapped_range_.get();
102 } 110 }
103 111
104 private: 112 private:
105 friend class BufferManager; 113 friend class BufferManager;
106 friend class BufferManagerTestBase; 114 friend class BufferManagerTestBase;
107 friend class base::RefCounted<Buffer>; 115 friend class base::RefCounted<Buffer>;
108 116
109 // Represents a range in a buffer. 117 // Represents a range in a buffer.
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
291 bool UseNonZeroSizeForClientSideArrayBuffer(); 299 bool UseNonZeroSizeForClientSideArrayBuffer();
292 300
293 void SetPrimitiveRestartFixedIndexIfNecessary(GLenum type); 301 void SetPrimitiveRestartFixedIndexIfNecessary(GLenum type);
294 302
295 Buffer* GetBufferInfoForTarget(ContextState* state, GLenum target) const; 303 Buffer* GetBufferInfoForTarget(ContextState* state, GLenum target) const;
296 304
297 // base::trace_event::MemoryDumpProvider implementation. 305 // base::trace_event::MemoryDumpProvider implementation.
298 bool OnMemoryDump(const base::trace_event::MemoryDumpArgs& args, 306 bool OnMemoryDump(const base::trace_event::MemoryDumpArgs& args,
299 base::trace_event::ProcessMemoryDump* pmd) override; 307 base::trace_event::ProcessMemoryDump* pmd) override;
300 308
301 // Validate if a buffer is bound at target, if it's unmapped, if it's
302 // large enough. Return the buffer bound to |target| if access is granted;
303 // return nullptr if a GL error is generated.
304 Buffer* RequestBufferAccess(ContextState* context_state,
305 GLenum target,
306 GLintptr offset,
307 GLsizeiptr size,
308 const char* func_name);
309 // Same as above, but assume to access the entire buffer.
310 Buffer* RequestBufferAccess(ContextState* context_state,
311 GLenum target,
312 const char* func_name);
313 // Same as above, but it can be any buffer rather than the buffer bound to
314 // |target|. Return true if access is granted; return false if a GL error is
315 // generated.
316 bool RequestBufferAccess(ErrorState* error_state,
317 Buffer* buffer,
318 const char* func_name,
319 const char* message_tag);
320
321 uint32_t mapped_buffer_count() const {
322 return mapped_buffer_count_;
323 }
324
325 private: 309 private:
326 friend class Buffer; 310 friend class Buffer;
327 friend class TestHelper; // Needs access to DoBufferData. 311 friend class TestHelper; // Needs access to DoBufferData.
328 friend class BufferManagerTestBase; // Needs access to DoBufferSubData. 312 friend class BufferManagerTestBase; // Needs access to DoBufferSubData.
329 friend class IndexedBufferBindingHostTest; // Needs access to SetInfo. 313 friend class IndexedBufferBindingHostTest; // Needs access to SetInfo.
330 314
331 void StartTracking(Buffer* buffer); 315 void StartTracking(Buffer* buffer);
332 void StopTracking(Buffer* buffer); 316 void StopTracking(Buffer* buffer);
333 317
334 // Does a glBufferSubData and updates the appropriate accounting. 318 // Does a glBufferSubData and updates the appropriate accounting.
335 // Assumes the values have already been validated. 319 // Assumes the values have already been validated.
336 void DoBufferSubData( 320 void DoBufferSubData(
321 ErrorState* error_state,
337 Buffer* buffer, 322 Buffer* buffer,
338 GLenum target, 323 GLenum target,
339 GLintptr offset, 324 GLintptr offset,
340 GLsizeiptr size, 325 GLsizeiptr size,
341 const GLvoid* data); 326 const GLvoid* data);
342 327
343 // Does a glBufferData and updates the appropriate accounting. 328 // Does a glBufferData and updates the appropriate accounting.
344 // Assumes the values have already been validated. 329 // Assumes the values have already been validated.
345 void DoBufferData( 330 void DoBufferData(
346 ErrorState* error_state, 331 ErrorState* error_state,
(...skipping 18 matching lines...) Expand all
365 bool UseShadowBuffer(GLenum target, GLenum usage); 350 bool UseShadowBuffer(GLenum target, GLenum usage);
366 351
367 // Sets the size, usage and initial data of a buffer. 352 // Sets the size, usage and initial data of a buffer.
368 // If data is NULL buffer will be initialized to 0 if shadowed. 353 // If data is NULL buffer will be initialized to 0 if shadowed.
369 void SetInfo(Buffer* buffer, 354 void SetInfo(Buffer* buffer,
370 GLenum target, 355 GLenum target,
371 GLsizeiptr size, 356 GLsizeiptr size,
372 GLenum usage, 357 GLenum usage,
373 bool use_shadow); 358 bool use_shadow);
374 359
375 void IncreaseMappedBufferCount();
376 void DecreaseMappedBufferCount();
377
378 std::unique_ptr<MemoryTypeTracker> memory_type_tracker_; 360 std::unique_ptr<MemoryTypeTracker> memory_type_tracker_;
379 MemoryTracker* memory_tracker_; 361 MemoryTracker* memory_tracker_;
380 scoped_refptr<FeatureInfo> feature_info_; 362 scoped_refptr<FeatureInfo> feature_info_;
381 363
382 // Info for each buffer in the system. 364 // Info for each buffer in the system.
383 typedef base::hash_map<GLuint, scoped_refptr<Buffer> > BufferMap; 365 typedef base::hash_map<GLuint, scoped_refptr<Buffer> > BufferMap;
384 BufferMap buffers_; 366 BufferMap buffers_;
385 367
386 // The maximum size of buffers. 368 // The maximum size of buffers.
387 GLsizeiptr max_buffer_size_; 369 GLsizeiptr max_buffer_size_;
388 370
389 // Whether or not buffers can be bound to multiple targets. 371 // Whether or not buffers can be bound to multiple targets.
390 bool allow_buffers_on_multiple_targets_; 372 bool allow_buffers_on_multiple_targets_;
391 373
392 // Whether or not allow using GL_FIXED type for vertex attribs. 374 // Whether or not allow using GL_FIXED type for vertex attribs.
393 bool allow_fixed_attribs_; 375 bool allow_fixed_attribs_;
394 376
395 // Counts the number of Buffer allocated with 'this' as its manager. 377 // Counts the number of Buffer allocated with 'this' as its manager.
396 // Allows to check no Buffer will outlive this. 378 // Allows to check no Buffer will outlive this.
397 unsigned int buffer_count_; 379 unsigned int buffer_count_;
398 380
399 GLuint primitive_restart_fixed_index_; 381 GLuint primitive_restart_fixed_index_;
400 382
401 bool lost_context_; 383 bool lost_context_;
402 bool use_client_side_arrays_for_stream_buffers_; 384 bool use_client_side_arrays_for_stream_buffers_;
403 385
404 // Keep track of total mapped buffer count. In most use cases it should be 0,
405 // so we could bypass checking each individual buffer as an optimization.
406 uint32_t mapped_buffer_count_;
407
408 DISALLOW_COPY_AND_ASSIGN(BufferManager); 386 DISALLOW_COPY_AND_ASSIGN(BufferManager);
409 }; 387 };
410 388
411 } // namespace gles2 389 } // namespace gles2
412 } // namespace gpu 390 } // namespace gpu
413 391
414 #endif // GPU_COMMAND_BUFFER_SERVICE_BUFFER_MANAGER_H_ 392 #endif // GPU_COMMAND_BUFFER_SERVICE_BUFFER_MANAGER_H_
OLDNEW
« no previous file with comments | « content/test/gpu/gpu_tests/webgl_conformance_expectations.py ('k') | gpu/command_buffer/service/buffer_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698