In hindsight, drawing box-shadows as a picture was not a good abstraction. Instead, we now treat them as a simple clip source that writes to the primitive clip mask, and is applied to the box-shadow primitive which is just a solid rectangle. This has a number of benefits: * The code for inset box-shadows is significantly simpler. * We remove two shaders (brush_picture and brush_mask) completely. * We get better batching, since box-shadows are just a solid rect + clip mask. * When we start to cache clip masks, box-shadows will gain this automatically. * Both outset and inset box-shadows now correctly use segments, which makes inset shadows significantly faster than previously. * Since the code is abstracted from Picture, fixing up how we handle sub-pixel blur radii etc is easier. * This is not done in this PR, but is much simpler to do than it would have been previously. Overview of specific changes: * Remove PictureKind::BoxShadow. * Add ClipMaskSource::BoxShadow. * Use segment rendering to minimize clip mask allocated size and pixels for all box-shadows. * Remove brush_picture and brush_mask_rounded_rect shader. * Remove scale_factor from blur task - no longer needed. * This makes possible some future work to fix up existing drop-shadow bugs. * Add cs_clip_box_shadow shader. Can probably be unified with cs_clip_image quite easily. * (Initial) support for local-space clip mask generation. Needed for future tasks related to rasterizing animated stacking contexts.