#pragma MSP stage(compute) layout(local_size_x=8, local_size_y=8) in; uniform Params { float delta_time; float velocity_damping; float gravity; float max_flow_fraction; float residual_depth; ivec2 drop_pos; float drop_time; }; layout(push_constant) uniform Time { float time; }; uniform sampler2D surface_in; uniform sampler2D velocity_in; uniform sampler2D bottom_in; layout(r32f) uniform image2D surface_out; layout(rg32f) uniform image2D velocity_out; vec2 get_depth(ivec2 coord) { float surface = texelFetch(surface_in, coord, 0).x; float bottom = texelFetch(bottom_in, coord, 0).x; return vec2(surface, surface-bottom); } vec4 get_data(ivec2 coord) { vec2 velocity = texelFetch(velocity_in, coord, 0).xy; return vec4(velocity, get_depth(coord)); }