xref: /aosp_15_r20/external/skia/third_party/vello/src/lib.rs (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Worker // Copyright 2023 Google LLC
2*c8dee2aaSAndroid Build Coastguard Worker //
3*c8dee2aaSAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
4*c8dee2aaSAndroid Build Coastguard Worker // found in the LICENSE file.
5*c8dee2aaSAndroid Build Coastguard Worker 
6*c8dee2aaSAndroid Build Coastguard Worker #[cxx::bridge(namespace = "vello_cpp")]
7*c8dee2aaSAndroid Build Coastguard Worker mod ffi {
8*c8dee2aaSAndroid Build Coastguard Worker     // === vello_shaders FFI types ===
9*c8dee2aaSAndroid Build Coastguard Worker 
10*c8dee2aaSAndroid Build Coastguard Worker     enum ShaderStage {
11*c8dee2aaSAndroid Build Coastguard Worker         Backdrop,
12*c8dee2aaSAndroid Build Coastguard Worker         BackdropDyn,
13*c8dee2aaSAndroid Build Coastguard Worker         BboxClear,
14*c8dee2aaSAndroid Build Coastguard Worker         Binning,
15*c8dee2aaSAndroid Build Coastguard Worker         ClipLeaf,
16*c8dee2aaSAndroid Build Coastguard Worker         ClipReduce,
17*c8dee2aaSAndroid Build Coastguard Worker         Coarse,
18*c8dee2aaSAndroid Build Coastguard Worker         DrawLeaf,
19*c8dee2aaSAndroid Build Coastguard Worker         DrawReduce,
20*c8dee2aaSAndroid Build Coastguard Worker         FineArea,
21*c8dee2aaSAndroid Build Coastguard Worker         FineMsaa16,
22*c8dee2aaSAndroid Build Coastguard Worker         FineMsaa8,
23*c8dee2aaSAndroid Build Coastguard Worker         FineAreaR8,
24*c8dee2aaSAndroid Build Coastguard Worker         FineMsaa16R8,
25*c8dee2aaSAndroid Build Coastguard Worker         FineMsaa8R8,
26*c8dee2aaSAndroid Build Coastguard Worker         Flatten,
27*c8dee2aaSAndroid Build Coastguard Worker         PathCount,
28*c8dee2aaSAndroid Build Coastguard Worker         PathCountSetup,
29*c8dee2aaSAndroid Build Coastguard Worker         PathTiling,
30*c8dee2aaSAndroid Build Coastguard Worker         PathTilingSetup,
31*c8dee2aaSAndroid Build Coastguard Worker         Pathseg,
32*c8dee2aaSAndroid Build Coastguard Worker         PathtagReduce,
33*c8dee2aaSAndroid Build Coastguard Worker         PathtagReduce2,
34*c8dee2aaSAndroid Build Coastguard Worker         PathtagScan1,
35*c8dee2aaSAndroid Build Coastguard Worker         PathtagScanLarge,
36*c8dee2aaSAndroid Build Coastguard Worker         PathtagScanSmall,
37*c8dee2aaSAndroid Build Coastguard Worker         TileAlloc,
38*c8dee2aaSAndroid Build Coastguard Worker     }
39*c8dee2aaSAndroid Build Coastguard Worker 
40*c8dee2aaSAndroid Build Coastguard Worker     enum BindType {
41*c8dee2aaSAndroid Build Coastguard Worker         Buffer,
42*c8dee2aaSAndroid Build Coastguard Worker         BufReadOnly,
43*c8dee2aaSAndroid Build Coastguard Worker         Uniform,
44*c8dee2aaSAndroid Build Coastguard Worker         Image,
45*c8dee2aaSAndroid Build Coastguard Worker         ImageRead,
46*c8dee2aaSAndroid Build Coastguard Worker     }
47*c8dee2aaSAndroid Build Coastguard Worker 
48*c8dee2aaSAndroid Build Coastguard Worker     struct WorkgroupBufferInfo {
49*c8dee2aaSAndroid Build Coastguard Worker         size_in_bytes: u32,
50*c8dee2aaSAndroid Build Coastguard Worker         index: u32,
51*c8dee2aaSAndroid Build Coastguard Worker     }
52*c8dee2aaSAndroid Build Coastguard Worker 
53*c8dee2aaSAndroid Build Coastguard Worker     // === vello_encoding FFI types ===
54*c8dee2aaSAndroid Build Coastguard Worker 
55*c8dee2aaSAndroid Build Coastguard Worker     /// Represents a 3x3 affine transformation matrix. The coordinates are laid out using the
56*c8dee2aaSAndroid Build Coastguard Worker     /// following column-major construction, where the entries
57*c8dee2aaSAndroid Build Coastguard Worker     ///
58*c8dee2aaSAndroid Build Coastguard Worker     ///    [a, b, c, d, e, f]
59*c8dee2aaSAndroid Build Coastguard Worker     ///
60*c8dee2aaSAndroid Build Coastguard Worker     /// correspond to the matrix
61*c8dee2aaSAndroid Build Coastguard Worker     ///
62*c8dee2aaSAndroid Build Coastguard Worker     ///    | a c e |
63*c8dee2aaSAndroid Build Coastguard Worker     ///    | b d f |
64*c8dee2aaSAndroid Build Coastguard Worker     ///    | 0 0 1 |
65*c8dee2aaSAndroid Build Coastguard Worker     ///
66*c8dee2aaSAndroid Build Coastguard Worker     struct Affine {
67*c8dee2aaSAndroid Build Coastguard Worker         matrix: [f32; 6],
68*c8dee2aaSAndroid Build Coastguard Worker     }
69*c8dee2aaSAndroid Build Coastguard Worker 
70*c8dee2aaSAndroid Build Coastguard Worker     struct Color {
71*c8dee2aaSAndroid Build Coastguard Worker         r: u8,
72*c8dee2aaSAndroid Build Coastguard Worker         g: u8,
73*c8dee2aaSAndroid Build Coastguard Worker         b: u8,
74*c8dee2aaSAndroid Build Coastguard Worker         a: u8,
75*c8dee2aaSAndroid Build Coastguard Worker     }
76*c8dee2aaSAndroid Build Coastguard Worker 
77*c8dee2aaSAndroid Build Coastguard Worker     enum BrushKind {
78*c8dee2aaSAndroid Build Coastguard Worker         Solid,
79*c8dee2aaSAndroid Build Coastguard Worker     }
80*c8dee2aaSAndroid Build Coastguard Worker 
81*c8dee2aaSAndroid Build Coastguard Worker     struct BrushData {
82*c8dee2aaSAndroid Build Coastguard Worker         solid: Color,
83*c8dee2aaSAndroid Build Coastguard Worker     }
84*c8dee2aaSAndroid Build Coastguard Worker 
85*c8dee2aaSAndroid Build Coastguard Worker     struct Brush {
86*c8dee2aaSAndroid Build Coastguard Worker         kind: BrushKind,
87*c8dee2aaSAndroid Build Coastguard Worker         data: BrushData,
88*c8dee2aaSAndroid Build Coastguard Worker     }
89*c8dee2aaSAndroid Build Coastguard Worker 
90*c8dee2aaSAndroid Build Coastguard Worker     enum Fill {
91*c8dee2aaSAndroid Build Coastguard Worker         NonZero,
92*c8dee2aaSAndroid Build Coastguard Worker         EvenOdd,
93*c8dee2aaSAndroid Build Coastguard Worker     }
94*c8dee2aaSAndroid Build Coastguard Worker 
95*c8dee2aaSAndroid Build Coastguard Worker     enum CapStyle {
96*c8dee2aaSAndroid Build Coastguard Worker         Butt,
97*c8dee2aaSAndroid Build Coastguard Worker         Square,
98*c8dee2aaSAndroid Build Coastguard Worker         Round,
99*c8dee2aaSAndroid Build Coastguard Worker     }
100*c8dee2aaSAndroid Build Coastguard Worker 
101*c8dee2aaSAndroid Build Coastguard Worker     enum JoinStyle {
102*c8dee2aaSAndroid Build Coastguard Worker         Bevel,
103*c8dee2aaSAndroid Build Coastguard Worker         Miter,
104*c8dee2aaSAndroid Build Coastguard Worker         Round,
105*c8dee2aaSAndroid Build Coastguard Worker     }
106*c8dee2aaSAndroid Build Coastguard Worker 
107*c8dee2aaSAndroid Build Coastguard Worker     struct Stroke {
108*c8dee2aaSAndroid Build Coastguard Worker         width: f32,
109*c8dee2aaSAndroid Build Coastguard Worker         miter_limit: f32,
110*c8dee2aaSAndroid Build Coastguard Worker         cap: CapStyle,
111*c8dee2aaSAndroid Build Coastguard Worker         join: JoinStyle,
112*c8dee2aaSAndroid Build Coastguard Worker     }
113*c8dee2aaSAndroid Build Coastguard Worker 
114*c8dee2aaSAndroid Build Coastguard Worker     #[derive(Copy, Clone, Default, Debug)]
115*c8dee2aaSAndroid Build Coastguard Worker     struct Point {
116*c8dee2aaSAndroid Build Coastguard Worker         x: f32,
117*c8dee2aaSAndroid Build Coastguard Worker         y: f32,
118*c8dee2aaSAndroid Build Coastguard Worker     }
119*c8dee2aaSAndroid Build Coastguard Worker 
120*c8dee2aaSAndroid Build Coastguard Worker     #[derive(Debug)]
121*c8dee2aaSAndroid Build Coastguard Worker     enum PathVerb {
122*c8dee2aaSAndroid Build Coastguard Worker         MoveTo,
123*c8dee2aaSAndroid Build Coastguard Worker         LineTo,
124*c8dee2aaSAndroid Build Coastguard Worker         QuadTo,
125*c8dee2aaSAndroid Build Coastguard Worker         CurveTo,
126*c8dee2aaSAndroid Build Coastguard Worker         Close,
127*c8dee2aaSAndroid Build Coastguard Worker     }
128*c8dee2aaSAndroid Build Coastguard Worker 
129*c8dee2aaSAndroid Build Coastguard Worker     #[derive(Default, Debug)]
130*c8dee2aaSAndroid Build Coastguard Worker     struct PathElement {
131*c8dee2aaSAndroid Build Coastguard Worker         verb: PathVerb,
132*c8dee2aaSAndroid Build Coastguard Worker         points: [Point; 4],
133*c8dee2aaSAndroid Build Coastguard Worker     }
134*c8dee2aaSAndroid Build Coastguard Worker 
135*c8dee2aaSAndroid Build Coastguard Worker     // Types that contain dispatch metadata
136*c8dee2aaSAndroid Build Coastguard Worker 
137*c8dee2aaSAndroid Build Coastguard Worker     struct WorkgroupSize {
138*c8dee2aaSAndroid Build Coastguard Worker         x: u32,
139*c8dee2aaSAndroid Build Coastguard Worker         y: u32,
140*c8dee2aaSAndroid Build Coastguard Worker         z: u32,
141*c8dee2aaSAndroid Build Coastguard Worker     }
142*c8dee2aaSAndroid Build Coastguard Worker 
143*c8dee2aaSAndroid Build Coastguard Worker     struct DispatchInfo {
144*c8dee2aaSAndroid Build Coastguard Worker         use_large_path_scan: bool,
145*c8dee2aaSAndroid Build Coastguard Worker 
146*c8dee2aaSAndroid Build Coastguard Worker         // Dispatch workgroup counts for each pipeline
147*c8dee2aaSAndroid Build Coastguard Worker         path_reduce: WorkgroupSize,
148*c8dee2aaSAndroid Build Coastguard Worker         path_reduce2: WorkgroupSize,
149*c8dee2aaSAndroid Build Coastguard Worker         path_scan1: WorkgroupSize,
150*c8dee2aaSAndroid Build Coastguard Worker         path_scan: WorkgroupSize,
151*c8dee2aaSAndroid Build Coastguard Worker         bbox_clear: WorkgroupSize,
152*c8dee2aaSAndroid Build Coastguard Worker         flatten: WorkgroupSize,
153*c8dee2aaSAndroid Build Coastguard Worker         draw_reduce: WorkgroupSize,
154*c8dee2aaSAndroid Build Coastguard Worker         draw_leaf: WorkgroupSize,
155*c8dee2aaSAndroid Build Coastguard Worker         clip_reduce: WorkgroupSize,
156*c8dee2aaSAndroid Build Coastguard Worker         clip_leaf: WorkgroupSize,
157*c8dee2aaSAndroid Build Coastguard Worker         binning: WorkgroupSize,
158*c8dee2aaSAndroid Build Coastguard Worker         tile_alloc: WorkgroupSize,
159*c8dee2aaSAndroid Build Coastguard Worker         path_count_setup: WorkgroupSize,
160*c8dee2aaSAndroid Build Coastguard Worker         // Note: `path_count` must use an indirect dispatch
161*c8dee2aaSAndroid Build Coastguard Worker         backdrop: WorkgroupSize,
162*c8dee2aaSAndroid Build Coastguard Worker         coarse: WorkgroupSize,
163*c8dee2aaSAndroid Build Coastguard Worker         path_tiling_setup: WorkgroupSize,
164*c8dee2aaSAndroid Build Coastguard Worker         // Note: `path_tiling` must use an indirect dispatch
165*c8dee2aaSAndroid Build Coastguard Worker         fine: WorkgroupSize,
166*c8dee2aaSAndroid Build Coastguard Worker     }
167*c8dee2aaSAndroid Build Coastguard Worker 
168*c8dee2aaSAndroid Build Coastguard Worker     /// Computed sizes for all buffers.
169*c8dee2aaSAndroid Build Coastguard Worker     struct BufferSizes {
170*c8dee2aaSAndroid Build Coastguard Worker         // Known size buffers
171*c8dee2aaSAndroid Build Coastguard Worker         path_reduced: u32,
172*c8dee2aaSAndroid Build Coastguard Worker         path_reduced2: u32,
173*c8dee2aaSAndroid Build Coastguard Worker         path_reduced_scan: u32,
174*c8dee2aaSAndroid Build Coastguard Worker         path_monoids: u32,
175*c8dee2aaSAndroid Build Coastguard Worker         path_bboxes: u32,
176*c8dee2aaSAndroid Build Coastguard Worker         draw_reduced: u32,
177*c8dee2aaSAndroid Build Coastguard Worker         draw_monoids: u32,
178*c8dee2aaSAndroid Build Coastguard Worker         info: u32,
179*c8dee2aaSAndroid Build Coastguard Worker         clip_inps: u32,
180*c8dee2aaSAndroid Build Coastguard Worker         clip_els: u32,
181*c8dee2aaSAndroid Build Coastguard Worker         clip_bics: u32,
182*c8dee2aaSAndroid Build Coastguard Worker         clip_bboxes: u32,
183*c8dee2aaSAndroid Build Coastguard Worker         draw_bboxes: u32,
184*c8dee2aaSAndroid Build Coastguard Worker         bump_alloc: u32,
185*c8dee2aaSAndroid Build Coastguard Worker         indirect_count: u32,
186*c8dee2aaSAndroid Build Coastguard Worker         bin_headers: u32,
187*c8dee2aaSAndroid Build Coastguard Worker         paths: u32,
188*c8dee2aaSAndroid Build Coastguard Worker         // Bump allocated buffers
189*c8dee2aaSAndroid Build Coastguard Worker         lines: u32,
190*c8dee2aaSAndroid Build Coastguard Worker         bin_data: u32,
191*c8dee2aaSAndroid Build Coastguard Worker         tiles: u32,
192*c8dee2aaSAndroid Build Coastguard Worker         seg_counts: u32,
193*c8dee2aaSAndroid Build Coastguard Worker         segments: u32,
194*c8dee2aaSAndroid Build Coastguard Worker         ptcl: u32,
195*c8dee2aaSAndroid Build Coastguard Worker     }
196*c8dee2aaSAndroid Build Coastguard Worker 
197*c8dee2aaSAndroid Build Coastguard Worker     extern "Rust" {
198*c8dee2aaSAndroid Build Coastguard Worker         type Shader;
shader(stage: ShaderStage) -> &'static Shader199*c8dee2aaSAndroid Build Coastguard Worker         fn shader(stage: ShaderStage) -> &'static Shader;
name(self: &Shader) -> &str200*c8dee2aaSAndroid Build Coastguard Worker         fn name(self: &Shader) -> &str;
workgroup_size(self: &Shader) -> WorkgroupSize201*c8dee2aaSAndroid Build Coastguard Worker         fn workgroup_size(self: &Shader) -> WorkgroupSize;
bindings(self: &Shader) -> Vec<BindType>202*c8dee2aaSAndroid Build Coastguard Worker         fn bindings(self: &Shader) -> Vec<BindType>;
workgroup_buffers(self: &Shader) -> Vec<WorkgroupBufferInfo>203*c8dee2aaSAndroid Build Coastguard Worker         fn workgroup_buffers(self: &Shader) -> Vec<WorkgroupBufferInfo>;
204*c8dee2aaSAndroid Build Coastguard Worker         #[cfg(feature = "wgsl")]
wgsl(self: &Shader) -> &str205*c8dee2aaSAndroid Build Coastguard Worker         fn wgsl(self: &Shader) -> &str;
206*c8dee2aaSAndroid Build Coastguard Worker         #[cfg(feature = "msl")]
msl(self: &Shader) -> &str207*c8dee2aaSAndroid Build Coastguard Worker         fn msl(self: &Shader) -> &str;
208*c8dee2aaSAndroid Build Coastguard Worker 
209*c8dee2aaSAndroid Build Coastguard Worker         type Encoding;
new_encoding() -> Box<Encoding>210*c8dee2aaSAndroid Build Coastguard Worker         fn new_encoding() -> Box<Encoding>;
is_empty(self: &Encoding) -> bool211*c8dee2aaSAndroid Build Coastguard Worker         fn is_empty(self: &Encoding) -> bool;
reset(self: &mut Encoding)212*c8dee2aaSAndroid Build Coastguard Worker         fn reset(self: &mut Encoding);
fill( self: &mut Encoding, style: Fill, transform: Affine, brush: &Brush, path_iter: Pin<&mut PathIterator>, )213*c8dee2aaSAndroid Build Coastguard Worker         fn fill(
214*c8dee2aaSAndroid Build Coastguard Worker             self: &mut Encoding,
215*c8dee2aaSAndroid Build Coastguard Worker             style: Fill,
216*c8dee2aaSAndroid Build Coastguard Worker             transform: Affine,
217*c8dee2aaSAndroid Build Coastguard Worker             brush: &Brush,
218*c8dee2aaSAndroid Build Coastguard Worker             path_iter: Pin<&mut PathIterator>,
219*c8dee2aaSAndroid Build Coastguard Worker         );
stroke( self: &mut Encoding, style: &Stroke, transform: Affine, brush: &Brush, path_iter: Pin<&mut PathIterator>, )220*c8dee2aaSAndroid Build Coastguard Worker         fn stroke(
221*c8dee2aaSAndroid Build Coastguard Worker             self: &mut Encoding,
222*c8dee2aaSAndroid Build Coastguard Worker             style: &Stroke,
223*c8dee2aaSAndroid Build Coastguard Worker             transform: Affine,
224*c8dee2aaSAndroid Build Coastguard Worker             brush: &Brush,
225*c8dee2aaSAndroid Build Coastguard Worker             path_iter: Pin<&mut PathIterator>,
226*c8dee2aaSAndroid Build Coastguard Worker         );
begin_clip(self: &mut Encoding, transform: Affine, path_iter: Pin<&mut PathIterator>)227*c8dee2aaSAndroid Build Coastguard Worker         fn begin_clip(self: &mut Encoding, transform: Affine, path_iter: Pin<&mut PathIterator>);
end_clip(self: &mut Encoding)228*c8dee2aaSAndroid Build Coastguard Worker         fn end_clip(self: &mut Encoding);
append(self: &mut Encoding, other: &Encoding)229*c8dee2aaSAndroid Build Coastguard Worker         fn append(self: &mut Encoding, other: &Encoding);
prepare_render( self: &Encoding, width: u32, height: u32, background: &Color, ) -> Box<RenderConfiguration>230*c8dee2aaSAndroid Build Coastguard Worker         fn prepare_render(
231*c8dee2aaSAndroid Build Coastguard Worker             self: &Encoding,
232*c8dee2aaSAndroid Build Coastguard Worker             width: u32,
233*c8dee2aaSAndroid Build Coastguard Worker             height: u32,
234*c8dee2aaSAndroid Build Coastguard Worker             background: &Color,
235*c8dee2aaSAndroid Build Coastguard Worker         ) -> Box<RenderConfiguration>;
236*c8dee2aaSAndroid Build Coastguard Worker 
237*c8dee2aaSAndroid Build Coastguard Worker         /// Resolved scene encoding metadata that can be used to initiate pipeline dispatches.
238*c8dee2aaSAndroid Build Coastguard Worker         type RenderConfiguration;
config_uniform_buffer_size(self: &RenderConfiguration) -> usize239*c8dee2aaSAndroid Build Coastguard Worker         fn config_uniform_buffer_size(self: &RenderConfiguration) -> usize;
scene_buffer_size(self: &RenderConfiguration) -> usize240*c8dee2aaSAndroid Build Coastguard Worker         fn scene_buffer_size(self: &RenderConfiguration) -> usize;
write_config_uniform_buffer(self: &RenderConfiguration, out_buffer: &mut [u8]) -> bool241*c8dee2aaSAndroid Build Coastguard Worker         fn write_config_uniform_buffer(self: &RenderConfiguration, out_buffer: &mut [u8]) -> bool;
write_scene_buffer(self: &RenderConfiguration, out_buffer: &mut [u8]) -> bool242*c8dee2aaSAndroid Build Coastguard Worker         fn write_scene_buffer(self: &RenderConfiguration, out_buffer: &mut [u8]) -> bool;
workgroup_counts(self: &RenderConfiguration) -> DispatchInfo243*c8dee2aaSAndroid Build Coastguard Worker         fn workgroup_counts(self: &RenderConfiguration) -> DispatchInfo;
buffer_sizes(self: &RenderConfiguration) -> BufferSizes244*c8dee2aaSAndroid Build Coastguard Worker         fn buffer_sizes(self: &RenderConfiguration) -> BufferSizes;
245*c8dee2aaSAndroid Build Coastguard Worker 
246*c8dee2aaSAndroid Build Coastguard Worker         /// Sample mask lookup tables used in MSAA modes. This data can be computed once and reused
247*c8dee2aaSAndroid Build Coastguard Worker         /// across all renders.
build_mask_lut_16() -> Vec<u8>248*c8dee2aaSAndroid Build Coastguard Worker         fn build_mask_lut_16() -> Vec<u8>;
build_mask_lut_8() -> Vec<u8>249*c8dee2aaSAndroid Build Coastguard Worker         fn build_mask_lut_8() -> Vec<u8>;
250*c8dee2aaSAndroid Build Coastguard Worker     }
251*c8dee2aaSAndroid Build Coastguard Worker 
252*c8dee2aaSAndroid Build Coastguard Worker     unsafe extern "C++" {
253*c8dee2aaSAndroid Build Coastguard Worker         include!("third_party/vello/cpp/path_iterator.h");
254*c8dee2aaSAndroid Build Coastguard Worker 
255*c8dee2aaSAndroid Build Coastguard Worker         type PathIterator;
next_element(self: Pin<&mut PathIterator>, out_elem: *mut PathElement) -> bool256*c8dee2aaSAndroid Build Coastguard Worker         unsafe fn next_element(self: Pin<&mut PathIterator>, out_elem: *mut PathElement) -> bool;
257*c8dee2aaSAndroid Build Coastguard Worker     }
258*c8dee2aaSAndroid Build Coastguard Worker }
259*c8dee2aaSAndroid Build Coastguard Worker 
260*c8dee2aaSAndroid Build Coastguard Worker mod encoding;
261*c8dee2aaSAndroid Build Coastguard Worker mod shaders;
262*c8dee2aaSAndroid Build Coastguard Worker 
263*c8dee2aaSAndroid Build Coastguard Worker use {
264*c8dee2aaSAndroid Build Coastguard Worker     encoding::{new_encoding, Encoding, RenderConfiguration},
265*c8dee2aaSAndroid Build Coastguard Worker     shaders::{shader, Shader},
266*c8dee2aaSAndroid Build Coastguard Worker };
267*c8dee2aaSAndroid Build Coastguard Worker 
build_mask_lut_16() -> Vec<u8>268*c8dee2aaSAndroid Build Coastguard Worker fn build_mask_lut_16() -> Vec<u8> {
269*c8dee2aaSAndroid Build Coastguard Worker     vello_encoding::make_mask_lut_16()
270*c8dee2aaSAndroid Build Coastguard Worker }
271*c8dee2aaSAndroid Build Coastguard Worker 
build_mask_lut_8() -> Vec<u8>272*c8dee2aaSAndroid Build Coastguard Worker fn build_mask_lut_8() -> Vec<u8> {
273*c8dee2aaSAndroid Build Coastguard Worker     vello_encoding::make_mask_lut()
274*c8dee2aaSAndroid Build Coastguard Worker }
275