summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhendrikw <hendrikw@chromium.org>2015-06-19 16:45:43 -0700
committerCommit bot <commit-bot@chromium.org>2015-06-19 23:46:10 +0000
commit316921858b47cf38d65f242435782d87f6f78b93 (patch)
tree7821f36fe4969ce8dd8e91b5d7eb6c5f13fde138
parent59fc7718fefd2c93e1acd94c4d5a405949a0cf10 (diff)
downloadchromium_src-316921858b47cf38d65f242435782d87f6f78b93.zip
chromium_src-316921858b47cf38d65f242435782d87f6f78b93.tar.gz
chromium_src-316921858b47cf38d65f242435782d87f6f78b93.tar.bz2
cc, gpu: Use RGBA when using msaa on systems that don't support BGRA
The pixel is compiled to prefer BGRA, but doesn't support BGRA for render buffers. When we try to use msaa, it tries to create a BGRA render buffer and fails. Fix is, plumb the setting to the gpu raster code, and prefer RGBA when using msaa on a system that doesn't support BGRA. BUG=497478 CQ_INCLUDE_TRYBOTS=tryserver.blink:linux_blink_rel Review URL: https://codereview.chromium.org/1174733003 Cr-Commit-Position: refs/heads/master@{#335395}
-rw-r--r--cc/raster/bitmap_tile_task_worker_pool.cc7
-rw-r--r--cc/raster/bitmap_tile_task_worker_pool.h3
-rw-r--r--cc/raster/gpu_tile_task_worker_pool.cc9
-rw-r--r--cc/raster/gpu_tile_task_worker_pool.h3
-rw-r--r--cc/raster/one_copy_tile_task_worker_pool.cc7
-rw-r--r--cc/raster/one_copy_tile_task_worker_pool.h3
-rw-r--r--cc/raster/pixel_buffer_tile_task_worker_pool.cc7
-rw-r--r--cc/raster/pixel_buffer_tile_task_worker_pool.h3
-rw-r--r--cc/raster/tile_task_runner.h5
-rw-r--r--cc/raster/zero_copy_tile_task_worker_pool.cc7
-rw-r--r--cc/raster/zero_copy_tile_task_worker_pool.h3
-rw-r--r--cc/resources/resource_provider.cc4
-rw-r--r--cc/resources/resource_provider.h4
-rw-r--r--cc/test/fake_tile_manager.cc5
-rw-r--r--cc/tiles/tile_draw_info.cc4
-rw-r--r--cc/tiles/tile_draw_info.h6
-rw-r--r--cc/tiles/tile_manager.cc3
-rw-r--r--cc/tiles/tile_manager_perftest.cc5
-rw-r--r--gpu/command_buffer/common/capabilities.cc1
-rw-r--r--gpu/command_buffer/common/capabilities.h1
-rw-r--r--gpu/command_buffer/service/feature_info.cc4
-rw-r--r--gpu/command_buffer/service/feature_info.h1
-rw-r--r--gpu/command_buffer/service/feature_info_unittest.cc6
-rw-r--r--gpu/command_buffer/service/gles2_cmd_decoder.cc2
-rw-r--r--gpu/command_buffer/tests/gl_unittest.cc2
25 files changed, 83 insertions, 22 deletions
diff --git a/cc/raster/bitmap_tile_task_worker_pool.cc b/cc/raster/bitmap_tile_task_worker_pool.cc
index 586b9a9..bd6af35 100644
--- a/cc/raster/bitmap_tile_task_worker_pool.cc
+++ b/cc/raster/bitmap_tile_task_worker_pool.cc
@@ -12,6 +12,7 @@
#include "cc/debug/traced_value.h"
#include "cc/playback/raster_source.h"
#include "cc/raster/raster_buffer.h"
+#include "cc/resources/platform_color.h"
#include "cc/resources/resource.h"
namespace cc {
@@ -178,10 +179,14 @@ void BitmapTileTaskWorkerPool::CheckForCompletedTasks() {
completed_tasks_.clear();
}
-ResourceFormat BitmapTileTaskWorkerPool::GetResourceFormat() {
+ResourceFormat BitmapTileTaskWorkerPool::GetResourceFormat() const {
return resource_provider_->best_texture_format();
}
+bool BitmapTileTaskWorkerPool::GetResourceRequiresSwizzle() const {
+ return !PlatformColor::SameComponentOrder(GetResourceFormat());
+}
+
scoped_ptr<RasterBuffer> BitmapTileTaskWorkerPool::AcquireBufferForRaster(
const Resource* resource,
uint64_t resource_content_id,
diff --git a/cc/raster/bitmap_tile_task_worker_pool.h b/cc/raster/bitmap_tile_task_worker_pool.h
index 21b8cf5..3df206a 100644
--- a/cc/raster/bitmap_tile_task_worker_pool.h
+++ b/cc/raster/bitmap_tile_task_worker_pool.h
@@ -38,7 +38,8 @@ class CC_EXPORT BitmapTileTaskWorkerPool : public TileTaskWorkerPool,
void Shutdown() override;
void ScheduleTasks(TileTaskQueue* queue) override;
void CheckForCompletedTasks() override;
- ResourceFormat GetResourceFormat() override;
+ ResourceFormat GetResourceFormat() const override;
+ bool GetResourceRequiresSwizzle() const override;
// Overridden from TileTaskClient:
scoped_ptr<RasterBuffer> AcquireBufferForRaster(
diff --git a/cc/raster/gpu_tile_task_worker_pool.cc b/cc/raster/gpu_tile_task_worker_pool.cc
index a79b880..f2806c4 100644
--- a/cc/raster/gpu_tile_task_worker_pool.cc
+++ b/cc/raster/gpu_tile_task_worker_pool.cc
@@ -207,8 +207,13 @@ void GpuTileTaskWorkerPool::CheckForCompletedTasks() {
completed_tasks_.clear();
}
-ResourceFormat GpuTileTaskWorkerPool::GetResourceFormat() {
- return rasterizer_->resource_provider()->best_texture_format();
+ResourceFormat GpuTileTaskWorkerPool::GetResourceFormat() const {
+ return rasterizer_->resource_provider()->best_render_buffer_format();
+}
+
+bool GpuTileTaskWorkerPool::GetResourceRequiresSwizzle() const {
+ // This doesn't require a swizzle because we rasterize to the correct format.
+ return false;
}
void GpuTileTaskWorkerPool::CompleteTasks(const Task::Vector& tasks) {
diff --git a/cc/raster/gpu_tile_task_worker_pool.h b/cc/raster/gpu_tile_task_worker_pool.h
index 54c8620..32a9d23 100644
--- a/cc/raster/gpu_tile_task_worker_pool.h
+++ b/cc/raster/gpu_tile_task_worker_pool.h
@@ -36,7 +36,8 @@ class CC_EXPORT GpuTileTaskWorkerPool : public TileTaskWorkerPool,
void Shutdown() override;
void ScheduleTasks(TileTaskQueue* queue) override;
void CheckForCompletedTasks() override;
- ResourceFormat GetResourceFormat() override;
+ ResourceFormat GetResourceFormat() const override;
+ bool GetResourceRequiresSwizzle() const override;
// Overridden from TileTaskClient:
scoped_ptr<RasterBuffer> AcquireBufferForRaster(
diff --git a/cc/raster/one_copy_tile_task_worker_pool.cc b/cc/raster/one_copy_tile_task_worker_pool.cc
index e3d1df5..78e6b10 100644
--- a/cc/raster/one_copy_tile_task_worker_pool.cc
+++ b/cc/raster/one_copy_tile_task_worker_pool.cc
@@ -13,6 +13,7 @@
#include "cc/base/math_util.h"
#include "cc/debug/traced_value.h"
#include "cc/raster/raster_buffer.h"
+#include "cc/resources/platform_color.h"
#include "cc/resources/resource_pool.h"
#include "cc/resources/scoped_resource.h"
#include "gpu/command_buffer/client/gles2_interface.h"
@@ -295,10 +296,14 @@ void OneCopyTileTaskWorkerPool::CheckForCompletedTasks() {
completed_tasks_.clear();
}
-ResourceFormat OneCopyTileTaskWorkerPool::GetResourceFormat() {
+ResourceFormat OneCopyTileTaskWorkerPool::GetResourceFormat() const {
return resource_provider_->best_texture_format();
}
+bool OneCopyTileTaskWorkerPool::GetResourceRequiresSwizzle() const {
+ return !PlatformColor::SameComponentOrder(GetResourceFormat());
+}
+
scoped_ptr<RasterBuffer> OneCopyTileTaskWorkerPool::AcquireBufferForRaster(
const Resource* resource,
uint64_t resource_content_id,
diff --git a/cc/raster/one_copy_tile_task_worker_pool.h b/cc/raster/one_copy_tile_task_worker_pool.h
index f627193..518aaa2d 100644
--- a/cc/raster/one_copy_tile_task_worker_pool.h
+++ b/cc/raster/one_copy_tile_task_worker_pool.h
@@ -50,7 +50,8 @@ class CC_EXPORT OneCopyTileTaskWorkerPool : public TileTaskWorkerPool,
void Shutdown() override;
void ScheduleTasks(TileTaskQueue* queue) override;
void CheckForCompletedTasks() override;
- ResourceFormat GetResourceFormat() override;
+ ResourceFormat GetResourceFormat() const override;
+ bool GetResourceRequiresSwizzle() const override;
// Overridden from TileTaskClient:
scoped_ptr<RasterBuffer> AcquireBufferForRaster(
diff --git a/cc/raster/pixel_buffer_tile_task_worker_pool.cc b/cc/raster/pixel_buffer_tile_task_worker_pool.cc
index 14b6ee2..df79519 100644
--- a/cc/raster/pixel_buffer_tile_task_worker_pool.cc
+++ b/cc/raster/pixel_buffer_tile_task_worker_pool.cc
@@ -12,6 +12,7 @@
#include "base/trace_event/trace_event_argument.h"
#include "cc/debug/traced_value.h"
#include "cc/raster/raster_buffer.h"
+#include "cc/resources/platform_color.h"
#include "cc/resources/resource.h"
#include "gpu/command_buffer/client/gles2_interface.h"
@@ -312,10 +313,14 @@ void PixelBufferTileTaskWorkerPool::CheckForCompletedTasks() {
completed_raster_tasks_.clear();
}
-ResourceFormat PixelBufferTileTaskWorkerPool::GetResourceFormat() {
+ResourceFormat PixelBufferTileTaskWorkerPool::GetResourceFormat() const {
return resource_provider_->memory_efficient_texture_format();
}
+bool PixelBufferTileTaskWorkerPool::GetResourceRequiresSwizzle() const {
+ return !PlatformColor::SameComponentOrder(GetResourceFormat());
+}
+
scoped_ptr<RasterBuffer> PixelBufferTileTaskWorkerPool::AcquireBufferForRaster(
const Resource* resource,
uint64_t resource_content_id,
diff --git a/cc/raster/pixel_buffer_tile_task_worker_pool.h b/cc/raster/pixel_buffer_tile_task_worker_pool.h
index 01618a6..2c6aeb9 100644
--- a/cc/raster/pixel_buffer_tile_task_worker_pool.h
+++ b/cc/raster/pixel_buffer_tile_task_worker_pool.h
@@ -46,7 +46,8 @@ class CC_EXPORT PixelBufferTileTaskWorkerPool : public TileTaskWorkerPool,
void Shutdown() override;
void ScheduleTasks(TileTaskQueue* queue) override;
void CheckForCompletedTasks() override;
- ResourceFormat GetResourceFormat() override;
+ ResourceFormat GetResourceFormat() const override;
+ bool GetResourceRequiresSwizzle() const override;
// Overridden from TileTaskClient:
scoped_ptr<RasterBuffer> AcquireBufferForRaster(
diff --git a/cc/raster/tile_task_runner.h b/cc/raster/tile_task_runner.h
index a4c7d88..9dffee4 100644
--- a/cc/raster/tile_task_runner.h
+++ b/cc/raster/tile_task_runner.h
@@ -163,7 +163,10 @@ class CC_EXPORT TileTaskRunner {
virtual void CheckForCompletedTasks() = 0;
// Returns the format to use for the tiles.
- virtual ResourceFormat GetResourceFormat() = 0;
+ virtual ResourceFormat GetResourceFormat() const = 0;
+
+ // Determine if the resource requires swizzling.
+ virtual bool GetResourceRequiresSwizzle() const = 0;
protected:
virtual ~TileTaskRunner() {}
diff --git a/cc/raster/zero_copy_tile_task_worker_pool.cc b/cc/raster/zero_copy_tile_task_worker_pool.cc
index d42570a..64fc5f4 100644
--- a/cc/raster/zero_copy_tile_task_worker_pool.cc
+++ b/cc/raster/zero_copy_tile_task_worker_pool.cc
@@ -11,6 +11,7 @@
#include "base/trace_event/trace_event_argument.h"
#include "cc/debug/traced_value.h"
#include "cc/raster/raster_buffer.h"
+#include "cc/resources/platform_color.h"
#include "cc/resources/resource.h"
#include "ui/gfx/gpu_memory_buffer.h"
@@ -176,10 +177,14 @@ void ZeroCopyTileTaskWorkerPool::CheckForCompletedTasks() {
completed_tasks_.clear();
}
-ResourceFormat ZeroCopyTileTaskWorkerPool::GetResourceFormat() {
+ResourceFormat ZeroCopyTileTaskWorkerPool::GetResourceFormat() const {
return resource_provider_->best_texture_format();
}
+bool ZeroCopyTileTaskWorkerPool::GetResourceRequiresSwizzle() const {
+ return !PlatformColor::SameComponentOrder(GetResourceFormat());
+}
+
scoped_ptr<RasterBuffer> ZeroCopyTileTaskWorkerPool::AcquireBufferForRaster(
const Resource* resource,
uint64_t resource_content_id,
diff --git a/cc/raster/zero_copy_tile_task_worker_pool.h b/cc/raster/zero_copy_tile_task_worker_pool.h
index 9714119..7dcdff0a 100644
--- a/cc/raster/zero_copy_tile_task_worker_pool.h
+++ b/cc/raster/zero_copy_tile_task_worker_pool.h
@@ -38,7 +38,8 @@ class CC_EXPORT ZeroCopyTileTaskWorkerPool : public TileTaskWorkerPool,
void Shutdown() override;
void ScheduleTasks(TileTaskQueue* queue) override;
void CheckForCompletedTasks() override;
- ResourceFormat GetResourceFormat() override;
+ ResourceFormat GetResourceFormat() const override;
+ bool GetResourceRequiresSwizzle() const override;
// Overridden from TileTaskClient:
scoped_ptr<RasterBuffer> AcquireBufferForRaster(
diff --git a/cc/resources/resource_provider.cc b/cc/resources/resource_provider.cc
index ec18d40..848c59f 100644
--- a/cc/resources/resource_provider.cc
+++ b/cc/resources/resource_provider.cc
@@ -1098,6 +1098,7 @@ ResourceProvider::ResourceProvider(
yuv_resource_format_(LUMINANCE_8),
max_texture_size_(0),
best_texture_format_(RGBA_8888),
+ best_render_buffer_format_(RGBA_8888),
use_rgba_4444_texture_format_(use_rgba_4444_texture_format),
id_allocation_chunk_size_(id_allocation_chunk_size),
use_sync_query_(false),
@@ -1138,6 +1139,9 @@ void ResourceProvider::Initialize() {
best_texture_format_ =
PlatformColor::BestTextureFormat(use_texture_format_bgra_);
+ best_render_buffer_format_ =
+ PlatformColor::BestTextureFormat(caps.gpu.render_buffer_format_bgra8888);
+
texture_id_allocator_.reset(
new TextureIdAllocator(gl, id_allocation_chunk_size_));
buffer_id_allocator_.reset(
diff --git a/cc/resources/resource_provider.h b/cc/resources/resource_provider.h
index 0d30f60..d5b5712 100644
--- a/cc/resources/resource_provider.h
+++ b/cc/resources/resource_provider.h
@@ -95,6 +95,9 @@ class CC_EXPORT ResourceProvider {
return use_rgba_4444_texture_format_ ? RGBA_4444 : best_texture_format_;
}
ResourceFormat best_texture_format() const { return best_texture_format_; }
+ ResourceFormat best_render_buffer_format() const {
+ return best_render_buffer_format_;
+ }
ResourceFormat yuv_resource_format() const { return yuv_resource_format_; }
bool use_sync_query() const { return use_sync_query_; }
bool use_persistent_map_for_gpu_memory_buffers() const {
@@ -585,6 +588,7 @@ class CC_EXPORT ResourceProvider {
ResourceFormat yuv_resource_format_;
int max_texture_size_;
ResourceFormat best_texture_format_;
+ ResourceFormat best_render_buffer_format_;
base::ThreadChecker thread_checker_;
diff --git a/cc/test/fake_tile_manager.cc b/cc/test/fake_tile_manager.cc
index 53f88da..146da37 100644
--- a/cc/test/fake_tile_manager.cc
+++ b/cc/test/fake_tile_manager.cc
@@ -47,7 +47,10 @@ class FakeTileTaskRunnerImpl : public TileTaskRunner, public TileTaskClient {
}
completed_tasks_.clear();
}
- ResourceFormat GetResourceFormat() override { return RGBA_8888; }
+ ResourceFormat GetResourceFormat() const override { return RGBA_8888; }
+ bool GetResourceRequiresSwizzle() const override {
+ return !PlatformColor::SameComponentOrder(GetResourceFormat());
+ }
// Overridden from TileTaskClient:
scoped_ptr<RasterBuffer> AcquireBufferForRaster(
diff --git a/cc/tiles/tile_draw_info.cc b/cc/tiles/tile_draw_info.cc
index e523079..1713703 100644
--- a/cc/tiles/tile_draw_info.cc
+++ b/cc/tiles/tile_draw_info.cc
@@ -9,7 +9,9 @@
namespace cc {
TileDrawInfo::TileDrawInfo()
- : mode_(RESOURCE_MODE), solid_color_(SK_ColorWHITE) {
+ : mode_(RESOURCE_MODE),
+ solid_color_(SK_ColorWHITE),
+ contents_swizzled_(false) {
}
TileDrawInfo::~TileDrawInfo() {
diff --git a/cc/tiles/tile_draw_info.h b/cc/tiles/tile_draw_info.h
index 9ba8f24..e11da9c 100644
--- a/cc/tiles/tile_draw_info.h
+++ b/cc/tiles/tile_draw_info.h
@@ -65,10 +65,7 @@ class CC_EXPORT TileDrawInfo {
return solid_color_;
}
- bool contents_swizzled() const {
- DCHECK(resource_);
- return !PlatformColor::SameComponentOrder(resource_->format());
- }
+ bool contents_swizzled() const { return contents_swizzled_; }
bool requires_resource() const {
return mode_ == RESOURCE_MODE || mode_ == OOM_MODE;
@@ -99,6 +96,7 @@ class CC_EXPORT TileDrawInfo {
Mode mode_;
SkColor solid_color_;
scoped_ptr<ScopedResource> resource_;
+ bool contents_swizzled_;
};
} // namespace cc
diff --git a/cc/tiles/tile_manager.cc b/cc/tiles/tile_manager.cc
index 77622c2..ba60908 100644
--- a/cc/tiles/tile_manager.cc
+++ b/cc/tiles/tile_manager.cc
@@ -791,8 +791,9 @@ void TileManager::UpdateTileDrawInfo(
DCHECK(resource);
draw_info.set_use_resource();
draw_info.resource_ = resource.Pass();
+ draw_info.contents_swizzled_ =
+ tile_task_runner_->GetResourceRequiresSwizzle();
}
-
client_->NotifyTileStateChanged(tile);
}
diff --git a/cc/tiles/tile_manager_perftest.cc b/cc/tiles/tile_manager_perftest.cc
index 5fdecd2..d9b340d 100644
--- a/cc/tiles/tile_manager_perftest.cc
+++ b/cc/tiles/tile_manager_perftest.cc
@@ -64,8 +64,9 @@ class FakeTileTaskRunnerImpl : public TileTaskRunner, public TileTaskClient {
}
completed_tasks_.clear();
}
- ResourceFormat GetResourceFormat() override {
- return RGBA_8888;
+ ResourceFormat GetResourceFormat() const override { return RGBA_8888; }
+ bool GetResourceRequiresSwizzle() const override {
+ return !PlatformColor::SameComponentOrder(GetResourceFormat());
}
// Overridden from TileTaskClient:
diff --git a/gpu/command_buffer/common/capabilities.cc b/gpu/command_buffer/common/capabilities.cc
index 8a22871..2dc383a 100644
--- a/gpu/command_buffer/common/capabilities.cc
+++ b/gpu/command_buffer/common/capabilities.cc
@@ -73,6 +73,7 @@ Capabilities::Capabilities()
blend_equation_advanced(false),
blend_equation_advanced_coherent(false),
texture_rg(false),
+ render_buffer_format_bgra8888(false),
major_version(2),
minor_version(0) {
}
diff --git a/gpu/command_buffer/common/capabilities.h b/gpu/command_buffer/common/capabilities.h
index efae9a7..d2a9779 100644
--- a/gpu/command_buffer/common/capabilities.h
+++ b/gpu/command_buffer/common/capabilities.h
@@ -132,6 +132,7 @@ struct GPU_EXPORT Capabilities {
bool blend_equation_advanced;
bool blend_equation_advanced_coherent;
bool texture_rg;
+ bool render_buffer_format_bgra8888;
int major_version;
int minor_version;
diff --git a/gpu/command_buffer/service/feature_info.cc b/gpu/command_buffer/service/feature_info.cc
index 99fa5c4..c747383 100644
--- a/gpu/command_buffer/service/feature_info.cc
+++ b/gpu/command_buffer/service/feature_info.cc
@@ -167,7 +167,8 @@ FeatureInfo::FeatureFlags::FeatureFlags()
blend_equation_advanced_coherent(false),
ext_texture_rg(false),
enable_subscribe_uniform(false),
- emulate_primitive_restart_fixed_index(false) {
+ emulate_primitive_restart_fixed_index(false),
+ ext_render_buffer_format_bgra8888(false) {
}
FeatureInfo::Workarounds::Workarounds() :
@@ -516,6 +517,7 @@ void FeatureInfo::InitializeFeatures() {
}
if (enable_render_buffer_bgra) {
+ feature_flags_.ext_render_buffer_format_bgra8888 = true;
AddExtensionString("GL_CHROMIUM_renderbuffer_format_BGRA8888");
validators_.render_buffer_format.AddValue(GL_BGRA8_EXT);
}
diff --git a/gpu/command_buffer/service/feature_info.h b/gpu/command_buffer/service/feature_info.h
index 6d2988d..1ebff2a 100644
--- a/gpu/command_buffer/service/feature_info.h
+++ b/gpu/command_buffer/service/feature_info.h
@@ -79,6 +79,7 @@ class GPU_EXPORT FeatureInfo : public base::RefCounted<FeatureInfo> {
bool ext_texture_rg;
bool enable_subscribe_uniform;
bool emulate_primitive_restart_fixed_index;
+ bool ext_render_buffer_format_bgra8888;
};
struct Workarounds {
diff --git a/gpu/command_buffer/service/feature_info_unittest.cc b/gpu/command_buffer/service/feature_info_unittest.cc
index ecb01779..fdff175 100644
--- a/gpu/command_buffer/service/feature_info_unittest.cc
+++ b/gpu/command_buffer/service/feature_info_unittest.cc
@@ -340,6 +340,7 @@ TEST_P(FeatureInfoTest, InitializeEXT_texture_format_BGRA8888GLES2) {
GL_BGRA_EXT));
EXPECT_FALSE(info_->validators()->render_buffer_format.IsValid(
GL_BGRA8_EXT));
+ EXPECT_FALSE(info_->feature_flags().ext_render_buffer_format_bgra8888);
}
TEST_P(FeatureInfoTest, InitializeEXT_texture_format_BGRA8888GL) {
@@ -350,6 +351,7 @@ TEST_P(FeatureInfoTest, InitializeEXT_texture_format_BGRA8888GL) {
HasSubstr("GL_EXT_read_format_bgra"));
EXPECT_THAT(info_->extensions(),
HasSubstr("GL_CHROMIUM_renderbuffer_format_BGRA8888"));
+ EXPECT_TRUE(info_->feature_flags().ext_render_buffer_format_bgra8888);
EXPECT_TRUE(info_->validators()->texture_format.IsValid(
GL_BGRA_EXT));
EXPECT_TRUE(info_->validators()->texture_internal_format.IsValid(
@@ -370,6 +372,7 @@ TEST_P(FeatureInfoTest, InitializeEXT_texture_format_BGRA8888Apple) {
GL_BGRA_EXT));
EXPECT_FALSE(info_->validators()->render_buffer_format.IsValid(
GL_BGRA8_EXT));
+ EXPECT_FALSE(info_->feature_flags().ext_render_buffer_format_bgra8888);
}
TEST_P(FeatureInfoTest, InitializeEXT_read_format_bgra) {
@@ -384,6 +387,7 @@ TEST_P(FeatureInfoTest, InitializeEXT_read_format_bgra) {
GL_BGRA_EXT));
EXPECT_FALSE(info_->validators()->render_buffer_format.IsValid(
GL_BGRA8_EXT));
+ EXPECT_FALSE(info_->feature_flags().ext_render_buffer_format_bgra8888);
}
TEST_P(FeatureInfoTest, InitializeEXT_sRGB) {
@@ -592,6 +596,7 @@ TEST_P(FeatureInfoTest, InitializeWithANGLE_BGRA8) {
EXPECT_TRUE(info_->gl_version_info().is_angle);
EXPECT_THAT(info_->extensions(),
HasSubstr("GL_CHROMIUM_renderbuffer_format_BGRA8888"));
+ EXPECT_TRUE(info_->feature_flags().ext_render_buffer_format_bgra8888);
EXPECT_TRUE(info_->validators()->render_buffer_format.IsValid(GL_BGRA8_EXT));
}
@@ -599,6 +604,7 @@ TEST_P(FeatureInfoTest, InitializeWithANGLE_BGRA8) {
TEST_P(FeatureInfoTest,
InitializeGLES2_no_CHROMIUM_renderbuffer_format_BGRA8888) {
SetupInitExpectationsWithGLVersion("", "", "OpenGL ES 2.0");
+ EXPECT_FALSE(info_->feature_flags().ext_render_buffer_format_bgra8888);
EXPECT_THAT(info_->extensions(),
Not(HasSubstr("GL_CHROMIUM_renderbuffer_format_BGRA8888")));
}
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc
index 6806f12..caf752e 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
@@ -3148,6 +3148,8 @@ Capabilities GLES2DecoderImpl::GetCapabilities() {
caps.texture_rg = feature_info_->feature_flags().ext_texture_rg;
caps.max_copy_texture_chromium_size =
feature_info_->workarounds().max_copy_texture_chromium_size;
+ caps.render_buffer_format_bgra8888 =
+ feature_info_->feature_flags().ext_render_buffer_format_bgra8888;
return caps;
}
diff --git a/gpu/command_buffer/tests/gl_unittest.cc b/gpu/command_buffer/tests/gl_unittest.cc
index 49eb002..1085181 100644
--- a/gpu/command_buffer/tests/gl_unittest.cc
+++ b/gpu/command_buffer/tests/gl_unittest.cc
@@ -106,6 +106,8 @@ TEST_F(GLTest, FeatureFlagsMatchCapabilities) {
EXPECT_EQ(caps.blend_equation_advanced_coherent,
flags.blend_equation_advanced_coherent);
EXPECT_EQ(caps.texture_rg, flags.ext_texture_rg);
+ EXPECT_EQ(caps.render_buffer_format_bgra8888,
+ flags.ext_render_buffer_format_bgra8888);
}
TEST_F(GLTest, GetString) {