OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/video_resource_updater.h" | 5 #include "cc/resources/video_resource_updater.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <algorithm> | 10 #include <algorithm> |
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
219 if (resource_id == 0) | 219 if (resource_id == 0) |
220 return all_resources_.end(); | 220 return all_resources_.end(); |
221 | 221 |
222 gpu::Mailbox mailbox; | 222 gpu::Mailbox mailbox; |
223 if (has_mailbox) { | 223 if (has_mailbox) { |
224 DCHECK(context_provider_); | 224 DCHECK(context_provider_); |
225 | 225 |
226 gpu::gles2::GLES2Interface* gl = context_provider_->ContextGL(); | 226 gpu::gles2::GLES2Interface* gl = context_provider_->ContextGL(); |
227 | 227 |
228 gl->GenMailboxCHROMIUM(mailbox.name); | 228 gl->GenMailboxCHROMIUM(mailbox.name); |
229 ResourceProvider::ScopedWriteLockGL lock(resource_provider_, resource_id); | 229 ResourceProvider::ScopedWriteLockGL lock(resource_provider_, resource_id, |
| 230 false); |
230 gl->ProduceTextureDirectCHROMIUM( | 231 gl->ProduceTextureDirectCHROMIUM( |
231 lock.texture_id(), | 232 lock.texture_id(), |
232 resource_provider_->GetResourceTextureTarget(resource_id), | 233 resource_provider_->GetResourceTextureTarget(resource_id), |
233 mailbox.name); | 234 mailbox.name); |
234 } | 235 } |
235 all_resources_.push_front( | 236 all_resources_.push_front( |
236 PlaneResource(resource_id, plane_size, format, mailbox)); | 237 PlaneResource(resource_id, plane_size, format, mailbox)); |
237 return all_resources_.begin(); | 238 return all_resources_.begin(); |
238 } | 239 } |
239 | 240 |
(...skipping 389 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
629 // Otherwise allocate a new resource. | 630 // Otherwise allocate a new resource. |
630 if (resource == all_resources_.end()) { | 631 if (resource == all_resources_.end()) { |
631 const bool is_immutable = false; | 632 const bool is_immutable = false; |
632 resource = AllocateResource(output_plane_resource_size, copy_target_format, | 633 resource = AllocateResource(output_plane_resource_size, copy_target_format, |
633 true, is_immutable); | 634 true, is_immutable); |
634 } | 635 } |
635 | 636 |
636 ++resource->ref_count; | 637 ++resource->ref_count; |
637 | 638 |
638 ResourceProvider::ScopedWriteLockGL lock(resource_provider_, | 639 ResourceProvider::ScopedWriteLockGL lock(resource_provider_, |
639 resource->resource_id); | 640 resource->resource_id, false); |
640 uint32_t texture_id = lock.texture_id(); | |
641 | |
642 DCHECK_EQ(resource_provider_->GetResourceTextureTarget(resource->resource_id), | 641 DCHECK_EQ(resource_provider_->GetResourceTextureTarget(resource->resource_id), |
643 (GLenum)GL_TEXTURE_2D); | 642 (GLenum)GL_TEXTURE_2D); |
644 | 643 |
645 gl->WaitSyncTokenCHROMIUM(mailbox_holder.sync_token.GetConstData()); | 644 gl->WaitSyncTokenCHROMIUM(mailbox_holder.sync_token.GetConstData()); |
646 uint32_t src_texture_id = gl->CreateAndConsumeTextureCHROMIUM( | 645 uint32_t src_texture_id = gl->CreateAndConsumeTextureCHROMIUM( |
647 mailbox_holder.texture_target, mailbox_holder.mailbox.name); | 646 mailbox_holder.texture_target, mailbox_holder.mailbox.name); |
648 gl->CopySubTextureCHROMIUM(src_texture_id, texture_id, 0, 0, 0, 0, | 647 gl->CopySubTextureCHROMIUM(src_texture_id, lock.texture_id(), 0, 0, 0, 0, |
649 output_plane_resource_size.width(), | 648 output_plane_resource_size.width(), |
650 output_plane_resource_size.height(), false, false, | 649 output_plane_resource_size.height(), false, false, |
651 false); | 650 false); |
652 gl->DeleteTextures(1, &src_texture_id); | 651 gl->DeleteTextures(1, &src_texture_id); |
653 | 652 |
654 // Sync point for use of frame copy. | 653 // Sync point for use of frame copy. |
655 gpu::SyncToken sync_token; | 654 gpu::SyncToken sync_token; |
656 const uint64_t fence_sync = gl->InsertFenceSyncCHROMIUM(); | 655 const uint64_t fence_sync = gl->InsertFenceSyncCHROMIUM(); |
657 gl->ShallowFlushCHROMIUM(); | 656 gl->ShallowFlushCHROMIUM(); |
658 gl->GenSyncTokenCHROMIUM(fence_sync, sync_token.GetData()); | 657 gl->GenSyncTokenCHROMIUM(fence_sync, sync_token.GetData()); |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
765 plane_resource.plane_index == 0; | 764 plane_resource.plane_index == 0; |
766 }); | 765 }); |
767 if (resource_it == updater->all_resources_.end()) | 766 if (resource_it == updater->all_resources_.end()) |
768 return; | 767 return; |
769 | 768 |
770 resource_it->destructed = true; | 769 resource_it->destructed = true; |
771 } | 770 } |
772 #endif | 771 #endif |
773 | 772 |
774 } // namespace cc | 773 } // namespace cc |
OLD | NEW |