| // Copyright 2023 the Vello Authors |
| // SPDX-License-Identifier: Apache-2.0 OR MIT OR Unlicense |
| |
| use vello_encoding::{BumpAllocators, ConfigUniform, Path, Tile}; |
| |
| use crate::cpu_dispatch::CpuBinding; |
| |
| fn backdrop_main(config: &ConfigUniform, _: &BumpAllocators, paths: &[Path], tiles: &mut [Tile]) { |
| for drawobj_ix in 0..config.layout.n_draw_objects { |
| let path = paths[drawobj_ix as usize]; |
| let width = path.bbox[2] - path.bbox[0]; |
| let height = path.bbox[3] - path.bbox[1]; |
| let base = path.tiles; |
| for y in 0..height { |
| let mut sum = 0; |
| for x in 0..width { |
| let tile = &mut tiles[(base + y * width + x) as usize]; |
| sum += tile.backdrop; |
| tile.backdrop = sum; |
| } |
| } |
| } |
| } |
| |
| pub fn backdrop(_n_wg: u32, resources: &[CpuBinding]) { |
| let config = resources[0].as_typed(); |
| let bump = resources[1].as_typed(); |
| let paths = resources[2].as_slice(); |
| let mut tiles = resources[3].as_slice_mut(); |
| backdrop_main(&config, &bump, &paths, &mut tiles); |
| } |