aboutsummaryrefslogtreecommitdiff
path: root/third_party
diff options
context:
space:
mode:
authorskcms-skia-autoroll@skia-buildbots.google.com.iam.gserviceaccount.com <skcms-skia-autoroll@skia-buildbots.google.com.iam.gserviceaccount.com>2018-09-12 20:28:38 +0000
committerSkia Commit-Bot <skia-commit-bot@chromium.org>2018-09-12 20:59:40 +0000
commit69bcd16f5356904e9e6bf726069646ef8a7c2739 (patch)
tree277b53cfad33361e2e754f468dae52468dcbd541 /third_party
parent167e1ea5bcb74b67b766635caf7e21230d4dcdda (diff)
downloadskqp-69bcd16f5356904e9e6bf726069646ef8a7c2739.tar.gz
Roll skia/third_party/skcms 710aa46f904e..b9dc92669da2 (1 commits)
https://skia.googlesource.com/skcms.git/+log/710aa46f904e..b9dc92669da2 2018-09-12 mtklein@google.com add little-endian 16-bit support The AutoRoll server is located here: https://autoroll.skia.org/r/skcms-skia-autoroll Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+/master/autoroll/README.md If the roll is causing failures, please contact the current sheriff, who should be CC'd on the roll, and stop the roller if necessary. CQ_INCLUDE_TRYBOTS=master.tryserver.blink:linux_trusty_blink_rel TBR=caryclark@google.com Change-Id: Ie88e77be7337669eb79799fb414791ccfb9bee1f Reviewed-on: https://skia-review.googlesource.com/154078 Commit-Queue: skcms-skia-autoroll <skcms-skia-autoroll@skia-buildbots.google.com.iam.gserviceaccount.com> Reviewed-by: skcms-skia-autoroll <skcms-skia-autoroll@skia-buildbots.google.com.iam.gserviceaccount.com>
Diffstat (limited to 'third_party')
-rw-r--r--third_party/skcms/skcms.cc96
-rw-r--r--third_party/skcms/skcms.h19
-rw-r--r--third_party/skcms/src/Transform_inl.h84
-rwxr-xr-xthird_party/skcms/version.sha12
4 files changed, 149 insertions, 52 deletions
diff --git a/third_party/skcms/skcms.cc b/third_party/skcms/skcms.cc
index 84da16fe5a..835478a6cc 100644
--- a/third_party/skcms/skcms.cc
+++ b/third_party/skcms/skcms.cc
@@ -1757,8 +1757,10 @@ typedef enum {
Op_load_888,
Op_load_8888,
Op_load_1010102,
- Op_load_161616,
- Op_load_16161616,
+ Op_load_161616LE,
+ Op_load_16161616LE,
+ Op_load_161616BE,
+ Op_load_16161616BE,
Op_load_hhh,
Op_load_hhhh,
Op_load_fff,
@@ -1805,8 +1807,10 @@ typedef enum {
Op_store_888,
Op_store_8888,
Op_store_1010102,
- Op_store_161616,
- Op_store_16161616,
+ Op_store_161616LE,
+ Op_store_16161616LE,
+ Op_store_161616BE,
+ Op_store_16161616BE,
Op_store_hhh,
Op_store_hhhh,
Op_store_fff,
@@ -1992,19 +1996,21 @@ static OpAndArg select_curve_op(const skcms_Curve* curve, int channel) {
static size_t bytes_per_pixel(skcms_PixelFormat fmt) {
switch (fmt >> 1) { // ignore rgb/bgr
- case skcms_PixelFormat_A_8 >> 1: return 1;
- case skcms_PixelFormat_G_8 >> 1: return 1;
- case skcms_PixelFormat_ABGR_4444 >> 1: return 2;
- case skcms_PixelFormat_RGB_565 >> 1: return 2;
- case skcms_PixelFormat_RGB_888 >> 1: return 3;
- case skcms_PixelFormat_RGBA_8888 >> 1: return 4;
- case skcms_PixelFormat_RGBA_1010102 >> 1: return 4;
- case skcms_PixelFormat_RGB_161616 >> 1: return 6;
- case skcms_PixelFormat_RGBA_16161616 >> 1: return 8;
- case skcms_PixelFormat_RGB_hhh >> 1: return 6;
- case skcms_PixelFormat_RGBA_hhhh >> 1: return 8;
- case skcms_PixelFormat_RGB_fff >> 1: return 12;
- case skcms_PixelFormat_RGBA_ffff >> 1: return 16;
+ case skcms_PixelFormat_A_8 >> 1: return 1;
+ case skcms_PixelFormat_G_8 >> 1: return 1;
+ case skcms_PixelFormat_ABGR_4444 >> 1: return 2;
+ case skcms_PixelFormat_RGB_565 >> 1: return 2;
+ case skcms_PixelFormat_RGB_888 >> 1: return 3;
+ case skcms_PixelFormat_RGBA_8888 >> 1: return 4;
+ case skcms_PixelFormat_RGBA_1010102 >> 1: return 4;
+ case skcms_PixelFormat_RGB_161616LE >> 1: return 6;
+ case skcms_PixelFormat_RGBA_16161616LE >> 1: return 8;
+ case skcms_PixelFormat_RGB_161616BE >> 1: return 6;
+ case skcms_PixelFormat_RGBA_16161616BE >> 1: return 8;
+ case skcms_PixelFormat_RGB_hhh >> 1: return 6;
+ case skcms_PixelFormat_RGBA_hhhh >> 1: return 8;
+ case skcms_PixelFormat_RGB_fff >> 1: return 12;
+ case skcms_PixelFormat_RGBA_ffff >> 1: return 16;
}
assert(false);
return 0;
@@ -2070,19 +2076,21 @@ bool skcms_Transform(const void* src,
switch (srcFmt >> 1) {
default: return false;
- case skcms_PixelFormat_A_8 >> 1: *ops++ = Op_load_a8; break;
- case skcms_PixelFormat_G_8 >> 1: *ops++ = Op_load_g8; break;
- case skcms_PixelFormat_ABGR_4444 >> 1: *ops++ = Op_load_4444; break;
- case skcms_PixelFormat_RGB_565 >> 1: *ops++ = Op_load_565; break;
- case skcms_PixelFormat_RGB_888 >> 1: *ops++ = Op_load_888; break;
- case skcms_PixelFormat_RGBA_8888 >> 1: *ops++ = Op_load_8888; break;
- case skcms_PixelFormat_RGBA_1010102 >> 1: *ops++ = Op_load_1010102; break;
- case skcms_PixelFormat_RGB_161616 >> 1: *ops++ = Op_load_161616; break;
- case skcms_PixelFormat_RGBA_16161616 >> 1: *ops++ = Op_load_16161616; break;
- case skcms_PixelFormat_RGB_hhh >> 1: *ops++ = Op_load_hhh; break;
- case skcms_PixelFormat_RGBA_hhhh >> 1: *ops++ = Op_load_hhhh; break;
- case skcms_PixelFormat_RGB_fff >> 1: *ops++ = Op_load_fff; break;
- case skcms_PixelFormat_RGBA_ffff >> 1: *ops++ = Op_load_ffff; break;
+ case skcms_PixelFormat_A_8 >> 1: *ops++ = Op_load_a8; break;
+ case skcms_PixelFormat_G_8 >> 1: *ops++ = Op_load_g8; break;
+ case skcms_PixelFormat_ABGR_4444 >> 1: *ops++ = Op_load_4444; break;
+ case skcms_PixelFormat_RGB_565 >> 1: *ops++ = Op_load_565; break;
+ case skcms_PixelFormat_RGB_888 >> 1: *ops++ = Op_load_888; break;
+ case skcms_PixelFormat_RGBA_8888 >> 1: *ops++ = Op_load_8888; break;
+ case skcms_PixelFormat_RGBA_1010102 >> 1: *ops++ = Op_load_1010102; break;
+ case skcms_PixelFormat_RGB_161616LE >> 1: *ops++ = Op_load_161616LE; break;
+ case skcms_PixelFormat_RGBA_16161616LE >> 1: *ops++ = Op_load_16161616LE; break;
+ case skcms_PixelFormat_RGB_161616BE >> 1: *ops++ = Op_load_161616BE; break;
+ case skcms_PixelFormat_RGBA_16161616BE >> 1: *ops++ = Op_load_16161616BE; break;
+ case skcms_PixelFormat_RGB_hhh >> 1: *ops++ = Op_load_hhh; break;
+ case skcms_PixelFormat_RGBA_hhhh >> 1: *ops++ = Op_load_hhhh; break;
+ case skcms_PixelFormat_RGB_fff >> 1: *ops++ = Op_load_fff; break;
+ case skcms_PixelFormat_RGBA_ffff >> 1: *ops++ = Op_load_ffff; break;
}
if (srcFmt & 1) {
*ops++ = Op_swap_rb;
@@ -2228,19 +2236,21 @@ bool skcms_Transform(const void* src,
}
switch (dstFmt >> 1) {
default: return false;
- case skcms_PixelFormat_A_8 >> 1: *ops++ = Op_store_a8; break;
- case skcms_PixelFormat_G_8 >> 1: *ops++ = Op_store_g8; break;
- case skcms_PixelFormat_ABGR_4444 >> 1: *ops++ = Op_store_4444; break;
- case skcms_PixelFormat_RGB_565 >> 1: *ops++ = Op_store_565; break;
- case skcms_PixelFormat_RGB_888 >> 1: *ops++ = Op_store_888; break;
- case skcms_PixelFormat_RGBA_8888 >> 1: *ops++ = Op_store_8888; break;
- case skcms_PixelFormat_RGBA_1010102 >> 1: *ops++ = Op_store_1010102; break;
- case skcms_PixelFormat_RGB_161616 >> 1: *ops++ = Op_store_161616; break;
- case skcms_PixelFormat_RGBA_16161616 >> 1: *ops++ = Op_store_16161616; break;
- case skcms_PixelFormat_RGB_hhh >> 1: *ops++ = Op_store_hhh; break;
- case skcms_PixelFormat_RGBA_hhhh >> 1: *ops++ = Op_store_hhhh; break;
- case skcms_PixelFormat_RGB_fff >> 1: *ops++ = Op_store_fff; break;
- case skcms_PixelFormat_RGBA_ffff >> 1: *ops++ = Op_store_ffff; break;
+ case skcms_PixelFormat_A_8 >> 1: *ops++ = Op_store_a8; break;
+ case skcms_PixelFormat_G_8 >> 1: *ops++ = Op_store_g8; break;
+ case skcms_PixelFormat_ABGR_4444 >> 1: *ops++ = Op_store_4444; break;
+ case skcms_PixelFormat_RGB_565 >> 1: *ops++ = Op_store_565; break;
+ case skcms_PixelFormat_RGB_888 >> 1: *ops++ = Op_store_888; break;
+ case skcms_PixelFormat_RGBA_8888 >> 1: *ops++ = Op_store_8888; break;
+ case skcms_PixelFormat_RGBA_1010102 >> 1: *ops++ = Op_store_1010102; break;
+ case skcms_PixelFormat_RGB_161616LE >> 1: *ops++ = Op_store_161616LE; break;
+ case skcms_PixelFormat_RGBA_16161616LE >> 1: *ops++ = Op_store_16161616LE; break;
+ case skcms_PixelFormat_RGB_161616BE >> 1: *ops++ = Op_store_161616BE; break;
+ case skcms_PixelFormat_RGBA_16161616BE >> 1: *ops++ = Op_store_16161616BE; break;
+ case skcms_PixelFormat_RGB_hhh >> 1: *ops++ = Op_store_hhh; break;
+ case skcms_PixelFormat_RGBA_hhhh >> 1: *ops++ = Op_store_hhhh; break;
+ case skcms_PixelFormat_RGB_fff >> 1: *ops++ = Op_store_fff; break;
+ case skcms_PixelFormat_RGBA_ffff >> 1: *ops++ = Op_store_ffff; break;
}
auto run = baseline::run_program;
diff --git a/third_party/skcms/skcms.h b/third_party/skcms/skcms.h
index c60746349d..808ee29db8 100644
--- a/third_party/skcms/skcms.h
+++ b/third_party/skcms/skcms.h
@@ -185,10 +185,21 @@ typedef enum skcms_PixelFormat {
skcms_PixelFormat_RGBA_1010102,
skcms_PixelFormat_BGRA_1010102,
- skcms_PixelFormat_RGB_161616, // Big-endian. Pointers must be 16-bit aligned.
- skcms_PixelFormat_BGR_161616,
- skcms_PixelFormat_RGBA_16161616,
- skcms_PixelFormat_BGRA_16161616,
+ skcms_PixelFormat_RGB_161616LE, // Little-endian. Pointers must be 16-bit aligned.
+ skcms_PixelFormat_BGR_161616LE,
+ skcms_PixelFormat_RGBA_16161616LE,
+ skcms_PixelFormat_BGRA_16161616LE,
+
+ skcms_PixelFormat_RGB_161616BE, // Big-endian. Pointers must be 16-bit aligned.
+ skcms_PixelFormat_BGR_161616BE,
+ skcms_PixelFormat_RGBA_16161616BE,
+ skcms_PixelFormat_BGRA_16161616BE,
+
+ // TODO: clean up references to non-explicit endian 16161616
+ skcms_PixelFormat_RGB_161616 = skcms_PixelFormat_RGB_161616BE,
+ skcms_PixelFormat_BGR_161616 = skcms_PixelFormat_BGR_161616BE,
+ skcms_PixelFormat_RGBA_16161616 = skcms_PixelFormat_RGBA_16161616BE,
+ skcms_PixelFormat_BGRA_16161616 = skcms_PixelFormat_BGRA_16161616BE,
skcms_PixelFormat_RGB_hhh, // 1-5-10 half-precision float.
skcms_PixelFormat_BGR_hhh, // Pointers must be 16-bit aligned.
diff --git a/third_party/skcms/src/Transform_inl.h b/third_party/skcms/src/Transform_inl.h
index 24c725be18..27d04dd1c2 100644
--- a/third_party/skcms/src/Transform_inl.h
+++ b/third_party/skcms/src/Transform_inl.h
@@ -658,7 +658,43 @@ static void exec_ops(const Op* ops, const void** args,
a = cast<F>((rgba >> 30) & 0x3 ) * (1/ 3.0f);
} break;
- case Op_load_161616:{
+ case Op_load_161616LE:{
+ uintptr_t ptr = (uintptr_t)(src + 6*i);
+ assert( (ptr & 1) == 0 ); // src must be 2-byte aligned for this
+ const uint16_t* rgb = (const uint16_t*)ptr; // cast to const uint16_t* to be safe.
+ #if defined(USING_NEON)
+ uint16x4x3_t v = vld3_u16(rgb);
+ r = cast<F>((U16)v.val[0]) * (1/65535.0f);
+ g = cast<F>((U16)v.val[1]) * (1/65535.0f);
+ b = cast<F>((U16)v.val[2]) * (1/65535.0f);
+ #else
+ r = cast<F>(load_3<U32>(rgb+0)) * (1/65535.0f);
+ g = cast<F>(load_3<U32>(rgb+1)) * (1/65535.0f);
+ b = cast<F>(load_3<U32>(rgb+2)) * (1/65535.0f);
+ #endif
+ } break;
+
+ case Op_load_16161616LE:{
+ uintptr_t ptr = (uintptr_t)(src + 8*i);
+ assert( (ptr & 1) == 0 ); // src must be 2-byte aligned for this
+ const uint16_t* rgba = (const uint16_t*)ptr; // cast to const uint16_t* to be safe.
+ #if defined(USING_NEON)
+ uint16x4x4_t v = vld4_u16(rgba);
+ r = cast<F>((U16)v.val[0]) * (1/65535.0f);
+ g = cast<F>((U16)v.val[1]) * (1/65535.0f);
+ b = cast<F>((U16)v.val[2]) * (1/65535.0f);
+ a = cast<F>((U16)v.val[3]) * (1/65535.0f);
+ #else
+ U64 px = load<U64>(rgba);
+
+ r = cast<F>((px >> 0) & 0xffff) * (1/65535.0f);
+ g = cast<F>((px >> 16) & 0xffff) * (1/65535.0f);
+ b = cast<F>((px >> 32) & 0xffff) * (1/65535.0f);
+ a = cast<F>((px >> 48) & 0xffff) * (1/65535.0f);
+ #endif
+ } break;
+
+ case Op_load_161616BE:{
uintptr_t ptr = (uintptr_t)(src + 6*i);
assert( (ptr & 1) == 0 ); // src must be 2-byte aligned for this
const uint16_t* rgb = (const uint16_t*)ptr; // cast to const uint16_t* to be safe.
@@ -678,7 +714,7 @@ static void exec_ops(const Op* ops, const void** args,
#endif
} break;
- case Op_load_16161616:{
+ case Op_load_16161616BE:{
uintptr_t ptr = (uintptr_t)(src + 8*i);
assert( (ptr & 1) == 0 ); // src must be 2-byte aligned for this
const uint16_t* rgba = (const uint16_t*)ptr; // cast to const uint16_t* to be safe.
@@ -977,7 +1013,47 @@ static void exec_ops(const Op* ops, const void** args,
| cast<U32>(to_fixed(a * 3) << 30));
} return;
- case Op_store_161616: {
+ case Op_store_161616LE: {
+ uintptr_t ptr = (uintptr_t)(dst + 6*i);
+ assert( (ptr & 1) == 0 ); // The dst pointer must be 2-byte aligned
+ uint16_t* rgb = (uint16_t*)ptr; // for this cast to uint16_t* to be safe.
+ #if defined(USING_NEON)
+ uint16x4x3_t v = {{
+ (uint16x4_t)cast<U16>(to_fixed(r * 65535)),
+ (uint16x4_t)cast<U16>(to_fixed(g * 65535)),
+ (uint16x4_t)cast<U16>(to_fixed(b * 65535)),
+ }};
+ vst3_u16(rgb, v);
+ #else
+ store_3(rgb+0, cast<U16>(to_fixed(r * 65535)));
+ store_3(rgb+1, cast<U16>(to_fixed(g * 65535)));
+ store_3(rgb+2, cast<U16>(to_fixed(b * 65535)));
+ #endif
+
+ } return;
+
+ case Op_store_16161616LE: {
+ uintptr_t ptr = (uintptr_t)(dst + 8*i);
+ assert( (ptr & 1) == 0 ); // The dst pointer must be 2-byte aligned
+ uint16_t* rgba = (uint16_t*)ptr; // for this cast to uint16_t* to be safe.
+ #if defined(USING_NEON)
+ uint16x4x4_t v = {{
+ (uint16x4_t)cast<U16>(to_fixed(r * 65535)),
+ (uint16x4_t)cast<U16>(to_fixed(g * 65535)),
+ (uint16x4_t)cast<U16>(to_fixed(b * 65535)),
+ (uint16x4_t)cast<U16>(to_fixed(a * 65535)),
+ }};
+ vst4_u16(rgba, v);
+ #else
+ U64 px = cast<U64>(to_fixed(r * 65535)) << 0
+ | cast<U64>(to_fixed(g * 65535)) << 16
+ | cast<U64>(to_fixed(b * 65535)) << 32
+ | cast<U64>(to_fixed(a * 65535)) << 48;
+ store(rgba, px);
+ #endif
+ } return;
+
+ case Op_store_161616BE: {
uintptr_t ptr = (uintptr_t)(dst + 6*i);
assert( (ptr & 1) == 0 ); // The dst pointer must be 2-byte aligned
uint16_t* rgb = (uint16_t*)ptr; // for this cast to uint16_t* to be safe.
@@ -999,7 +1075,7 @@ static void exec_ops(const Op* ops, const void** args,
} return;
- case Op_store_16161616: {
+ case Op_store_16161616BE: {
uintptr_t ptr = (uintptr_t)(dst + 8*i);
assert( (ptr & 1) == 0 ); // The dst pointer must be 2-byte aligned
uint16_t* rgba = (uint16_t*)ptr; // for this cast to uint16_t* to be safe.
diff --git a/third_party/skcms/version.sha1 b/third_party/skcms/version.sha1
index 7ba2648b1a..20f04f9b41 100755
--- a/third_party/skcms/version.sha1
+++ b/third_party/skcms/version.sha1
@@ -1 +1 @@
-710aa46f904eeaeada89005257ed57ebf1019488 \ No newline at end of file
+b9dc92669da2318ad57418afa0377e45264a9a07 \ No newline at end of file