mirror of
https://github.com/italicsjenga/vello.git
synced 2025-01-10 04:31:30 +11:00
piet-gpu-types: remove unused scene elements
Delete image compute shader as well; it is unused. Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
parent
fa9bf0dc2b
commit
9be0faba6f
|
@ -1,60 +1,10 @@
|
|||
use piet_gpu_derive::piet_gpu;
|
||||
|
||||
pub use self::scene::{
|
||||
Bbox, PietCircle, PietFill, PietItem, PietStrokeLine, PietStrokePolyLine, Point, SimpleGroup,
|
||||
};
|
||||
|
||||
pub use self::scene::{CubicSeg, Element, Fill, LineSeg, QuadSeg, SetLineWidth, Stroke, Transform};
|
||||
|
||||
piet_gpu! {
|
||||
#[rust_encode]
|
||||
mod scene {
|
||||
struct Bbox {
|
||||
bbox: [i16; 4],
|
||||
}
|
||||
struct Point {
|
||||
xy: [f32; 2],
|
||||
}
|
||||
struct SimpleGroup {
|
||||
n_items: u32,
|
||||
// Note: both of the following items are actually arrays
|
||||
items: Ref<PietItem>,
|
||||
bboxes: Ref<Bbox>,
|
||||
offset: Point,
|
||||
}
|
||||
struct PietCircle {
|
||||
rgba_color: u32,
|
||||
center: Point,
|
||||
radius: f32,
|
||||
}
|
||||
struct PietStrokeLine {
|
||||
flags: u32,
|
||||
rgba_color: u32,
|
||||
width: f32,
|
||||
start: Point,
|
||||
end: Point,
|
||||
}
|
||||
struct PietFill {
|
||||
flags: u32,
|
||||
rgba_color: u32,
|
||||
n_points: u32,
|
||||
points: Ref<Point>,
|
||||
}
|
||||
struct PietStrokePolyLine {
|
||||
rgba_color: u32,
|
||||
width: f32,
|
||||
n_points: u32,
|
||||
points: Ref<Point>,
|
||||
}
|
||||
enum PietItem {
|
||||
Group(SimpleGroup),
|
||||
Circle(PietCircle),
|
||||
Line(PietStrokeLine),
|
||||
Fill(PietFill),
|
||||
Poly(PietStrokePolyLine),
|
||||
}
|
||||
|
||||
// New approach follows (above to be deleted)
|
||||
struct LineSeg {
|
||||
p0: [f32; 2],
|
||||
p1: [f32; 2],
|
||||
|
|
|
@ -7,8 +7,6 @@ glslang_validator = glslangValidator
|
|||
rule glsl
|
||||
command = $glslang_validator -V -o $out $in
|
||||
|
||||
build image.spv: glsl image.comp | scene.h
|
||||
|
||||
|
||||
build elements.spv: glsl elements.comp | scene.h state.h annotated.h
|
||||
|
||||
|
|
|
@ -1,54 +0,0 @@
|
|||
// A simple kernel to create an image.
|
||||
|
||||
// Right now, this kernel stores the image in a buffer, but a better
|
||||
// plan is to use a texture. This is because of limited support.
|
||||
|
||||
#version 450
|
||||
#extension GL_GOOGLE_include_directive : enable
|
||||
|
||||
layout(local_size_x = 16, local_size_y = 16) in;
|
||||
|
||||
layout(set = 0, binding = 0) readonly buffer SceneBuf {
|
||||
uint[] scene;
|
||||
};
|
||||
|
||||
layout(set = 0, binding = 1) buffer ImageBuf {
|
||||
uint[] image;
|
||||
};
|
||||
|
||||
#include "scene.h"
|
||||
|
||||
// TODO: make the image size dynamic.
|
||||
#define IMAGE_WIDTH 2048
|
||||
#define IMAGE_HEIGHT 1535
|
||||
|
||||
void main() {
|
||||
uvec2 xy_uint = gl_GlobalInvocationID.xy;
|
||||
vec2 xy = vec2(xy_uint);
|
||||
vec2 uv = xy * vec2(1.0 / IMAGE_WIDTH, 1.0 / IMAGE_HEIGHT);
|
||||
vec3 rgb = uv.xyy;
|
||||
|
||||
// Render the scene. Right now, every pixel traverses the scene graph,
|
||||
// which is horribly wasteful, but the goal is to get *some* output and
|
||||
// then optimize.
|
||||
|
||||
SimpleGroup group = PietItem_Group_read(PietItemRef(0));
|
||||
for (uint i = 0; i < group.n_items; i++) {
|
||||
PietItemRef item_ref = PietItem_index(group.items, i);
|
||||
uint tag = PietItem_tag(item_ref);
|
||||
tag = PietItem_Circle;
|
||||
if (tag == PietItem_Circle) {
|
||||
PietCircle circle = PietItem_Circle_read(item_ref);
|
||||
float r = length(xy + vec2(0.5, 0.5) - circle.center.xy);
|
||||
float alpha = clamp(0.5 + circle.radius - r, 0.0, 1.0);
|
||||
vec4 fg_rgba = unpackUnorm4x8(circle.rgba_color);
|
||||
// TODO: sRGB
|
||||
rgb = mix(rgb, fg_rgba.rgb, alpha * fg_rgba.a);
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: sRGB
|
||||
uvec4 s = uvec4(round(vec4(rgb, 1.0) * 255.0));
|
||||
uint rgba_packed = s.r | (s.g << 8) | (s.b << 16) | (s.a << 24);
|
||||
image[xy_uint.y * IMAGE_WIDTH + xy_uint.x] = rgba_packed;
|
||||
}
|
Binary file not shown.
|
@ -1,37 +1,5 @@
|
|||
// Code auto-generated by piet-gpu-derive
|
||||
|
||||
struct BboxRef {
|
||||
uint offset;
|
||||
};
|
||||
|
||||
struct PointRef {
|
||||
uint offset;
|
||||
};
|
||||
|
||||
struct SimpleGroupRef {
|
||||
uint offset;
|
||||
};
|
||||
|
||||
struct PietCircleRef {
|
||||
uint offset;
|
||||
};
|
||||
|
||||
struct PietStrokeLineRef {
|
||||
uint offset;
|
||||
};
|
||||
|
||||
struct PietFillRef {
|
||||
uint offset;
|
||||
};
|
||||
|
||||
struct PietStrokePolyLineRef {
|
||||
uint offset;
|
||||
};
|
||||
|
||||
struct PietItemRef {
|
||||
uint offset;
|
||||
};
|
||||
|
||||
struct LineSegRef {
|
||||
uint offset;
|
||||
};
|
||||
|
@ -64,102 +32,6 @@ struct ElementRef {
|
|||
uint offset;
|
||||
};
|
||||
|
||||
struct Bbox {
|
||||
ivec4 bbox;
|
||||
};
|
||||
|
||||
#define Bbox_size 8
|
||||
|
||||
BboxRef Bbox_index(BboxRef ref, uint index) {
|
||||
return BboxRef(ref.offset + index * Bbox_size);
|
||||
}
|
||||
|
||||
struct Point {
|
||||
vec2 xy;
|
||||
};
|
||||
|
||||
#define Point_size 8
|
||||
|
||||
PointRef Point_index(PointRef ref, uint index) {
|
||||
return PointRef(ref.offset + index * Point_size);
|
||||
}
|
||||
|
||||
struct SimpleGroup {
|
||||
uint n_items;
|
||||
PietItemRef items;
|
||||
BboxRef bboxes;
|
||||
Point offset;
|
||||
};
|
||||
|
||||
#define SimpleGroup_size 20
|
||||
|
||||
SimpleGroupRef SimpleGroup_index(SimpleGroupRef ref, uint index) {
|
||||
return SimpleGroupRef(ref.offset + index * SimpleGroup_size);
|
||||
}
|
||||
|
||||
struct PietCircle {
|
||||
uint rgba_color;
|
||||
Point center;
|
||||
float radius;
|
||||
};
|
||||
|
||||
#define PietCircle_size 16
|
||||
|
||||
PietCircleRef PietCircle_index(PietCircleRef ref, uint index) {
|
||||
return PietCircleRef(ref.offset + index * PietCircle_size);
|
||||
}
|
||||
|
||||
struct PietStrokeLine {
|
||||
uint flags;
|
||||
uint rgba_color;
|
||||
float width;
|
||||
Point start;
|
||||
Point end;
|
||||
};
|
||||
|
||||
#define PietStrokeLine_size 28
|
||||
|
||||
PietStrokeLineRef PietStrokeLine_index(PietStrokeLineRef ref, uint index) {
|
||||
return PietStrokeLineRef(ref.offset + index * PietStrokeLine_size);
|
||||
}
|
||||
|
||||
struct PietFill {
|
||||
uint flags;
|
||||
uint rgba_color;
|
||||
uint n_points;
|
||||
PointRef points;
|
||||
};
|
||||
|
||||
#define PietFill_size 16
|
||||
|
||||
PietFillRef PietFill_index(PietFillRef ref, uint index) {
|
||||
return PietFillRef(ref.offset + index * PietFill_size);
|
||||
}
|
||||
|
||||
struct PietStrokePolyLine {
|
||||
uint rgba_color;
|
||||
float width;
|
||||
uint n_points;
|
||||
PointRef points;
|
||||
};
|
||||
|
||||
#define PietStrokePolyLine_size 16
|
||||
|
||||
PietStrokePolyLineRef PietStrokePolyLine_index(PietStrokePolyLineRef ref, uint index) {
|
||||
return PietStrokePolyLineRef(ref.offset + index * PietStrokePolyLine_size);
|
||||
}
|
||||
|
||||
#define PietItem_Group 0
|
||||
#define PietItem_Circle 1
|
||||
#define PietItem_Line 2
|
||||
#define PietItem_Fill 3
|
||||
#define PietItem_Poly 4
|
||||
#define PietItem_size 32
|
||||
|
||||
PietItemRef PietItem_index(PietItemRef ref, uint index) {
|
||||
return PietItemRef(ref.offset + index * PietItem_size);
|
||||
}
|
||||
|
||||
struct LineSeg {
|
||||
vec2 p0;
|
||||
vec2 p1;
|
||||
|
@ -254,114 +126,6 @@ ElementRef Element_index(ElementRef ref, uint index) {
|
|||
return ElementRef(ref.offset + index * Element_size);
|
||||
}
|
||||
|
||||
Bbox Bbox_read(BboxRef ref) {
|
||||
uint ix = ref.offset >> 2;
|
||||
uint raw0 = scene[ix + 0];
|
||||
uint raw1 = scene[ix + 1];
|
||||
Bbox s;
|
||||
s.bbox = ivec4(int(raw0 << 16) >> 16, int(raw0) >> 16, int(raw1 << 16) >> 16, int(raw1) >> 16);
|
||||
return s;
|
||||
}
|
||||
|
||||
Point Point_read(PointRef ref) {
|
||||
uint ix = ref.offset >> 2;
|
||||
uint raw0 = scene[ix + 0];
|
||||
uint raw1 = scene[ix + 1];
|
||||
Point s;
|
||||
s.xy = vec2(uintBitsToFloat(raw0), uintBitsToFloat(raw1));
|
||||
return s;
|
||||
}
|
||||
|
||||
SimpleGroup SimpleGroup_read(SimpleGroupRef ref) {
|
||||
uint ix = ref.offset >> 2;
|
||||
uint raw0 = scene[ix + 0];
|
||||
uint raw1 = scene[ix + 1];
|
||||
uint raw2 = scene[ix + 2];
|
||||
SimpleGroup s;
|
||||
s.n_items = raw0;
|
||||
s.items = PietItemRef(raw1);
|
||||
s.bboxes = BboxRef(raw2);
|
||||
s.offset = Point_read(PointRef(ref.offset + 12));
|
||||
return s;
|
||||
}
|
||||
|
||||
PietCircle PietCircle_read(PietCircleRef ref) {
|
||||
uint ix = ref.offset >> 2;
|
||||
uint raw0 = scene[ix + 0];
|
||||
uint raw3 = scene[ix + 3];
|
||||
PietCircle s;
|
||||
s.rgba_color = raw0;
|
||||
s.center = Point_read(PointRef(ref.offset + 4));
|
||||
s.radius = uintBitsToFloat(raw3);
|
||||
return s;
|
||||
}
|
||||
|
||||
PietStrokeLine PietStrokeLine_read(PietStrokeLineRef ref) {
|
||||
uint ix = ref.offset >> 2;
|
||||
uint raw0 = scene[ix + 0];
|
||||
uint raw1 = scene[ix + 1];
|
||||
uint raw2 = scene[ix + 2];
|
||||
PietStrokeLine s;
|
||||
s.flags = raw0;
|
||||
s.rgba_color = raw1;
|
||||
s.width = uintBitsToFloat(raw2);
|
||||
s.start = Point_read(PointRef(ref.offset + 12));
|
||||
s.end = Point_read(PointRef(ref.offset + 20));
|
||||
return s;
|
||||
}
|
||||
|
||||
PietFill PietFill_read(PietFillRef ref) {
|
||||
uint ix = ref.offset >> 2;
|
||||
uint raw0 = scene[ix + 0];
|
||||
uint raw1 = scene[ix + 1];
|
||||
uint raw2 = scene[ix + 2];
|
||||
uint raw3 = scene[ix + 3];
|
||||
PietFill s;
|
||||
s.flags = raw0;
|
||||
s.rgba_color = raw1;
|
||||
s.n_points = raw2;
|
||||
s.points = PointRef(raw3);
|
||||
return s;
|
||||
}
|
||||
|
||||
PietStrokePolyLine PietStrokePolyLine_read(PietStrokePolyLineRef ref) {
|
||||
uint ix = ref.offset >> 2;
|
||||
uint raw0 = scene[ix + 0];
|
||||
uint raw1 = scene[ix + 1];
|
||||
uint raw2 = scene[ix + 2];
|
||||
uint raw3 = scene[ix + 3];
|
||||
PietStrokePolyLine s;
|
||||
s.rgba_color = raw0;
|
||||
s.width = uintBitsToFloat(raw1);
|
||||
s.n_points = raw2;
|
||||
s.points = PointRef(raw3);
|
||||
return s;
|
||||
}
|
||||
|
||||
uint PietItem_tag(PietItemRef ref) {
|
||||
return scene[ref.offset >> 2];
|
||||
}
|
||||
|
||||
SimpleGroup PietItem_Group_read(PietItemRef ref) {
|
||||
return SimpleGroup_read(SimpleGroupRef(ref.offset + 4));
|
||||
}
|
||||
|
||||
PietCircle PietItem_Circle_read(PietItemRef ref) {
|
||||
return PietCircle_read(PietCircleRef(ref.offset + 4));
|
||||
}
|
||||
|
||||
PietStrokeLine PietItem_Line_read(PietItemRef ref) {
|
||||
return PietStrokeLine_read(PietStrokeLineRef(ref.offset + 4));
|
||||
}
|
||||
|
||||
PietFill PietItem_Fill_read(PietItemRef ref) {
|
||||
return PietFill_read(PietFillRef(ref.offset + 4));
|
||||
}
|
||||
|
||||
PietStrokePolyLine PietItem_Poly_read(PietItemRef ref) {
|
||||
return PietStrokePolyLine_read(PietStrokePolyLineRef(ref.offset + 4));
|
||||
}
|
||||
|
||||
LineSeg LineSeg_read(LineSegRef ref) {
|
||||
uint ix = ref.offset >> 2;
|
||||
uint raw0 = scene[ix + 0];
|
||||
|
|
Loading…
Reference in a new issue