diff options
author | radu.velea <radu.velea@intel.com> | 2016-03-07 02:32:35 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-03-07 10:33:33 +0000 |
commit | 8abebfdd564ba378cb0516d56d7fd5298beda2df (patch) | |
tree | c4c1755c601377ae5ae981b31478f2a122c8961a /cc/raster | |
parent | 908f01e663ef0073b3ef667258432e78add83a7b (diff) | |
download | chromium_src-8abebfdd564ba378cb0516d56d7fd5298beda2df.zip chromium_src-8abebfdd564ba378cb0516d56d7fd5298beda2df.tar.gz chromium_src-8abebfdd564ba378cb0516d56d7fd5298beda2df.tar.bz2 |
cc: Fix interchange of red and blue content when using ETC1_RGB8_OES textures
Content is swizzled when texture format has different component order
than expected format by platform. ETC1 implies the use RGBX layout and should
not trigger a swizzle.
Updated unittest.
TEST=visual inspection with --enable-tile-compression and
PlatformColorTest.SameComponentOrder in cc_unittests
BUG=570715
CQ_INCLUDE_TRYBOTS=tryserver.blink:linux_blink_rel
Review URL: https://codereview.chromium.org/1746763002
Cr-Commit-Position: refs/heads/master@{#379533}
Diffstat (limited to 'cc/raster')
-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 |
5 files changed, 27 insertions, 6 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( |