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:
Elias Naur 2020-09-27 18:57:53 +02:00
parent fa9bf0dc2b
commit 9be0faba6f
5 changed files with 0 additions and 342 deletions

View file

@ -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],

View file

@ -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

View file

@ -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.

View file

@ -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];