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

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: add pixel tests for RG88 and resolve hubbe's comments 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_ = caps.texture_rg ? RG_88 : RGBA_8888;
465 }
459 } 466 }
460 467
461 use_sync_query_ = caps.sync_query; 468 use_sync_query_ = caps.sync_query;
462 469
463 GLES2Interface* gl = ContextGL(); 470 GLES2Interface* gl = ContextGL();
464 471
465 max_texture_size_ = 0; // Context expects cleared value. 472 max_texture_size_ = 0; // Context expects cleared value.
466 gl->GetIntegerv(GL_MAX_TEXTURE_SIZE, &max_texture_size_); 473 gl->GetIntegerv(GL_MAX_TEXTURE_SIZE, &max_texture_size_);
467 best_texture_format_ = 474 best_texture_format_ =
468 PlatformColor::BestSupportedTextureFormat(use_texture_format_bgra_); 475 PlatformColor::BestSupportedTextureFormat(use_texture_format_bgra_);
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
516 case RGBA_4444: 523 case RGBA_4444:
517 case RGBA_8888: 524 case RGBA_8888:
518 case RGB_565: 525 case RGB_565:
519 case LUMINANCE_8: 526 case LUMINANCE_8:
520 return true; 527 return true;
521 case BGRA_8888: 528 case BGRA_8888:
522 return caps.texture_format_bgra8888; 529 return caps.texture_format_bgra8888;
523 case ETC1: 530 case ETC1:
524 return caps.texture_format_etc1; 531 return caps.texture_format_etc1;
525 case RED_8: 532 case RED_8:
533 case RG_88:
526 return caps.texture_rg; 534 return caps.texture_rg;
527 case LUMINANCE_F16: 535 case LUMINANCE_F16:
528 return caps.texture_half_float_linear; 536 return caps.texture_half_float_linear;
529 } 537 }
530 538
531 NOTREACHED(); 539 NOTREACHED();
532 return false; 540 return false;
533 } 541 }
534 542
535 bool ResourceProvider::InUseByConsumer(ResourceId id) { 543 bool ResourceProvider::InUseByConsumer(ResourceId id) {
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
649 Resource* resource = InsertResource( 657 Resource* resource = InsertResource(
650 id, 658 id,
651 Resource(pixels, bitmap.release(), size, Resource::INTERNAL, GL_LINEAR)); 659 Resource(pixels, bitmap.release(), size, Resource::INTERNAL, GL_LINEAR));
652 resource->allocated = true; 660 resource->allocated = true;
653 resource->color_space = color_space; 661 resource->color_space = color_space;
654 return id; 662 return id;
655 } 663 }
656 664
657 ResourceId ResourceProvider::CreateResourceFromTextureMailbox( 665 ResourceId ResourceProvider::CreateResourceFromTextureMailbox(
658 const TextureMailbox& mailbox, 666 const TextureMailbox& mailbox,
667 ResourceFormat format,
659 std::unique_ptr<SingleReleaseCallbackImpl> release_callback_impl, 668 std::unique_ptr<SingleReleaseCallbackImpl> release_callback_impl,
660 bool read_lock_fences_enabled) { 669 bool read_lock_fences_enabled) {
661 DCHECK(thread_checker_.CalledOnValidThread()); 670 DCHECK(thread_checker_.CalledOnValidThread());
662 // Just store the information. Mailbox will be consumed in LockForRead(). 671 // Just store the information. Mailbox will be consumed in LockForRead().
663 ResourceId id = next_id_++; 672 ResourceId id = next_id_++;
664 DCHECK(mailbox.IsValid()); 673 DCHECK(mailbox.IsValid());
665 Resource* resource = nullptr; 674 Resource* resource = nullptr;
666 if (mailbox.IsTexture()) { 675 if (mailbox.IsTexture()) {
667 resource = InsertResource( 676 resource = InsertResource(
668 id, 677 id, Resource(0, mailbox.size_in_pixels(), Resource::EXTERNAL,
669 Resource(0, mailbox.size_in_pixels(), Resource::EXTERNAL, 678 mailbox.target(),
670 mailbox.target(), 679 mailbox.nearest_neighbor() ? GL_NEAREST : GL_LINEAR,
671 mailbox.nearest_neighbor() ? GL_NEAREST : GL_LINEAR, 680 TEXTURE_HINT_IMMUTABLE, RESOURCE_TYPE_GL_TEXTURE, format));
672 TEXTURE_HINT_IMMUTABLE, RESOURCE_TYPE_GL_TEXTURE, RGBA_8888));
673 } else { 681 } else {
674 DCHECK(mailbox.IsSharedMemory()); 682 DCHECK(mailbox.IsSharedMemory());
675 SharedBitmap* shared_bitmap = mailbox.shared_bitmap(); 683 SharedBitmap* shared_bitmap = mailbox.shared_bitmap();
676 uint8_t* pixels = shared_bitmap->pixels(); 684 uint8_t* pixels = shared_bitmap->pixels();
677 DCHECK(pixels); 685 DCHECK(pixels);
678 resource = InsertResource( 686 resource = InsertResource(
679 id, Resource(pixels, shared_bitmap, mailbox.size_in_pixels(), 687 id, Resource(pixels, shared_bitmap, mailbox.size_in_pixels(),
680 Resource::EXTERNAL, GL_LINEAR)); 688 Resource::EXTERNAL, GL_LINEAR));
689 resource->format = format;
681 } 690 }
682 resource->allocated = true; 691 resource->allocated = true;
683 resource->set_mailbox(mailbox); 692 resource->set_mailbox(mailbox);
684 resource->color_space = mailbox.color_space(); 693 resource->color_space = mailbox.color_space();
685 resource->release_callback_impl = 694 resource->release_callback_impl =
686 base::Bind(&SingleReleaseCallbackImpl::Run, 695 base::Bind(&SingleReleaseCallbackImpl::Run,
687 base::Owned(release_callback_impl.release())); 696 base::Owned(release_callback_impl.release()));
688 resource->read_lock_fences_enabled = read_lock_fences_enabled; 697 resource->read_lock_fences_enabled = read_lock_fences_enabled;
689 resource->is_overlay_candidate = mailbox.is_overlay_candidate(); 698 resource->is_overlay_candidate = mailbox.is_overlay_candidate();
690 resource->color_space = mailbox.color_space(); 699 resource->color_space = mailbox.color_space();
691 700
692 return id; 701 return id;
693 } 702 }
694 703
704 // TODO(dswang): remove this method. crbug.com/624436
705 ResourceId ResourceProvider::CreateResourceFromTextureMailbox(
706 const TextureMailbox& mailbox,
707 std::unique_ptr<SingleReleaseCallbackImpl> release_callback_impl,
708 bool read_lock_fences_enabled) {
709 return CreateResourceFromTextureMailbox(
710 mailbox, RGBA_8888, std::move(release_callback_impl), false);
711 }
712
695 ResourceId ResourceProvider::CreateResourceFromTextureMailbox( 713 ResourceId ResourceProvider::CreateResourceFromTextureMailbox(
696 const TextureMailbox& mailbox, 714 const TextureMailbox& mailbox,
697 std::unique_ptr<SingleReleaseCallbackImpl> release_callback_impl) { 715 std::unique_ptr<SingleReleaseCallbackImpl> release_callback_impl) {
698 return CreateResourceFromTextureMailbox( 716 return CreateResourceFromTextureMailbox(
699 mailbox, std::move(release_callback_impl), false); 717 mailbox, std::move(release_callback_impl), false);
700 } 718 }
701 719
702 void ResourceProvider::DeleteResource(ResourceId id) { 720 void ResourceProvider::DeleteResource(ResourceId id) {
703 DCHECK(thread_checker_.CalledOnValidThread()); 721 DCHECK(thread_checker_.CalledOnValidThread());
704 ResourceMap::iterator it = resources_.find(id); 722 ResourceMap::iterator it = resources_.find(id);
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
818 836
819 ResourceProvider::ResourceType ResourceProvider::GetResourceType( 837 ResourceProvider::ResourceType ResourceProvider::GetResourceType(
820 ResourceId id) { 838 ResourceId id) {
821 return GetResource(id)->type; 839 return GetResource(id)->type;
822 } 840 }
823 841
824 GLenum ResourceProvider::GetResourceTextureTarget(ResourceId id) { 842 GLenum ResourceProvider::GetResourceTextureTarget(ResourceId id) {
825 return GetResource(id)->target; 843 return GetResource(id)->target;
826 } 844 }
827 845
846 ResourceFormat ResourceProvider::GetResourceFormat(ResourceId id) {
847 return GetResource(id)->format;
848 }
849
828 bool ResourceProvider::IsImmutable(ResourceId id) { 850 bool ResourceProvider::IsImmutable(ResourceId id) {
829 if (IsGpuResourceType(default_resource_type_)) { 851 if (IsGpuResourceType(default_resource_type_)) {
830 return GetTextureHint(id) == TEXTURE_HINT_IMMUTABLE; 852 return GetTextureHint(id) == TEXTURE_HINT_IMMUTABLE;
831 } else { 853 } else {
832 // Software resources are immutable; they cannot change format or be 854 // Software resources are immutable; they cannot change format or be
833 // resized. 855 // resized.
834 return true; 856 return true;
835 } 857 }
836 } 858 }
837 859
(...skipping 1217 matching lines...) Expand 10 before | Expand all | Expand 10 after
2055 2077
2056 const int kImportance = 2; 2078 const int kImportance = 2;
2057 pmd->CreateSharedGlobalAllocatorDump(guid); 2079 pmd->CreateSharedGlobalAllocatorDump(guid);
2058 pmd->AddOwnershipEdge(dump->guid(), guid, kImportance); 2080 pmd->AddOwnershipEdge(dump->guid(), guid, kImportance);
2059 } 2081 }
2060 2082
2061 return true; 2083 return true;
2062 } 2084 }
2063 2085
2064 } // namespace cc 2086 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698