Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 1 | SKIP: FAILED |
| 2 | |
| 3 | #version 310 es |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 4 | |
Stephen White | 0b39270 | 2022-01-28 22:36:58 +0000 | [diff] [blame] | 5 | layout(location = 0) in vec3 position_1; |
| 6 | layout(location = 1) in vec4 color_1; |
| 7 | layout(location = 2) in vec2 quad_pos_1; |
| 8 | layout(location = 0) out vec4 color_2; |
| 9 | layout(location = 1) out vec2 quad_pos_2; |
Stephen White | 987902e | 2022-12-15 16:42:28 +0000 | [diff] [blame] | 10 | struct RenderParams { |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 11 | mat4 modelViewProjectionMatrix; |
| 12 | vec3 right; |
Stephen White | 05d8b02 | 2022-09-13 19:48:51 +0000 | [diff] [blame] | 13 | uint pad; |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 14 | vec3 up; |
Stephen White | 05d8b02 | 2022-09-13 19:48:51 +0000 | [diff] [blame] | 15 | uint pad_1; |
Stephen White | 987902e | 2022-12-15 16:42:28 +0000 | [diff] [blame] | 16 | }; |
| 17 | |
| 18 | layout(binding = 0, std140) uniform render_params_block_ubo { |
| 19 | RenderParams inner; |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 20 | } render_params; |
| 21 | |
| 22 | struct VertexInput { |
| 23 | vec3 position; |
| 24 | vec4 color; |
| 25 | vec2 quad_pos; |
| 26 | }; |
Stephen White | e2f35ba | 2022-01-26 16:48:55 +0000 | [diff] [blame] | 27 | |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 28 | struct VertexOutput { |
| 29 | vec4 position; |
| 30 | vec4 color; |
| 31 | vec2 quad_pos; |
| 32 | }; |
Stephen White | e2f35ba | 2022-01-26 16:48:55 +0000 | [diff] [blame] | 33 | |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 34 | struct SimulationParams { |
| 35 | float deltaTime; |
| 36 | vec4 seed; |
| 37 | }; |
Stephen White | e2f35ba | 2022-01-26 16:48:55 +0000 | [diff] [blame] | 38 | |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 39 | struct Particle { |
| 40 | vec3 position; |
| 41 | float lifetime; |
| 42 | vec4 color; |
| 43 | vec3 velocity; |
| 44 | }; |
Stephen White | e2f35ba | 2022-01-26 16:48:55 +0000 | [diff] [blame] | 45 | |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 46 | struct UBO { |
| 47 | uint width; |
| 48 | }; |
Stephen White | e2f35ba | 2022-01-26 16:48:55 +0000 | [diff] [blame] | 49 | |
Stephen White | 0b39270 | 2022-01-28 22:36:58 +0000 | [diff] [blame] | 50 | VertexOutput vs_main(VertexInput tint_symbol) { |
Stephen White | 987902e | 2022-12-15 16:42:28 +0000 | [diff] [blame] | 51 | vec3 quad_pos = (mat2x3(render_params.inner.right, render_params.inner.up) * tint_symbol.quad_pos); |
Stephen White | 0b39270 | 2022-01-28 22:36:58 +0000 | [diff] [blame] | 52 | 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 White | 987902e | 2022-12-15 16:42:28 +0000 | [diff] [blame] | 54 | tint_symbol_1.position = (render_params.inner.modelViewProjectionMatrix * vec4(position, 1.0f)); |
Stephen White | 0b39270 | 2022-01-28 22:36:58 +0000 | [diff] [blame] | 55 | tint_symbol_1.color = tint_symbol.color; |
| 56 | tint_symbol_1.quad_pos = tint_symbol.quad_pos; |
| 57 | return tint_symbol_1; |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 58 | } |
Stephen White | e2f35ba | 2022-01-26 16:48:55 +0000 | [diff] [blame] | 59 | |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 60 | void main() { |
Stephen White | 790e4c2 | 2022-04-22 21:25:02 +0000 | [diff] [blame] | 61 | gl_PointSize = 1.0; |
Stephen White | 0b3dfef | 2022-02-10 16:22:28 +0000 | [diff] [blame] | 62 | VertexInput tint_symbol_2 = VertexInput(position_1, color_1, quad_pos_1); |
| 63 | VertexOutput inner_result = vs_main(tint_symbol_2); |
Stephen White | 0b39270 | 2022-01-28 22:36:58 +0000 | [diff] [blame] | 64 | 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 Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 70 | } |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 71 | #version 310 es |
| 72 | precision mediump float; |
| 73 | |
Stephen White | 0b39270 | 2022-01-28 22:36:58 +0000 | [diff] [blame] | 74 | layout(location = 0) in vec4 color_1; |
| 75 | layout(location = 1) in vec2 quad_pos_1; |
Stephen White | 0b3dfef | 2022-02-10 16:22:28 +0000 | [diff] [blame] | 76 | layout(location = 0) out vec4 value; |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 77 | struct RenderParams { |
| 78 | mat4 modelViewProjectionMatrix; |
| 79 | vec3 right; |
| 80 | vec3 up; |
| 81 | }; |
Stephen White | e2f35ba | 2022-01-26 16:48:55 +0000 | [diff] [blame] | 82 | |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 83 | struct VertexInput { |
| 84 | vec3 position; |
| 85 | vec4 color; |
| 86 | vec2 quad_pos; |
| 87 | }; |
Stephen White | e2f35ba | 2022-01-26 16:48:55 +0000 | [diff] [blame] | 88 | |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 89 | struct VertexOutput { |
| 90 | vec4 position; |
| 91 | vec4 color; |
| 92 | vec2 quad_pos; |
| 93 | }; |
Stephen White | e2f35ba | 2022-01-26 16:48:55 +0000 | [diff] [blame] | 94 | |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 95 | struct SimulationParams { |
| 96 | float deltaTime; |
| 97 | vec4 seed; |
| 98 | }; |
Stephen White | e2f35ba | 2022-01-26 16:48:55 +0000 | [diff] [blame] | 99 | |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 100 | struct Particle { |
| 101 | vec3 position; |
| 102 | float lifetime; |
| 103 | vec4 color; |
| 104 | vec3 velocity; |
| 105 | }; |
Stephen White | e2f35ba | 2022-01-26 16:48:55 +0000 | [diff] [blame] | 106 | |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 107 | struct UBO { |
| 108 | uint width; |
| 109 | }; |
Stephen White | e2f35ba | 2022-01-26 16:48:55 +0000 | [diff] [blame] | 110 | |
Stephen White | 0b39270 | 2022-01-28 22:36:58 +0000 | [diff] [blame] | 111 | vec4 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 Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 115 | } |
Stephen White | e2f35ba | 2022-01-26 16:48:55 +0000 | [diff] [blame] | 116 | |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 117 | void main() { |
Stephen White | 0b3dfef | 2022-02-10 16:22:28 +0000 | [diff] [blame] | 118 | 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 White | 0b39270 | 2022-01-28 22:36:58 +0000 | [diff] [blame] | 121 | return; |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 122 | } |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 123 | #version 310 es |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 124 | |
| 125 | vec2 rand_seed = vec2(0.0f, 0.0f); |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 126 | float rand() { |
Stephen White | 2a02b68 | 2022-02-28 18:19:47 +0000 | [diff] [blame] | 127 | 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 Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 129 | return rand_seed.y; |
| 130 | } |
| 131 | |
| 132 | struct RenderParams { |
| 133 | mat4 modelViewProjectionMatrix; |
| 134 | vec3 right; |
| 135 | vec3 up; |
| 136 | }; |
Stephen White | e2f35ba | 2022-01-26 16:48:55 +0000 | [diff] [blame] | 137 | |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 138 | struct VertexInput { |
| 139 | vec3 position; |
| 140 | vec4 color; |
| 141 | vec2 quad_pos; |
| 142 | }; |
Stephen White | e2f35ba | 2022-01-26 16:48:55 +0000 | [diff] [blame] | 143 | |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 144 | struct VertexOutput { |
| 145 | vec4 position; |
| 146 | vec4 color; |
| 147 | vec2 quad_pos; |
| 148 | }; |
Stephen White | e2f35ba | 2022-01-26 16:48:55 +0000 | [diff] [blame] | 149 | |
Stephen White | 987902e | 2022-12-15 16:42:28 +0000 | [diff] [blame] | 150 | struct SimulationParams { |
| 151 | float deltaTime; |
| 152 | uint pad; |
| 153 | uint pad_1; |
| 154 | uint pad_2; |
| 155 | vec4 seed; |
| 156 | }; |
| 157 | |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 158 | struct Particle { |
| 159 | vec3 position; |
| 160 | float lifetime; |
| 161 | vec4 color; |
| 162 | vec3 velocity; |
Stephen White | 05d8b02 | 2022-09-13 19:48:51 +0000 | [diff] [blame] | 163 | uint pad_3; |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 164 | }; |
| 165 | |
Stephen White | 987902e | 2022-12-15 16:42:28 +0000 | [diff] [blame] | 166 | layout(binding = 0, std140) uniform sim_params_block_ubo { |
| 167 | SimulationParams inner; |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 168 | } sim_params; |
Stephen White | e2f35ba | 2022-01-26 16:48:55 +0000 | [diff] [blame] | 169 | |
Stephen White | 863d9ed | 2022-09-02 19:19:10 +0000 | [diff] [blame] | 170 | layout(binding = 1, std430) buffer Particles_ssbo { |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 171 | Particle particles[]; |
| 172 | } data; |
Stephen White | 863d9ed | 2022-09-02 19:19:10 +0000 | [diff] [blame] | 173 | |
Stephen White | 0b39270 | 2022-01-28 22:36:58 +0000 | [diff] [blame] | 174 | struct UBO { |
| 175 | uint width; |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 176 | }; |
| 177 | |
Stephen White | 987902e | 2022-12-15 16:42:28 +0000 | [diff] [blame] | 178 | void 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 | |
| 185 | uniform highp sampler2D tint_symbol_2_1; |
Stephen White | 0b39270 | 2022-01-28 22:36:58 +0000 | [diff] [blame] | 186 | void simulate(uvec3 GlobalInvocationID) { |
Stephen White | 987902e | 2022-12-15 16:42:28 +0000 | [diff] [blame] | 187 | rand_seed = ((sim_params.inner.seed.xy + vec2(GlobalInvocationID.xy)) * sim_params.inner.seed.zw); |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 188 | uint idx = GlobalInvocationID.x; |
| 189 | Particle particle = data.particles[idx]; |
Stephen White | 987902e | 2022-12-15 16:42:28 +0000 | [diff] [blame] | 190 | 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 Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 193 | particle.color.a = smoothstep(0.0f, 0.5f, particle.lifetime); |
| 194 | if ((particle.lifetime < 0.0f)) { |
Ben Clayton | 13f0890 | 2022-10-26 18:36:44 +0000 | [diff] [blame] | 195 | uvec2 coord = uvec2(0u); |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 196 | { |
Stephen White | 987902e | 2022-12-15 16:42:28 +0000 | [diff] [blame] | 197 | 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 Harrison | 3374f43 | 2022-03-28 18:01:02 +0000 | [diff] [blame] | 199 | float tint_symbol_5 = rand(); |
| 200 | vec4 value = vec4(tint_symbol_5); |
Stephen White | ee38740 | 2022-02-15 17:52:37 +0000 | [diff] [blame] | 201 | bvec4 mask = bvec4(uvec4(greaterThanEqual(value, vec4(0.0f, probabilites.xyz))) & uvec4(lessThan(value, probabilites))); |
Ben Clayton | 13f0890 | 2022-10-26 18:36:44 +0000 | [diff] [blame] | 202 | coord = (coord * 2u); |
| 203 | coord.x = (coord.x + (any(mask.yw) ? 1u : 0u)); |
| 204 | coord.y = (coord.y + (any(mask.zw) ? 1u : 0u)); |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 205 | } |
| 206 | } |
Stephen White | 987902e | 2022-12-15 16:42:28 +0000 | [diff] [blame] | 207 | vec2 uv = (vec2(coord) / vec2(uvec2(textureSize(tint_symbol_2_1, 0)))); |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 208 | particle.position = vec3((((uv - 0.5f) * 3.0f) * vec2(1.0f, -1.0f)), 0.0f); |
Stephen White | 987902e | 2022-12-15 16:42:28 +0000 | [diff] [blame] | 209 | 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 Harrison | 3374f43 | 2022-03-28 18:01:02 +0000 | [diff] [blame] | 212 | float tint_symbol_1 = rand(); |
Stephen White | 987902e | 2022-12-15 16:42:28 +0000 | [diff] [blame] | 213 | particle.velocity.y = ((tint_symbol_1 - 0.5f) * 0.100000001f); |
Ryan Harrison | 3374f43 | 2022-03-28 18:01:02 +0000 | [diff] [blame] | 214 | 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 Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 218 | } |
Stephen White | 987902e | 2022-12-15 16:42:28 +0000 | [diff] [blame] | 219 | uint tint_symbol_6[1] = uint[1](idx); |
| 220 | assign_and_preserve_padding_data_particles_X(tint_symbol_6, particle); |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 221 | } |
| 222 | |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 223 | layout(local_size_x = 64, local_size_y = 1, local_size_z = 1) in; |
Stephen White | 0b39270 | 2022-01-28 22:36:58 +0000 | [diff] [blame] | 224 | void main() { |
| 225 | simulate(gl_GlobalInvocationID); |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 226 | return; |
| 227 | } |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 228 | Error parsing GLSL shader: |
Ben Clayton | b990d39 | 2023-03-02 09:25:40 +0000 | [diff] [blame] | 229 | ERROR: 0:75: 'textureQueryLevels' : no matching overloaded function found |
| 230 | ERROR: 0:75: '' : compilation terminated |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 231 | ERROR: 2 compilation errors. No code generated. |
| 232 | |
| 233 | |
| 234 | |
| 235 | #version 310 es |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 236 | |
| 237 | struct RenderParams { |
| 238 | mat4 modelViewProjectionMatrix; |
| 239 | vec3 right; |
| 240 | vec3 up; |
| 241 | }; |
Stephen White | e2f35ba | 2022-01-26 16:48:55 +0000 | [diff] [blame] | 242 | |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 243 | struct VertexInput { |
| 244 | vec3 position; |
| 245 | vec4 color; |
| 246 | vec2 quad_pos; |
| 247 | }; |
Stephen White | e2f35ba | 2022-01-26 16:48:55 +0000 | [diff] [blame] | 248 | |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 249 | struct VertexOutput { |
| 250 | vec4 position; |
| 251 | vec4 color; |
| 252 | vec2 quad_pos; |
| 253 | }; |
Stephen White | e2f35ba | 2022-01-26 16:48:55 +0000 | [diff] [blame] | 254 | |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 255 | struct SimulationParams { |
| 256 | float deltaTime; |
| 257 | vec4 seed; |
| 258 | }; |
Stephen White | e2f35ba | 2022-01-26 16:48:55 +0000 | [diff] [blame] | 259 | |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 260 | struct Particle { |
| 261 | vec3 position; |
| 262 | float lifetime; |
| 263 | vec4 color; |
| 264 | vec3 velocity; |
| 265 | }; |
Stephen White | e2f35ba | 2022-01-26 16:48:55 +0000 | [diff] [blame] | 266 | |
Stephen White | 987902e | 2022-12-15 16:42:28 +0000 | [diff] [blame] | 267 | struct UBO { |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 268 | uint width; |
Stephen White | 05d8b02 | 2022-09-13 19:48:51 +0000 | [diff] [blame] | 269 | uint pad; |
| 270 | uint pad_1; |
| 271 | uint pad_2; |
Stephen White | 987902e | 2022-12-15 16:42:28 +0000 | [diff] [blame] | 272 | }; |
| 273 | |
| 274 | layout(binding = 3, std140) uniform ubo_block_ubo { |
| 275 | UBO inner; |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 276 | } ubo; |
Stephen White | e2f35ba | 2022-01-26 16:48:55 +0000 | [diff] [blame] | 277 | |
Stephen White | 863d9ed | 2022-09-02 19:19:10 +0000 | [diff] [blame] | 278 | layout(binding = 4, std430) buffer Buffer_ssbo { |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 279 | float weights[]; |
| 280 | } buf_in; |
Stephen White | 863d9ed | 2022-09-02 19:19:10 +0000 | [diff] [blame] | 281 | |
| 282 | layout(binding = 5, std430) buffer Buffer_ssbo_1 { |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 283 | float weights[]; |
| 284 | } buf_out; |
Stephen White | 863d9ed | 2022-09-02 19:19:10 +0000 | [diff] [blame] | 285 | |
Stephen White | d556040 | 2022-01-25 00:35:20 +0000 | [diff] [blame] | 286 | uniform highp sampler2D tex_in_1; |
Stephen White | 0b39270 | 2022-01-28 22:36:58 +0000 | [diff] [blame] | 287 | void import_level(uvec3 coord) { |
Stephen White | 987902e | 2022-12-15 16:42:28 +0000 | [diff] [blame] | 288 | uint offset = (coord.x + (coord.y * ubo.inner.width)); |
Stephen White | d556040 | 2022-01-25 00:35:20 +0000 | [diff] [blame] | 289 | buf_out.weights[offset] = texelFetch(tex_in_1, ivec2(coord.xy), 0).w; |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 290 | } |
| 291 | |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 292 | layout(local_size_x = 64, local_size_y = 1, local_size_z = 1) in; |
Stephen White | 0b39270 | 2022-01-28 22:36:58 +0000 | [diff] [blame] | 293 | void main() { |
| 294 | import_level(gl_GlobalInvocationID); |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 295 | return; |
| 296 | } |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 297 | #version 310 es |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 298 | |
| 299 | struct RenderParams { |
| 300 | mat4 modelViewProjectionMatrix; |
| 301 | vec3 right; |
| 302 | vec3 up; |
| 303 | }; |
Stephen White | e2f35ba | 2022-01-26 16:48:55 +0000 | [diff] [blame] | 304 | |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 305 | struct VertexInput { |
| 306 | vec3 position; |
| 307 | vec4 color; |
| 308 | vec2 quad_pos; |
| 309 | }; |
Stephen White | e2f35ba | 2022-01-26 16:48:55 +0000 | [diff] [blame] | 310 | |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 311 | struct VertexOutput { |
| 312 | vec4 position; |
| 313 | vec4 color; |
| 314 | vec2 quad_pos; |
| 315 | }; |
Stephen White | e2f35ba | 2022-01-26 16:48:55 +0000 | [diff] [blame] | 316 | |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 317 | struct SimulationParams { |
| 318 | float deltaTime; |
| 319 | vec4 seed; |
| 320 | }; |
Stephen White | e2f35ba | 2022-01-26 16:48:55 +0000 | [diff] [blame] | 321 | |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 322 | struct Particle { |
| 323 | vec3 position; |
| 324 | float lifetime; |
| 325 | vec4 color; |
| 326 | vec3 velocity; |
| 327 | }; |
Stephen White | e2f35ba | 2022-01-26 16:48:55 +0000 | [diff] [blame] | 328 | |
Stephen White | 987902e | 2022-12-15 16:42:28 +0000 | [diff] [blame] | 329 | struct UBO { |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 330 | uint width; |
Stephen White | 05d8b02 | 2022-09-13 19:48:51 +0000 | [diff] [blame] | 331 | uint pad; |
| 332 | uint pad_1; |
| 333 | uint pad_2; |
Stephen White | 987902e | 2022-12-15 16:42:28 +0000 | [diff] [blame] | 334 | }; |
| 335 | |
| 336 | layout(binding = 3, std140) uniform ubo_block_ubo { |
| 337 | UBO inner; |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 338 | } ubo; |
Stephen White | e2f35ba | 2022-01-26 16:48:55 +0000 | [diff] [blame] | 339 | |
Stephen White | 863d9ed | 2022-09-02 19:19:10 +0000 | [diff] [blame] | 340 | layout(binding = 4, std430) buffer Buffer_ssbo { |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 341 | float weights[]; |
| 342 | } buf_in; |
Stephen White | 863d9ed | 2022-09-02 19:19:10 +0000 | [diff] [blame] | 343 | |
| 344 | layout(binding = 5, std430) buffer Buffer_ssbo_1 { |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 345 | float weights[]; |
| 346 | } buf_out; |
Stephen White | 863d9ed | 2022-09-02 19:19:10 +0000 | [diff] [blame] | 347 | |
Stephen White | d9b32c3 | 2022-02-03 22:39:13 +0000 | [diff] [blame] | 348 | layout(rgba8) uniform highp writeonly image2D tex_out; |
Stephen White | 0b39270 | 2022-01-28 22:36:58 +0000 | [diff] [blame] | 349 | void export_level(uvec3 coord) { |
Ben Clayton | 13f0890 | 2022-10-26 18:36:44 +0000 | [diff] [blame] | 350 | if (all(lessThan(coord.xy, uvec2(uvec2(imageSize(tex_out)))))) { |
Stephen White | 987902e | 2022-12-15 16:42:28 +0000 | [diff] [blame] | 351 | uint dst_offset = (coord.x + (coord.y * ubo.inner.width)); |
| 352 | uint src_offset = ((coord.x * 2u) + ((coord.y * 2u) * ubo.inner.width)); |
Ben Clayton | b990d39 | 2023-03-02 09:25:40 +0000 | [diff] [blame] | 353 | float a = buf_in.weights[(src_offset + 0u)]; |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 354 | float b = buf_in.weights[(src_offset + 1u)]; |
Stephen White | 987902e | 2022-12-15 16:42:28 +0000 | [diff] [blame] | 355 | float c = buf_in.weights[((src_offset + 0u) + ubo.inner.width)]; |
| 356 | float d = buf_in.weights[((src_offset + 1u) + ubo.inner.width)]; |
Ben Clayton | b990d39 | 2023-03-02 09:25:40 +0000 | [diff] [blame] | 357 | float sum = dot(vec4(a, b, c, d), vec4(1.0f)); |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 358 | buf_out.weights[dst_offset] = (sum / 4.0f); |
Ben Clayton | b990d39 | 2023-03-02 09:25:40 +0000 | [diff] [blame] | 359 | vec4 probabilities = (vec4(a, (a + b), ((a + b) + c), sum) / max(sum, 0.0001f)); |
Stephen White | d9b32c3 | 2022-02-03 22:39:13 +0000 | [diff] [blame] | 360 | imageStore(tex_out, ivec2(coord.xy), probabilities); |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 361 | } |
| 362 | } |
| 363 | |
| 364 | layout(local_size_x = 64, local_size_y = 1, local_size_z = 1) in; |
Stephen White | 0b39270 | 2022-01-28 22:36:58 +0000 | [diff] [blame] | 365 | void main() { |
| 366 | export_level(gl_GlobalInvocationID); |
Ben Clayton | 73ced33 | 2022-01-21 22:38:16 +0000 | [diff] [blame] | 367 | return; |
| 368 | } |