| Index: cc/resources/resource_provider.cc
|
| diff --git a/cc/resources/resource_provider.cc b/cc/resources/resource_provider.cc
|
| index 49dae1d6ae988284713422c430f0f1e8a2f814e8..b7cde71a2e1c8b19af34570a8fd8a576e8376522 100644
|
| --- a/cc/resources/resource_provider.cc
|
| +++ b/cc/resources/resource_provider.cc
|
| @@ -31,6 +31,7 @@
|
| #include "gpu/command_buffer/client/context_support.h"
|
| #include "gpu/command_buffer/client/gles2_interface.h"
|
| #include "gpu/command_buffer/client/gpu_memory_buffer_manager.h"
|
| +#include "media/base/media_switches.h"
|
| #include "skia/ext/texture_handle.h"
|
| #include "third_party/khronos/GLES2/gl2.h"
|
| #include "third_party/khronos/GLES2/gl2ext.h"
|
| @@ -92,6 +93,7 @@ GLenum TextureToStorageFormat(ResourceFormat format) {
|
| case RGB_565:
|
| case ETC1:
|
| case RED_8:
|
| + case RG_88:
|
| case LUMINANCE_F16:
|
| NOTREACHED();
|
| break;
|
| @@ -112,6 +114,7 @@ bool IsFormatSupportedForStorage(ResourceFormat format, bool use_bgra) {
|
| case RGB_565:
|
| case ETC1:
|
| case RED_8:
|
| + case RG_88:
|
| case LUMINANCE_F16:
|
| return false;
|
| }
|
| @@ -456,6 +459,10 @@ ResourceProvider::ResourceProvider(
|
| yuv_resource_format_ = caps.texture_rg ? RED_8 : LUMINANCE_8;
|
| yuv_highbit_resource_format_ =
|
| caps.texture_half_float_linear ? LUMINANCE_F16 : yuv_resource_format_;
|
| + if (base::FeatureList::IsEnabled(media::kUseRGTexture) ||
|
| + !caps.texture_half_float_linear) {
|
| + yuv_highbit_resource_format_ = caps.texture_rg ? RG_88 : RGBA_8888;
|
| + }
|
| }
|
|
|
| use_sync_query_ = caps.sync_query;
|
| @@ -523,6 +530,7 @@ bool ResourceProvider::IsResourceFormatSupported(ResourceFormat format) const {
|
| case ETC1:
|
| return caps.texture_format_etc1;
|
| case RED_8:
|
| + case RG_88:
|
| return caps.texture_rg;
|
| case LUMINANCE_F16:
|
| return caps.texture_half_float_linear;
|
| @@ -656,6 +664,7 @@ ResourceId ResourceProvider::CreateBitmap(const gfx::Size& size,
|
|
|
| ResourceId ResourceProvider::CreateResourceFromTextureMailbox(
|
| const TextureMailbox& mailbox,
|
| + ResourceFormat format,
|
| std::unique_ptr<SingleReleaseCallbackImpl> release_callback_impl,
|
| bool read_lock_fences_enabled) {
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
| @@ -665,11 +674,10 @@ ResourceId ResourceProvider::CreateResourceFromTextureMailbox(
|
| Resource* resource = nullptr;
|
| if (mailbox.IsTexture()) {
|
| resource = InsertResource(
|
| - id,
|
| - Resource(0, mailbox.size_in_pixels(), Resource::EXTERNAL,
|
| - mailbox.target(),
|
| - mailbox.nearest_neighbor() ? GL_NEAREST : GL_LINEAR,
|
| - TEXTURE_HINT_IMMUTABLE, RESOURCE_TYPE_GL_TEXTURE, RGBA_8888));
|
| + id, Resource(0, mailbox.size_in_pixels(), Resource::EXTERNAL,
|
| + mailbox.target(),
|
| + mailbox.nearest_neighbor() ? GL_NEAREST : GL_LINEAR,
|
| + TEXTURE_HINT_IMMUTABLE, RESOURCE_TYPE_GL_TEXTURE, format));
|
| } else {
|
| DCHECK(mailbox.IsSharedMemory());
|
| SharedBitmap* shared_bitmap = mailbox.shared_bitmap();
|
| @@ -678,6 +686,7 @@ ResourceId ResourceProvider::CreateResourceFromTextureMailbox(
|
| resource = InsertResource(
|
| id, Resource(pixels, shared_bitmap, mailbox.size_in_pixels(),
|
| Resource::EXTERNAL, GL_LINEAR));
|
| + resource->format = format;
|
| }
|
| resource->allocated = true;
|
| resource->set_mailbox(mailbox);
|
| @@ -692,6 +701,15 @@ ResourceId ResourceProvider::CreateResourceFromTextureMailbox(
|
| return id;
|
| }
|
|
|
| +// TODO(dswang): remove this method. crbug.com/624436
|
| +ResourceId ResourceProvider::CreateResourceFromTextureMailbox(
|
| + const TextureMailbox& mailbox,
|
| + std::unique_ptr<SingleReleaseCallbackImpl> release_callback_impl,
|
| + bool read_lock_fences_enabled) {
|
| + return CreateResourceFromTextureMailbox(
|
| + mailbox, RGBA_8888, std::move(release_callback_impl), false);
|
| +}
|
| +
|
| ResourceId ResourceProvider::CreateResourceFromTextureMailbox(
|
| const TextureMailbox& mailbox,
|
| std::unique_ptr<SingleReleaseCallbackImpl> release_callback_impl) {
|
| @@ -825,6 +843,10 @@ GLenum ResourceProvider::GetResourceTextureTarget(ResourceId id) {
|
| return GetResource(id)->target;
|
| }
|
|
|
| +ResourceFormat ResourceProvider::GetResourceFormat(ResourceId id) {
|
| + return GetResource(id)->format;
|
| +}
|
| +
|
| bool ResourceProvider::IsImmutable(ResourceId id) {
|
| if (IsGpuResourceType(default_resource_type_)) {
|
| return GetTextureHint(id) == TEXTURE_HINT_IMMUTABLE;
|
|
|