summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cc/raster/bitmap_tile_task_worker_pool.cc3
-rw-r--r--cc/raster/one_copy_tile_task_worker_pool.cc3
-rw-r--r--cc/raster/tile_task_runner.cc21
-rw-r--r--cc/raster/tile_task_runner.h3
-rw-r--r--cc/raster/zero_copy_tile_task_worker_pool.cc3
-rw-r--r--cc/resources/platform_color.h24
-rw-r--r--cc/resources/platform_color_unittest.cc8
-rw-r--r--cc/test/fake_tile_manager.cc3
-rw-r--r--cc/tiles/tile_manager_perftest.cc3
9 files changed, 48 insertions, 23 deletions
diff --git a/cc/raster/bitmap_tile_task_worker_pool.cc b/cc/raster/bitmap_tile_task_worker_pool.cc
index 8892502..de651476 100644
--- a/cc/raster/bitmap_tile_task_worker_pool.cc
+++ b/cc/raster/bitmap_tile_task_worker_pool.cc
@@ -128,8 +128,7 @@ ResourceFormat BitmapTileTaskWorkerPool::GetResourceFormat(
bool BitmapTileTaskWorkerPool::GetResourceRequiresSwizzle(
bool must_support_alpha) const {
- return !PlatformColor::SameComponentOrder(
- GetResourceFormat(must_support_alpha));
+ return ResourceFormatRequiresSwizzle(GetResourceFormat(must_support_alpha));
}
scoped_ptr<RasterBuffer> BitmapTileTaskWorkerPool::AcquireBufferForRaster(
diff --git a/cc/raster/one_copy_tile_task_worker_pool.cc b/cc/raster/one_copy_tile_task_worker_pool.cc
index 38e3076..0158752 100644
--- a/cc/raster/one_copy_tile_task_worker_pool.cc
+++ b/cc/raster/one_copy_tile_task_worker_pool.cc
@@ -296,8 +296,7 @@ ResourceFormat OneCopyTileTaskWorkerPool::GetResourceFormat(
bool OneCopyTileTaskWorkerPool::GetResourceRequiresSwizzle(
bool must_support_alpha) const {
- return !PlatformColor::SameComponentOrder(
- GetResourceFormat(must_support_alpha));
+ return ResourceFormatRequiresSwizzle(GetResourceFormat(must_support_alpha));
}
scoped_ptr<RasterBuffer> OneCopyTileTaskWorkerPool::AcquireBufferForRaster(
diff --git a/cc/raster/tile_task_runner.cc b/cc/raster/tile_task_runner.cc
index 074f045..50e8805 100644
--- a/cc/raster/tile_task_runner.cc
+++ b/cc/raster/tile_task_runner.cc
@@ -3,6 +3,7 @@
// found in the LICENSE file.
#include "cc/raster/tile_task_runner.h"
+#include "cc/resources/platform_color.h"
namespace cc {
@@ -55,4 +56,24 @@ RasterTask::RasterTask(ImageDecodeTask::Vector* dependencies) {
RasterTask::~RasterTask() {
}
+bool TileTaskRunner::ResourceFormatRequiresSwizzle(ResourceFormat format) {
+ switch (format) {
+ case RGBA_8888:
+ case BGRA_8888:
+ // Initialize resource using the preferred PlatformColor component
+ // order and swizzle in the shader instead of in software.
+ return !PlatformColor::SameComponentOrder(format);
+ case RGBA_4444:
+ case ETC1:
+ case ALPHA_8:
+ case LUMINANCE_8:
+ case RGB_565:
+ case RED_8:
+ case LUMINANCE_F16:
+ return false;
+ }
+ NOTREACHED();
+ return false;
+}
+
} // namespace cc
diff --git a/cc/raster/tile_task_runner.h b/cc/raster/tile_task_runner.h
index ed0f29a..5e2f7fd 100644
--- a/cc/raster/tile_task_runner.h
+++ b/cc/raster/tile_task_runner.h
@@ -104,6 +104,9 @@ class CC_EXPORT TileTaskRunner {
virtual bool GetResourceRequiresSwizzle(bool must_support_alpha) const = 0;
protected:
+ // Check if resource format matches output format.
+ static bool ResourceFormatRequiresSwizzle(ResourceFormat format);
+
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 1fd8e3d..410540a 100644
--- a/cc/raster/zero_copy_tile_task_worker_pool.cc
+++ b/cc/raster/zero_copy_tile_task_worker_pool.cc
@@ -136,8 +136,7 @@ ResourceFormat ZeroCopyTileTaskWorkerPool::GetResourceFormat(
bool ZeroCopyTileTaskWorkerPool::GetResourceRequiresSwizzle(
bool must_support_alpha) const {
- return !PlatformColor::SameComponentOrder(
- GetResourceFormat(must_support_alpha));
+ return ResourceFormatRequiresSwizzle(GetResourceFormat(must_support_alpha));
}
scoped_ptr<RasterBuffer> ZeroCopyTileTaskWorkerPool::AcquireBufferForRaster(
diff --git a/cc/resources/platform_color.h b/cc/resources/platform_color.h
index 26d6b02..67ede54 100644
--- a/cc/resources/platform_color.h
+++ b/cc/resources/platform_color.h
@@ -47,15 +47,25 @@ class PlatformColor {
return RGBA_8888;
}
- // Return true if the given texture format has the same component order
- // as the color on this platform.
+ // Return true if the given 32bpp resource format has the same component order
+ // as the platform color data format.
static bool SameComponentOrder(ResourceFormat format) {
- switch (Format()) {
- case SOURCE_FORMAT_RGBA8:
- return format == RGBA_8888 || format == RGBA_4444;
- case SOURCE_FORMAT_BGRA8:
- return format == BGRA_8888 || format == RGBA_4444;
+ switch (format) {
+ case RGBA_8888:
+ return Format() == SOURCE_FORMAT_RGBA8;
+ case BGRA_8888:
+ return Format() == SOURCE_FORMAT_BGRA8;
+ case ALPHA_8:
+ case LUMINANCE_8:
+ case RGB_565:
+ case RGBA_4444:
+ case ETC1:
+ case RED_8:
+ case LUMINANCE_F16:
+ NOTREACHED();
+ return false;
}
+
NOTREACHED();
return false;
}
diff --git a/cc/resources/platform_color_unittest.cc b/cc/resources/platform_color_unittest.cc
index 49c8353..83f65b6 100644
--- a/cc/resources/platform_color_unittest.cc
+++ b/cc/resources/platform_color_unittest.cc
@@ -21,21 +21,17 @@ TEST(PlatformColorTest, SameComponentOrder) {
case RGBA_8888:
EXPECT_EQ(rgba, PlatformColor::SameComponentOrder(format));
break;
- case RGBA_4444:
- // RGBA_4444 indicates the number of bytes per pixel but the format
- // doesn't actually imply RGBA ordering. It uses the native ordering.
- EXPECT_EQ(true, PlatformColor::SameComponentOrder(format));
- break;
case BGRA_8888:
EXPECT_NE(rgba, PlatformColor::SameComponentOrder(format));
break;
+ // The following formats are not platform colors.
case ALPHA_8:
case LUMINANCE_8:
case RGB_565:
+ case RGBA_4444:
case ETC1:
case RED_8:
case LUMINANCE_F16:
- EXPECT_FALSE(PlatformColor::SameComponentOrder(format));
break;
}
}
diff --git a/cc/test/fake_tile_manager.cc b/cc/test/fake_tile_manager.cc
index 86ce28b..77b9b0d 100644
--- a/cc/test/fake_tile_manager.cc
+++ b/cc/test/fake_tile_manager.cc
@@ -50,8 +50,7 @@ class FakeTileTaskRunnerImpl : public TileTaskRunner, public TileTaskClient {
return RGBA_8888;
}
bool GetResourceRequiresSwizzle(bool must_support_alpha) const override {
- return !PlatformColor::SameComponentOrder(
- GetResourceFormat(must_support_alpha));
+ return ResourceFormatRequiresSwizzle(GetResourceFormat(must_support_alpha));
}
// Overridden from TileTaskClient:
diff --git a/cc/tiles/tile_manager_perftest.cc b/cc/tiles/tile_manager_perftest.cc
index 53b7ba8..d10c4cb 100644
--- a/cc/tiles/tile_manager_perftest.cc
+++ b/cc/tiles/tile_manager_perftest.cc
@@ -67,8 +67,7 @@ class FakeTileTaskRunnerImpl : public TileTaskRunner, public TileTaskClient {
return RGBA_8888;
}
bool GetResourceRequiresSwizzle(bool must_support_alpha) const override {
- return !PlatformColor::SameComponentOrder(
- GetResourceFormat(must_support_alpha));
+ return ResourceFormatRequiresSwizzle(GetResourceFormat(must_support_alpha));
}
// Overridden from TileTaskClient: