support 64-bit gather()

This splits 64-bit PixelFormats into two 32-bit parts and gathers both
independently.  E.g.

    F16 = {HALF, 16,16,16,16,  0,16,32,48}
  ~> lo = {HALF, 16,16, 0, 0,  0,16,32,32}
  ~> hi = {HALF,  0, 0,16,16, 32,32, 0,16}

The logic at the end merges the channels we gather from each part.

This all does strongly assume no channel straddles lo/hi, which we
assert.  We'd need to get more clever to handle something like
20-20-20-4.  I'm working on load() and store() now, and they'll need
this same format assumption.

Since I've so far only added support for gather(), I've introduced a
little temporary hack in SkImageShader to let it work just to demo this
all.  This hack will go away when I add support for load and store.

Change-Id: Ic4cfda7922f2e51bb7698adedf6f655de43da630
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/303320
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
2 files changed