Use u8/u16 for clipping fine rasterization
diff --git a/sparse_strips/vello_cpu/snapshots/clip_rectangle_and_circle.png b/sparse_strips/vello_cpu/snapshots/clip_rectangle_and_circle.png index 0b8f4af..9e11557 100644 --- a/sparse_strips/vello_cpu/snapshots/clip_rectangle_and_circle.png +++ b/sparse_strips/vello_cpu/snapshots/clip_rectangle_and_circle.png
@@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7705c02bfb0f273ad98fbc02af3a516d7d78c2377444ac26a0b961de23943224 +oid sha256:ba1651c909d6b5b3080cf5c1399e3bb286262a0e21b52d704b26dcea94364f18 size 813
diff --git a/sparse_strips/vello_cpu/snapshots/clip_rectangle_with_star_evenodd.png b/sparse_strips/vello_cpu/snapshots/clip_rectangle_with_star_evenodd.png index cc19cf8..cff3b18 100644 --- a/sparse_strips/vello_cpu/snapshots/clip_rectangle_with_star_evenodd.png +++ b/sparse_strips/vello_cpu/snapshots/clip_rectangle_with_star_evenodd.png
@@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dbfb956f4659a24b654ac8e5c85522830b0855f17cfa8fa1cea9e7a02c4aefd2 +oid sha256:c1c88d36d27b16023f2fd737b30020437ad3ac1f2c2e1540db953222c76e6b8f size 899
diff --git a/sparse_strips/vello_cpu/snapshots/clip_rectangle_with_star_nonzero.png b/sparse_strips/vello_cpu/snapshots/clip_rectangle_with_star_nonzero.png index 28a783c..2709026 100644 --- a/sparse_strips/vello_cpu/snapshots/clip_rectangle_with_star_nonzero.png +++ b/sparse_strips/vello_cpu/snapshots/clip_rectangle_with_star_nonzero.png
@@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:40787b1bb21a37d0f25d214ea62370cbc387d2515b275ba92fadb4dd034d2626 +oid sha256:fbc2be6c162106a6caff9488af499ace5799cb6845490aa65338bf5c5fd4b335 size 781
diff --git a/sparse_strips/vello_cpu/snapshots/clip_transformed_rect.png b/sparse_strips/vello_cpu/snapshots/clip_transformed_rect.png index b3f2967..11c1e88 100644 --- a/sparse_strips/vello_cpu/snapshots/clip_transformed_rect.png +++ b/sparse_strips/vello_cpu/snapshots/clip_transformed_rect.png
@@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:842d643e5780ae909806988df70f78a7cf166b0e54f1ca13b9dee2ffe17343f2 +oid sha256:a791ea6f3c2c3064efe62d2a9ee527f6f50f73df79e158397e4a28466fb5ad8e size 344
diff --git a/sparse_strips/vello_cpu/snapshots/clip_triangle_with_star.png b/sparse_strips/vello_cpu/snapshots/clip_triangle_with_star.png index 4006f62..7282fee 100644 --- a/sparse_strips/vello_cpu/snapshots/clip_triangle_with_star.png +++ b/sparse_strips/vello_cpu/snapshots/clip_triangle_with_star.png
@@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:eeae77f49d758928a3899b98ba417964aa4bf1204d9c38e2bd895f963b34ee12 -size 1758 +oid sha256:2a577d5d1950bd58f46510400b7c91d1c7b8a8fc5252a4a4857f475c951e6026 +size 1748
diff --git a/sparse_strips/vello_cpu/snapshots/clip_with_multiple_transforms.png b/sparse_strips/vello_cpu/snapshots/clip_with_multiple_transforms.png index bd07bb4..aab8b98 100644 --- a/sparse_strips/vello_cpu/snapshots/clip_with_multiple_transforms.png +++ b/sparse_strips/vello_cpu/snapshots/clip_with_multiple_transforms.png
@@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e79112e14e692bea247f3d0b2defb174ef4bc0d6d74e8747faf110d1fbf265f1 +oid sha256:649e59dfb9f996d77cac55a6db704172a864b31febaf2b80dc11a2bafa47259d size 476
diff --git a/sparse_strips/vello_cpu/snapshots/clip_with_rotate.png b/sparse_strips/vello_cpu/snapshots/clip_with_rotate.png index 3481075..875b642 100644 --- a/sparse_strips/vello_cpu/snapshots/clip_with_rotate.png +++ b/sparse_strips/vello_cpu/snapshots/clip_with_rotate.png
@@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ee069c92da7bcf201411d8c957a8b6b6baf48efe9d603a3a0540a4436fcbe20d +oid sha256:afb7bbbe9366aaa5b51a06af9072ada24d998f3d15b4ab8c5d653ad814dbe41a size 370
diff --git a/sparse_strips/vello_cpu/snapshots/clip_with_save_restore.png b/sparse_strips/vello_cpu/snapshots/clip_with_save_restore.png index de712b1..afdf623 100644 --- a/sparse_strips/vello_cpu/snapshots/clip_with_save_restore.png +++ b/sparse_strips/vello_cpu/snapshots/clip_with_save_restore.png
@@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b4da4af3c07446008ddf7b6f2b197063ba47387b125d3570b53f88b43de8ba5a +oid sha256:8bf8baff9bb856e1b5864f6bf85f3cd3182dcec19434e12d343a68d6851b84c9 size 444
diff --git a/sparse_strips/vello_cpu/src/fine.rs b/sparse_strips/vello_cpu/src/fine.rs index ac94c59..683ff54 100644 --- a/sparse_strips/vello_cpu/src/fine.rs +++ b/sparse_strips/vello_cpu/src/fine.rs
@@ -4,6 +4,7 @@ //! Fine rasterization runs the commands in each wide tile to determine the final RGBA value //! of each pixel and pack it into the pixmap. +use crate::util::scalar::div_255; use vello_common::{ coarse::{Cmd, WideTile}, paint::Paint, @@ -145,14 +146,14 @@ for col_idx in 0..width { for row_idx in 0..usize::from(Tile::HEIGHT) { let px_offset = (x + col_idx) * TILE_HEIGHT_COMPONENTS + row_idx * COLOR_COMPONENTS; - let source_alpha = source_buffer[px_offset + 3] as f32 / 255.0; - let inverse_alpha = 1.0 - source_alpha; + let source_alpha = source_buffer[px_offset + 3] as u16; + let inverse_alpha = 255 - source_alpha; for channel_idx in 0..COLOR_COMPONENTS { - let dest = target_buffer[px_offset + channel_idx] as f32; - let src = source_buffer[px_offset + channel_idx] as f32; + let dest = target_buffer[px_offset + channel_idx] as u16; + let src = source_buffer[px_offset + channel_idx] as u16; target_buffer[px_offset + channel_idx] = - (dest * inverse_alpha + src * source_alpha) as u8; + div_255(dest * inverse_alpha + src * source_alpha) as u8; } } } @@ -169,15 +170,15 @@ { for (row_idx, &alpha) in column_alphas.iter().enumerate() { let px_offset = (x + col_idx) * TILE_HEIGHT_COMPONENTS + row_idx * COLOR_COMPONENTS; - let mask_alpha = alpha as f32 / 255.0; - let source_alpha = source_buffer[px_offset + 3] as f32 / 255.0; - let inverse_alpha = 1.0 - mask_alpha * source_alpha; + let mask_alpha = alpha as u16; + let source_alpha = source_buffer[px_offset + 3] as u16; + let inverse_alpha = 255 - div_255(mask_alpha * source_alpha); for channel_idx in 0..COLOR_COMPONENTS { - let dest = target_buffer[px_offset + channel_idx] as f32; - let source = source_buffer[px_offset + channel_idx] as f32; + let dest = target_buffer[px_offset + channel_idx] as u16; + let source = source_buffer[px_offset + channel_idx] as u16; target_buffer[px_offset + channel_idx] = - (dest * inverse_alpha + mask_alpha * source) as u8; + div_255(dest * inverse_alpha + mask_alpha * source) as u8; } } }