History log of /external/skia/src/core/SkRasterPipeline.h
Revision Date Author Comments (<<< Hide modified files) (Show modified files >>>)
883c9bce671fb955574a6c0e46f57f57189bd6c6 19-Jul-2017 Mike Reed <reed@google.com> experimental: draw into unpremul

raster-only

Bug: skia:
Change-Id: I3af19f031083c9cc258f73ba6a2f6020bb15f110
Reviewed-on: https://skia-review.googlesource.com/24400
Commit-Queue: Mike Reed <reed@google.com>
Reviewed-by: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
968af43f721cd949ba3005f8e5f3c03c6c978a74 18-Jul-2017 Mike Klein <mtklein@chromium.org> remove gather_i8, unify memory-touching contexts

gather_i8 is now unused, so we can remove it.
That in turn makes the ctable field of SkJumper_GatherCtx unused.

After removing ctable, SkJumper_GatherCtx and SkJumper_PtrStride look
identical, so I've now fused them into SkJumper_MemoryCtx, which will
eventually be used by everything loading from, gathering from, or
storing to memory.

Change-Id: Ia882d2dbd54c9fcf9a8250a1ce83304389dd284a
Reviewed-on: https://skia-review.googlesource.com/24085
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
3b92b6907a6b9f7020a7589ad07cad2472fe4e86 18-Jul-2017 Mike Klein <mtklein@chromium.org> start on raster pipeline 2d mode

- Add run_2d(x,y,w,h) and start_pipeline_2d().
- Add and test a 2d-compatible store_8888_2d stage.

Change-Id: Ib9c225d1b8cb40471ae4333df1d06eec4d506f8a
Reviewed-on: https://skia-review.googlesource.com/24401
Commit-Queue: Mike Klein <mtklein@chromium.org>
Reviewed-by: Florin Malita <fmalita@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
c91e3877a57ef140b688627b8c0acaafbefc9034 05-Jul-2017 Mike Reed <reed@google.com> add stages for black and white colors

histogram of test skps:

black: 1/7
white: 2/7
other: 4/7

Bug: skia:
Change-Id: I3a092899d31ce87837e66e5c8ea9ec5e0f239361
Reviewed-on: https://skia-review.googlesource.com/21408
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Mike Reed <reed@google.com>
/external/skia/src/core/SkRasterPipeline.h
7aad8cc2ff7a580bd5852d57289ace8c8dced6f5 05-Jul-2017 Mike Reed <reed@google.com> optimize for diff matrix types

Bug: skia:
Change-Id: I671e07c5bbb9e4ced92303c9959143324f7a6bdc
Reviewed-on: https://skia-review.googlesource.com/21523
Commit-Queue: Mike Reed <reed@google.com>
Reviewed-by: Herb Derby <herb@google.com>
/external/skia/src/core/SkRasterPipeline.h
6b59bf424c9d9d8a72d3c002871f143e6aff623e 04-Jul-2017 Mike Reed <reed@google.com> consolidate logic for matrix stage

Bug: skia:
Change-Id: Id1559b31692a1aed9aa4d15620b2019ae9c7c22b
Reviewed-on: https://skia-review.googlesource.com/21404
Commit-Queue: Mike Reed <reed@google.com>
Reviewed-by: Florin Malita <fmalita@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
b8d88d72cbe9cc3dde91eaf58e928b34748526a7 29-Jun-2017 Mike Klein <mtklein@chromium.org> update long out of date comment

Change-Id: I3dead53a30992edd032f16e6711b97bbf76a0e36
Reviewed-on: https://skia-review.googlesource.com/21261
Reviewed-by: Mike Klein <mtklein@chromium.org>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
9026fe13a751582e58e98f9bf735c18b4719d7fe 29-Jun-2017 Florin Malita <fmalita@chromium.org> 2pt conical stage for focal-point-outside case

A couple of annoyances here:

1) the prev vector_scale stage is not usable for masking, as NaN values can propagate through
=> switch to actual masking

2) for the outside case, we must select the min root when the gradient is flipped
=> split into two templated stages (_min, _max)

(I'm not convinced that we need to flip the gradient for RP at all; we can investigate later)

Change-Id: I0283812d613a53124f2987d1aea1f26e4533655e
Reviewed-on: https://skia-review.googlesource.com/21162
Reviewed-by: Mike Klein <mtklein@chromium.org>
Commit-Queue: Florin Malita <fmalita@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
2e409009fb715400a0d64612c57187465c12790c 28-Jun-2017 Florin Malita <fmalita@chromium.org> 2pt conical stage for focal-pt-on-edge case

When the focal point is on the edge of the end circle, the quadratic
equation devolves to linear. Add a stage to handle this case.

As a complication, this case can produce "degenerate" values:

1) t == NaN
2) R(t) < 0

For these, we're supposed to draw transparent black - which means
overwriting the color from the gradient stage. To support this, build
a 0/1 vector mask in the context, and apply it post-gradient-stage.

Change-Id: Ice4e3243abfd8c784bb810f6c310aed7a4ac7dc8
Reviewed-on: https://skia-review.googlesource.com/21111
Commit-Queue: Florin Malita <fmalita@chromium.org>
Reviewed-by: Mike Klein <mtklein@google.com>
/external/skia/src/core/SkRasterPipeline.h
a66ef2d1063c9005611890613a7c27bede6ec5cb 28-Jun-2017 Florin Malita <fmalita@chromium.org> 2ptconical stage

Initial impl, for the well-behaved case (focal point inside).

MBP numbers -

Before:

3365.87 ! gradient_conical_clamp_shallow srgb
3590.88 ! gradient_conical_clamp_shallow_dither srgb
3376.91 ! gradient_conical_clamp_3color srgb
3351.64 ! gradient_conical_clamp_hicolor srgb
3379.35 ! gradient_conical_clamp srgb

After:

648.93 ! gradient_conical_clamp_shallow srgb
665.12 ! gradient_conical_clamp_shallow_dither srgb
773.98 ! gradient_conical_clamp_3color srgb
1175.35 ! gradient_conical_clamp_hicolor srgb
619.17 ! gradient_conical_clamp srgb

Change-Id: I07b22a758363e1f340a6041bca53bdef74229eb9
Reviewed-on: https://skia-review.googlesource.com/20906
Commit-Queue: Florin Malita <fmalita@chromium.org>
Reviewed-by: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
111f8a9eea6980a70a300e3a8bfd758257310fe2 27-Jun-2017 Mike Klein <mtklein@chromium.org> add bgra as 1st class format

This is a start to eliminating swap_rb as a stage.

I've just hit the main hot spots here. Going to look into
the ~dozen other spots to see how they should work next.

Change-Id: I26fb46a042facf7bd6fff3b47c9fcee86d7142fd
Reviewed-on: https://skia-review.googlesource.com/20982
Commit-Queue: Mike Klein <mtklein@chromium.org>
Reviewed-by: Mike Reed <reed@google.com>
/external/skia/src/core/SkRasterPipeline.h
9f2b3d1fbfa16146184a13b778fbe2fa5355c51b 27-Jun-2017 Mike Klein <mtklein@chromium.org> remove unused "swap" stage

Change-Id: I25619f010f8ac6441529cfe8dff2d8c42d7400cf
Reviewed-on: https://skia-review.googlesource.com/20988
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
279091ef85eec98969b72805bbf613f1c0660380 27-Jun-2017 Mike Reed <reed@google.com> specialize loaders for dst registers, to avoid move/swap stages

Bug: skia:
Change-Id: I75d82ef2226c5f116b7de2208c4e914739414b6d
Reviewed-on: https://skia-review.googlesource.com/20984
Commit-Queue: Mike Reed <reed@google.com>
Reviewed-by: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
eeccbf735deedb88313c480dde29bfd8193ee5f3 05-Jun-2017 Mike Klein <mtklein@chromium.org> Real fix for stage perf regression.

When we made start_pipeline() return void, the call into the tail!=0 run
of the pipeline became eligble to be a tail-call, and Clang made that
choice. This had the side effect of not going through vzeroupper on
those tails.

We now mark start_pipeline() as inelligible for tail calls when
targeting AVX+. All paths go through the vzeroupper at the end.

BUG=chromium:729237

Change-Id: I2099931284214f24c67b38979b3ad4b4d10e8bba
Reviewed-on: https://skia-review.googlesource.com/18591
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
9beafc41afa3c78ffa12649dcde73628c277da9c 05-Jun-2017 Mike Klein <mtklein@chromium.org> have start_pipeline() return limit again

This is spooky.
I don't quite yet understand why, but this makes things much faster.

Performance regressed across the board when we no longer needed the
value and changed it to return void:

https://perf.skia.org/e/?begin=1496176469&keys=6994&xbaroffset=28513

You can see similar regressions following this Chromium bug link.
BUG=chromium:729237

Change-Id: I68371b0456014f909acf819aca52aa4f4f187460
Reviewed-on: https://skia-review.googlesource.com/18580
Reviewed-by: Herb Derby <herb@google.com>
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
bba02c203190a19bce7eb60887c4ae64041c8ae8 02-Jun-2017 Mike Klein <mtklein@chromium.org> start on SkJumper lowp mode

Just 3 stages implemented so far:

load_8888
swap_rb
store_8888

That's enough to make the shortest non-trivial pipeline
that you see in the new unit test.

Change-Id: Iabf90866ab452f7183d8c8dec1405ece2db695dc
Reviewed-on: https://skia-review.googlesource.com/18458
Commit-Queue: Mike Klein <mtklein@chromium.org>
Reviewed-by: Herb Derby <herb@google.com>
/external/skia/src/core/SkRasterPipeline.h
370c2b304a35297d36fcee91e3b6ac516091434d 02-Jun-2017 Mike Klein <mtklein@chromium.org> minor refactor to SkRasterPipeline::BuildPipeline

I don't see any reason to have it be static...

Change-Id: I0fdc9c0629e2194c469f7c9c696d1bb55ffbc98a
Reviewed-on: https://skia-review.googlesource.com/18455
Reviewed-by: Mike Klein <mtklein@chromium.org>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
761d27c4d76bbd553c10cfe835d572b6fa33cf26 01-Jun-2017 Mike Klein <mtklein@chromium.org> update SkRasterPipeline::run() to also take y

y isn't used yet. This is just a warmup that updates the callers.

Change-Id: I78f4f44e2b82f72b3a39fa8a8bdadef1d1b8a99e
Reviewed-on: https://skia-review.googlesource.com/18381
Reviewed-by: Mike Klein <mtklein@chromium.org>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
506262665c9b02514dea9a4da3211a00fdf02dbe 25-May-2017 Mike Klein <mtklein@chromium.org> add srcover_rgba_8888

Change-Id: Iabdc79183ccd2f9cc513d4bdc530fb078b1627ab
Reviewed-on: https://skia-review.googlesource.com/17930
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
6533159f2c83d0af51f79c3d85461580e2346080 24-May-2017 Mike Reed <reed@google.com> add stage for gaussian alpha to rgba for shadows

speeds up GM:shadow_utils 20%

Bug: skia:
Change-Id: If52dd5e2c76ace82d06351af1419e0663a3a634f
Reviewed-on: https://skia-review.googlesource.com/17844
Commit-Queue: Mike Klein <mtklein@chromium.org>
Reviewed-by: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
14a6430b7bcf92bcabf4aef18805969d1335aab1 24-May-2017 Florin Malita <fmalita@chromium.org> SkSTArenaAlloc

Syntactic sugar, gets rid of some boilerplate.

Change-Id: Ibdb28b7a8f1d5e4a4e18c12d423b987d7194e340
Reviewed-on: https://skia-review.googlesource.com/17837
Commit-Queue: Florin Malita <fmalita@chromium.org>
Reviewed-by: Herb Derby <herb@google.com>
/external/skia/src/core/SkRasterPipeline.h
9fff11133d1890a2733e8a61ba976492fe800c99 24-May-2017 Mike Klein <mtklein@chromium.org> better extend: alloc once, no recursion

Change-Id: I6a8cee08248462e4e17196028758dd8d44093b28
Reviewed-on: https://skia-review.googlesource.com/17831
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
b24704d35f67f5b460be9c92794892e06adceb46 24-May-2017 Mike Klein <mtklein@chromium.org> SkRasterPipeline in SkArenaAlloc

