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 299 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
310 return false; | 310 return false; |
311 } | 311 } |
312 | 312 |
313 void FreeContext(GLES2Implementation* gl_impl) override {} | 313 void FreeContext(GLES2Implementation* gl_impl) override {} |
314 | 314 |
315 private: | 315 private: |
316 base::Lock lock_; | 316 base::Lock lock_; |
317 GLuint last_id_; | 317 GLuint last_id_; |
318 }; | 318 }; |
319 | 319 |
| 320 class RangeIdHandler : public RangeIdHandlerInterface { |
| 321 public: |
| 322 RangeIdHandler() {} |
| 323 |
| 324 void MakeIdRange(GLES2Implementation* /*gl_impl*/, |
| 325 GLsizei n, |
| 326 GLuint* first_id) override { |
| 327 base::AutoLock auto_lock(lock_); |
| 328 *first_id = id_allocator_.AllocateIDRange(n); |
| 329 } |
| 330 |
| 331 void FreeIdRange(GLES2Implementation* gl_impl, |
| 332 const GLuint first_id, |
| 333 GLsizei range, |
| 334 DeleteRangeFn delete_fn) override { |
| 335 base::AutoLock auto_lock(lock_); |
| 336 DCHECK(range > 0); |
| 337 id_allocator_.FreeIDRange(first_id, range); |
| 338 (gl_impl->*delete_fn)(first_id, range); |
| 339 gl_impl->helper()->CommandBufferHelper::OrderingBarrier(); |
| 340 } |
| 341 |
| 342 void FreeContext(GLES2Implementation* gl_impl) override {} |
| 343 |
| 344 private: |
| 345 base::Lock lock_; |
| 346 IdAllocator id_allocator_; |
| 347 }; |
| 348 |
320 ShareGroup::ShareGroup(bool bind_generates_resource) | 349 ShareGroup::ShareGroup(bool bind_generates_resource) |
321 : bind_generates_resource_(bind_generates_resource) { | 350 : bind_generates_resource_(bind_generates_resource) { |
322 if (bind_generates_resource) { | 351 if (bind_generates_resource) { |
323 for (int i = 0; i < id_namespaces::kNumIdNamespaces; ++i) { | 352 for (int i = 0; i < id_namespaces::kNumIdNamespaces; ++i) { |
324 if (i == id_namespaces::kProgramsAndShaders) { | 353 if (i == id_namespaces::kProgramsAndShaders) { |
325 id_handlers_[i].reset(new NonReusedIdHandler()); | 354 id_handlers_[i].reset(new NonReusedIdHandler()); |
326 } else { | 355 } else { |
327 id_handlers_[i].reset(new IdHandler()); | 356 id_handlers_[i].reset(new IdHandler()); |
328 } | 357 } |
329 } | 358 } |
330 } else { | 359 } else { |
331 for (int i = 0; i < id_namespaces::kNumIdNamespaces; ++i) { | 360 for (int i = 0; i < id_namespaces::kNumIdNamespaces; ++i) { |
332 if (i == id_namespaces::kProgramsAndShaders) { | 361 if (i == id_namespaces::kProgramsAndShaders) { |
333 id_handlers_[i].reset(new NonReusedIdHandler()); | 362 id_handlers_[i].reset(new NonReusedIdHandler()); |
334 } else { | 363 } else { |
335 id_handlers_[i].reset(new StrictIdHandler(i)); | 364 id_handlers_[i].reset(new StrictIdHandler(i)); |
336 } | 365 } |
337 } | 366 } |
338 } | 367 } |
339 program_info_manager_.reset(new ProgramInfoManager); | 368 program_info_manager_.reset(new ProgramInfoManager); |
| 369 for (auto& range_id_handler : range_id_handlers_) { |
| 370 range_id_handler.reset(new RangeIdHandler()); |
| 371 } |
340 } | 372 } |
341 | 373 |
342 void ShareGroup::set_program_info_manager(ProgramInfoManager* manager) { | 374 void ShareGroup::set_program_info_manager(ProgramInfoManager* manager) { |
343 program_info_manager_.reset(manager); | 375 program_info_manager_.reset(manager); |
344 } | 376 } |
345 | 377 |
346 ShareGroup::~ShareGroup() {} | 378 ShareGroup::~ShareGroup() {} |
347 | 379 |
348 } // namespace gles2 | 380 } // namespace gles2 |
349 } // namespace gpu | 381 } // namespace gpu |
OLD | NEW |