summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2014-09-30 10:22:41 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2014-09-30 13:57:05 +0100
commit167561f2823767058e2be3a26131b5f820b35c35 (patch)
tree690ef71b1b1f1a5c7ec02b66cd7693c956f52585
parentff23afd5f26e46e9b3c1fbfa31b2809f4329c4f0 (diff)
downloadcairo-167561f2823767058e2be3a26131b5f820b35c35.tar.gz
tor: Review full-row walker
When updating the quorem between cells, we would lose the overflow increment as it was only applied locally and not preserved by updating the quorem. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
-rw-r--r--src/cairo-tor-scan-converter.c86
-rw-r--r--test/reference/aliasing.argb32.ref.pngbin106073 -> 104193 bytes
-rw-r--r--test/reference/aliasing.rgb24.ref.pngbin106073 -> 104193 bytes
-rw-r--r--test/reference/arc-direction.argb32.ref.pngbin6491 -> 6473 bytes
-rw-r--r--test/reference/arc-direction.rgb24.ref.pngbin6491 -> 6473 bytes
-rw-r--r--test/reference/big-little-triangle.argb32.ref.png (renamed from test/reference/big-little-triangle.ref.png)bin409 -> 409 bytes
-rw-r--r--test/reference/big-little-triangle.rgb24.ref.pngbin329 -> 331 bytes
-rw-r--r--test/reference/bug-extents.argb32.ref.pngbin9257 -> 9264 bytes
-rw-r--r--test/reference/bug-extents.rgb24.ref.pngbin9257 -> 9264 bytes
-rw-r--r--test/reference/bug-spline.argb32.ref.pngbin5462 -> 5490 bytes
-rw-r--r--test/reference/bug-spline.rgb24.ref.pngbin5462 -> 5490 bytes
-rw-r--r--test/reference/caps-joins-alpha.argb32.ref.pngbin2479 -> 2482 bytes
-rw-r--r--test/reference/caps-joins-alpha.rgb24.ref.pngbin2479 -> 2482 bytes
-rw-r--r--test/reference/clear.argb32.ref.png (renamed from test/reference/clear.ref.png)bin692 -> 692 bytes
-rw-r--r--test/reference/clear.rgb24.ref.pngbin0 -> 621 bytes
-rw-r--r--test/reference/clip-disjoint-quad.argb32.ref.pngbin1643 -> 1642 bytes
-rw-r--r--test/reference/clip-disjoint-quad.rgb24.ref.pngbin1643 -> 1642 bytes
-rw-r--r--test/reference/clip-disjoint.argb32.ref.pngbin5465 -> 5464 bytes
-rw-r--r--test/reference/clip-disjoint.rgb24.ref.pngbin5465 -> 5464 bytes
-rw-r--r--test/reference/clip-fill-eo-unbounded.ref.pngbin4084 -> 4076 bytes
-rw-r--r--test/reference/clip-fill-nz-unbounded.ref.pngbin4084 -> 4076 bytes
-rw-r--r--test/reference/clip-fill-rule.argb32.ref.png (renamed from test/reference/clip-fill-rule.ref.png)bin437 -> 437 bytes
-rw-r--r--test/reference/clip-fill-rule.rgb24.ref.pngbin0 -> 388 bytes
-rw-r--r--test/reference/clip-group-shapes-circles.argb32.ref.pngbin1526 -> 1533 bytes
-rw-r--r--test/reference/clip-group-shapes-circles.rgb24.ref.pngbin1526 -> 1533 bytes
-rw-r--r--test/reference/clip-intersect.argb32.ref.pngbin220 -> 223 bytes
-rw-r--r--test/reference/clip-intersect.rgb24.ref.pngbin220 -> 223 bytes
-rw-r--r--test/reference/clip-operator.argb32.ref.pngbin0 -> 8685 bytes
-rw-r--r--test/reference/clip-operator.rgb24.ref.pngbin0 -> 3458 bytes
-rw-r--r--test/reference/clip-shape.argb32.ref.pngbin2945 -> 2923 bytes
-rw-r--r--test/reference/clip-shape.rgb24.ref.pngbin2945 -> 2923 bytes
-rw-r--r--test/reference/clip-stroke-unbounded.argb32.ref.pngbin4105 -> 0 bytes
-rw-r--r--test/reference/clip-stroke-unbounded.ref.pngbin4127 -> 4104 bytes
-rw-r--r--test/reference/clip-stroke-unbounded.rgb24.ref.pngbin3517 -> 0 bytes
-rw-r--r--test/reference/clip-twice.ref.pngbin1344 -> 1357 bytes
-rw-r--r--test/reference/degenerate-arc.argb32.ref.pngbin639 -> 646 bytes
-rw-r--r--test/reference/degenerate-arc.rgb24.ref.pngbin639 -> 646 bytes
-rw-r--r--test/reference/fill-alpha-pattern.argb32.ref.pngbin3381 -> 3489 bytes
-rw-r--r--test/reference/fill-alpha-pattern.rgb24.ref.pngbin3381 -> 3489 bytes
-rw-r--r--test/reference/fill-alpha.argb32.ref.pngbin2815 -> 2815 bytes
-rw-r--r--test/reference/fill-alpha.rgb24.ref.pngbin2815 -> 2815 bytes
-rw-r--r--test/reference/fill-degenerate-sort-order.ref.pngbin2410 -> 2414 bytes
-rw-r--r--test/reference/fill-rule.argb32.ref.png (renamed from test/reference/fill-rule.ref.png)bin2086 -> 2086 bytes
-rw-r--r--test/reference/fill-rule.rgb24.ref.pngbin0 -> 1797 bytes
-rw-r--r--test/reference/ft-text-vertical-layout-type1.argb32.ref.pngbin3084 -> 3075 bytes
-rw-r--r--test/reference/ft-text-vertical-layout-type1.rgb24.ref.pngbin3084 -> 3075 bytes
-rw-r--r--test/reference/ft-text-vertical-layout-type3.argb32.ref.pngbin3610 -> 3609 bytes
-rw-r--r--test/reference/ft-text-vertical-layout-type3.rgb24.ref.pngbin3610 -> 3609 bytes
-rw-r--r--test/reference/halo-transform.argb32.ref.pngbin15231 -> 15234 bytes
-rw-r--r--test/reference/halo-transform.rgb24.ref.pngbin15231 -> 15234 bytes
-rw-r--r--test/reference/halo.argb32.ref.pngbin8666 -> 8621 bytes
-rw-r--r--test/reference/halo.rgb24.ref.pngbin8666 -> 8621 bytes
-rw-r--r--test/reference/hatchings.argb32.ref.pngbin91041 -> 90640 bytes
-rw-r--r--test/reference/hatchings.rgb24.ref.pngbin91041 -> 90640 bytes
-rw-r--r--test/reference/inverted-clip.rgb24.ref.pngbin1333 -> 1323 bytes
-rw-r--r--test/reference/leaky-dashed-stroke.argb32.ref.pngbin9286 -> 9286 bytes
-rw-r--r--test/reference/leaky-dashed-stroke.rgb24.ref.pngbin9286 -> 9286 bytes
-rw-r--r--test/reference/line-width-large-overlap-rotated.argb32.ref.pngbin436 -> 439 bytes
-rw-r--r--test/reference/line-width-large-overlap-rotated.rgb24.ref.pngbin436 -> 439 bytes
-rw-r--r--test/reference/line-width-overlap-rotated.argb32.ref.pngbin716 -> 722 bytes
-rw-r--r--test/reference/line-width-overlap-rotated.rgb24.ref.pngbin716 -> 722 bytes
-rw-r--r--test/reference/linear-gradient-subset.argb32.ref.pngbin812 -> 813 bytes
-rw-r--r--test/reference/linear-gradient-subset.rgb24.ref.pngbin812 -> 813 bytes
-rw-r--r--test/reference/linear-gradient.argb32.ref.pngbin960 -> 959 bytes
-rw-r--r--test/reference/linear-gradient.rgb24.ref.pngbin960 -> 959 bytes
-rw-r--r--test/reference/mask-alpha.ref.pngbin644 -> 642 bytes
-rw-r--r--test/reference/mask.argb32.ref.pngbin0 -> 8681 bytes
-rw-r--r--test/reference/mask.ref.pngbin8565 -> 0 bytes
-rw-r--r--test/reference/mask.rgb24.ref.pngbin0 -> 7215 bytes
-rw-r--r--test/reference/operator-alpha.argb32.ref.png (renamed from test/reference/operator-alpha.ref.png)bin280 -> 280 bytes
-rw-r--r--test/reference/operator-alpha.rgb24.ref.pngbin0 -> 205 bytes
-rw-r--r--test/reference/operator-clear.argb32.ref.pngbin1068 -> 1067 bytes
-rw-r--r--test/reference/operator-clear.ref.pngbin1071 -> 0 bytes
-rw-r--r--test/reference/operator-clear.rgb24.ref.pngbin0 -> 940 bytes
-rw-r--r--test/reference/operator-source.argb32.ref.pngbin0 -> 5626 bytes
-rw-r--r--test/reference/operator-source.ref.pngbin5614 -> 0 bytes
-rw-r--r--test/reference/operator-source.rgb24.ref.pngbin0 -> 4026 bytes
-rw-r--r--test/reference/operator.argb32.ref.png (renamed from test/reference/operator.ref.png)bin238 -> 238 bytes
-rw-r--r--test/reference/operator.rgb24.ref.pngbin0 -> 189 bytes
-rw-r--r--test/reference/over-above-source.argb32.ref.png (renamed from test/reference/over-above-source.ref.png)bin557 -> 557 bytes
-rw-r--r--test/reference/over-above-source.rgb24.ref.pngbin0 -> 459 bytes
-rw-r--r--test/reference/over-around-source.argb32.ref.png (renamed from test/reference/over-around-source.ref.png)bin633 -> 633 bytes
-rw-r--r--test/reference/over-around-source.rgb24.ref.pngbin0 -> 504 bytes
-rw-r--r--test/reference/over-below-source.argb32.ref.png (renamed from test/reference/over-below-source.ref.png)bin447 -> 447 bytes
-rw-r--r--test/reference/over-below-source.rgb24.ref.pngbin0 -> 389 bytes
-rw-r--r--test/reference/over-between-source.argb32.ref.png (renamed from test/reference/over-between-source.ref.png)bin607 -> 607 bytes
-rw-r--r--test/reference/over-between-source.rgb24.ref.pngbin0 -> 482 bytes
-rw-r--r--test/reference/path-append.argb32.ref.pngbin6297 -> 6309 bytes
-rw-r--r--test/reference/path-append.rgb24.ref.pngbin6297 -> 6309 bytes
-rw-r--r--test/reference/push-group-color.argb32.ref.pngbin0 -> 2976 bytes
-rw-r--r--test/reference/push-group-color.ref.pngbin2961 -> 0 bytes
-rw-r--r--test/reference/push-group-color.rgb24.ref.pngbin0 -> 2976 bytes
-rw-r--r--test/reference/push-group.argb32.ref.pngbin3097 -> 3116 bytes
-rw-r--r--test/reference/push-group.ref.pngbin3062 -> 0 bytes
-rw-r--r--test/reference/push-group.rgb24.ref.pngbin0 -> 2929 bytes
-rw-r--r--test/reference/random-clip.argb32.ref.pngbin525539 -> 525469 bytes
-rw-r--r--test/reference/random-clip.rgb24.ref.pngbin525539 -> 525469 bytes
-rw-r--r--test/reference/random-intersections-curves-eo.argb32.ref.pngbin244655 -> 244656 bytes
-rw-r--r--test/reference/random-intersections-curves-eo.rgb24.ref.pngbin244655 -> 244656 bytes
-rw-r--r--test/reference/random-intersections-curves-nz.argb32.ref.pngbin264447 -> 264449 bytes
-rw-r--r--test/reference/random-intersections-curves-nz.rgb24.ref.pngbin264447 -> 264449 bytes
-rw-r--r--test/reference/random-intersections-eo.argb32.ref.pngbin135591 -> 135556 bytes
-rw-r--r--test/reference/random-intersections-eo.rgb24.ref.pngbin135591 -> 135556 bytes
-rw-r--r--test/reference/random-intersections-nonzero.argb32.ref.pngbin141598 -> 141582 bytes
-rw-r--r--test/reference/random-intersections-nonzero.rgb24.ref.pngbin141598 -> 141582 bytes
-rw-r--r--test/reference/record2x-fill-alpha.argb32.ref.pngbin5986 -> 6016 bytes
-rw-r--r--test/reference/record2x-fill-alpha.rgb24.ref.pngbin5986 -> 6016 bytes
-rw-r--r--test/reference/rotate-clip.surface-paint.image.argb32.ref.pngbin0 -> 340 bytes
-rw-r--r--test/reference/rotate-clip.surface-paint.image.rgb24.ref.pngbin0 -> 340 bytes
-rw-r--r--test/reference/scale-offset-similar.argb32.ref.pngbin9847 -> 9779 bytes
-rw-r--r--test/reference/scale-offset-similar.rgb24.ref.pngbin9847 -> 9779 bytes
-rw-r--r--test/reference/smask-fill.argb32.ref.pngbin1201 -> 1196 bytes
-rw-r--r--test/reference/smask-fill.rgb24.ref.pngbin1201 -> 1196 bytes
-rw-r--r--test/reference/smask-stroke.argb32.ref.pngbin1707 -> 1700 bytes
-rw-r--r--test/reference/smask-stroke.rgb24.ref.pngbin1707 -> 1700 bytes
-rw-r--r--test/reference/smask.argb32.ref.pngbin3436 -> 3422 bytes
-rw-r--r--test/reference/smask.rgb24.ref.pngbin3436 -> 3422 bytes
-rw-r--r--test/reference/surface-pattern-operator.argb32.ref.pngbin0 -> 5107 bytes
-rw-r--r--test/reference/surface-pattern-operator.ref.pngbin5217 -> 0 bytes
-rw-r--r--test/reference/surface-pattern-operator.rgb24.ref.pngbin0 -> 1926 bytes
-rw-r--r--test/reference/text-rotate.argb32.ref.pngbin16518 -> 16307 bytes
-rw-r--r--test/reference/text-rotate.rgb24.ref.pngbin16518 -> 16307 bytes
-rw-r--r--test/reference/tiger.argb32.ref.pngbin94714 -> 94790 bytes
-rw-r--r--test/reference/tiger.rgb24.ref.pngbin94714 -> 94790 bytes
-rw-r--r--test/reference/trap-clip.argb32.ref.pngbin0 -> 5972 bytes
-rw-r--r--test/reference/trap-clip.ref.pngbin5826 -> 0 bytes
-rw-r--r--test/reference/trap-clip.rgb24.ref.pngbin0 -> 5462 bytes
-rw-r--r--test/reference/unbounded-operator.argb32.ref.pngbin2763 -> 2755 bytes
-rw-r--r--test/reference/unbounded-operator.ref.pngbin2781 -> 0 bytes
-rw-r--r--test/reference/unbounded-operator.rgb24.ref.pngbin0 -> 1328 bytes
-rw-r--r--test/reference/user-font-proxy.argb32.ref.pngbin16971 -> 16981 bytes
-rw-r--r--test/reference/user-font-proxy.rgb24.ref.pngbin16971 -> 16981 bytes
-rw-r--r--test/reference/user-font.argb32.ref.pngbin5882 -> 5889 bytes
-rw-r--r--test/reference/user-font.rgb24.ref.pngbin5882 -> 5889 bytes
134 files changed, 34 insertions, 52 deletions
diff --git a/src/cairo-tor-scan-converter.c b/src/cairo-tor-scan-converter.c
index 46473e9a9..1c8979844 100644
--- a/src/cairo-tor-scan-converter.c
+++ b/src/cairo-tor-scan-converter.c
@@ -458,21 +458,6 @@ struct glitter_scan_converter {
grid_scaled_y_t ymin, ymax;
};
-/* Compute the floored division a/b. Assumes / and % perform symmetric
- * division. */
-inline static struct quorem
-floored_divrem(int a, int b)
-{
- struct quorem qr;
- qr.quo = a/b;
- qr.rem = a%b;
- if ((a^b)<0 && qr.rem) {
- qr.quo -= 1;
- qr.rem += b;
- }
- return qr;
-}
-
static struct _pool_chunk *
_pool_chunk_init(
struct _pool_chunk *p,
@@ -804,21 +789,12 @@ cell_list_render_edge(struct cell_list *cells,
struct edge *edge,
int sign)
{
- grid_scaled_y_t y1, y2, dy;
- grid_scaled_x_t dx;
- int ix1, ix2;
grid_scaled_x_t fx1, fx2;
+ int ix1, ix2;
- int x1, x2;
-
- /* XXX review for loss of precision from dropping x.rem in our stepper */
-
- x1 = edge->cell;
+ GRID_X_TO_INT_FRAC(edge->cell, ix1, fx1);
full_step (edge);
- x2 = edge->cell;
-
- GRID_X_TO_INT_FRAC(x1, ix1, fx1);
- GRID_X_TO_INT_FRAC(x2, ix2, fx2);
+ GRID_X_TO_INT_FRAC(edge->cell, ix2, fx2);
/* Edge is entirely within a column? */
if (ix1 == ix2) {
@@ -831,26 +807,31 @@ cell_list_render_edge(struct cell_list *cells,
}
/* Orient the edge left-to-right. */
- dx = x2 - x1;
- if (dx >= 0) {
- y1 = 0;
- y2 = GRID_Y;
- } else {
- int tmp;
- tmp = ix1; ix1 = ix2; ix2 = tmp;
- tmp = fx1; fx1 = fx2; fx2 = tmp;
- dx = -dx;
- sign = -sign;
- y1 = GRID_Y;
- y2 = 0;
+ if (ix2 < ix1) {
+ int t;
+
+ t = ix1;
+ ix1 = ix2;
+ ix2 = t;
+
+ t = fx1;
+ fx1 = fx2;
+ fx2 = t;
}
- dy = y2 - y1;
/* Add coverage for all pixels [ix1,ix2] on this row crossed
* by the edge. */
{
struct cell_pair pair;
- struct quorem y = floored_divrem((GRID_X - fx1)*dy, dx);
+ struct quorem y;
+ int32_t dx;
+ int y_last;
+
+ dx = (ix2 - ix1) * GRID_X + (fx2 - fx1);
+ assert (dx > 0);
+
+ y.quo = (GRID_X - fx1) * GRID_Y / dx;
+ y.rem = (GRID_X - fx1) * GRID_Y % dx;
/* When rendering a previous edge on the active list we may
* advance the cell list cursor past the leftmost pixel of the
@@ -875,26 +856,27 @@ cell_list_render_edge(struct cell_list *cells,
pair = cell_list_find_pair(cells, ix1, ix1+1);
pair.cell1->uncovered_area += sign*y.quo*(GRID_X + fx1);
pair.cell1->covered_height += sign*y.quo;
- y.quo += y1;
+ y_last = y.quo;
if (ix1+1 < ix2) {
- struct quorem dydx_full = floored_divrem(GRID_X*dy, dx);
struct cell *cell = pair.cell2;
+ struct quorem dydx_full;
+
+ dydx_full.quo = GRID_Y * GRID_X / dx;
+ dydx_full.rem = GRID_Y * GRID_X % dx;
++ix1;
do {
- grid_scaled_y_t y_skip = dydx_full.quo;
+ y.quo += dydx_full.quo;
y.rem += dydx_full.rem;
if (y.rem >= dx) {
- ++y_skip;
+ y.quo++;
y.rem -= dx;
}
- y.quo += y_skip;
-
- y_skip *= sign;
- cell->uncovered_area += y_skip*GRID_X;
- cell->covered_height += y_skip;
+ cell->uncovered_area += sign*(y.quo - y_last)*GRID_X;
+ cell->covered_height += sign*(y.quo - y_last);
+ y_last = y.quo;
++ix1;
cell = cell_list_find(cells, ix1);
@@ -902,8 +884,8 @@ cell_list_render_edge(struct cell_list *cells,
pair.cell2 = cell;
}
- pair.cell2->uncovered_area += sign*(y2 - y.quo)*fx2;
- pair.cell2->covered_height += sign*(y2 - y.quo);
+ pair.cell2->uncovered_area += sign*(GRID_Y - y_last)*fx2;
+ pair.cell2->covered_height += sign*(GRID_Y - y_last);
}
}
diff --git a/test/reference/aliasing.argb32.ref.png b/test/reference/aliasing.argb32.ref.png
index 4d3c30371..19659c663 100644
--- a/test/reference/aliasing.argb32.ref.png
+++ b/test/reference/aliasing.argb32.ref.png
Binary files differ
diff --git a/test/reference/aliasing.rgb24.ref.png b/test/reference/aliasing.rgb24.ref.png
index 4d3c30371..19659c663 100644
--- a/test/reference/aliasing.rgb24.ref.png
+++ b/test/reference/aliasing.rgb24.ref.png
Binary files differ
diff --git a/test/reference/arc-direction.argb32.ref.png b/test/reference/arc-direction.argb32.ref.png
index fa90b89de..a1c8d74bc 100644
--- a/test/reference/arc-direction.argb32.ref.png
+++ b/test/reference/arc-direction.argb32.ref.png
Binary files differ
diff --git a/test/reference/arc-direction.rgb24.ref.png b/test/reference/arc-direction.rgb24.ref.png
index fa90b89de..a1c8d74bc 100644
--- a/test/reference/arc-direction.rgb24.ref.png
+++ b/test/reference/arc-direction.rgb24.ref.png
Binary files differ
diff --git a/test/reference/big-little-triangle.ref.png b/test/reference/big-little-triangle.argb32.ref.png
index 1c2522fa6..1c2522fa6 100644
--- a/test/reference/big-little-triangle.ref.png
+++ b/test/reference/big-little-triangle.argb32.ref.png
Binary files differ
diff --git a/test/reference/big-little-triangle.rgb24.ref.png b/test/reference/big-little-triangle.rgb24.ref.png
index f22a92b51..463c44e12 100644
--- a/test/reference/big-little-triangle.rgb24.ref.png
+++ b/test/reference/big-little-triangle.rgb24.ref.png
Binary files differ
diff --git a/test/reference/bug-extents.argb32.ref.png b/test/reference/bug-extents.argb32.ref.png
index 00a446635..078160f2d 100644
--- a/test/reference/bug-extents.argb32.ref.png
+++ b/test/reference/bug-extents.argb32.ref.png
Binary files differ
diff --git a/test/reference/bug-extents.rgb24.ref.png b/test/reference/bug-extents.rgb24.ref.png
index 00a446635..078160f2d 100644
--- a/test/reference/bug-extents.rgb24.ref.png
+++ b/test/reference/bug-extents.rgb24.ref.png
Binary files differ
diff --git a/test/reference/bug-spline.argb32.ref.png b/test/reference/bug-spline.argb32.ref.png
index ff730a2e7..f0a318582 100644
--- a/test/reference/bug-spline.argb32.ref.png
+++ b/test/reference/bug-spline.argb32.ref.png
Binary files differ
diff --git a/test/reference/bug-spline.rgb24.ref.png b/test/reference/bug-spline.rgb24.ref.png
index ff730a2e7..f0a318582 100644
--- a/test/reference/bug-spline.rgb24.ref.png
+++ b/test/reference/bug-spline.rgb24.ref.png
Binary files differ
diff --git a/test/reference/caps-joins-alpha.argb32.ref.png b/test/reference/caps-joins-alpha.argb32.ref.png
index d20fc2017..b440abcb8 100644
--- a/test/reference/caps-joins-alpha.argb32.ref.png
+++ b/test/reference/caps-joins-alpha.argb32.ref.png
Binary files differ
diff --git a/test/reference/caps-joins-alpha.rgb24.ref.png b/test/reference/caps-joins-alpha.rgb24.ref.png
index d20fc2017..b440abcb8 100644
--- a/test/reference/caps-joins-alpha.rgb24.ref.png
+++ b/test/reference/caps-joins-alpha.rgb24.ref.png
Binary files differ
diff --git a/test/reference/clear.ref.png b/test/reference/clear.argb32.ref.png
index 102ac3dd1..102ac3dd1 100644
--- a/test/reference/clear.ref.png
+++ b/test/reference/clear.argb32.ref.png
Binary files differ
diff --git a/test/reference/clear.rgb24.ref.png b/test/reference/clear.rgb24.ref.png
new file mode 100644
index 000000000..8e6140d3c
--- /dev/null
+++ b/test/reference/clear.rgb24.ref.png
Binary files differ
diff --git a/test/reference/clip-disjoint-quad.argb32.ref.png b/test/reference/clip-disjoint-quad.argb32.ref.png
index a6fbe5a5d..25fbf0b1c 100644
--- a/test/reference/clip-disjoint-quad.argb32.ref.png
+++ b/test/reference/clip-disjoint-quad.argb32.ref.png
Binary files differ
diff --git a/test/reference/clip-disjoint-quad.rgb24.ref.png b/test/reference/clip-disjoint-quad.rgb24.ref.png
index a6fbe5a5d..25fbf0b1c 100644
--- a/test/reference/clip-disjoint-quad.rgb24.ref.png
+++ b/test/reference/clip-disjoint-quad.rgb24.ref.png
Binary files differ
diff --git a/test/reference/clip-disjoint.argb32.ref.png b/test/reference/clip-disjoint.argb32.ref.png
index 035f8afb1..15b338cb2 100644
--- a/test/reference/clip-disjoint.argb32.ref.png
+++ b/test/reference/clip-disjoint.argb32.ref.png
Binary files differ
diff --git a/test/reference/clip-disjoint.rgb24.ref.png b/test/reference/clip-disjoint.rgb24.ref.png
index 035f8afb1..15b338cb2 100644
--- a/test/reference/clip-disjoint.rgb24.ref.png
+++ b/test/reference/clip-disjoint.rgb24.ref.png
Binary files differ
diff --git a/test/reference/clip-fill-eo-unbounded.ref.png b/test/reference/clip-fill-eo-unbounded.ref.png
index 4e5521631..4bb0662b1 100644
--- a/test/reference/clip-fill-eo-unbounded.ref.png
+++ b/test/reference/clip-fill-eo-unbounded.ref.png
Binary files differ
diff --git a/test/reference/clip-fill-nz-unbounded.ref.png b/test/reference/clip-fill-nz-unbounded.ref.png
index 4e5521631..4bb0662b1 100644
--- a/test/reference/clip-fill-nz-unbounded.ref.png
+++ b/test/reference/clip-fill-nz-unbounded.ref.png
Binary files differ
diff --git a/test/reference/clip-fill-rule.ref.png b/test/reference/clip-fill-rule.argb32.ref.png
index cb23ea61d..cb23ea61d 100644
--- a/test/reference/clip-fill-rule.ref.png
+++ b/test/reference/clip-fill-rule.argb32.ref.png
Binary files differ
diff --git a/test/reference/clip-fill-rule.rgb24.ref.png b/test/reference/clip-fill-rule.rgb24.ref.png
new file mode 100644
index 000000000..2c836c548
--- /dev/null
+++ b/test/reference/clip-fill-rule.rgb24.ref.png
Binary files differ
diff --git a/test/reference/clip-group-shapes-circles.argb32.ref.png b/test/reference/clip-group-shapes-circles.argb32.ref.png
index a4a8dbb2f..ab1217506 100644
--- a/test/reference/clip-group-shapes-circles.argb32.ref.png
+++ b/test/reference/clip-group-shapes-circles.argb32.ref.png
Binary files differ
diff --git a/test/reference/clip-group-shapes-circles.rgb24.ref.png b/test/reference/clip-group-shapes-circles.rgb24.ref.png
index a4a8dbb2f..ab1217506 100644
--- a/test/reference/clip-group-shapes-circles.rgb24.ref.png
+++ b/test/reference/clip-group-shapes-circles.rgb24.ref.png
Binary files differ
diff --git a/test/reference/clip-intersect.argb32.ref.png b/test/reference/clip-intersect.argb32.ref.png
index eb4105c72..f299f70a3 100644
--- a/test/reference/clip-intersect.argb32.ref.png
+++ b/test/reference/clip-intersect.argb32.ref.png
Binary files differ
diff --git a/test/reference/clip-intersect.rgb24.ref.png b/test/reference/clip-intersect.rgb24.ref.png
index eb4105c72..f299f70a3 100644
--- a/test/reference/clip-intersect.rgb24.ref.png
+++ b/test/reference/clip-intersect.rgb24.ref.png
Binary files differ
diff --git a/test/reference/clip-operator.argb32.ref.png b/test/reference/clip-operator.argb32.ref.png
new file mode 100644
index 000000000..86344ff0f
--- /dev/null
+++ b/test/reference/clip-operator.argb32.ref.png
Binary files differ
diff --git a/test/reference/clip-operator.rgb24.ref.png b/test/reference/clip-operator.rgb24.ref.png
new file mode 100644
index 000000000..105c7f5f5
--- /dev/null
+++ b/test/reference/clip-operator.rgb24.ref.png
Binary files differ
diff --git a/test/reference/clip-shape.argb32.ref.png b/test/reference/clip-shape.argb32.ref.png
index da409fcaa..936600313 100644
--- a/test/reference/clip-shape.argb32.ref.png
+++ b/test/reference/clip-shape.argb32.ref.png
Binary files differ
diff --git a/test/reference/clip-shape.rgb24.ref.png b/test/reference/clip-shape.rgb24.ref.png
index da409fcaa..936600313 100644
--- a/test/reference/clip-shape.rgb24.ref.png
+++ b/test/reference/clip-shape.rgb24.ref.png
Binary files differ
diff --git a/test/reference/clip-stroke-unbounded.argb32.ref.png b/test/reference/clip-stroke-unbounded.argb32.ref.png
deleted file mode 100644
index 800475e8a..000000000
--- a/test/reference/clip-stroke-unbounded.argb32.ref.png
+++ /dev/null
Binary files differ
diff --git a/test/reference/clip-stroke-unbounded.ref.png b/test/reference/clip-stroke-unbounded.ref.png
index 316cc3618..2dabb0c83 100644
--- a/test/reference/clip-stroke-unbounded.ref.png
+++ b/test/reference/clip-stroke-unbounded.ref.png
Binary files differ
diff --git a/test/reference/clip-stroke-unbounded.rgb24.ref.png b/test/reference/clip-stroke-unbounded.rgb24.ref.png
deleted file mode 100644
index 0252b252e..000000000
--- a/test/reference/clip-stroke-unbounded.rgb24.ref.png
+++ /dev/null
Binary files differ
diff --git a/test/reference/clip-twice.ref.png b/test/reference/clip-twice.ref.png
index 49ab9e566..c3644a059 100644
--- a/test/reference/clip-twice.ref.png
+++ b/test/reference/clip-twice.ref.png
Binary files differ
diff --git a/test/reference/degenerate-arc.argb32.ref.png b/test/reference/degenerate-arc.argb32.ref.png
index 6980a90a7..1687beba4 100644
--- a/test/reference/degenerate-arc.argb32.ref.png
+++ b/test/reference/degenerate-arc.argb32.ref.png
Binary files differ
diff --git a/test/reference/degenerate-arc.rgb24.ref.png b/test/reference/degenerate-arc.rgb24.ref.png
index 6980a90a7..1687beba4 100644
--- a/test/reference/degenerate-arc.rgb24.ref.png
+++ b/test/reference/degenerate-arc.rgb24.ref.png
Binary files differ
diff --git a/test/reference/fill-alpha-pattern.argb32.ref.png b/test/reference/fill-alpha-pattern.argb32.ref.png
index 4344f2303..37383ba61 100644
--- a/test/reference/fill-alpha-pattern.argb32.ref.png
+++ b/test/reference/fill-alpha-pattern.argb32.ref.png
Binary files differ
diff --git a/test/reference/fill-alpha-pattern.rgb24.ref.png b/test/reference/fill-alpha-pattern.rgb24.ref.png
index 4344f2303..37383ba61 100644
--- a/test/reference/fill-alpha-pattern.rgb24.ref.png
+++ b/test/reference/fill-alpha-pattern.rgb24.ref.png
Binary files differ
diff --git a/test/reference/fill-alpha.argb32.ref.png b/test/reference/fill-alpha.argb32.ref.png
index 260c961d4..a7c6d9df7 100644
--- a/test/reference/fill-alpha.argb32.ref.png
+++ b/test/reference/fill-alpha.argb32.ref.png
Binary files differ
diff --git a/test/reference/fill-alpha.rgb24.ref.png b/test/reference/fill-alpha.rgb24.ref.png
index 260c961d4..a7c6d9df7 100644
--- a/test/reference/fill-alpha.rgb24.ref.png
+++ b/test/reference/fill-alpha.rgb24.ref.png
Binary files differ
diff --git a/test/reference/fill-degenerate-sort-order.ref.png b/test/reference/fill-degenerate-sort-order.ref.png
index 18940afbd..a06196e87 100644
--- a/test/reference/fill-degenerate-sort-order.ref.png
+++ b/test/reference/fill-degenerate-sort-order.ref.png
Binary files differ
diff --git a/test/reference/fill-rule.ref.png b/test/reference/fill-rule.argb32.ref.png
index 282a211cd..282a211cd 100644
--- a/test/reference/fill-rule.ref.png
+++ b/test/reference/fill-rule.argb32.ref.png
Binary files differ
diff --git a/test/reference/fill-rule.rgb24.ref.png b/test/reference/fill-rule.rgb24.ref.png
new file mode 100644
index 000000000..260376158
--- /dev/null
+++ b/test/reference/fill-rule.rgb24.ref.png
Binary files differ
diff --git a/test/reference/ft-text-vertical-layout-type1.argb32.ref.png b/test/reference/ft-text-vertical-layout-type1.argb32.ref.png
index b2c9db4ff..0f8055f55 100644
--- a/test/reference/ft-text-vertical-layout-type1.argb32.ref.png
+++ b/test/reference/ft-text-vertical-layout-type1.argb32.ref.png
Binary files differ
diff --git a/test/reference/ft-text-vertical-layout-type1.rgb24.ref.png b/test/reference/ft-text-vertical-layout-type1.rgb24.ref.png
index b2c9db4ff..0f8055f55 100644
--- a/test/reference/ft-text-vertical-layout-type1.rgb24.ref.png
+++ b/test/reference/ft-text-vertical-layout-type1.rgb24.ref.png
Binary files differ
diff --git a/test/reference/ft-text-vertical-layout-type3.argb32.ref.png b/test/reference/ft-text-vertical-layout-type3.argb32.ref.png
index ad6ffed7d..5f64d8825 100644
--- a/test/reference/ft-text-vertical-layout-type3.argb32.ref.png
+++ b/test/reference/ft-text-vertical-layout-type3.argb32.ref.png
Binary files differ
diff --git a/test/reference/ft-text-vertical-layout-type3.rgb24.ref.png b/test/reference/ft-text-vertical-layout-type3.rgb24.ref.png
index ad6ffed7d..5f64d8825 100644
--- a/test/reference/ft-text-vertical-layout-type3.rgb24.ref.png
+++ b/test/reference/ft-text-vertical-layout-type3.rgb24.ref.png
Binary files differ
diff --git a/test/reference/halo-transform.argb32.ref.png b/test/reference/halo-transform.argb32.ref.png
index 3f922105f..15dedfe1c 100644
--- a/test/reference/halo-transform.argb32.ref.png
+++ b/test/reference/halo-transform.argb32.ref.png
Binary files differ
diff --git a/test/reference/halo-transform.rgb24.ref.png b/test/reference/halo-transform.rgb24.ref.png
index 3f922105f..15dedfe1c 100644
--- a/test/reference/halo-transform.rgb24.ref.png
+++ b/test/reference/halo-transform.rgb24.ref.png
Binary files differ
diff --git a/test/reference/halo.argb32.ref.png b/test/reference/halo.argb32.ref.png
index 2285e9ce5..947f4e32c 100644
--- a/test/reference/halo.argb32.ref.png
+++ b/test/reference/halo.argb32.ref.png
Binary files differ
diff --git a/test/reference/halo.rgb24.ref.png b/test/reference/halo.rgb24.ref.png
index 2285e9ce5..947f4e32c 100644
--- a/test/reference/halo.rgb24.ref.png
+++ b/test/reference/halo.rgb24.ref.png
Binary files differ
diff --git a/test/reference/hatchings.argb32.ref.png b/test/reference/hatchings.argb32.ref.png
index 8e628335f..ac29cc723 100644
--- a/test/reference/hatchings.argb32.ref.png
+++ b/test/reference/hatchings.argb32.ref.png
Binary files differ
diff --git a/test/reference/hatchings.rgb24.ref.png b/test/reference/hatchings.rgb24.ref.png
index 8e628335f..ac29cc723 100644
--- a/test/reference/hatchings.rgb24.ref.png
+++ b/test/reference/hatchings.rgb24.ref.png
Binary files differ
diff --git a/test/reference/inverted-clip.rgb24.ref.png b/test/reference/inverted-clip.rgb24.ref.png
index 1b93a6b76..582789e75 100644
--- a/test/reference/inverted-clip.rgb24.ref.png
+++ b/test/reference/inverted-clip.rgb24.ref.png
Binary files differ
diff --git a/test/reference/leaky-dashed-stroke.argb32.ref.png b/test/reference/leaky-dashed-stroke.argb32.ref.png
index b864018e4..1b8569244 100644
--- a/test/reference/leaky-dashed-stroke.argb32.ref.png
+++ b/test/reference/leaky-dashed-stroke.argb32.ref.png
Binary files differ
diff --git a/test/reference/leaky-dashed-stroke.rgb24.ref.png b/test/reference/leaky-dashed-stroke.rgb24.ref.png
index b864018e4..1b8569244 100644
--- a/test/reference/leaky-dashed-stroke.rgb24.ref.png
+++ b/test/reference/leaky-dashed-stroke.rgb24.ref.png
Binary files differ
diff --git a/test/reference/line-width-large-overlap-rotated.argb32.ref.png b/test/reference/line-width-large-overlap-rotated.argb32.ref.png
index ed9eabbc0..920e56f64 100644
--- a/test/reference/line-width-large-overlap-rotated.argb32.ref.png
+++ b/test/reference/line-width-large-overlap-rotated.argb32.ref.png
Binary files differ
diff --git a/test/reference/line-width-large-overlap-rotated.rgb24.ref.png b/test/reference/line-width-large-overlap-rotated.rgb24.ref.png
index ed9eabbc0..920e56f64 100644
--- a/test/reference/line-width-large-overlap-rotated.rgb24.ref.png
+++ b/test/reference/line-width-large-overlap-rotated.rgb24.ref.png
Binary files differ
diff --git a/test/reference/line-width-overlap-rotated.argb32.ref.png b/test/reference/line-width-overlap-rotated.argb32.ref.png
index 44c0020c8..7a9572e4f 100644
--- a/test/reference/line-width-overlap-rotated.argb32.ref.png
+++ b/test/reference/line-width-overlap-rotated.argb32.ref.png
Binary files differ
diff --git a/test/reference/line-width-overlap-rotated.rgb24.ref.png b/test/reference/line-width-overlap-rotated.rgb24.ref.png
index 44c0020c8..7a9572e4f 100644
--- a/test/reference/line-width-overlap-rotated.rgb24.ref.png
+++ b/test/reference/line-width-overlap-rotated.rgb24.ref.png
Binary files differ
diff --git a/test/reference/linear-gradient-subset.argb32.ref.png b/test/reference/linear-gradient-subset.argb32.ref.png
index 86f73d7dc..8e95d10f6 100644
--- a/test/reference/linear-gradient-subset.argb32.ref.png
+++ b/test/reference/linear-gradient-subset.argb32.ref.png
Binary files differ
diff --git a/test/reference/linear-gradient-subset.rgb24.ref.png b/test/reference/linear-gradient-subset.rgb24.ref.png
index 86f73d7dc..8e95d10f6 100644
--- a/test/reference/linear-gradient-subset.rgb24.ref.png
+++ b/test/reference/linear-gradient-subset.rgb24.ref.png
Binary files differ
diff --git a/test/reference/linear-gradient.argb32.ref.png b/test/reference/linear-gradient.argb32.ref.png
index 7f23874ac..32c99a4a3 100644
--- a/test/reference/linear-gradient.argb32.ref.png
+++ b/test/reference/linear-gradient.argb32.ref.png
Binary files differ
diff --git a/test/reference/linear-gradient.rgb24.ref.png b/test/reference/linear-gradient.rgb24.ref.png
index 7f23874ac..32c99a4a3 100644
--- a/test/reference/linear-gradient.rgb24.ref.png
+++ b/test/reference/linear-gradient.rgb24.ref.png
Binary files differ
diff --git a/test/reference/mask-alpha.ref.png b/test/reference/mask-alpha.ref.png
index fda6568ad..05db9810e 100644
--- a/test/reference/mask-alpha.ref.png
+++ b/test/reference/mask-alpha.ref.png
Binary files differ
diff --git a/test/reference/mask.argb32.ref.png b/test/reference/mask.argb32.ref.png
new file mode 100644
index 000000000..cf02eaa5e
--- /dev/null
+++ b/test/reference/mask.argb32.ref.png
Binary files differ
diff --git a/test/reference/mask.ref.png b/test/reference/mask.ref.png
deleted file mode 100644
index 2d740d41b..000000000
--- a/test/reference/mask.ref.png
+++ /dev/null
Binary files differ
diff --git a/test/reference/mask.rgb24.ref.png b/test/reference/mask.rgb24.ref.png
new file mode 100644
index 000000000..cb9cc322e
--- /dev/null
+++ b/test/reference/mask.rgb24.ref.png
Binary files differ
diff --git a/test/reference/operator-alpha.ref.png b/test/reference/operator-alpha.argb32.ref.png
index b4f3b71f0..b4f3b71f0 100644
--- a/test/reference/operator-alpha.ref.png
+++ b/test/reference/operator-alpha.argb32.ref.png
Binary files differ
diff --git a/test/reference/operator-alpha.rgb24.ref.png b/test/reference/operator-alpha.rgb24.ref.png
new file mode 100644
index 000000000..bc7be3aeb
--- /dev/null
+++ b/test/reference/operator-alpha.rgb24.ref.png
Binary files differ
diff --git a/test/reference/operator-clear.argb32.ref.png b/test/reference/operator-clear.argb32.ref.png
index 13c637313..dec63f1a3 100644
--- a/test/reference/operator-clear.argb32.ref.png
+++ b/test/reference/operator-clear.argb32.ref.png
Binary files differ
diff --git a/test/reference/operator-clear.ref.png b/test/reference/operator-clear.ref.png
deleted file mode 100644
index 41f63bdb8..000000000
--- a/test/reference/operator-clear.ref.png
+++ /dev/null
Binary files differ
diff --git a/test/reference/operator-clear.rgb24.ref.png b/test/reference/operator-clear.rgb24.ref.png
new file mode 100644
index 000000000..e81459836
--- /dev/null
+++ b/test/reference/operator-clear.rgb24.ref.png
Binary files differ
diff --git a/test/reference/operator-source.argb32.ref.png b/test/reference/operator-source.argb32.ref.png
new file mode 100644
index 000000000..180417c7d
--- /dev/null
+++ b/test/reference/operator-source.argb32.ref.png
Binary files differ
diff --git a/test/reference/operator-source.ref.png b/test/reference/operator-source.ref.png
deleted file mode 100644
index 359f59770..000000000
--- a/test/reference/operator-source.ref.png
+++ /dev/null
Binary files differ
diff --git a/test/reference/operator-source.rgb24.ref.png b/test/reference/operator-source.rgb24.ref.png
new file mode 100644
index 000000000..0d5d0ac0b
--- /dev/null
+++ b/test/reference/operator-source.rgb24.ref.png
Binary files differ
diff --git a/test/reference/operator.ref.png b/test/reference/operator.argb32.ref.png
index 34fce987b..34fce987b 100644
--- a/test/reference/operator.ref.png
+++ b/test/reference/operator.argb32.ref.png
Binary files differ
diff --git a/test/reference/operator.rgb24.ref.png b/test/reference/operator.rgb24.ref.png
new file mode 100644
index 000000000..aa6103df8
--- /dev/null
+++ b/test/reference/operator.rgb24.ref.png
Binary files differ
diff --git a/test/reference/over-above-source.ref.png b/test/reference/over-above-source.argb32.ref.png
index 80167f9f1..80167f9f1 100644
--- a/test/reference/over-above-source.ref.png
+++ b/test/reference/over-above-source.argb32.ref.png
Binary files differ
diff --git a/test/reference/over-above-source.rgb24.ref.png b/test/reference/over-above-source.rgb24.ref.png
new file mode 100644
index 000000000..f7eb6d665
--- /dev/null
+++ b/test/reference/over-above-source.rgb24.ref.png
Binary files differ
diff --git a/test/reference/over-around-source.ref.png b/test/reference/over-around-source.argb32.ref.png
index e16108d54..e16108d54 100644
--- a/test/reference/over-around-source.ref.png
+++ b/test/reference/over-around-source.argb32.ref.png
Binary files differ
diff --git a/test/reference/over-around-source.rgb24.ref.png b/test/reference/over-around-source.rgb24.ref.png
new file mode 100644
index 000000000..8d133ea2c
--- /dev/null
+++ b/test/reference/over-around-source.rgb24.ref.png
Binary files differ
diff --git a/test/reference/over-below-source.ref.png b/test/reference/over-below-source.argb32.ref.png
index 0b55974be..0b55974be 100644
--- a/test/reference/over-below-source.ref.png
+++ b/test/reference/over-below-source.argb32.ref.png
Binary files differ
diff --git a/test/reference/over-below-source.rgb24.ref.png b/test/reference/over-below-source.rgb24.ref.png
new file mode 100644
index 000000000..58bc50d13
--- /dev/null
+++ b/test/reference/over-below-source.rgb24.ref.png
Binary files differ
diff --git a/test/reference/over-between-source.ref.png b/test/reference/over-between-source.argb32.ref.png
index 1055c4d0b..1055c4d0b 100644
--- a/test/reference/over-between-source.ref.png
+++ b/test/reference/over-between-source.argb32.ref.png
Binary files differ
diff --git a/test/reference/over-between-source.rgb24.ref.png b/test/reference/over-between-source.rgb24.ref.png
new file mode 100644
index 000000000..572671422
--- /dev/null
+++ b/test/reference/over-between-source.rgb24.ref.png
Binary files differ
diff --git a/test/reference/path-append.argb32.ref.png b/test/reference/path-append.argb32.ref.png
index 637eaca5b..f6d1a59d1 100644
--- a/test/reference/path-append.argb32.ref.png
+++ b/test/reference/path-append.argb32.ref.png
Binary files differ
diff --git a/test/reference/path-append.rgb24.ref.png b/test/reference/path-append.rgb24.ref.png
index 637eaca5b..f6d1a59d1 100644
--- a/test/reference/path-append.rgb24.ref.png
+++ b/test/reference/path-append.rgb24.ref.png
Binary files differ
diff --git a/test/reference/push-group-color.argb32.ref.png b/test/reference/push-group-color.argb32.ref.png
new file mode 100644
index 000000000..5f5760689
--- /dev/null
+++ b/test/reference/push-group-color.argb32.ref.png
Binary files differ
diff --git a/test/reference/push-group-color.ref.png b/test/reference/push-group-color.ref.png
deleted file mode 100644
index 5438a9dea..000000000
--- a/test/reference/push-group-color.ref.png
+++ /dev/null
Binary files differ
diff --git a/test/reference/push-group-color.rgb24.ref.png b/test/reference/push-group-color.rgb24.ref.png
new file mode 100644
index 000000000..5f5760689
--- /dev/null
+++ b/test/reference/push-group-color.rgb24.ref.png
Binary files differ
diff --git a/test/reference/push-group.argb32.ref.png b/test/reference/push-group.argb32.ref.png
index 355b87e49..ab68c7930 100644
--- a/test/reference/push-group.argb32.ref.png
+++ b/test/reference/push-group.argb32.ref.png
Binary files differ
diff --git a/test/reference/push-group.ref.png b/test/reference/push-group.ref.png
deleted file mode 100644
index 60f5eec1b..000000000
--- a/test/reference/push-group.ref.png
+++ /dev/null
Binary files differ
diff --git a/test/reference/push-group.rgb24.ref.png b/test/reference/push-group.rgb24.ref.png
new file mode 100644
index 000000000..04d1382e4
--- /dev/null
+++ b/test/reference/push-group.rgb24.ref.png
Binary files differ
diff --git a/test/reference/random-clip.argb32.ref.png b/test/reference/random-clip.argb32.ref.png
index d755c6137..358277835 100644
--- a/test/reference/random-clip.argb32.ref.png
+++ b/test/reference/random-clip.argb32.ref.png
Binary files differ
diff --git a/test/reference/random-clip.rgb24.ref.png b/test/reference/random-clip.rgb24.ref.png
index d755c6137..358277835 100644
--- a/test/reference/random-clip.rgb24.ref.png
+++ b/test/reference/random-clip.rgb24.ref.png
Binary files differ
diff --git a/test/reference/random-intersections-curves-eo.argb32.ref.png b/test/reference/random-intersections-curves-eo.argb32.ref.png
index 2221f4838..383b30fd5 100644
--- a/test/reference/random-intersections-curves-eo.argb32.ref.png
+++ b/test/reference/random-intersections-curves-eo.argb32.ref.png
Binary files differ
diff --git a/test/reference/random-intersections-curves-eo.rgb24.ref.png b/test/reference/random-intersections-curves-eo.rgb24.ref.png
index 2221f4838..383b30fd5 100644
--- a/test/reference/random-intersections-curves-eo.rgb24.ref.png
+++ b/test/reference/random-intersections-curves-eo.rgb24.ref.png
Binary files differ
diff --git a/test/reference/random-intersections-curves-nz.argb32.ref.png b/test/reference/random-intersections-curves-nz.argb32.ref.png
index 2dccfcee4..ae8b2b539 100644
--- a/test/reference/random-intersections-curves-nz.argb32.ref.png
+++ b/test/reference/random-intersections-curves-nz.argb32.ref.png
Binary files differ
diff --git a/test/reference/random-intersections-curves-nz.rgb24.ref.png b/test/reference/random-intersections-curves-nz.rgb24.ref.png
index 2dccfcee4..ae8b2b539 100644
--- a/test/reference/random-intersections-curves-nz.rgb24.ref.png
+++ b/test/reference/random-intersections-curves-nz.rgb24.ref.png
Binary files differ
diff --git a/test/reference/random-intersections-eo.argb32.ref.png b/test/reference/random-intersections-eo.argb32.ref.png
index c087a3834..735d07b88 100644
--- a/test/reference/random-intersections-eo.argb32.ref.png
+++ b/test/reference/random-intersections-eo.argb32.ref.png
Binary files differ
diff --git a/test/reference/random-intersections-eo.rgb24.ref.png b/test/reference/random-intersections-eo.rgb24.ref.png
index c087a3834..735d07b88 100644
--- a/test/reference/random-intersections-eo.rgb24.ref.png
+++ b/test/reference/random-intersections-eo.rgb24.ref.png
Binary files differ
diff --git a/test/reference/random-intersections-nonzero.argb32.ref.png b/test/reference/random-intersections-nonzero.argb32.ref.png
index 1255014de..d20bbc719 100644
--- a/test/reference/random-intersections-nonzero.argb32.ref.png
+++ b/test/reference/random-intersections-nonzero.argb32.ref.png
Binary files differ
diff --git a/test/reference/random-intersections-nonzero.rgb24.ref.png b/test/reference/random-intersections-nonzero.rgb24.ref.png
index 1255014de..d20bbc719 100644
--- a/test/reference/random-intersections-nonzero.rgb24.ref.png
+++ b/test/reference/random-intersections-nonzero.rgb24.ref.png
Binary files differ
diff --git a/test/reference/record2x-fill-alpha.argb32.ref.png b/test/reference/record2x-fill-alpha.argb32.ref.png
index 488f2b054..891173a35 100644
--- a/test/reference/record2x-fill-alpha.argb32.ref.png
+++ b/test/reference/record2x-fill-alpha.argb32.ref.png
Binary files differ
diff --git a/test/reference/record2x-fill-alpha.rgb24.ref.png b/test/reference/record2x-fill-alpha.rgb24.ref.png
index 488f2b054..891173a35 100644
--- a/test/reference/record2x-fill-alpha.rgb24.ref.png
+++ b/test/reference/record2x-fill-alpha.rgb24.ref.png
Binary files differ
diff --git a/test/reference/rotate-clip.surface-paint.image.argb32.ref.png b/test/reference/rotate-clip.surface-paint.image.argb32.ref.png
new file mode 100644
index 000000000..63e6f9625
--- /dev/null
+++ b/test/reference/rotate-clip.surface-paint.image.argb32.ref.png
Binary files differ
diff --git a/test/reference/rotate-clip.surface-paint.image.rgb24.ref.png b/test/reference/rotate-clip.surface-paint.image.rgb24.ref.png
new file mode 100644
index 000000000..63e6f9625
--- /dev/null
+++ b/test/reference/rotate-clip.surface-paint.image.rgb24.ref.png
Binary files differ
diff --git a/test/reference/scale-offset-similar.argb32.ref.png b/test/reference/scale-offset-similar.argb32.ref.png
index 12470634b..8b3649a33 100644
--- a/test/reference/scale-offset-similar.argb32.ref.png
+++ b/test/reference/scale-offset-similar.argb32.ref.png
Binary files differ
diff --git a/test/reference/scale-offset-similar.rgb24.ref.png b/test/reference/scale-offset-similar.rgb24.ref.png
index 12470634b..8b3649a33 100644
--- a/test/reference/scale-offset-similar.rgb24.ref.png
+++ b/test/reference/scale-offset-similar.rgb24.ref.png
Binary files differ
diff --git a/test/reference/smask-fill.argb32.ref.png b/test/reference/smask-fill.argb32.ref.png
index ec4cf52f3..e007287fb 100644
--- a/test/reference/smask-fill.argb32.ref.png
+++ b/test/reference/smask-fill.argb32.ref.png
Binary files differ
diff --git a/test/reference/smask-fill.rgb24.ref.png b/test/reference/smask-fill.rgb24.ref.png
index ec4cf52f3..e007287fb 100644
--- a/test/reference/smask-fill.rgb24.ref.png
+++ b/test/reference/smask-fill.rgb24.ref.png
Binary files differ
diff --git a/test/reference/smask-stroke.argb32.ref.png b/test/reference/smask-stroke.argb32.ref.png
index 028404601..98b0638d8 100644
--- a/test/reference/smask-stroke.argb32.ref.png
+++ b/test/reference/smask-stroke.argb32.ref.png
Binary files differ
diff --git a/test/reference/smask-stroke.rgb24.ref.png b/test/reference/smask-stroke.rgb24.ref.png
index 028404601..98b0638d8 100644
--- a/test/reference/smask-stroke.rgb24.ref.png
+++ b/test/reference/smask-stroke.rgb24.ref.png
Binary files differ
diff --git a/test/reference/smask.argb32.ref.png b/test/reference/smask.argb32.ref.png
index 44e061f4b..d49e8f5a1 100644
--- a/test/reference/smask.argb32.ref.png
+++ b/test/reference/smask.argb32.ref.png
Binary files differ
diff --git a/test/reference/smask.rgb24.ref.png b/test/reference/smask.rgb24.ref.png
index 44e061f4b..d49e8f5a1 100644
--- a/test/reference/smask.rgb24.ref.png
+++ b/test/reference/smask.rgb24.ref.png
Binary files differ
diff --git a/test/reference/surface-pattern-operator.argb32.ref.png b/test/reference/surface-pattern-operator.argb32.ref.png
new file mode 100644
index 000000000..2edbb1cbc
--- /dev/null
+++ b/test/reference/surface-pattern-operator.argb32.ref.png
Binary files differ
diff --git a/test/reference/surface-pattern-operator.ref.png b/test/reference/surface-pattern-operator.ref.png
deleted file mode 100644
index 817803040..000000000
--- a/test/reference/surface-pattern-operator.ref.png
+++ /dev/null
Binary files differ
diff --git a/test/reference/surface-pattern-operator.rgb24.ref.png b/test/reference/surface-pattern-operator.rgb24.ref.png
new file mode 100644
index 000000000..66727254e
--- /dev/null
+++ b/test/reference/surface-pattern-operator.rgb24.ref.png
Binary files differ
diff --git a/test/reference/text-rotate.argb32.ref.png b/test/reference/text-rotate.argb32.ref.png
index a64f40d9c..06ba48156 100644
--- a/test/reference/text-rotate.argb32.ref.png
+++ b/test/reference/text-rotate.argb32.ref.png
Binary files differ
diff --git a/test/reference/text-rotate.rgb24.ref.png b/test/reference/text-rotate.rgb24.ref.png
index a64f40d9c..06ba48156 100644
--- a/test/reference/text-rotate.rgb24.ref.png
+++ b/test/reference/text-rotate.rgb24.ref.png
Binary files differ
diff --git a/test/reference/tiger.argb32.ref.png b/test/reference/tiger.argb32.ref.png
index 6fe6dd3b6..d98f400b1 100644
--- a/test/reference/tiger.argb32.ref.png
+++ b/test/reference/tiger.argb32.ref.png
Binary files differ
diff --git a/test/reference/tiger.rgb24.ref.png b/test/reference/tiger.rgb24.ref.png
index 6fe6dd3b6..d98f400b1 100644
--- a/test/reference/tiger.rgb24.ref.png
+++ b/test/reference/tiger.rgb24.ref.png
Binary files differ
diff --git a/test/reference/trap-clip.argb32.ref.png b/test/reference/trap-clip.argb32.ref.png
new file mode 100644
index 000000000..aa6bce307
--- /dev/null
+++ b/test/reference/trap-clip.argb32.ref.png
Binary files differ
diff --git a/test/reference/trap-clip.ref.png b/test/reference/trap-clip.ref.png
deleted file mode 100644
index 719d85528..000000000
--- a/test/reference/trap-clip.ref.png
+++ /dev/null
Binary files differ
diff --git a/test/reference/trap-clip.rgb24.ref.png b/test/reference/trap-clip.rgb24.ref.png
new file mode 100644
index 000000000..39399d621
--- /dev/null
+++ b/test/reference/trap-clip.rgb24.ref.png
Binary files differ
diff --git a/test/reference/unbounded-operator.argb32.ref.png b/test/reference/unbounded-operator.argb32.ref.png
index d9b89a65a..6857191f8 100644
--- a/test/reference/unbounded-operator.argb32.ref.png
+++ b/test/reference/unbounded-operator.argb32.ref.png
Binary files differ
diff --git a/test/reference/unbounded-operator.ref.png b/test/reference/unbounded-operator.ref.png
deleted file mode 100644
index 6e4aa956f..000000000
--- a/test/reference/unbounded-operator.ref.png
+++ /dev/null
Binary files differ
diff --git a/test/reference/unbounded-operator.rgb24.ref.png b/test/reference/unbounded-operator.rgb24.ref.png
new file mode 100644
index 000000000..0d34ba9b5
--- /dev/null
+++ b/test/reference/unbounded-operator.rgb24.ref.png
Binary files differ
diff --git a/test/reference/user-font-proxy.argb32.ref.png b/test/reference/user-font-proxy.argb32.ref.png
index b97d32bae..44eab566f 100644
--- a/test/reference/user-font-proxy.argb32.ref.png
+++ b/test/reference/user-font-proxy.argb32.ref.png
Binary files differ
diff --git a/test/reference/user-font-proxy.rgb24.ref.png b/test/reference/user-font-proxy.rgb24.ref.png
index b97d32bae..44eab566f 100644
--- a/test/reference/user-font-proxy.rgb24.ref.png
+++ b/test/reference/user-font-proxy.rgb24.ref.png
Binary files differ
diff --git a/test/reference/user-font.argb32.ref.png b/test/reference/user-font.argb32.ref.png
index e6cd9de49..9e01808be 100644
--- a/test/reference/user-font.argb32.ref.png
+++ b/test/reference/user-font.argb32.ref.png
Binary files differ
diff --git a/test/reference/user-font.rgb24.ref.png b/test/reference/user-font.rgb24.ref.png
index e6cd9de49..9e01808be 100644
--- a/test/reference/user-font.rgb24.ref.png
+++ b/test/reference/user-font.rgb24.ref.png
Binary files differ