generalize skvm pixel unpacking

Add a PixelFormat struct and use it to load/gather_unorm().  This handles
loading all pixel formats that are unorm and can fit in 32 bits, with
float and larger formats to follow.  That means this adds SkVMBlitter
support for reading A8, G8, 4444, R8G8, A16_unorm, and R16G16_unorm.

Next step will do the same for stores, allowing arbitrary destinations.

Change-Id: Iabbf6171ee6d5abb44cf131eda6647980767c396
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/302252
Commit-Queue: Mike Klein <mtklein@google.com>
Commit-Queue: Mike Reed <reed@google.com>
Auto-Submit: Mike Klein <mtklein@google.com>
Reviewed-by: Mike Reed <reed@google.com>
4 files changed