| 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 |