summaryrefslogtreecommitdiffstats
path: root/cc/raster
diff options
context:
space:
mode:
authorradu.velea <radu.velea@intel.com>2016-03-07 02:32:35 -0800
committerCommit bot <commit-bot@chromium.org>2016-03-07 10:33:33 +0000
commit8abebfdd564ba378cb0516d56d7fd5298beda2df (patch)
treec4c1755c601377ae5ae981b31478f2a122c8961a /cc/raster
parent908f01e663ef0073b3ef667258432e78add83a7b (diff)
downloadchromium_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.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
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(