mirror of
https://github.com/italicsjenga/vello.git
synced 2025-01-10 20:51:29 +11:00
6f707c4c62
WIP. Most of the GPU-side work should be done (though it's not tested end-to-end and it's certainly possible I missed something), but still needs work on encoding side.
349 lines
7.8 KiB
C
349 lines
7.8 KiB
C
// SPDX-License-Identifier: Apache-2.0 OR MIT OR Unlicense
|
|
|
|
// Code auto-generated by piet-gpu-derive
|
|
|
|
struct LineSegRef {
|
|
uint offset;
|
|
};
|
|
|
|
struct QuadSegRef {
|
|
uint offset;
|
|
};
|
|
|
|
struct CubicSegRef {
|
|
uint offset;
|
|
};
|
|
|
|
struct FillColorRef {
|
|
uint offset;
|
|
};
|
|
|
|
struct FillLinGradientRef {
|
|
uint offset;
|
|
};
|
|
|
|
struct FillImageRef {
|
|
uint offset;
|
|
};
|
|
|
|
struct SetLineWidthRef {
|
|
uint offset;
|
|
};
|
|
|
|
struct TransformRef {
|
|
uint offset;
|
|
};
|
|
|
|
struct ClipRef {
|
|
uint offset;
|
|
};
|
|
|
|
struct SetFillModeRef {
|
|
uint offset;
|
|
};
|
|
|
|
struct ElementRef {
|
|
uint offset;
|
|
};
|
|
|
|
struct LineSeg {
|
|
vec2 p0;
|
|
vec2 p1;
|
|
};
|
|
|
|
#define LineSeg_size 16
|
|
|
|
LineSegRef LineSeg_index(LineSegRef ref, uint index) {
|
|
return LineSegRef(ref.offset + index * LineSeg_size);
|
|
}
|
|
|
|
struct QuadSeg {
|
|
vec2 p0;
|
|
vec2 p1;
|
|
vec2 p2;
|
|
};
|
|
|
|
#define QuadSeg_size 24
|
|
|
|
QuadSegRef QuadSeg_index(QuadSegRef ref, uint index) {
|
|
return QuadSegRef(ref.offset + index * QuadSeg_size);
|
|
}
|
|
|
|
struct CubicSeg {
|
|
vec2 p0;
|
|
vec2 p1;
|
|
vec2 p2;
|
|
vec2 p3;
|
|
};
|
|
|
|
#define CubicSeg_size 32
|
|
|
|
CubicSegRef CubicSeg_index(CubicSegRef ref, uint index) {
|
|
return CubicSegRef(ref.offset + index * CubicSeg_size);
|
|
}
|
|
|
|
struct FillColor {
|
|
uint rgba_color;
|
|
};
|
|
|
|
#define FillColor_size 4
|
|
|
|
FillColorRef FillColor_index(FillColorRef ref, uint index) {
|
|
return FillColorRef(ref.offset + index * FillColor_size);
|
|
}
|
|
|
|
struct FillLinGradient {
|
|
uint index;
|
|
vec2 p0;
|
|
vec2 p1;
|
|
};
|
|
|
|
#define FillLinGradient_size 20
|
|
|
|
FillLinGradientRef FillLinGradient_index(FillLinGradientRef ref, uint index) {
|
|
return FillLinGradientRef(ref.offset + index * FillLinGradient_size);
|
|
}
|
|
|
|
struct FillImage {
|
|
uint index;
|
|
ivec2 offset;
|
|
};
|
|
|
|
#define FillImage_size 8
|
|
|
|
FillImageRef FillImage_index(FillImageRef ref, uint index) {
|
|
return FillImageRef(ref.offset + index * FillImage_size);
|
|
}
|
|
|
|
struct SetLineWidth {
|
|
float width;
|
|
};
|
|
|
|
#define SetLineWidth_size 4
|
|
|
|
SetLineWidthRef SetLineWidth_index(SetLineWidthRef ref, uint index) {
|
|
return SetLineWidthRef(ref.offset + index * SetLineWidth_size);
|
|
}
|
|
|
|
struct Transform {
|
|
vec4 mat;
|
|
vec2 translate;
|
|
};
|
|
|
|
#define Transform_size 24
|
|
|
|
TransformRef Transform_index(TransformRef ref, uint index) {
|
|
return TransformRef(ref.offset + index * Transform_size);
|
|
}
|
|
|
|
struct Clip {
|
|
vec4 bbox;
|
|
};
|
|
|
|
#define Clip_size 16
|
|
|
|
ClipRef Clip_index(ClipRef ref, uint index) {
|
|
return ClipRef(ref.offset + index * Clip_size);
|
|
}
|
|
|
|
struct SetFillMode {
|
|
uint fill_mode;
|
|
};
|
|
|
|
#define SetFillMode_size 4
|
|
|
|
SetFillModeRef SetFillMode_index(SetFillModeRef ref, uint index) {
|
|
return SetFillModeRef(ref.offset + index * SetFillMode_size);
|
|
}
|
|
|
|
#define Element_Nop 0
|
|
#define Element_Line 1
|
|
#define Element_Quad 2
|
|
#define Element_Cubic 3
|
|
#define Element_FillColor 4
|
|
#define Element_FillLinGradient 5
|
|
#define Element_FillImage 6
|
|
#define Element_SetLineWidth 7
|
|
#define Element_Transform 8
|
|
#define Element_BeginClip 9
|
|
#define Element_EndClip 10
|
|
#define Element_SetFillMode 11
|
|
#define Element_size 36
|
|
|
|
ElementRef Element_index(ElementRef ref, uint index) {
|
|
return ElementRef(ref.offset + index * Element_size);
|
|
}
|
|
|
|
struct ElementTag {
|
|
uint tag;
|
|
uint flags;
|
|
};
|
|
|
|
LineSeg LineSeg_read(LineSegRef 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];
|
|
LineSeg s;
|
|
s.p0 = vec2(uintBitsToFloat(raw0), uintBitsToFloat(raw1));
|
|
s.p1 = vec2(uintBitsToFloat(raw2), uintBitsToFloat(raw3));
|
|
return s;
|
|
}
|
|
|
|
QuadSeg QuadSeg_read(QuadSegRef 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];
|
|
uint raw4 = scene[ix + 4];
|
|
uint raw5 = scene[ix + 5];
|
|
QuadSeg s;
|
|
s.p0 = vec2(uintBitsToFloat(raw0), uintBitsToFloat(raw1));
|
|
s.p1 = vec2(uintBitsToFloat(raw2), uintBitsToFloat(raw3));
|
|
s.p2 = vec2(uintBitsToFloat(raw4), uintBitsToFloat(raw5));
|
|
return s;
|
|
}
|
|
|
|
CubicSeg CubicSeg_read(CubicSegRef 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];
|
|
uint raw4 = scene[ix + 4];
|
|
uint raw5 = scene[ix + 5];
|
|
uint raw6 = scene[ix + 6];
|
|
uint raw7 = scene[ix + 7];
|
|
CubicSeg s;
|
|
s.p0 = vec2(uintBitsToFloat(raw0), uintBitsToFloat(raw1));
|
|
s.p1 = vec2(uintBitsToFloat(raw2), uintBitsToFloat(raw3));
|
|
s.p2 = vec2(uintBitsToFloat(raw4), uintBitsToFloat(raw5));
|
|
s.p3 = vec2(uintBitsToFloat(raw6), uintBitsToFloat(raw7));
|
|
return s;
|
|
}
|
|
|
|
FillColor FillColor_read(FillColorRef ref) {
|
|
uint ix = ref.offset >> 2;
|
|
uint raw0 = scene[ix + 0];
|
|
FillColor s;
|
|
s.rgba_color = raw0;
|
|
return s;
|
|
}
|
|
|
|
FillLinGradient FillLinGradient_read(FillLinGradientRef 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];
|
|
uint raw4 = scene[ix + 4];
|
|
FillLinGradient s;
|
|
s.index = raw0;
|
|
s.p0 = vec2(uintBitsToFloat(raw1), uintBitsToFloat(raw2));
|
|
s.p1 = vec2(uintBitsToFloat(raw3), uintBitsToFloat(raw4));
|
|
return s;
|
|
}
|
|
|
|
FillImage FillImage_read(FillImageRef ref) {
|
|
uint ix = ref.offset >> 2;
|
|
uint raw0 = scene[ix + 0];
|
|
uint raw1 = scene[ix + 1];
|
|
FillImage s;
|
|
s.index = raw0;
|
|
s.offset = ivec2(int(raw1 << 16) >> 16, int(raw1) >> 16);
|
|
return s;
|
|
}
|
|
|
|
SetLineWidth SetLineWidth_read(SetLineWidthRef ref) {
|
|
uint ix = ref.offset >> 2;
|
|
uint raw0 = scene[ix + 0];
|
|
SetLineWidth s;
|
|
s.width = uintBitsToFloat(raw0);
|
|
return s;
|
|
}
|
|
|
|
Transform Transform_read(TransformRef 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];
|
|
uint raw4 = scene[ix + 4];
|
|
uint raw5 = scene[ix + 5];
|
|
Transform s;
|
|
s.mat = vec4(uintBitsToFloat(raw0), uintBitsToFloat(raw1), uintBitsToFloat(raw2), uintBitsToFloat(raw3));
|
|
s.translate = vec2(uintBitsToFloat(raw4), uintBitsToFloat(raw5));
|
|
return s;
|
|
}
|
|
|
|
Clip Clip_read(ClipRef 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];
|
|
Clip s;
|
|
s.bbox = vec4(uintBitsToFloat(raw0), uintBitsToFloat(raw1), uintBitsToFloat(raw2), uintBitsToFloat(raw3));
|
|
return s;
|
|
}
|
|
|
|
SetFillMode SetFillMode_read(SetFillModeRef ref) {
|
|
uint ix = ref.offset >> 2;
|
|
uint raw0 = scene[ix + 0];
|
|
SetFillMode s;
|
|
s.fill_mode = raw0;
|
|
return s;
|
|
}
|
|
|
|
ElementTag Element_tag(ElementRef ref) {
|
|
uint tag_and_flags = scene[ref.offset >> 2];
|
|
return ElementTag(tag_and_flags & 0xffff, tag_and_flags >> 16);
|
|
}
|
|
|
|
LineSeg Element_Line_read(ElementRef ref) {
|
|
return LineSeg_read(LineSegRef(ref.offset + 4));
|
|
}
|
|
|
|
QuadSeg Element_Quad_read(ElementRef ref) {
|
|
return QuadSeg_read(QuadSegRef(ref.offset + 4));
|
|
}
|
|
|
|
CubicSeg Element_Cubic_read(ElementRef ref) {
|
|
return CubicSeg_read(CubicSegRef(ref.offset + 4));
|
|
}
|
|
|
|
FillColor Element_FillColor_read(ElementRef ref) {
|
|
return FillColor_read(FillColorRef(ref.offset + 4));
|
|
}
|
|
|
|
FillLinGradient Element_FillLinGradient_read(ElementRef ref) {
|
|
return FillLinGradient_read(FillLinGradientRef(ref.offset + 4));
|
|
}
|
|
|
|
FillImage Element_FillImage_read(ElementRef ref) {
|
|
return FillImage_read(FillImageRef(ref.offset + 4));
|
|
}
|
|
|
|
SetLineWidth Element_SetLineWidth_read(ElementRef ref) {
|
|
return SetLineWidth_read(SetLineWidthRef(ref.offset + 4));
|
|
}
|
|
|
|
Transform Element_Transform_read(ElementRef ref) {
|
|
return Transform_read(TransformRef(ref.offset + 4));
|
|
}
|
|
|
|
Clip Element_BeginClip_read(ElementRef ref) {
|
|
return Clip_read(ClipRef(ref.offset + 4));
|
|
}
|
|
|
|
Clip Element_EndClip_read(ElementRef ref) {
|
|
return Clip_read(ClipRef(ref.offset + 4));
|
|
}
|
|
|
|
SetFillMode Element_SetFillMode_read(ElementRef ref) {
|
|
return SetFillMode_read(SetFillModeRef(ref.offset + 4));
|
|
}
|
|
|