1 module shaders.mrt;
2 import sg = sokol.gfx;
3 import m = handmade.math;
4 extern(C):
5 
6 /*
7     #version:1# (machine generated, don't edit!)
8 
9     Generated by sokol-shdc (https://github.com/floooh/sokol-tools)
10 
11     Cmdline:
12         sokol-shdc -i src/examples/shaders/mrt.glsl -o src/examples/shaders/mrt.d -l glsl410:glsl300es:metal_macos:hlsl5:wgsl -f sokol_d
13 
14     Overview:
15     =========
16     Shader program: 'dbg':
17         Get shader desc: dbgShaderDesc(sg.queryBackend());
18         Vertex Shader: vs_dbg
19         Fragment Shader: fs_dbg
20         Attributes:
21             ATTR_DBG_POS => 0
22     Shader program: 'fsq':
23         Get shader desc: fsqShaderDesc(sg.queryBackend());
24         Vertex Shader: vs_fsq
25         Fragment Shader: fs_fsq
26         Attributes:
27             ATTR_FSQ_POS => 0
28     Shader program: 'offscreen':
29         Get shader desc: offscreenShaderDesc(sg.queryBackend());
30         Vertex Shader: vs_offscreen
31         Fragment Shader: fs_offscreen
32         Attributes:
33             ATTR_OFFSCREEN_POS => 0
34             ATTR_OFFSCREEN_BRIGHT0 => 1
35     Bindings:
36         Uniform block 'fsq_params':
37             D struct: FsqParams
38             Bind slot: UB_FSQ_PARAMS => 0
39         Uniform block 'offscreen_params':
40             D struct: OffscreenParams
41             Bind slot: UB_OFFSCREEN_PARAMS => 0
42         Image 'tex':
43             Image type: sg.ImageType._2d
44             Sample type: sg.ImageSampleType.Float
45             Multisampled: false
46             Bind slot: IMG_TEX => 0
47         Image 'tex0':
48             Image type: sg.ImageType._2d
49             Sample type: sg.ImageSampleType.Float
50             Multisampled: false
51             Bind slot: IMG_TEX0 => 0
52         Image 'tex1':
53             Image type: sg.ImageType._2d
54             Sample type: sg.ImageSampleType.Float
55             Multisampled: false
56             Bind slot: IMG_TEX1 => 1
57         Image 'tex2':
58             Image type: sg.ImageType._2d
59             Sample type: sg.ImageSampleType.Float
60             Multisampled: false
61             Bind slot: IMG_TEX2 => 2
62         Sampler 'smp':
63             Type: sg.SamplerType.Filtering
64             Bind slot: SMP_SMP => 0
65 */
66 enum ATTR_DBG_POS = 0;
67 enum ATTR_FSQ_POS = 0;
68 enum ATTR_OFFSCREEN_POS = 0;
69 enum ATTR_OFFSCREEN_BRIGHT0 = 1;
70 enum UB_FSQ_PARAMS = 0;
71 enum UB_OFFSCREEN_PARAMS = 0;
72 enum IMG_TEX = 0;
73 enum IMG_TEX0 = 0;
74 enum IMG_TEX1 = 1;
75 enum IMG_TEX2 = 2;
76 enum SMP_SMP = 0;
77 struct FsqParams {
78     align(16) m.Vec2 offset;
79     align(1) ubyte[8] _pad_8 = 0;
80 }
81 struct OffscreenParams {
82     align(16) m.Mat4 mvp;
83 }
84 /*
85     #version 410
86 
87     uniform vec4 offscreen_params[4];
88     layout(location = 0) in vec4 pos;
89     layout(location = 0) out float bright;
90     layout(location = 1) in float bright0;
91 
92     void main()
93     {
94         gl_Position = mat4(offscreen_params[0], offscreen_params[1], offscreen_params[2], offscreen_params[3]) * pos;
95         bright = bright0;
96     }
97 
98 */
99 __gshared char[315] VS_OFFSCREEN_SOURCE_GLSL410 = [
100     0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x31,0x30,0x0a,0x0a,0x75,0x6e,
101     0x69,0x66,0x6f,0x72,0x6d,0x20,0x76,0x65,0x63,0x34,0x20,0x6f,0x66,0x66,0x73,0x63,
102     0x72,0x65,0x65,0x6e,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x34,0x5d,0x3b,0x0a,
103     0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,
104     0x3d,0x20,0x30,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x34,0x20,0x70,0x6f,0x73,
105     0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,
106     0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x6f,0x75,0x74,0x20,0x66,0x6c,0x6f,0x61,0x74,
107     0x20,0x62,0x72,0x69,0x67,0x68,0x74,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,
108     0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x31,0x29,0x20,0x69,0x6e,
109     0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x62,0x72,0x69,0x67,0x68,0x74,0x30,0x3b,0x0a,
110     0x0a,0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,
111     0x20,0x20,0x20,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x3d,
112     0x20,0x6d,0x61,0x74,0x34,0x28,0x6f,0x66,0x66,0x73,0x63,0x72,0x65,0x65,0x6e,0x5f,
113     0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x30,0x5d,0x2c,0x20,0x6f,0x66,0x66,0x73,0x63,
114     0x72,0x65,0x65,0x6e,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x31,0x5d,0x2c,0x20,
115     0x6f,0x66,0x66,0x73,0x63,0x72,0x65,0x65,0x6e,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,
116     0x5b,0x32,0x5d,0x2c,0x20,0x6f,0x66,0x66,0x73,0x63,0x72,0x65,0x65,0x6e,0x5f,0x70,
117     0x61,0x72,0x61,0x6d,0x73,0x5b,0x33,0x5d,0x29,0x20,0x2a,0x20,0x70,0x6f,0x73,0x3b,
118     0x0a,0x20,0x20,0x20,0x20,0x62,0x72,0x69,0x67,0x68,0x74,0x20,0x3d,0x20,0x62,0x72,
119     0x69,0x67,0x68,0x74,0x30,0x3b,0x0a,0x7d,0x0a,0x0a,0x00,
120 ];
121 /*
122     #version 410
123 
124     layout(location = 0) out vec4 frag_color_0;
125     layout(location = 0) in float bright;
126     layout(location = 1) out vec4 frag_color_1;
127     layout(location = 2) out vec4 frag_color_2;
128 
129     void main()
130     {
131         frag_color_0 = vec4(bright, 0.0, 0.0, 1.0);
132         frag_color_1 = vec4(0.0, bright, 0.0, 1.0);
133         frag_color_2 = vec4(0.0, 0.0, bright, 1.0);
134     }
135 
136 */
137 __gshared char[347] FS_OFFSCREEN_SOURCE_GLSL410 = [
138     0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x31,0x30,0x0a,0x0a,0x6c,0x61,
139     0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,
140     0x30,0x29,0x20,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x34,0x20,0x66,0x72,0x61,0x67,
141     0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x5f,0x30,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,
142     0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x69,
143     0x6e,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x62,0x72,0x69,0x67,0x68,0x74,0x3b,0x0a,
144     0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,
145     0x3d,0x20,0x31,0x29,0x20,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x34,0x20,0x66,0x72,
146     0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x5f,0x31,0x3b,0x0a,0x6c,0x61,0x79,0x6f,
147     0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x32,0x29,
148     0x20,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x34,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,
149     0x6f,0x6c,0x6f,0x72,0x5f,0x32,0x3b,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,
150     0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67,0x5f,
151     0x63,0x6f,0x6c,0x6f,0x72,0x5f,0x30,0x20,0x3d,0x20,0x76,0x65,0x63,0x34,0x28,0x62,
152     0x72,0x69,0x67,0x68,0x74,0x2c,0x20,0x30,0x2e,0x30,0x2c,0x20,0x30,0x2e,0x30,0x2c,
153     0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67,0x5f,
154     0x63,0x6f,0x6c,0x6f,0x72,0x5f,0x31,0x20,0x3d,0x20,0x76,0x65,0x63,0x34,0x28,0x30,
155     0x2e,0x30,0x2c,0x20,0x62,0x72,0x69,0x67,0x68,0x74,0x2c,0x20,0x30,0x2e,0x30,0x2c,
156     0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67,0x5f,
157     0x63,0x6f,0x6c,0x6f,0x72,0x5f,0x32,0x20,0x3d,0x20,0x76,0x65,0x63,0x34,0x28,0x30,
158     0x2e,0x30,0x2c,0x20,0x30,0x2e,0x30,0x2c,0x20,0x62,0x72,0x69,0x67,0x68,0x74,0x2c,
159     0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x7d,0x0a,0x0a,0x00,
160 ];
161 /*
162     #version 410
163 
164     uniform vec4 fsq_params[1];
165     layout(location = 0) in vec2 pos;
166     layout(location = 0) out vec2 uv0;
167     layout(location = 1) out vec2 uv1;
168     layout(location = 2) out vec2 uv2;
169 
170     void main()
171     {
172         gl_Position = vec4((pos * 2.0) - vec2(1.0), 0.5, 1.0);
173         uv0 = pos + vec2(fsq_params[0].x, 0.0);
174         uv1 = pos + vec2(0.0, fsq_params[0].y);
175         uv2 = pos;
176         gl_Position.y = -gl_Position.y;
177     }
178 
179 */
180 __gshared char[398] VS_FSQ_SOURCE_GLSL410 = [
181     0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x31,0x30,0x0a,0x0a,0x75,0x6e,
182     0x69,0x66,0x6f,0x72,0x6d,0x20,0x76,0x65,0x63,0x34,0x20,0x66,0x73,0x71,0x5f,0x70,
183     0x61,0x72,0x61,0x6d,0x73,0x5b,0x31,0x5d,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,
184     0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x69,
185     0x6e,0x20,0x76,0x65,0x63,0x32,0x20,0x70,0x6f,0x73,0x3b,0x0a,0x6c,0x61,0x79,0x6f,
186     0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,
187     0x20,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x32,0x20,0x75,0x76,0x30,0x3b,0x0a,0x6c,
188     0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,
189     0x20,0x31,0x29,0x20,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x32,0x20,0x75,0x76,0x31,
190     0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,
191     0x6e,0x20,0x3d,0x20,0x32,0x29,0x20,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x32,0x20,
192     0x75,0x76,0x32,0x3b,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,
193     0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,
194     0x69,0x6f,0x6e,0x20,0x3d,0x20,0x76,0x65,0x63,0x34,0x28,0x28,0x70,0x6f,0x73,0x20,
195     0x2a,0x20,0x32,0x2e,0x30,0x29,0x20,0x2d,0x20,0x76,0x65,0x63,0x32,0x28,0x31,0x2e,
196     0x30,0x29,0x2c,0x20,0x30,0x2e,0x35,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x20,
197     0x20,0x20,0x20,0x75,0x76,0x30,0x20,0x3d,0x20,0x70,0x6f,0x73,0x20,0x2b,0x20,0x76,
198     0x65,0x63,0x32,0x28,0x66,0x73,0x71,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x30,
199     0x5d,0x2e,0x78,0x2c,0x20,0x30,0x2e,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x75,
200     0x76,0x31,0x20,0x3d,0x20,0x70,0x6f,0x73,0x20,0x2b,0x20,0x76,0x65,0x63,0x32,0x28,
201     0x30,0x2e,0x30,0x2c,0x20,0x66,0x73,0x71,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,
202     0x30,0x5d,0x2e,0x79,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x75,0x76,0x32,0x20,0x3d,
203     0x20,0x70,0x6f,0x73,0x3b,0x0a,0x20,0x20,0x20,0x20,0x67,0x6c,0x5f,0x50,0x6f,0x73,
204     0x69,0x74,0x69,0x6f,0x6e,0x2e,0x79,0x20,0x3d,0x20,0x2d,0x67,0x6c,0x5f,0x50,0x6f,
205     0x73,0x69,0x74,0x69,0x6f,0x6e,0x2e,0x79,0x3b,0x0a,0x7d,0x0a,0x0a,0x00,
206 ];
207 /*
208     #version 410
209 
210     uniform sampler2D tex0_smp;
211     uniform sampler2D tex1_smp;
212     uniform sampler2D tex2_smp;
213 
214     layout(location = 0) in vec2 uv0;
215     layout(location = 1) in vec2 uv1;
216     layout(location = 2) in vec2 uv2;
217     layout(location = 0) out vec4 frag_color;
218 
219     void main()
220     {
221         frag_color = vec4((texture(tex0_smp, uv0).xyz + texture(tex1_smp, uv1).xyz) + texture(tex2_smp, uv2).xyz, 1.0);
222     }
223 
224 */
225 __gshared char[378] FS_FSQ_SOURCE_GLSL410 = [
226     0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x31,0x30,0x0a,0x0a,0x75,0x6e,
227     0x69,0x66,0x6f,0x72,0x6d,0x20,0x73,0x61,0x6d,0x70,0x6c,0x65,0x72,0x32,0x44,0x20,
228     0x74,0x65,0x78,0x30,0x5f,0x73,0x6d,0x70,0x3b,0x0a,0x75,0x6e,0x69,0x66,0x6f,0x72,
229     0x6d,0x20,0x73,0x61,0x6d,0x70,0x6c,0x65,0x72,0x32,0x44,0x20,0x74,0x65,0x78,0x31,
230     0x5f,0x73,0x6d,0x70,0x3b,0x0a,0x75,0x6e,0x69,0x66,0x6f,0x72,0x6d,0x20,0x73,0x61,
231     0x6d,0x70,0x6c,0x65,0x72,0x32,0x44,0x20,0x74,0x65,0x78,0x32,0x5f,0x73,0x6d,0x70,
232     0x3b,0x0a,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,
233     0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x32,0x20,
234     0x75,0x76,0x30,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,
235     0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x31,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,
236     0x32,0x20,0x75,0x76,0x31,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,
237     0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x32,0x29,0x20,0x69,0x6e,0x20,0x76,
238     0x65,0x63,0x32,0x20,0x75,0x76,0x32,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,
239     0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x6f,0x75,
240     0x74,0x20,0x76,0x65,0x63,0x34,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,
241     0x72,0x3b,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,
242     0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,
243     0x20,0x3d,0x20,0x76,0x65,0x63,0x34,0x28,0x28,0x74,0x65,0x78,0x74,0x75,0x72,0x65,
244     0x28,0x74,0x65,0x78,0x30,0x5f,0x73,0x6d,0x70,0x2c,0x20,0x75,0x76,0x30,0x29,0x2e,
245     0x78,0x79,0x7a,0x20,0x2b,0x20,0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x28,0x74,0x65,
246     0x78,0x31,0x5f,0x73,0x6d,0x70,0x2c,0x20,0x75,0x76,0x31,0x29,0x2e,0x78,0x79,0x7a,
247     0x29,0x20,0x2b,0x20,0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x28,0x74,0x65,0x78,0x32,
248     0x5f,0x73,0x6d,0x70,0x2c,0x20,0x75,0x76,0x32,0x29,0x2e,0x78,0x79,0x7a,0x2c,0x20,
249     0x31,0x2e,0x30,0x29,0x3b,0x0a,0x7d,0x0a,0x0a,0x00,
250 ];
251 /*
252     #version 410
253 
254     layout(location = 0) in vec2 pos;
255     layout(location = 0) out vec2 uv;
256 
257     void main()
258     {
259         gl_Position = vec4((pos * 2.0) - vec2(1.0), 0.5, 1.0);
260         uv = pos;
261         gl_Position.y = -gl_Position.y;
262     }
263 
264 */
265 __gshared char[210] VS_DBG_SOURCE_GLSL410 = [
266     0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x31,0x30,0x0a,0x0a,0x6c,0x61,
267     0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,
268     0x30,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x32,0x20,0x70,0x6f,0x73,0x3b,0x0a,
269     0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,
270     0x3d,0x20,0x30,0x29,0x20,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x32,0x20,0x75,0x76,
271     0x3b,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,
272     0x0a,0x20,0x20,0x20,0x20,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,
273     0x20,0x3d,0x20,0x76,0x65,0x63,0x34,0x28,0x28,0x70,0x6f,0x73,0x20,0x2a,0x20,0x32,
274     0x2e,0x30,0x29,0x20,0x2d,0x20,0x76,0x65,0x63,0x32,0x28,0x31,0x2e,0x30,0x29,0x2c,
275     0x20,0x30,0x2e,0x35,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,
276     0x75,0x76,0x20,0x3d,0x20,0x70,0x6f,0x73,0x3b,0x0a,0x20,0x20,0x20,0x20,0x67,0x6c,
277     0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x2e,0x79,0x20,0x3d,0x20,0x2d,0x67,
278     0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x2e,0x79,0x3b,0x0a,0x7d,0x0a,
279     0x0a,0x00,
280 ];
281 /*
282     #version 410
283 
284     uniform sampler2D tex_smp;
285 
286     layout(location = 0) out vec4 frag_color;
287     layout(location = 0) in vec2 uv;
288 
289     void main()
290     {
291         frag_color = vec4(texture(tex_smp, uv).xyz, 1.0);
292     }
293 
294 */
295 __gshared char[190] FS_DBG_SOURCE_GLSL410 = [
296     0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x31,0x30,0x0a,0x0a,0x75,0x6e,
297     0x69,0x66,0x6f,0x72,0x6d,0x20,0x73,0x61,0x6d,0x70,0x6c,0x65,0x72,0x32,0x44,0x20,
298     0x74,0x65,0x78,0x5f,0x73,0x6d,0x70,0x3b,0x0a,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,
299     0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x6f,
300     0x75,0x74,0x20,0x76,0x65,0x63,0x34,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,
301     0x6f,0x72,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,
302     0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x32,
303     0x20,0x75,0x76,0x3b,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,
304     0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,
305     0x6f,0x72,0x20,0x3d,0x20,0x76,0x65,0x63,0x34,0x28,0x74,0x65,0x78,0x74,0x75,0x72,
306     0x65,0x28,0x74,0x65,0x78,0x5f,0x73,0x6d,0x70,0x2c,0x20,0x75,0x76,0x29,0x2e,0x78,
307     0x79,0x7a,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x7d,0x0a,0x0a,0x00,
308 ];
309 /*
310     #version 300 es
311 
312     uniform vec4 offscreen_params[4];
313     layout(location = 0) in vec4 pos;
314     out float bright;
315     layout(location = 1) in float bright0;
316 
317     void main()
318     {
319         gl_Position = mat4(offscreen_params[0], offscreen_params[1], offscreen_params[2], offscreen_params[3]) * pos;
320         bright = bright0;
321     }
322 
323 */
324 __gshared char[297] VS_OFFSCREEN_SOURCE_GLSL300ES = [
325     0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x30,0x30,0x20,0x65,0x73,0x0a,
326     0x0a,0x75,0x6e,0x69,0x66,0x6f,0x72,0x6d,0x20,0x76,0x65,0x63,0x34,0x20,0x6f,0x66,
327     0x66,0x73,0x63,0x72,0x65,0x65,0x6e,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x34,
328     0x5d,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,
329     0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x34,0x20,
330     0x70,0x6f,0x73,0x3b,0x0a,0x6f,0x75,0x74,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x62,
331     0x72,0x69,0x67,0x68,0x74,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,
332     0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x31,0x29,0x20,0x69,0x6e,0x20,0x66,
333     0x6c,0x6f,0x61,0x74,0x20,0x62,0x72,0x69,0x67,0x68,0x74,0x30,0x3b,0x0a,0x0a,0x76,
334     0x6f,0x69,0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,
335     0x20,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x6d,
336     0x61,0x74,0x34,0x28,0x6f,0x66,0x66,0x73,0x63,0x72,0x65,0x65,0x6e,0x5f,0x70,0x61,
337     0x72,0x61,0x6d,0x73,0x5b,0x30,0x5d,0x2c,0x20,0x6f,0x66,0x66,0x73,0x63,0x72,0x65,
338     0x65,0x6e,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x31,0x5d,0x2c,0x20,0x6f,0x66,
339     0x66,0x73,0x63,0x72,0x65,0x65,0x6e,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x32,
340     0x5d,0x2c,0x20,0x6f,0x66,0x66,0x73,0x63,0x72,0x65,0x65,0x6e,0x5f,0x70,0x61,0x72,
341     0x61,0x6d,0x73,0x5b,0x33,0x5d,0x29,0x20,0x2a,0x20,0x70,0x6f,0x73,0x3b,0x0a,0x20,
342     0x20,0x20,0x20,0x62,0x72,0x69,0x67,0x68,0x74,0x20,0x3d,0x20,0x62,0x72,0x69,0x67,
343     0x68,0x74,0x30,0x3b,0x0a,0x7d,0x0a,0x0a,0x00,
344 ];
345 /*
346     #version 300 es
347     precision mediump float;
348     precision highp int;
349 
350     layout(location = 0) out highp vec4 frag_color_0;
351     in highp float bright;
352     layout(location = 1) out highp vec4 frag_color_1;
353     layout(location = 2) out highp vec4 frag_color_2;
354 
355     void main()
356     {
357         frag_color_0 = vec4(bright, 0.0, 0.0, 1.0);
358         frag_color_1 = vec4(0.0, bright, 0.0, 1.0);
359         frag_color_2 = vec4(0.0, 0.0, bright, 1.0);
360     }
361 
362 */
363 __gshared char[399] FS_OFFSCREEN_SOURCE_GLSL300ES = [
364     0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x30,0x30,0x20,0x65,0x73,0x0a,
365     0x70,0x72,0x65,0x63,0x69,0x73,0x69,0x6f,0x6e,0x20,0x6d,0x65,0x64,0x69,0x75,0x6d,
366     0x70,0x20,0x66,0x6c,0x6f,0x61,0x74,0x3b,0x0a,0x70,0x72,0x65,0x63,0x69,0x73,0x69,
367     0x6f,0x6e,0x20,0x68,0x69,0x67,0x68,0x70,0x20,0x69,0x6e,0x74,0x3b,0x0a,0x0a,0x6c,
368     0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,
369     0x20,0x30,0x29,0x20,0x6f,0x75,0x74,0x20,0x68,0x69,0x67,0x68,0x70,0x20,0x76,0x65,
370     0x63,0x34,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x5f,0x30,0x3b,
371     0x0a,0x69,0x6e,0x20,0x68,0x69,0x67,0x68,0x70,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,
372     0x62,0x72,0x69,0x67,0x68,0x74,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,
373     0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x31,0x29,0x20,0x6f,0x75,0x74,
374     0x20,0x68,0x69,0x67,0x68,0x70,0x20,0x76,0x65,0x63,0x34,0x20,0x66,0x72,0x61,0x67,
375     0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x5f,0x31,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,
376     0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x32,0x29,0x20,0x6f,
377     0x75,0x74,0x20,0x68,0x69,0x67,0x68,0x70,0x20,0x76,0x65,0x63,0x34,0x20,0x66,0x72,
378     0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x5f,0x32,0x3b,0x0a,0x0a,0x76,0x6f,0x69,
379     0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,
380     0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x5f,0x30,0x20,0x3d,0x20,0x76,0x65,
381     0x63,0x34,0x28,0x62,0x72,0x69,0x67,0x68,0x74,0x2c,0x20,0x30,0x2e,0x30,0x2c,0x20,
382     0x30,0x2e,0x30,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,
383     0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x5f,0x31,0x20,0x3d,0x20,0x76,0x65,
384     0x63,0x34,0x28,0x30,0x2e,0x30,0x2c,0x20,0x62,0x72,0x69,0x67,0x68,0x74,0x2c,0x20,
385     0x30,0x2e,0x30,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,
386     0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x5f,0x32,0x20,0x3d,0x20,0x76,0x65,
387     0x63,0x34,0x28,0x30,0x2e,0x30,0x2c,0x20,0x30,0x2e,0x30,0x2c,0x20,0x62,0x72,0x69,
388     0x67,0x68,0x74,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x7d,0x0a,0x0a,0x00,
389 ];
390 /*
391     #version 300 es
392 
393     uniform vec4 fsq_params[1];
394     layout(location = 0) in vec2 pos;
395     out vec2 uv0;
396     out vec2 uv1;
397     out vec2 uv2;
398 
399     void main()
400     {
401         gl_Position = vec4((pos * 2.0) - vec2(1.0), 0.5, 1.0);
402         uv0 = pos + vec2(fsq_params[0].x, 0.0);
403         uv1 = pos + vec2(0.0, fsq_params[0].y);
404         uv2 = pos;
405         gl_Position.y = -gl_Position.y;
406     }
407 
408 */
409 __gshared char[338] VS_FSQ_SOURCE_GLSL300ES = [
410     0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x30,0x30,0x20,0x65,0x73,0x0a,
411     0x0a,0x75,0x6e,0x69,0x66,0x6f,0x72,0x6d,0x20,0x76,0x65,0x63,0x34,0x20,0x66,0x73,
412     0x71,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x31,0x5d,0x3b,0x0a,0x6c,0x61,0x79,
413     0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,
414     0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x32,0x20,0x70,0x6f,0x73,0x3b,0x0a,0x6f,
415     0x75,0x74,0x20,0x76,0x65,0x63,0x32,0x20,0x75,0x76,0x30,0x3b,0x0a,0x6f,0x75,0x74,
416     0x20,0x76,0x65,0x63,0x32,0x20,0x75,0x76,0x31,0x3b,0x0a,0x6f,0x75,0x74,0x20,0x76,
417     0x65,0x63,0x32,0x20,0x75,0x76,0x32,0x3b,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20,0x6d,
418     0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x67,0x6c,0x5f,0x50,
419     0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x76,0x65,0x63,0x34,0x28,0x28,
420     0x70,0x6f,0x73,0x20,0x2a,0x20,0x32,0x2e,0x30,0x29,0x20,0x2d,0x20,0x76,0x65,0x63,
421     0x32,0x28,0x31,0x2e,0x30,0x29,0x2c,0x20,0x30,0x2e,0x35,0x2c,0x20,0x31,0x2e,0x30,
422     0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x75,0x76,0x30,0x20,0x3d,0x20,0x70,0x6f,0x73,
423     0x20,0x2b,0x20,0x76,0x65,0x63,0x32,0x28,0x66,0x73,0x71,0x5f,0x70,0x61,0x72,0x61,
424     0x6d,0x73,0x5b,0x30,0x5d,0x2e,0x78,0x2c,0x20,0x30,0x2e,0x30,0x29,0x3b,0x0a,0x20,
425     0x20,0x20,0x20,0x75,0x76,0x31,0x20,0x3d,0x20,0x70,0x6f,0x73,0x20,0x2b,0x20,0x76,
426     0x65,0x63,0x32,0x28,0x30,0x2e,0x30,0x2c,0x20,0x66,0x73,0x71,0x5f,0x70,0x61,0x72,
427     0x61,0x6d,0x73,0x5b,0x30,0x5d,0x2e,0x79,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x75,
428     0x76,0x32,0x20,0x3d,0x20,0x70,0x6f,0x73,0x3b,0x0a,0x20,0x20,0x20,0x20,0x67,0x6c,
429     0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x2e,0x79,0x20,0x3d,0x20,0x2d,0x67,
430     0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x2e,0x79,0x3b,0x0a,0x7d,0x0a,
431     0x0a,0x00,
432 ];
433 /*
434     #version 300 es
435     precision mediump float;
436     precision highp int;
437 
438     uniform highp sampler2D tex0_smp;
439     uniform highp sampler2D tex1_smp;
440     uniform highp sampler2D tex2_smp;
441 
442     in highp vec2 uv0;
443     in highp vec2 uv1;
444     in highp vec2 uv2;
445     layout(location = 0) out highp vec4 frag_color;
446 
447     void main()
448     {
449         frag_color = vec4((texture(tex0_smp, uv0).xyz + texture(tex1_smp, uv1).xyz) + texture(tex2_smp, uv2).xyz, 1.0);
450     }
451 
452 */
453 __gshared char[406] FS_FSQ_SOURCE_GLSL300ES = [
454     0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x30,0x30,0x20,0x65,0x73,0x0a,
455     0x70,0x72,0x65,0x63,0x69,0x73,0x69,0x6f,0x6e,0x20,0x6d,0x65,0x64,0x69,0x75,0x6d,
456     0x70,0x20,0x66,0x6c,0x6f,0x61,0x74,0x3b,0x0a,0x70,0x72,0x65,0x63,0x69,0x73,0x69,
457     0x6f,0x6e,0x20,0x68,0x69,0x67,0x68,0x70,0x20,0x69,0x6e,0x74,0x3b,0x0a,0x0a,0x75,
458     0x6e,0x69,0x66,0x6f,0x72,0x6d,0x20,0x68,0x69,0x67,0x68,0x70,0x20,0x73,0x61,0x6d,
459     0x70,0x6c,0x65,0x72,0x32,0x44,0x20,0x74,0x65,0x78,0x30,0x5f,0x73,0x6d,0x70,0x3b,
460     0x0a,0x75,0x6e,0x69,0x66,0x6f,0x72,0x6d,0x20,0x68,0x69,0x67,0x68,0x70,0x20,0x73,
461     0x61,0x6d,0x70,0x6c,0x65,0x72,0x32,0x44,0x20,0x74,0x65,0x78,0x31,0x5f,0x73,0x6d,
462     0x70,0x3b,0x0a,0x75,0x6e,0x69,0x66,0x6f,0x72,0x6d,0x20,0x68,0x69,0x67,0x68,0x70,
463     0x20,0x73,0x61,0x6d,0x70,0x6c,0x65,0x72,0x32,0x44,0x20,0x74,0x65,0x78,0x32,0x5f,
464     0x73,0x6d,0x70,0x3b,0x0a,0x0a,0x69,0x6e,0x20,0x68,0x69,0x67,0x68,0x70,0x20,0x76,
465     0x65,0x63,0x32,0x20,0x75,0x76,0x30,0x3b,0x0a,0x69,0x6e,0x20,0x68,0x69,0x67,0x68,
466     0x70,0x20,0x76,0x65,0x63,0x32,0x20,0x75,0x76,0x31,0x3b,0x0a,0x69,0x6e,0x20,0x68,
467     0x69,0x67,0x68,0x70,0x20,0x76,0x65,0x63,0x32,0x20,0x75,0x76,0x32,0x3b,0x0a,0x6c,
468     0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,
469     0x20,0x30,0x29,0x20,0x6f,0x75,0x74,0x20,0x68,0x69,0x67,0x68,0x70,0x20,0x76,0x65,
470     0x63,0x34,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x0a,
471     0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,
472     0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x76,
473     0x65,0x63,0x34,0x28,0x28,0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x28,0x74,0x65,0x78,
474     0x30,0x5f,0x73,0x6d,0x70,0x2c,0x20,0x75,0x76,0x30,0x29,0x2e,0x78,0x79,0x7a,0x20,
475     0x2b,0x20,0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x28,0x74,0x65,0x78,0x31,0x5f,0x73,
476     0x6d,0x70,0x2c,0x20,0x75,0x76,0x31,0x29,0x2e,0x78,0x79,0x7a,0x29,0x20,0x2b,0x20,
477     0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x28,0x74,0x65,0x78,0x32,0x5f,0x73,0x6d,0x70,
478     0x2c,0x20,0x75,0x76,0x32,0x29,0x2e,0x78,0x79,0x7a,0x2c,0x20,0x31,0x2e,0x30,0x29,
479     0x3b,0x0a,0x7d,0x0a,0x0a,0x00,
480 ];
481 /*
482     #version 300 es
483 
484     layout(location = 0) in vec2 pos;
485     out vec2 uv;
486 
487     void main()
488     {
489         gl_Position = vec4((pos * 2.0) - vec2(1.0), 0.5, 1.0);
490         uv = pos;
491         gl_Position.y = -gl_Position.y;
492     }
493 
494 */
495 __gshared char[192] VS_DBG_SOURCE_GLSL300ES = [
496     0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x30,0x30,0x20,0x65,0x73,0x0a,
497     0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,
498     0x20,0x3d,0x20,0x30,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x32,0x20,0x70,0x6f,
499     0x73,0x3b,0x0a,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x32,0x20,0x75,0x76,0x3b,0x0a,
500     0x0a,0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,
501     0x20,0x20,0x20,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x3d,
502     0x20,0x76,0x65,0x63,0x34,0x28,0x28,0x70,0x6f,0x73,0x20,0x2a,0x20,0x32,0x2e,0x30,
503     0x29,0x20,0x2d,0x20,0x76,0x65,0x63,0x32,0x28,0x31,0x2e,0x30,0x29,0x2c,0x20,0x30,
504     0x2e,0x35,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x75,0x76,
505     0x20,0x3d,0x20,0x70,0x6f,0x73,0x3b,0x0a,0x20,0x20,0x20,0x20,0x67,0x6c,0x5f,0x50,
506     0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x2e,0x79,0x20,0x3d,0x20,0x2d,0x67,0x6c,0x5f,
507     0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x2e,0x79,0x3b,0x0a,0x7d,0x0a,0x0a,0x00,
508 
509 ];
510 /*
511     #version 300 es
512     precision mediump float;
513     precision highp int;
514 
515     uniform highp sampler2D tex_smp;
516 
517     layout(location = 0) out highp vec4 frag_color;
518     in highp vec2 uv;
519 
520     void main()
521     {
522         frag_color = vec4(texture(tex_smp, uv).xyz, 1.0);
523     }
524 
525 */
526 __gshared char[236] FS_DBG_SOURCE_GLSL300ES = [
527     0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x30,0x30,0x20,0x65,0x73,0x0a,
528     0x70,0x72,0x65,0x63,0x69,0x73,0x69,0x6f,0x6e,0x20,0x6d,0x65,0x64,0x69,0x75,0x6d,
529     0x70,0x20,0x66,0x6c,0x6f,0x61,0x74,0x3b,0x0a,0x70,0x72,0x65,0x63,0x69,0x73,0x69,
530     0x6f,0x6e,0x20,0x68,0x69,0x67,0x68,0x70,0x20,0x69,0x6e,0x74,0x3b,0x0a,0x0a,0x75,
531     0x6e,0x69,0x66,0x6f,0x72,0x6d,0x20,0x68,0x69,0x67,0x68,0x70,0x20,0x73,0x61,0x6d,
532     0x70,0x6c,0x65,0x72,0x32,0x44,0x20,0x74,0x65,0x78,0x5f,0x73,0x6d,0x70,0x3b,0x0a,
533     0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,
534     0x20,0x3d,0x20,0x30,0x29,0x20,0x6f,0x75,0x74,0x20,0x68,0x69,0x67,0x68,0x70,0x20,
535     0x76,0x65,0x63,0x34,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x3b,
536     0x0a,0x69,0x6e,0x20,0x68,0x69,0x67,0x68,0x70,0x20,0x76,0x65,0x63,0x32,0x20,0x75,
537     0x76,0x3b,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,
538     0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,
539     0x20,0x3d,0x20,0x76,0x65,0x63,0x34,0x28,0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x28,
540     0x74,0x65,0x78,0x5f,0x73,0x6d,0x70,0x2c,0x20,0x75,0x76,0x29,0x2e,0x78,0x79,0x7a,
541     0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x7d,0x0a,0x0a,0x00,
542 ];
543 /*
544     cbuffer offscreen_params : register(b0)
545     {
546         row_major float4x4 _19_mvp : packoffset(c0);
547     };
548 
549 
550     static float4 gl_Position;
551     static float4 pos;
552     static float bright;
553     static float bright0;
554 
555     struct SPIRV_Cross_Input
556     {
557         float4 pos : TEXCOORD0;
558         float bright0 : TEXCOORD1;
559     };
560 
561     struct SPIRV_Cross_Output
562     {
563         float bright : TEXCOORD0;
564         float4 gl_Position : SV_Position;
565     };
566 
567     void vert_main()
568     {
569         gl_Position = mul(pos, _19_mvp);
570         bright = bright0;
571     }
572 
573     SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input)
574     {
575         pos = stage_input.pos;
576         bright0 = stage_input.bright0;
577         vert_main();
578         SPIRV_Cross_Output stage_output;
579         stage_output.gl_Position = gl_Position;
580         stage_output.bright = bright;
581         return stage_output;
582     }
583 */
584 __gshared char[736] VS_OFFSCREEN_SOURCE_HLSL5 = [
585     0x63,0x62,0x75,0x66,0x66,0x65,0x72,0x20,0x6f,0x66,0x66,0x73,0x63,0x72,0x65,0x65,
586     0x6e,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x20,0x3a,0x20,0x72,0x65,0x67,0x69,0x73,
587     0x74,0x65,0x72,0x28,0x62,0x30,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x72,0x6f,
588     0x77,0x5f,0x6d,0x61,0x6a,0x6f,0x72,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x78,0x34,
589     0x20,0x5f,0x31,0x39,0x5f,0x6d,0x76,0x70,0x20,0x3a,0x20,0x70,0x61,0x63,0x6b,0x6f,
590     0x66,0x66,0x73,0x65,0x74,0x28,0x63,0x30,0x29,0x3b,0x0a,0x7d,0x3b,0x0a,0x0a,0x0a,
591     0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x67,0x6c,
592     0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3b,0x0a,0x73,0x74,0x61,0x74,0x69,
593     0x63,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x70,0x6f,0x73,0x3b,0x0a,0x73,0x74,
594     0x61,0x74,0x69,0x63,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x62,0x72,0x69,0x67,0x68,
595     0x74,0x3b,0x0a,0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,
596     0x62,0x72,0x69,0x67,0x68,0x74,0x30,0x3b,0x0a,0x0a,0x73,0x74,0x72,0x75,0x63,0x74,
597     0x20,0x53,0x50,0x49,0x52,0x56,0x5f,0x43,0x72,0x6f,0x73,0x73,0x5f,0x49,0x6e,0x70,
598     0x75,0x74,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,
599     0x70,0x6f,0x73,0x20,0x3a,0x20,0x54,0x45,0x58,0x43,0x4f,0x4f,0x52,0x44,0x30,0x3b,
600     0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x62,0x72,0x69,0x67,0x68,
601     0x74,0x30,0x20,0x3a,0x20,0x54,0x45,0x58,0x43,0x4f,0x4f,0x52,0x44,0x31,0x3b,0x0a,
602     0x7d,0x3b,0x0a,0x0a,0x73,0x74,0x72,0x75,0x63,0x74,0x20,0x53,0x50,0x49,0x52,0x56,
603     0x5f,0x43,0x72,0x6f,0x73,0x73,0x5f,0x4f,0x75,0x74,0x70,0x75,0x74,0x0a,0x7b,0x0a,
604     0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x62,0x72,0x69,0x67,0x68,0x74,
605     0x20,0x3a,0x20,0x54,0x45,0x58,0x43,0x4f,0x4f,0x52,0x44,0x30,0x3b,0x0a,0x20,0x20,
606     0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,
607     0x74,0x69,0x6f,0x6e,0x20,0x3a,0x20,0x53,0x56,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,
608     0x6f,0x6e,0x3b,0x0a,0x7d,0x3b,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20,0x76,0x65,0x72,
609     0x74,0x5f,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x67,
610     0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x6d,0x75,0x6c,
611     0x28,0x70,0x6f,0x73,0x2c,0x20,0x5f,0x31,0x39,0x5f,0x6d,0x76,0x70,0x29,0x3b,0x0a,
612     0x20,0x20,0x20,0x20,0x62,0x72,0x69,0x67,0x68,0x74,0x20,0x3d,0x20,0x62,0x72,0x69,
613     0x67,0x68,0x74,0x30,0x3b,0x0a,0x7d,0x0a,0x0a,0x53,0x50,0x49,0x52,0x56,0x5f,0x43,
614     0x72,0x6f,0x73,0x73,0x5f,0x4f,0x75,0x74,0x70,0x75,0x74,0x20,0x6d,0x61,0x69,0x6e,
615     0x28,0x53,0x50,0x49,0x52,0x56,0x5f,0x43,0x72,0x6f,0x73,0x73,0x5f,0x49,0x6e,0x70,
616     0x75,0x74,0x20,0x73,0x74,0x61,0x67,0x65,0x5f,0x69,0x6e,0x70,0x75,0x74,0x29,0x0a,
617     0x7b,0x0a,0x20,0x20,0x20,0x20,0x70,0x6f,0x73,0x20,0x3d,0x20,0x73,0x74,0x61,0x67,
618     0x65,0x5f,0x69,0x6e,0x70,0x75,0x74,0x2e,0x70,0x6f,0x73,0x3b,0x0a,0x20,0x20,0x20,
619     0x20,0x62,0x72,0x69,0x67,0x68,0x74,0x30,0x20,0x3d,0x20,0x73,0x74,0x61,0x67,0x65,
620     0x5f,0x69,0x6e,0x70,0x75,0x74,0x2e,0x62,0x72,0x69,0x67,0x68,0x74,0x30,0x3b,0x0a,
621     0x20,0x20,0x20,0x20,0x76,0x65,0x72,0x74,0x5f,0x6d,0x61,0x69,0x6e,0x28,0x29,0x3b,
622     0x0a,0x20,0x20,0x20,0x20,0x53,0x50,0x49,0x52,0x56,0x5f,0x43,0x72,0x6f,0x73,0x73,
623     0x5f,0x4f,0x75,0x74,0x70,0x75,0x74,0x20,0x73,0x74,0x61,0x67,0x65,0x5f,0x6f,0x75,
624     0x74,0x70,0x75,0x74,0x3b,0x0a,0x20,0x20,0x20,0x20,0x73,0x74,0x61,0x67,0x65,0x5f,
625     0x6f,0x75,0x74,0x70,0x75,0x74,0x2e,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,
626     0x6f,0x6e,0x20,0x3d,0x20,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,
627     0x3b,0x0a,0x20,0x20,0x20,0x20,0x73,0x74,0x61,0x67,0x65,0x5f,0x6f,0x75,0x74,0x70,
628     0x75,0x74,0x2e,0x62,0x72,0x69,0x67,0x68,0x74,0x20,0x3d,0x20,0x62,0x72,0x69,0x67,
629     0x68,0x74,0x3b,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x73,
630     0x74,0x61,0x67,0x65,0x5f,0x6f,0x75,0x74,0x70,0x75,0x74,0x3b,0x0a,0x7d,0x0a,0x00,
631 
632 ];
633 /*
634     static float4 frag_color_0;
635     static float bright;
636     static float4 frag_color_1;
637     static float4 frag_color_2;
638 
639     struct SPIRV_Cross_Input
640     {
641         float bright : TEXCOORD0;
642     };
643 
644     struct SPIRV_Cross_Output
645     {
646         float4 frag_color_0 : SV_Target0;
647         float4 frag_color_1 : SV_Target1;
648         float4 frag_color_2 : SV_Target2;
649     };
650 
651     void frag_main()
652     {
653         frag_color_0 = float4(bright, 0.0f, 0.0f, 1.0f);
654         frag_color_1 = float4(0.0f, bright, 0.0f, 1.0f);
655         frag_color_2 = float4(0.0f, 0.0f, bright, 1.0f);
656     }
657 
658     SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input)
659     {
660         bright = stage_input.bright;
661         frag_main();
662         SPIRV_Cross_Output stage_output;
663         stage_output.frag_color_0 = frag_color_0;
664         stage_output.frag_color_1 = frag_color_1;
665         stage_output.frag_color_2 = frag_color_2;
666         return stage_output;
667     }
668 */
669 __gshared char[804] FS_OFFSCREEN_SOURCE_HLSL5 = [
670     0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x66,0x72,
671     0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x5f,0x30,0x3b,0x0a,0x73,0x74,0x61,0x74,
672     0x69,0x63,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x62,0x72,0x69,0x67,0x68,0x74,0x3b,
673     0x0a,0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x66,
674     0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x5f,0x31,0x3b,0x0a,0x73,0x74,0x61,
675     0x74,0x69,0x63,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x66,0x72,0x61,0x67,0x5f,
676     0x63,0x6f,0x6c,0x6f,0x72,0x5f,0x32,0x3b,0x0a,0x0a,0x73,0x74,0x72,0x75,0x63,0x74,
677     0x20,0x53,0x50,0x49,0x52,0x56,0x5f,0x43,0x72,0x6f,0x73,0x73,0x5f,0x49,0x6e,0x70,
678     0x75,0x74,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x62,
679     0x72,0x69,0x67,0x68,0x74,0x20,0x3a,0x20,0x54,0x45,0x58,0x43,0x4f,0x4f,0x52,0x44,
680     0x30,0x3b,0x0a,0x7d,0x3b,0x0a,0x0a,0x73,0x74,0x72,0x75,0x63,0x74,0x20,0x53,0x50,
681     0x49,0x52,0x56,0x5f,0x43,0x72,0x6f,0x73,0x73,0x5f,0x4f,0x75,0x74,0x70,0x75,0x74,
682     0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x66,0x72,
683     0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x5f,0x30,0x20,0x3a,0x20,0x53,0x56,0x5f,
684     0x54,0x61,0x72,0x67,0x65,0x74,0x30,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,
685     0x61,0x74,0x34,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x5f,0x31,
686     0x20,0x3a,0x20,0x53,0x56,0x5f,0x54,0x61,0x72,0x67,0x65,0x74,0x31,0x3b,0x0a,0x20,
687     0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,
688     0x6f,0x6c,0x6f,0x72,0x5f,0x32,0x20,0x3a,0x20,0x53,0x56,0x5f,0x54,0x61,0x72,0x67,
689     0x65,0x74,0x32,0x3b,0x0a,0x7d,0x3b,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20,0x66,0x72,
690     0x61,0x67,0x5f,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,
691     0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x5f,0x30,0x20,0x3d,0x20,0x66,
692     0x6c,0x6f,0x61,0x74,0x34,0x28,0x62,0x72,0x69,0x67,0x68,0x74,0x2c,0x20,0x30,0x2e,
693     0x30,0x66,0x2c,0x20,0x30,0x2e,0x30,0x66,0x2c,0x20,0x31,0x2e,0x30,0x66,0x29,0x3b,
694     0x0a,0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x5f,
695     0x31,0x20,0x3d,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x28,0x30,0x2e,0x30,0x66,0x2c,
696     0x20,0x62,0x72,0x69,0x67,0x68,0x74,0x2c,0x20,0x30,0x2e,0x30,0x66,0x2c,0x20,0x31,
697     0x2e,0x30,0x66,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,
698     0x6f,0x6c,0x6f,0x72,0x5f,0x32,0x20,0x3d,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x28,
699     0x30,0x2e,0x30,0x66,0x2c,0x20,0x30,0x2e,0x30,0x66,0x2c,0x20,0x62,0x72,0x69,0x67,
700     0x68,0x74,0x2c,0x20,0x31,0x2e,0x30,0x66,0x29,0x3b,0x0a,0x7d,0x0a,0x0a,0x53,0x50,
701     0x49,0x52,0x56,0x5f,0x43,0x72,0x6f,0x73,0x73,0x5f,0x4f,0x75,0x74,0x70,0x75,0x74,
702     0x20,0x6d,0x61,0x69,0x6e,0x28,0x53,0x50,0x49,0x52,0x56,0x5f,0x43,0x72,0x6f,0x73,
703     0x73,0x5f,0x49,0x6e,0x70,0x75,0x74,0x20,0x73,0x74,0x61,0x67,0x65,0x5f,0x69,0x6e,
704     0x70,0x75,0x74,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x62,0x72,0x69,0x67,0x68,
705     0x74,0x20,0x3d,0x20,0x73,0x74,0x61,0x67,0x65,0x5f,0x69,0x6e,0x70,0x75,0x74,0x2e,
706     0x62,0x72,0x69,0x67,0x68,0x74,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67,
707     0x5f,0x6d,0x61,0x69,0x6e,0x28,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x53,0x50,0x49,
708     0x52,0x56,0x5f,0x43,0x72,0x6f,0x73,0x73,0x5f,0x4f,0x75,0x74,0x70,0x75,0x74,0x20,
709     0x73,0x74,0x61,0x67,0x65,0x5f,0x6f,0x75,0x74,0x70,0x75,0x74,0x3b,0x0a,0x20,0x20,
710     0x20,0x20,0x73,0x74,0x61,0x67,0x65,0x5f,0x6f,0x75,0x74,0x70,0x75,0x74,0x2e,0x66,
711     0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x5f,0x30,0x20,0x3d,0x20,0x66,0x72,
712     0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x5f,0x30,0x3b,0x0a,0x20,0x20,0x20,0x20,
713     0x73,0x74,0x61,0x67,0x65,0x5f,0x6f,0x75,0x74,0x70,0x75,0x74,0x2e,0x66,0x72,0x61,
714     0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x5f,0x31,0x20,0x3d,0x20,0x66,0x72,0x61,0x67,
715     0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x5f,0x31,0x3b,0x0a,0x20,0x20,0x20,0x20,0x73,0x74,
716     0x61,0x67,0x65,0x5f,0x6f,0x75,0x74,0x70,0x75,0x74,0x2e,0x66,0x72,0x61,0x67,0x5f,
717     0x63,0x6f,0x6c,0x6f,0x72,0x5f,0x32,0x20,0x3d,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,
718     0x6f,0x6c,0x6f,0x72,0x5f,0x32,0x3b,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,
719     0x72,0x6e,0x20,0x73,0x74,0x61,0x67,0x65,0x5f,0x6f,0x75,0x74,0x70,0x75,0x74,0x3b,
720     0x0a,0x7d,0x0a,0x00,
721 ];
722 /*
723     cbuffer fsq_params : register(b0)
724     {
725         float2 _36_offset : packoffset(c0);
726     };
727 
728 
729     static float4 gl_Position;
730     static float2 pos;
731     static float2 uv0;
732     static float2 uv1;
733     static float2 uv2;
734 
735     struct SPIRV_Cross_Input
736     {
737         float2 pos : TEXCOORD0;
738     };
739 
740     struct SPIRV_Cross_Output
741     {
742         float2 uv0 : TEXCOORD0;
743         float2 uv1 : TEXCOORD1;
744         float2 uv2 : TEXCOORD2;
745         float4 gl_Position : SV_Position;
746     };
747 
748     void vert_main()
749     {
750         gl_Position = float4((pos * 2.0f) - 1.0f.xx, 0.5f, 1.0f);
751         uv0 = pos + float2(_36_offset.x, 0.0f);
752         uv1 = pos + float2(0.0f, _36_offset.y);
753         uv2 = pos;
754     }
755 
756     SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input)
757     {
758         pos = stage_input.pos;
759         vert_main();
760         SPIRV_Cross_Output stage_output;
761         stage_output.gl_Position = gl_Position;
762         stage_output.uv0 = uv0;
763         stage_output.uv1 = uv1;
764         stage_output.uv2 = uv2;
765         return stage_output;
766     }
767 */
768 __gshared char[879] VS_FSQ_SOURCE_HLSL5 = [
769     0x63,0x62,0x75,0x66,0x66,0x65,0x72,0x20,0x66,0x73,0x71,0x5f,0x70,0x61,0x72,0x61,
770     0x6d,0x73,0x20,0x3a,0x20,0x72,0x65,0x67,0x69,0x73,0x74,0x65,0x72,0x28,0x62,0x30,
771     0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x32,0x20,0x5f,
772     0x33,0x36,0x5f,0x6f,0x66,0x66,0x73,0x65,0x74,0x20,0x3a,0x20,0x70,0x61,0x63,0x6b,
773     0x6f,0x66,0x66,0x73,0x65,0x74,0x28,0x63,0x30,0x29,0x3b,0x0a,0x7d,0x3b,0x0a,0x0a,
774     0x0a,0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x67,
775     0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3b,0x0a,0x73,0x74,0x61,0x74,
776     0x69,0x63,0x20,0x66,0x6c,0x6f,0x61,0x74,0x32,0x20,0x70,0x6f,0x73,0x3b,0x0a,0x73,
777     0x74,0x61,0x74,0x69,0x63,0x20,0x66,0x6c,0x6f,0x61,0x74,0x32,0x20,0x75,0x76,0x30,
778     0x3b,0x0a,0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x66,0x6c,0x6f,0x61,0x74,0x32,0x20,
779     0x75,0x76,0x31,0x3b,0x0a,0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x66,0x6c,0x6f,0x61,
780     0x74,0x32,0x20,0x75,0x76,0x32,0x3b,0x0a,0x0a,0x73,0x74,0x72,0x75,0x63,0x74,0x20,
781     0x53,0x50,0x49,0x52,0x56,0x5f,0x43,0x72,0x6f,0x73,0x73,0x5f,0x49,0x6e,0x70,0x75,
782     0x74,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x32,0x20,0x70,
783     0x6f,0x73,0x20,0x3a,0x20,0x54,0x45,0x58,0x43,0x4f,0x4f,0x52,0x44,0x30,0x3b,0x0a,
784     0x7d,0x3b,0x0a,0x0a,0x73,0x74,0x72,0x75,0x63,0x74,0x20,0x53,0x50,0x49,0x52,0x56,
785     0x5f,0x43,0x72,0x6f,0x73,0x73,0x5f,0x4f,0x75,0x74,0x70,0x75,0x74,0x0a,0x7b,0x0a,
786     0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x32,0x20,0x75,0x76,0x30,0x20,0x3a,
787     0x20,0x54,0x45,0x58,0x43,0x4f,0x4f,0x52,0x44,0x30,0x3b,0x0a,0x20,0x20,0x20,0x20,
788     0x66,0x6c,0x6f,0x61,0x74,0x32,0x20,0x75,0x76,0x31,0x20,0x3a,0x20,0x54,0x45,0x58,
789     0x43,0x4f,0x4f,0x52,0x44,0x31,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,
790     0x74,0x32,0x20,0x75,0x76,0x32,0x20,0x3a,0x20,0x54,0x45,0x58,0x43,0x4f,0x4f,0x52,
791     0x44,0x32,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x67,
792     0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x3a,0x20,0x53,0x56,0x5f,
793     0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3b,0x0a,0x7d,0x3b,0x0a,0x0a,0x76,0x6f,
794     0x69,0x64,0x20,0x76,0x65,0x72,0x74,0x5f,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,
795     0x0a,0x20,0x20,0x20,0x20,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,
796     0x20,0x3d,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x28,0x28,0x70,0x6f,0x73,0x20,0x2a,
797     0x20,0x32,0x2e,0x30,0x66,0x29,0x20,0x2d,0x20,0x31,0x2e,0x30,0x66,0x2e,0x78,0x78,
798     0x2c,0x20,0x30,0x2e,0x35,0x66,0x2c,0x20,0x31,0x2e,0x30,0x66,0x29,0x3b,0x0a,0x20,
799     0x20,0x20,0x20,0x75,0x76,0x30,0x20,0x3d,0x20,0x70,0x6f,0x73,0x20,0x2b,0x20,0x66,
800     0x6c,0x6f,0x61,0x74,0x32,0x28,0x5f,0x33,0x36,0x5f,0x6f,0x66,0x66,0x73,0x65,0x74,
801     0x2e,0x78,0x2c,0x20,0x30,0x2e,0x30,0x66,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x75,
802     0x76,0x31,0x20,0x3d,0x20,0x70,0x6f,0x73,0x20,0x2b,0x20,0x66,0x6c,0x6f,0x61,0x74,
803     0x32,0x28,0x30,0x2e,0x30,0x66,0x2c,0x20,0x5f,0x33,0x36,0x5f,0x6f,0x66,0x66,0x73,
804     0x65,0x74,0x2e,0x79,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x75,0x76,0x32,0x20,0x3d,
805     0x20,0x70,0x6f,0x73,0x3b,0x0a,0x7d,0x0a,0x0a,0x53,0x50,0x49,0x52,0x56,0x5f,0x43,
806     0x72,0x6f,0x73,0x73,0x5f,0x4f,0x75,0x74,0x70,0x75,0x74,0x20,0x6d,0x61,0x69,0x6e,
807     0x28,0x53,0x50,0x49,0x52,0x56,0x5f,0x43,0x72,0x6f,0x73,0x73,0x5f,0x49,0x6e,0x70,
808     0x75,0x74,0x20,0x73,0x74,0x61,0x67,0x65,0x5f,0x69,0x6e,0x70,0x75,0x74,0x29,0x0a,
809     0x7b,0x0a,0x20,0x20,0x20,0x20,0x70,0x6f,0x73,0x20,0x3d,0x20,0x73,0x74,0x61,0x67,
810     0x65,0x5f,0x69,0x6e,0x70,0x75,0x74,0x2e,0x70,0x6f,0x73,0x3b,0x0a,0x20,0x20,0x20,
811     0x20,0x76,0x65,0x72,0x74,0x5f,0x6d,0x61,0x69,0x6e,0x28,0x29,0x3b,0x0a,0x20,0x20,
812     0x20,0x20,0x53,0x50,0x49,0x52,0x56,0x5f,0x43,0x72,0x6f,0x73,0x73,0x5f,0x4f,0x75,
813     0x74,0x70,0x75,0x74,0x20,0x73,0x74,0x61,0x67,0x65,0x5f,0x6f,0x75,0x74,0x70,0x75,
814     0x74,0x3b,0x0a,0x20,0x20,0x20,0x20,0x73,0x74,0x61,0x67,0x65,0x5f,0x6f,0x75,0x74,
815     0x70,0x75,0x74,0x2e,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,
816     0x3d,0x20,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3b,0x0a,0x20,
817     0x20,0x20,0x20,0x73,0x74,0x61,0x67,0x65,0x5f,0x6f,0x75,0x74,0x70,0x75,0x74,0x2e,
818     0x75,0x76,0x30,0x20,0x3d,0x20,0x75,0x76,0x30,0x3b,0x0a,0x20,0x20,0x20,0x20,0x73,
819     0x74,0x61,0x67,0x65,0x5f,0x6f,0x75,0x74,0x70,0x75,0x74,0x2e,0x75,0x76,0x31,0x20,
820     0x3d,0x20,0x75,0x76,0x31,0x3b,0x0a,0x20,0x20,0x20,0x20,0x73,0x74,0x61,0x67,0x65,
821     0x5f,0x6f,0x75,0x74,0x70,0x75,0x74,0x2e,0x75,0x76,0x32,0x20,0x3d,0x20,0x75,0x76,
822     0x32,0x3b,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x73,0x74,
823     0x61,0x67,0x65,0x5f,0x6f,0x75,0x74,0x70,0x75,0x74,0x3b,0x0a,0x7d,0x0a,0x00,
824 ];
825 /*
826     Texture2D<float4> tex0 : register(t0);
827     SamplerState smp : register(s0);
828     Texture2D<float4> tex1 : register(t1);
829     Texture2D<float4> tex2 : register(t2);
830 
831     static float2 uv0;
832     static float2 uv1;
833     static float2 uv2;
834     static float4 frag_color;
835 
836     struct SPIRV_Cross_Input
837     {
838         float2 uv0 : TEXCOORD0;
839         float2 uv1 : TEXCOORD1;
840         float2 uv2 : TEXCOORD2;
841     };
842 
843     struct SPIRV_Cross_Output
844     {
845         float4 frag_color : SV_Target0;
846     };
847 
848     void frag_main()
849     {
850         frag_color = float4((tex0.Sample(smp, uv0).xyz + tex1.Sample(smp, uv1).xyz) + tex2.Sample(smp, uv2).xyz, 1.0f);
851     }
852 
853     SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input)
854     {
855         uv0 = stage_input.uv0;
856         uv1 = stage_input.uv1;
857         uv2 = stage_input.uv2;
858         frag_main();
859         SPIRV_Cross_Output stage_output;
860         stage_output.frag_color = frag_color;
861         return stage_output;
862     }
863 */
864 __gshared char[818] FS_FSQ_SOURCE_HLSL5 = [
865     0x54,0x65,0x78,0x74,0x75,0x72,0x65,0x32,0x44,0x3c,0x66,0x6c,0x6f,0x61,0x74,0x34,
866     0x3e,0x20,0x74,0x65,0x78,0x30,0x20,0x3a,0x20,0x72,0x65,0x67,0x69,0x73,0x74,0x65,
867     0x72,0x28,0x74,0x30,0x29,0x3b,0x0a,0x53,0x61,0x6d,0x70,0x6c,0x65,0x72,0x53,0x74,
868     0x61,0x74,0x65,0x20,0x73,0x6d,0x70,0x20,0x3a,0x20,0x72,0x65,0x67,0x69,0x73,0x74,
869     0x65,0x72,0x28,0x73,0x30,0x29,0x3b,0x0a,0x54,0x65,0x78,0x74,0x75,0x72,0x65,0x32,
870     0x44,0x3c,0x66,0x6c,0x6f,0x61,0x74,0x34,0x3e,0x20,0x74,0x65,0x78,0x31,0x20,0x3a,
871     0x20,0x72,0x65,0x67,0x69,0x73,0x74,0x65,0x72,0x28,0x74,0x31,0x29,0x3b,0x0a,0x54,
872     0x65,0x78,0x74,0x75,0x72,0x65,0x32,0x44,0x3c,0x66,0x6c,0x6f,0x61,0x74,0x34,0x3e,
873     0x20,0x74,0x65,0x78,0x32,0x20,0x3a,0x20,0x72,0x65,0x67,0x69,0x73,0x74,0x65,0x72,
874     0x28,0x74,0x32,0x29,0x3b,0x0a,0x0a,0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x66,0x6c,
875     0x6f,0x61,0x74,0x32,0x20,0x75,0x76,0x30,0x3b,0x0a,0x73,0x74,0x61,0x74,0x69,0x63,
876     0x20,0x66,0x6c,0x6f,0x61,0x74,0x32,0x20,0x75,0x76,0x31,0x3b,0x0a,0x73,0x74,0x61,
877     0x74,0x69,0x63,0x20,0x66,0x6c,0x6f,0x61,0x74,0x32,0x20,0x75,0x76,0x32,0x3b,0x0a,
878     0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x66,0x72,
879     0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x0a,0x73,0x74,0x72,0x75,0x63,
880     0x74,0x20,0x53,0x50,0x49,0x52,0x56,0x5f,0x43,0x72,0x6f,0x73,0x73,0x5f,0x49,0x6e,
881     0x70,0x75,0x74,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x32,
882     0x20,0x75,0x76,0x30,0x20,0x3a,0x20,0x54,0x45,0x58,0x43,0x4f,0x4f,0x52,0x44,0x30,
883     0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x32,0x20,0x75,0x76,0x31,
884     0x20,0x3a,0x20,0x54,0x45,0x58,0x43,0x4f,0x4f,0x52,0x44,0x31,0x3b,0x0a,0x20,0x20,
885     0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x32,0x20,0x75,0x76,0x32,0x20,0x3a,0x20,0x54,
886     0x45,0x58,0x43,0x4f,0x4f,0x52,0x44,0x32,0x3b,0x0a,0x7d,0x3b,0x0a,0x0a,0x73,0x74,
887     0x72,0x75,0x63,0x74,0x20,0x53,0x50,0x49,0x52,0x56,0x5f,0x43,0x72,0x6f,0x73,0x73,
888     0x5f,0x4f,0x75,0x74,0x70,0x75,0x74,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,
889     0x6f,0x61,0x74,0x34,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x20,
890     0x3a,0x20,0x53,0x56,0x5f,0x54,0x61,0x72,0x67,0x65,0x74,0x30,0x3b,0x0a,0x7d,0x3b,
891     0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20,0x66,0x72,0x61,0x67,0x5f,0x6d,0x61,0x69,0x6e,
892     0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,
893     0x6c,0x6f,0x72,0x20,0x3d,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x28,0x28,0x74,0x65,
894     0x78,0x30,0x2e,0x53,0x61,0x6d,0x70,0x6c,0x65,0x28,0x73,0x6d,0x70,0x2c,0x20,0x75,
895     0x76,0x30,0x29,0x2e,0x78,0x79,0x7a,0x20,0x2b,0x20,0x74,0x65,0x78,0x31,0x2e,0x53,
896     0x61,0x6d,0x70,0x6c,0x65,0x28,0x73,0x6d,0x70,0x2c,0x20,0x75,0x76,0x31,0x29,0x2e,
897     0x78,0x79,0x7a,0x29,0x20,0x2b,0x20,0x74,0x65,0x78,0x32,0x2e,0x53,0x61,0x6d,0x70,
898     0x6c,0x65,0x28,0x73,0x6d,0x70,0x2c,0x20,0x75,0x76,0x32,0x29,0x2e,0x78,0x79,0x7a,
899     0x2c,0x20,0x31,0x2e,0x30,0x66,0x29,0x3b,0x0a,0x7d,0x0a,0x0a,0x53,0x50,0x49,0x52,
900     0x56,0x5f,0x43,0x72,0x6f,0x73,0x73,0x5f,0x4f,0x75,0x74,0x70,0x75,0x74,0x20,0x6d,
901     0x61,0x69,0x6e,0x28,0x53,0x50,0x49,0x52,0x56,0x5f,0x43,0x72,0x6f,0x73,0x73,0x5f,
902     0x49,0x6e,0x70,0x75,0x74,0x20,0x73,0x74,0x61,0x67,0x65,0x5f,0x69,0x6e,0x70,0x75,
903     0x74,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x75,0x76,0x30,0x20,0x3d,0x20,0x73,
904     0x74,0x61,0x67,0x65,0x5f,0x69,0x6e,0x70,0x75,0x74,0x2e,0x75,0x76,0x30,0x3b,0x0a,
905     0x20,0x20,0x20,0x20,0x75,0x76,0x31,0x20,0x3d,0x20,0x73,0x74,0x61,0x67,0x65,0x5f,
906     0x69,0x6e,0x70,0x75,0x74,0x2e,0x75,0x76,0x31,0x3b,0x0a,0x20,0x20,0x20,0x20,0x75,
907     0x76,0x32,0x20,0x3d,0x20,0x73,0x74,0x61,0x67,0x65,0x5f,0x69,0x6e,0x70,0x75,0x74,
908     0x2e,0x75,0x76,0x32,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x6d,
909     0x61,0x69,0x6e,0x28,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x53,0x50,0x49,0x52,0x56,
910     0x5f,0x43,0x72,0x6f,0x73,0x73,0x5f,0x4f,0x75,0x74,0x70,0x75,0x74,0x20,0x73,0x74,
911     0x61,0x67,0x65,0x5f,0x6f,0x75,0x74,0x70,0x75,0x74,0x3b,0x0a,0x20,0x20,0x20,0x20,
912     0x73,0x74,0x61,0x67,0x65,0x5f,0x6f,0x75,0x74,0x70,0x75,0x74,0x2e,0x66,0x72,0x61,
913     0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,
914     0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,
915     0x20,0x73,0x74,0x61,0x67,0x65,0x5f,0x6f,0x75,0x74,0x70,0x75,0x74,0x3b,0x0a,0x7d,
916     0x0a,0x00,
917 ];
918 /*
919     static float4 gl_Position;
920     static float2 pos;
921     static float2 uv;
922 
923     struct SPIRV_Cross_Input
924     {
925         float2 pos : TEXCOORD0;
926     };
927 
928     struct SPIRV_Cross_Output
929     {
930         float2 uv : TEXCOORD0;
931         float4 gl_Position : SV_Position;
932     };
933 
934     void vert_main()
935     {
936         gl_Position = float4((pos * 2.0f) - 1.0f.xx, 0.5f, 1.0f);
937         uv = pos;
938     }
939 
940     SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input)
941     {
942         pos = stage_input.pos;
943         vert_main();
944         SPIRV_Cross_Output stage_output;
945         stage_output.gl_Position = gl_Position;
946         stage_output.uv = uv;
947         return stage_output;
948     }
949 */
950 __gshared char[555] VS_DBG_SOURCE_HLSL5 = [
951     0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x67,0x6c,
952     0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3b,0x0a,0x73,0x74,0x61,0x74,0x69,
953     0x63,0x20,0x66,0x6c,0x6f,0x61,0x74,0x32,0x20,0x70,0x6f,0x73,0x3b,0x0a,0x73,0x74,
954     0x61,0x74,0x69,0x63,0x20,0x66,0x6c,0x6f,0x61,0x74,0x32,0x20,0x75,0x76,0x3b,0x0a,
955     0x0a,0x73,0x74,0x72,0x75,0x63,0x74,0x20,0x53,0x50,0x49,0x52,0x56,0x5f,0x43,0x72,
956     0x6f,0x73,0x73,0x5f,0x49,0x6e,0x70,0x75,0x74,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,
957     0x66,0x6c,0x6f,0x61,0x74,0x32,0x20,0x70,0x6f,0x73,0x20,0x3a,0x20,0x54,0x45,0x58,
958     0x43,0x4f,0x4f,0x52,0x44,0x30,0x3b,0x0a,0x7d,0x3b,0x0a,0x0a,0x73,0x74,0x72,0x75,
959     0x63,0x74,0x20,0x53,0x50,0x49,0x52,0x56,0x5f,0x43,0x72,0x6f,0x73,0x73,0x5f,0x4f,
960     0x75,0x74,0x70,0x75,0x74,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,
961     0x74,0x32,0x20,0x75,0x76,0x20,0x3a,0x20,0x54,0x45,0x58,0x43,0x4f,0x4f,0x52,0x44,
962     0x30,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x67,0x6c,
963     0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x3a,0x20,0x53,0x56,0x5f,0x50,
964     0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3b,0x0a,0x7d,0x3b,0x0a,0x0a,0x76,0x6f,0x69,
965     0x64,0x20,0x76,0x65,0x72,0x74,0x5f,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,
966     0x20,0x20,0x20,0x20,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,
967     0x3d,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x28,0x28,0x70,0x6f,0x73,0x20,0x2a,0x20,
968     0x32,0x2e,0x30,0x66,0x29,0x20,0x2d,0x20,0x31,0x2e,0x30,0x66,0x2e,0x78,0x78,0x2c,
969     0x20,0x30,0x2e,0x35,0x66,0x2c,0x20,0x31,0x2e,0x30,0x66,0x29,0x3b,0x0a,0x20,0x20,
970     0x20,0x20,0x75,0x76,0x20,0x3d,0x20,0x70,0x6f,0x73,0x3b,0x0a,0x7d,0x0a,0x0a,0x53,
971     0x50,0x49,0x52,0x56,0x5f,0x43,0x72,0x6f,0x73,0x73,0x5f,0x4f,0x75,0x74,0x70,0x75,
972     0x74,0x20,0x6d,0x61,0x69,0x6e,0x28,0x53,0x50,0x49,0x52,0x56,0x5f,0x43,0x72,0x6f,
973     0x73,0x73,0x5f,0x49,0x6e,0x70,0x75,0x74,0x20,0x73,0x74,0x61,0x67,0x65,0x5f,0x69,
974     0x6e,0x70,0x75,0x74,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x70,0x6f,0x73,0x20,
975     0x3d,0x20,0x73,0x74,0x61,0x67,0x65,0x5f,0x69,0x6e,0x70,0x75,0x74,0x2e,0x70,0x6f,
976     0x73,0x3b,0x0a,0x20,0x20,0x20,0x20,0x76,0x65,0x72,0x74,0x5f,0x6d,0x61,0x69,0x6e,
977     0x28,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x53,0x50,0x49,0x52,0x56,0x5f,0x43,0x72,
978     0x6f,0x73,0x73,0x5f,0x4f,0x75,0x74,0x70,0x75,0x74,0x20,0x73,0x74,0x61,0x67,0x65,
979     0x5f,0x6f,0x75,0x74,0x70,0x75,0x74,0x3b,0x0a,0x20,0x20,0x20,0x20,0x73,0x74,0x61,
980     0x67,0x65,0x5f,0x6f,0x75,0x74,0x70,0x75,0x74,0x2e,0x67,0x6c,0x5f,0x50,0x6f,0x73,
981     0x69,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,
982     0x69,0x6f,0x6e,0x3b,0x0a,0x20,0x20,0x20,0x20,0x73,0x74,0x61,0x67,0x65,0x5f,0x6f,
983     0x75,0x74,0x70,0x75,0x74,0x2e,0x75,0x76,0x20,0x3d,0x20,0x75,0x76,0x3b,0x0a,0x20,
984     0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x73,0x74,0x61,0x67,0x65,0x5f,
985     0x6f,0x75,0x74,0x70,0x75,0x74,0x3b,0x0a,0x7d,0x0a,0x00,
986 ];
987 /*
988     Texture2D<float4> tex : register(t0);
989     SamplerState smp : register(s0);
990 
991     static float4 frag_color;
992     static float2 uv;
993 
994     struct SPIRV_Cross_Input
995     {
996         float2 uv : TEXCOORD0;
997     };
998 
999     struct SPIRV_Cross_Output
1000     {
1001         float4 frag_color : SV_Target0;
1002     };
1003 
1004     void frag_main()
1005     {
1006         frag_color = float4(tex.Sample(smp, uv).xyz, 1.0f);
1007     }
1008 
1009     SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input)
1010     {
1011         uv = stage_input.uv;
1012         frag_main();
1013         SPIRV_Cross_Output stage_output;
1014         stage_output.frag_color = frag_color;
1015         return stage_output;
1016     }
1017 */
1018 __gshared char[527] FS_DBG_SOURCE_HLSL5 = [
1019     0x54,0x65,0x78,0x74,0x75,0x72,0x65,0x32,0x44,0x3c,0x66,0x6c,0x6f,0x61,0x74,0x34,
1020     0x3e,0x20,0x74,0x65,0x78,0x20,0x3a,0x20,0x72,0x65,0x67,0x69,0x73,0x74,0x65,0x72,
1021     0x28,0x74,0x30,0x29,0x3b,0x0a,0x53,0x61,0x6d,0x70,0x6c,0x65,0x72,0x53,0x74,0x61,
1022     0x74,0x65,0x20,0x73,0x6d,0x70,0x20,0x3a,0x20,0x72,0x65,0x67,0x69,0x73,0x74,0x65,
1023     0x72,0x28,0x73,0x30,0x29,0x3b,0x0a,0x0a,0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x66,
1024     0x6c,0x6f,0x61,0x74,0x34,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,
1025     0x3b,0x0a,0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x66,0x6c,0x6f,0x61,0x74,0x32,0x20,
1026     0x75,0x76,0x3b,0x0a,0x0a,0x73,0x74,0x72,0x75,0x63,0x74,0x20,0x53,0x50,0x49,0x52,
1027     0x56,0x5f,0x43,0x72,0x6f,0x73,0x73,0x5f,0x49,0x6e,0x70,0x75,0x74,0x0a,0x7b,0x0a,
1028     0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x32,0x20,0x75,0x76,0x20,0x3a,0x20,
1029     0x54,0x45,0x58,0x43,0x4f,0x4f,0x52,0x44,0x30,0x3b,0x0a,0x7d,0x3b,0x0a,0x0a,0x73,
1030     0x74,0x72,0x75,0x63,0x74,0x20,0x53,0x50,0x49,0x52,0x56,0x5f,0x43,0x72,0x6f,0x73,
1031     0x73,0x5f,0x4f,0x75,0x74,0x70,0x75,0x74,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,
1032     0x6c,0x6f,0x61,0x74,0x34,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,
1033     0x20,0x3a,0x20,0x53,0x56,0x5f,0x54,0x61,0x72,0x67,0x65,0x74,0x30,0x3b,0x0a,0x7d,
1034     0x3b,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20,0x66,0x72,0x61,0x67,0x5f,0x6d,0x61,0x69,
1035     0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,
1036     0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x28,0x74,0x65,
1037     0x78,0x2e,0x53,0x61,0x6d,0x70,0x6c,0x65,0x28,0x73,0x6d,0x70,0x2c,0x20,0x75,0x76,
1038     0x29,0x2e,0x78,0x79,0x7a,0x2c,0x20,0x31,0x2e,0x30,0x66,0x29,0x3b,0x0a,0x7d,0x0a,
1039     0x0a,0x53,0x50,0x49,0x52,0x56,0x5f,0x43,0x72,0x6f,0x73,0x73,0x5f,0x4f,0x75,0x74,
1040     0x70,0x75,0x74,0x20,0x6d,0x61,0x69,0x6e,0x28,0x53,0x50,0x49,0x52,0x56,0x5f,0x43,
1041     0x72,0x6f,0x73,0x73,0x5f,0x49,0x6e,0x70,0x75,0x74,0x20,0x73,0x74,0x61,0x67,0x65,
1042     0x5f,0x69,0x6e,0x70,0x75,0x74,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x75,0x76,
1043     0x20,0x3d,0x20,0x73,0x74,0x61,0x67,0x65,0x5f,0x69,0x6e,0x70,0x75,0x74,0x2e,0x75,
1044     0x76,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x6d,0x61,0x69,0x6e,
1045     0x28,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x53,0x50,0x49,0x52,0x56,0x5f,0x43,0x72,
1046     0x6f,0x73,0x73,0x5f,0x4f,0x75,0x74,0x70,0x75,0x74,0x20,0x73,0x74,0x61,0x67,0x65,
1047     0x5f,0x6f,0x75,0x74,0x70,0x75,0x74,0x3b,0x0a,0x20,0x20,0x20,0x20,0x73,0x74,0x61,
1048     0x67,0x65,0x5f,0x6f,0x75,0x74,0x70,0x75,0x74,0x2e,0x66,0x72,0x61,0x67,0x5f,0x63,
1049     0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,
1050     0x72,0x3b,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x73,0x74,
1051     0x61,0x67,0x65,0x5f,0x6f,0x75,0x74,0x70,0x75,0x74,0x3b,0x0a,0x7d,0x0a,0x00,
1052 ];
1053 /*
1054     #include <metal_stdlib>
1055     #include <simd/simd.h>
1056 
1057     using namespace metal;
1058 
1059     struct offscreen_params
1060     {
1061         float4x4 mvp;
1062     };
1063 
1064     struct main0_out
1065     {
1066         float bright [[user(locn0)]];
1067         float4 gl_Position [[position]];
1068     };
1069 
1070     struct main0_in
1071     {
1072         float4 pos [[attribute(0)]];
1073         float bright0 [[attribute(1)]];
1074     };
1075 
1076     vertex main0_out main0(main0_in in [[stage_in]], constant offscreen_params& _19 [[buffer(0)]])
1077     {
1078         main0_out out = {};
1079         out.gl_Position = _19.mvp * in.pos;
1080         out.bright = in.bright0;
1081         return out;
1082     }
1083 
1084 */
1085 __gshared char[515] VS_OFFSCREEN_SOURCE_METAL_MACOS = [
1086     0x23,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65,0x20,0x3c,0x6d,0x65,0x74,0x61,0x6c,0x5f,
1087     0x73,0x74,0x64,0x6c,0x69,0x62,0x3e,0x0a,0x23,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65,
1088     0x20,0x3c,0x73,0x69,0x6d,0x64,0x2f,0x73,0x69,0x6d,0x64,0x2e,0x68,0x3e,0x0a,0x0a,
1089     0x75,0x73,0x69,0x6e,0x67,0x20,0x6e,0x61,0x6d,0x65,0x73,0x70,0x61,0x63,0x65,0x20,
1090     0x6d,0x65,0x74,0x61,0x6c,0x3b,0x0a,0x0a,0x73,0x74,0x72,0x75,0x63,0x74,0x20,0x6f,
1091     0x66,0x66,0x73,0x63,0x72,0x65,0x65,0x6e,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x0a,
1092     0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x78,0x34,0x20,0x6d,
1093     0x76,0x70,0x3b,0x0a,0x7d,0x3b,0x0a,0x0a,0x73,0x74,0x72,0x75,0x63,0x74,0x20,0x6d,
1094     0x61,0x69,0x6e,0x30,0x5f,0x6f,0x75,0x74,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,
1095     0x6c,0x6f,0x61,0x74,0x20,0x62,0x72,0x69,0x67,0x68,0x74,0x20,0x5b,0x5b,0x75,0x73,
1096     0x65,0x72,0x28,0x6c,0x6f,0x63,0x6e,0x30,0x29,0x5d,0x5d,0x3b,0x0a,0x20,0x20,0x20,
1097     0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,
1098     0x69,0x6f,0x6e,0x20,0x5b,0x5b,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x5d,0x5d,
1099     0x3b,0x0a,0x7d,0x3b,0x0a,0x0a,0x73,0x74,0x72,0x75,0x63,0x74,0x20,0x6d,0x61,0x69,
1100     0x6e,0x30,0x5f,0x69,0x6e,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,
1101     0x74,0x34,0x20,0x70,0x6f,0x73,0x20,0x5b,0x5b,0x61,0x74,0x74,0x72,0x69,0x62,0x75,
1102     0x74,0x65,0x28,0x30,0x29,0x5d,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,
1103     0x61,0x74,0x20,0x62,0x72,0x69,0x67,0x68,0x74,0x30,0x20,0x5b,0x5b,0x61,0x74,0x74,
1104     0x72,0x69,0x62,0x75,0x74,0x65,0x28,0x31,0x29,0x5d,0x5d,0x3b,0x0a,0x7d,0x3b,0x0a,
1105     0x0a,0x76,0x65,0x72,0x74,0x65,0x78,0x20,0x6d,0x61,0x69,0x6e,0x30,0x5f,0x6f,0x75,
1106     0x74,0x20,0x6d,0x61,0x69,0x6e,0x30,0x28,0x6d,0x61,0x69,0x6e,0x30,0x5f,0x69,0x6e,
1107     0x20,0x69,0x6e,0x20,0x5b,0x5b,0x73,0x74,0x61,0x67,0x65,0x5f,0x69,0x6e,0x5d,0x5d,
1108     0x2c,0x20,0x63,0x6f,0x6e,0x73,0x74,0x61,0x6e,0x74,0x20,0x6f,0x66,0x66,0x73,0x63,
1109     0x72,0x65,0x65,0x6e,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x26,0x20,0x5f,0x31,0x39,
1110     0x20,0x5b,0x5b,0x62,0x75,0x66,0x66,0x65,0x72,0x28,0x30,0x29,0x5d,0x5d,0x29,0x0a,
1111     0x7b,0x0a,0x20,0x20,0x20,0x20,0x6d,0x61,0x69,0x6e,0x30,0x5f,0x6f,0x75,0x74,0x20,
1112     0x6f,0x75,0x74,0x20,0x3d,0x20,0x7b,0x7d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x6f,0x75,
1113     0x74,0x2e,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,
1114     0x5f,0x31,0x39,0x2e,0x6d,0x76,0x70,0x20,0x2a,0x20,0x69,0x6e,0x2e,0x70,0x6f,0x73,
1115     0x3b,0x0a,0x20,0x20,0x20,0x20,0x6f,0x75,0x74,0x2e,0x62,0x72,0x69,0x67,0x68,0x74,
1116     0x20,0x3d,0x20,0x69,0x6e,0x2e,0x62,0x72,0x69,0x67,0x68,0x74,0x30,0x3b,0x0a,0x20,
1117     0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6f,0x75,0x74,0x3b,0x0a,0x7d,
1118     0x0a,0x0a,0x00,
1119 ];
1120 /*
1121     #include <metal_stdlib>
1122     #include <simd/simd.h>
1123 
1124     using namespace metal;
1125 
1126     struct main0_out
1127     {
1128         float4 frag_color_0 [[color(0)]];
1129         float4 frag_color_1 [[color(1)]];
1130         float4 frag_color_2 [[color(2)]];
1131     };
1132 
1133     struct main0_in
1134     {
1135         float bright [[user(locn0)]];
1136     };
1137 
1138     fragment main0_out main0(main0_in in [[stage_in]])
1139     {
1140         main0_out out = {};
1141         out.frag_color_0 = float4(in.bright, 0.0, 0.0, 1.0);
1142         out.frag_color_1 = float4(0.0, in.bright, 0.0, 1.0);
1143         out.frag_color_2 = float4(0.0, 0.0, in.bright, 1.0);
1144         return out;
1145     }
1146 
1147 */
1148 __gshared char[533] FS_OFFSCREEN_SOURCE_METAL_MACOS = [
1149     0x23,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65,0x20,0x3c,0x6d,0x65,0x74,0x61,0x6c,0x5f,
1150     0x73,0x74,0x64,0x6c,0x69,0x62,0x3e,0x0a,0x23,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65,
1151     0x20,0x3c,0x73,0x69,0x6d,0x64,0x2f,0x73,0x69,0x6d,0x64,0x2e,0x68,0x3e,0x0a,0x0a,
1152     0x75,0x73,0x69,0x6e,0x67,0x20,0x6e,0x61,0x6d,0x65,0x73,0x70,0x61,0x63,0x65,0x20,
1153     0x6d,0x65,0x74,0x61,0x6c,0x3b,0x0a,0x0a,0x73,0x74,0x72,0x75,0x63,0x74,0x20,0x6d,
1154     0x61,0x69,0x6e,0x30,0x5f,0x6f,0x75,0x74,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,
1155     0x6c,0x6f,0x61,0x74,0x34,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,
1156     0x5f,0x30,0x20,0x5b,0x5b,0x63,0x6f,0x6c,0x6f,0x72,0x28,0x30,0x29,0x5d,0x5d,0x3b,
1157     0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x66,0x72,0x61,0x67,
1158     0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x5f,0x31,0x20,0x5b,0x5b,0x63,0x6f,0x6c,0x6f,0x72,
1159     0x28,0x31,0x29,0x5d,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,
1160     0x34,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x5f,0x32,0x20,0x5b,
1161     0x5b,0x63,0x6f,0x6c,0x6f,0x72,0x28,0x32,0x29,0x5d,0x5d,0x3b,0x0a,0x7d,0x3b,0x0a,
1162     0x0a,0x73,0x74,0x72,0x75,0x63,0x74,0x20,0x6d,0x61,0x69,0x6e,0x30,0x5f,0x69,0x6e,
1163     0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x62,0x72,0x69,
1164     0x67,0x68,0x74,0x20,0x5b,0x5b,0x75,0x73,0x65,0x72,0x28,0x6c,0x6f,0x63,0x6e,0x30,
1165     0x29,0x5d,0x5d,0x3b,0x0a,0x7d,0x3b,0x0a,0x0a,0x66,0x72,0x61,0x67,0x6d,0x65,0x6e,
1166     0x74,0x20,0x6d,0x61,0x69,0x6e,0x30,0x5f,0x6f,0x75,0x74,0x20,0x6d,0x61,0x69,0x6e,
1167     0x30,0x28,0x6d,0x61,0x69,0x6e,0x30,0x5f,0x69,0x6e,0x20,0x69,0x6e,0x20,0x5b,0x5b,
1168     0x73,0x74,0x61,0x67,0x65,0x5f,0x69,0x6e,0x5d,0x5d,0x29,0x0a,0x7b,0x0a,0x20,0x20,
1169     0x20,0x20,0x6d,0x61,0x69,0x6e,0x30,0x5f,0x6f,0x75,0x74,0x20,0x6f,0x75,0x74,0x20,
1170     0x3d,0x20,0x7b,0x7d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x6f,0x75,0x74,0x2e,0x66,0x72,
1171     0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x5f,0x30,0x20,0x3d,0x20,0x66,0x6c,0x6f,
1172     0x61,0x74,0x34,0x28,0x69,0x6e,0x2e,0x62,0x72,0x69,0x67,0x68,0x74,0x2c,0x20,0x30,
1173     0x2e,0x30,0x2c,0x20,0x30,0x2e,0x30,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x20,
1174     0x20,0x20,0x20,0x6f,0x75,0x74,0x2e,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,
1175     0x72,0x5f,0x31,0x20,0x3d,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x28,0x30,0x2e,0x30,
1176     0x2c,0x20,0x69,0x6e,0x2e,0x62,0x72,0x69,0x67,0x68,0x74,0x2c,0x20,0x30,0x2e,0x30,
1177     0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x6f,0x75,0x74,0x2e,
1178     0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x5f,0x32,0x20,0x3d,0x20,0x66,
1179     0x6c,0x6f,0x61,0x74,0x34,0x28,0x30,0x2e,0x30,0x2c,0x20,0x30,0x2e,0x30,0x2c,0x20,
1180     0x69,0x6e,0x2e,0x62,0x72,0x69,0x67,0x68,0x74,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,
1181     0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6f,0x75,0x74,0x3b,
1182     0x0a,0x7d,0x0a,0x0a,0x00,
1183 ];
1184 /*
1185     #include <metal_stdlib>
1186     #include <simd/simd.h>
1187 
1188     using namespace metal;
1189 
1190     struct fsq_params
1191     {
1192         float2 offset;
1193     };
1194 
1195     struct main0_out
1196     {
1197         float2 uv0 [[user(locn0)]];
1198         float2 uv1 [[user(locn1)]];
1199         float2 uv2 [[user(locn2)]];
1200         float4 gl_Position [[position]];
1201     };
1202 
1203     struct main0_in
1204     {
1205         float2 pos [[attribute(0)]];
1206     };
1207 
1208     vertex main0_out main0(main0_in in [[stage_in]], constant fsq_params& _36 [[buffer(0)]])
1209     {
1210         main0_out out = {};
1211         out.gl_Position = float4((in.pos * 2.0) - float2(1.0), 0.5, 1.0);
1212         out.uv0 = in.pos + float2(_36.offset.x, 0.0);
1213         out.uv1 = in.pos + float2(0.0, _36.offset.y);
1214         out.uv2 = in.pos;
1215         return out;
1216     }
1217 
1218 */
1219 __gshared char[653] VS_FSQ_SOURCE_METAL_MACOS = [
1220     0x23,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65,0x20,0x3c,0x6d,0x65,0x74,0x61,0x6c,0x5f,
1221     0x73,0x74,0x64,0x6c,0x69,0x62,0x3e,0x0a,0x23,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65,
1222     0x20,0x3c,0x73,0x69,0x6d,0x64,0x2f,0x73,0x69,0x6d,0x64,0x2e,0x68,0x3e,0x0a,0x0a,
1223     0x75,0x73,0x69,0x6e,0x67,0x20,0x6e,0x61,0x6d,0x65,0x73,0x70,0x61,0x63,0x65,0x20,
1224     0x6d,0x65,0x74,0x61,0x6c,0x3b,0x0a,0x0a,0x73,0x74,0x72,0x75,0x63,0x74,0x20,0x66,
1225     0x73,0x71,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,
1226     0x66,0x6c,0x6f,0x61,0x74,0x32,0x20,0x6f,0x66,0x66,0x73,0x65,0x74,0x3b,0x0a,0x7d,
1227     0x3b,0x0a,0x0a,0x73,0x74,0x72,0x75,0x63,0x74,0x20,0x6d,0x61,0x69,0x6e,0x30,0x5f,
1228     0x6f,0x75,0x74,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x32,
1229     0x20,0x75,0x76,0x30,0x20,0x5b,0x5b,0x75,0x73,0x65,0x72,0x28,0x6c,0x6f,0x63,0x6e,
1230     0x30,0x29,0x5d,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x32,
1231     0x20,0x75,0x76,0x31,0x20,0x5b,0x5b,0x75,0x73,0x65,0x72,0x28,0x6c,0x6f,0x63,0x6e,
1232     0x31,0x29,0x5d,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x32,
1233     0x20,0x75,0x76,0x32,0x20,0x5b,0x5b,0x75,0x73,0x65,0x72,0x28,0x6c,0x6f,0x63,0x6e,
1234     0x32,0x29,0x5d,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,
1235     0x20,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x5b,0x5b,0x70,
1236     0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x5d,0x5d,0x3b,0x0a,0x7d,0x3b,0x0a,0x0a,0x73,
1237     0x74,0x72,0x75,0x63,0x74,0x20,0x6d,0x61,0x69,0x6e,0x30,0x5f,0x69,0x6e,0x0a,0x7b,
1238     0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x32,0x20,0x70,0x6f,0x73,0x20,
1239     0x5b,0x5b,0x61,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x28,0x30,0x29,0x5d,0x5d,
1240     0x3b,0x0a,0x7d,0x3b,0x0a,0x0a,0x76,0x65,0x72,0x74,0x65,0x78,0x20,0x6d,0x61,0x69,
1241     0x6e,0x30,0x5f,0x6f,0x75,0x74,0x20,0x6d,0x61,0x69,0x6e,0x30,0x28,0x6d,0x61,0x69,
1242     0x6e,0x30,0x5f,0x69,0x6e,0x20,0x69,0x6e,0x20,0x5b,0x5b,0x73,0x74,0x61,0x67,0x65,
1243     0x5f,0x69,0x6e,0x5d,0x5d,0x2c,0x20,0x63,0x6f,0x6e,0x73,0x74,0x61,0x6e,0x74,0x20,
1244     0x66,0x73,0x71,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x26,0x20,0x5f,0x33,0x36,0x20,
1245     0x5b,0x5b,0x62,0x75,0x66,0x66,0x65,0x72,0x28,0x30,0x29,0x5d,0x5d,0x29,0x0a,0x7b,
1246     0x0a,0x20,0x20,0x20,0x20,0x6d,0x61,0x69,0x6e,0x30,0x5f,0x6f,0x75,0x74,0x20,0x6f,
1247     0x75,0x74,0x20,0x3d,0x20,0x7b,0x7d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x6f,0x75,0x74,
1248     0x2e,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x66,
1249     0x6c,0x6f,0x61,0x74,0x34,0x28,0x28,0x69,0x6e,0x2e,0x70,0x6f,0x73,0x20,0x2a,0x20,
1250     0x32,0x2e,0x30,0x29,0x20,0x2d,0x20,0x66,0x6c,0x6f,0x61,0x74,0x32,0x28,0x31,0x2e,
1251     0x30,0x29,0x2c,0x20,0x30,0x2e,0x35,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x20,
1252     0x20,0x20,0x20,0x6f,0x75,0x74,0x2e,0x75,0x76,0x30,0x20,0x3d,0x20,0x69,0x6e,0x2e,
1253     0x70,0x6f,0x73,0x20,0x2b,0x20,0x66,0x6c,0x6f,0x61,0x74,0x32,0x28,0x5f,0x33,0x36,
1254     0x2e,0x6f,0x66,0x66,0x73,0x65,0x74,0x2e,0x78,0x2c,0x20,0x30,0x2e,0x30,0x29,0x3b,
1255     0x0a,0x20,0x20,0x20,0x20,0x6f,0x75,0x74,0x2e,0x75,0x76,0x31,0x20,0x3d,0x20,0x69,
1256     0x6e,0x2e,0x70,0x6f,0x73,0x20,0x2b,0x20,0x66,0x6c,0x6f,0x61,0x74,0x32,0x28,0x30,
1257     0x2e,0x30,0x2c,0x20,0x5f,0x33,0x36,0x2e,0x6f,0x66,0x66,0x73,0x65,0x74,0x2e,0x79,
1258     0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x6f,0x75,0x74,0x2e,0x75,0x76,0x32,0x20,0x3d,
1259     0x20,0x69,0x6e,0x2e,0x70,0x6f,0x73,0x3b,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,
1260     0x75,0x72,0x6e,0x20,0x6f,0x75,0x74,0x3b,0x0a,0x7d,0x0a,0x0a,0x00,
1261 ];
1262 /*
1263     #include <metal_stdlib>
1264     #include <simd/simd.h>
1265 
1266     using namespace metal;
1267 
1268     struct main0_out
1269     {
1270         float4 frag_color [[color(0)]];
1271     };
1272 
1273     struct main0_in
1274     {
1275         float2 uv0 [[user(locn0)]];
1276         float2 uv1 [[user(locn1)]];
1277         float2 uv2 [[user(locn2)]];
1278     };
1279 
1280     fragment main0_out main0(main0_in in [[stage_in]], texture2d<float> tex0 [[texture(0)]], texture2d<float> tex1 [[texture(1)]], texture2d<float> tex2 [[texture(2)]], sampler smp [[sampler(0)]])
1281     {
1282         main0_out out = {};
1283         out.frag_color = float4((tex0.sample(smp, in.uv0).xyz + tex1.sample(smp, in.uv1).xyz) + tex2.sample(smp, in.uv2).xyz, 1.0);
1284         return out;
1285     }
1286 
1287 */
1288 __gshared char[616] FS_FSQ_SOURCE_METAL_MACOS = [
1289     0x23,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65,0x20,0x3c,0x6d,0x65,0x74,0x61,0x6c,0x5f,
1290     0x73,0x74,0x64,0x6c,0x69,0x62,0x3e,0x0a,0x23,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65,
1291     0x20,0x3c,0x73,0x69,0x6d,0x64,0x2f,0x73,0x69,0x6d,0x64,0x2e,0x68,0x3e,0x0a,0x0a,
1292     0x75,0x73,0x69,0x6e,0x67,0x20,0x6e,0x61,0x6d,0x65,0x73,0x70,0x61,0x63,0x65,0x20,
1293     0x6d,0x65,0x74,0x61,0x6c,0x3b,0x0a,0x0a,0x73,0x74,0x72,0x75,0x63,0x74,0x20,0x6d,
1294     0x61,0x69,0x6e,0x30,0x5f,0x6f,0x75,0x74,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,
1295     0x6c,0x6f,0x61,0x74,0x34,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,
1296     0x20,0x5b,0x5b,0x63,0x6f,0x6c,0x6f,0x72,0x28,0x30,0x29,0x5d,0x5d,0x3b,0x0a,0x7d,
1297     0x3b,0x0a,0x0a,0x73,0x74,0x72,0x75,0x63,0x74,0x20,0x6d,0x61,0x69,0x6e,0x30,0x5f,
1298     0x69,0x6e,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x32,0x20,
1299     0x75,0x76,0x30,0x20,0x5b,0x5b,0x75,0x73,0x65,0x72,0x28,0x6c,0x6f,0x63,0x6e,0x30,
1300     0x29,0x5d,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x32,0x20,
1301     0x75,0x76,0x31,0x20,0x5b,0x5b,0x75,0x73,0x65,0x72,0x28,0x6c,0x6f,0x63,0x6e,0x31,
1302     0x29,0x5d,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x32,0x20,
1303     0x75,0x76,0x32,0x20,0x5b,0x5b,0x75,0x73,0x65,0x72,0x28,0x6c,0x6f,0x63,0x6e,0x32,
1304     0x29,0x5d,0x5d,0x3b,0x0a,0x7d,0x3b,0x0a,0x0a,0x66,0x72,0x61,0x67,0x6d,0x65,0x6e,
1305     0x74,0x20,0x6d,0x61,0x69,0x6e,0x30,0x5f,0x6f,0x75,0x74,0x20,0x6d,0x61,0x69,0x6e,
1306     0x30,0x28,0x6d,0x61,0x69,0x6e,0x30,0x5f,0x69,0x6e,0x20,0x69,0x6e,0x20,0x5b,0x5b,
1307     0x73,0x74,0x61,0x67,0x65,0x5f,0x69,0x6e,0x5d,0x5d,0x2c,0x20,0x74,0x65,0x78,0x74,
1308     0x75,0x72,0x65,0x32,0x64,0x3c,0x66,0x6c,0x6f,0x61,0x74,0x3e,0x20,0x74,0x65,0x78,
1309     0x30,0x20,0x5b,0x5b,0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x28,0x30,0x29,0x5d,0x5d,
1310     0x2c,0x20,0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x32,0x64,0x3c,0x66,0x6c,0x6f,0x61,
1311     0x74,0x3e,0x20,0x74,0x65,0x78,0x31,0x20,0x5b,0x5b,0x74,0x65,0x78,0x74,0x75,0x72,
1312     0x65,0x28,0x31,0x29,0x5d,0x5d,0x2c,0x20,0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x32,
1313     0x64,0x3c,0x66,0x6c,0x6f,0x61,0x74,0x3e,0x20,0x74,0x65,0x78,0x32,0x20,0x5b,0x5b,
1314     0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x28,0x32,0x29,0x5d,0x5d,0x2c,0x20,0x73,0x61,
1315     0x6d,0x70,0x6c,0x65,0x72,0x20,0x73,0x6d,0x70,0x20,0x5b,0x5b,0x73,0x61,0x6d,0x70,
1316     0x6c,0x65,0x72,0x28,0x30,0x29,0x5d,0x5d,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,
1317     0x6d,0x61,0x69,0x6e,0x30,0x5f,0x6f,0x75,0x74,0x20,0x6f,0x75,0x74,0x20,0x3d,0x20,
1318     0x7b,0x7d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x6f,0x75,0x74,0x2e,0x66,0x72,0x61,0x67,
1319     0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x28,
1320     0x28,0x74,0x65,0x78,0x30,0x2e,0x73,0x61,0x6d,0x70,0x6c,0x65,0x28,0x73,0x6d,0x70,
1321     0x2c,0x20,0x69,0x6e,0x2e,0x75,0x76,0x30,0x29,0x2e,0x78,0x79,0x7a,0x20,0x2b,0x20,
1322     0x74,0x65,0x78,0x31,0x2e,0x73,0x61,0x6d,0x70,0x6c,0x65,0x28,0x73,0x6d,0x70,0x2c,
1323     0x20,0x69,0x6e,0x2e,0x75,0x76,0x31,0x29,0x2e,0x78,0x79,0x7a,0x29,0x20,0x2b,0x20,
1324     0x74,0x65,0x78,0x32,0x2e,0x73,0x61,0x6d,0x70,0x6c,0x65,0x28,0x73,0x6d,0x70,0x2c,
1325     0x20,0x69,0x6e,0x2e,0x75,0x76,0x32,0x29,0x2e,0x78,0x79,0x7a,0x2c,0x20,0x31,0x2e,
1326     0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6f,
1327     0x75,0x74,0x3b,0x0a,0x7d,0x0a,0x0a,0x00,
1328 ];
1329 /*
1330     #include <metal_stdlib>
1331     #include <simd/simd.h>
1332 
1333     using namespace metal;
1334 
1335     struct main0_out
1336     {
1337         float2 uv [[user(locn0)]];
1338         float4 gl_Position [[position]];
1339     };
1340 
1341     struct main0_in
1342     {
1343         float2 pos [[attribute(0)]];
1344     };
1345 
1346     vertex main0_out main0(main0_in in [[stage_in]])
1347     {
1348         main0_out out = {};
1349         out.gl_Position = float4((in.pos * 2.0) - float2(1.0), 0.5, 1.0);
1350         out.uv = in.pos;
1351         return out;
1352     }
1353 
1354 */
1355 __gshared char[404] VS_DBG_SOURCE_METAL_MACOS = [
1356     0x23,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65,0x20,0x3c,0x6d,0x65,0x74,0x61,0x6c,0x5f,
1357     0x73,0x74,0x64,0x6c,0x69,0x62,0x3e,0x0a,0x23,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65,
1358     0x20,0x3c,0x73,0x69,0x6d,0x64,0x2f,0x73,0x69,0x6d,0x64,0x2e,0x68,0x3e,0x0a,0x0a,
1359     0x75,0x73,0x69,0x6e,0x67,0x20,0x6e,0x61,0x6d,0x65,0x73,0x70,0x61,0x63,0x65,0x20,
1360     0x6d,0x65,0x74,0x61,0x6c,0x3b,0x0a,0x0a,0x73,0x74,0x72,0x75,0x63,0x74,0x20,0x6d,
1361     0x61,0x69,0x6e,0x30,0x5f,0x6f,0x75,0x74,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,
1362     0x6c,0x6f,0x61,0x74,0x32,0x20,0x75,0x76,0x20,0x5b,0x5b,0x75,0x73,0x65,0x72,0x28,
1363     0x6c,0x6f,0x63,0x6e,0x30,0x29,0x5d,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,
1364     0x6f,0x61,0x74,0x34,0x20,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,
1365     0x20,0x5b,0x5b,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x5d,0x5d,0x3b,0x0a,0x7d,
1366     0x3b,0x0a,0x0a,0x73,0x74,0x72,0x75,0x63,0x74,0x20,0x6d,0x61,0x69,0x6e,0x30,0x5f,
1367     0x69,0x6e,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x32,0x20,
1368     0x70,0x6f,0x73,0x20,0x5b,0x5b,0x61,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x28,
1369     0x30,0x29,0x5d,0x5d,0x3b,0x0a,0x7d,0x3b,0x0a,0x0a,0x76,0x65,0x72,0x74,0x65,0x78,
1370     0x20,0x6d,0x61,0x69,0x6e,0x30,0x5f,0x6f,0x75,0x74,0x20,0x6d,0x61,0x69,0x6e,0x30,
1371     0x28,0x6d,0x61,0x69,0x6e,0x30,0x5f,0x69,0x6e,0x20,0x69,0x6e,0x20,0x5b,0x5b,0x73,
1372     0x74,0x61,0x67,0x65,0x5f,0x69,0x6e,0x5d,0x5d,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,
1373     0x20,0x6d,0x61,0x69,0x6e,0x30,0x5f,0x6f,0x75,0x74,0x20,0x6f,0x75,0x74,0x20,0x3d,
1374     0x20,0x7b,0x7d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x6f,0x75,0x74,0x2e,0x67,0x6c,0x5f,
1375     0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x66,0x6c,0x6f,0x61,0x74,
1376     0x34,0x28,0x28,0x69,0x6e,0x2e,0x70,0x6f,0x73,0x20,0x2a,0x20,0x32,0x2e,0x30,0x29,
1377     0x20,0x2d,0x20,0x66,0x6c,0x6f,0x61,0x74,0x32,0x28,0x31,0x2e,0x30,0x29,0x2c,0x20,
1378     0x30,0x2e,0x35,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x6f,
1379     0x75,0x74,0x2e,0x75,0x76,0x20,0x3d,0x20,0x69,0x6e,0x2e,0x70,0x6f,0x73,0x3b,0x0a,
1380     0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6f,0x75,0x74,0x3b,0x0a,
1381     0x7d,0x0a,0x0a,0x00,
1382 ];
1383 /*
1384     #include <metal_stdlib>
1385     #include <simd/simd.h>
1386 
1387     using namespace metal;
1388 
1389     struct main0_out
1390     {
1391         float4 frag_color [[color(0)]];
1392     };
1393 
1394     struct main0_in
1395     {
1396         float2 uv [[user(locn0)]];
1397     };
1398 
1399     fragment main0_out main0(main0_in in [[stage_in]], texture2d<float> tex [[texture(0)]], sampler smp [[sampler(0)]])
1400     {
1401         main0_out out = {};
1402         out.frag_color = float4(tex.sample(smp, in.uv).xyz, 1.0);
1403         return out;
1404     }
1405 
1406 */
1407 __gshared char[408] FS_DBG_SOURCE_METAL_MACOS = [
1408     0x23,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65,0x20,0x3c,0x6d,0x65,0x74,0x61,0x6c,0x5f,
1409     0x73,0x74,0x64,0x6c,0x69,0x62,0x3e,0x0a,0x23,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65,
1410     0x20,0x3c,0x73,0x69,0x6d,0x64,0x2f,0x73,0x69,0x6d,0x64,0x2e,0x68,0x3e,0x0a,0x0a,
1411     0x75,0x73,0x69,0x6e,0x67,0x20,0x6e,0x61,0x6d,0x65,0x73,0x70,0x61,0x63,0x65,0x20,
1412     0x6d,0x65,0x74,0x61,0x6c,0x3b,0x0a,0x0a,0x73,0x74,0x72,0x75,0x63,0x74,0x20,0x6d,
1413     0x61,0x69,0x6e,0x30,0x5f,0x6f,0x75,0x74,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,
1414     0x6c,0x6f,0x61,0x74,0x34,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,
1415     0x20,0x5b,0x5b,0x63,0x6f,0x6c,0x6f,0x72,0x28,0x30,0x29,0x5d,0x5d,0x3b,0x0a,0x7d,
1416     0x3b,0x0a,0x0a,0x73,0x74,0x72,0x75,0x63,0x74,0x20,0x6d,0x61,0x69,0x6e,0x30,0x5f,
1417     0x69,0x6e,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x32,0x20,
1418     0x75,0x76,0x20,0x5b,0x5b,0x75,0x73,0x65,0x72,0x28,0x6c,0x6f,0x63,0x6e,0x30,0x29,
1419     0x5d,0x5d,0x3b,0x0a,0x7d,0x3b,0x0a,0x0a,0x66,0x72,0x61,0x67,0x6d,0x65,0x6e,0x74,
1420     0x20,0x6d,0x61,0x69,0x6e,0x30,0x5f,0x6f,0x75,0x74,0x20,0x6d,0x61,0x69,0x6e,0x30,
1421     0x28,0x6d,0x61,0x69,0x6e,0x30,0x5f,0x69,0x6e,0x20,0x69,0x6e,0x20,0x5b,0x5b,0x73,
1422     0x74,0x61,0x67,0x65,0x5f,0x69,0x6e,0x5d,0x5d,0x2c,0x20,0x74,0x65,0x78,0x74,0x75,
1423     0x72,0x65,0x32,0x64,0x3c,0x66,0x6c,0x6f,0x61,0x74,0x3e,0x20,0x74,0x65,0x78,0x20,
1424     0x5b,0x5b,0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x28,0x30,0x29,0x5d,0x5d,0x2c,0x20,
1425     0x73,0x61,0x6d,0x70,0x6c,0x65,0x72,0x20,0x73,0x6d,0x70,0x20,0x5b,0x5b,0x73,0x61,
1426     0x6d,0x70,0x6c,0x65,0x72,0x28,0x30,0x29,0x5d,0x5d,0x29,0x0a,0x7b,0x0a,0x20,0x20,
1427     0x20,0x20,0x6d,0x61,0x69,0x6e,0x30,0x5f,0x6f,0x75,0x74,0x20,0x6f,0x75,0x74,0x20,
1428     0x3d,0x20,0x7b,0x7d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x6f,0x75,0x74,0x2e,0x66,0x72,
1429     0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x66,0x6c,0x6f,0x61,0x74,
1430     0x34,0x28,0x74,0x65,0x78,0x2e,0x73,0x61,0x6d,0x70,0x6c,0x65,0x28,0x73,0x6d,0x70,
1431     0x2c,0x20,0x69,0x6e,0x2e,0x75,0x76,0x29,0x2e,0x78,0x79,0x7a,0x2c,0x20,0x31,0x2e,
1432     0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6f,
1433     0x75,0x74,0x3b,0x0a,0x7d,0x0a,0x0a,0x00,
1434 ];
1435 /*
1436     diagnostic(off, derivative_uniformity);
1437 
1438     struct offscreen_params {
1439       /_ @offset(0) _/
1440       mvp : mat4x4f,
1441     }
1442 
1443     @group(0) @binding(0) var<uniform> x_19 : offscreen_params;
1444 
1445     var<private> pos : vec4f;
1446 
1447     var<private> bright : f32;
1448 
1449     var<private> bright0 : f32;
1450 
1451     var<private> gl_Position : vec4f;
1452 
1453     fn main_1() {
1454       let x_22 : mat4x4f = x_19.mvp;
1455       let x_25 : vec4f = pos;
1456       gl_Position = (x_22 * x_25);
1457       let x_33 : f32 = bright0;
1458       bright = x_33;
1459       return;
1460     }
1461 
1462     struct main_out {
1463       @builtin(position)
1464       gl_Position : vec4f,
1465       @location(0)
1466       bright_1 : f32,
1467     }
1468 
1469     @vertex
1470     fn main(@location(0) pos_param : vec4f, @location(1) bright0_param : f32) -> main_out {
1471       pos = pos_param;
1472       bright0 = bright0_param;
1473       main_1();
1474       return main_out(gl_Position, bright);
1475     }
1476 
1477 */
1478 __gshared char[744] VS_OFFSCREEN_SOURCE_WGSL = [
1479     0x64,0x69,0x61,0x67,0x6e,0x6f,0x73,0x74,0x69,0x63,0x28,0x6f,0x66,0x66,0x2c,0x20,
1480     0x64,0x65,0x72,0x69,0x76,0x61,0x74,0x69,0x76,0x65,0x5f,0x75,0x6e,0x69,0x66,0x6f,
1481     0x72,0x6d,0x69,0x74,0x79,0x29,0x3b,0x0a,0x0a,0x73,0x74,0x72,0x75,0x63,0x74,0x20,
1482     0x6f,0x66,0x66,0x73,0x63,0x72,0x65,0x65,0x6e,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,
1483     0x20,0x7b,0x0a,0x20,0x20,0x2f,0x2a,0x20,0x40,0x6f,0x66,0x66,0x73,0x65,0x74,0x28,
1484     0x30,0x29,0x20,0x2a,0x2f,0x0a,0x20,0x20,0x6d,0x76,0x70,0x20,0x3a,0x20,0x6d,0x61,
1485     0x74,0x34,0x78,0x34,0x66,0x2c,0x0a,0x7d,0x0a,0x0a,0x40,0x67,0x72,0x6f,0x75,0x70,
1486     0x28,0x30,0x29,0x20,0x40,0x62,0x69,0x6e,0x64,0x69,0x6e,0x67,0x28,0x30,0x29,0x20,
1487     0x76,0x61,0x72,0x3c,0x75,0x6e,0x69,0x66,0x6f,0x72,0x6d,0x3e,0x20,0x78,0x5f,0x31,
1488     0x39,0x20,0x3a,0x20,0x6f,0x66,0x66,0x73,0x63,0x72,0x65,0x65,0x6e,0x5f,0x70,0x61,
1489     0x72,0x61,0x6d,0x73,0x3b,0x0a,0x0a,0x76,0x61,0x72,0x3c,0x70,0x72,0x69,0x76,0x61,
1490     0x74,0x65,0x3e,0x20,0x70,0x6f,0x73,0x20,0x3a,0x20,0x76,0x65,0x63,0x34,0x66,0x3b,
1491     0x0a,0x0a,0x76,0x61,0x72,0x3c,0x70,0x72,0x69,0x76,0x61,0x74,0x65,0x3e,0x20,0x62,
1492     0x72,0x69,0x67,0x68,0x74,0x20,0x3a,0x20,0x66,0x33,0x32,0x3b,0x0a,0x0a,0x76,0x61,
1493     0x72,0x3c,0x70,0x72,0x69,0x76,0x61,0x74,0x65,0x3e,0x20,0x62,0x72,0x69,0x67,0x68,
1494     0x74,0x30,0x20,0x3a,0x20,0x66,0x33,0x32,0x3b,0x0a,0x0a,0x76,0x61,0x72,0x3c,0x70,
1495     0x72,0x69,0x76,0x61,0x74,0x65,0x3e,0x20,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,
1496     0x69,0x6f,0x6e,0x20,0x3a,0x20,0x76,0x65,0x63,0x34,0x66,0x3b,0x0a,0x0a,0x66,0x6e,
1497     0x20,0x6d,0x61,0x69,0x6e,0x5f,0x31,0x28,0x29,0x20,0x7b,0x0a,0x20,0x20,0x6c,0x65,
1498     0x74,0x20,0x78,0x5f,0x32,0x32,0x20,0x3a,0x20,0x6d,0x61,0x74,0x34,0x78,0x34,0x66,
1499     0x20,0x3d,0x20,0x78,0x5f,0x31,0x39,0x2e,0x6d,0x76,0x70,0x3b,0x0a,0x20,0x20,0x6c,
1500     0x65,0x74,0x20,0x78,0x5f,0x32,0x35,0x20,0x3a,0x20,0x76,0x65,0x63,0x34,0x66,0x20,
1501     0x3d,0x20,0x70,0x6f,0x73,0x3b,0x0a,0x20,0x20,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,
1502     0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x28,0x78,0x5f,0x32,0x32,0x20,0x2a,0x20,0x78,
1503     0x5f,0x32,0x35,0x29,0x3b,0x0a,0x20,0x20,0x6c,0x65,0x74,0x20,0x78,0x5f,0x33,0x33,
1504     0x20,0x3a,0x20,0x66,0x33,0x32,0x20,0x3d,0x20,0x62,0x72,0x69,0x67,0x68,0x74,0x30,
1505     0x3b,0x0a,0x20,0x20,0x62,0x72,0x69,0x67,0x68,0x74,0x20,0x3d,0x20,0x78,0x5f,0x33,
1506     0x33,0x3b,0x0a,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x0a,0x7d,0x0a,0x0a,
1507     0x73,0x74,0x72,0x75,0x63,0x74,0x20,0x6d,0x61,0x69,0x6e,0x5f,0x6f,0x75,0x74,0x20,
1508     0x7b,0x0a,0x20,0x20,0x40,0x62,0x75,0x69,0x6c,0x74,0x69,0x6e,0x28,0x70,0x6f,0x73,
1509     0x69,0x74,0x69,0x6f,0x6e,0x29,0x0a,0x20,0x20,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,
1510     0x74,0x69,0x6f,0x6e,0x20,0x3a,0x20,0x76,0x65,0x63,0x34,0x66,0x2c,0x0a,0x20,0x20,
1511     0x40,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x28,0x30,0x29,0x0a,0x20,0x20,0x62,
1512     0x72,0x69,0x67,0x68,0x74,0x5f,0x31,0x20,0x3a,0x20,0x66,0x33,0x32,0x2c,0x0a,0x7d,
1513     0x0a,0x0a,0x40,0x76,0x65,0x72,0x74,0x65,0x78,0x0a,0x66,0x6e,0x20,0x6d,0x61,0x69,
1514     0x6e,0x28,0x40,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x28,0x30,0x29,0x20,0x70,
1515     0x6f,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x20,0x3a,0x20,0x76,0x65,0x63,0x34,0x66,
1516     0x2c,0x20,0x40,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x28,0x31,0x29,0x20,0x62,
1517     0x72,0x69,0x67,0x68,0x74,0x30,0x5f,0x70,0x61,0x72,0x61,0x6d,0x20,0x3a,0x20,0x66,
1518     0x33,0x32,0x29,0x20,0x2d,0x3e,0x20,0x6d,0x61,0x69,0x6e,0x5f,0x6f,0x75,0x74,0x20,
1519     0x7b,0x0a,0x20,0x20,0x70,0x6f,0x73,0x20,0x3d,0x20,0x70,0x6f,0x73,0x5f,0x70,0x61,
1520     0x72,0x61,0x6d,0x3b,0x0a,0x20,0x20,0x62,0x72,0x69,0x67,0x68,0x74,0x30,0x20,0x3d,
1521     0x20,0x62,0x72,0x69,0x67,0x68,0x74,0x30,0x5f,0x70,0x61,0x72,0x61,0x6d,0x3b,0x0a,
1522     0x20,0x20,0x6d,0x61,0x69,0x6e,0x5f,0x31,0x28,0x29,0x3b,0x0a,0x20,0x20,0x72,0x65,
1523     0x74,0x75,0x72,0x6e,0x20,0x6d,0x61,0x69,0x6e,0x5f,0x6f,0x75,0x74,0x28,0x67,0x6c,
1524     0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x2c,0x20,0x62,0x72,0x69,0x67,0x68,
1525     0x74,0x29,0x3b,0x0a,0x7d,0x0a,0x0a,0x00,
1526 ];
1527 /*
1528     diagnostic(off, derivative_uniformity);
1529 
1530     var<private> frag_color_0 : vec4f;
1531 
1532     var<private> bright : f32;
1533 
1534     var<private> frag_color_1 : vec4f;
1535 
1536     var<private> frag_color_2 : vec4f;
1537 
1538     fn main_1() {
1539       let x_12 : f32 = bright;
1540       frag_color_0 = vec4f(x_12, 0.0f, 0.0f, 1.0f);
1541       let x_17 : f32 = bright;
1542       frag_color_1 = vec4f(0.0f, x_17, 0.0f, 1.0f);
1543       let x_20 : f32 = bright;
1544       frag_color_2 = vec4f(0.0f, 0.0f, x_20, 1.0f);
1545       return;
1546     }
1547 
1548     struct main_out {
1549       @location(0)
1550       frag_color_0_1 : vec4f,
1551       @location(1)
1552       frag_color_1_1 : vec4f,
1553       @location(2)
1554       frag_color_2_1 : vec4f,
1555     }
1556 
1557     @fragment
1558     fn main(@location(0) bright_param : f32) -> main_out {
1559       bright = bright_param;
1560       main_1();
1561       return main_out(frag_color_0, frag_color_1, frag_color_2);
1562     }
1563 
1564 */
1565 __gshared char[740] FS_OFFSCREEN_SOURCE_WGSL = [
1566     0x64,0x69,0x61,0x67,0x6e,0x6f,0x73,0x74,0x69,0x63,0x28,0x6f,0x66,0x66,0x2c,0x20,
1567     0x64,0x65,0x72,0x69,0x76,0x61,0x74,0x69,0x76,0x65,0x5f,0x75,0x6e,0x69,0x66,0x6f,
1568     0x72,0x6d,0x69,0x74,0x79,0x29,0x3b,0x0a,0x0a,0x76,0x61,0x72,0x3c,0x70,0x72,0x69,
1569     0x76,0x61,0x74,0x65,0x3e,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,
1570     0x5f,0x30,0x20,0x3a,0x20,0x76,0x65,0x63,0x34,0x66,0x3b,0x0a,0x0a,0x76,0x61,0x72,
1571     0x3c,0x70,0x72,0x69,0x76,0x61,0x74,0x65,0x3e,0x20,0x62,0x72,0x69,0x67,0x68,0x74,
1572     0x20,0x3a,0x20,0x66,0x33,0x32,0x3b,0x0a,0x0a,0x76,0x61,0x72,0x3c,0x70,0x72,0x69,
1573     0x76,0x61,0x74,0x65,0x3e,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,
1574     0x5f,0x31,0x20,0x3a,0x20,0x76,0x65,0x63,0x34,0x66,0x3b,0x0a,0x0a,0x76,0x61,0x72,
1575     0x3c,0x70,0x72,0x69,0x76,0x61,0x74,0x65,0x3e,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,
1576     0x6f,0x6c,0x6f,0x72,0x5f,0x32,0x20,0x3a,0x20,0x76,0x65,0x63,0x34,0x66,0x3b,0x0a,
1577     0x0a,0x66,0x6e,0x20,0x6d,0x61,0x69,0x6e,0x5f,0x31,0x28,0x29,0x20,0x7b,0x0a,0x20,
1578     0x20,0x6c,0x65,0x74,0x20,0x78,0x5f,0x31,0x32,0x20,0x3a,0x20,0x66,0x33,0x32,0x20,
1579     0x3d,0x20,0x62,0x72,0x69,0x67,0x68,0x74,0x3b,0x0a,0x20,0x20,0x66,0x72,0x61,0x67,
1580     0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x5f,0x30,0x20,0x3d,0x20,0x76,0x65,0x63,0x34,0x66,
1581     0x28,0x78,0x5f,0x31,0x32,0x2c,0x20,0x30,0x2e,0x30,0x66,0x2c,0x20,0x30,0x2e,0x30,
1582     0x66,0x2c,0x20,0x31,0x2e,0x30,0x66,0x29,0x3b,0x0a,0x20,0x20,0x6c,0x65,0x74,0x20,
1583     0x78,0x5f,0x31,0x37,0x20,0x3a,0x20,0x66,0x33,0x32,0x20,0x3d,0x20,0x62,0x72,0x69,
1584     0x67,0x68,0x74,0x3b,0x0a,0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,
1585     0x72,0x5f,0x31,0x20,0x3d,0x20,0x76,0x65,0x63,0x34,0x66,0x28,0x30,0x2e,0x30,0x66,
1586     0x2c,0x20,0x78,0x5f,0x31,0x37,0x2c,0x20,0x30,0x2e,0x30,0x66,0x2c,0x20,0x31,0x2e,
1587     0x30,0x66,0x29,0x3b,0x0a,0x20,0x20,0x6c,0x65,0x74,0x20,0x78,0x5f,0x32,0x30,0x20,
1588     0x3a,0x20,0x66,0x33,0x32,0x20,0x3d,0x20,0x62,0x72,0x69,0x67,0x68,0x74,0x3b,0x0a,
1589     0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x5f,0x32,0x20,0x3d,
1590     0x20,0x76,0x65,0x63,0x34,0x66,0x28,0x30,0x2e,0x30,0x66,0x2c,0x20,0x30,0x2e,0x30,
1591     0x66,0x2c,0x20,0x78,0x5f,0x32,0x30,0x2c,0x20,0x31,0x2e,0x30,0x66,0x29,0x3b,0x0a,
1592     0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x0a,0x7d,0x0a,0x0a,0x73,0x74,0x72,
1593     0x75,0x63,0x74,0x20,0x6d,0x61,0x69,0x6e,0x5f,0x6f,0x75,0x74,0x20,0x7b,0x0a,0x20,
1594     0x20,0x40,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x28,0x30,0x29,0x0a,0x20,0x20,
1595     0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x5f,0x30,0x5f,0x31,0x20,0x3a,
1596     0x20,0x76,0x65,0x63,0x34,0x66,0x2c,0x0a,0x20,0x20,0x40,0x6c,0x6f,0x63,0x61,0x74,
1597     0x69,0x6f,0x6e,0x28,0x31,0x29,0x0a,0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,
1598     0x6c,0x6f,0x72,0x5f,0x31,0x5f,0x31,0x20,0x3a,0x20,0x76,0x65,0x63,0x34,0x66,0x2c,
1599     0x0a,0x20,0x20,0x40,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x28,0x32,0x29,0x0a,
1600     0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x5f,0x32,0x5f,0x31,
1601     0x20,0x3a,0x20,0x76,0x65,0x63,0x34,0x66,0x2c,0x0a,0x7d,0x0a,0x0a,0x40,0x66,0x72,
1602     0x61,0x67,0x6d,0x65,0x6e,0x74,0x0a,0x66,0x6e,0x20,0x6d,0x61,0x69,0x6e,0x28,0x40,
1603     0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x28,0x30,0x29,0x20,0x62,0x72,0x69,0x67,
1604     0x68,0x74,0x5f,0x70,0x61,0x72,0x61,0x6d,0x20,0x3a,0x20,0x66,0x33,0x32,0x29,0x20,
1605     0x2d,0x3e,0x20,0x6d,0x61,0x69,0x6e,0x5f,0x6f,0x75,0x74,0x20,0x7b,0x0a,0x20,0x20,
1606     0x62,0x72,0x69,0x67,0x68,0x74,0x20,0x3d,0x20,0x62,0x72,0x69,0x67,0x68,0x74,0x5f,
1607     0x70,0x61,0x72,0x61,0x6d,0x3b,0x0a,0x20,0x20,0x6d,0x61,0x69,0x6e,0x5f,0x31,0x28,
1608     0x29,0x3b,0x0a,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6d,0x61,0x69,0x6e,
1609     0x5f,0x6f,0x75,0x74,0x28,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x5f,
1610     0x30,0x2c,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x5f,0x31,0x2c,
1611     0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x5f,0x32,0x29,0x3b,0x0a,
1612     0x7d,0x0a,0x0a,0x00,
1613 ];
1614 /*
1615     diagnostic(off, derivative_uniformity);
1616 
1617     struct fsq_params {
1618       /_ @offset(0) _/
1619       offset : vec2f,
1620     }
1621 
1622     var<private> pos : vec2f;
1623 
1624     var<private> uv0 : vec2f;
1625 
1626     @group(0) @binding(0) var<uniform> x_36 : fsq_params;
1627 
1628     var<private> uv1 : vec2f;
1629 
1630     var<private> uv2 : vec2f;
1631 
1632     var<private> gl_Position : vec4f;
1633 
1634     fn main_1() {
1635       let x_19 : vec2f = pos;
1636       let x_24 : vec2f = ((x_19 * 2.0f) - vec2f(1.0f, 1.0f));
1637       gl_Position = vec4f(x_24.x, x_24.y, 0.5f, 1.0f);
1638       let x_33 : vec2f = pos;
1639       let x_40 : f32 = x_36.offset.x;
1640       uv0 = (x_33 + vec2f(x_40, 0.0f));
1641       let x_45 : vec2f = pos;
1642       let x_47 : f32 = x_36.offset.y;
1643       uv1 = (x_45 + vec2f(0.0f, x_47));
1644       let x_51 : vec2f = pos;
1645       uv2 = x_51;
1646       return;
1647     }
1648 
1649     struct main_out {
1650       @builtin(position)
1651       gl_Position : vec4f,
1652       @location(0)
1653       uv0_1 : vec2f,
1654       @location(1)
1655       uv1_1 : vec2f,
1656       @location(2)
1657       uv2_1 : vec2f,
1658     }
1659 
1660     @vertex
1661     fn main(@location(0) pos_param : vec2f) -> main_out {
1662       pos = pos_param;
1663       main_1();
1664       return main_out(gl_Position, uv0, uv1, uv2);
1665     }
1666 
1667 */
1668 __gshared char[998] VS_FSQ_SOURCE_WGSL = [
1669     0x64,0x69,0x61,0x67,0x6e,0x6f,0x73,0x74,0x69,0x63,0x28,0x6f,0x66,0x66,0x2c,0x20,
1670     0x64,0x65,0x72,0x69,0x76,0x61,0x74,0x69,0x76,0x65,0x5f,0x75,0x6e,0x69,0x66,0x6f,
1671     0x72,0x6d,0x69,0x74,0x79,0x29,0x3b,0x0a,0x0a,0x73,0x74,0x72,0x75,0x63,0x74,0x20,
1672     0x66,0x73,0x71,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x20,0x7b,0x0a,0x20,0x20,0x2f,
1673     0x2a,0x20,0x40,0x6f,0x66,0x66,0x73,0x65,0x74,0x28,0x30,0x29,0x20,0x2a,0x2f,0x0a,
1674     0x20,0x20,0x6f,0x66,0x66,0x73,0x65,0x74,0x20,0x3a,0x20,0x76,0x65,0x63,0x32,0x66,
1675     0x2c,0x0a,0x7d,0x0a,0x0a,0x76,0x61,0x72,0x3c,0x70,0x72,0x69,0x76,0x61,0x74,0x65,
1676     0x3e,0x20,0x70,0x6f,0x73,0x20,0x3a,0x20,0x76,0x65,0x63,0x32,0x66,0x3b,0x0a,0x0a,
1677     0x76,0x61,0x72,0x3c,0x70,0x72,0x69,0x76,0x61,0x74,0x65,0x3e,0x20,0x75,0x76,0x30,
1678     0x20,0x3a,0x20,0x76,0x65,0x63,0x32,0x66,0x3b,0x0a,0x0a,0x40,0x67,0x72,0x6f,0x75,
1679     0x70,0x28,0x30,0x29,0x20,0x40,0x62,0x69,0x6e,0x64,0x69,0x6e,0x67,0x28,0x30,0x29,
1680     0x20,0x76,0x61,0x72,0x3c,0x75,0x6e,0x69,0x66,0x6f,0x72,0x6d,0x3e,0x20,0x78,0x5f,
1681     0x33,0x36,0x20,0x3a,0x20,0x66,0x73,0x71,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x3b,
1682     0x0a,0x0a,0x76,0x61,0x72,0x3c,0x70,0x72,0x69,0x76,0x61,0x74,0x65,0x3e,0x20,0x75,
1683     0x76,0x31,0x20,0x3a,0x20,0x76,0x65,0x63,0x32,0x66,0x3b,0x0a,0x0a,0x76,0x61,0x72,
1684     0x3c,0x70,0x72,0x69,0x76,0x61,0x74,0x65,0x3e,0x20,0x75,0x76,0x32,0x20,0x3a,0x20,
1685     0x76,0x65,0x63,0x32,0x66,0x3b,0x0a,0x0a,0x76,0x61,0x72,0x3c,0x70,0x72,0x69,0x76,
1686     0x61,0x74,0x65,0x3e,0x20,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,
1687     0x20,0x3a,0x20,0x76,0x65,0x63,0x34,0x66,0x3b,0x0a,0x0a,0x66,0x6e,0x20,0x6d,0x61,
1688     0x69,0x6e,0x5f,0x31,0x28,0x29,0x20,0x7b,0x0a,0x20,0x20,0x6c,0x65,0x74,0x20,0x78,
1689     0x5f,0x31,0x39,0x20,0x3a,0x20,0x76,0x65,0x63,0x32,0x66,0x20,0x3d,0x20,0x70,0x6f,
1690     0x73,0x3b,0x0a,0x20,0x20,0x6c,0x65,0x74,0x20,0x78,0x5f,0x32,0x34,0x20,0x3a,0x20,
1691     0x76,0x65,0x63,0x32,0x66,0x20,0x3d,0x20,0x28,0x28,0x78,0x5f,0x31,0x39,0x20,0x2a,
1692     0x20,0x32,0x2e,0x30,0x66,0x29,0x20,0x2d,0x20,0x76,0x65,0x63,0x32,0x66,0x28,0x31,
1693     0x2e,0x30,0x66,0x2c,0x20,0x31,0x2e,0x30,0x66,0x29,0x29,0x3b,0x0a,0x20,0x20,0x67,
1694     0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x76,0x65,0x63,
1695     0x34,0x66,0x28,0x78,0x5f,0x32,0x34,0x2e,0x78,0x2c,0x20,0x78,0x5f,0x32,0x34,0x2e,
1696     0x79,0x2c,0x20,0x30,0x2e,0x35,0x66,0x2c,0x20,0x31,0x2e,0x30,0x66,0x29,0x3b,0x0a,
1697     0x20,0x20,0x6c,0x65,0x74,0x20,0x78,0x5f,0x33,0x33,0x20,0x3a,0x20,0x76,0x65,0x63,
1698     0x32,0x66,0x20,0x3d,0x20,0x70,0x6f,0x73,0x3b,0x0a,0x20,0x20,0x6c,0x65,0x74,0x20,
1699     0x78,0x5f,0x34,0x30,0x20,0x3a,0x20,0x66,0x33,0x32,0x20,0x3d,0x20,0x78,0x5f,0x33,
1700     0x36,0x2e,0x6f,0x66,0x66,0x73,0x65,0x74,0x2e,0x78,0x3b,0x0a,0x20,0x20,0x75,0x76,
1701     0x30,0x20,0x3d,0x20,0x28,0x78,0x5f,0x33,0x33,0x20,0x2b,0x20,0x76,0x65,0x63,0x32,
1702     0x66,0x28,0x78,0x5f,0x34,0x30,0x2c,0x20,0x30,0x2e,0x30,0x66,0x29,0x29,0x3b,0x0a,
1703     0x20,0x20,0x6c,0x65,0x74,0x20,0x78,0x5f,0x34,0x35,0x20,0x3a,0x20,0x76,0x65,0x63,
1704     0x32,0x66,0x20,0x3d,0x20,0x70,0x6f,0x73,0x3b,0x0a,0x20,0x20,0x6c,0x65,0x74,0x20,
1705     0x78,0x5f,0x34,0x37,0x20,0x3a,0x20,0x66,0x33,0x32,0x20,0x3d,0x20,0x78,0x5f,0x33,
1706     0x36,0x2e,0x6f,0x66,0x66,0x73,0x65,0x74,0x2e,0x79,0x3b,0x0a,0x20,0x20,0x75,0x76,
1707     0x31,0x20,0x3d,0x20,0x28,0x78,0x5f,0x34,0x35,0x20,0x2b,0x20,0x76,0x65,0x63,0x32,
1708     0x66,0x28,0x30,0x2e,0x30,0x66,0x2c,0x20,0x78,0x5f,0x34,0x37,0x29,0x29,0x3b,0x0a,
1709     0x20,0x20,0x6c,0x65,0x74,0x20,0x78,0x5f,0x35,0x31,0x20,0x3a,0x20,0x76,0x65,0x63,
1710     0x32,0x66,0x20,0x3d,0x20,0x70,0x6f,0x73,0x3b,0x0a,0x20,0x20,0x75,0x76,0x32,0x20,
1711     0x3d,0x20,0x78,0x5f,0x35,0x31,0x3b,0x0a,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,
1712     0x3b,0x0a,0x7d,0x0a,0x0a,0x73,0x74,0x72,0x75,0x63,0x74,0x20,0x6d,0x61,0x69,0x6e,
1713     0x5f,0x6f,0x75,0x74,0x20,0x7b,0x0a,0x20,0x20,0x40,0x62,0x75,0x69,0x6c,0x74,0x69,
1714     0x6e,0x28,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x29,0x0a,0x20,0x20,0x67,0x6c,
1715     0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x3a,0x20,0x76,0x65,0x63,0x34,
1716     0x66,0x2c,0x0a,0x20,0x20,0x40,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x28,0x30,
1717     0x29,0x0a,0x20,0x20,0x75,0x76,0x30,0x5f,0x31,0x20,0x3a,0x20,0x76,0x65,0x63,0x32,
1718     0x66,0x2c,0x0a,0x20,0x20,0x40,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x28,0x31,
1719     0x29,0x0a,0x20,0x20,0x75,0x76,0x31,0x5f,0x31,0x20,0x3a,0x20,0x76,0x65,0x63,0x32,
1720     0x66,0x2c,0x0a,0x20,0x20,0x40,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x28,0x32,
1721     0x29,0x0a,0x20,0x20,0x75,0x76,0x32,0x5f,0x31,0x20,0x3a,0x20,0x76,0x65,0x63,0x32,
1722     0x66,0x2c,0x0a,0x7d,0x0a,0x0a,0x40,0x76,0x65,0x72,0x74,0x65,0x78,0x0a,0x66,0x6e,
1723     0x20,0x6d,0x61,0x69,0x6e,0x28,0x40,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x28,
1724     0x30,0x29,0x20,0x70,0x6f,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x20,0x3a,0x20,0x76,
1725     0x65,0x63,0x32,0x66,0x29,0x20,0x2d,0x3e,0x20,0x6d,0x61,0x69,0x6e,0x5f,0x6f,0x75,
1726     0x74,0x20,0x7b,0x0a,0x20,0x20,0x70,0x6f,0x73,0x20,0x3d,0x20,0x70,0x6f,0x73,0x5f,
1727     0x70,0x61,0x72,0x61,0x6d,0x3b,0x0a,0x20,0x20,0x6d,0x61,0x69,0x6e,0x5f,0x31,0x28,
1728     0x29,0x3b,0x0a,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6d,0x61,0x69,0x6e,
1729     0x5f,0x6f,0x75,0x74,0x28,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,
1730     0x2c,0x20,0x75,0x76,0x30,0x2c,0x20,0x75,0x76,0x31,0x2c,0x20,0x75,0x76,0x32,0x29,
1731     0x3b,0x0a,0x7d,0x0a,0x0a,0x00,
1732 ];
1733 /*
1734     diagnostic(off, derivative_uniformity);
1735 
1736     @group(1) @binding(64) var tex0 : texture_2d<f32>;
1737 
1738     @group(1) @binding(80) var smp : sampler;
1739 
1740     var<private> uv0 : vec2f;
1741 
1742     @group(1) @binding(65) var tex1 : texture_2d<f32>;
1743 
1744     var<private> uv1 : vec2f;
1745 
1746     @group(1) @binding(66) var tex2 : texture_2d<f32>;
1747 
1748     var<private> uv2 : vec2f;
1749 
1750     var<private> frag_color : vec4f;
1751 
1752     fn main_1() {
1753       var c0 : vec3f;
1754       var c1 : vec3f;
1755       var c2 : vec3f;
1756       let x_23 : vec2f = uv0;
1757       let x_25 : vec4f = textureSample(tex0, smp, x_23);
1758       c0 = vec3f(x_25.x, x_25.y, x_25.z);
1759       let x_33 : vec2f = uv1;
1760       let x_34 : vec4f = textureSample(tex1, smp, x_33);
1761       c1 = vec3f(x_34.x, x_34.y, x_34.z);
1762       let x_42 : vec2f = uv2;
1763       let x_43 : vec4f = textureSample(tex2, smp, x_42);
1764       c2 = vec3f(x_43.x, x_43.y, x_43.z);
1765       let x_47 : vec3f = c0;
1766       let x_48 : vec3f = c1;
1767       let x_50 : vec3f = c2;
1768       let x_51 : vec3f = ((x_47 + x_48) + x_50);
1769       frag_color = vec4f(x_51.x, x_51.y, x_51.z, 1.0f);
1770       return;
1771     }
1772 
1773     struct main_out {
1774       @location(0)
1775       frag_color_1 : vec4f,
1776     }
1777 
1778     @fragment
1779     fn main(@location(0) uv0_param : vec2f, @location(1) uv1_param : vec2f, @location(2) uv2_param : vec2f) -> main_out {
1780       uv0 = uv0_param;
1781       uv1 = uv1_param;
1782       uv2 = uv2_param;
1783       main_1();
1784       return main_out(frag_color);
1785     }
1786 
1787 */
1788 __gshared char[1251] FS_FSQ_SOURCE_WGSL = [
1789     0x64,0x69,0x61,0x67,0x6e,0x6f,0x73,0x74,0x69,0x63,0x28,0x6f,0x66,0x66,0x2c,0x20,
1790     0x64,0x65,0x72,0x69,0x76,0x61,0x74,0x69,0x76,0x65,0x5f,0x75,0x6e,0x69,0x66,0x6f,
1791     0x72,0x6d,0x69,0x74,0x79,0x29,0x3b,0x0a,0x0a,0x40,0x67,0x72,0x6f,0x75,0x70,0x28,
1792     0x31,0x29,0x20,0x40,0x62,0x69,0x6e,0x64,0x69,0x6e,0x67,0x28,0x36,0x34,0x29,0x20,
1793     0x76,0x61,0x72,0x20,0x74,0x65,0x78,0x30,0x20,0x3a,0x20,0x74,0x65,0x78,0x74,0x75,
1794     0x72,0x65,0x5f,0x32,0x64,0x3c,0x66,0x33,0x32,0x3e,0x3b,0x0a,0x0a,0x40,0x67,0x72,
1795     0x6f,0x75,0x70,0x28,0x31,0x29,0x20,0x40,0x62,0x69,0x6e,0x64,0x69,0x6e,0x67,0x28,
1796     0x38,0x30,0x29,0x20,0x76,0x61,0x72,0x20,0x73,0x6d,0x70,0x20,0x3a,0x20,0x73,0x61,
1797     0x6d,0x70,0x6c,0x65,0x72,0x3b,0x0a,0x0a,0x76,0x61,0x72,0x3c,0x70,0x72,0x69,0x76,
1798     0x61,0x74,0x65,0x3e,0x20,0x75,0x76,0x30,0x20,0x3a,0x20,0x76,0x65,0x63,0x32,0x66,
1799     0x3b,0x0a,0x0a,0x40,0x67,0x72,0x6f,0x75,0x70,0x28,0x31,0x29,0x20,0x40,0x62,0x69,
1800     0x6e,0x64,0x69,0x6e,0x67,0x28,0x36,0x35,0x29,0x20,0x76,0x61,0x72,0x20,0x74,0x65,
1801     0x78,0x31,0x20,0x3a,0x20,0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x5f,0x32,0x64,0x3c,
1802     0x66,0x33,0x32,0x3e,0x3b,0x0a,0x0a,0x76,0x61,0x72,0x3c,0x70,0x72,0x69,0x76,0x61,
1803     0x74,0x65,0x3e,0x20,0x75,0x76,0x31,0x20,0x3a,0x20,0x76,0x65,0x63,0x32,0x66,0x3b,
1804     0x0a,0x0a,0x40,0x67,0x72,0x6f,0x75,0x70,0x28,0x31,0x29,0x20,0x40,0x62,0x69,0x6e,
1805     0x64,0x69,0x6e,0x67,0x28,0x36,0x36,0x29,0x20,0x76,0x61,0x72,0x20,0x74,0x65,0x78,
1806     0x32,0x20,0x3a,0x20,0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x5f,0x32,0x64,0x3c,0x66,
1807     0x33,0x32,0x3e,0x3b,0x0a,0x0a,0x76,0x61,0x72,0x3c,0x70,0x72,0x69,0x76,0x61,0x74,
1808     0x65,0x3e,0x20,0x75,0x76,0x32,0x20,0x3a,0x20,0x76,0x65,0x63,0x32,0x66,0x3b,0x0a,
1809     0x0a,0x76,0x61,0x72,0x3c,0x70,0x72,0x69,0x76,0x61,0x74,0x65,0x3e,0x20,0x66,0x72,
1810     0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3a,0x20,0x76,0x65,0x63,0x34,0x66,
1811     0x3b,0x0a,0x0a,0x66,0x6e,0x20,0x6d,0x61,0x69,0x6e,0x5f,0x31,0x28,0x29,0x20,0x7b,
1812     0x0a,0x20,0x20,0x76,0x61,0x72,0x20,0x63,0x30,0x20,0x3a,0x20,0x76,0x65,0x63,0x33,
1813     0x66,0x3b,0x0a,0x20,0x20,0x76,0x61,0x72,0x20,0x63,0x31,0x20,0x3a,0x20,0x76,0x65,
1814     0x63,0x33,0x66,0x3b,0x0a,0x20,0x20,0x76,0x61,0x72,0x20,0x63,0x32,0x20,0x3a,0x20,
1815     0x76,0x65,0x63,0x33,0x66,0x3b,0x0a,0x20,0x20,0x6c,0x65,0x74,0x20,0x78,0x5f,0x32,
1816     0x33,0x20,0x3a,0x20,0x76,0x65,0x63,0x32,0x66,0x20,0x3d,0x20,0x75,0x76,0x30,0x3b,
1817     0x0a,0x20,0x20,0x6c,0x65,0x74,0x20,0x78,0x5f,0x32,0x35,0x20,0x3a,0x20,0x76,0x65,
1818     0x63,0x34,0x66,0x20,0x3d,0x20,0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x53,0x61,0x6d,
1819     0x70,0x6c,0x65,0x28,0x74,0x65,0x78,0x30,0x2c,0x20,0x73,0x6d,0x70,0x2c,0x20,0x78,
1820     0x5f,0x32,0x33,0x29,0x3b,0x0a,0x20,0x20,0x63,0x30,0x20,0x3d,0x20,0x76,0x65,0x63,
1821     0x33,0x66,0x28,0x78,0x5f,0x32,0x35,0x2e,0x78,0x2c,0x20,0x78,0x5f,0x32,0x35,0x2e,
1822     0x79,0x2c,0x20,0x78,0x5f,0x32,0x35,0x2e,0x7a,0x29,0x3b,0x0a,0x20,0x20,0x6c,0x65,
1823     0x74,0x20,0x78,0x5f,0x33,0x33,0x20,0x3a,0x20,0x76,0x65,0x63,0x32,0x66,0x20,0x3d,
1824     0x20,0x75,0x76,0x31,0x3b,0x0a,0x20,0x20,0x6c,0x65,0x74,0x20,0x78,0x5f,0x33,0x34,
1825     0x20,0x3a,0x20,0x76,0x65,0x63,0x34,0x66,0x20,0x3d,0x20,0x74,0x65,0x78,0x74,0x75,
1826     0x72,0x65,0x53,0x61,0x6d,0x70,0x6c,0x65,0x28,0x74,0x65,0x78,0x31,0x2c,0x20,0x73,
1827     0x6d,0x70,0x2c,0x20,0x78,0x5f,0x33,0x33,0x29,0x3b,0x0a,0x20,0x20,0x63,0x31,0x20,
1828     0x3d,0x20,0x76,0x65,0x63,0x33,0x66,0x28,0x78,0x5f,0x33,0x34,0x2e,0x78,0x2c,0x20,
1829     0x78,0x5f,0x33,0x34,0x2e,0x79,0x2c,0x20,0x78,0x5f,0x33,0x34,0x2e,0x7a,0x29,0x3b,
1830     0x0a,0x20,0x20,0x6c,0x65,0x74,0x20,0x78,0x5f,0x34,0x32,0x20,0x3a,0x20,0x76,0x65,
1831     0x63,0x32,0x66,0x20,0x3d,0x20,0x75,0x76,0x32,0x3b,0x0a,0x20,0x20,0x6c,0x65,0x74,
1832     0x20,0x78,0x5f,0x34,0x33,0x20,0x3a,0x20,0x76,0x65,0x63,0x34,0x66,0x20,0x3d,0x20,
1833     0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x53,0x61,0x6d,0x70,0x6c,0x65,0x28,0x74,0x65,
1834     0x78,0x32,0x2c,0x20,0x73,0x6d,0x70,0x2c,0x20,0x78,0x5f,0x34,0x32,0x29,0x3b,0x0a,
1835     0x20,0x20,0x63,0x32,0x20,0x3d,0x20,0x76,0x65,0x63,0x33,0x66,0x28,0x78,0x5f,0x34,
1836     0x33,0x2e,0x78,0x2c,0x20,0x78,0x5f,0x34,0x33,0x2e,0x79,0x2c,0x20,0x78,0x5f,0x34,
1837     0x33,0x2e,0x7a,0x29,0x3b,0x0a,0x20,0x20,0x6c,0x65,0x74,0x20,0x78,0x5f,0x34,0x37,
1838     0x20,0x3a,0x20,0x76,0x65,0x63,0x33,0x66,0x20,0x3d,0x20,0x63,0x30,0x3b,0x0a,0x20,
1839     0x20,0x6c,0x65,0x74,0x20,0x78,0x5f,0x34,0x38,0x20,0x3a,0x20,0x76,0x65,0x63,0x33,
1840     0x66,0x20,0x3d,0x20,0x63,0x31,0x3b,0x0a,0x20,0x20,0x6c,0x65,0x74,0x20,0x78,0x5f,
1841     0x35,0x30,0x20,0x3a,0x20,0x76,0x65,0x63,0x33,0x66,0x20,0x3d,0x20,0x63,0x32,0x3b,
1842     0x0a,0x20,0x20,0x6c,0x65,0x74,0x20,0x78,0x5f,0x35,0x31,0x20,0x3a,0x20,0x76,0x65,
1843     0x63,0x33,0x66,0x20,0x3d,0x20,0x28,0x28,0x78,0x5f,0x34,0x37,0x20,0x2b,0x20,0x78,
1844     0x5f,0x34,0x38,0x29,0x20,0x2b,0x20,0x78,0x5f,0x35,0x30,0x29,0x3b,0x0a,0x20,0x20,
1845     0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x76,0x65,0x63,
1846     0x34,0x66,0x28,0x78,0x5f,0x35,0x31,0x2e,0x78,0x2c,0x20,0x78,0x5f,0x35,0x31,0x2e,
1847     0x79,0x2c,0x20,0x78,0x5f,0x35,0x31,0x2e,0x7a,0x2c,0x20,0x31,0x2e,0x30,0x66,0x29,
1848     0x3b,0x0a,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x0a,0x7d,0x0a,0x0a,0x73,
1849     0x74,0x72,0x75,0x63,0x74,0x20,0x6d,0x61,0x69,0x6e,0x5f,0x6f,0x75,0x74,0x20,0x7b,
1850     0x0a,0x20,0x20,0x40,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x28,0x30,0x29,0x0a,
1851     0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x5f,0x31,0x20,0x3a,
1852     0x20,0x76,0x65,0x63,0x34,0x66,0x2c,0x0a,0x7d,0x0a,0x0a,0x40,0x66,0x72,0x61,0x67,
1853     0x6d,0x65,0x6e,0x74,0x0a,0x66,0x6e,0x20,0x6d,0x61,0x69,0x6e,0x28,0x40,0x6c,0x6f,
1854     0x63,0x61,0x74,0x69,0x6f,0x6e,0x28,0x30,0x29,0x20,0x75,0x76,0x30,0x5f,0x70,0x61,
1855     0x72,0x61,0x6d,0x20,0x3a,0x20,0x76,0x65,0x63,0x32,0x66,0x2c,0x20,0x40,0x6c,0x6f,
1856     0x63,0x61,0x74,0x69,0x6f,0x6e,0x28,0x31,0x29,0x20,0x75,0x76,0x31,0x5f,0x70,0x61,
1857     0x72,0x61,0x6d,0x20,0x3a,0x20,0x76,0x65,0x63,0x32,0x66,0x2c,0x20,0x40,0x6c,0x6f,
1858     0x63,0x61,0x74,0x69,0x6f,0x6e,0x28,0x32,0x29,0x20,0x75,0x76,0x32,0x5f,0x70,0x61,
1859     0x72,0x61,0x6d,0x20,0x3a,0x20,0x76,0x65,0x63,0x32,0x66,0x29,0x20,0x2d,0x3e,0x20,
1860     0x6d,0x61,0x69,0x6e,0x5f,0x6f,0x75,0x74,0x20,0x7b,0x0a,0x20,0x20,0x75,0x76,0x30,
1861     0x20,0x3d,0x20,0x75,0x76,0x30,0x5f,0x70,0x61,0x72,0x61,0x6d,0x3b,0x0a,0x20,0x20,
1862     0x75,0x76,0x31,0x20,0x3d,0x20,0x75,0x76,0x31,0x5f,0x70,0x61,0x72,0x61,0x6d,0x3b,
1863     0x0a,0x20,0x20,0x75,0x76,0x32,0x20,0x3d,0x20,0x75,0x76,0x32,0x5f,0x70,0x61,0x72,
1864     0x61,0x6d,0x3b,0x0a,0x20,0x20,0x6d,0x61,0x69,0x6e,0x5f,0x31,0x28,0x29,0x3b,0x0a,
1865     0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6d,0x61,0x69,0x6e,0x5f,0x6f,0x75,
1866     0x74,0x28,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x29,0x3b,0x0a,0x7d,
1867     0x0a,0x0a,0x00,
1868 ];
1869 /*
1870     diagnostic(off, derivative_uniformity);
1871 
1872     var<private> pos : vec2f;
1873 
1874     var<private> uv : vec2f;
1875 
1876     var<private> gl_Position : vec4f;
1877 
1878     fn main_1() {
1879       let x_19 : vec2f = pos;
1880       let x_24 : vec2f = ((x_19 * 2.0f) - vec2f(1.0f, 1.0f));
1881       gl_Position = vec4f(x_24.x, x_24.y, 0.5f, 1.0f);
1882       let x_33 : vec2f = pos;
1883       uv = x_33;
1884       return;
1885     }
1886 
1887     struct main_out {
1888       @builtin(position)
1889       gl_Position : vec4f,
1890       @location(0)
1891       uv_1 : vec2f,
1892     }
1893 
1894     @vertex
1895     fn main(@location(0) pos_param : vec2f) -> main_out {
1896       pos = pos_param;
1897       main_1();
1898       return main_out(gl_Position, uv);
1899     }
1900 
1901 */
1902 __gshared char[559] VS_DBG_SOURCE_WGSL = [
1903     0x64,0x69,0x61,0x67,0x6e,0x6f,0x73,0x74,0x69,0x63,0x28,0x6f,0x66,0x66,0x2c,0x20,
1904     0x64,0x65,0x72,0x69,0x76,0x61,0x74,0x69,0x76,0x65,0x5f,0x75,0x6e,0x69,0x66,0x6f,
1905     0x72,0x6d,0x69,0x74,0x79,0x29,0x3b,0x0a,0x0a,0x76,0x61,0x72,0x3c,0x70,0x72,0x69,
1906     0x76,0x61,0x74,0x65,0x3e,0x20,0x70,0x6f,0x73,0x20,0x3a,0x20,0x76,0x65,0x63,0x32,
1907     0x66,0x3b,0x0a,0x0a,0x76,0x61,0x72,0x3c,0x70,0x72,0x69,0x76,0x61,0x74,0x65,0x3e,
1908     0x20,0x75,0x76,0x20,0x3a,0x20,0x76,0x65,0x63,0x32,0x66,0x3b,0x0a,0x0a,0x76,0x61,
1909     0x72,0x3c,0x70,0x72,0x69,0x76,0x61,0x74,0x65,0x3e,0x20,0x67,0x6c,0x5f,0x50,0x6f,
1910     0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x3a,0x20,0x76,0x65,0x63,0x34,0x66,0x3b,0x0a,
1911     0x0a,0x66,0x6e,0x20,0x6d,0x61,0x69,0x6e,0x5f,0x31,0x28,0x29,0x20,0x7b,0x0a,0x20,
1912     0x20,0x6c,0x65,0x74,0x20,0x78,0x5f,0x31,0x39,0x20,0x3a,0x20,0x76,0x65,0x63,0x32,
1913     0x66,0x20,0x3d,0x20,0x70,0x6f,0x73,0x3b,0x0a,0x20,0x20,0x6c,0x65,0x74,0x20,0x78,
1914     0x5f,0x32,0x34,0x20,0x3a,0x20,0x76,0x65,0x63,0x32,0x66,0x20,0x3d,0x20,0x28,0x28,
1915     0x78,0x5f,0x31,0x39,0x20,0x2a,0x20,0x32,0x2e,0x30,0x66,0x29,0x20,0x2d,0x20,0x76,
1916     0x65,0x63,0x32,0x66,0x28,0x31,0x2e,0x30,0x66,0x2c,0x20,0x31,0x2e,0x30,0x66,0x29,
1917     0x29,0x3b,0x0a,0x20,0x20,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,
1918     0x20,0x3d,0x20,0x76,0x65,0x63,0x34,0x66,0x28,0x78,0x5f,0x32,0x34,0x2e,0x78,0x2c,
1919     0x20,0x78,0x5f,0x32,0x34,0x2e,0x79,0x2c,0x20,0x30,0x2e,0x35,0x66,0x2c,0x20,0x31,
1920     0x2e,0x30,0x66,0x29,0x3b,0x0a,0x20,0x20,0x6c,0x65,0x74,0x20,0x78,0x5f,0x33,0x33,
1921     0x20,0x3a,0x20,0x76,0x65,0x63,0x32,0x66,0x20,0x3d,0x20,0x70,0x6f,0x73,0x3b,0x0a,
1922     0x20,0x20,0x75,0x76,0x20,0x3d,0x20,0x78,0x5f,0x33,0x33,0x3b,0x0a,0x20,0x20,0x72,
1923     0x65,0x74,0x75,0x72,0x6e,0x3b,0x0a,0x7d,0x0a,0x0a,0x73,0x74,0x72,0x75,0x63,0x74,
1924     0x20,0x6d,0x61,0x69,0x6e,0x5f,0x6f,0x75,0x74,0x20,0x7b,0x0a,0x20,0x20,0x40,0x62,
1925     0x75,0x69,0x6c,0x74,0x69,0x6e,0x28,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x29,
1926     0x0a,0x20,0x20,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x3a,
1927     0x20,0x76,0x65,0x63,0x34,0x66,0x2c,0x0a,0x20,0x20,0x40,0x6c,0x6f,0x63,0x61,0x74,
1928     0x69,0x6f,0x6e,0x28,0x30,0x29,0x0a,0x20,0x20,0x75,0x76,0x5f,0x31,0x20,0x3a,0x20,
1929     0x76,0x65,0x63,0x32,0x66,0x2c,0x0a,0x7d,0x0a,0x0a,0x40,0x76,0x65,0x72,0x74,0x65,
1930     0x78,0x0a,0x66,0x6e,0x20,0x6d,0x61,0x69,0x6e,0x28,0x40,0x6c,0x6f,0x63,0x61,0x74,
1931     0x69,0x6f,0x6e,0x28,0x30,0x29,0x20,0x70,0x6f,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,
1932     0x20,0x3a,0x20,0x76,0x65,0x63,0x32,0x66,0x29,0x20,0x2d,0x3e,0x20,0x6d,0x61,0x69,
1933     0x6e,0x5f,0x6f,0x75,0x74,0x20,0x7b,0x0a,0x20,0x20,0x70,0x6f,0x73,0x20,0x3d,0x20,
1934     0x70,0x6f,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x3b,0x0a,0x20,0x20,0x6d,0x61,0x69,
1935     0x6e,0x5f,0x31,0x28,0x29,0x3b,0x0a,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,
1936     0x6d,0x61,0x69,0x6e,0x5f,0x6f,0x75,0x74,0x28,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,
1937     0x74,0x69,0x6f,0x6e,0x2c,0x20,0x75,0x76,0x29,0x3b,0x0a,0x7d,0x0a,0x0a,0x00,
1938 ];
1939 /*
1940     diagnostic(off, derivative_uniformity);
1941 
1942     var<private> frag_color : vec4f;
1943 
1944     @group(1) @binding(64) var tex : texture_2d<f32>;
1945 
1946     @group(1) @binding(80) var smp : sampler;
1947 
1948     var<private> uv : vec2f;
1949 
1950     fn main_1() {
1951       let x_23 : vec2f = uv;
1952       let x_24 : vec4f = textureSample(tex, smp, x_23);
1953       let x_26 : vec3f = vec3f(x_24.x, x_24.y, x_24.z);
1954       frag_color = vec4f(x_26.x, x_26.y, x_26.z, 1.0f);
1955       return;
1956     }
1957 
1958     struct main_out {
1959       @location(0)
1960       frag_color_1 : vec4f,
1961     }
1962 
1963     @fragment
1964     fn main(@location(0) uv_param : vec2f) -> main_out {
1965       uv = uv_param;
1966       main_1();
1967       return main_out(frag_color);
1968     }
1969 
1970 */
1971 __gshared char[590] FS_DBG_SOURCE_WGSL = [
1972     0x64,0x69,0x61,0x67,0x6e,0x6f,0x73,0x74,0x69,0x63,0x28,0x6f,0x66,0x66,0x2c,0x20,
1973     0x64,0x65,0x72,0x69,0x76,0x61,0x74,0x69,0x76,0x65,0x5f,0x75,0x6e,0x69,0x66,0x6f,
1974     0x72,0x6d,0x69,0x74,0x79,0x29,0x3b,0x0a,0x0a,0x76,0x61,0x72,0x3c,0x70,0x72,0x69,
1975     0x76,0x61,0x74,0x65,0x3e,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,
1976     0x20,0x3a,0x20,0x76,0x65,0x63,0x34,0x66,0x3b,0x0a,0x0a,0x40,0x67,0x72,0x6f,0x75,
1977     0x70,0x28,0x31,0x29,0x20,0x40,0x62,0x69,0x6e,0x64,0x69,0x6e,0x67,0x28,0x36,0x34,
1978     0x29,0x20,0x76,0x61,0x72,0x20,0x74,0x65,0x78,0x20,0x3a,0x20,0x74,0x65,0x78,0x74,
1979     0x75,0x72,0x65,0x5f,0x32,0x64,0x3c,0x66,0x33,0x32,0x3e,0x3b,0x0a,0x0a,0x40,0x67,
1980     0x72,0x6f,0x75,0x70,0x28,0x31,0x29,0x20,0x40,0x62,0x69,0x6e,0x64,0x69,0x6e,0x67,
1981     0x28,0x38,0x30,0x29,0x20,0x76,0x61,0x72,0x20,0x73,0x6d,0x70,0x20,0x3a,0x20,0x73,
1982     0x61,0x6d,0x70,0x6c,0x65,0x72,0x3b,0x0a,0x0a,0x76,0x61,0x72,0x3c,0x70,0x72,0x69,
1983     0x76,0x61,0x74,0x65,0x3e,0x20,0x75,0x76,0x20,0x3a,0x20,0x76,0x65,0x63,0x32,0x66,
1984     0x3b,0x0a,0x0a,0x66,0x6e,0x20,0x6d,0x61,0x69,0x6e,0x5f,0x31,0x28,0x29,0x20,0x7b,
1985     0x0a,0x20,0x20,0x6c,0x65,0x74,0x20,0x78,0x5f,0x32,0x33,0x20,0x3a,0x20,0x76,0x65,
1986     0x63,0x32,0x66,0x20,0x3d,0x20,0x75,0x76,0x3b,0x0a,0x20,0x20,0x6c,0x65,0x74,0x20,
1987     0x78,0x5f,0x32,0x34,0x20,0x3a,0x20,0x76,0x65,0x63,0x34,0x66,0x20,0x3d,0x20,0x74,
1988     0x65,0x78,0x74,0x75,0x72,0x65,0x53,0x61,0x6d,0x70,0x6c,0x65,0x28,0x74,0x65,0x78,
1989     0x2c,0x20,0x73,0x6d,0x70,0x2c,0x20,0x78,0x5f,0x32,0x33,0x29,0x3b,0x0a,0x20,0x20,
1990     0x6c,0x65,0x74,0x20,0x78,0x5f,0x32,0x36,0x20,0x3a,0x20,0x76,0x65,0x63,0x33,0x66,
1991     0x20,0x3d,0x20,0x76,0x65,0x63,0x33,0x66,0x28,0x78,0x5f,0x32,0x34,0x2e,0x78,0x2c,
1992     0x20,0x78,0x5f,0x32,0x34,0x2e,0x79,0x2c,0x20,0x78,0x5f,0x32,0x34,0x2e,0x7a,0x29,
1993     0x3b,0x0a,0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,
1994     0x20,0x76,0x65,0x63,0x34,0x66,0x28,0x78,0x5f,0x32,0x36,0x2e,0x78,0x2c,0x20,0x78,
1995     0x5f,0x32,0x36,0x2e,0x79,0x2c,0x20,0x78,0x5f,0x32,0x36,0x2e,0x7a,0x2c,0x20,0x31,
1996     0x2e,0x30,0x66,0x29,0x3b,0x0a,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x3b,0x0a,
1997     0x7d,0x0a,0x0a,0x73,0x74,0x72,0x75,0x63,0x74,0x20,0x6d,0x61,0x69,0x6e,0x5f,0x6f,
1998     0x75,0x74,0x20,0x7b,0x0a,0x20,0x20,0x40,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,
1999     0x28,0x30,0x29,0x0a,0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,
2000     0x5f,0x31,0x20,0x3a,0x20,0x76,0x65,0x63,0x34,0x66,0x2c,0x0a,0x7d,0x0a,0x0a,0x40,
2001     0x66,0x72,0x61,0x67,0x6d,0x65,0x6e,0x74,0x0a,0x66,0x6e,0x20,0x6d,0x61,0x69,0x6e,
2002     0x28,0x40,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x28,0x30,0x29,0x20,0x75,0x76,
2003     0x5f,0x70,0x61,0x72,0x61,0x6d,0x20,0x3a,0x20,0x76,0x65,0x63,0x32,0x66,0x29,0x20,
2004     0x2d,0x3e,0x20,0x6d,0x61,0x69,0x6e,0x5f,0x6f,0x75,0x74,0x20,0x7b,0x0a,0x20,0x20,
2005     0x75,0x76,0x20,0x3d,0x20,0x75,0x76,0x5f,0x70,0x61,0x72,0x61,0x6d,0x3b,0x0a,0x20,
2006     0x20,0x6d,0x61,0x69,0x6e,0x5f,0x31,0x28,0x29,0x3b,0x0a,0x20,0x20,0x72,0x65,0x74,
2007     0x75,0x72,0x6e,0x20,0x6d,0x61,0x69,0x6e,0x5f,0x6f,0x75,0x74,0x28,0x66,0x72,0x61,
2008     0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x29,0x3b,0x0a,0x7d,0x0a,0x0a,0x00,
2009 ];
2010 sg.ShaderDesc dbgShaderDesc(sg.Backend backend) @trusted @nogc nothrow {
2011     sg.ShaderDesc desc;
2012     desc.label = "dbg_shader";
2013     switch (backend) {
2014         case sg.Backend.Glcore:
2015             desc.vertex_func.source = &VS_DBG_SOURCE_GLSL410[0];
2016             desc.vertex_func.entry = "main";
2017             desc.fragment_func.source = &FS_DBG_SOURCE_GLSL410[0];
2018             desc.fragment_func.entry = "main";
2019             desc.attrs[0].base_type = sg.ShaderAttrBaseType.Float;
2020             desc.attrs[0].glsl_name = "pos";
2021             desc.images[0].stage = sg.ShaderStage.Fragment;
2022             desc.images[0].multisampled = false;
2023             desc.images[0].image_type = sg.ImageType._2d;
2024             desc.images[0].sample_type = sg.ImageSampleType.Float;
2025             desc.samplers[0].stage = sg.ShaderStage.Fragment;
2026             desc.samplers[0].sampler_type = sg.SamplerType.Filtering;
2027             desc.image_sampler_pairs[0].stage = sg.ShaderStage.Fragment;
2028             desc.image_sampler_pairs[0].image_slot = 0;
2029             desc.image_sampler_pairs[0].sampler_slot = 0;
2030             desc.image_sampler_pairs[0].glsl_name = "tex_smp";
2031             break;
2032         case sg.Backend.Gles3:
2033             desc.vertex_func.source = &VS_DBG_SOURCE_GLSL300ES[0];
2034             desc.vertex_func.entry = "main";
2035             desc.fragment_func.source = &FS_DBG_SOURCE_GLSL300ES[0];
2036             desc.fragment_func.entry = "main";
2037             desc.attrs[0].base_type = sg.ShaderAttrBaseType.Float;
2038             desc.attrs[0].glsl_name = "pos";
2039             desc.images[0].stage = sg.ShaderStage.Fragment;
2040             desc.images[0].multisampled = false;
2041             desc.images[0].image_type = sg.ImageType._2d;
2042             desc.images[0].sample_type = sg.ImageSampleType.Float;
2043             desc.samplers[0].stage = sg.ShaderStage.Fragment;
2044             desc.samplers[0].sampler_type = sg.SamplerType.Filtering;
2045             desc.image_sampler_pairs[0].stage = sg.ShaderStage.Fragment;
2046             desc.image_sampler_pairs[0].image_slot = 0;
2047             desc.image_sampler_pairs[0].sampler_slot = 0;
2048             desc.image_sampler_pairs[0].glsl_name = "tex_smp";
2049             break;
2050         case sg.Backend.D3d11:
2051             desc.vertex_func.source = &VS_DBG_SOURCE_HLSL5[0];
2052             desc.vertex_func.d3d11_target = "vs_5_0";
2053             desc.vertex_func.entry = "main";
2054             desc.fragment_func.source = &FS_DBG_SOURCE_HLSL5[0];
2055             desc.fragment_func.d3d11_target = "ps_5_0";
2056             desc.fragment_func.entry = "main";
2057             desc.attrs[0].base_type = sg.ShaderAttrBaseType.Float;
2058             desc.attrs[0].hlsl_sem_name = "TEXCOORD";
2059             desc.attrs[0].hlsl_sem_index = 0;
2060             desc.images[0].stage = sg.ShaderStage.Fragment;
2061             desc.images[0].multisampled = false;
2062             desc.images[0].image_type = sg.ImageType._2d;
2063             desc.images[0].sample_type = sg.ImageSampleType.Float;
2064             desc.images[0].hlsl_register_t_n = 0;
2065             desc.samplers[0].stage = sg.ShaderStage.Fragment;
2066             desc.samplers[0].sampler_type = sg.SamplerType.Filtering;
2067             desc.samplers[0].hlsl_register_s_n = 0;
2068             desc.image_sampler_pairs[0].stage = sg.ShaderStage.Fragment;
2069             desc.image_sampler_pairs[0].image_slot = 0;
2070             desc.image_sampler_pairs[0].sampler_slot = 0;
2071             break;
2072         case sg.Backend.Metal_macos:
2073             desc.vertex_func.source = &VS_DBG_SOURCE_METAL_MACOS[0];
2074             desc.vertex_func.entry = "main0";
2075             desc.fragment_func.source = &FS_DBG_SOURCE_METAL_MACOS[0];
2076             desc.fragment_func.entry = "main0";
2077             desc.attrs[0].base_type = sg.ShaderAttrBaseType.Float;
2078             desc.images[0].stage = sg.ShaderStage.Fragment;
2079             desc.images[0].multisampled = false;
2080             desc.images[0].image_type = sg.ImageType._2d;
2081             desc.images[0].sample_type = sg.ImageSampleType.Float;
2082             desc.images[0].msl_texture_n = 0;
2083             desc.samplers[0].stage = sg.ShaderStage.Fragment;
2084             desc.samplers[0].sampler_type = sg.SamplerType.Filtering;
2085             desc.samplers[0].msl_sampler_n = 0;
2086             desc.image_sampler_pairs[0].stage = sg.ShaderStage.Fragment;
2087             desc.image_sampler_pairs[0].image_slot = 0;
2088             desc.image_sampler_pairs[0].sampler_slot = 0;
2089             break;
2090         case sg.Backend.Wgpu:
2091             desc.vertex_func.source = &VS_DBG_SOURCE_WGSL[0];
2092             desc.vertex_func.entry = "main";
2093             desc.fragment_func.source = &FS_DBG_SOURCE_WGSL[0];
2094             desc.fragment_func.entry = "main";
2095             desc.attrs[0].base_type = sg.ShaderAttrBaseType.Float;
2096             desc.images[0].stage = sg.ShaderStage.Fragment;
2097             desc.images[0].multisampled = false;
2098             desc.images[0].image_type = sg.ImageType._2d;
2099             desc.images[0].sample_type = sg.ImageSampleType.Float;
2100             desc.images[0].wgsl_group1_binding_n = 64;
2101             desc.samplers[0].stage = sg.ShaderStage.Fragment;
2102             desc.samplers[0].sampler_type = sg.SamplerType.Filtering;
2103             desc.samplers[0].wgsl_group1_binding_n = 80;
2104             desc.image_sampler_pairs[0].stage = sg.ShaderStage.Fragment;
2105             desc.image_sampler_pairs[0].image_slot = 0;
2106             desc.image_sampler_pairs[0].sampler_slot = 0;
2107             break;
2108         default: break;
2109     }
2110     return desc;
2111 }
2112 sg.ShaderDesc fsqShaderDesc(sg.Backend backend) @trusted @nogc nothrow {
2113     sg.ShaderDesc desc;
2114     desc.label = "fsq_shader";
2115     switch (backend) {
2116         case sg.Backend.Glcore:
2117             desc.vertex_func.source = &VS_FSQ_SOURCE_GLSL410[0];
2118             desc.vertex_func.entry = "main";
2119             desc.fragment_func.source = &FS_FSQ_SOURCE_GLSL410[0];
2120             desc.fragment_func.entry = "main";
2121             desc.attrs[0].base_type = sg.ShaderAttrBaseType.Float;
2122             desc.attrs[0].glsl_name = "pos";
2123             desc.uniform_blocks[0].stage = sg.ShaderStage.Vertex;
2124             desc.uniform_blocks[0].layout = sg.UniformLayout.Std140;
2125             desc.uniform_blocks[0].size = 16;
2126             desc.uniform_blocks[0].glsl_uniforms[0].type = sg.UniformType.Float4;
2127             desc.uniform_blocks[0].glsl_uniforms[0].array_count = 1;
2128             desc.uniform_blocks[0].glsl_uniforms[0].glsl_name = "fsq_params";
2129             desc.images[0].stage = sg.ShaderStage.Fragment;
2130             desc.images[0].multisampled = false;
2131             desc.images[0].image_type = sg.ImageType._2d;
2132             desc.images[0].sample_type = sg.ImageSampleType.Float;
2133             desc.images[1].stage = sg.ShaderStage.Fragment;
2134             desc.images[1].multisampled = false;
2135             desc.images[1].image_type = sg.ImageType._2d;
2136             desc.images[1].sample_type = sg.ImageSampleType.Float;
2137             desc.images[2].stage = sg.ShaderStage.Fragment;
2138             desc.images[2].multisampled = false;
2139             desc.images[2].image_type = sg.ImageType._2d;
2140             desc.images[2].sample_type = sg.ImageSampleType.Float;
2141             desc.samplers[0].stage = sg.ShaderStage.Fragment;
2142             desc.samplers[0].sampler_type = sg.SamplerType.Filtering;
2143             desc.image_sampler_pairs[0].stage = sg.ShaderStage.Fragment;
2144             desc.image_sampler_pairs[0].image_slot = 0;
2145             desc.image_sampler_pairs[0].sampler_slot = 0;
2146             desc.image_sampler_pairs[0].glsl_name = "tex0_smp";
2147             desc.image_sampler_pairs[1].stage = sg.ShaderStage.Fragment;
2148             desc.image_sampler_pairs[1].image_slot = 1;
2149             desc.image_sampler_pairs[1].sampler_slot = 0;
2150             desc.image_sampler_pairs[1].glsl_name = "tex1_smp";
2151             desc.image_sampler_pairs[2].stage = sg.ShaderStage.Fragment;
2152             desc.image_sampler_pairs[2].image_slot = 2;
2153             desc.image_sampler_pairs[2].sampler_slot = 0;
2154             desc.image_sampler_pairs[2].glsl_name = "tex2_smp";
2155             break;
2156         case sg.Backend.Gles3:
2157             desc.vertex_func.source = &VS_FSQ_SOURCE_GLSL300ES[0];
2158             desc.vertex_func.entry = "main";
2159             desc.fragment_func.source = &FS_FSQ_SOURCE_GLSL300ES[0];
2160             desc.fragment_func.entry = "main";
2161             desc.attrs[0].base_type = sg.ShaderAttrBaseType.Float;
2162             desc.attrs[0].glsl_name = "pos";
2163             desc.uniform_blocks[0].stage = sg.ShaderStage.Vertex;
2164             desc.uniform_blocks[0].layout = sg.UniformLayout.Std140;
2165             desc.uniform_blocks[0].size = 16;
2166             desc.uniform_blocks[0].glsl_uniforms[0].type = sg.UniformType.Float4;
2167             desc.uniform_blocks[0].glsl_uniforms[0].array_count = 1;
2168             desc.uniform_blocks[0].glsl_uniforms[0].glsl_name = "fsq_params";
2169             desc.images[0].stage = sg.ShaderStage.Fragment;
2170             desc.images[0].multisampled = false;
2171             desc.images[0].image_type = sg.ImageType._2d;
2172             desc.images[0].sample_type = sg.ImageSampleType.Float;
2173             desc.images[1].stage = sg.ShaderStage.Fragment;
2174             desc.images[1].multisampled = false;
2175             desc.images[1].image_type = sg.ImageType._2d;
2176             desc.images[1].sample_type = sg.ImageSampleType.Float;
2177             desc.images[2].stage = sg.ShaderStage.Fragment;
2178             desc.images[2].multisampled = false;
2179             desc.images[2].image_type = sg.ImageType._2d;
2180             desc.images[2].sample_type = sg.ImageSampleType.Float;
2181             desc.samplers[0].stage = sg.ShaderStage.Fragment;
2182             desc.samplers[0].sampler_type = sg.SamplerType.Filtering;
2183             desc.image_sampler_pairs[0].stage = sg.ShaderStage.Fragment;
2184             desc.image_sampler_pairs[0].image_slot = 0;
2185             desc.image_sampler_pairs[0].sampler_slot = 0;
2186             desc.image_sampler_pairs[0].glsl_name = "tex0_smp";
2187             desc.image_sampler_pairs[1].stage = sg.ShaderStage.Fragment;
2188             desc.image_sampler_pairs[1].image_slot = 1;
2189             desc.image_sampler_pairs[1].sampler_slot = 0;
2190             desc.image_sampler_pairs[1].glsl_name = "tex1_smp";
2191             desc.image_sampler_pairs[2].stage = sg.ShaderStage.Fragment;
2192             desc.image_sampler_pairs[2].image_slot = 2;
2193             desc.image_sampler_pairs[2].sampler_slot = 0;
2194             desc.image_sampler_pairs[2].glsl_name = "tex2_smp";
2195             break;
2196         case sg.Backend.D3d11:
2197             desc.vertex_func.source = &VS_FSQ_SOURCE_HLSL5[0];
2198             desc.vertex_func.d3d11_target = "vs_5_0";
2199             desc.vertex_func.entry = "main";
2200             desc.fragment_func.source = &FS_FSQ_SOURCE_HLSL5[0];
2201             desc.fragment_func.d3d11_target = "ps_5_0";
2202             desc.fragment_func.entry = "main";
2203             desc.attrs[0].base_type = sg.ShaderAttrBaseType.Float;
2204             desc.attrs[0].hlsl_sem_name = "TEXCOORD";
2205             desc.attrs[0].hlsl_sem_index = 0;
2206             desc.uniform_blocks[0].stage = sg.ShaderStage.Vertex;
2207             desc.uniform_blocks[0].layout = sg.UniformLayout.Std140;
2208             desc.uniform_blocks[0].size = 16;
2209             desc.uniform_blocks[0].hlsl_register_b_n = 0;
2210             desc.images[0].stage = sg.ShaderStage.Fragment;
2211             desc.images[0].multisampled = false;
2212             desc.images[0].image_type = sg.ImageType._2d;
2213             desc.images[0].sample_type = sg.ImageSampleType.Float;
2214             desc.images[0].hlsl_register_t_n = 0;
2215             desc.images[1].stage = sg.ShaderStage.Fragment;
2216             desc.images[1].multisampled = false;
2217             desc.images[1].image_type = sg.ImageType._2d;
2218             desc.images[1].sample_type = sg.ImageSampleType.Float;
2219             desc.images[1].hlsl_register_t_n = 1;
2220             desc.images[2].stage = sg.ShaderStage.Fragment;
2221             desc.images[2].multisampled = false;
2222             desc.images[2].image_type = sg.ImageType._2d;
2223             desc.images[2].sample_type = sg.ImageSampleType.Float;
2224             desc.images[2].hlsl_register_t_n = 2;
2225             desc.samplers[0].stage = sg.ShaderStage.Fragment;
2226             desc.samplers[0].sampler_type = sg.SamplerType.Filtering;
2227             desc.samplers[0].hlsl_register_s_n = 0;
2228             desc.image_sampler_pairs[0].stage = sg.ShaderStage.Fragment;
2229             desc.image_sampler_pairs[0].image_slot = 0;
2230             desc.image_sampler_pairs[0].sampler_slot = 0;
2231             desc.image_sampler_pairs[1].stage = sg.ShaderStage.Fragment;
2232             desc.image_sampler_pairs[1].image_slot = 1;
2233             desc.image_sampler_pairs[1].sampler_slot = 0;
2234             desc.image_sampler_pairs[2].stage = sg.ShaderStage.Fragment;
2235             desc.image_sampler_pairs[2].image_slot = 2;
2236             desc.image_sampler_pairs[2].sampler_slot = 0;
2237             break;
2238         case sg.Backend.Metal_macos:
2239             desc.vertex_func.source = &VS_FSQ_SOURCE_METAL_MACOS[0];
2240             desc.vertex_func.entry = "main0";
2241             desc.fragment_func.source = &FS_FSQ_SOURCE_METAL_MACOS[0];
2242             desc.fragment_func.entry = "main0";
2243             desc.attrs[0].base_type = sg.ShaderAttrBaseType.Float;
2244             desc.uniform_blocks[0].stage = sg.ShaderStage.Vertex;
2245             desc.uniform_blocks[0].layout = sg.UniformLayout.Std140;
2246             desc.uniform_blocks[0].size = 16;
2247             desc.uniform_blocks[0].msl_buffer_n = 0;
2248             desc.images[0].stage = sg.ShaderStage.Fragment;
2249             desc.images[0].multisampled = false;
2250             desc.images[0].image_type = sg.ImageType._2d;
2251             desc.images[0].sample_type = sg.ImageSampleType.Float;
2252             desc.images[0].msl_texture_n = 0;
2253             desc.images[1].stage = sg.ShaderStage.Fragment;
2254             desc.images[1].multisampled = false;
2255             desc.images[1].image_type = sg.ImageType._2d;
2256             desc.images[1].sample_type = sg.ImageSampleType.Float;
2257             desc.images[1].msl_texture_n = 1;
2258             desc.images[2].stage = sg.ShaderStage.Fragment;
2259             desc.images[2].multisampled = false;
2260             desc.images[2].image_type = sg.ImageType._2d;
2261             desc.images[2].sample_type = sg.ImageSampleType.Float;
2262             desc.images[2].msl_texture_n = 2;
2263             desc.samplers[0].stage = sg.ShaderStage.Fragment;
2264             desc.samplers[0].sampler_type = sg.SamplerType.Filtering;
2265             desc.samplers[0].msl_sampler_n = 0;
2266             desc.image_sampler_pairs[0].stage = sg.ShaderStage.Fragment;
2267             desc.image_sampler_pairs[0].image_slot = 0;
2268             desc.image_sampler_pairs[0].sampler_slot = 0;
2269             desc.image_sampler_pairs[1].stage = sg.ShaderStage.Fragment;
2270             desc.image_sampler_pairs[1].image_slot = 1;
2271             desc.image_sampler_pairs[1].sampler_slot = 0;
2272             desc.image_sampler_pairs[2].stage = sg.ShaderStage.Fragment;
2273             desc.image_sampler_pairs[2].image_slot = 2;
2274             desc.image_sampler_pairs[2].sampler_slot = 0;
2275             break;
2276         case sg.Backend.Wgpu:
2277             desc.vertex_func.source = &VS_FSQ_SOURCE_WGSL[0];
2278             desc.vertex_func.entry = "main";
2279             desc.fragment_func.source = &FS_FSQ_SOURCE_WGSL[0];
2280             desc.fragment_func.entry = "main";
2281             desc.attrs[0].base_type = sg.ShaderAttrBaseType.Float;
2282             desc.uniform_blocks[0].stage = sg.ShaderStage.Vertex;
2283             desc.uniform_blocks[0].layout = sg.UniformLayout.Std140;
2284             desc.uniform_blocks[0].size = 16;
2285             desc.uniform_blocks[0].wgsl_group0_binding_n = 0;
2286             desc.images[0].stage = sg.ShaderStage.Fragment;
2287             desc.images[0].multisampled = false;
2288             desc.images[0].image_type = sg.ImageType._2d;
2289             desc.images[0].sample_type = sg.ImageSampleType.Float;
2290             desc.images[0].wgsl_group1_binding_n = 64;
2291             desc.images[1].stage = sg.ShaderStage.Fragment;
2292             desc.images[1].multisampled = false;
2293             desc.images[1].image_type = sg.ImageType._2d;
2294             desc.images[1].sample_type = sg.ImageSampleType.Float;
2295             desc.images[1].wgsl_group1_binding_n = 65;
2296             desc.images[2].stage = sg.ShaderStage.Fragment;
2297             desc.images[2].multisampled = false;
2298             desc.images[2].image_type = sg.ImageType._2d;
2299             desc.images[2].sample_type = sg.ImageSampleType.Float;
2300             desc.images[2].wgsl_group1_binding_n = 66;
2301             desc.samplers[0].stage = sg.ShaderStage.Fragment;
2302             desc.samplers[0].sampler_type = sg.SamplerType.Filtering;
2303             desc.samplers[0].wgsl_group1_binding_n = 80;
2304             desc.image_sampler_pairs[0].stage = sg.ShaderStage.Fragment;
2305             desc.image_sampler_pairs[0].image_slot = 0;
2306             desc.image_sampler_pairs[0].sampler_slot = 0;
2307             desc.image_sampler_pairs[1].stage = sg.ShaderStage.Fragment;
2308             desc.image_sampler_pairs[1].image_slot = 1;
2309             desc.image_sampler_pairs[1].sampler_slot = 0;
2310             desc.image_sampler_pairs[2].stage = sg.ShaderStage.Fragment;
2311             desc.image_sampler_pairs[2].image_slot = 2;
2312             desc.image_sampler_pairs[2].sampler_slot = 0;
2313             break;
2314         default: break;
2315     }
2316     return desc;
2317 }
2318 sg.ShaderDesc offscreenShaderDesc(sg.Backend backend) @trusted @nogc nothrow {
2319     sg.ShaderDesc desc;
2320     desc.label = "offscreen_shader";
2321     switch (backend) {
2322         case sg.Backend.Glcore:
2323             desc.vertex_func.source = &VS_OFFSCREEN_SOURCE_GLSL410[0];
2324             desc.vertex_func.entry = "main";
2325             desc.fragment_func.source = &FS_OFFSCREEN_SOURCE_GLSL410[0];
2326             desc.fragment_func.entry = "main";
2327             desc.attrs[0].base_type = sg.ShaderAttrBaseType.Float;
2328             desc.attrs[0].glsl_name = "pos";
2329             desc.attrs[1].base_type = sg.ShaderAttrBaseType.Float;
2330             desc.attrs[1].glsl_name = "bright0";
2331             desc.uniform_blocks[0].stage = sg.ShaderStage.Vertex;
2332             desc.uniform_blocks[0].layout = sg.UniformLayout.Std140;
2333             desc.uniform_blocks[0].size = 64;
2334             desc.uniform_blocks[0].glsl_uniforms[0].type = sg.UniformType.Float4;
2335             desc.uniform_blocks[0].glsl_uniforms[0].array_count = 4;
2336             desc.uniform_blocks[0].glsl_uniforms[0].glsl_name = "offscreen_params";
2337             break;
2338         case sg.Backend.Gles3:
2339             desc.vertex_func.source = &VS_OFFSCREEN_SOURCE_GLSL300ES[0];
2340             desc.vertex_func.entry = "main";
2341             desc.fragment_func.source = &FS_OFFSCREEN_SOURCE_GLSL300ES[0];
2342             desc.fragment_func.entry = "main";
2343             desc.attrs[0].base_type = sg.ShaderAttrBaseType.Float;
2344             desc.attrs[0].glsl_name = "pos";
2345             desc.attrs[1].base_type = sg.ShaderAttrBaseType.Float;
2346             desc.attrs[1].glsl_name = "bright0";
2347             desc.uniform_blocks[0].stage = sg.ShaderStage.Vertex;
2348             desc.uniform_blocks[0].layout = sg.UniformLayout.Std140;
2349             desc.uniform_blocks[0].size = 64;
2350             desc.uniform_blocks[0].glsl_uniforms[0].type = sg.UniformType.Float4;
2351             desc.uniform_blocks[0].glsl_uniforms[0].array_count = 4;
2352             desc.uniform_blocks[0].glsl_uniforms[0].glsl_name = "offscreen_params";
2353             break;
2354         case sg.Backend.D3d11:
2355             desc.vertex_func.source = &VS_OFFSCREEN_SOURCE_HLSL5[0];
2356             desc.vertex_func.d3d11_target = "vs_5_0";
2357             desc.vertex_func.entry = "main";
2358             desc.fragment_func.source = &FS_OFFSCREEN_SOURCE_HLSL5[0];
2359             desc.fragment_func.d3d11_target = "ps_5_0";
2360             desc.fragment_func.entry = "main";
2361             desc.attrs[0].base_type = sg.ShaderAttrBaseType.Float;
2362             desc.attrs[0].hlsl_sem_name = "TEXCOORD";
2363             desc.attrs[0].hlsl_sem_index = 0;
2364             desc.attrs[1].base_type = sg.ShaderAttrBaseType.Float;
2365             desc.attrs[1].hlsl_sem_name = "TEXCOORD";
2366             desc.attrs[1].hlsl_sem_index = 1;
2367             desc.uniform_blocks[0].stage = sg.ShaderStage.Vertex;
2368             desc.uniform_blocks[0].layout = sg.UniformLayout.Std140;
2369             desc.uniform_blocks[0].size = 64;
2370             desc.uniform_blocks[0].hlsl_register_b_n = 0;
2371             break;
2372         case sg.Backend.Metal_macos:
2373             desc.vertex_func.source = &VS_OFFSCREEN_SOURCE_METAL_MACOS[0];
2374             desc.vertex_func.entry = "main0";
2375             desc.fragment_func.source = &FS_OFFSCREEN_SOURCE_METAL_MACOS[0];
2376             desc.fragment_func.entry = "main0";
2377             desc.attrs[0].base_type = sg.ShaderAttrBaseType.Float;
2378             desc.attrs[1].base_type = sg.ShaderAttrBaseType.Float;
2379             desc.uniform_blocks[0].stage = sg.ShaderStage.Vertex;
2380             desc.uniform_blocks[0].layout = sg.UniformLayout.Std140;
2381             desc.uniform_blocks[0].size = 64;
2382             desc.uniform_blocks[0].msl_buffer_n = 0;
2383             break;
2384         case sg.Backend.Wgpu:
2385             desc.vertex_func.source = &VS_OFFSCREEN_SOURCE_WGSL[0];
2386             desc.vertex_func.entry = "main";
2387             desc.fragment_func.source = &FS_OFFSCREEN_SOURCE_WGSL[0];
2388             desc.fragment_func.entry = "main";
2389             desc.attrs[0].base_type = sg.ShaderAttrBaseType.Float;
2390             desc.attrs[1].base_type = sg.ShaderAttrBaseType.Float;
2391             desc.uniform_blocks[0].stage = sg.ShaderStage.Vertex;
2392             desc.uniform_blocks[0].layout = sg.UniformLayout.Std140;
2393             desc.uniform_blocks[0].size = 64;
2394             desc.uniform_blocks[0].wgsl_group0_binding_n = 0;
2395             break;
2396         default: break;
2397     }
2398     return desc;
2399 }