OLD | NEW |
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 <stack> | 5 #include <stack> |
6 #include <vector> | 6 #include <vector> |
7 | 7 |
8 #include "gpu/command_buffer/client/share_group.h" | 8 #include "gpu/command_buffer/client/share_group.h" |
9 | 9 |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
220 return false; | 220 return false; |
221 } | 221 } |
222 | 222 |
223 virtual void FreeContext(GLES2Implementation* gl_impl) OVERRIDE {} | 223 virtual void FreeContext(GLES2Implementation* gl_impl) OVERRIDE {} |
224 | 224 |
225 private: | 225 private: |
226 base::Lock lock_; | 226 base::Lock lock_; |
227 GLuint last_id_; | 227 GLuint last_id_; |
228 }; | 228 }; |
229 | 229 |
| 230 class RangeIdHandler : public RangeIdHandlerInterface { |
| 231 public: |
| 232 RangeIdHandler() {} |
| 233 virtual ~RangeIdHandler() {} |
| 234 |
| 235 virtual void MakeIdRange(GLES2Implementation* /*gl_impl*/, |
| 236 GLsizei n, |
| 237 GLuint* first_id) override { |
| 238 base::AutoLock auto_lock(lock_); |
| 239 *first_id = id_allocator_.AllocateIDRange(n); |
| 240 } |
| 241 |
| 242 virtual void FreeIdRange(GLES2Implementation* gl_impl, |
| 243 const GLuint first_id, |
| 244 GLsizei range, |
| 245 DeleteRangeFn delete_fn) override { |
| 246 DCHECK(range > 0); |
| 247 id_allocator_.FreeIDRange(first_id, range); |
| 248 (gl_impl->*delete_fn)(first_id, range); |
| 249 gl_impl->helper()->CommandBufferHelper::Flush(); |
| 250 } |
| 251 |
| 252 virtual void FreeContext(GLES2Implementation* gl_impl) override {} |
| 253 |
| 254 private: |
| 255 base::Lock lock_; |
| 256 IdAllocator id_allocator_; |
| 257 }; |
| 258 |
230 ShareGroup::ShareGroup(bool bind_generates_resource) | 259 ShareGroup::ShareGroup(bool bind_generates_resource) |
231 : bind_generates_resource_(bind_generates_resource) { | 260 : bind_generates_resource_(bind_generates_resource) { |
232 if (bind_generates_resource) { | 261 if (bind_generates_resource) { |
233 for (int i = 0; i < id_namespaces::kNumIdNamespaces; ++i) { | 262 for (int i = 0; i < id_namespaces::kNumIdNamespaces; ++i) { |
234 if (i == id_namespaces::kProgramsAndShaders) { | 263 if (i == id_namespaces::kProgramsAndShaders) { |
235 id_handlers_[i].reset(new NonReusedIdHandler()); | 264 id_handlers_[i].reset(new NonReusedIdHandler()); |
236 } else { | 265 } else { |
237 id_handlers_[i].reset(new IdHandler()); | 266 id_handlers_[i].reset(new IdHandler()); |
238 } | 267 } |
239 } | 268 } |
240 } else { | 269 } else { |
241 for (int i = 0; i < id_namespaces::kNumIdNamespaces; ++i) { | 270 for (int i = 0; i < id_namespaces::kNumIdNamespaces; ++i) { |
242 if (i == id_namespaces::kProgramsAndShaders) { | 271 if (i == id_namespaces::kProgramsAndShaders) { |
243 id_handlers_[i].reset(new NonReusedIdHandler()); | 272 id_handlers_[i].reset(new NonReusedIdHandler()); |
244 } else { | 273 } else { |
245 id_handlers_[i].reset(new StrictIdHandler(i)); | 274 id_handlers_[i].reset(new StrictIdHandler(i)); |
246 } | 275 } |
247 } | 276 } |
248 } | 277 } |
| 278 for (auto& range_id_handler : range_id_handlers_) { |
| 279 range_id_handler.reset(new RangeIdHandler()); |
| 280 } |
249 program_info_manager_.reset(ProgramInfoManager::Create(false)); | 281 program_info_manager_.reset(ProgramInfoManager::Create(false)); |
250 } | 282 } |
251 | 283 |
252 void ShareGroup::set_program_info_manager(ProgramInfoManager* manager) { | 284 void ShareGroup::set_program_info_manager(ProgramInfoManager* manager) { |
253 program_info_manager_.reset(manager); | 285 program_info_manager_.reset(manager); |
254 } | 286 } |
255 | 287 |
256 ShareGroup::~ShareGroup() {} | 288 ShareGroup::~ShareGroup() {} |
257 | 289 |
258 } // namespace gles2 | 290 } // namespace gles2 |
259 } // namespace gpu | 291 } // namespace gpu |
OLD | NEW |