Bug: skia:6673

Change-Id: Ia2bae4f6a9039a007a10b6b45bcf2f0854bf6e5c
Reviewed-on: https://skia-review.googlesource.com/17794
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
9f85d68887a61f93656dbfacdd3f978d510c02ee 23-May-2017 Mike Klein <mtklein@chromium.org> retry tilers against 1

These weren't the Valgrind problem.

Change-Id: Ic76df460cf0ce7f7ae8155d549f4e92a7f8de040
Reviewed-on: https://skia-review.googlesource.com/17701
Reviewed-by: Mike Klein <mtklein@chromium.org>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
459889967899be7258edcd8e0567f63bb3ae33df 22-May-2017 Brian Osman <brianosman@google.com> Revert "add tilers against 1"

This reverts commit 8110b849d60455d6fb594f26919f0f38c3ec9925.

Reason for revert: Valgrind requires reverting ancestor commit.

Original change's description:
> add tilers against 1
>
> Change-Id: I2482972a43cb89a93cbfb9e708614e0334002e53
> Reviewed-on: https://skia-review.googlesource.com/17483
> Reviewed-by: Herb Derby <herb@google.com>
> Commit-Queue: Mike Klein <mtklein@chromium.org>
>

TBR=mtklein@chromium.org,herb@google.com,reed@google.com
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true

Change-Id: Icbc3a2212f800854ef7b2b17aa99fedad182d53e
Reviewed-on: https://skia-review.googlesource.com/17523
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
/external/skia/src/core/SkRasterPipeline.h
8110b849d60455d6fb594f26919f0f38c3ec9925 22-May-2017 Mike Klein <mtklein@chromium.org> add tilers against 1

Change-Id: I2482972a43cb89a93cbfb9e708614e0334002e53
Reviewed-on: https://skia-review.googlesource.com/17483
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
0a76b413eac46ec218b367c5456709059557f5db 22-May-2017 Mike Klein <mtklein@chromium.org> add compile, use it in blitter

I expanded an existing bench to show off the difference:

SkRasterPipeline_…
300 …compile 1x …run 1.14x

Change-Id: I5d63d602cda3f78d2d0891fcc85baf5514632900
Reviewed-on: https://skia-review.googlesource.com/17458
Commit-Queue: Mike Klein <mtklein@chromium.org>
Reviewed-by: Herb Derby <herb@google.com>
/external/skia/src/core/SkRasterPipeline.h
1859f69d20e433b86714e5b9002121f2b20a5fc6 22-May-2017 Mike Klein <mtklein@chromium.org> some basic speed ups for SkRasterPipeline::append()

The new bench demos the speedup:
SkRasterPipelineReuse_…
…full 1x …some 1.8x …none 5.22x

Change-Id: I5e51fb4316ae04558710ce62560850584ccb4aea
Reviewed-on: https://skia-review.googlesource.com/17449
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
0264095cfd1aa205b0af218c7e5abbaff8a5db0c 19-May-2017 Mike Reed <reed@google.com> stage version of vertices

This CL, just to limit its size/complexity, only handles
colors but not textures. Future CLs will cover everything.

Performance is pretty exciting. Its faster than the old code-path,
and when we fix a bug in pathutils to preserve opaqueness, it gets
a lot faster (8 -> 5)

Bug: skia:
Change-Id: I4113060e25fe25fe4e6a0ea59bd4fa5e33abc668
Reviewed-on: https://skia-review.googlesource.com/17276
Commit-Queue: Mike Reed <reed@google.com>
Reviewed-by: Mike Klein <mtklein@chromium.org>
Reviewed-by: Florin Malita <fmalita@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
4de1304297d7220b223c829bf386f97815db1654 15-May-2017 Herb Derby <herb@google.com> Add evenly spaced stops and unify gradient contexts

Change-Id: I17ac13b9d1ea6765e2c1a2b53aa6975eab408856
Reviewed-on: https://skia-review.googlesource.com/16713
Commit-Queue: Herb Derby <herb@google.com>
Reviewed-by: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
9959f723c33d609519c265abb5c4f48cba71fd6f 15-May-2017 Mike Reed <reed@google.com> composeshader stages

needed to add two helper stages for composeshader

load_rgba, store_rgba

These just read/write the r,g,b,a registers to context memory, making no promise as to how the
memory is formatted (e.g. interleaved -vs- planar).

Note that we have similar existing stages, but they did not seem to suit:

constant_color

This guy loads 4 floats from memory, and splats them into registers. I need to load 4 entire
registers.

load_f32, store_f32

These offset where they read/write based on the 'x' register, plus they guarantee that the memory
will be interleaved ala SkPM4f.

Bug: skia:
Change-Id: Iaa81f950660b837bdb34416ab3e342d56a92239b
Reviewed-on: https://skia-review.googlesource.com/16716
Reviewed-by: Mike Klein <mtklein@chromium.org>
Commit-Queue: Mike Reed <reed@google.com>
/external/skia/src/core/SkRasterPipeline.h
5c7960be57010bf61db3d4ce879a3194687b5af9 11-May-2017 Mike Klein <mtklein@chromium.org> refactor gradient stage names

This is just a name refactor and I'm happy to delay it until we're done
with the current wave of gradient CLs. The main ideas:

- we use the "linear_gradient" stages for all gradients,
so cut the "linear" and just call them "gradient";

- remind ourselves that the 2-stop stage requires even spacing, i.e.
stops at 0 and 1. This name should harmonize with Herb's new
general evenly spaced gradient stage, currently
"evenly_spaced_linear_gradient", and after it lands and I rebase,
"evenly_spaced_gradient"

- remind ourselves which polar coordinate xy_to_polar_unit returns,
the angle.

Change-Id: I0fd0c8bd4c1ead7d2d0fff45a199d318b71f34ac
Reviewed-on: https://skia-review.googlesource.com/16500
Commit-Queue: Mike Klein <mtklein@chromium.org>
Reviewed-by: Mike Reed <reed@google.com>
/external/skia/src/core/SkRasterPipeline.h
df3a371c904c2e3e1d3d9201b7dfc0d080e5f12a 12-May-2017 Mike Klein <mtklein@chromium.org> Revert "Evenly space gradient stage."

This reverts commit 892501d09bc8608704362235c73a59bb23a386b3.

Reason for revert:
https://bugs.chromium.org/p/chromium/issues/detail?id=721682
:(

Original change's description:
> Evenly space gradient stage.
>
> This seems like an experiment at this point because I don't know how to do
> this kind of thing on arm.
>
>
> Numbers from Skylake...
> Before:
> ./out/Release/nanobench --config srgb \
> --match gradient_linear_clamp_3color gradient_linear_clamp_hicolor -q 19:48:13
> Timer overhead: 36.7ns
> ! -> high variance, ? -> moderate variance
> micros bench
> 439.92 ? gradient_linear_clamp_3color srgb
> 2697.60 gradient_linear_clamp_hicolor srgb
> 437.28 gradient_linear_clamp_3color_4f srgb
> 2700.50 gradient_linear_clamp_hicolor_4f srgb
>
>
> After:
> micros bench
> 382.35 gradient_linear_clamp_3color srgb
> 593.49 gradient_linear_clamp_hicolor srgb
> 382.36 gradient_linear_clamp_3color_4f srgb
> 565.60 gradient_linear_clamp_hicolor_4f srgb
>
>
> Numbers on my Mac Trashcan are about even; there is no
> speedup or slowdown between master and this change.
>
> Change-Id: I04402452e23c0888512362fd1d6d5436cea61719
> Reviewed-on: https://skia-review.googlesource.com/15960
> Commit-Queue: Herb Derby <herb@google.com>
> Reviewed-by: Mike Klein <mtklein@chromium.org>
>

TBR=mtklein@chromium.org,mtklein@google.com,herb@google.com,fmalita@google.com
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true

Change-Id: Ic6a064c66686b6f238ca1417ba1abd9ce25de1b4
Reviewed-on: https://skia-review.googlesource.com/16660
Reviewed-by: Mike Klein <mtklein@chromium.org>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
892501d09bc8608704362235c73a59bb23a386b3 11-May-2017 herb <herb@google.com> Evenly space gradient stage.

This seems like an experiment at this point because I don't know how to do
this kind of thing on arm.


Numbers from Skylake...
Before:
./out/Release/nanobench --config srgb \
--match gradient_linear_clamp_3color gradient_linear_clamp_hicolor -q 19:48:13
Timer overhead: 36.7ns
! -> high variance, ? -> moderate variance
micros bench
439.92 ? gradient_linear_clamp_3color srgb
2697.60 gradient_linear_clamp_hicolor srgb
437.28 gradient_linear_clamp_3color_4f srgb
2700.50 gradient_linear_clamp_hicolor_4f srgb


After:
micros bench
382.35 gradient_linear_clamp_3color srgb
593.49 gradient_linear_clamp_hicolor srgb
382.36 gradient_linear_clamp_3color_4f srgb
565.60 gradient_linear_clamp_hicolor_4f srgb


Numbers on my Mac Trashcan are about even; there is no
speedup or slowdown between master and this change.

Change-Id: I04402452e23c0888512362fd1d6d5436cea61719
Reviewed-on: https://skia-review.googlesource.com/15960
Commit-Queue: Herb Derby <herb@google.com>
Reviewed-by: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
090fbf86cf90dd326b3b3b59cde0a46b63a594a6 08-May-2017 Herb Derby <herb@google.com> Add radial gradient stage.

Change-Id: Ie1f9640f5149f21bd8b3b864ff8b176232e1b0a9
Reviewed-on: https://skia-review.googlesource.com/15461
Reviewed-by: Florin Malita <fmalita@chromium.org>
Commit-Queue: Herb Derby <herb@google.com>
/external/skia/src/core/SkRasterPipeline.h
bb33833ed25c30007e4ea3cd3de6df728407f94e 04-May-2017 Mike Klein <mtklein@chromium.org> jumper, finish blend modes

I've decided to ignore our existing CPU implementations and start from
scratch, mostly referencing the GL ES 3.2 spec and w3 spec.

This implementation ought to look a lot like the reference
implementation I've written in gm/hsl.cpp, with the addition of
handling alpha: unpremul, blend, re-premul with a simple SrcOver alpha.

Change-Id: I38cf6be2dc66a6f46d7b18b91847f6933d2fab62
Reviewed-on: https://skia-review.googlesource.com/15316
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
581e69865ef5425aa5c9dba173b346dff1ec5652 03-May-2017 Mike Klein <mtklein@chromium.org> dither stage

I think we can dither generically as a pipeline stage.

I'm not married to where the dither happens, or the implementation,
which is mostly cribbed from
https://en.wikipedia.org/wiki/Ordered_dithering.

BUG=skia:3302,skia:6224

Change-Id: If7f6b22a523ca0b34cb03c0aa97b6734c34e0133
Reviewed-on: https://skia-review.googlesource.com/15161
Commit-Queue: Mike Klein <mtklein@chromium.org>
Reviewed-by: Florin Malita <fmalita@chromium.org>
Reviewed-by: Herb Derby <herb@google.com>
/external/skia/src/core/SkRasterPipeline.h
7eb86981a954c500fa4a4d8425496a5beb789e5d 03-May-2017 Herb Derby <herb@google.com> Add sweep gradient to SkRasterPipeline

This is a prototype. I have remove the tiling,
but maybe I should add it back in.

I thinking about factoring out the common code with
linear gradient in its own CL.

I think radial gradient will be very close to this.

Change-Id: I1dfcb4f944138ee623afdf10b2a8befde797c604
Reviewed-on: https://skia-review.googlesource.com/13766
Reviewed-by: Mike Klein <mtklein@chromium.org>
Reviewed-by: Florin Malita <fmalita@chromium.org>
Commit-Queue: Herb Derby <herb@google.com>
/external/skia/src/core/SkRasterPipeline.h
c7be00366bb0171e2d247ea71e291a64e3d10254 25-Apr-2017 Mike Klein <mtklein@chromium.org> remove to_2dot2 and from_2dot2

The parametric_{r,g,b} stages are just as good now;
under the hood it's all going through approx_powf.

Change-Id: If7f3ae1e24fcee2ddb201c1d66ce1dd64820c89a
Reviewed-on: https://skia-review.googlesource.com/14320
Reviewed-by: Matt Sarett <msarett@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
1be0db86aae4f69df4b71cc387eeda70d72afd56 21-Apr-2017 Mike Klein <mtklein@chromium.org> long live SkJumper

Change-Id: I5de3c8daae80e437b3553ab6afcee7120a1bb775
Reviewed-on: https://skia-review.googlesource.com/14038
Reviewed-by: Herb Derby <herb@google.com>
Reviewed-by: Matt Sarett <msarett@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
dc80eaa97142b8635c50b8154f648f9098fdbd15 21-Apr-2017 Mike Klein <mtklein@chromium.org> kill off shader_adapter

I still plan to replace this more thoroughly with a different blitter,
but for now just implement it using callback.

This is the last stage not supported by SkJumper! Will follow up by
removing all of SkRasterPipeline_opts.h and anything that indicates
SkJumper might not work.

Change-Id: I96ba2bb0a26266f3b658e5f3153ec7d5bbd46799
Reviewed-on: https://skia-review.googlesource.com/14037
Reviewed-by: Florin Malita <fmalita@chromium.org>
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
c17dc24fa9994eacc640d3adc6633a02fd96d3fc 20-Apr-2017 Mike Klein <mtklein@chromium.org> jumper, rework callback a bit, use it for color_lookup_table

Looks like the color-space images have this well tested (even without
lab_to_xyz) and the diffs look like rounding/FMA.

The old plan to keep loads and stores outside callback was:
1) awkward, with too many pointers and pointers to pointers to track
2) misguided... load and store stages march ahead by x,
working at ptr+0, ptr+8, ptr+16, etc. while callback
always wants to be working at the same spot in the buffer.

