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 DCHECK(range > 0); | |
336 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.
| |
337 (gl_impl->*delete_fn)(first_id, range); | |
338 gl_impl->helper()->CommandBufferHelper::Flush(); | |
339 } | |
340 | |
341 void FreeContext(GLES2Implementation* gl_impl) override {} | |
342 | |
343 private: | |
344 base::Lock lock_; | |
345 IdAllocator id_allocator_; | |
346 }; | |
347 | |
320 ShareGroup::ShareGroup(bool bind_generates_resource) | 348 ShareGroup::ShareGroup(bool bind_generates_resource) |
321 : bind_generates_resource_(bind_generates_resource) { | 349 : bind_generates_resource_(bind_generates_resource) { |
322 if (bind_generates_resource) { | 350 if (bind_generates_resource) { |
323 for (int i = 0; i < id_namespaces::kNumIdNamespaces; ++i) { | 351 for (int i = 0; i < id_namespaces::kNumIdNamespaces; ++i) { |
324 if (i == id_namespaces::kProgramsAndShaders) { | 352 if (i == id_namespaces::kProgramsAndShaders) { |
325 id_handlers_[i].reset(new NonReusedIdHandler()); | 353 id_handlers_[i].reset(new NonReusedIdHandler()); |
326 } else { | 354 } else { |
327 id_handlers_[i].reset(new IdHandler()); | 355 id_handlers_[i].reset(new IdHandler()); |
328 } | 356 } |
329 } | 357 } |
330 } else { | 358 } else { |
331 for (int i = 0; i < id_namespaces::kNumIdNamespaces; ++i) { | 359 for (int i = 0; i < id_namespaces::kNumIdNamespaces; ++i) { |
332 if (i == id_namespaces::kProgramsAndShaders) { | 360 if (i == id_namespaces::kProgramsAndShaders) { |
333 id_handlers_[i].reset(new NonReusedIdHandler()); | 361 id_handlers_[i].reset(new NonReusedIdHandler()); |
334 } else { | 362 } else { |
335 id_handlers_[i].reset(new StrictIdHandler(i)); | 363 id_handlers_[i].reset(new StrictIdHandler(i)); |
336 } | 364 } |
337 } | 365 } |
338 } | 366 } |
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 |