Respect full precision for RGB16 PNGs
authorMatt Sarett <msarett@google.com>
Tue, 17 Jan 2017 17:22:48 +0000 (12:22 -0500)
committerSkia Commit-Bot <skia-commit-bot@chromium.org>
Wed, 18 Jan 2017 15:56:34 +0000 (15:56 +0000)
BUG=skia:

CQ_INCLUDE_TRYBOTS=skia.primary:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD

Change-Id: If58d201daae97bce2f8efbc453c2ec452e682493
Reviewed-on: https://skia-review.googlesource.com/7085
Commit-Queue: Matt Sarett <msarett@google.com>
Reviewed-by: Mike Klein <mtklein@chromium.org>
Reviewed-by: Leon Scroggins <scroggo@google.com>
Reviewed-by: Mike Reed <reed@google.com>
12 files changed:
include/core/SkColorSpaceXform.h
infra/bots/assets/skimage/VERSION
infra/bots/tasks.json
src/codec/SkPngCodec.cpp
src/codec/SkSwizzler.cpp
src/core/SkColorSpaceXform.cpp
src/core/SkColorSpaceXform_A2B.cpp
src/core/SkNx.h
src/core/SkRasterPipeline.h
src/opts/SkNx_neon.h
src/opts/SkNx_sse.h
src/opts/SkRasterPipeline_opts.h

index 299fe26..0c4fd7a 100644 (file)
@@ -29,6 +29,7 @@ public:
         kBGRA_8888_ColorFormat,
 
         // Unsigned, big-endian, 16-bit integer
+        kRGB_U16_BE_ColorFormat,   // Src only
         kRGBA_U16_BE_ColorFormat,  // Src only
 
         kRGBA_F16_ColorFormat,     // Dst only