I spent a frustrating day in lldb to understood 2). :/

So now the stage always store4's its pixels to a buffer in the context
before the callback, and when the callback returns it load4's them back
from a pointer in the context, defaulting to that same buffer.

Instead of passing a void* into the callback, we pass the context
itself. This lets us subclass the context and add our own data...
C-compatible object-oriented programming.

Change-Id: I7a03439b3abd2efb000a6973631a9336452e9a43
Reviewed-on: https://skia-review.googlesource.com/13985
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
7fee90cb5eda2345bb8ec9be706aea1a09866005 07-Apr-2017 Mike Klein <mtklein@chromium.org> add a callback stage to SkRasterPipeline

This lets us temporarily escape to piece of code outside
SkRasterPipeline. We should be able to use this to replace
- parametric_{r,g,b,a}
- table_{r,g,b,a}
- color_lookup_table
- shader_adapter*

* We want to obsolete shader_adapter for other reasons anyway,
but we _could_ replace it with this if we want to.

Change-Id: I42b657b3c19c679796ed1876856cae0c8471307e
Reviewed-on: https://skia-review.googlesource.com/12102
Commit-Queue: Mike Klein <mtklein@chromium.org>
Reviewed-by: Herb Derby <herb@google.com>
Reviewed-by: Matt Sarett <msarett@google.com>
/external/skia/src/core/SkRasterPipeline.h
7b4202de0e818024fb5c5d9535ebbacec0e186c1 10-Apr-2017 Herb Derby <herb@google.com> Add multi-stop SkJumper stage.

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

Change-Id: I954d02638a785bec284d2fdf8f46abfccd474e7a
Reviewed-on: https://skia-review.googlesource.com/10211
Commit-Queue: Herb Derby <herb@google.com>
Reviewed-by: Mike Klein <mtklein@chromium.org>
Reviewed-by: Florin Malita <fmalita@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
2d2ac3d1629c10c31bf946681728297fcd7c7cdb 05-Apr-2017 Mike Klein <mtklein@chromium.org> remove trace and registers stages

These can't really be done with SkJumper.

Change-Id: Ic357f00695eacd2766f6dfb9a3be13b0c07c3650
Reviewed-on: https://skia-review.googlesource.com/11386
Reviewed-by: Mike Klein <mtklein@chromium.org>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
4c55027dbf57d0701361b123e36b8fad46c341c3 21-Mar-2017 Matt Sarett <msarett@google.com> Add support for F32 sources to SkColorSpaceXform

This also subtlely allows clients to convert between F32 and F16.

BUG=skia:

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

Change-Id: Ied5f2295fce00c69d8cf85730be899f3f8597915
Reviewed-on: https://skia-review.googlesource.com/9914
Reviewed-by: Mike Reed <reed@google.com>
Reviewed-by: Mike Klein <mtklein@chromium.org>
Commit-Queue: Matt Sarett <msarett@google.com>
/external/skia/src/core/SkRasterPipeline.h
e522f4c455d0d5dbe813f38d16c0d4cd46fa5dee 22-Feb-2017 Matt Sarett <msarett@google.com> Enable legacy premuls in SkColorSpaceXform

***Will allow for simplified Android framework code, they typically
want a color correct transform followed by a gamma encoded premul.
***Chrome does the same, so this will make it easier to replace their
codecs.
***Will decrease code size. Both types of premuls are moved off the
fast path here - one is essentially unused in production and the
other is not "encouraged".
***Will actually make the common case faster: sRGB->sRGB means no
color xform, just premul in SkSwizzler.

BUG=skia:

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

Change-Id: Ia4ec1d273b6f137151f951d37c0ebf975f6b9a3e
Reviewed-on: https://skia-review.googlesource.com/8848
Reviewed-by: Mike Klein <mtklein@chromium.org>
Commit-Queue: Matt Sarett <msarett@google.com>
/external/skia/src/core/SkRasterPipeline.h
8729e5bbf7c436fd7c7c13182adbbfb419f566b5 16-Feb-2017 Mike Klein <mtklein@chromium.org> Simplify more: remove SkRasterPipeline::compile().

It's easier to work on SkJumper if everything funnels through run().

I don't anticipate huge benefit from compile() without JITing,
but it's something we can always put back if we find a need.

Change-Id: Id5256fd21495e8195cad1924dbad81856416d913
Reviewed-on: https://skia-review.googlesource.com/8468
Commit-Queue: Mike Klein <mtklein@chromium.org>
Reviewed-by: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
394d414452a5d654731b0b5a3669f8e2420048b3 14-Feb-2017 Dominic Mazzoni <dmazzoni@chromium.org> Implement SkHighContrastFilter

This is a color filter to apply several contrast adjustments for users
with low vision, including inverting the colors (in either RGB or HSL
space), applying gamma correction, converting to grayscale, and increasing
the contrast.

BUG=skia:6235

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

Change-Id: Icb8f3e290932d8bcd9387fb1f39dd20767e15cf6
Reviewed-on: https://skia-review.googlesource.com/7460
Commit-Queue: Mike Klein <mtklein@chromium.org>
Reviewed-by: Mike Reed <reed@google.com>
Reviewed-by: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
e1caee1ad884def91b8afb50e5672f1f0ee278f1 15-Feb-2017 Mike Klein <mtklein@chromium.org> SkJumper

Change-Id: If9f73e712e429564fef58ccb838c212ec8d2e68c
Reviewed-on: https://skia-review.googlesource.com/8525
Commit-Queue: Mike Klein <mtklein@chromium.org>
Reviewed-by: Herb Derby <herb@google.com>
/external/skia/src/core/SkRasterPipeline.h
f6a1a2179ad6bf37dd81a658b30d12bfbdfa5c3f 15-Feb-2017 Mike Klein <mtklein@chromium.org> Clean up SkSplicer.

SkJumper's looking promising enough that I want this further out of my face.

Change-Id: I6dbe71aeabe32f7f4258ba157460e6985733b0ce
Reviewed-on: https://skia-review.googlesource.com/8528
Commit-Queue: Mike Klein <mtklein@chromium.org>
Reviewed-by: Herb Derby <herb@google.com>
Reviewed-by: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
8572d853514e3c73077540341edbf62a3f486605 14-Feb-2017 Matt Sarett <msarett@google.com> Make raster pipeline support all pixel conversions

BUG=skia:

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

Change-Id: Idc76999d0f5591a567b3976cb9db829c350e4be2
Reviewed-on: https://skia-review.googlesource.com/8304
Reviewed-by: Mike Klein <mtklein@chromium.org>
Commit-Queue: Matt Sarett <msarett@google.com>
/external/skia/src/core/SkRasterPipeline.h
5101448ebb28cdd8104436ee25ce34c7d5dfe334 09-Feb-2017 Matt Sarett <msarett@google.com> Pixel conversion refactors: use raster pipeline for 565 and gray

I'm trying not to do too much in one CL. But, in general, I hope
to drop (non-performance important/optimized) special cases and
use the pipeline.

BUG=skia:

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

Change-Id: I724d3982f1467f6232371360b860484f13b1ede8
Reviewed-on: https://skia-review.googlesource.com/8271
Reviewed-by: Mike Klein <mtklein@chromium.org>
Commit-Queue: Matt Sarett <msarett@google.com>
/external/skia/src/core/SkRasterPipeline.h
9206c76337cd349c769103e06af005edd0583a10 30-Jan-2017 Florin Malita <fmalita@chromium.org> SkRasterPipeline shader adapter

Reland of https://skia-review.googlesource.com/c/7615.

