Chromium Code Reviews| Index: gpu/command_buffer/client/share_group.cc |
| diff --git a/gpu/command_buffer/client/share_group.cc b/gpu/command_buffer/client/share_group.cc |
| index f5c9bf1144cfe5c148db93f0226ac664989d57e8..d87ea04df072f82c30239503e28666bac389d544 100644 |
| --- a/gpu/command_buffer/client/share_group.cc |
| +++ b/gpu/command_buffer/client/share_group.cc |
| @@ -317,6 +317,34 @@ class NonReusedIdHandler : public IdHandlerInterface { |
| GLuint last_id_; |
| }; |
| +class RangeIdHandler : public RangeIdHandlerInterface { |
| + public: |
| + RangeIdHandler() {} |
| + |
| + void MakeIdRange(GLES2Implementation* /*gl_impl*/, |
| + GLsizei n, |
| + GLuint* first_id) override { |
| + base::AutoLock auto_lock(lock_); |
| + *first_id = id_allocator_.AllocateIDRange(n); |
| + } |
| + |
| + void FreeIdRange(GLES2Implementation* gl_impl, |
| + const GLuint first_id, |
| + GLsizei range, |
| + DeleteRangeFn delete_fn) override { |
| + DCHECK(range > 0); |
| + id_allocator_.FreeIDRange(first_id, range); |
|
vmiura
2015/06/19 21:55:22
Does this require holding lock_?
Kimmo Kinnunen
2015/06/23 12:03:10
Done.
|
| + (gl_impl->*delete_fn)(first_id, range); |
| + gl_impl->helper()->CommandBufferHelper::Flush(); |
| + } |
| + |
| + void FreeContext(GLES2Implementation* gl_impl) override {} |
| + |
| + private: |
| + base::Lock lock_; |
| + IdAllocator id_allocator_; |
| +}; |
| + |
| ShareGroup::ShareGroup(bool bind_generates_resource) |
| : bind_generates_resource_(bind_generates_resource) { |
| if (bind_generates_resource) { |
| @@ -336,7 +364,11 @@ ShareGroup::ShareGroup(bool bind_generates_resource) |
| } |
| } |
| } |
| + |
| program_info_manager_.reset(new ProgramInfoManager); |
| + for (auto& range_id_handler : range_id_handlers_) { |
| + range_id_handler.reset(new RangeIdHandler()); |
| + } |
| } |
| void ShareGroup::set_program_info_manager(ProgramInfoManager* manager) { |