Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(149)

Side by Side Diff: cc/resources/resource_provider.cc

Issue 2122573003: media: replace LUMINANCE_F16 by RG_88 for 9/10-bit h264 videos Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: resolve hubbe's concerns except for test. separate the CLs. Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <algorithm> 10 #include <algorithm>
(...skipping 13 matching lines...) Expand all
24 #include "base/trace_event/trace_event.h" 24 #include "base/trace_event/trace_event.h"
25 #include "cc/resources/platform_color.h" 25 #include "cc/resources/platform_color.h"
26 #include "cc/resources/resource_util.h" 26 #include "cc/resources/resource_util.h"
27 #include "cc/resources/returned_resource.h" 27 #include "cc/resources/returned_resource.h"
28 #include "cc/resources/shared_bitmap_manager.h" 28 #include "cc/resources/shared_bitmap_manager.h"
29 #include "cc/resources/transferable_resource.h" 29 #include "cc/resources/transferable_resource.h"
30 #include "gpu/GLES2/gl2extchromium.h" 30 #include "gpu/GLES2/gl2extchromium.h"
31 #include "gpu/command_buffer/client/context_support.h" 31 #include "gpu/command_buffer/client/context_support.h"
32 #include "gpu/command_buffer/client/gles2_interface.h" 32 #include "gpu/command_buffer/client/gles2_interface.h"
33 #include "gpu/command_buffer/client/gpu_memory_buffer_manager.h" 33 #include "gpu/command_buffer/client/gpu_memory_buffer_manager.h"
34 #include "media/base/media_switches.h"
34 #include "skia/ext/texture_handle.h" 35 #include "skia/ext/texture_handle.h"
35 #include "third_party/khronos/GLES2/gl2.h" 36 #include "third_party/khronos/GLES2/gl2.h"
36 #include "third_party/khronos/GLES2/gl2ext.h" 37 #include "third_party/khronos/GLES2/gl2ext.h"
37 #include "third_party/skia/include/core/SkCanvas.h" 38 #include "third_party/skia/include/core/SkCanvas.h"
38 #include "third_party/skia/include/core/SkSurface.h" 39 #include "third_party/skia/include/core/SkSurface.h"
39 #include "third_party/skia/include/gpu/GrContext.h" 40 #include "third_party/skia/include/gpu/GrContext.h"
40 #include "third_party/skia/include/gpu/GrTextureProvider.h" 41 #include "third_party/skia/include/gpu/GrTextureProvider.h"
41 #include "third_party/skia/include/gpu/gl/GrGLTypes.h" 42 #include "third_party/skia/include/gpu/gl/GrGLTypes.h"
42 #include "ui/gfx/geometry/rect.h" 43 #include "ui/gfx/geometry/rect.h"
43 #include "ui/gfx/geometry/vector2d.h" 44 #include "ui/gfx/geometry/vector2d.h"
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
85 break; 86 break;
86 case BGRA_8888: 87 case BGRA_8888:
87 storage_format = GL_BGRA8_EXT; 88 storage_format = GL_BGRA8_EXT;
88 break; 89 break;
89 case RGBA_4444: 90 case RGBA_4444:
90 case ALPHA_8: 91 case ALPHA_8:
91 case LUMINANCE_8: 92 case LUMINANCE_8:
92 case RGB_565: 93 case RGB_565:
93 case ETC1: 94 case ETC1:
94 case RED_8: 95 case RED_8:
96 case RG_88:
95 case LUMINANCE_F16: 97 case LUMINANCE_F16:
96 NOTREACHED(); 98 NOTREACHED();
97 break; 99 break;
98 } 100 }
99 101
100 return storage_format; 102 return storage_format;
101 } 103 }
102 104
103 bool IsFormatSupportedForStorage(ResourceFormat format, bool use_bgra) { 105 bool IsFormatSupportedForStorage(ResourceFormat format, bool use_bgra) {
104 switch (format) { 106 switch (format) {
105 case RGBA_8888: 107 case RGBA_8888:
106 return true; 108 return true;
107 case BGRA_8888: 109 case BGRA_8888:
108 return use_bgra; 110 return use_bgra;
109 case RGBA_4444: 111 case RGBA_4444:
110 case ALPHA_8: 112 case ALPHA_8:
111 case LUMINANCE_8: 113 case LUMINANCE_8:
112 case RGB_565: 114 case RGB_565:
113 case ETC1: 115 case ETC1:
114 case RED_8: 116 case RED_8:
117 case RG_88:
115 case LUMINANCE_F16: 118 case LUMINANCE_F16:
116 return false; 119 return false;
117 } 120 }
118 return false; 121 return false;
119 } 122 }
120 123
121 GrPixelConfig ToGrPixelConfig(ResourceFormat format) { 124 GrPixelConfig ToGrPixelConfig(ResourceFormat format) {
122 switch (format) { 125 switch (format) {
123 case RGBA_8888: 126 case RGBA_8888:
124 return kRGBA_8888_GrPixelConfig; 127 return kRGBA_8888_GrPixelConfig;
(...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after
449 use_texture_format_bgra_ = caps.texture_format_bgra8888; 452 use_texture_format_bgra_ = caps.texture_format_bgra8888;
450 use_texture_usage_hint_ = caps.texture_usage; 453 use_texture_usage_hint_ = caps.texture_usage;
451 use_compressed_texture_etc1_ = caps.texture_format_etc1; 454 use_compressed_texture_etc1_ = caps.texture_format_etc1;
452 455
453 if (caps.disable_one_component_textures) { 456 if (caps.disable_one_component_textures) {
454 yuv_resource_format_ = yuv_highbit_resource_format_ = RGBA_8888; 457 yuv_resource_format_ = yuv_highbit_resource_format_ = RGBA_8888;
455 } else { 458 } else {
456 yuv_resource_format_ = caps.texture_rg ? RED_8 : LUMINANCE_8; 459 yuv_resource_format_ = caps.texture_rg ? RED_8 : LUMINANCE_8;
457 yuv_highbit_resource_format_ = 460 yuv_highbit_resource_format_ =
458 caps.texture_half_float_linear ? LUMINANCE_F16 : yuv_resource_format_; 461 caps.texture_half_float_linear ? LUMINANCE_F16 : yuv_resource_format_;
462 if (base::FeatureList::IsEnabled(media::kUseRGTexture) ||
463 !caps.texture_half_float_linear) {
464 yuv_highbit_resource_format_ =
465 caps.texture_rg ? RG_88 : yuv_highbit_resource_format_;
466 }
459 } 467 }
460 468
461 use_sync_query_ = caps.sync_query; 469 use_sync_query_ = caps.sync_query;
462 470
463 GLES2Interface* gl = ContextGL(); 471 GLES2Interface* gl = ContextGL();
464 472
465 max_texture_size_ = 0; // Context expects cleared value. 473 max_texture_size_ = 0; // Context expects cleared value.
466 gl->GetIntegerv(GL_MAX_TEXTURE_SIZE, &max_texture_size_); 474 gl->GetIntegerv(GL_MAX_TEXTURE_SIZE, &max_texture_size_);
467 best_texture_format_ = 475 best_texture_format_ =
468 PlatformColor::BestSupportedTextureFormat(use_texture_format_bgra_); 476 PlatformColor::BestSupportedTextureFormat(use_texture_format_bgra_);
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
516 case RGBA_4444: 524 case RGBA_4444:
517 case RGBA_8888: 525 case RGBA_8888:
518 case RGB_565: 526 case RGB_565:
519 case LUMINANCE_8: 527 case LUMINANCE_8:
520 return true; 528 return true;
521 case BGRA_8888: 529 case BGRA_8888:
522 return caps.texture_format_bgra8888; 530 return caps.texture_format_bgra8888;
523 case ETC1: 531 case ETC1:
524 return caps.texture_format_etc1; 532 return caps.texture_format_etc1;
525 case RED_8: 533 case RED_8:
534 case RG_88:
526 return caps.texture_rg; 535 return caps.texture_rg;
527 case LUMINANCE_F16: 536 case LUMINANCE_F16:
528 return caps.texture_half_float_linear; 537 return caps.texture_half_float_linear;
529 } 538 }
530 539
531 NOTREACHED(); 540 NOTREACHED();
532 return false; 541 return false;
533 } 542 }
534 543
535 bool ResourceProvider::InUseByConsumer(ResourceId id) { 544 bool ResourceProvider::InUseByConsumer(ResourceId id) {
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
649 Resource* resource = InsertResource( 658 Resource* resource = InsertResource(
650 id, 659 id,
651 Resource(pixels, bitmap.release(), size, Resource::INTERNAL, GL_LINEAR)); 660 Resource(pixels, bitmap.release(), size, Resource::INTERNAL, GL_LINEAR));
652 resource->allocated = true; 661 resource->allocated = true;
653 resource->color_space = color_space; 662 resource->color_space = color_space;
654 return id; 663 return id;
655 } 664 }
656 665
657 ResourceId ResourceProvider::CreateResourceFromTextureMailbox( 666 ResourceId ResourceProvider::CreateResourceFromTextureMailbox(
658 const TextureMailbox& mailbox, 667 const TextureMailbox& mailbox,
668 ResourceFormat format,
659 std::unique_ptr<SingleReleaseCallbackImpl> release_callback_impl, 669 std::unique_ptr<SingleReleaseCallbackImpl> release_callback_impl,
660 bool read_lock_fences_enabled) { 670 bool read_lock_fences_enabled) {
661 DCHECK(thread_checker_.CalledOnValidThread()); 671 DCHECK(thread_checker_.CalledOnValidThread());
662 // Just store the information. Mailbox will be consumed in LockForRead(). 672 // Just store the information. Mailbox will be consumed in LockForRead().
663 ResourceId id = next_id_++; 673 ResourceId id = next_id_++;
664 DCHECK(mailbox.IsValid()); 674 DCHECK(mailbox.IsValid());
665 Resource* resource = nullptr; 675 Resource* resource = nullptr;
666 if (mailbox.IsTexture()) { 676 if (mailbox.IsTexture()) {
667 resource = InsertResource( 677 resource = InsertResource(
668 id, 678 id, Resource(0, mailbox.size_in_pixels(), Resource::EXTERNAL,
669 Resource(0, mailbox.size_in_pixels(), Resource::EXTERNAL, 679 mailbox.target(),
670 mailbox.target(), 680 mailbox.nearest_neighbor() ? GL_NEAREST : GL_LINEAR,
671 mailbox.nearest_neighbor() ? GL_NEAREST : GL_LINEAR, 681 TEXTURE_HINT_IMMUTABLE, RESOURCE_TYPE_GL_TEXTURE, format));
672 TEXTURE_HINT_IMMUTABLE, RESOURCE_TYPE_GL_TEXTURE, RGBA_8888));
673 } else { 682 } else {
674 DCHECK(mailbox.IsSharedMemory()); 683 DCHECK(mailbox.IsSharedMemory());
675 SharedBitmap* shared_bitmap = mailbox.shared_bitmap(); 684 SharedBitmap* shared_bitmap = mailbox.shared_bitmap();
676 uint8_t* pixels = shared_bitmap->pixels(); 685 uint8_t* pixels = shared_bitmap->pixels();
677 DCHECK(pixels); 686 DCHECK(pixels);
678 resource = InsertResource( 687 resource = InsertResource(
679 id, Resource(pixels, shared_bitmap, mailbox.size_in_pixels(), 688 id, Resource(pixels, shared_bitmap, mailbox.size_in_pixels(),
680 Resource::EXTERNAL, GL_LINEAR)); 689 Resource::EXTERNAL, GL_LINEAR));
690 resource->format = format;
681 } 691 }
682 resource->allocated = true; 692 resource->allocated = true;
683 resource->set_mailbox(mailbox); 693 resource->set_mailbox(mailbox);
684 resource->color_space = mailbox.color_space(); 694 resource->color_space = mailbox.color_space();
685 resource->release_callback_impl = 695 resource->release_callback_impl =
686 base::Bind(&SingleReleaseCallbackImpl::Run, 696 base::Bind(&SingleReleaseCallbackImpl::Run,
687 base::Owned(release_callback_impl.release())); 697 base::Owned(release_callback_impl.release()));
688 resource->read_lock_fences_enabled = read_lock_fences_enabled; 698 resource->read_lock_fences_enabled = read_lock_fences_enabled;
689 resource->is_overlay_candidate = mailbox.is_overlay_candidate(); 699 resource->is_overlay_candidate = mailbox.is_overlay_candidate();
690 resource->color_space = mailbox.color_space(); 700 resource->color_space = mailbox.color_space();
691 701
692 return id; 702 return id;
693 } 703 }
694 704
705 // TODO(dswang): remove this method. crbug.com/624436
706 ResourceId ResourceProvider::CreateResourceFromTextureMailbox(
707 const TextureMailbox& mailbox,
708 std::unique_ptr<SingleReleaseCallbackImpl> release_callback_impl,
709 bool read_lock_fences_enabled) {
710 return CreateResourceFromTextureMailbox(
711 mailbox, RGBA_8888, std::move(release_callback_impl), false);
712 }
713
695 ResourceId ResourceProvider::CreateResourceFromTextureMailbox( 714 ResourceId ResourceProvider::CreateResourceFromTextureMailbox(
696 const TextureMailbox& mailbox, 715 const TextureMailbox& mailbox,
697 std::unique_ptr<SingleReleaseCallbackImpl> release_callback_impl) { 716 std::unique_ptr<SingleReleaseCallbackImpl> release_callback_impl) {
698 return CreateResourceFromTextureMailbox( 717 return CreateResourceFromTextureMailbox(
699 mailbox, std::move(release_callback_impl), false); 718 mailbox, std::move(release_callback_impl), false);
700 } 719 }
701 720
702 void ResourceProvider::DeleteResource(ResourceId id) { 721 void ResourceProvider::DeleteResource(ResourceId id) {
703 DCHECK(thread_checker_.CalledOnValidThread()); 722 DCHECK(thread_checker_.CalledOnValidThread());
704 ResourceMap::iterator it = resources_.find(id); 723 ResourceMap::iterator it = resources_.find(id);
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
818 837
819 ResourceProvider::ResourceType ResourceProvider::GetResourceType( 838 ResourceProvider::ResourceType ResourceProvider::GetResourceType(
820 ResourceId id) { 839 ResourceId id) {
821 return GetResource(id)->type; 840 return GetResource(id)->type;
822 } 841 }
823 842
824 GLenum ResourceProvider::GetResourceTextureTarget(ResourceId id) { 843 GLenum ResourceProvider::GetResourceTextureTarget(ResourceId id) {
825 return GetResource(id)->target; 844 return GetResource(id)->target;
826 } 845 }
827 846
847 ResourceFormat ResourceProvider::GetResourceFormat(ResourceId id) {
848 return GetResource(id)->format;
849 }
850
828 bool ResourceProvider::IsImmutable(ResourceId id) { 851 bool ResourceProvider::IsImmutable(ResourceId id) {
829 if (IsGpuResourceType(default_resource_type_)) { 852 if (IsGpuResourceType(default_resource_type_)) {
830 return GetTextureHint(id) == TEXTURE_HINT_IMMUTABLE; 853 return GetTextureHint(id) == TEXTURE_HINT_IMMUTABLE;
831 } else { 854 } else {
832 // Software resources are immutable; they cannot change format or be 855 // Software resources are immutable; they cannot change format or be
833 // resized. 856 // resized.
834 return true; 857 return true;
835 } 858 }
836 } 859 }
837 860
(...skipping 1217 matching lines...) Expand 10 before | Expand all | Expand 10 after
2055 2078
2056 const int kImportance = 2; 2079 const int kImportance = 2;
2057 pmd->CreateSharedGlobalAllocatorDump(guid); 2080 pmd->CreateSharedGlobalAllocatorDump(guid);
2058 pmd->AddOwnershipEdge(dump->guid(), guid, kImportance); 2081 pmd->AddOwnershipEdge(dump->guid(), guid, kImportance);
2059 } 2082 }
2060 2083
2061 return true; 2084 return true;
2062 } 2085 }
2063 2086
2064 } // namespace cc 2087 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698