(lifted from https://skia-review.googlesource.com/c/7088/)

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

Change-Id: I797a2f0ae80209c8637875418e08d2fa03249672
Reviewed-on: https://skia-review.googlesource.com/7731
Commit-Queue: Florin Malita <fmalita@google.com>
Reviewed-by: Mike Reed <reed@google.com>
/external/skia/src/core/SkRasterPipeline.h
5ce33efa7c91a638c0dc94f539c9597a954fd529 29-Jan-2017 Florin Malita <fmalita@chromium.org> Revert "SkRasterPipeline shader adapter"

This reverts commit 6d11ed2951fadc281433606a8edc6774bed39735.

Build failure: https://chromium-swarm.appspot.com/task?id=3403da0cdee8c210&refresh=10

../../../src/core/SkOpts.cpp -o obj/src/core/libskia.SkOpts.o
In file included from ../../../src/core/SkOpts.cpp:46:
../../../src/opts/SkRasterPipeline_opts.h:1093:11: error: no member named 'Load4' in '(anonymous namespace)::SkNx<8, float>'
SkNf::Load4(buf, &r, &g, &b, &a);
~~~~~~^
1 error generated.

Leak: https://chromium-swarm.appspot.com/task?id=3403df55fd5eaa10&refresh=10

Original change's description:
> SkRasterPipeline shader adapter
>
> (lifted from https://skia-review.googlesource.com/c/7088/)
>
> R=​mtklein@google.com,herb@google.com,reed@google.com
>
> CQ_INCLUDE_TRYBOTS=skia.primary:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD
>
> Change-Id: Idddb84069423c5fc535bea0a65a5b21a4d07084d
> Reviewed-on: https://skia-review.googlesource.com/7615
> Commit-Queue: Florin Malita <fmalita@chromium.org>
> Reviewed-by: Mike Klein <mtklein@chromium.org>
> Reviewed-by: Mike Reed <reed@google.com>
>

TBR=mtklein@chromium.org,mtklein@google.com,herb@google.com,fmalita@chromium.org,reed@google.com
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
CQ_INCLUDE_TRYBOTS=skia.primary:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD

Change-Id: I68c0be3398bde93cd0842baf25b025c5fe1c3df7
Reviewed-on: https://skia-review.googlesource.com/7730
Commit-Queue: Florin Malita <fmalita@chromium.org>
Reviewed-by: Florin Malita <fmalita@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
6d11ed2951fadc281433606a8edc6774bed39735 27-Jan-2017 Florin Malita <fmalita@chromium.org> SkRasterPipeline shader adapter

(lifted from https://skia-review.googlesource.com/c/7088/)

R=mtklein@google.com,herb@google.com,reed@google.com

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

Change-Id: Idddb84069423c5fc535bea0a65a5b21a4d07084d
Reviewed-on: https://skia-review.googlesource.com/7615
Commit-Queue: Florin Malita <fmalita@chromium.org>
Reviewed-by: Mike Klein <mtklein@chromium.org>
Reviewed-by: Mike Reed <reed@google.com>
/external/skia/src/core/SkRasterPipeline.h
319ba3d3a177498095c31696e0aec8b3af25f663 20-Jan-2017 Mike Klein <mtklein@chromium.org> Move shader register setup to SkRasterPipelineBlitter.

We've been seeding the initial values of our registers to x+0.5,y+0.5,
1,0, 0,0,0,0 (useful values for shaders to start with) in all pipelines.
This CL changes that to do so only when blitting, and only when we have
a shader.

The nicest part of this change is that SkRasterPipeline itself no longer
needs to have a concept of y, or what x means. It just marches x
through [x,x+n), and the blitter handles y and layers the meaning of
"dst x coordinate" onto x.

This ought to make SkSplicer a little easier to work with too.

dm --src gm --config f16 srgb 565 all draws the same.

Change-Id: I69d8c1cc14a06e5dfdd6a7493364f43a18f8dec5
Reviewed-on: https://skia-review.googlesource.com/7353
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
a9e8ef079bed014ef2b3f6951525cc662f649942 23-Jan-2017 Mike Klein <mtklein@chromium.org> SkRasterPipeline: implement support for SkTableColorFilter

This adds and uses a byte_tables stage that converts to bytes, looks up
in the tables, then converts back to floats.

We treat this as color filter as pure math, not considering anything
colorspace related: no transfer functions, no gamut to change, etc.

Change-Id: If5fefc1bcef61a0fb0ae279002a0dd1547e429ea
Reviewed-on: https://skia-review.googlesource.com/7413
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
c86e470c190934a2f7680ed10cf9fad757e1ab75 20-Jan-2017 Florin Malita <fmalita@chromium.org> SkRasterPipeline impl for 2-stop linear gradients


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

Change-Id: Ia2b630cf9c0826fbfc3342707c005030d0529bbc
Reviewed-on: https://skia-review.googlesource.com/7186
Commit-Queue: Florin Malita <fmalita@chromium.org>
Reviewed-by: Herb Derby <herb@google.com>
Reviewed-by: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
1da27ef853ae3e701b7f4aae670c21684396dcce 19-Jan-2017 Matt Sarett <msarett@google.com> Add F16 support to SkPNGImageEncoder

BUG=skia:

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

Change-Id: Ifd221365a7b9f9a4a4fc5382621e0da7189e1148
Reviewed-on: https://skia-review.googlesource.com/6526
Reviewed-by: Mike Klein <mtklein@chromium.org>
Reviewed-by: Leon Scroggins <scroggo@google.com>
Commit-Queue: Matt Sarett <msarett@google.com>
/external/skia/src/core/SkRasterPipeline.h
5bee0b6de6b3ad1166d067e6b5046b48b8240a29 19-Jan-2017 Matt Sarett <msarett@google.com> Reland "Respect full precision for RGB16 PNGs" (part 2)

This lands all the new xform hooks but no change to src/codec.
So the new decode features are turned off.

I'm relanding this in pieces to try to bisect a
strange MSAN error.

Original CL:
https://skia-review.googlesource.com/c/7085/

BUG=skia:

CQ_INCLUDE_TRYBOTS=skia.primary:Test-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Debug-MSAN,Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD,Build-Ubuntu-Clang-x86_64-Release-Fast


Change-Id: I451a2a29c73ca475e9e7a5ded58d4948d6b8be19
Reviewed-on: https://skia-review.googlesource.com/7277
Reviewed-by: Matt Sarett <msarett@google.com>
Commit-Queue: Matt Sarett <msarett@google.com>
/external/skia/src/core/SkRasterPipeline.h
dfff166db5d5226dc002a22ab3e3097ef971d615 18-Jan-2017 Matt Sarett <msarett@google.com> Revert "Respect full precision for RGB16 PNGs"

This reverts commit 7a090c403da1dad6a2e19f2011158bd894a62d91.

Reason for revert: <INSERT REASONING HERE>

Original change's description:
> Respect full precision for RGB16 PNGs
>
> 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>
>

TBR=mtklein@chromium.org,mtklein@google.com,msarett@google.com,scroggo@google.com,reed@google.com
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=skia:
CQ_INCLUDE_TRYBOTS=skia.primary:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD

Change-Id: Ibd9879bc4f65ca0c2457dd0bfb5eb008d9a8f672
Reviewed-on: https://skia-review.googlesource.com/7183
Commit-Queue: Matt Sarett <msarett@google.com>
Reviewed-by: Matt Sarett <msarett@google.com>
/external/skia/src/core/SkRasterPipeline.h
7a090c403da1dad6a2e19f2011158bd894a62d91 17-Jan-2017 Matt Sarett <msarett@google.com> Respect full precision for RGB16 PNGs

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>
/external/skia/src/core/SkRasterPipeline.h
e71b167dbd4d8da76495ca85db83d1a3b49aaabd 13-Jan-2017 Mike Klein <mtklein@chromium.org> Attempt 3: SkRasterPipelineBlitter: support A8

Now that SkOpts_hsw.cpp no longer hooks in SkRasterPipeline_opts,
it should be safe to try this again.

This reverts commit 86d55b312a2649d80890ccf75f24571ada0265f1.

Change-Id: I2d495600ca9d3a0f49c2e02fbaaae349cefac3a1
Reviewed-on: https://skia-review.googlesource.com/6985
Reviewed-by: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
379938e47bc9edb6edfd21aabefa01aed71dd135 13-Jan-2017 Matt Sarett <msarett@google.com> Use RasterPipeline to support full precision on 16-bit RGBA pngs

Reland of Original Change:
https://skia-review.googlesource.com/6260

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

Change-Id: I809984dd9af225103bfbe83492a17c19da7c5e40
Reviewed-on: https://skia-review.googlesource.com/6980
Reviewed-by: Matt Sarett <msarett@google.com>
Commit-Queue: Matt Sarett <msarett@google.com>
/external/skia/src/core/SkRasterPipeline.h
25b60833e7c3dd25f2317b3f0e7af07f04b5beba 12-Jan-2017 Matt Sarett <msarett@google.com> Revert "Use RasterPipeline to support full precision on 16-bit RGBA pngs"

This reverts commit bb2339da39ab3ee59121acd911920dafcd4a2f72.

Reason for revert: Breaks MSAN

Original change's description:
> Use RasterPipeline to support full precision on 16-bit RGBA pngs
>
> TODO: Support more precision on 16-bit RGB pngs
>
> BUG=skia:
>
> CQ_INCLUDE_TRYBOTS=skia.primary:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD
>
> Change-Id: I89dfef3b4887b9c4895c17309933883ab90ffa4d
> Reviewed-on: https://skia-review.googlesource.com/6260
> Reviewed-by: Mike Reed <reed@google.com>
> Reviewed-by: Leon Scroggins <scroggo@google.com>
> Reviewed-by: Mike Klein <mtklein@chromium.org>
> Commit-Queue: Matt Sarett <msarett@google.com>
>

TBR=mtklein@chromium.org,mtklein@google.com,msarett@google.com,scroggo@google.com,reed@google.com,reviews@skia.org
BUG=skia:
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true

Change-Id: I47579c20af033a75883e2b35567cb9c690ce54b0
Reviewed-on: https://skia-review.googlesource.com/6975
Commit-Queue: Matt Sarett <msarett@google.com>
Reviewed-by: Matt Sarett <msarett@google.com>
/external/skia/src/core/SkRasterPipeline.h
bb2339da39ab3ee59121acd911920dafcd4a2f72 12-Jan-2017 Matt Sarett <msarett@google.com> Use RasterPipeline to support full precision on 16-bit RGBA pngs

TODO: Support more precision on 16-bit RGB pngs

BUG=skia:

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

Change-Id: I89dfef3b4887b9c4895c17309933883ab90ffa4d
Reviewed-on: https://skia-review.googlesource.com/6260
Reviewed-by: Mike Reed <reed@google.com>
Reviewed-by: Leon Scroggins <scroggo@google.com>
Reviewed-by: Mike Klein <mtklein@chromium.org>
Commit-Queue: Matt Sarett <msarett@google.com>
/external/skia/src/core/SkRasterPipeline.h
86d55b312a2649d80890ccf75f24571ada0265f1 07-Jan-2017 Mike Klein <mtklein@chromium.org> Revert "Retry "SkRasterPipelineBlitter: support A8"..."

This reverts commit f55ea6a1deb21120944d406124a2984b5009260a.

Reason for revert: crbug.com/679147

Original change's description:
> Retry "SkRasterPipelineBlitter: support A8"...
>
> ...preferring SkA8_Coverage_Blitter over SkRasterPipelineBlitter.
>
> I think we could make this work with SkRasterPipelineBlitter (tell it, draw white in Src mode with this mask), but the existing blitter is pretty hard to beat in efficiency and correctness.
>
> CQ_INCLUDE_TRYBOTS=skia.primary:Perf-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Debug-MSAN,Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD
>
>
> Change-Id: I72df9995c63f3334d8111c59711818cb5ed1e63c
> Reviewed-on: https://skia-review.googlesource.com/6627
> Reviewed-by: Mike Klein <mtklein@chromium.org>
> Commit-Queue: Mike Klein <mtklein@chromium.org>
>

TBR=mtklein@chromium.org,brianosman@google.com,reed@google.com,reviews@skia.org
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true

Change-Id: I6a36b4c087a52e54f4d591ded40e6a202fb77068
Reviewed-on: https://skia-review.googlesource.com/6760
Commit-Queue: Mike Klein <mtklein@chromium.org>
Reviewed-by: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
7f71d8845c3c57c6e4b33c3666cca46b55e91d02 06-Jan-2017 Mike Klein <mtklein@chromium.org> SkXbyak basics

A little JIT proof of concept for SkRasterPipeline, using xbyak, which is a header-only assembler. It's x86-only, but supports x86 very thoroughly, and it's very user friendly (at least as far as assembler libraries go...).

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

Change-Id: Ie17e562b0f3fff5914041badfb2c1fe4f86efab8
Reviewed-on: https://skia-review.googlesource.com/5730
Reviewed-by: Herb Derby <herb@google.com>
Reviewed-by: Heather Miller <hcm@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
f55ea6a1deb21120944d406124a2984b5009260a 06-Jan-2017 Mike Klein <mtklein@chromium.org> Retry "SkRasterPipelineBlitter: support A8"...

...preferring SkA8_Coverage_Blitter over SkRasterPipelineBlitter.

I think we could make this work with SkRasterPipelineBlitter (tell it, draw white in Src mode with this mask), but the existing blitter is pretty hard to beat in efficiency and correctness.

CQ_INCLUDE_TRYBOTS=skia.primary:Perf-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Debug-MSAN,Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD


Change-Id: I72df9995c63f3334d8111c59711818cb5ed1e63c
Reviewed-on: https://skia-review.googlesource.com/6627
Reviewed-by: Mike Klein <mtklein@chromium.org>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
8c8cb5bfc547229422a33db5c344fe1542bf00a7 06-Jan-2017 Mike Klein <mtklein@chromium.org> simplify by removing _d stages

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

Change-Id: I75e232faee6ad48f65bac5b119a461280b27bbc8
Reviewed-on: https://skia-review.googlesource.com/6661
Reviewed-by: Mike Klein <mtklein@chromium.org>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
4a224f60111643f36d6f1c204142ce34511a32a1 05-Jan-2017 Mike Klein <mtklein@chromium.org> Revert "SkRasterPipelineBlitter: support A8"

This reverts commit f44373c119290b501d4aec7385e16d12c28a1f0f.

Reason for revert: MSAN

Original change's description:
> SkRasterPipelineBlitter: support A8
>
> This adds support for loading and storing A8, then uses it in SkRasterPipelineBlitter.
>
> I think this handles all dst formats now: A8, 565, 8888 (by policy, sRGB only) and F16.
>
> CQ_INCLUDE_TRYBOTS=master.tryserver.blink:linux_trusty_blink_rel;skia.primary:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD
>
>
> Change-Id: Id207f6e6c56b6bfcc301d77dd23e0959bb7afba8
> Reviewed-on: https://skia-review.googlesource.com/6554
> Reviewed-by: Mike Reed <reed@google.com>
> Commit-Queue: Mike Klein <mtklein@chromium.org>
>

TBR=mtklein@chromium.org,reed@google.com,reviews@skia.org
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true

Change-Id: I9ead3c3335e1776e9a1639ca0481253821505d67
Reviewed-on: https://skia-review.googlesource.com/6625
Commit-Queue: Mike Klein <mtklein@chromium.org>
Reviewed-by: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
f44373c119290b501d4aec7385e16d12c28a1f0f 04-Jan-2017 Mike Klein <mtklein@chromium.org> SkRasterPipelineBlitter: support A8

This adds support for loading and storing A8, then uses it in SkRasterPipelineBlitter.

I think this handles all dst formats now: A8, 565, 8888 (by policy, sRGB only) and F16.

CQ_INCLUDE_TRYBOTS=master.tryserver.blink:linux_trusty_blink_rel;skia.primary:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD


Change-Id: Id207f6e6c56b6bfcc301d77dd23e0959bb7afba8
Reviewed-on: https://skia-review.googlesource.com/6554
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
975245407a16dba58ee42cb12f70f8db87f02da0 14-Dec-2016 raftias <raftias@google.com> Added optimized sRGB/2.2 gamma stages into A2B color xform

Hooked up existing to/from srgb, and to_2dot2 stages into
SkColorSpaceXform_A2B. Added a from_2dot2 stage to the raster pipeline
to complete the other direction.

BUG=skia:

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

Change-Id: I3887af3f59f67329d7e843e7355ff54e22cc4ed0
Reviewed-on: https://skia-review.googlesource.com/5840
Commit-Queue: Robert Aftias <raftias@google.com>
Reviewed-by: Mike Klein <mtklein@chromium.org>
Reviewed-by: Matt Sarett <msarett@google.com>
/external/skia/src/core/SkRasterPipeline.h
d37d5d96493604c12cfaa2d64bcbd32c41b01f3b 14-Dec-2016 Mike Klein <mtklein@chromium.org> Revert "Revert "clamp to premul when reading premul sRGB""

This reverts commit 2e018f548d76b0688f9873c683cffc681fec40ec.

Reason for revert: doesn't appear to have been the roll problem.

Original change's description:
> Revert "clamp to premul when reading premul sRGB"
>
> This reverts commit 04e10da8362a0dcabd795a4ad53f617719ca0d20.
>
> Reason for revert: roll?
>
> Change-Id: Id0a8dcd62763bd6eddde120c513ca97e098a4268
> Reviewed-on: https://skia-review.googlesource.com/6022
> Commit-Queue: Mike Klein <mtklein@chromium.org>
> Reviewed-by: Mike Klein <mtklein@chromium.org>
>

TBR=mtklein@chromium.org,reviews@skia.org,brianosman@google.com
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true

Change-Id: I399ca5e728ce6766c6707682c4c6b685681ffdeb
Reviewed-on: https://skia-review.googlesource.com/6025
Commit-Queue: Mike Klein <mtklein@chromium.org>
Reviewed-by: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
2e018f548d76b0688f9873c683cffc681fec40ec 14-Dec-2016 Mike Klein <mtklein@chromium.org> Revert "clamp to premul when reading premul sRGB"

This reverts commit 04e10da8362a0dcabd795a4ad53f617719ca0d20.

Reason for revert: roll?

Change-Id: Id0a8dcd62763bd6eddde120c513ca97e098a4268
Reviewed-on: https://skia-review.googlesource.com/6022
Commit-Queue: Mike Klein <mtklein@chromium.org>
Reviewed-by: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
04e10da8362a0dcabd795a4ad53f617719ca0d20 13-Dec-2016 Mike Klein <mtklein@chromium.org> clamp to premul when reading premul sRGB

It's pretty easy to start with sound premultiplied linear floats, pack those to sRGB encoded bytes, then read them back to linear floats and find them not quite premultiplied, with a color channel just a smidge greater than the alpha channel. This can happen basically any time we have different transfer functions for alpha and colors... sRGB being the only one we draw into.

This is an annoying problem with no known good solution. So apply the clamp hammer.

These new calls on SkRasterPipeline should make it impossible to get wrong.

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

Change-Id: I4c974f4a7b151f3f684946f1e83d06b1b288fd01
Reviewed-on: https://skia-review.googlesource.com/5945
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
b0b17d1e5375a65b8956a8990d63e0d02357fdaf 09-Dec-2016 Mike Klein <mtklein@chromium.org> bicubic, attempt gazillion

- explicitly separate bilinear_ stages in x and y too

BUG=skia:

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

Change-Id: Ib7b4f9d26ea6abe9171068e92424479d811ee606
Reviewed-on: https://skia-review.googlesource.com/5636
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
886cf53447a7f78a80476742d50424a5d45c3108 06-Dec-2016 Mike Klein <mtklein@chromium.org> Refactor bilerp a little.

1) rename to bilerp_xy, for x,y in {n[egative], p[ositive};
2) pull out a save_xy stage to save off the original x,y;
3) also calculate the fractional x,y fx,fy once instead of 4 times.

1) is a pure refactor;
2) adds a stage but otherwise is nothing different;
3) changes images a little bit (fractional parts can vary a bit around powers of two).