index 25bf17f..dec2bf5 100644 (file)
@@ -1 +1 @@
-18
\ No newline at end of file
+19
\ No newline at end of file
index 8b2e7cc..d724b75 100644 (file)
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
         {
           "name": "skia/bots/skimage",
           "path": "skimage",
-          "version": "version:18"
+          "version": "version:19"
         },
         {
           "name": "skia/bots/skp",
index 9f5c8e6..468b0b8 100644 (file)
@@ -420,8 +420,12 @@ void SkPngCodec::allocateStorage(const SkImageInfo& dstInfo) {
             // be created later if we are sampling.  We'll go ahead and allocate
             // enough memory to swizzle if necessary.
         case kSwizzleColor_XformMode: {
-            const size_t bpp = (this->getEncodedInfo().bitsPerPixel() > 32) ? 8 : 4;
-            const size_t colorXformBytes = dstInfo.width() * bpp;
+            const int bitsPerPixel = this->getEncodedInfo().bitsPerPixel();
+
+            // If we have more than 8-bits (per component) of precision, we will keep that
+            // extra precision.  Otherwise, we will swizzle to RGBA_8888 before transforming.
+            const size_t bytesPerPixel = (bitsPerPixel > 32) ? bitsPerPixel / 8 : 4;
+            const size_t colorXformBytes = dstInfo.width() * bytesPerPixel;
             fStorage.reset(colorXformBytes);
             fColorXformSrcRow = fStorage.get();
             break;
@@ -430,10 +434,13 @@ void SkPngCodec::allocateStorage(const SkImageInfo& dstInfo) {
 }
 
 static SkColorSpaceXform::ColorFormat png_select_xform_format(const SkEncodedInfo& info) {
-    // We always use kRGBA because color PNGs are always RGB or RGBA.
-    // TODO (msarett): Support kRGB_U16 inputs as well.
-    if (16 == info.bitsPerComponent() && SkEncodedInfo::kRGBA_Color == info.color()) {
-        return SkColorSpaceXform::kRGBA_U16_BE_ColorFormat;
+    // We use kRGB and kRGBA formats because color PNGs are always RGB or RGBA.
+    if (16 == info.bitsPerComponent()) {
+        if (SkEncodedInfo::kRGBA_Color == info.color()) {
+            return SkColorSpaceXform::kRGBA_U16_BE_ColorFormat;
+        } else if (SkEncodedInfo::kRGB_Color == info.color()) {
+            return SkColorSpaceXform::kRGB_U16_BE_ColorFormat;
+        }
     }
 
     return SkColorSpaceXform::kRGBA_8888_ColorFormat;
@@ -1090,9 +1097,22 @@ bool SkPngCodec::initializeXforms(const SkImageInfo& dstInfo, const Options& opt
         return false;
     }
 
-    // If the image is RGBA and we have a color xform, we can skip the swizzler.
-    const bool skipFormatConversion = this->colorXform() &&
-            SkEncodedInfo::kRGBA_Color == this->getEncodedInfo().color();
+    // If SkColorSpaceXform directly supports the encoded PNG format, we should skip format
+    // conversion in the swizzler (or skip swizzling altogether).
+    bool skipFormatConversion = false;
+    switch (this->getEncodedInfo().color()) {
+        case SkEncodedInfo::kRGB_Color:
+            if (this->getEncodedInfo().bitsPerComponent() != 16) {
+                break;
+            }
+
+            // Fall through
+        case SkEncodedInfo::kRGBA_Color:
+            skipFormatConversion = this->colorXform();
+            break;
+        default:
+            break;
+    }
     if (skipFormatConversion && !options.fSubset) {
         fXformMode = kColorOnly_XformMode;
         return true;
index 21c9994..820072f 100644 (file)
@@ -51,6 +51,17 @@ static void sample4(void* dst, const uint8_t* src, int width, int bpp, int delta
     }
 }
 
+static void sample6(void* dst, const uint8_t* src, int width, int bpp, int deltaSrc, int offset,
+        const SkPMColor ctable[]) {
+    src += offset;
+    uint8_t* dst8 = (uint8_t*) dst;
+    for (int x = 0; x < width; x++) {
+        memcpy(dst8, src, 6);
+        dst8 += 6;
+        src += deltaSrc;
+    }
+}
+
 static void sample8(void* dst, const uint8_t* src, int width, int bpp, int deltaSrc, int offset,
         const SkPMColor ctable[]) {
     src += offset;
@@ -809,21 +820,48 @@ SkSwizzler* SkSwizzler::CreateSwizzler(const SkEncodedInfo& encodedInfo,
     int srcBPP;
     const int dstBPP = SkColorTypeBytesPerPixel(dstInfo.colorType());
     if (skipFormatConversion) {
-        srcBPP = dstBPP;
-        switch (dstInfo.colorType()) {
-            case kGray_8_SkColorType:
+        switch (encodedInfo.color()) {
+            case SkEncodedInfo::kGray_Color:
+            case SkEncodedInfo::kPalette_Color:
+                // The encoded format and the dstColorType are the same.
+                srcBPP = 1;
                 proc = &sample1;
                 fastProc = &copy;
                 break;
-            case kRGB_565_SkColorType:
-                proc = &sample2;
+            case SkEncodedInfo::kYUV_Color:
+                // We have a jpeg that has already been converted to the dstColorType.
+                srcBPP = dstBPP;
+                switch (dstInfo.colorType()) {
+                    case kGray_8_SkColorType:
+                        proc = &sample1;
+                        fastProc = &copy;
+                        break;
+                    case kRGB_565_SkColorType:
+                        proc = &sample2;
+                        fastProc = &copy;
+                        break;
+                    case kRGBA_8888_SkColorType:
+                    case kBGRA_8888_SkColorType:
+                        proc = &sample4;
+                        fastProc = &copy;
+                        break;
+                    default:
+                        return nullptr;
+                }
+                break;
+            case SkEncodedInfo::kInvertedCMYK_Color:
+            case SkEncodedInfo::kYCCK_Color:
+                // We have a jpeg that remains in its original format.
+                srcBPP = 4;
+                proc = &sample4;
                 fastProc = &copy;
                 break;
-            case kRGBA_8888_SkColorType:
-            case kBGRA_8888_SkColorType:
+            case SkEncodedInfo::kRGBA_Color:
+                // We have a png that should remain in its original format.
                 SkASSERT(16 == encodedInfo.bitsPerComponent() ||
                           8 == encodedInfo.bitsPerComponent());
                 if (8 == encodedInfo.bitsPerComponent()) {
+                    srcBPP = 4;
                     proc = &sample4;
                 } else {
                     srcBPP = 8;
@@ -831,6 +869,13 @@ SkSwizzler* SkSwizzler::CreateSwizzler(const SkEncodedInfo& encodedInfo,
                 }
                 fastProc = &copy;
                 break;
+            case SkEncodedInfo::kRGB_Color:
+                // We have a png that remains in its original format.
+                SkASSERT(16 == encodedInfo.bitsPerComponent());
+                srcBPP = 6;
+                proc = &sample6;
+                fastProc = &copy;
+                break;
             default:
                 return nullptr;
         }
index bdb3784..dccb92e 100644 (file)
@@ -1104,7 +1104,10 @@ bool SkColorSpaceXform_XYZ<kCSM>
         }
     }
 
-    if (kRGBA_F32_ColorFormat == dstColorFormat || kRGBA_U16_BE_ColorFormat == srcColorFormat) {
+    if (kRGBA_F32_ColorFormat == dstColorFormat ||
+        kRGBA_U16_BE_ColorFormat == srcColorFormat ||
+        kRGB_U16_BE_ColorFormat == srcColorFormat)
+    {
         return this->applyPipeline(dstColorFormat, dst, srcColorFormat, src, len, alphaType);
     }
 
@@ -1221,6 +1224,24 @@ bool SkColorSpaceXform_XYZ<kCSM>
                     break;
             }
             break;
+        case kRGB_U16_BE_ColorFormat:
+            switch (fSrcGamma) {
+                case kLinear_SrcGamma:
+                    pipeline.append(SkRasterPipeline::load_rgb_u16_be, &src);
+                    break;
+                case kSRGB_SrcGamma:
+                    pipeline.append(SkRasterPipeline::load_rgb_u16_be, &src);
+                    pipeline.append_from_srgb(kUnpremul_SkAlphaType);
+                    break;
+                case kTable_SrcGamma:
+                    loadTables.fSrc = src;
+                    loadTables.fR = fSrcGammaTables[0];
+                    loadTables.fG = fSrcGammaTables[1];
+                    loadTables.fB = fSrcGammaTables[2];
+                    pipeline.append(SkRasterPipeline::load_tables_rgb_u16_be, &loadTables);
+                    break;
+            }
+            break;
         default:
             return false;
     }
index 6e49e84..27c9faa 100644 (file)
@@ -31,6 +31,9 @@ bool SkColorSpaceXform_A2B::onApply(ColorFormat dstFormat, void* dst, ColorForma
         case kRGBA_U16_BE_ColorFormat:
             pipeline.append(SkRasterPipeline::load_u16_be, &src);
             break;
+        case kRGB_U16_BE_ColorFormat:
+            pipeline.append(SkRasterPipeline::load_rgb_u16_be, &src);
+            break;
         default:
             SkCSXformPrintf("F16/F32 source color format not supported\n");
             return false;
index a75495c..5df5753 100644 (file)
@@ -68,6 +68,16 @@ struct SkNx {
         *c = SkNx{cl, ch};
         *d = SkNx{dl, dh};
     }
+    AI static void Load3(const void* vptr, SkNx* a, SkNx* b, SkNx* c) {
+        auto ptr = (const char*)vptr;
+        Half al, bl, cl,
+             ah, bh, ch;
+        Half::Load3(ptr                  , &al, &bl, &cl);
+        Half::Load3(ptr + 3*N/2*sizeof(T), &ah, &bh, &ch);
+        *a = SkNx{al, ah};
+        *b = SkNx{bl, bh};
+        *c = SkNx{cl, ch};
+    }
     AI static void Store4(void* vptr, const SkNx& a, const SkNx& b, const SkNx& c, const SkNx& d) {
         auto ptr = (char*)vptr;
         Half::Store4(ptr,                   a.fLo, b.fLo, c.fLo, d.fLo);
@@ -149,6 +159,12 @@ struct SkNx<1,T> {
         *c = Load(ptr + 2*sizeof(T));
         *d = Load(ptr + 3*sizeof(T));
     }
+    AI static void Load3(const void* vptr, SkNx* a, SkNx* b, SkNx* c) {
+        auto ptr = (const char*)vptr;
+        *a = Load(ptr + 0*sizeof(T));
+        *b = Load(ptr + 1*sizeof(T));
+        *c = Load(ptr + 2*sizeof(T));
+    }
     AI static void Store4(void* vptr, const SkNx& a, const SkNx& b, const SkNx& c, const SkNx& d) {
         auto ptr = (char*)vptr;
         a.store(ptr + 0*sizeof(T));
index 949146c..3d1bb88 100644 (file)
@@ -69,8 +69,9 @@
     M(load_565)  M(store_565)                                    \
     M(load_f16)  M(store_f16)                                    \
     M(load_8888) M(store_8888)                                   \
-    M(load_u16_be)                                               \
-    M(load_tables) M(load_tables_u16_be) M(store_tables)         \
+    M(load_u16_be) M(load_rgb_u16_be)                            \
+    M(load_tables_u16_be) M(load_tables_rgb_u16_be)              \
+    M(load_tables) M(store_tables)                               \
     M(scale_u8) M(scale_1_float)                                 \
     M(lerp_u8) M(lerp_565) M(lerp_1_float)                       \
     M(dstatop) M(dstin) M(dstout) M(dstover)                     \
index f39ef11..5671f71 100644 (file)
@@ -241,7 +241,12 @@ public:
         *b = rgba.val[2];
         *a = rgba.val[3];
     }
-
+    AI static void Load3(const void* ptr, SkNx* r, SkNx* g, SkNx* b) {
+        uint16x4x3_t rgba = vld3_u16((const uint16_t*)ptr);
+        *r = rgba.val[0];
+        *g = rgba.val[1];
+        *b = rgba.val[2];
+    }
     AI static void Store4(void* dst, const SkNx& r, const SkNx& g, const SkNx& b, const SkNx& a) {
         uint16x4x4_t rgba = {{
             r.fVec,
index 5ef5eda..3f981bc 100644 (file)
@@ -271,6 +271,22 @@ public:
         *b = ba;
         *a = _mm_srli_si128(ba, 8);
     }
+    AI static void Load3(const void* ptr, SkNx* r, SkNx* g, SkNx* b) {
+        // The idea here is to get 4 vectors that are R G B _ _ _ _ _.
+        // The second load is at a funny location to make sure we don't read past
+        // the bounds of memory.  This is fine, we just need to shift it a little bit.
+        const uint8_t* ptr8 = (const uint8_t*) ptr;
+        __m128i rgb0 = _mm_loadu_si128((const __m128i*) (ptr8 + 0));
+        __m128i rgb1 = _mm_srli_si128(rgb0, 3*2);
+        __m128i rgb2 = _mm_srli_si128(_mm_loadu_si128((const __m128i*) (ptr8 + 4*2)), 2*2);
+        __m128i rgb3 = _mm_srli_si128(rgb2, 3*2);
+
+        __m128i rrggbb01 = _mm_unpacklo_epi16(rgb0, rgb1);
+        __m128i rrggbb23 = _mm_unpacklo_epi16(rgb2, rgb3);
+        *r = _mm_unpacklo_epi32(rrggbb01, rrggbb23);
+        *g = _mm_srli_si128(r->fVec, 4*2);
+        *b = _mm_unpackhi_epi32(rrggbb01, rrggbb23);
+    }
     AI static void Store4(void* dst, const SkNx& r, const SkNx& g, const SkNx& b, const SkNx& a) {
         __m128i rg = _mm_unpacklo_epi16(r.fVec, g.fVec);
         __m128i ba = _mm_unpacklo_epi16(b.fVec, a.fVec);
index 71a15c6..f496bd5 100644 (file)
@@ -591,6 +591,23 @@ STAGE_CTX(load_u16_be, const uint64_t**) {
     a = (1.0f / 65535.0f) * SkNx_cast<float>((ah << 8) | (ah >> 8));
 }
 
+STAGE_CTX(load_rgb_u16_be, const uint16_t**) {
+    auto ptr = *ctx + 3*x;
+    const void* src = ptr;
+    uint16_t buf[N*3] = {0};
+    if (tail) {
+        memcpy(buf, src, tail*3*sizeof(uint16_t));
+        src = buf;
+    }
+
+    SkNh rh, gh, bh;
+    SkNh::Load3(src, &rh, &gh, &bh);
+    r = (1.0f / 65535.0f) * SkNx_cast<float>((rh << 8) | (rh >> 8));
+    g = (1.0f / 65535.0f) * SkNx_cast<float>((gh << 8) | (gh >> 8));
+    b = (1.0f / 65535.0f) * SkNx_cast<float>((bh << 8) | (bh >> 8));
+    a = 1.0f;
+}
+
 STAGE_CTX(load_tables, const LoadTablesContext*) {
     auto ptr = (const uint32_t*)ctx->fSrc + x;
 
@@ -621,6 +638,25 @@ STAGE_CTX(load_tables_u16_be, const LoadTablesContext*) {
     a = (1.0f / 65535.0f) * SkNx_cast<float>((ah << 8) | (ah >> 8));
 }
 
+STAGE_CTX(load_tables_rgb_u16_be, const LoadTablesContext*) {
+    auto ptr = (const uint16_t*)ctx->fSrc + 3*x;
+    const void* src = ptr;
+    uint16_t buf[N*3] = {0};
+    if (tail) {
+        memcpy(buf, src, tail*3*sizeof(uint16_t));
+        src = buf;
+    }
+
+    SkNh rh, gh, bh;
+    SkNh::Load3(src, &rh, &gh, &bh);
+
+    // ctx->fSrc is big-endian, so "& 0xff" grabs the 8 most significant bits of each component.
+    r = gather(tail, ctx->fR, SkNx_cast<int>(rh & 0xff));
+    g = gather(tail, ctx->fG, SkNx_cast<int>(gh & 0xff));
+    b = gather(tail, ctx->fB, SkNx_cast<int>(bh & 0xff));
+    a = 1.0f;
+}
+
 STAGE_CTX(store_tables, const StoreTablesContext*) {
     auto ptr = ctx->fDst + x;