| Index: gpu/command_buffer/service/buffer_manager.h
|
| diff --git a/gpu/command_buffer/service/buffer_manager.h b/gpu/command_buffer/service/buffer_manager.h
|
| index 22a6e429f4d4720b1f2de8cccd12adc71d912d58..29bfaf4d431cf0809a6e1ecc920ace2df5fdedf4 100644
|
| --- a/gpu/command_buffer/service/buffer_manager.h
|
| +++ b/gpu/command_buffer/service/buffer_manager.h
|
| @@ -11,6 +11,7 @@
|
| #include "base/logging.h"
|
| #include "base/memory/ref_counted.h"
|
| #include "base/memory/scoped_ptr.h"
|
| +#include "gpu/command_buffer/common/buffer.h"
|
| #include "gpu/command_buffer/service/gl_utils.h"
|
| #include "gpu/command_buffer/service/memory_tracking.h"
|
| #include "gpu/gpu_export.h"
|
| @@ -27,6 +28,19 @@ class TestHelper;
|
| // Info about Buffers currently in the system.
|
| class GPU_EXPORT Buffer : public base::RefCounted<Buffer> {
|
| public:
|
| + struct MappedRange {
|
| + GLintptr offset;
|
| + GLsizeiptr size;
|
| + GLenum access;
|
| + void* pointer; // Pointer returned by driver.
|
| + scoped_refptr<gpu::Buffer> shm; // Client side mem.
|
| +
|
| + MappedRange(GLintptr offset, GLsizeiptr size, GLenum access,
|
| + void* pointer, scoped_refptr<gpu::Buffer> shm);
|
| + ~MappedRange();
|
| + void* GetShmPointer() const;
|
| + };
|
| +
|
| Buffer(BufferManager* manager, GLuint service_id);
|
|
|
| GLuint service_id() const {
|
| @@ -67,6 +81,19 @@ class GPU_EXPORT Buffer : public base::RefCounted<Buffer> {
|
| return is_client_side_array_;
|
| }
|
|
|
| + void SetMappedRange(GLintptr offset, GLsizeiptr size, GLenum access,
|
| + void* pointer, scoped_refptr<gpu::Buffer> shm) {
|
| + mapped_range_.reset(new MappedRange(offset, size, access, pointer, shm));
|
| + }
|
| +
|
| + void RemoveMappedRange() {
|
| + mapped_range_.reset(nullptr);
|
| + }
|
| +
|
| + const MappedRange* GetMappedRange() const {
|
| + return mapped_range_.get();
|
| + }
|
| +
|
| private:
|
| friend class BufferManager;
|
| friend class BufferManagerTestBase;
|
| @@ -163,6 +190,9 @@ class GPU_EXPORT Buffer : public base::RefCounted<Buffer> {
|
| // Usage of buffer.
|
| GLenum usage_;
|
|
|
| + // Data cached from last glMapBufferRange call.
|
| + scoped_ptr<MappedRange> mapped_range_;
|
| +
|
| // A map of ranges to the highest value in that range of a certain type.
|
| typedef std::map<Range, GLuint, Range::Less> RangeToMaxValueMap;
|
| RangeToMaxValueMap range_set_;
|
| @@ -232,15 +262,16 @@ class GPU_EXPORT BufferManager {
|
| // set to a non-zero size.
|
| bool UseNonZeroSizeForClientSideArrayBuffer();
|
|
|
| + Buffer* GetBufferInfoForTarget(ContextState* state, GLenum target) const;
|
| +
|
| private:
|
| friend class Buffer;
|
| friend class TestHelper; // Needs access to DoBufferData.
|
| friend class BufferManagerTestBase; // Needs access to DoBufferSubData.
|
| +
|
| void StartTracking(Buffer* buffer);
|
| void StopTracking(Buffer* buffer);
|
|
|
| - Buffer* GetBufferInfoForTarget(ContextState* state, GLenum target);
|
| -
|
| // Does a glBufferSubData and updates the approriate accounting.
|
| // Assumes the values have already been validated.
|
| void DoBufferSubData(
|
|
|