This extends naturally to naive bicubic using 16 bicubic_xy stages.

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

Change-Id: I666de5c21e978abb4feb6e3225e5b5920ba6c5b9
Reviewed-on: https://skia-review.googlesource.com/5550
Commit-Queue: Mike Klein <mtklein@chromium.org>
Reviewed-by: Herb Derby <herb@google.com>
/external/skia/src/core/SkRasterPipeline.h
cc63173634e773eac5de0b92f05d117ed2bdca84 06-Dec-2016 Mike Klein <mtklein@chromium.org> remove upper limit on number of pipeline stages

Bicubic is going to blow right past 48. At this point the fixed preallocation strategy is starting to look naive... at 64 we'd allocate just over 1K for every pipeline (and every compiled pipeline).

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

Change-Id: Ib2944ead1217123aba2b6347fd9d5315217540c9
Reviewed-on: https://skia-review.googlesource.com/5551
Reviewed-by: Mike Klein <mtklein@chromium.org>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
f6878baba8c7cd347e185361bac2eabaef863bfa 01-Dec-2016 Matt Sarett <msarett@google.com> Reland "Add RasterPipeline implementation for SkColorSpaceXform"

This is initially turned on for Linux debug builds,
which allows us to start testing.

Chrome for Android is a really good candidate for
this (will appreciate the code size savings), but
I'd first like to run some tests to understand the
performance/size tradeoffs a little better.

BUG:660416

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

Change-Id: Ifc80e663767df6bb767abb8b12b1ec5cec644ec5
Reviewed-on: https://skia-review.googlesource.com/5452
Reviewed-by: Matt Sarett <msarett@google.com>
Commit-Queue: Matt Sarett <msarett@google.com>
/external/skia/src/core/SkRasterPipeline.h
5476128f0a88217414f05e6a7ee518cdb411d026 01-Dec-2016 raftias <raftias@google.com> Added CMYK support for ICC profiles.

Changed ICC parsing/SkGammas/SkColorLookUpTable to handle non-3-channel
inputs. Parsed CMYK A2B ICC profiles. Integrated this with SkJpegCodec
(the only file that supports CMYK) and SkColorSpaceXform_A2B to allow
parsing and color xforming of ICC CMYK images.

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

Change-Id: I11e3d17180244281be3eb43fd608609925a7f71e
Reviewed-on: https://skia-review.googlesource.com/5444
Reviewed-by: Matt Sarett <msarett@google.com>
Commit-Queue: Matt Sarett <msarett@google.com>
/external/skia/src/core/SkRasterPipeline.h
b6d4e139b522821933d356ef7d2472816d25340a 01-Dec-2016 Brian Osman <brianosman@google.com> Revert "Add RasterPipeline implementation for SkColorSpaceXform"

This reverts commit dd19ac7d10c7c00dd6e9b1f4c4c6aae729c7e6d4.

Reason for revert: ASAN

Change-Id: I59aacc092398c4db40696a8343d657a5ad7c0f66
Reviewed-on: https://skia-review.googlesource.com/5448
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
/external/skia/src/core/SkRasterPipeline.h
dd19ac7d10c7c00dd6e9b1f4c4c6aae729c7e6d4 01-Dec-2016 Matt Sarett <msarett@google.com> Add RasterPipeline implementation for SkColorSpaceXform

This is initially turned on for Linux debug builds,
which allows us to start testing.

Chrome for Android is a really good candidate for
this (will appreciate the code size savings), but
I'd first like to run some tests to understand the
performance/size tradeoffs a little better.

BUG:660416

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

Change-Id: I0fb2512216dfc0bda2e5388f9865318eec22291e
Reviewed-on: https://skia-review.googlesource.com/5348
Commit-Queue: Mike Klein <mtklein@chromium.org>
Reviewed-by: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
62458a6778bc39eea5360301a67d192b3a263df1 01-Dec-2016 Mike Klein <mtklein@chromium.org> Revert "Added CMYK support for ICC profiles."

This reverts commit 51c3fcd376c5c9972d9476b5532f6164375a38d1.

Reason for revert: ASAN, MSAN both take issue with parse_and_load_gamma()

Original change's description:
> Added CMYK support for ICC profiles.
>
> Changed ICC parsing/SkGammas/SkColorLookUpTable to handle non-3-channel
> inputs. Parsed CMYK A2B ICC profiles. Integrated this with SkJpegCodec
> (the only file that supports CMYK) and SkColorSpaceXform_A2B to allow
> parsing and color xforming of ICC CMYK images.
>
> BUG=skia:
>
> GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=5197
> CQ_INCLUDE_TRYBOTS=skia.primary:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD
>
>
> Change-Id: Id6619f63f04071f79cd2d84321857dfa269ad3aa
> Reviewed-on: https://skia-review.googlesource.com/5197
> Commit-Queue: Mike Klein <mtklein@chromium.org>
> Reviewed-by: Matt Sarett <msarett@google.com>
> Reviewed-by: Mike Klein <mtklein@chromium.org>
> Reviewed-by: Leon Scroggins <scroggo@google.com>
>

TBR=mtklein@chromium.org,mtklein@google.com,msarett@google.com,scroggo@google.com,brianosman@google.com,raftias@google.com,reviews@skia.org
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true

Change-Id: Ib43fef00bc233c0b4fa47ed29040d69601def267
Reviewed-on: https://skia-review.googlesource.com/5423
Commit-Queue: Mike Klein <mtklein@chromium.org>
Reviewed-by: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
51c3fcd376c5c9972d9476b5532f6164375a38d1 30-Nov-2016 raftias <raftias@google.com> Added CMYK support for ICC profiles.

Changed ICC parsing/SkGammas/SkColorLookUpTable to handle non-3-channel
inputs. Parsed CMYK A2B ICC profiles. Integrated this with SkJpegCodec
(the only file that supports CMYK) and SkColorSpaceXform_A2B to allow
parsing and color xforming of ICC CMYK images.

BUG=skia:

GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=5197
CQ_INCLUDE_TRYBOTS=skia.primary:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD


Change-Id: Id6619f63f04071f79cd2d84321857dfa269ad3aa
Reviewed-on: https://skia-review.googlesource.com/5197
Commit-Queue: Mike Klein <mtklein@chromium.org>
Reviewed-by: Matt Sarett <msarett@google.com>
Reviewed-by: Mike Klein <mtklein@chromium.org>
Reviewed-by: Leon Scroggins <scroggo@google.com>
/external/skia/src/core/SkRasterPipeline.h
babd93e11290067da65567ea02f556c251a67c71 30-Nov-2016 Mike Klein <mtklein@chromium.org> constant means constant

Strip all the "constant" verbiage out of stages that really just mean 1, single, scalar.

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

Change-Id: I3d71202b348fadc3ced8ecb6c18c939cf92d7243
Reviewed-on: https://skia-review.googlesource.com/5396
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
c789b61167dd98efc3c3bfcf9673eef24c2e57f4 30-Nov-2016 Mike Klein <mtklein@chromium.org> Bring back SkRasterPipeline::run() for one-off uses.

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

