dawn-cmake/test/tint/benchmark/particles.wgsl.expected.glsl
Stephen White 05d8b02b0f GLSL: implement host-visible memory padding.
Since GLSL ES does not support the offset= attribute, struct members
with explicit @align or @size attributes require adding explicit
padding members.  This in turn requires rewriting any constructor
calls to initialize the new padding to zero, handled in the same
transform.

Note that this is currently overly-verbose, and will add padding where
GLSL doesn't technically need it (e.g., padding a vec3 out to 16 bytes).

Bug: tint:1415
Change-Id: Ia9ba513066a0e84f4c43247fcbbe02f5fadd6630
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/101720
Reviewed-by: Ben Clayton <bclayton@google.com>
Commit-Queue: Stephen White <senorblanco@chromium.org>
Kokoro: Kokoro <noreply+kokoro@google.com>
2022-09-13 19:48:51 +00:00

345 lines
7.9 KiB
GLSL

SKIP: FAILED
#version 310 es
layout(location = 0) in vec3 position_1;
layout(location = 1) in vec4 color_1;
layout(location = 2) in vec2 quad_pos_1;
layout(location = 0) out vec4 color_2;
layout(location = 1) out vec2 quad_pos_2;
layout(binding = 0, std140) uniform RenderParams_ubo {
mat4 modelViewProjectionMatrix;
vec3 right;
uint pad;
vec3 up;
uint pad_1;
} render_params;
struct VertexInput {
vec3 position;
vec4 color;
vec2 quad_pos;
};
struct VertexOutput {
vec4 position;
vec4 color;
vec2 quad_pos;
};
struct SimulationParams {
float deltaTime;
vec4 seed;
};
struct Particle {
vec3 position;
float lifetime;
vec4 color;
vec3 velocity;
};
struct UBO {
uint width;
};
VertexOutput vs_main(VertexInput tint_symbol) {
vec3 quad_pos = (mat2x3(render_params.right, render_params.up) * tint_symbol.quad_pos);
vec3 position = (tint_symbol.position + (quad_pos * 0.01f));
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));
tint_symbol_1.position = (render_params.modelViewProjectionMatrix * vec4(position, 1.0f));
tint_symbol_1.color = tint_symbol.color;
tint_symbol_1.quad_pos = tint_symbol.quad_pos;
return tint_symbol_1;
}
void main() {
gl_PointSize = 1.0;
VertexInput tint_symbol_2 = VertexInput(position_1, color_1, quad_pos_1);
VertexOutput inner_result = vs_main(tint_symbol_2);
gl_Position = inner_result.position;
color_2 = inner_result.color;
quad_pos_2 = inner_result.quad_pos;
gl_Position.y = -(gl_Position.y);
gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
return;
}
#version 310 es
precision mediump float;
layout(location = 0) in vec4 color_1;
layout(location = 1) in vec2 quad_pos_1;
layout(location = 0) out vec4 value;
struct RenderParams {
mat4 modelViewProjectionMatrix;
vec3 right;
vec3 up;
};
struct VertexInput {
vec3 position;
vec4 color;
vec2 quad_pos;
};
struct VertexOutput {
vec4 position;
vec4 color;
vec2 quad_pos;
};
struct SimulationParams {
float deltaTime;
vec4 seed;
};
struct Particle {
vec3 position;
float lifetime;
vec4 color;
vec3 velocity;
};
struct UBO {
uint width;
};
vec4 fs_main(VertexOutput tint_symbol) {
vec4 color = tint_symbol.color;
color.a = (color.a * max((1.0f - length(tint_symbol.quad_pos)), 0.0f));
return color;
}
void main() {
VertexOutput tint_symbol_1 = VertexOutput(gl_FragCoord, color_1, quad_pos_1);
vec4 inner_result = fs_main(tint_symbol_1);
value = inner_result;
return;
}
#version 310 es
vec2 rand_seed = vec2(0.0f, 0.0f);
float rand() {
rand_seed.x = fract((cos(dot(rand_seed, vec2(23.140779495f, 232.616897583f))) * 136.816802979f));
rand_seed.y = fract((cos(dot(rand_seed, vec2(54.478565216f, 345.841522217f))) * 534.764526367f));
return rand_seed.y;
}
struct RenderParams {
mat4 modelViewProjectionMatrix;
vec3 right;
vec3 up;
};
struct VertexInput {
vec3 position;
vec4 color;
vec2 quad_pos;
};
struct VertexOutput {
vec4 position;
vec4 color;
vec2 quad_pos;
};
struct Particle {
vec3 position;
float lifetime;
vec4 color;
vec3 velocity;
uint pad_3;
};
layout(binding = 0, std140) uniform SimulationParams_ubo {
float deltaTime;
uint pad;
uint pad_1;
uint pad_2;
vec4 seed;
} sim_params;
layout(binding = 1, std430) buffer Particles_ssbo {
Particle particles[];
} data;
struct UBO {
uint width;
};
uniform highp sampler2D tint_symbol_6;
void simulate(uvec3 GlobalInvocationID) {
rand_seed = ((sim_params.seed.xy + vec2(GlobalInvocationID.xy)) * sim_params.seed.zw);
uint idx = GlobalInvocationID.x;
Particle particle = data.particles[idx];
particle.velocity.z = (particle.velocity.z - (sim_params.deltaTime * 0.5f));
particle.position = (particle.position + (sim_params.deltaTime * particle.velocity));
particle.lifetime = (particle.lifetime - sim_params.deltaTime);
particle.color.a = smoothstep(0.0f, 0.5f, particle.lifetime);
if ((particle.lifetime < 0.0f)) {
ivec2 coord = ivec2(0);
{
for(int level = (textureQueryLevels(tint_symbol_6) - 1); (level > 0); level = (level - 1)) {
vec4 probabilites = texelFetch(tint_symbol_6, coord, level);
float tint_symbol_5 = rand();
vec4 value = vec4(tint_symbol_5);
bvec4 mask = bvec4(uvec4(greaterThanEqual(value, vec4(0.0f, probabilites.xyz))) & uvec4(lessThan(value, probabilites)));
coord = (coord * 2);
coord.x = (coord.x + (any(mask.yw) ? 1 : 0));
coord.y = (coord.y + (any(mask.zw) ? 1 : 0));
}
}
vec2 uv = (vec2(coord) / vec2(textureSize(tint_symbol_6, 0)));
particle.position = vec3((((uv - 0.5f) * 3.0f) * vec2(1.0f, -1.0f)), 0.0f);
particle.color = texelFetch(tint_symbol_6, coord, 0);
float tint_symbol_1 = rand();
particle.velocity.x = ((tint_symbol_1 - 0.5f) * 0.100000001f);
float tint_symbol_2 = rand();
particle.velocity.y = ((tint_symbol_2 - 0.5f) * 0.100000001f);
float tint_symbol_3 = rand();
particle.velocity.z = (tint_symbol_3 * 0.300000012f);
float tint_symbol_4 = rand();
particle.lifetime = (0.5f + (tint_symbol_4 * 2.0f));
}
data.particles[idx] = particle;
}
layout(local_size_x = 64, local_size_y = 1, local_size_z = 1) in;
void main() {
simulate(gl_GlobalInvocationID);
return;
}
Error parsing GLSL shader:
ERROR: 0:64: 'textureQueryLevels' : no matching overloaded function found
ERROR: 0:64: '' : compilation terminated
ERROR: 2 compilation errors. No code generated.
#version 310 es
struct RenderParams {
mat4 modelViewProjectionMatrix;
vec3 right;
vec3 up;
};
struct VertexInput {
vec3 position;
vec4 color;
vec2 quad_pos;
};
struct VertexOutput {
vec4 position;
vec4 color;
vec2 quad_pos;
};
struct SimulationParams {
float deltaTime;
vec4 seed;
};
struct Particle {
vec3 position;
float lifetime;
vec4 color;
vec3 velocity;
};
layout(binding = 3, std140) uniform UBO_ubo {
uint width;
uint pad;
uint pad_1;
uint pad_2;
} ubo;
layout(binding = 4, std430) buffer Buffer_ssbo {
float weights[];
} buf_in;
layout(binding = 5, std430) buffer Buffer_ssbo_1 {
float weights[];
} buf_out;
uniform highp sampler2D tex_in_1;
void import_level(uvec3 coord) {
uint offset = (coord.x + (coord.y * ubo.width));
buf_out.weights[offset] = texelFetch(tex_in_1, ivec2(coord.xy), 0).w;
}
layout(local_size_x = 64, local_size_y = 1, local_size_z = 1) in;
void main() {
import_level(gl_GlobalInvocationID);
return;
}
#version 310 es
struct RenderParams {
mat4 modelViewProjectionMatrix;
vec3 right;
vec3 up;
};
struct VertexInput {
vec3 position;
vec4 color;
vec2 quad_pos;
};
struct VertexOutput {
vec4 position;
vec4 color;
vec2 quad_pos;
};
struct SimulationParams {
float deltaTime;
vec4 seed;
};
struct Particle {
vec3 position;
float lifetime;
vec4 color;
vec3 velocity;
};
layout(binding = 3, std140) uniform UBO_ubo {
uint width;
uint pad;
uint pad_1;
uint pad_2;
} ubo;
layout(binding = 4, std430) buffer Buffer_ssbo {
float weights[];
} buf_in;
layout(binding = 5, std430) buffer Buffer_ssbo_1 {
float weights[];
} buf_out;
layout(rgba8) uniform highp writeonly image2D tex_out;
void export_level(uvec3 coord) {
if (all(lessThan(coord.xy, uvec2(imageSize(tex_out))))) {
uint dst_offset = (coord.x + (coord.y * ubo.width));
uint src_offset = ((coord.x * 2u) + ((coord.y * 2u) * ubo.width));
float a = buf_in.weights[(src_offset + 0u)];
float b = buf_in.weights[(src_offset + 1u)];
float c = buf_in.weights[((src_offset + 0u) + ubo.width)];
float d = buf_in.weights[((src_offset + 1u) + ubo.width)];
float sum = dot(vec4(a, b, c, d), vec4(1.0f));
buf_out.weights[dst_offset] = (sum / 4.0f);
vec4 probabilities = (vec4(a, (a + b), ((a + b) + c), sum) / max(sum, 0.0001f));
imageStore(tex_out, ivec2(coord.xy), probabilities);
}
}
layout(local_size_x = 64, local_size_y = 1, local_size_z = 1) in;
void main() {
export_level(gl_GlobalInvocationID);
return;
}