blob: a869683b97575fd3d43467d3f249d8bb18afa55d [file] [log] [blame]
Ben Clayton73ced332022-01-21 22:38:16 +00001SKIP: FAILED
2
3#version 310 es
Ben Clayton73ced332022-01-21 22:38:16 +00004
Stephen White0b392702022-01-28 22:36:58 +00005layout(location = 0) in vec3 position_1;
6layout(location = 1) in vec4 color_1;
7layout(location = 2) in vec2 quad_pos_1;
8layout(location = 0) out vec4 color_2;
9layout(location = 1) out vec2 quad_pos_2;
Stephen White987902e2022-12-15 16:42:28 +000010struct RenderParams {
Ben Clayton73ced332022-01-21 22:38:16 +000011 mat4 modelViewProjectionMatrix;
12 vec3 right;
Stephen White05d8b022022-09-13 19:48:51 +000013 uint pad;
Ben Clayton73ced332022-01-21 22:38:16 +000014 vec3 up;
Stephen White05d8b022022-09-13 19:48:51 +000015 uint pad_1;
Stephen White987902e2022-12-15 16:42:28 +000016};
17
18layout(binding = 0, std140) uniform render_params_block_ubo {
19 RenderParams inner;
Ben Clayton73ced332022-01-21 22:38:16 +000020} render_params;
21
22struct VertexInput {
23 vec3 position;
24 vec4 color;
25 vec2 quad_pos;
26};
Stephen Whitee2f35ba2022-01-26 16:48:55 +000027
Ben Clayton73ced332022-01-21 22:38:16 +000028struct VertexOutput {
29 vec4 position;
30 vec4 color;
31 vec2 quad_pos;
32};
Stephen Whitee2f35ba2022-01-26 16:48:55 +000033
Ben Clayton73ced332022-01-21 22:38:16 +000034struct SimulationParams {
35 float deltaTime;
36 vec4 seed;
37};
Stephen Whitee2f35ba2022-01-26 16:48:55 +000038
Ben Clayton73ced332022-01-21 22:38:16 +000039struct Particle {
40 vec3 position;
41 float lifetime;
42 vec4 color;
43 vec3 velocity;
44};
Stephen Whitee2f35ba2022-01-26 16:48:55 +000045
Ben Clayton73ced332022-01-21 22:38:16 +000046struct UBO {
47 uint width;
48};
Stephen Whitee2f35ba2022-01-26 16:48:55 +000049
Stephen White0b392702022-01-28 22:36:58 +000050VertexOutput vs_main(VertexInput tint_symbol) {
Stephen White987902e2022-12-15 16:42:28 +000051 vec3 quad_pos = (mat2x3(render_params.inner.right, render_params.inner.up) * tint_symbol.quad_pos);
Stephen White0b392702022-01-28 22:36:58 +000052 vec3 position = (tint_symbol.position + (quad_pos * 0.01f));
53 VertexOutput tint_symbol_1 = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), vec4(0.0f, 0.0f, 0.0f, 0.0f), vec2(0.0f, 0.0f));
Stephen White987902e2022-12-15 16:42:28 +000054 tint_symbol_1.position = (render_params.inner.modelViewProjectionMatrix * vec4(position, 1.0f));
Stephen White0b392702022-01-28 22:36:58 +000055 tint_symbol_1.color = tint_symbol.color;
56 tint_symbol_1.quad_pos = tint_symbol.quad_pos;
57 return tint_symbol_1;
Ben Clayton73ced332022-01-21 22:38:16 +000058}
Stephen Whitee2f35ba2022-01-26 16:48:55 +000059
Ben Clayton73ced332022-01-21 22:38:16 +000060void main() {
Stephen White790e4c22022-04-22 21:25:02 +000061 gl_PointSize = 1.0;
Stephen White0b3dfef2022-02-10 16:22:28 +000062 VertexInput tint_symbol_2 = VertexInput(position_1, color_1, quad_pos_1);
63 VertexOutput inner_result = vs_main(tint_symbol_2);
Stephen White0b392702022-01-28 22:36:58 +000064 gl_Position = inner_result.position;
65 color_2 = inner_result.color;
66 quad_pos_2 = inner_result.quad_pos;
67 gl_Position.y = -(gl_Position.y);
68 gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
69 return;
Ben Clayton73ced332022-01-21 22:38:16 +000070}
Ben Clayton73ced332022-01-21 22:38:16 +000071#version 310 es
72precision mediump float;
73
Stephen White0b392702022-01-28 22:36:58 +000074layout(location = 0) in vec4 color_1;
75layout(location = 1) in vec2 quad_pos_1;
Stephen White0b3dfef2022-02-10 16:22:28 +000076layout(location = 0) out vec4 value;
Ben Clayton73ced332022-01-21 22:38:16 +000077struct RenderParams {
78 mat4 modelViewProjectionMatrix;
79 vec3 right;
80 vec3 up;
81};
Stephen Whitee2f35ba2022-01-26 16:48:55 +000082
Ben Clayton73ced332022-01-21 22:38:16 +000083struct VertexInput {
84 vec3 position;
85 vec4 color;
86 vec2 quad_pos;
87};
Stephen Whitee2f35ba2022-01-26 16:48:55 +000088
Ben Clayton73ced332022-01-21 22:38:16 +000089struct VertexOutput {
90 vec4 position;
91 vec4 color;
92 vec2 quad_pos;
93};
Stephen Whitee2f35ba2022-01-26 16:48:55 +000094
Ben Clayton73ced332022-01-21 22:38:16 +000095struct SimulationParams {
96 float deltaTime;
97 vec4 seed;
98};
Stephen Whitee2f35ba2022-01-26 16:48:55 +000099
Ben Clayton73ced332022-01-21 22:38:16 +0000100struct Particle {
101 vec3 position;
102 float lifetime;
103 vec4 color;
104 vec3 velocity;
105};
Stephen Whitee2f35ba2022-01-26 16:48:55 +0000106
Ben Clayton73ced332022-01-21 22:38:16 +0000107struct UBO {
108 uint width;
109};
Stephen Whitee2f35ba2022-01-26 16:48:55 +0000110
Stephen White0b392702022-01-28 22:36:58 +0000111vec4 fs_main(VertexOutput tint_symbol) {
112 vec4 color = tint_symbol.color;
113 color.a = (color.a * max((1.0f - length(tint_symbol.quad_pos)), 0.0f));
114 return color;
Ben Clayton73ced332022-01-21 22:38:16 +0000115}
Stephen Whitee2f35ba2022-01-26 16:48:55 +0000116
Ben Clayton73ced332022-01-21 22:38:16 +0000117void main() {
Stephen White0b3dfef2022-02-10 16:22:28 +0000118 VertexOutput tint_symbol_1 = VertexOutput(gl_FragCoord, color_1, quad_pos_1);
119 vec4 inner_result = fs_main(tint_symbol_1);
120 value = inner_result;
Stephen White0b392702022-01-28 22:36:58 +0000121 return;
Ben Clayton73ced332022-01-21 22:38:16 +0000122}
Ben Clayton73ced332022-01-21 22:38:16 +0000123#version 310 es
Ben Clayton73ced332022-01-21 22:38:16 +0000124
125vec2 rand_seed = vec2(0.0f, 0.0f);
Ben Clayton73ced332022-01-21 22:38:16 +0000126float rand() {
Stephen White2a02b682022-02-28 18:19:47 +0000127 rand_seed.x = fract((cos(dot(rand_seed, vec2(23.140779495f, 232.616897583f))) * 136.816802979f));
128 rand_seed.y = fract((cos(dot(rand_seed, vec2(54.478565216f, 345.841522217f))) * 534.764526367f));
Ben Clayton73ced332022-01-21 22:38:16 +0000129 return rand_seed.y;
130}
131
132struct RenderParams {
133 mat4 modelViewProjectionMatrix;
134 vec3 right;
135 vec3 up;
136};
Stephen Whitee2f35ba2022-01-26 16:48:55 +0000137
Ben Clayton73ced332022-01-21 22:38:16 +0000138struct VertexInput {
139 vec3 position;
140 vec4 color;
141 vec2 quad_pos;
142};
Stephen Whitee2f35ba2022-01-26 16:48:55 +0000143
Ben Clayton73ced332022-01-21 22:38:16 +0000144struct VertexOutput {
145 vec4 position;
146 vec4 color;
147 vec2 quad_pos;
148};
Stephen Whitee2f35ba2022-01-26 16:48:55 +0000149
Stephen White987902e2022-12-15 16:42:28 +0000150struct SimulationParams {
151 float deltaTime;
152 uint pad;
153 uint pad_1;
154 uint pad_2;
155 vec4 seed;
156};
157
Ben Clayton73ced332022-01-21 22:38:16 +0000158struct Particle {
159 vec3 position;
160 float lifetime;
161 vec4 color;
162 vec3 velocity;
Stephen White05d8b022022-09-13 19:48:51 +0000163 uint pad_3;
Ben Clayton73ced332022-01-21 22:38:16 +0000164};
165
Stephen White987902e2022-12-15 16:42:28 +0000166layout(binding = 0, std140) uniform sim_params_block_ubo {
167 SimulationParams inner;
Ben Clayton73ced332022-01-21 22:38:16 +0000168} sim_params;
Stephen Whitee2f35ba2022-01-26 16:48:55 +0000169
Stephen White863d9ed2022-09-02 19:19:10 +0000170layout(binding = 1, std430) buffer Particles_ssbo {
Ben Clayton73ced332022-01-21 22:38:16 +0000171 Particle particles[];
172} data;
Stephen White863d9ed2022-09-02 19:19:10 +0000173
Stephen White0b392702022-01-28 22:36:58 +0000174struct UBO {
175 uint width;
Ben Clayton73ced332022-01-21 22:38:16 +0000176};
177
Stephen White987902e2022-12-15 16:42:28 +0000178void assign_and_preserve_padding_data_particles_X(uint dest[1], Particle value) {
179 data.particles[dest[0]].position = value.position;
180 data.particles[dest[0]].lifetime = value.lifetime;
181 data.particles[dest[0]].color = value.color;
182 data.particles[dest[0]].velocity = value.velocity;
183}
184
185uniform highp sampler2D tint_symbol_2_1;
Stephen White0b392702022-01-28 22:36:58 +0000186void simulate(uvec3 GlobalInvocationID) {
Stephen White987902e2022-12-15 16:42:28 +0000187 rand_seed = ((sim_params.inner.seed.xy + vec2(GlobalInvocationID.xy)) * sim_params.inner.seed.zw);
Ben Clayton73ced332022-01-21 22:38:16 +0000188 uint idx = GlobalInvocationID.x;
189 Particle particle = data.particles[idx];
Stephen White987902e2022-12-15 16:42:28 +0000190 particle.velocity.z = (particle.velocity.z - (sim_params.inner.deltaTime * 0.5f));
191 particle.position = (particle.position + (sim_params.inner.deltaTime * particle.velocity));
192 particle.lifetime = (particle.lifetime - sim_params.inner.deltaTime);
Ben Clayton73ced332022-01-21 22:38:16 +0000193 particle.color.a = smoothstep(0.0f, 0.5f, particle.lifetime);
194 if ((particle.lifetime < 0.0f)) {
Ben Clayton13f08902022-10-26 18:36:44 +0000195 uvec2 coord = uvec2(0u);
Ben Clayton73ced332022-01-21 22:38:16 +0000196 {
Stephen White987902e2022-12-15 16:42:28 +0000197 for(uint level = (uint(textureQueryLevels(tint_symbol_2_1)) - 1u); (level > 0u); level = (level - 1u)) {
198 vec4 probabilites = texelFetch(tint_symbol_2_1, ivec2(coord), int(level));
Ryan Harrison3374f432022-03-28 18:01:02 +0000199 float tint_symbol_5 = rand();
200 vec4 value = vec4(tint_symbol_5);
Stephen Whiteee387402022-02-15 17:52:37 +0000201 bvec4 mask = bvec4(uvec4(greaterThanEqual(value, vec4(0.0f, probabilites.xyz))) & uvec4(lessThan(value, probabilites)));
Ben Clayton13f08902022-10-26 18:36:44 +0000202 coord = (coord * 2u);
203 coord.x = (coord.x + (any(mask.yw) ? 1u : 0u));
204 coord.y = (coord.y + (any(mask.zw) ? 1u : 0u));
Ben Clayton73ced332022-01-21 22:38:16 +0000205 }
206 }
Stephen White987902e2022-12-15 16:42:28 +0000207 vec2 uv = (vec2(coord) / vec2(uvec2(textureSize(tint_symbol_2_1, 0))));
Ben Clayton73ced332022-01-21 22:38:16 +0000208 particle.position = vec3((((uv - 0.5f) * 3.0f) * vec2(1.0f, -1.0f)), 0.0f);
Stephen White987902e2022-12-15 16:42:28 +0000209 particle.color = texelFetch(tint_symbol_2_1, ivec2(coord), 0);
210 float tint_symbol = rand();
211 particle.velocity.x = ((tint_symbol - 0.5f) * 0.100000001f);
Ryan Harrison3374f432022-03-28 18:01:02 +0000212 float tint_symbol_1 = rand();
Stephen White987902e2022-12-15 16:42:28 +0000213 particle.velocity.y = ((tint_symbol_1 - 0.5f) * 0.100000001f);
Ryan Harrison3374f432022-03-28 18:01:02 +0000214 float tint_symbol_3 = rand();
215 particle.velocity.z = (tint_symbol_3 * 0.300000012f);
216 float tint_symbol_4 = rand();
217 particle.lifetime = (0.5f + (tint_symbol_4 * 2.0f));
Ben Clayton73ced332022-01-21 22:38:16 +0000218 }
Stephen White987902e2022-12-15 16:42:28 +0000219 uint tint_symbol_6[1] = uint[1](idx);
220 assign_and_preserve_padding_data_particles_X(tint_symbol_6, particle);
Ben Clayton73ced332022-01-21 22:38:16 +0000221}
222
Ben Clayton73ced332022-01-21 22:38:16 +0000223layout(local_size_x = 64, local_size_y = 1, local_size_z = 1) in;
Stephen White0b392702022-01-28 22:36:58 +0000224void main() {
225 simulate(gl_GlobalInvocationID);
Ben Clayton73ced332022-01-21 22:38:16 +0000226 return;
227}
Ben Clayton73ced332022-01-21 22:38:16 +0000228Error parsing GLSL shader:
Ben Claytonb990d392023-03-02 09:25:40 +0000229ERROR: 0:75: 'textureQueryLevels' : no matching overloaded function found
230ERROR: 0:75: '' : compilation terminated
Ben Clayton73ced332022-01-21 22:38:16 +0000231ERROR: 2 compilation errors. No code generated.
232
233
234
235#version 310 es
Ben Clayton73ced332022-01-21 22:38:16 +0000236
237struct RenderParams {
238 mat4 modelViewProjectionMatrix;
239 vec3 right;
240 vec3 up;
241};
Stephen Whitee2f35ba2022-01-26 16:48:55 +0000242
Ben Clayton73ced332022-01-21 22:38:16 +0000243struct VertexInput {
244 vec3 position;
245 vec4 color;
246 vec2 quad_pos;
247};
Stephen Whitee2f35ba2022-01-26 16:48:55 +0000248
Ben Clayton73ced332022-01-21 22:38:16 +0000249struct VertexOutput {
250 vec4 position;
251 vec4 color;
252 vec2 quad_pos;
253};
Stephen Whitee2f35ba2022-01-26 16:48:55 +0000254
Ben Clayton73ced332022-01-21 22:38:16 +0000255struct SimulationParams {
256 float deltaTime;
257 vec4 seed;
258};
Stephen Whitee2f35ba2022-01-26 16:48:55 +0000259
Ben Clayton73ced332022-01-21 22:38:16 +0000260struct Particle {
261 vec3 position;
262 float lifetime;
263 vec4 color;
264 vec3 velocity;
265};
Stephen Whitee2f35ba2022-01-26 16:48:55 +0000266
Stephen White987902e2022-12-15 16:42:28 +0000267struct UBO {
Ben Clayton73ced332022-01-21 22:38:16 +0000268 uint width;
Stephen White05d8b022022-09-13 19:48:51 +0000269 uint pad;
270 uint pad_1;
271 uint pad_2;
Stephen White987902e2022-12-15 16:42:28 +0000272};
273
274layout(binding = 3, std140) uniform ubo_block_ubo {
275 UBO inner;
Ben Clayton73ced332022-01-21 22:38:16 +0000276} ubo;
Stephen Whitee2f35ba2022-01-26 16:48:55 +0000277
Stephen White863d9ed2022-09-02 19:19:10 +0000278layout(binding = 4, std430) buffer Buffer_ssbo {
Ben Clayton73ced332022-01-21 22:38:16 +0000279 float weights[];
280} buf_in;
Stephen White863d9ed2022-09-02 19:19:10 +0000281
282layout(binding = 5, std430) buffer Buffer_ssbo_1 {
Ben Clayton73ced332022-01-21 22:38:16 +0000283 float weights[];
284} buf_out;
Stephen White863d9ed2022-09-02 19:19:10 +0000285
Stephen Whited5560402022-01-25 00:35:20 +0000286uniform highp sampler2D tex_in_1;
Stephen White0b392702022-01-28 22:36:58 +0000287void import_level(uvec3 coord) {
Stephen White987902e2022-12-15 16:42:28 +0000288 uint offset = (coord.x + (coord.y * ubo.inner.width));
Stephen Whited5560402022-01-25 00:35:20 +0000289 buf_out.weights[offset] = texelFetch(tex_in_1, ivec2(coord.xy), 0).w;
Ben Clayton73ced332022-01-21 22:38:16 +0000290}
291
Ben Clayton73ced332022-01-21 22:38:16 +0000292layout(local_size_x = 64, local_size_y = 1, local_size_z = 1) in;
Stephen White0b392702022-01-28 22:36:58 +0000293void main() {
294 import_level(gl_GlobalInvocationID);
Ben Clayton73ced332022-01-21 22:38:16 +0000295 return;
296}
Ben Clayton73ced332022-01-21 22:38:16 +0000297#version 310 es
Ben Clayton73ced332022-01-21 22:38:16 +0000298
299struct RenderParams {
300 mat4 modelViewProjectionMatrix;
301 vec3 right;
302 vec3 up;
303};
Stephen Whitee2f35ba2022-01-26 16:48:55 +0000304
Ben Clayton73ced332022-01-21 22:38:16 +0000305struct VertexInput {
306 vec3 position;
307 vec4 color;
308 vec2 quad_pos;
309};
Stephen Whitee2f35ba2022-01-26 16:48:55 +0000310
Ben Clayton73ced332022-01-21 22:38:16 +0000311struct VertexOutput {
312 vec4 position;
313 vec4 color;
314 vec2 quad_pos;
315};
Stephen Whitee2f35ba2022-01-26 16:48:55 +0000316
Ben Clayton73ced332022-01-21 22:38:16 +0000317struct SimulationParams {
318 float deltaTime;
319 vec4 seed;
320};
Stephen Whitee2f35ba2022-01-26 16:48:55 +0000321
Ben Clayton73ced332022-01-21 22:38:16 +0000322struct Particle {
323 vec3 position;
324 float lifetime;
325 vec4 color;
326 vec3 velocity;
327};
Stephen Whitee2f35ba2022-01-26 16:48:55 +0000328
Stephen White987902e2022-12-15 16:42:28 +0000329struct UBO {
Ben Clayton73ced332022-01-21 22:38:16 +0000330 uint width;
Stephen White05d8b022022-09-13 19:48:51 +0000331 uint pad;
332 uint pad_1;
333 uint pad_2;
Stephen White987902e2022-12-15 16:42:28 +0000334};
335
336layout(binding = 3, std140) uniform ubo_block_ubo {
337 UBO inner;
Ben Clayton73ced332022-01-21 22:38:16 +0000338} ubo;
Stephen Whitee2f35ba2022-01-26 16:48:55 +0000339
Stephen White863d9ed2022-09-02 19:19:10 +0000340layout(binding = 4, std430) buffer Buffer_ssbo {
Ben Clayton73ced332022-01-21 22:38:16 +0000341 float weights[];
342} buf_in;
Stephen White863d9ed2022-09-02 19:19:10 +0000343
344layout(binding = 5, std430) buffer Buffer_ssbo_1 {
Ben Clayton73ced332022-01-21 22:38:16 +0000345 float weights[];
346} buf_out;
Stephen White863d9ed2022-09-02 19:19:10 +0000347
Stephen Whited9b32c32022-02-03 22:39:13 +0000348layout(rgba8) uniform highp writeonly image2D tex_out;
Stephen White0b392702022-01-28 22:36:58 +0000349void export_level(uvec3 coord) {
Ben Clayton13f08902022-10-26 18:36:44 +0000350 if (all(lessThan(coord.xy, uvec2(uvec2(imageSize(tex_out)))))) {
Stephen White987902e2022-12-15 16:42:28 +0000351 uint dst_offset = (coord.x + (coord.y * ubo.inner.width));
352 uint src_offset = ((coord.x * 2u) + ((coord.y * 2u) * ubo.inner.width));
Ben Claytonb990d392023-03-02 09:25:40 +0000353 float a = buf_in.weights[(src_offset + 0u)];
Ben Clayton73ced332022-01-21 22:38:16 +0000354 float b = buf_in.weights[(src_offset + 1u)];
Stephen White987902e2022-12-15 16:42:28 +0000355 float c = buf_in.weights[((src_offset + 0u) + ubo.inner.width)];
356 float d = buf_in.weights[((src_offset + 1u) + ubo.inner.width)];
Ben Claytonb990d392023-03-02 09:25:40 +0000357 float sum = dot(vec4(a, b, c, d), vec4(1.0f));
Ben Clayton73ced332022-01-21 22:38:16 +0000358 buf_out.weights[dst_offset] = (sum / 4.0f);
Ben Claytonb990d392023-03-02 09:25:40 +0000359 vec4 probabilities = (vec4(a, (a + b), ((a + b) + c), sum) / max(sum, 0.0001f));
Stephen Whited9b32c32022-02-03 22:39:13 +0000360 imageStore(tex_out, ivec2(coord.xy), probabilities);
Ben Clayton73ced332022-01-21 22:38:16 +0000361 }
362}
363
364layout(local_size_x = 64, local_size_y = 1, local_size_z = 1) in;
Stephen White0b392702022-01-28 22:36:58 +0000365void main() {
366 export_level(gl_GlobalInvocationID);
Ben Clayton73ced332022-01-21 22:38:16 +0000367 return;
368}