Change-Id: I308b6d75f2987a667eead9a55760a2ff6aec2984
Reviewed-on: https://skia-review.googlesource.com/5353
Commit-Queue: Mike Klein <mtklein@chromium.org>
Reviewed-by: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
7a14734d2cf20e99a24949e9513d823fdfa03b8d 29-Nov-2016 Mike Klein <mtklein@chromium.org> support a8

Most of this is plumbing through the full paint to shaders instead of just the filter quality.

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

Change-Id: I6afde07566afa3a4391c24dca7017a9a4f5ec700
Reviewed-on: https://skia-review.googlesource.com/5317
Commit-Queue: Mike Klein <mtklein@chromium.org>
Reviewed-by: Mike Reed <reed@google.com>
/external/skia/src/core/SkRasterPipeline.h
729b58296282da00fb9c0f92db2e2e8a8347d431 29-Nov-2016 Mike Klein <mtklein@chromium.org> Consistent naming.

For stages that have {r,g,b,a} and {dr,dg,db,da} versions, name the {r,g,b,a} one "foo" and the {dr,dg,db,da} on "foo_d". The {r,g,b,a} registers are the ones most commonly used and fastest, so they get short ordinary names, and the d-registers are less commonly used and sometimes slower, so they get a suffix.

Some stages naturally opearate on all 8 registers (the xfermodes, accumulate). These names for those look fine and aren't ambiguous.

Also, a bit more re-arrangement in _opts.h.

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

Change-Id: Ia20029247642798a60a2566e8a26b84ed101dbd0
Reviewed-on: https://skia-review.googlesource.com/5291
Reviewed-by: Mike Klein <mtklein@chromium.org>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
e03339a35435b6c4b9ddb5b9d1d3592be5185de2 28-Nov-2016 Mike Klein <mtklein@chromium.org> Convert blitter over to new style from_srgb, to_srgb.

Every sRGB GM changes, none noticeably.

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

Change-Id: I632845aea0f40751639cccbcfde8fa270cae0301
Reviewed-on: https://skia-review.googlesource.com/5275
Reviewed-by: Mike Klein <mtklein@chromium.org>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
b04c35214cf4c0e4cdfead28d31722d8da457bf9 28-Nov-2016 Mike Klein <mtklein@chromium.org> Split srgb out of accum stages.

By stashing the scales in the context (i.e. on the stack), we can free up enough registers to really simplify how the bitmap sample stages interact.

Nearest neighbor is straightforward now: just call the appropriate gather_ function, and you're done. The source pixels end up in the source registers. If they're sRGB encoded, follow up with from_srgb_s

To bilerp, we bracket those 1 or 2 gather+from_srgb_s stages with a stage setting up each corner (x += dx, y += dy, save off scale) and a stage that accumulates into the d-registers (load saved scale, dr += scale * r, etc.). When all the samples are accumulated, copy the d-registers into the s-registers.

from_srgb_d and to_srgb are lightly sketched here and will be used in the next CL, where I apply this same factoring to non-bitmap loads and stores. This is a little tricky, because we don't actually have a float->float to_srgb yet.

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

Change-Id: I272a1f278f0ea1b29a2f07ac225f753faa8dae81
Reviewed-on: https://skia-review.googlesource.com/5271
Reviewed-by: Mike Klein <mtklein@chromium.org>
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
d5de013643789950aef09a9f081ac65c4c965900 28-Nov-2016 Mike Klein <mtklein@chromium.org> Some simple pipeline refactoring.

This is a batch of little tweaks that all preserve the existing logical behavior:
- rename dst to move_dst_src to parallel move_src_dst
- remove unused swap_src_dst
- move swap_rb up with the other utility stages
- factor out from_8888() to parallel from_565() and from_4444()
- factor out gather() from the accum_* stages

This changes the order of the math in accum_8888[_srgb] ever so slightly, from (scale * C) * (1/255.0f) to scale * (1/255.0f * C). It causes a few pixel diffs, but nothing noticeable. This makes the 8888 bilerp logic consistent with the other formats, which all convert to [0,1] float first before being scaled.

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

Change-Id: Id37857b91be3086565169dcc9b1a537574e532aa
Reviewed-on: https://skia-review.googlesource.com/5226
Reviewed-by: Mike Klein <mtklein@chromium.org>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
cb5338cadcc7852026a5225f8cf825530f265fa2 22-Nov-2016 Mike Klein <mtklein@chromium.org> Support sRGB 565.

It looks like I'm not going to be able to avoid supporting sRGB G8, I8, 565, 4444, 8888.
(A8 and F16 will always be linear.) This fixes 565, and lays out the rest of the accum_*.

I did a little reorganization to keep things in ascending bit depth, just for sanity.

GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=5145
CQ_INCLUDE_TRYBOTS=master.client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot

Change-Id: Ib0508e5a4ee1bab2044a76bcabc367841d634cd2
Reviewed-on: https://skia-review.googlesource.com/5145
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
46e66a2bf51546a7c3b08625769899b9ead56ec6 21-Nov-2016 Mike Klein <mtklein@chromium.org> bilerp

GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=5107

Change-Id: I5c30105501cbdb57896d9ec35737494eabd5998b
Reviewed-on: https://skia-review.googlesource.com/5107
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
f7f883b09df55548936635dd8fd1dc8c415db18c 21-Nov-2016 Mike Klein <mtklein@chromium.org> Rearrange NN sampling to more naturally support bilerp.

GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=5105

Change-Id: Ic692b5faf2d33fee31b119ff8d3653118b25b7c2
Reviewed-on: https://skia-review.googlesource.com/5105
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
c01e7dff5fa013832b808f72ac74d81eaa1cb145 17-Nov-2016 Mike Klein <mtklein@chromium.org> perspective matrix

Nothing too tricky. The path of least resistance was to keep the matrix row-major when in perspective. It should make no difference in the end.

GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=4983
CQ_INCLUDE_TRYBOTS=master.client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot

Change-Id: I48bb9de0265e7873c465874cc37076a8111f5ea1
Reviewed-on: https://skia-review.googlesource.com/4983
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
06a65e2799eaead18f778792801406aff4aec0d9 17-Nov-2016 Mike Klein <mtklein@chromium.org> Support SkImageShader in SkRasterPipeline blitter

First of many CLs, I'm sure.

This handles 8888 or sRGB sources with an affine matrix, clamp/clamp tiling, and nearest-neighbor sampling only.

GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=4906
CQ_INCLUDE_TRYBOTS=master.client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot

Change-Id: I99f7508852b3d44b6f52f7a0bee29a793af35c48
Reviewed-on: https://skia-review.googlesource.com/4906
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
db4d406e7e311113e56663b1f2286c18adcee985 16-Nov-2016 Matt Sarett <msarett@google.com> Hook into parametric and table raster pipeline stages

BUG:664864

GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=4913
CQ_INCLUDE_TRYBOTS=master.client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot

Change-Id: I909152f1abba60803f0ce2f970eec1f8f1816d78
Reviewed-on: https://skia-review.googlesource.com/4913
Commit-Queue: Matt Sarett <msarett@google.com>
Reviewed-by: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
a9312fd56e2209f56222f822eb10ed0c25a42724 16-Nov-2016 Mike Klein <mtklein@chromium.org> Add trace and registers stages.

Yet more debugging tools.

TBR=herb@google.com

GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=4908
CQ_INCLUDE_TRYBOTS=master.client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot

Change-Id: I92e2e6b17abfc32c8d3554e71dbf95abadbb3824
Reviewed-on: https://skia-review.googlesource.com/4908
Commit-Queue: Mike Klein <mtklein@chromium.org>
Reviewed-by: Herb Derby <herb@google.com>
Reviewed-by: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
cfcf624c39683a8364fa7f22235b787a23675780 16-Nov-2016 Mike Klein <mtklein@chromium.org> add {parametric,table}_{r,g,b} stages.

Think you can take over from here, hook these into SkColorSpaceXform_A2B, and remove the need for fn_1_{r,g,b}?

BUG=skia:664864

GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=4888
CQ_INCLUDE_TRYBOTS=master.client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot

Change-Id: If573fa2861f32f201f4db28598559290b1eef812
Reviewed-on: https://skia-review.googlesource.com/4888
Commit-Queue: Mike Klein <mtklein@chromium.org>
Reviewed-by: Matt Sarett <msarett@google.com>
/external/skia/src/core/SkRasterPipeline.h
3928c6b6165cf2d13d3b5f50762d7f621706a946 15-Nov-2016 Mike Klein <mtklein@chromium.org> Add SkRasterPipeline::dump().

Entirely for debugging.

TBR=herb@google.com

GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=4871

Change-Id: I6d6972c40b11854441f566c12516a2ec8c75c78f
Reviewed-on: https://skia-review.googlesource.com/4871
Reviewed-by: Herb Derby <herb@google.com>
Reviewed-by: Mike Klein <mtklein@chromium.org>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
fb191da789c988b6ed1502cc1c210be3f9c53b52 15-Nov-2016 Mike Klein <mtklein@chromium.org> More shader preliminaries / refactoring

- thread through ctm
- make blitter handle paint modulation instead of each shader

TBR=herb@google.com

GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=4830
CQ_INCLUDE_TRYBOTS=master.client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot

Change-Id: I8161e6b3864c4e48e4d47d5ad40a56a13c02fee8
Reviewed-on: https://skia-review.googlesource.com/4830
Reviewed-by: Mike Klein <mtklein@chromium.org>
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
af49b19582f1f7a55e1300647804212252315b8a 15-Nov-2016 Mike Klein <mtklein@chromium.org> Start each pipeline with (x,y) in (dr,dg) registers for the shader.

Image shaders need to do some geometry work before sampling the image colors:
1) determine dst coordinates
2) map back to src coordinates
3) tiling

Feeding (x,y) through as (dr,dg) registers makes step 1) easy, perhaps trivial, while leaving (r,g,b,a) with their usual meanings, "the color", starting with the paint color.

This is easy to tweak into something like (x+0.5, y+0.5, 1) in (dr,dg,db) once this lands. Mostly I just want to get all the uninteresting boilerplate out of the way first.

BUG=skia:

GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=4791
CQ_INCLUDE_TRYBOTS=master.client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot

Change-Id: Ia07815d942ded6672dc1df785caf80a508fc8f37
Reviewed-on: https://skia-review.googlesource.com/4791
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
2563601fc2b0505619f905f86bd249ae630197cc 12-Nov-2016 raftias <raftias@google.com> Initial implementation of a SkColorSpace_A2B xform

There is support for all features of SkColorSpace_A2B.

Tests for these functionality were adapted from
the XYZ xform, plus a CLUT-specific test was added.

Shared functions used by both SkColorSpaceXform_XYZ and SkColorSpaceXform_A2B
have been moved into a shared header.

BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2449243003
CQ_INCLUDE_TRYBOTS=master.client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot

Review-Url: https://codereview.chromium.org/2449243003
/external/skia/src/core/SkRasterPipeline.h
c5093411071222c752334dc6e38887020e986cc3 04-Nov-2016 Mike Klein <mtklein@chromium.org> swap_src_dst -> move_src_dst

We thought it'd be handy to have swap_src_dst so that it could be used
either to move dst into src or src into dst. Turns out, we already have
a stage that moves dst into src (called "dst", the dst blend mode), so
there's really no reason to have swap_src_dst over the strictly more
efficient move_src_dst.

swap_src_dst is typically 12 register moves, where move_src_dst is 4.

BUG=skia:

GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=4461

Change-Id: Ib453775f854e313f823851978eaadc3995872312
Reviewed-on: https://skia-review.googlesource.com/4461
Reviewed-by: Matt Sarett <msarett@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
a4a4488a4c3f16758f7e2b050168fe8d2f3b2a4d 04-Nov-2016 mtklein <mtklein@chromium.org> skrpb: evaluate color filters for constant shaders once.

The simplest thing to do here is just run shader+color filter pipeline at
construction time to create a new constant color shader (replacing the paint
color).

This reduces a pipeline like:
- constant_color (paint color)
- matrix_4x5
- clamp_a
- load_d_foo, xfermode, lerp, store_foo
to
- constant_color (paint color -> matrix_4x5 -> clamp_a)
- load_d_foo, xfermode, lerp, store_foo

