1#include <simd/simd.h>
2
3typedef struct {
4 vector_float2 viewport_size;
5} GPUIUniforms;
6
7typedef enum {
8 GPUIQuadInputIndexVertices = 0,
9 GPUIQuadInputIndexQuads = 1,
10 GPUIQuadInputIndexUniforms = 2,
11} GPUIQuadInputIndex;
12
13typedef struct {
14 vector_float2 origin;
15 vector_float2 size;
16 vector_uchar4 background_color;
17 float border_top;
18 float border_right;
19 float border_bottom;
20 float border_left;
21 vector_uchar4 border_color;
22 float corner_radius_top_left;
23 float corner_radius_top_right;
24 float corner_radius_bottom_right;
25 float corner_radius_bottom_left;
26} GPUIQuad;
27
28typedef enum {
29 GPUIShadowInputIndexVertices = 0,
30 GPUIShadowInputIndexShadows = 1,
31 GPUIShadowInputIndexUniforms = 2,
32} GPUIShadowInputIndex;
33
34typedef struct {
35 vector_float2 origin;
36 vector_float2 size;
37 float corner_radius_top_left;
38 float corner_radius_top_right;
39 float corner_radius_bottom_right;
40 float corner_radius_bottom_left;
41 float sigma;
42 vector_uchar4 color;
43} GPUIShadow;
44
45typedef enum {
46 GPUISpriteVertexInputIndexVertices = 0,
47 GPUISpriteVertexInputIndexSprites = 1,
48 GPUISpriteVertexInputIndexViewportSize = 2,
49 GPUISpriteVertexInputIndexAtlasSize = 3,
50} GPUISpriteVertexInputIndex;
51
52typedef enum {
53 GPUISpriteFragmentInputIndexAtlas = 0,
54} GPUISpriteFragmentInputIndex;
55
56typedef struct {
57 vector_float2 origin;
58 vector_float2 target_size;
59 vector_float2 source_size;
60 vector_float2 atlas_origin;
61 vector_uchar4 color;
62 uint8_t compute_winding;
63} GPUISprite;
64
65typedef enum {
66 GPUIPathAtlasVertexInputIndexVertices = 0,
67 GPUIPathAtlasVertexInputIndexAtlasSize = 1,
68} GPUIPathAtlasVertexInputIndex;
69
70typedef struct {
71 vector_float2 xy_position;
72 vector_float2 st_position;
73 vector_float2 clip_rect_origin;
74 vector_float2 clip_rect_size;
75} GPUIPathVertex;
76
77typedef enum {
78 GPUIImageVertexInputIndexVertices = 0,
79 GPUIImageVertexInputIndexImages = 1,
80 GPUIImageVertexInputIndexViewportSize = 2,
81 GPUIImageVertexInputIndexAtlasSize = 3,
82} GPUIImageVertexInputIndex;
83
84typedef enum {
85 GPUIImageFragmentInputIndexAtlas = 0,
86} GPUIImageFragmentInputIndex;
87
88typedef struct {
89 vector_float2 origin;
90 vector_float2 target_size;
91 vector_float2 source_size;
92 vector_float2 atlas_origin;
93 float border_top;
94 float border_right;
95 float border_bottom;
96 float border_left;
97 vector_uchar4 border_color;
98 float corner_radius_top_left;
99 float corner_radius_top_right;
100 float corner_radius_bottom_right;
101 float corner_radius_bottom_left;
102 uint8_t grayscale;
103} GPUIImage;
104
105typedef enum {
106 GPUISurfaceVertexInputIndexVertices = 0,
107 GPUISurfaceVertexInputIndexSurfaces = 1,
108 GPUISurfaceVertexInputIndexViewportSize = 2,
109 GPUISurfaceVertexInputIndexAtlasSize = 3,
110} GPUISurfaceVertexInputIndex;
111
112typedef enum {
113 GPUISurfaceFragmentInputIndexYAtlas = 0,
114 GPUISurfaceFragmentInputIndexCbCrAtlas = 1,
115} GPUISurfaceFragmentInputIndex;
116
117typedef struct {
118 vector_float2 origin;
119 vector_float2 target_size;
120 vector_float2 source_size;
121} GPUISurface;
122
123typedef enum {
124 GPUIUnderlineInputIndexVertices = 0,
125 GPUIUnderlineInputIndexUnderlines = 1,
126 GPUIUnderlineInputIndexUniforms = 2,
127} GPUIUnderlineInputIndex;
128
129typedef struct {
130 vector_float2 origin;
131 vector_float2 size;
132 float thickness;
133 vector_uchar4 color;
134 uint8_t squiggly;
135} GPUIUnderline;