blob: d0b41cbed24e06fa5efeb823e6c901965b65b3d1 [file] [log] [blame] [edit]
// Copyright 2022 the Vello Authors
// SPDX-License-Identifier: Apache-2.0 OR MIT OR Unlicense
// Layout of per-tile command list
// Initial allocation, in u32's.
const PTCL_INITIAL_ALLOC = 64u;
const PTCL_INCREMENT = 256u;
// Amount of space taken by jump
const PTCL_HEADROOM = 2u;
// Tags for PTCL commands
const CMD_END = 0u;
const CMD_FILL = 1u;
const CMD_STROKE = 2u;
const CMD_SOLID = 3u;
const CMD_COLOR = 5u;
const CMD_LIN_GRAD = 6u;
const CMD_RAD_GRAD = 7u;
const CMD_SWEEP_GRAD = 8u;
const CMD_IMAGE = 9u;
const CMD_BEGIN_CLIP = 10u;
const CMD_END_CLIP = 11u;
const CMD_JUMP = 12u;
const CMD_BLUR_RECT = 13u;
// The individual PTCL structs are written here, but read/write is by
// hand in the relevant shaders
struct CmdFill {
size_and_rule: u32,
seg_data: u32,
backdrop: i32,
}
struct CmdStroke {
tile: u32,
half_width: f32,
}
struct CmdJump {
new_ix: u32,
}
struct CmdColor {
rgba_color: u32,
}
struct CmdBlurRect {
// Solid fill color.
rgba_color: u32,
// 2x2 transformation matrix (inverse).
matrx: vec4<f32>,
// 2D translation (inverse)
xlat: vec2<f32>,
// Rounded rectangle properties.
width: f32,
height: f32,
radius: f32,
// Gaussian filter standard deviation
std_dev: f32,
}
struct CmdLinGrad {
index: u32,
extend_mode: u32,
line_x: f32,
line_y: f32,
line_c: f32,
}
struct CmdRadGrad {
index: u32,
extend_mode: u32,
matrx: vec4<f32>,
xlat: vec2<f32>,
focal_x: f32,
radius: f32,
kind: u32,
flags: u32,
}
struct CmdSweepGrad {
index: u32,
extend_mode: u32,
matrx: vec4<f32>,
xlat: vec2<f32>,
t0: f32,
t1: f32,
}
struct CmdImage {
matrx: vec4<f32>,
xlat: vec2<f32>,
atlas_offset: vec2<f32>,
extents: vec2<f32>,
x_extend_mode: u32,
y_extend_mode: u32,
quality: u32,
alpha: f32,
}
struct CmdEndClip {
blend: u32,
alpha: f32,
}