To implement this all, we add a new store_f32 stage that writes SkPM4f, and
finally get around to implementing Sk8f::Store4() (store while reinterlacing).
Sk4f::Store4() already exists for both SSE and NEON.

Next step: reduce simple constant_color -> store pipelines (src mode, full
coverage) into non-pipeline memsets.
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2480823002

Review-Url: https://codereview.chromium.org/2480823002
/external/skia/src/core/SkRasterPipeline.h
668661700127e8e340c1d731d2b9fc5ea443163f 03-Nov-2016 Mike Klein <mtklein@chromium.org> Basic pipeline blend mode strength reductions:

- when the shader is opaque, srcover becomes src
- don't load dst when blitting in src mode with full coverage
- fold coverage into src alpha when in srcover mode

It's not obvious that we can fold coverage into src alpha when using a 565 mask, so I've not attempted that. What would we do about alpha?

Over all GMs this causes a single 1-bit difference in sRGB mode. No 565 or f16 diffs.

BUG=skia:

GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=4349
CQ_INCLUDE_TRYBOTS=master.client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot

Change-Id: Ib9161f498c4efa6b348ca74522166da64d09a7da
Reviewed-on: https://skia-review.googlesource.com/4349
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
eea7c16d59a163bd5b858891bc916c49063ed8ac 03-Nov-2016 Mike Klein <mtklein@chromium.org> Add Matrix colorfilter pipeline stages.

This breaks the color filter down into a couple logical steps:
- go to unpremul
- apply the 4x5 matrix
- clamp to [0,1]
- go to premul

Because we already have handy premul clamp stages, we swap the order of clamp and premul. This is lossless.

