diff options
Diffstat (limited to 'cc')
-rw-r--r-- | cc/raster/bitmap_tile_task_worker_pool.cc | 3 | ||||
-rw-r--r-- | cc/raster/one_copy_tile_task_worker_pool.cc | 3 | ||||
-rw-r--r-- | cc/raster/tile_task_runner.cc | 21 | ||||
-rw-r--r-- | cc/raster/tile_task_runner.h | 3 | ||||
-rw-r--r-- | cc/raster/zero_copy_tile_task_worker_pool.cc | 3 | ||||
-rw-r--r-- | cc/resources/platform_color.h | 24 | ||||
-rw-r--r-- | cc/resources/platform_color_unittest.cc | 8 | ||||
-rw-r--r-- | cc/test/fake_tile_manager.cc | 3 | ||||
-rw-r--r-- | cc/tiles/tile_manager_perftest.cc | 3 |
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: |