OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 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 "cc/resources/resource_provider.h" | 5 #include "cc/resources/resource_provider.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <limits> | 8 #include <limits> |
9 | 9 |
10 #include "base/containers/hash_tables.h" | 10 #include "base/containers/hash_tables.h" |
(...skipping 532 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
543 DCHECK(gl); | 543 DCHECK(gl); |
544 gl->BindTexture(GL_TEXTURE_RECTANGLE_ARB, resource->gl_id); | 544 gl->BindTexture(GL_TEXTURE_RECTANGLE_ARB, resource->gl_id); |
545 gl->TexImageIOSurface2DCHROMIUM( | 545 gl->TexImageIOSurface2DCHROMIUM( |
546 GL_TEXTURE_RECTANGLE_ARB, size.width(), size.height(), io_surface_id, 0); | 546 GL_TEXTURE_RECTANGLE_ARB, size.width(), size.height(), io_surface_id, 0); |
547 resource->allocated = true; | 547 resource->allocated = true; |
548 return id; | 548 return id; |
549 } | 549 } |
550 | 550 |
551 ResourceId ResourceProvider::CreateResourceFromTextureMailbox( | 551 ResourceId ResourceProvider::CreateResourceFromTextureMailbox( |
552 const TextureMailbox& mailbox, | 552 const TextureMailbox& mailbox, |
553 scoped_ptr<SingleReleaseCallbackImpl> release_callback_impl) { | 553 scoped_ptr<SingleReleaseCallbackImpl> release_callback_impl, |
| 554 bool read_lock_fences_enabled) { |
554 DCHECK(thread_checker_.CalledOnValidThread()); | 555 DCHECK(thread_checker_.CalledOnValidThread()); |
555 // Just store the information. Mailbox will be consumed in LockForRead(). | 556 // Just store the information. Mailbox will be consumed in LockForRead(). |
556 ResourceId id = next_id_++; | 557 ResourceId id = next_id_++; |
557 DCHECK(mailbox.IsValid()); | 558 DCHECK(mailbox.IsValid()); |
558 Resource* resource = nullptr; | 559 Resource* resource = nullptr; |
559 if (mailbox.IsTexture()) { | 560 if (mailbox.IsTexture()) { |
560 resource = InsertResource( | 561 resource = InsertResource( |
561 id, Resource(0, gfx::Size(), Resource::EXTERNAL, mailbox.target(), | 562 id, Resource(0, gfx::Size(), Resource::EXTERNAL, mailbox.target(), |
562 mailbox.nearest_neighbor() ? GL_NEAREST : GL_LINEAR, 0, | 563 mailbox.nearest_neighbor() ? GL_NEAREST : GL_LINEAR, 0, |
563 GL_CLAMP_TO_EDGE, TEXTURE_HINT_IMMUTABLE, RGBA_8888)); | 564 GL_CLAMP_TO_EDGE, TEXTURE_HINT_IMMUTABLE, RGBA_8888)); |
564 } else { | 565 } else { |
565 DCHECK(mailbox.IsSharedMemory()); | 566 DCHECK(mailbox.IsSharedMemory()); |
566 SharedBitmap* shared_bitmap = mailbox.shared_bitmap(); | 567 SharedBitmap* shared_bitmap = mailbox.shared_bitmap(); |
567 uint8_t* pixels = shared_bitmap->pixels(); | 568 uint8_t* pixels = shared_bitmap->pixels(); |
568 DCHECK(pixels); | 569 DCHECK(pixels); |
569 resource = InsertResource( | 570 resource = InsertResource( |
570 id, Resource(pixels, shared_bitmap, mailbox.size_in_pixels(), | 571 id, Resource(pixels, shared_bitmap, mailbox.size_in_pixels(), |
571 Resource::EXTERNAL, GL_LINEAR, GL_CLAMP_TO_EDGE)); | 572 Resource::EXTERNAL, GL_LINEAR, GL_CLAMP_TO_EDGE)); |
572 } | 573 } |
573 resource->allocated = true; | 574 resource->allocated = true; |
574 resource->mailbox = mailbox; | 575 resource->mailbox = mailbox; |
575 resource->release_callback_impl = | 576 resource->release_callback_impl = |
576 base::Bind(&SingleReleaseCallbackImpl::Run, | 577 base::Bind(&SingleReleaseCallbackImpl::Run, |
577 base::Owned(release_callback_impl.release())); | 578 base::Owned(release_callback_impl.release())); |
| 579 resource->read_lock_fences_enabled = read_lock_fences_enabled; |
578 return id; | 580 return id; |
579 } | 581 } |
580 | 582 |
| 583 ResourceId ResourceProvider::CreateResourceFromTextureMailbox( |
| 584 const TextureMailbox& mailbox, |
| 585 scoped_ptr<SingleReleaseCallbackImpl> release_callback_impl) { |
| 586 return CreateResourceFromTextureMailbox(mailbox, release_callback_impl.Pass(), |
| 587 false); |
| 588 } |
| 589 |
581 void ResourceProvider::DeleteResource(ResourceId id) { | 590 void ResourceProvider::DeleteResource(ResourceId id) { |
582 DCHECK(thread_checker_.CalledOnValidThread()); | 591 DCHECK(thread_checker_.CalledOnValidThread()); |
583 ResourceMap::iterator it = resources_.find(id); | 592 ResourceMap::iterator it = resources_.find(id); |
584 CHECK(it != resources_.end()); | 593 CHECK(it != resources_.end()); |
585 Resource* resource = &it->second; | 594 Resource* resource = &it->second; |
586 DCHECK(!resource->marked_for_deletion); | 595 DCHECK(!resource->marked_for_deletion); |
587 DCHECK_EQ(resource->imported_count, 0); | 596 DCHECK_EQ(resource->imported_count, 0); |
588 DCHECK(resource->pending_set_pixels || !resource->locked_for_write); | 597 DCHECK(resource->pending_set_pixels || !resource->locked_for_write); |
589 | 598 |
590 if (resource->exported_count > 0 || resource->lock_for_read_count > 0) { | 599 if (resource->exported_count > 0 || resource->lock_for_read_count > 0) { |
(...skipping 1456 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2047 } | 2056 } |
2048 | 2057 |
2049 class GrContext* ResourceProvider::GrContext(bool worker_context) const { | 2058 class GrContext* ResourceProvider::GrContext(bool worker_context) const { |
2050 ContextProvider* context_provider = | 2059 ContextProvider* context_provider = |
2051 worker_context ? output_surface_->worker_context_provider() | 2060 worker_context ? output_surface_->worker_context_provider() |
2052 : output_surface_->context_provider(); | 2061 : output_surface_->context_provider(); |
2053 return context_provider ? context_provider->GrContext() : NULL; | 2062 return context_provider ? context_provider->GrContext() : NULL; |
2054 } | 2063 } |
2055 | 2064 |
2056 } // namespace cc | 2065 } // namespace cc |
OLD | NEW |