While adding our stages to the pipeline, we analyze the matrix to see if we can skip any steps:
- we can skip unpremul if the shader is opaque (alphas are all 1 ~~~> we're already unpremul);
- we can skip the premul back if the color filter always produces opaque (here, are the inputs opaque and do we keep them that way, but we could also check for an explicit 0 0 0 0 1 alpha row);
- we can skip the clamp_0 if the matrix can never produce a value less than 0;
- we can skip the clamp_1 if the matrix can never produce a value greater than 1.

The only thing that should seem missing is per-pixel alpha checks. We don't do those here, but instead make up for it by operating on 4-8 pixels at a time.
We don't split the 4x5 matrix into a 4x4 and 1x4 translate. We could, but when we have FMA (new x86, all ARMv8) we might as well work the translate for free into the FMAs.

This makes gm/fadefilter.cpp draw differently in sRGB and F16 modes, bringing them in line with the GPU sRGB and GPU f16 configs. It's unclear to me what was wrong with the old CPU implementation.

GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=4346
CQ_INCLUDE_TRYBOTS=master.client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot

Change-Id: I14082ded8fb8d63354167d9e6b3f8058f840253e
Reviewed-on: https://skia-review.googlesource.com/4346
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
1f49f26353997195030aeab41c8665e1860d2958 01-Nov-2016 Mike Klein <mtklein@chromium.org> SkRasterPipeline: implement SkLumaColorFilter

After getting discouraged by the non-separable xfermodes, I decided to look at filling out the color filters instead. This one's nice and easy.

There's only 1 GM that exercises this color filter, and it's drawing noticeably lighter now in f16 and sRGB configs. 565 is unchanged. This makes me think the diffs are due to lost precision in the previous method, which was going through the default fallback to 8888 filterSpan().

I double checked: the f16 config now draws nearly identically to the gpuf16 config. It used to be quite different.

BUG=skia:

GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=4183
CQ_INCLUDE_TRYBOTS=master.client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot

Change-Id: Ic6feaecae5cf18493b5df89733f6a5ca362e9a75
Reviewed-on: https://skia-review.googlesource.com/4183
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
130863ef51a2a94e5bdf87f344c0e892b2403985 27-Oct-2016 Mike Klein <mtklein@chromium.org> Only clamp when we think our math requires it.

If we require our inputs are sound, in-gamut, premul colors (a in [0,1], r,g,b in [0,a]) then we should only need to clamp when the math we perform requires it. The safety clamps before each store are paranoia.

The main thing this pipeline handles right now that needs clamping is the plus transfermode.
This is either used to blend, where the clamp must come after the coverage lerp, or used via a mode color filter, where we have no choice but to clamp right at the end of the color filer.

This changes how the mode color filter draws with the plus transfermode. It didn't used to clamp at all. I think this is a bug fix.

BUG=skia:

GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=4034

Change-Id: I3cbaade2127cc88c8782596f45749c4fe4b0e953
Reviewed-on: https://skia-review.googlesource.com/4034
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
e9f74b89c09772dd5abae1c0709c711d7cdb6535 25-Oct-2016 Mike Klein <mtklein@chromium.org> SkRasterPipeline::compile().

I'm not yet caching these in the blitter, and speed is essentially unchanged in the bench where I am now building and compiling the pipeline only once. This may not be able to stay a simple std::function after I figure out caching, but for now it's a nice fit.

GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=3911

Change-Id: I9545af589f73baf9f17cb4e6ace9a814c2478fe9
Reviewed-on: https://skia-review.googlesource.com/3911
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
aebfb45104eeb6dab5dbbedda13c2eaa7b7f7868 25-Oct-2016 Mike Klein <mtklein@chromium.org> Move SkRasterPipeline further into SkOpts.

The portable code now becomes entirely focused on enum+ptr descriptions, leaving the concrete implementation of the pipeline to SkOpts::run_pipeline().

As implemented, the concrete implementation is basically the same, with a little more type safety.

Speed is essentially unchanged on my laptop, and that's having run_pipeline() rebuild its concrete state every call. There's room for improvement there if we split this into a compile_pipeline() / run_pipeline() sort of thing, which is my next planned CL.

BUG=skia:

GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=3920
CQ_INCLUDE_TRYBOTS=master.client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot

Change-Id: Ie4c554f51040426de7c5c144afa5d9d9d8938012
Reviewed-on: https://skia-review.googlesource.com/3920
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
2878e76247fd335dee755cfd4c9cd026804f9655 20-Oct-2016 Mike Klein <mtklein@chromium.org> SkRasterPipeline refactor

- Give body and tail functions separate types. This frees a register in body functions, especially important for Windows.

- Fill out default, SSE4.1, and HSW versions of all functions. This means we don't have to mess around with SkNf_abi... all functions come from the same compilation unit where SkNf is a single consistent type.

- Move Stage::next() into SkRasterPipeline_opts.h as a static inline function.

- Remove Stage::ctx() entirely... fCtx is literally the same thing.

This is a step along the way toward building the entire pipeline in src/opts, removing the need for all the stages to be functions living in SkOpts.

BUG=skia:

GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=3680
CQ_INCLUDE_TRYBOTS=master.client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot,Test-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Debug-ASAN-Trybot

Change-Id: I7de78ffebc15b9bad4eda187c9f50369cd7e5e42
Reviewed-on: https://skia-review.googlesource.com/3680
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
511ea17b967914ae8342d7861c6695ec8d492bcc 15-Oct-2016 Mike Klein <mtklein@chromium.org> SkNx_abi for passing Sk4f as function arguments, etc.

CQ_INCLUDE_TRYBOTS=master.client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot,Test-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Debug-ASAN-Trybot

BUG=skia:

GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=3422

Change-Id: Idc0a192faa7ff843aef023229186580c69baf1f7
Reviewed-on: https://skia-review.googlesource.com/3422
Reviewed-by: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
96b333a9a1b6a367d6c542118638e3108d8ed23b 12-Oct-2016 Mike Klein <mtklein@chromium.org> Add SkRasterPipeline support to SkModeColorFilter.

The shader leaves its color in r,g,b,a, so to implement this color filter, we move {r,g,b,a} into {dr,dg,db,da}, then load the filter's color in {r,g,b,a}, then apply the xfermode as usual.

I've left a note about how we could sometimes cut a stage for some xfermodes. Similarly we really only need to move_src_dst instead of swap_src_dst, but it seemed handy and less error prone to do a full two way swap. As usual, we can always circle back and fine-tune these things if we want.

BUG=skia:

GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=3243
CQ_INCLUDE_TRYBOTS=master.client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot

Change-Id: I928c0fb25236eb75cf238134c6bebb53af5ddf07
Reviewed-on: https://skia-review.googlesource.com/3243
Commit-Queue: Mike Klein <mtklein@chromium.org>
Reviewed-by: Matt Sarett <msarett@google.com>
/external/skia/src/core/SkRasterPipeline.h
04adfda9c74481d0b640c0ce18864588babfcdf6 12-Oct-2016 Mike Klein <mtklein@chromium.org> SkRasterPipeline: 8x pipelines, without any 8x code enabled.

Original review here: https://skia-review.googlesource.com/c/2990/
Second attempt here: https://skia-review.googlesource.com/c/3064/

This is the same as the second attempt, but with the change to SkOpts_hsw.cpp left out.
That omitted part is the key piece... this just lands the refactoring.

CQ_INCLUDE_TRYBOTS=master.client.skia:Perf-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Debug-ASAN-Trybot,Perf-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Debug-GN,Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot,Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-Fast-Trybot;master.client.skia.compile:Build-Win-MSVC-x86_64-Debug-Trybot

GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=3242

Change-Id: Iaafa793a4854c2c9cd7e85cca3701bf871253f71
Reviewed-on: https://skia-review.googlesource.com/3242
Reviewed-by: Mike Klein <mtklein@chromium.org>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
42f4b42e8311f168aeeadd939b476c05b329500e 10-Oct-2016 Mike Klein <mtklein@chromium.org> Revert "SkRasterPipeline: 8x pipelines, attempt 2"

This reverts commit Id0ba250037e271a9475fe2f0989d64f0aa909bae.

crbug.com/654213
Looks like Chrome Canary's picking up Haswell code on non-Haswell machines.

Change-Id: I16f976da24db86d5c99636c472ffad56db213a2a
Reviewed-on: https://skia-review.googlesource.com/3108
Commit-Queue: Mike Klein <mtklein@chromium.org>
Reviewed-by: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
a71e151c6f0be68dc96ad2d169bbc31edca8f946 07-Oct-2016 Mike Klein <mtklein@chromium.org> SkRasterPipeline: 8x pipelines, attempt 2

Original review here: https://skia-review.googlesource.com/c/2990/

Changes since:
- simpler implementations of load_tail() / store_tail(): slower, but more obviously correct to all compilers
- fleshed out math ops on Sk8i and Sk8u to make unit tests happy on -Fast bot (where we always have AVX2)
- now storing stage functions as void(*)() to avoid undefined behavior and/or linker problems. This restores 32-bit Windows.
- all AVX2 Sk8x methods are marked always-inline, to avoid linking the "wrong" version on Debug builds.

CQ_INCLUDE_TRYBOTS=master.client.skia:Perf-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Debug-ASAN-Trybot,Perf-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Debug-GN,Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot,Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-Fast-Trybot;master.client.skia.compile:Build-Win-MSVC-x86_64-Debug-Trybot

GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=3064

Change-Id: Id0ba250037e271a9475fe2f0989d64f0aa909bae
Reviewed-on: https://skia-review.googlesource.com/3064
Reviewed-by: Mike Klein <mtklein@chromium.org>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
942858774831fea6e3f5f9d6c39b9538cf031bfd 07-Oct-2016 Mike Klein <mtklein@chromium.org> Revert "SkRasterPipeline: 8x pipelines"

This reverts commit I1c82e5755d8e44cc0b9c6673d04b117f85d71a3a.

Reason for revert: lots of failing bots.

TBR=mtklein@chromium.org,msarett@google.com,reviews@skia.org
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true

Change-Id: I653bed3905187f43196504f19424985fa2a765b5
Reviewed-on: https://skia-review.googlesource.com/3063
Commit-Queue: Mike Klein <mtklein@chromium.org>
Reviewed-by: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
1aebdaee0e2aa4324509fd3ad4c40c21703ae4a2 06-Oct-2016 Mike Klein <mtklein@chromium.org> SkRasterPipeline: 8x pipelines

Bench runtime changes:
sRGB: 7194 -> 3735 = 1.93x faster
F16: 6531 -> 2559 = 2.55x faster

Instead of building 4x and 1-3x pipelines and then maybe 8x and 1-7x, instead build either the short ones or the long ones, but not both. If we just take care to use a compatible run_pipeline(), there's some cross-module type disagreement but everything works out in the end.

Oddly, a few places that looked like they'd be faster using SkNx_fma() or Sk4f_round()/Sk8f_round() are actually faster the long way, e.g. multiply, add 0.5, truncate. Curious! In all the other places you see here that I've used SkNx_fma(), it's been a significant speedup.

This folds in a couple refactors and cleanups that I've been meaning to do. Hope you don't mind... if find the new code considerably easier to read than the old code.

BUG=skia:

GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2990
CQ_INCLUDE_TRYBOTS=master.client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot

Change-Id: I1c82e5755d8e44cc0b9c6673d04b117f85d71a3a
Reviewed-on: https://skia-review.googlesource.com/2990
Reviewed-by: Matt Sarett <msarett@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
26bea5d55735367152378bae14453e9666d1c625 05-Oct-2016 Mike Klein <mtklein@chromium.org> Make test lower-level, make const_cast more visible.

I can only think there's something funky going on with the hidden
const_cast inside SkRasterPipeline.cpp, or with the Sk4h -> Sk4f
conversion. So make the const_cast visible and write the test
directly in halfs instead of floats.

CQ_INCLUDE_TRYBOTS=master.client.skia:Test-Mac-Clang-MacMini6.2-CPU-AVX-x86_64-Release-GN-Trybot

BUG=skia:

GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=3003

Change-Id: I3a7e19ae165fce44f177b4968a63ec04e25c4b93
Reviewed-on: https://skia-review.googlesource.com/3003
Reviewed-by: Mike Klein <mtklein@chromium.org>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
9161ef012fb22d1b76122cb95dbfddb72f02ef02 04-Oct-2016 Mike Klein <mtklein@chromium.org> Make all SkRasterPipeline stages stock stages in SkOpts.

If we want to support VEX-encoded instructions (AVX, F16C, etc.) without a ridiculous slowdown, we need to make sure we're running either all VEX-encoded instructions or all non-VEX-encoded instructions. That means we cannot mix arbitrary user-defined SkRasterPipeline::Fn (never VEX) with those living in SkOpts (maybe VEX)... it's SkOpts or bust.

This ports the existing user-defined SkRasterPipeline::Fn use cases over to use stock stages from SkOpts. I rewrote the unit test to use stock stages, and moved the SkXfermode implementations to SkOpts. The code deleted for SkArithmeticMode_scalar should already be dead.


BUG=skia:

GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2940
CQ_INCLUDE_TRYBOTS=master.client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot

Change-Id: I94dbe766b2d65bfec6e544d260f71d721f0f5cb0
Reviewed-on: https://skia-review.googlesource.com/2940
Commit-Queue: Mike Klein <mtklein@google.com>
Reviewed-by: Mike Reed <reed@google.com>
/external/skia/src/core/SkRasterPipeline.h
fa9f241a85c55c32a3fe2ae0324811de998f7a2e 29-Sep-2016 Mike Klein <mtklein@chromium.org> Add an enum layer of indirection for stock raster pipeline stages.

This is handy now, and becomes necessary with fancier backends:
- most code can't speak the type of AVX pipeline stages,
so indirection's definitely needed there;
- if the pipleine is entirely composed of stock stages,
these enum values become an abstract recipe that can be JITted.

BUG=skia:

GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2782
CQ_INCLUDE_TRYBOTS=master.client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot

Change-Id: Iedd62e99ce39e94cf3e6ffc78c428f0ccc182342
Reviewed-on: https://skia-review.googlesource.com/2782
Reviewed-by: Mike Klein <mtklein@chromium.org>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
baaf8ad95237d1defdb7d93077d9bf8410d8ad7f 29-Sep-2016 Mike Klein <mtklein@chromium.org> Start moving SkRasterPipeline stages to SkOpts.

This lets them pick up runtime CPU specializations. Here I've plugged in SSE4.1. This is still one of the N prelude CLs to full 8-at-a-time AVX.

I've moved the union of the stages used by SkRasterPipelineBench and SkRasterPipelineBlitter to SkOpts... they'll all be used by the blitter eventually. Picking up SSE4.1 specialization here (even still just 4 pixels at a time) is a significant speedup, especially to store_srgb(), so much that it's no longer really interesting to compare against the fused-but-default-instruction-set version in the bench. So that's gone now.

That left the SkRasterPipeline unit test as the only other user of the EasyFn simplified interface to SkRasterPipeline. So I converted that back down to the bare-metal interface, and EasyFn and its friends became SkRasterPipeline_opts.h exclusive abbreviations (now called Kernel_Sk4f). This isn't really unexpected: SkXfermode also wanted to build up its own little abstractions, and once you build your own abstraction, the value of an additional EasyFn-like layer plummets to negative.

For simplicity I've left the SkXfermode stages alone, except srcover() which was always part of the blitter. No particular reason except keeping the churn down while I hack. These _can_ be in SkOpts, but don't have to be until we go 8-at-a-time.

BUG=skia:

GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2752
CQ_INCLUDE_TRYBOTS=master.client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot

Change-Id: I3b476b18232a1598d8977e425be2150059ab71dc
Reviewed-on: https://skia-review.googlesource.com/2752
Reviewed-by: Mike Klein <mtklein@chromium.org>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
c8dd6bc3e7a4b01c848ba15b808ea6ffdf249b06 28-Sep-2016 Mike Klein <mtklein@chromium.org> Rearrange SkRasterPipeline scanline tail handling.

We used to step at a 4-pixel stride as long as possible, then run up to 3 times, one pixel at a time. Now replace those 1-at-a-time runs with a single tail stamp if there are 1-3 remaining pixels.

This style is simply more efficient: e.g. we'll blend and lerp once for 3 pixels instead of 3 times. This should make short blits significantly more efficient. It's also more future-oriented... AVX+ on Intel and SVE on ARM support masked loads and stores, so we can do the entire tail in one direct step.

This also makes it possible to re-arrange the code a bit to encapsulate each stage better. I think generally this code reads more clearly than the old code, but YMMV. I've arranged things so you write one function, but it's compiled into two specializations, one for tail=0 (Body) and one for tail>0 (Tail). It's pretty tidy.

For now I've just burned a register to pass around tail. It's 2 bits now, maybe soon 3 with AVX, and capped at 4 for even the craziest new toys, so there are plenty of places we can pack it if we want to get clever.

BUG=skia:

GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2717

Change-Id: I45852a3e5d4c5b5e9315302c46601aee0d32265f
Reviewed-on: https://skia-review.googlesource.com/2717
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
1f4a874addd7c039fb8b434181040cd6a8a35339 27-Sep-2016 Mike Klein <mtklein@chromium.org> SkRasterPipeline: add last() and docs.

Today if you use the simple SK_RASTER_STAGE interface to build a pipeline, each stage you add calls into a next stage. The last stage you add calls into a special backstop stage JustReturn that, well, just returns, ending the pipeline.

This adds last(), which cuts that last stage off the pipeline. Instead, the stage you add using last() returns directly, ending the pipeline itself without jumping into JustReturn.

This reduces the overhead of using the pipelined version of SkRasterPipelineBench from ~25% to ~20% on my desktop.

Also, add docs.

BUG=skia:

GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2713

Change-Id: I11469378e2765c6e34db52eb3eef648d6612da3f
Reviewed-on: https://skia-review.googlesource.com/2713
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
/external/skia/src/core/SkRasterPipeline.h
fe2042e60fa7382461a45b1de0a02d345009f468 29-Jul-2016 mtklein <mtklein@chromium.org> SkRasterPipeline: new APIs for fusion

Most visibly this adds a macro SK_RASTER_STAGE that cuts down on the boilerplate of defining a raster pipeline stage function.

Most interestingly, SK_RASTER_STAGE doesn't define a SkRasterPipeline::Fn, but rather a new type EasyFn. This function is always static and inlined, and the details of interacting with the SkRasterPipeline::Stage are taken care of for you: ctx is just passed as a void*, and st->next() is always called. All EasyFns have to do is take care of the meat of the work: update r,g,b, etc. and read and write from their context.

The really neat new feature here is that you can either add EasyFns to a pipeline with the new append() functions, _or_ call them directly yourself. This lets you use the same set of pieces to build either a pipelined version of the function or a custom, fused version. The bench shows this off.

On my desktop, the pipeline version of the bench takes about 25% more time to run than the fused one.

The old approach to creating stages still works fine. I haven't updated SkXfermode.cpp or SkArithmeticMode.cpp because they seemed just as clear using Fn directly as they would have using EasyFn.

If this looks okay to you I will rework the comments in SkRasterPipeline to explain SK_RASTER_STAGE and EasyFn a bit as I've done here in the CL description.

BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2195853002

Review-Url: https://codereview.chromium.org/2195853002
/external/skia/src/core/SkRasterPipeline.h
9a5c47f4effba3b48a9a8c7c144b72b532d06efe 22-Jul-2016 mtklein <mtklein@chromium.org> Add SkRasterPipeline blitter.

This is now pixel-exact with the existing sRGB SW impl as far as I've tested.

BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2146413002
CQ_INCLUDE_TRYBOTS=master.client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot,Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-ASAN-Trybot

Committed: https://skia.googlesource.com/skia/+/3011e337693a9786f62d8de9ac4b239ad6dbdaca
Review-Url: https://codereview.chromium.org/2146413002
/external/skia/src/core/SkRasterPipeline.h
aa29b2732914ad65334540babc945ae8c93f9036 22-Jul-2016 mtklein <mtklein@google.com> Revert of Add SkRasterPipeline blitter. (patchset #18 id:340001 of https://codereview.chromium.org/2146413002/ )

Reason for revert:
Leaking the blitter

https://build.chromium.org/p/client.skia/builders/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-ASAN/builds/7908/steps/test_skia%20on%20Ubuntu/logs/stdio

Original issue's description:
> Add SkRasterPipeline blitter.
>
> This is now pixel-exact with the existing sRGB SW impl as far as I've tested.
>
> BUG=skia:
> GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2146413002
> CQ_INCLUDE_TRYBOTS=master.client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot
>
> Committed: https://skia.googlesource.com/skia/+/3011e337693a9786f62d8de9ac4b239ad6dbdaca

TBR=reed@google.com,mtklein@chromium.org
# Skipping CQ checks because original CL landed less than 1 days ago.
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=skia:

Review-Url: https://codereview.chromium.org/2178523002
/external/skia/src/core/SkRasterPipeline.h
3011e337693a9786f62d8de9ac4b239ad6dbdaca 22-Jul-2016 mtklein <mtklein@chromium.org> Add SkRasterPipeline blitter.

This is now pixel-exact with the existing sRGB SW impl as far as I've tested.

BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2146413002
CQ_INCLUDE_TRYBOTS=master.client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot

Review-Url: https://codereview.chromium.org/2146413002
/external/skia/src/core/SkRasterPipeline.h
0abddf7bb7f77b1ff6a48efc9d1eafd053d975d2 13-Jul-2016 mtklein <mtklein@chromium.org> SkRasterPipeline: simplify impl and remove need to rewire stages

This builds the stages correctly wired from the get-go. With a little clever
setup, we can also design around the previous error cases like having no stages
or pipelines that call st->next() off the end.

BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2149443002

Review-Url: https://codereview.chromium.org/2149443002
/external/skia/src/core/SkRasterPipeline.h
281b33fdd909ee3f43192cdf950ce00e3df62407 13-Jul-2016 mtklein <mtklein@chromium.org> SkRasterPipeline preliminaries

Re-uploading to see if I can get a CL number < 2^31.
patch from issue 2147533002 at patchset 240001 (http://crrev.com/2147533002#ps240001)

Already reviewed at the other crrev link.
TBR=

BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2147533002
CQ_INCLUDE_TRYBOTS=client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot

Review-Url: https://codereview.chromium.org/2144573004
/external/skia/src/core/SkRasterPipeline.h