• Port radial gradient shader to be a brush primitive.

    This is mostly a straightforward conversion, with a couple of
    interesting notes:
    
    * The previous radial gradient shader was missing a transform
      implementation so would never have worked properly with
      rotation and/or perspective.
    * We didn't (and still don't) detect if a radial gradient is
      opaque - it's always assumed transparent. So even though
      it can now opt in to segments (and save clip mask generation
      time), the inner segments will still be in the alpha pass.
      We should fix this!
    * Previously, we used to append the gradient stops directly
      after the primitive information in the main GPU cache handle.
      Now, there is a separate GPU cache handle for the stops. This
      is quite a bit more efficient in the GPU cache, since the
      size of the stops array is large, and a power of 2, it now
      fits exactly into a GPU cache slab, and allows the main
      primitive data to be allocated in a smaller row.
    gw3583 committed Feb 18, 2018