Skip to content

Instantly share code, notes, and snippets.

@DGriffin91
Last active October 1, 2025 20:49
Show Gist options
  • Save DGriffin91/76a55cfda118c1da9ffa5af7b7fa57d3 to your computer and use it in GitHub Desktop.
Save DGriffin91/76a55cfda118c1da9ffa5af7b7fa57d3 to your computer and use it in GitHub Desktop.
Bevy ocean compute shader
# Runs ocean shader from (copied slang wgsl output) https://shader-slang.org/slang-playground/
# Based on https://www.shadertoy.com/view/XdlSDs.
[package]
name = "ocean_shader"
version = "0.1.0"
edition = "2024"
[dependencies]
bevy = { version = "0.17.1", features = ["webgpu"] }
# bevy run --release web --open
# https://github.com/TheBevyFlock/bevy_cli
use bevy::{
asset::RenderAssetUsages,
prelude::*,
render::{
Render, RenderApp, RenderStartup, RenderSystems,
extract_resource::{ExtractResource, ExtractResourcePlugin},
render_asset::RenderAssets,
render_graph::{self, RenderGraph, RenderLabel},
render_resource::{
binding_types::{texture_storage_2d, uniform_buffer},
*,
},
renderer::{RenderContext, RenderDevice, RenderQueue},
texture::GpuImage,
},
window::WindowResolution,
};
use std::borrow::Cow;
/// This example uses a shader source file from the assets subdirectory
const SHADER_ASSET_PATH: &str = "ocean.wgsl";
const SIZE: UVec2 = UVec2::new(2560, 1440);
const WORKGROUP_SIZE: u32 = 16;
fn main() {
App::new()
.insert_resource(ClearColor(Color::BLACK))
.insert_resource(bevy::winit::WinitSettings {
focused_mode: bevy::winit::UpdateMode::Continuous,
unfocused_mode: bevy::winit::UpdateMode::Continuous,
})
.add_plugins((
DefaultPlugins
.set(WindowPlugin {
primary_window: Some(Window {
resolution: WindowResolution::new(SIZE.x, SIZE.y)
.with_scale_factor_override(1.0),
// Fullscreen crashes on DX12
// mode: bevy::window::WindowMode::Fullscreen(
// MonitorSelection::Primary,
// VideoModeSelection::Current,
// ),
mode: bevy::window::WindowMode::Windowed,
// uncomment for unthrottled FPS
present_mode: bevy::window::PresentMode::AutoNoVsync,
..default()
}),
..default()
})
.set(ImagePlugin::default_nearest()),
OceanComputePlugin,
bevy::diagnostic::LogDiagnosticsPlugin::default(),
bevy::diagnostic::FrameTimeDiagnosticsPlugin::default(),
))
.add_systems(Startup, setup)
.add_systems(Update, switch_textures)
.add_systems(Update, update_uniform)
.run();
}
fn setup(mut commands: Commands, mut images: ResMut<Assets<Image>>) {
let mut image = Image::new_target_texture(SIZE.x, SIZE.y, TextureFormat::Rgba8Unorm);
image.asset_usage = RenderAssetUsages::RENDER_WORLD;
image.texture_descriptor.usage =
TextureUsages::COPY_DST | TextureUsages::STORAGE_BINDING | TextureUsages::TEXTURE_BINDING;
let image0 = images.add(image.clone());
commands.spawn((
Sprite {
image: image0.clone(),
custom_size: Some(SIZE.as_vec2()),
flip_y: true,
..default()
},
Transform::from_scale(Vec3::ONE),
));
commands.spawn(Camera2d);
commands.insert_resource(OceanImages { texture_a: image0 });
commands.insert_resource(OceanUniforms::default());
}
fn update_uniform(
mut cursor_moved: MessageReader<CursorMoved>,
mut ocean_uniforms: ResMut<OceanUniforms>,
time: Res<Time>,
) {
for event in cursor_moved.read() {
ocean_uniforms.mouse_position = vec4(event.position.x, event.position.y, 0.0, 0.0);
}
ocean_uniforms.time = vec4(time.elapsed_secs(), 0.0, 0.0, 0.0);
}
// Switch texture to display every frame to show the one that was written to most recently.
fn switch_textures(images: Res<OceanImages>, mut sprite: Single<&mut Sprite>) {
sprite.image = images.texture_a.clone();
}
struct OceanComputePlugin;
#[derive(Debug, Hash, PartialEq, Eq, Clone, RenderLabel)]
struct OceanLabel;
impl Plugin for OceanComputePlugin {
fn build(&self, app: &mut App) {
// Extract the game of life image resource from the main world into the render world
// for operation on by the compute shader and display on the sprite.
app.add_plugins((
ExtractResourcePlugin::<OceanImages>::default(),
ExtractResourcePlugin::<OceanUniforms>::default(),
));
let render_app = app.sub_app_mut(RenderApp);
render_app
.add_systems(RenderStartup, init_ocean_pipeline)
.add_systems(
Render,
prepare_bind_group.in_set(RenderSystems::PrepareBindGroups),
);
let mut render_graph = render_app.world_mut().resource_mut::<RenderGraph>();
render_graph.add_node(OceanLabel, OceanNode::default());
render_graph.add_node_edge(OceanLabel, bevy::render::graph::CameraDriverLabel);
}
}
#[derive(Resource, Clone, ExtractResource)]
struct OceanImages {
texture_a: Handle<Image>,
}
#[derive(Resource, Clone, ExtractResource, ShaderType, Default)]
struct OceanUniforms {
// Just matching the @align(16) that was in the existing shader.
time: Vec4,
mouse_position: Vec4,
}
#[derive(Resource)]
struct OceanImageBindGroup(BindGroup);
fn prepare_bind_group(
mut commands: Commands,
pipeline: Res<OceanPipeline>,
gpu_images: Res<RenderAssets<GpuImage>>,
ocean_images: Res<OceanImages>,
ocean_uniforms: Res<OceanUniforms>,
render_device: Res<RenderDevice>,
queue: Res<RenderQueue>,
) {
let view_a = gpu_images.get(&ocean_images.texture_a).unwrap();
// Uniform buffer is used here to demonstrate how to set up a uniform in a compute shader
// Alternatives such as storage buffers or push constants may be more suitable for your use case
let mut uniform_buffer = UniformBuffer::from(ocean_uniforms.into_inner());
uniform_buffer.write_buffer(&render_device, &queue);
commands.insert_resource(OceanImageBindGroup(render_device.create_bind_group(
None,
&pipeline.texture_bind_group_layout,
&BindGroupEntries::with_indices(((0, &view_a.texture_view), (1, &uniform_buffer))),
)));
}
#[derive(Resource)]
struct OceanPipeline {
texture_bind_group_layout: BindGroupLayout,
update_pipeline: CachedComputePipelineId,
}
fn init_ocean_pipeline(
mut commands: Commands,
render_device: Res<RenderDevice>,
asset_server: Res<AssetServer>,
pipeline_cache: Res<PipelineCache>,
) {
let texture_bind_group_layout = render_device.create_bind_group_layout(
"OceanImages",
&BindGroupLayoutEntries::sequential(
ShaderStages::COMPUTE,
(
texture_storage_2d(TextureFormat::Rgba8Unorm, StorageTextureAccess::WriteOnly),
uniform_buffer::<OceanUniforms>(false),
),
),
);
let shader = asset_server.load(SHADER_ASSET_PATH);
let update_pipeline = pipeline_cache.queue_compute_pipeline(ComputePipelineDescriptor {
layout: vec![texture_bind_group_layout.clone()],
shader,
entry_point: Some(Cow::from("imageMain")),
..default()
});
commands.insert_resource(OceanPipeline {
texture_bind_group_layout,
update_pipeline,
});
}
#[derive(Default)]
struct OceanNode;
impl render_graph::Node for OceanNode {
fn run(
&self,
_graph: &mut render_graph::RenderGraphContext,
render_context: &mut RenderContext,
world: &World,
) -> Result<(), render_graph::NodeRunError> {
let Some(bind_group) = world.get_resource::<OceanImageBindGroup>() else {
return Ok(());
};
let pipeline_cache = world.resource::<PipelineCache>();
let pipeline = world.resource::<OceanPipeline>();
let mut pass = render_context
.command_encoder()
.begin_compute_pass(&ComputePassDescriptor::default());
let Some(update_pipeline) = pipeline_cache.get_compute_pipeline(pipeline.update_pipeline)
else {
return Ok(());
};
pass.set_bind_group(0, &bind_group.0, &[]);
pass.set_pipeline(update_pipeline);
pass.dispatch_workgroups(SIZE.x / WORKGROUP_SIZE, SIZE.y / WORKGROUP_SIZE, 1);
Ok(())
}
}
// copied slang wgsl output from ocean example from https://shader-slang.org/slang-playground/
@binding(0) @group(0) var outputTexture_0 : texture_storage_2d<rgba8unorm, write>;
struct GlobalParams_std140_0
{
@align(16) time_0 : f32,
@align(16) mousePosition_0 : vec4<f32>,
};
@binding(1) @group(0) var<uniform> globalParams_0 : GlobalParams_std140_0;
struct DiffPair_float_0
{
primal_0 : f32,
differential_0 : f32,
};
fn _d_sqrt_0( dpx_0 : ptr<function, DiffPair_float_0>, dOut_0 : f32)
{
var _S1 : f32 = 0.5f / sqrt(max(1.00000001168609742e-07f, (*dpx_0).primal_0)) * dOut_0;
(*dpx_0).primal_0 = (*dpx_0).primal_0;
(*dpx_0).differential_0 = _S1;
return;
}
struct DiffPair_vectorx3Cfloatx2C2x3E_0
{
primal_0 : vec2<f32>,
differential_0 : vec2<f32>,
};
fn _d_dot_0( dpx_1 : ptr<function, DiffPair_vectorx3Cfloatx2C2x3E_0>, dpy_0 : ptr<function, DiffPair_vectorx3Cfloatx2C2x3E_0>, dOut_1 : f32)
{
var x_d_result_0 : vec2<f32>;
x_d_result_0[i32(0)] = (*dpy_0).primal_0[i32(0)] * dOut_1;
var y_d_result_0 : vec2<f32>;
y_d_result_0[i32(0)] = (*dpx_1).primal_0[i32(0)] * dOut_1;
x_d_result_0[i32(1)] = (*dpy_0).primal_0[i32(1)] * dOut_1;
y_d_result_0[i32(1)] = (*dpx_1).primal_0[i32(1)] * dOut_1;
(*dpx_1).primal_0 = (*dpx_1).primal_0;
(*dpx_1).differential_0 = x_d_result_0;
(*dpy_0).primal_0 = (*dpy_0).primal_0;
(*dpy_0).differential_0 = y_d_result_0;
return;
}
fn _d_cos_0( dpx_2 : ptr<function, DiffPair_float_0>, dOut_2 : f32)
{
var _S2 : f32 = - sin((*dpx_2).primal_0) * dOut_2;
(*dpx_2).primal_0 = (*dpx_2).primal_0;
(*dpx_2).differential_0 = _S2;
return;
}
fn _d_sin_0( dpx_3 : ptr<function, DiffPair_float_0>, dOut_3 : f32)
{
var _S3 : f32 = cos((*dpx_3).primal_0) * dOut_3;
(*dpx_3).primal_0 = (*dpx_3).primal_0;
(*dpx_3).differential_0 = _S3;
return;
}
fn createRotationMatrixAxisAngle_0( axis_0 : vec3<f32>, angle_0 : f32) -> mat3x3<f32>
{
var s_0 : f32 = sin(angle_0);
var c_0 : f32 = cos(angle_0);
var oc_0 : f32 = 1.0f - c_0;
var _S4 : f32 = axis_0.x;
var _S5 : f32 = oc_0 * _S4;
var _S6 : f32 = axis_0.y;
var _S7 : f32 = _S5 * _S6;
var _S8 : f32 = axis_0.z;
var _S9 : f32 = _S8 * s_0;
var _S10 : f32 = oc_0 * _S8;
var _S11 : f32 = _S10 * _S4;
var _S12 : f32 = _S6 * s_0;
var _S13 : f32 = oc_0 * _S6;
var _S14 : f32 = _S13 * _S8;
var _S15 : f32 = _S4 * s_0;
return mat3x3<f32>(_S5 * _S4 + c_0, _S7 - _S9, _S11 + _S12, _S7 + _S9, _S13 * _S6 + c_0, _S14 - _S15, _S11 - _S12, _S14 + _S15, _S10 * _S8 + c_0);
}
fn getRay_0( fragCoord_0 : vec2<f32>, resolution_0 : vec2<f32>) -> vec3<f32>
{
var _S16 : f32 = resolution_0.x;
var _S17 : f32 = resolution_0.y;
var uv_0 : vec2<f32> = (fragCoord_0.xy / resolution_0.xy * vec2<f32>(2.0f) - vec2<f32>(1.0f)) * vec2<f32>(_S16 / _S17, 1.0f);
var proj_0 : vec3<f32> = normalize(vec3<f32>(uv_0.x, uv_0.y, 1.5f));
var _S18 : bool;
if(_S16 < 40.0f)
{
_S18 = true;
}
else
{
_S18 = _S17 < 40.0f;
}
if(_S18)
{
return proj_0;
}
var normalizedMouse_0 : vec2<f32> = globalParams_0.mousePosition_0.xy / resolution_0;
var _S19 : mat3x3<f32> = createRotationMatrixAxisAngle_0(vec3<f32>(0.0f, -1.0f, 0.0f), 3.0f * ((1.0f - normalizedMouse_0.x + 0.5f) * 2.0f - 1.0f));
const _S20 : vec3<f32> = vec3<f32>(1.0f, 0.0f, 0.0f);
var _S21 : f32 = normalizedMouse_0.y;
var _S22 : f32;
if(_S21 == 0.0f)
{
_S22 = 0.34999999403953552f;
}
else
{
_S22 = _S21;
}
return (((proj_0) * ((((createRotationMatrixAxisAngle_0(_S20, 0.5f + 1.5f * (_S22 * 2.0f - 1.0f))) * (_S19))))));
}
fn getSunDirection_0() -> vec3<f32>
{
return normalize(vec3<f32>(sin(globalParams_0.time_0), 1.0f, cos(globalParams_0.time_0)));
}
fn extra_cheap_atmosphere_0( raydir_0 : vec3<f32>, sundir_0 : vec3<f32>) -> vec3<f32>
{
var _S23 : vec3<f32> = sundir_0;
_S23[i32(1)] = max(sundir_0.y, -0.07000000029802322f);
var _S24 : f32 = raydir_0.y;
var special_trick_0 : f32 = 1.0f / (_S24 + 0.10000000149011612f);
var _S25 : vec3<f32> = vec3<f32>(1.0f);
var _S26 : vec3<f32> = vec3<f32>(0.0f);
const _S27 : vec3<f32> = vec3<f32>(5.5f, 13.0f, 22.39999961853027344f);
var _S28 : vec3<f32> = vec3<f32>(22.39999961853027344f);
return max(_S26, _S27 / _S28 * mix(_S25, max(_S26, _S25 - _S27 / _S28), vec3<f32>((1.0f / (_S23.y * 11.0f + 1.0f)))) - _S27 * vec3<f32>(0.0020000000949949f) * vec3<f32>((special_trick_0 + -6.0f * _S23.y * _S23.y))) * vec3<f32>((special_trick_0 * (0.23999999463558197f + pow(abs(dot(_S23, raydir_0)), 2.0f) * 0.23999999463558197f))) * vec3<f32>((1.0f + pow(1.0f - _S24, 3.0f)));
}
fn getAtmosphere_0( dir_0 : vec3<f32>) -> vec3<f32>
{
return extra_cheap_atmosphere_0(dir_0, getSunDirection_0()) * vec3<f32>(0.5f);
}
fn getSun_0( dir_1 : vec3<f32>) -> f32
{
return pow(max(0.0f, dot(dir_1, getSunDirection_0())), 720.0f) * 210.0f;
}
fn aces_tonemap_0( color_0 : vec3<f32>) -> vec3<f32>
{
var v_0 : vec3<f32> = (((mat3x3<f32>(0.59719002246856689f, 0.07599999755620956f, 0.0284000001847744f, 0.35457998514175415f, 0.9083399772644043f, 0.1338299959897995f, 0.04822999984025955f, 0.01565999910235405f, 0.83776998519897461f)) * (color_0)));
return pow(clamp((((mat3x3<f32>(1.60475003719329834f, -0.10208000242710114f, -0.00326999998651445f, -0.53108000755310059f, 1.10812997817993164f, -0.07276000082492828f, -0.07366999983787537f, -0.00604999996721745f, 1.0760200023651123f)) * ((v_0 * (v_0 + vec3<f32>(0.02457859925925732f)) - vec3<f32>(0.0000905370034161f)) / (v_0 * (vec3<f32>(0.98372900485992432f) * v_0 + vec3<f32>(0.43295100331306458f)) + vec3<f32>(0.23808099329471588f))))), vec3<f32>(0.0f), vec3<f32>(1.0f)), vec3<f32>(0.45454543828964233f));
}
fn intersectPlane_0( origin_0 : vec3<f32>, direction_0 : vec3<f32>, point_0 : vec3<f32>, normal_0 : vec3<f32>) -> f32
{
return clamp(dot(point_0 - origin_0, normal_0) / dot(direction_0, normal_0), -1.0f, 9.991999e+06f);
}
fn _d_exp_0( dpx_4 : ptr<function, DiffPair_float_0>, dOut_4 : f32)
{
var _S29 : f32 = exp((*dpx_4).primal_0) * dOut_4;
(*dpx_4).primal_0 = (*dpx_4).primal_0;
(*dpx_4).differential_0 = _S29;
return;
}
fn wavedx_0( position_0 : vec2<f32>, direction_1 : vec2<f32>, frequency_0 : f32, timeshift_0 : f32) -> vec2<f32>
{
var x_0 : f32 = dot(direction_1, position_0) * frequency_0 + timeshift_0;
var wave_0 : f32 = exp(sin(x_0) - 1.0f);
return vec2<f32>(wave_0, - (wave_0 * cos(x_0)));
}
fn getwaves_0( position_1 : vec2<f32>) -> f32
{
var _S30 : f32 = length(position_1) * 0.10000000149011612f;
var p_0 : vec2<f32> = vec2<f32>(sin(0.0f), cos(0.0f));
var res_0 : vec2<f32> = wavedx_0(position_1, p_0, 1.0f, globalParams_0.time_0 * 5.0f + _S30);
var _S31 : vec2<f32> = vec2<f32>(0.37999999523162842f);
var _S32 : vec2<f32> = position_1 + p_0 * vec2<f32>(res_0.y) * _S31;
var _S33 : f32 = mix(1.0f, 0.0f, 0.20000000298023224f);
var p_1 : vec2<f32> = vec2<f32>(sin(1232.39990234375f), cos(1232.39990234375f));
var res_1 : vec2<f32> = wavedx_0(_S32, p_1, 1.1799999475479126f, globalParams_0.time_0 * 5.35000038146972656f + _S30);
var _S34 : vec2<f32> = _S32 + p_1 * vec2<f32>(res_1.y) * vec2<f32>(_S33) * _S31;
var _S35 : f32 = mix(_S33, 0.0f, 0.20000000298023224f);
var p_2 : vec2<f32> = vec2<f32>(sin(2464.7998046875f), cos(2464.7998046875f));
var res_2 : vec2<f32> = wavedx_0(_S34, p_2, 1.39239990711212158f, globalParams_0.time_0 * 5.72450065612792969f + _S30);
var _S36 : vec2<f32> = _S34 + p_2 * vec2<f32>(res_2.y) * vec2<f32>(_S35) * _S31;
var _S37 : f32 = mix(_S35, 0.0f, 0.20000000298023224f);
var p_3 : vec2<f32> = vec2<f32>(sin(3697.19970703125f), cos(3697.19970703125f));
var res_3 : vec2<f32> = wavedx_0(_S36, p_3, 1.64303183555603027f, globalParams_0.time_0 * 6.12521600723266602f + _S30);
var _S38 : vec2<f32> = _S36 + p_3 * vec2<f32>(res_3.y) * vec2<f32>(_S37) * _S31;
var _S39 : f32 = mix(_S37, 0.0f, 0.20000000298023224f);
var p_4 : vec2<f32> = vec2<f32>(sin(4929.599609375f), cos(4929.599609375f));
var res_4 : vec2<f32> = wavedx_0(_S38, p_4, 1.93877744674682617f, globalParams_0.time_0 * 6.55398130416870117f + _S30);
var _S40 : vec2<f32> = _S38 + p_4 * vec2<f32>(res_4.y) * vec2<f32>(_S39) * _S31;
var _S41 : f32 = mix(_S39, 0.0f, 0.20000000298023224f);
var p_5 : vec2<f32> = vec2<f32>(sin(6161.99951171875f), cos(6161.99951171875f));
var res_5 : vec2<f32> = wavedx_0(_S40, p_5, 2.28775739669799805f, globalParams_0.time_0 * 7.01276016235351562f + _S30);
var _S42 : vec2<f32> = _S40 + p_5 * vec2<f32>(res_5.y) * vec2<f32>(_S41) * _S31;
var _S43 : f32 = mix(_S41, 0.0f, 0.20000000298023224f);
var p_6 : vec2<f32> = vec2<f32>(sin(7394.3994140625f), cos(7394.3994140625f));
var res_6 : vec2<f32> = wavedx_0(_S42, p_6, 2.69955348968505859f, globalParams_0.time_0 * 7.50365352630615234f + _S30);
var _S44 : vec2<f32> = _S42 + p_6 * vec2<f32>(res_6.y) * vec2<f32>(_S43) * _S31;
var _S45 : f32 = mix(_S43, 0.0f, 0.20000000298023224f);
var p_7 : vec2<f32> = vec2<f32>(sin(8626.798828125f), cos(8626.798828125f));
var res_7 : vec2<f32> = wavedx_0(_S44, p_7, 3.18547296524047852f, globalParams_0.time_0 * 8.02890968322753906f + _S30);
var _S46 : vec2<f32> = _S44 + p_7 * vec2<f32>(res_7.y) * vec2<f32>(_S45) * _S31;
var _S47 : f32 = mix(_S45, 0.0f, 0.20000000298023224f);
var p_8 : vec2<f32> = vec2<f32>(sin(9859.19921875f), cos(9859.19921875f));
var res_8 : vec2<f32> = wavedx_0(_S46, p_8, 3.75885796546936035f, globalParams_0.time_0 * 8.59093379974365234f + _S30);
var _S48 : vec2<f32> = _S46 + p_8 * vec2<f32>(res_8.y) * vec2<f32>(_S47) * _S31;
var _S49 : f32 = mix(_S47, 0.0f, 0.20000000298023224f);
var p_9 : vec2<f32> = vec2<f32>(sin(11091.599609375f), cos(11091.599609375f));
var res_9 : vec2<f32> = wavedx_0(_S48, p_9, 4.43545198440551758f, globalParams_0.time_0 * 9.19229984283447266f + _S30);
var _S50 : vec2<f32> = _S48 + p_9 * vec2<f32>(res_9.y) * vec2<f32>(_S49) * _S31;
var _S51 : f32 = mix(_S49, 0.0f, 0.20000000298023224f);
var p_10 : vec2<f32> = vec2<f32>(sin(12324.0f), cos(12324.0f));
var res_10 : vec2<f32> = wavedx_0(_S50, p_10, 5.23383331298828125f, globalParams_0.time_0 * 9.83576107025146484f + _S30);
var _S52 : f32 = mix(_S51, 0.0f, 0.20000000298023224f);
return (res_0.x + res_1.x * _S33 + res_2.x * _S35 + res_3.x * _S37 + res_4.x * _S39 + res_5.x * _S41 + res_6.x * _S43 + res_7.x * _S45 + res_8.x * _S47 + res_9.x * _S49 + res_10.x * _S51 + wavedx_0(_S50 + p_10 * vec2<f32>(res_10.y) * vec2<f32>(_S51) * _S31, vec2<f32>(sin(13556.400390625f), cos(13556.400390625f)), 6.17592287063598633f, globalParams_0.time_0 * 10.52426528930664062f + _S30).x * _S52) / (1.0f + _S33 + _S35 + _S37 + _S39 + _S41 + _S43 + _S45 + _S47 + _S49 + _S51 + _S52);
}
fn raymarchwater_0( camera_0 : vec3<f32>, start_0 : vec3<f32>, end_0 : vec3<f32>, depth_0 : f32) -> f32
{
var _S53 : vec3<f32> = normalize(end_0 - start_0);
var i_0 : i32 = i32(0);
var pos_0 : vec3<f32> = start_0;
for(;;)
{
if(i_0 < i32(64))
{
}
else
{
break;
}
var height_0 : f32 = getwaves_0(pos_0.xz) * depth_0 - depth_0;
var _S54 : f32 = pos_0.y;
if((height_0 + 0.00999999977648258f) > _S54)
{
return distance(pos_0, camera_0);
}
var pos_1 : vec3<f32> = pos_0 + _S53 * vec3<f32>((_S54 - height_0));
i_0 = i_0 + i32(1);
pos_0 = pos_1;
}
return distance(start_0, camera_0);
}
struct s_bwd_prop_getwaves_Intermediates_0
{
_S55 : vec2<f32>,
_S56 : vec2<f32>,
_S57 : vec2<f32>,
_S58 : vec2<f32>,
_S59 : vec2<f32>,
_S60 : vec2<f32>,
_S61 : vec2<f32>,
_S62 : vec2<f32>,
_S63 : vec2<f32>,
_S64 : vec2<f32>,
_S65 : vec2<f32>,
_S66 : vec2<f32>,
_S67 : vec2<f32>,
_S68 : vec2<f32>,
_S69 : vec2<f32>,
_S70 : vec2<f32>,
_S71 : vec2<f32>,
_S72 : vec2<f32>,
_S73 : vec2<f32>,
_S74 : vec2<f32>,
_S75 : vec2<f32>,
_S76 : vec2<f32>,
_S77 : vec2<f32>,
_S78 : vec2<f32>,
_S79 : vec2<f32>,
_S80 : vec2<f32>,
_S81 : vec2<f32>,
_S82 : vec2<f32>,
_S83 : vec2<f32>,
_S84 : vec2<f32>,
_S85 : vec2<f32>,
_S86 : vec2<f32>,
_S87 : vec2<f32>,
_S88 : vec2<f32>,
_S89 : vec2<f32>,
_S90 : vec2<f32>,
};
fn s_primal_ctx_sin_0( _S91 : f32) -> f32
{
return sin(_S91);
}
fn s_primal_ctx_cos_0( _S92 : f32) -> f32
{
return cos(_S92);
}
fn s_primal_ctx_dot_0( _S93 : vec2<f32>, _S94 : vec2<f32>) -> f32
{
return dot(_S93, _S94);
}
fn s_primal_ctx_exp_0( _S95 : f32) -> f32
{
return exp(_S95);
}
fn s_primal_ctx_wavedx_0( dpposition_0 : vec2<f32>, dpdirection_0 : vec2<f32>, dpfrequency_0 : f32, dptimeshift_0 : f32) -> vec2<f32>
{
var x_1 : f32 = s_primal_ctx_dot_0(dpdirection_0, dpposition_0) * dpfrequency_0 + dptimeshift_0;
var _S96 : f32 = s_primal_ctx_exp_0(s_primal_ctx_sin_0(x_1) - 1.0f);
return vec2<f32>(_S96, - (_S96 * s_primal_ctx_cos_0(x_1)));
}
fn s_primal_ctx_lerp_0( _S97 : f32, _S98 : f32, _S99 : f32) -> f32
{
return mix(_S97, _S98, _S99);
}
fn s_primal_ctx_getwaves_0( dpposition_1 : vec2<f32>, _s_diff_ctx_0 : ptr<function, s_bwd_prop_getwaves_Intermediates_0>) -> f32
{
var _S100 : vec2<f32> = vec2<f32>(0.0f);
(*_s_diff_ctx_0)._S55 = _S100;
(*_s_diff_ctx_0)._S56 = _S100;
(*_s_diff_ctx_0)._S57 = _S100;
(*_s_diff_ctx_0)._S58 = _S100;
(*_s_diff_ctx_0)._S59 = _S100;
(*_s_diff_ctx_0)._S60 = _S100;
(*_s_diff_ctx_0)._S61 = _S100;
(*_s_diff_ctx_0)._S62 = _S100;
(*_s_diff_ctx_0)._S63 = _S100;
(*_s_diff_ctx_0)._S64 = _S100;
(*_s_diff_ctx_0)._S65 = _S100;
(*_s_diff_ctx_0)._S66 = _S100;
(*_s_diff_ctx_0)._S67 = _S100;
(*_s_diff_ctx_0)._S68 = _S100;
(*_s_diff_ctx_0)._S69 = _S100;
(*_s_diff_ctx_0)._S70 = _S100;
(*_s_diff_ctx_0)._S71 = _S100;
(*_s_diff_ctx_0)._S72 = _S100;
(*_s_diff_ctx_0)._S73 = _S100;
(*_s_diff_ctx_0)._S74 = _S100;
(*_s_diff_ctx_0)._S75 = _S100;
(*_s_diff_ctx_0)._S76 = _S100;
(*_s_diff_ctx_0)._S77 = _S100;
(*_s_diff_ctx_0)._S78 = _S100;
(*_s_diff_ctx_0)._S79 = _S100;
(*_s_diff_ctx_0)._S80 = _S100;
(*_s_diff_ctx_0)._S81 = _S100;
(*_s_diff_ctx_0)._S82 = _S100;
(*_s_diff_ctx_0)._S83 = _S100;
(*_s_diff_ctx_0)._S84 = _S100;
(*_s_diff_ctx_0)._S85 = _S100;
(*_s_diff_ctx_0)._S86 = _S100;
(*_s_diff_ctx_0)._S87 = _S100;
(*_s_diff_ctx_0)._S88 = _S100;
(*_s_diff_ctx_0)._S89 = _S100;
(*_s_diff_ctx_0)._S90 = _S100;
(*_s_diff_ctx_0)._S55 = _S100;
(*_s_diff_ctx_0)._S56 = _S100;
(*_s_diff_ctx_0)._S57 = _S100;
(*_s_diff_ctx_0)._S58 = _S100;
(*_s_diff_ctx_0)._S59 = _S100;
(*_s_diff_ctx_0)._S60 = _S100;
(*_s_diff_ctx_0)._S61 = _S100;
(*_s_diff_ctx_0)._S62 = _S100;
(*_s_diff_ctx_0)._S63 = _S100;
(*_s_diff_ctx_0)._S64 = _S100;
(*_s_diff_ctx_0)._S65 = _S100;
(*_s_diff_ctx_0)._S66 = _S100;
(*_s_diff_ctx_0)._S67 = _S100;
(*_s_diff_ctx_0)._S68 = _S100;
(*_s_diff_ctx_0)._S69 = _S100;
(*_s_diff_ctx_0)._S70 = _S100;
(*_s_diff_ctx_0)._S71 = _S100;
(*_s_diff_ctx_0)._S72 = _S100;
(*_s_diff_ctx_0)._S73 = _S100;
(*_s_diff_ctx_0)._S74 = _S100;
(*_s_diff_ctx_0)._S75 = _S100;
(*_s_diff_ctx_0)._S76 = _S100;
(*_s_diff_ctx_0)._S77 = _S100;
(*_s_diff_ctx_0)._S78 = _S100;
(*_s_diff_ctx_0)._S79 = _S100;
(*_s_diff_ctx_0)._S80 = _S100;
(*_s_diff_ctx_0)._S81 = _S100;
(*_s_diff_ctx_0)._S82 = _S100;
(*_s_diff_ctx_0)._S83 = _S100;
(*_s_diff_ctx_0)._S84 = _S100;
(*_s_diff_ctx_0)._S85 = _S100;
(*_s_diff_ctx_0)._S86 = _S100;
(*_s_diff_ctx_0)._S87 = _S100;
(*_s_diff_ctx_0)._S88 = _S100;
(*_s_diff_ctx_0)._S89 = _S100;
(*_s_diff_ctx_0)._S90 = _S100;
var _S101 : f32 = length(dpposition_1) * 0.10000000149011612f;
var p_11 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(0.0f), s_primal_ctx_cos_0(0.0f));
var _S102 : f32 = globalParams_0.time_0;
var _S103 : vec2<f32> = s_primal_ctx_wavedx_0(dpposition_1, p_11, 1.0f, globalParams_0.time_0 * 5.0f + _S101);
(*_s_diff_ctx_0)._S55 = _S103;
var _S104 : vec2<f32> = vec2<f32>(0.37999999523162842f);
var _S105 : vec2<f32> = dpposition_1 + p_11 * vec2<f32>(_S103.y) * _S104;
var _S106 : f32 = _S103.x;
var _S107 : f32 = s_primal_ctx_lerp_0(1.0f, 0.0f, 0.20000000298023224f);
var p_12 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(1232.39990234375f), s_primal_ctx_cos_0(1232.39990234375f));
var _S108 : vec2<f32> = s_primal_ctx_wavedx_0(_S105, p_12, 1.1799999475479126f, _S102 * 5.35000038146972656f + _S101);
(*_s_diff_ctx_0)._S56 = _S108;
var _S109 : vec2<f32> = _S105 + p_12 * vec2<f32>(_S108.y) * vec2<f32>(_S107) * _S104;
var sumOfValues_0 : f32 = _S106 + _S108.x * _S107;
var sumOfWeights_0 : f32 = 1.0f + _S107;
var _S110 : f32 = s_primal_ctx_lerp_0(_S107, 0.0f, 0.20000000298023224f);
var p_13 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(2464.7998046875f), s_primal_ctx_cos_0(2464.7998046875f));
var _S111 : vec2<f32> = s_primal_ctx_wavedx_0(_S109, p_13, 1.39239990711212158f, _S102 * 5.72450065612792969f + _S101);
(*_s_diff_ctx_0)._S57 = _S111;
var _S112 : vec2<f32> = _S109 + p_13 * vec2<f32>(_S111.y) * vec2<f32>(_S110) * _S104;
var sumOfValues_1 : f32 = sumOfValues_0 + _S111.x * _S110;
var sumOfWeights_1 : f32 = sumOfWeights_0 + _S110;
var _S113 : f32 = s_primal_ctx_lerp_0(_S110, 0.0f, 0.20000000298023224f);
var p_14 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(3697.19970703125f), s_primal_ctx_cos_0(3697.19970703125f));
var _S114 : vec2<f32> = s_primal_ctx_wavedx_0(_S112, p_14, 1.64303183555603027f, _S102 * 6.12521600723266602f + _S101);
(*_s_diff_ctx_0)._S58 = _S114;
var _S115 : vec2<f32> = _S112 + p_14 * vec2<f32>(_S114.y) * vec2<f32>(_S113) * _S104;
var sumOfValues_2 : f32 = sumOfValues_1 + _S114.x * _S113;
var sumOfWeights_2 : f32 = sumOfWeights_1 + _S113;
var _S116 : f32 = s_primal_ctx_lerp_0(_S113, 0.0f, 0.20000000298023224f);
var p_15 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(4929.599609375f), s_primal_ctx_cos_0(4929.599609375f));
var _S117 : vec2<f32> = s_primal_ctx_wavedx_0(_S115, p_15, 1.93877744674682617f, _S102 * 6.55398130416870117f + _S101);
(*_s_diff_ctx_0)._S59 = _S117;
var _S118 : vec2<f32> = _S115 + p_15 * vec2<f32>(_S117.y) * vec2<f32>(_S116) * _S104;
var sumOfValues_3 : f32 = sumOfValues_2 + _S117.x * _S116;
var sumOfWeights_3 : f32 = sumOfWeights_2 + _S116;
var _S119 : f32 = s_primal_ctx_lerp_0(_S116, 0.0f, 0.20000000298023224f);
var p_16 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(6161.99951171875f), s_primal_ctx_cos_0(6161.99951171875f));
var _S120 : vec2<f32> = s_primal_ctx_wavedx_0(_S118, p_16, 2.28775739669799805f, _S102 * 7.01276016235351562f + _S101);
(*_s_diff_ctx_0)._S60 = _S120;
var _S121 : vec2<f32> = _S118 + p_16 * vec2<f32>(_S120.y) * vec2<f32>(_S119) * _S104;
var sumOfValues_4 : f32 = sumOfValues_3 + _S120.x * _S119;
var sumOfWeights_4 : f32 = sumOfWeights_3 + _S119;
var _S122 : f32 = s_primal_ctx_lerp_0(_S119, 0.0f, 0.20000000298023224f);
var p_17 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(7394.3994140625f), s_primal_ctx_cos_0(7394.3994140625f));
var _S123 : vec2<f32> = s_primal_ctx_wavedx_0(_S121, p_17, 2.69955348968505859f, _S102 * 7.50365352630615234f + _S101);
(*_s_diff_ctx_0)._S61 = _S123;
var _S124 : vec2<f32> = _S121 + p_17 * vec2<f32>(_S123.y) * vec2<f32>(_S122) * _S104;
var sumOfValues_5 : f32 = sumOfValues_4 + _S123.x * _S122;
var sumOfWeights_5 : f32 = sumOfWeights_4 + _S122;
var _S125 : f32 = s_primal_ctx_lerp_0(_S122, 0.0f, 0.20000000298023224f);
var p_18 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(8626.798828125f), s_primal_ctx_cos_0(8626.798828125f));
var _S126 : vec2<f32> = s_primal_ctx_wavedx_0(_S124, p_18, 3.18547296524047852f, _S102 * 8.02890968322753906f + _S101);
(*_s_diff_ctx_0)._S62 = _S126;
var _S127 : vec2<f32> = _S124 + p_18 * vec2<f32>(_S126.y) * vec2<f32>(_S125) * _S104;
var sumOfValues_6 : f32 = sumOfValues_5 + _S126.x * _S125;
var sumOfWeights_6 : f32 = sumOfWeights_5 + _S125;
var _S128 : f32 = s_primal_ctx_lerp_0(_S125, 0.0f, 0.20000000298023224f);
var p_19 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(9859.19921875f), s_primal_ctx_cos_0(9859.19921875f));
var _S129 : vec2<f32> = s_primal_ctx_wavedx_0(_S127, p_19, 3.75885796546936035f, _S102 * 8.59093379974365234f + _S101);
(*_s_diff_ctx_0)._S63 = _S129;
var _S130 : vec2<f32> = _S127 + p_19 * vec2<f32>(_S129.y) * vec2<f32>(_S128) * _S104;
var sumOfValues_7 : f32 = sumOfValues_6 + _S129.x * _S128;
var sumOfWeights_7 : f32 = sumOfWeights_6 + _S128;
var _S131 : f32 = s_primal_ctx_lerp_0(_S128, 0.0f, 0.20000000298023224f);
var p_20 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(11091.599609375f), s_primal_ctx_cos_0(11091.599609375f));
var _S132 : vec2<f32> = s_primal_ctx_wavedx_0(_S130, p_20, 4.43545198440551758f, _S102 * 9.19229984283447266f + _S101);
(*_s_diff_ctx_0)._S64 = _S132;
var _S133 : vec2<f32> = _S130 + p_20 * vec2<f32>(_S132.y) * vec2<f32>(_S131) * _S104;
var sumOfValues_8 : f32 = sumOfValues_7 + _S132.x * _S131;
var sumOfWeights_8 : f32 = sumOfWeights_7 + _S131;
var _S134 : f32 = s_primal_ctx_lerp_0(_S131, 0.0f, 0.20000000298023224f);
var p_21 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(12324.0f), s_primal_ctx_cos_0(12324.0f));
var _S135 : vec2<f32> = s_primal_ctx_wavedx_0(_S133, p_21, 5.23383331298828125f, _S102 * 9.83576107025146484f + _S101);
(*_s_diff_ctx_0)._S65 = _S135;
var _S136 : vec2<f32> = _S133 + p_21 * vec2<f32>(_S135.y) * vec2<f32>(_S134) * _S104;
var sumOfValues_9 : f32 = sumOfValues_8 + _S135.x * _S134;
var sumOfWeights_9 : f32 = sumOfWeights_8 + _S134;
var _S137 : f32 = s_primal_ctx_lerp_0(_S134, 0.0f, 0.20000000298023224f);
var p_22 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(13556.400390625f), s_primal_ctx_cos_0(13556.400390625f));
var _S138 : vec2<f32> = s_primal_ctx_wavedx_0(_S136, p_22, 6.17592287063598633f, _S102 * 10.52426528930664062f + _S101);
(*_s_diff_ctx_0)._S66 = _S138;
var _S139 : vec2<f32> = _S136 + p_22 * vec2<f32>(_S138.y) * vec2<f32>(_S137) * _S104;
var sumOfValues_10 : f32 = sumOfValues_9 + _S138.x * _S137;
var sumOfWeights_10 : f32 = sumOfWeights_9 + _S137;
var _S140 : f32 = s_primal_ctx_lerp_0(_S137, 0.0f, 0.20000000298023224f);
var p_23 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(14788.80078125f), s_primal_ctx_cos_0(14788.80078125f));
var _S141 : vec2<f32> = s_primal_ctx_wavedx_0(_S139, p_23, 7.28758859634399414f, _S102 * 11.26096439361572266f + _S101);
(*_s_diff_ctx_0)._S67 = _S141;
var _S142 : vec2<f32> = _S139 + p_23 * vec2<f32>(_S141.y) * vec2<f32>(_S140) * _S104;
var sumOfValues_11 : f32 = sumOfValues_10 + _S141.x * _S140;
var sumOfWeights_11 : f32 = sumOfWeights_10 + _S140;
var _S143 : f32 = s_primal_ctx_lerp_0(_S140, 0.0f, 0.20000000298023224f);
var p_24 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(16021.201171875f), s_primal_ctx_cos_0(16021.201171875f));
var _S144 : vec2<f32> = s_primal_ctx_wavedx_0(_S142, p_24, 8.59935379028320312f, _S102 * 12.04923248291015625f + _S101);
(*_s_diff_ctx_0)._S68 = _S144;
var _S145 : vec2<f32> = _S142 + p_24 * vec2<f32>(_S144.y) * vec2<f32>(_S143) * _S104;
var sumOfValues_12 : f32 = sumOfValues_11 + _S144.x * _S143;
var sumOfWeights_12 : f32 = sumOfWeights_11 + _S143;
var _S146 : f32 = s_primal_ctx_lerp_0(_S143, 0.0f, 0.20000000298023224f);
var p_25 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(17253.6015625f), s_primal_ctx_cos_0(17253.6015625f));
var _S147 : vec2<f32> = s_primal_ctx_wavedx_0(_S145, p_25, 10.14723682403564453f, _S102 * 12.89267921447753906f + _S101);
(*_s_diff_ctx_0)._S69 = _S147;
var _S148 : vec2<f32> = _S145 + p_25 * vec2<f32>(_S147.y) * vec2<f32>(_S146) * _S104;
var sumOfValues_13 : f32 = sumOfValues_12 + _S147.x * _S146;
var sumOfWeights_13 : f32 = sumOfWeights_12 + _S146;
var _S149 : f32 = s_primal_ctx_lerp_0(_S146, 0.0f, 0.20000000298023224f);
var p_26 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(18486.001953125f), s_primal_ctx_cos_0(18486.001953125f));
var _S150 : vec2<f32> = s_primal_ctx_wavedx_0(_S148, p_26, 11.97373867034912109f, _S102 * 13.79516696929931641f + _S101);
(*_s_diff_ctx_0)._S70 = _S150;
var _S151 : vec2<f32> = _S148 + p_26 * vec2<f32>(_S150.y) * vec2<f32>(_S149) * _S104;
var sumOfValues_14 : f32 = sumOfValues_13 + _S150.x * _S149;
var sumOfWeights_14 : f32 = sumOfWeights_13 + _S149;
var _S152 : f32 = s_primal_ctx_lerp_0(_S149, 0.0f, 0.20000000298023224f);
var p_27 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(19718.40234375f), s_primal_ctx_cos_0(19718.40234375f));
var _S153 : vec2<f32> = s_primal_ctx_wavedx_0(_S151, p_27, 14.12901115417480469f, _S102 * 14.76082897186279297f + _S101);
(*_s_diff_ctx_0)._S71 = _S153;
var _S154 : vec2<f32> = _S151 + p_27 * vec2<f32>(_S153.y) * vec2<f32>(_S152) * _S104;
var sumOfValues_15 : f32 = sumOfValues_14 + _S153.x * _S152;
var sumOfWeights_15 : f32 = sumOfWeights_14 + _S152;
var _S155 : f32 = s_primal_ctx_lerp_0(_S152, 0.0f, 0.20000000298023224f);
var p_28 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(20950.802734375f), s_primal_ctx_cos_0(20950.802734375f));
var _S156 : vec2<f32> = s_primal_ctx_wavedx_0(_S154, p_28, 16.67223167419433594f, _S102 * 15.79408740997314453f + _S101);
(*_s_diff_ctx_0)._S72 = _S156;
var _S157 : vec2<f32> = _S154 + p_28 * vec2<f32>(_S156.y) * vec2<f32>(_S155) * _S104;
var sumOfValues_16 : f32 = sumOfValues_15 + _S156.x * _S155;
var sumOfWeights_16 : f32 = sumOfWeights_15 + _S155;
var _S158 : f32 = s_primal_ctx_lerp_0(_S155, 0.0f, 0.20000000298023224f);
var p_29 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(22183.203125f), s_primal_ctx_cos_0(22183.203125f));
var _S159 : vec2<f32> = s_primal_ctx_wavedx_0(_S157, p_29, 19.6732330322265625f, _S102 * 16.8996734619140625f + _S101);
(*_s_diff_ctx_0)._S73 = _S159;
var _S160 : vec2<f32> = _S157 + p_29 * vec2<f32>(_S159.y) * vec2<f32>(_S158) * _S104;
var sumOfValues_17 : f32 = sumOfValues_16 + _S159.x * _S158;
var sumOfWeights_17 : f32 = sumOfWeights_16 + _S158;
var _S161 : f32 = s_primal_ctx_lerp_0(_S158, 0.0f, 0.20000000298023224f);
var p_30 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(23415.603515625f), s_primal_ctx_cos_0(23415.603515625f));
var _S162 : vec2<f32> = s_primal_ctx_wavedx_0(_S160, p_30, 23.21441459655761719f, _S102 * 18.08265113830566406f + _S101);
(*_s_diff_ctx_0)._S74 = _S162;
var _S163 : vec2<f32> = _S160 + p_30 * vec2<f32>(_S162.y) * vec2<f32>(_S161) * _S104;
var sumOfValues_18 : f32 = sumOfValues_17 + _S162.x * _S161;
var sumOfWeights_18 : f32 = sumOfWeights_17 + _S161;
var _S164 : f32 = s_primal_ctx_lerp_0(_S161, 0.0f, 0.20000000298023224f);
var p_31 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(24648.00390625f), s_primal_ctx_cos_0(24648.00390625f));
var _S165 : vec2<f32> = s_primal_ctx_wavedx_0(_S163, p_31, 27.39300727844238281f, _S102 * 19.34843826293945312f + _S101);
(*_s_diff_ctx_0)._S75 = _S165;
var _S166 : vec2<f32> = _S163 + p_31 * vec2<f32>(_S165.y) * vec2<f32>(_S164) * _S104;
var sumOfValues_19 : f32 = sumOfValues_18 + _S165.x * _S164;
var sumOfWeights_19 : f32 = sumOfWeights_18 + _S164;
var _S167 : f32 = s_primal_ctx_lerp_0(_S164, 0.0f, 0.20000000298023224f);
var p_32 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(25880.404296875f), s_primal_ctx_cos_0(25880.404296875f));
var _S168 : vec2<f32> = s_primal_ctx_wavedx_0(_S166, p_32, 32.3237457275390625f, _S102 * 20.70282936096191406f + _S101);
(*_s_diff_ctx_0)._S76 = _S168;
var _S169 : vec2<f32> = _S166 + p_32 * vec2<f32>(_S168.y) * vec2<f32>(_S167) * _S104;
var sumOfValues_20 : f32 = sumOfValues_19 + _S168.x * _S167;
var sumOfWeights_20 : f32 = sumOfWeights_19 + _S167;
var _S170 : f32 = s_primal_ctx_lerp_0(_S167, 0.0f, 0.20000000298023224f);
var p_33 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(27112.8046875f), s_primal_ctx_cos_0(27112.8046875f));
var _S171 : vec2<f32> = s_primal_ctx_wavedx_0(_S169, p_33, 38.14201736450195312f, _S102 * 22.15202903747558594f + _S101);
(*_s_diff_ctx_0)._S77 = _S171;
var _S172 : vec2<f32> = _S169 + p_33 * vec2<f32>(_S171.y) * vec2<f32>(_S170) * _S104;
var sumOfValues_21 : f32 = sumOfValues_20 + _S171.x * _S170;
var sumOfWeights_21 : f32 = sumOfWeights_20 + _S170;
var _S173 : f32 = s_primal_ctx_lerp_0(_S170, 0.0f, 0.20000000298023224f);
var p_34 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(28345.205078125f), s_primal_ctx_cos_0(28345.205078125f));
var _S174 : vec2<f32> = s_primal_ctx_wavedx_0(_S172, p_34, 45.00757980346679688f, _S102 * 23.70267295837402344f + _S101);
(*_s_diff_ctx_0)._S78 = _S174;
var _S175 : vec2<f32> = _S172 + p_34 * vec2<f32>(_S174.y) * vec2<f32>(_S173) * _S104;
var sumOfValues_22 : f32 = sumOfValues_21 + _S174.x * _S173;
var sumOfWeights_22 : f32 = sumOfWeights_21 + _S173;
var _S176 : f32 = s_primal_ctx_lerp_0(_S173, 0.0f, 0.20000000298023224f);
var p_35 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(29577.60546875f), s_primal_ctx_cos_0(29577.60546875f));
var _S177 : vec2<f32> = s_primal_ctx_wavedx_0(_S175, p_35, 53.10894012451171875f, _S102 * 25.3618621826171875f + _S101);
(*_s_diff_ctx_0)._S79 = _S177;
var _S178 : vec2<f32> = _S175 + p_35 * vec2<f32>(_S177.y) * vec2<f32>(_S176) * _S104;
var sumOfValues_23 : f32 = sumOfValues_22 + _S177.x * _S176;
var sumOfWeights_23 : f32 = sumOfWeights_22 + _S176;
var _S179 : f32 = s_primal_ctx_lerp_0(_S176, 0.0f, 0.20000000298023224f);
var p_36 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(30810.005859375f), s_primal_ctx_cos_0(30810.005859375f));
var _S180 : vec2<f32> = s_primal_ctx_wavedx_0(_S178, p_36, 62.66854476928710938f, _S102 * 27.13719367980957031f + _S101);
(*_s_diff_ctx_0)._S80 = _S180;
var _S181 : vec2<f32> = _S178 + p_36 * vec2<f32>(_S180.y) * vec2<f32>(_S179) * _S104;
var sumOfValues_24 : f32 = sumOfValues_23 + _S180.x * _S179;
var sumOfWeights_24 : f32 = sumOfWeights_23 + _S179;
var _S182 : f32 = s_primal_ctx_lerp_0(_S179, 0.0f, 0.20000000298023224f);
var p_37 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(32042.40625f), s_primal_ctx_cos_0(32042.40625f));
var _S183 : vec2<f32> = s_primal_ctx_wavedx_0(_S181, p_37, 73.948883056640625f, _S102 * 29.03679847717285156f + _S101);
(*_s_diff_ctx_0)._S81 = _S183;
var _S184 : vec2<f32> = _S181 + p_37 * vec2<f32>(_S183.y) * vec2<f32>(_S182) * _S104;
var sumOfValues_25 : f32 = sumOfValues_24 + _S183.x * _S182;
var sumOfWeights_25 : f32 = sumOfWeights_24 + _S182;
var _S185 : f32 = s_primal_ctx_lerp_0(_S182, 0.0f, 0.20000000298023224f);
var p_38 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(33274.8046875f), s_primal_ctx_cos_0(33274.8046875f));
var _S186 : vec2<f32> = s_primal_ctx_wavedx_0(_S184, p_38, 87.25968170166015625f, _S102 * 31.06937599182128906f + _S101);
(*_s_diff_ctx_0)._S82 = _S186;
var _S187 : vec2<f32> = _S184 + p_38 * vec2<f32>(_S186.y) * vec2<f32>(_S185) * _S104;
var sumOfValues_26 : f32 = sumOfValues_25 + _S186.x * _S185;
var sumOfWeights_26 : f32 = sumOfWeights_25 + _S185;
var _S188 : f32 = s_primal_ctx_lerp_0(_S185, 0.0f, 0.20000000298023224f);
var p_39 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(34507.203125f), s_primal_ctx_cos_0(34507.203125f));
var _S189 : vec2<f32> = s_primal_ctx_wavedx_0(_S187, p_39, 102.96642303466796875f, _S102 * 33.244232177734375f + _S101);
(*_s_diff_ctx_0)._S83 = _S189;
var _S190 : vec2<f32> = _S187 + p_39 * vec2<f32>(_S189.y) * vec2<f32>(_S188) * _S104;
var sumOfValues_27 : f32 = sumOfValues_26 + _S189.x * _S188;
var sumOfWeights_27 : f32 = sumOfWeights_26 + _S188;
var _S191 : f32 = s_primal_ctx_lerp_0(_S188, 0.0f, 0.20000000298023224f);
var p_40 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(35739.6015625f), s_primal_ctx_cos_0(35739.6015625f));
var _S192 : vec2<f32> = s_primal_ctx_wavedx_0(_S190, p_40, 121.50037384033203125f, _S102 * 35.57133102416992188f + _S101);
(*_s_diff_ctx_0)._S84 = _S192;
var _S193 : vec2<f32> = _S190 + p_40 * vec2<f32>(_S192.y) * vec2<f32>(_S191) * _S104;
var sumOfValues_28 : f32 = sumOfValues_27 + _S192.x * _S191;
var sumOfWeights_28 : f32 = sumOfWeights_27 + _S191;
var _S194 : f32 = s_primal_ctx_lerp_0(_S191, 0.0f, 0.20000000298023224f);
var p_41 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(36972.0f), s_primal_ctx_cos_0(36972.0f));
var _S195 : vec2<f32> = s_primal_ctx_wavedx_0(_S193, p_41, 143.3704376220703125f, _S102 * 38.0613250732421875f + _S101);
(*_s_diff_ctx_0)._S85 = _S195;
var _S196 : vec2<f32> = _S193 + p_41 * vec2<f32>(_S195.y) * vec2<f32>(_S194) * _S104;
var sumOfValues_29 : f32 = sumOfValues_28 + _S195.x * _S194;
var sumOfWeights_29 : f32 = sumOfWeights_28 + _S194;
var _S197 : f32 = s_primal_ctx_lerp_0(_S194, 0.0f, 0.20000000298023224f);
var p_42 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(38204.3984375f), s_primal_ctx_cos_0(38204.3984375f));
var _S198 : vec2<f32> = s_primal_ctx_wavedx_0(_S196, p_42, 169.1771087646484375f, _S102 * 40.72562026977539062f + _S101);
(*_s_diff_ctx_0)._S86 = _S198;
var _S199 : vec2<f32> = _S196 + p_42 * vec2<f32>(_S198.y) * vec2<f32>(_S197) * _S104;
var sumOfValues_30 : f32 = sumOfValues_29 + _S198.x * _S197;
var sumOfWeights_30 : f32 = sumOfWeights_29 + _S197;
var _S200 : f32 = s_primal_ctx_lerp_0(_S197, 0.0f, 0.20000000298023224f);
var p_43 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(39436.796875f), s_primal_ctx_cos_0(39436.796875f));
var _S201 : vec2<f32> = s_primal_ctx_wavedx_0(_S199, p_43, 199.6289825439453125f, _S102 * 43.576416015625f + _S101);
(*_s_diff_ctx_0)._S87 = _S201;
var _S202 : vec2<f32> = _S199 + p_43 * vec2<f32>(_S201.y) * vec2<f32>(_S200) * _S104;
var sumOfValues_31 : f32 = sumOfValues_30 + _S201.x * _S200;
var sumOfWeights_31 : f32 = sumOfWeights_30 + _S200;
var _S203 : f32 = s_primal_ctx_lerp_0(_S200, 0.0f, 0.20000000298023224f);
var p_44 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(40669.1953125f), s_primal_ctx_cos_0(40669.1953125f));
var _S204 : vec2<f32> = s_primal_ctx_wavedx_0(_S202, p_44, 235.56219482421875f, _S102 * 46.62676620483398438f + _S101);
(*_s_diff_ctx_0)._S88 = _S204;
var _S205 : vec2<f32> = _S202 + p_44 * vec2<f32>(_S204.y) * vec2<f32>(_S203) * _S104;
var sumOfValues_32 : f32 = sumOfValues_31 + _S204.x * _S203;
var sumOfWeights_32 : f32 = sumOfWeights_31 + _S203;
var _S206 : f32 = s_primal_ctx_lerp_0(_S203, 0.0f, 0.20000000298023224f);
var p_45 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(41901.59375f), s_primal_ctx_cos_0(41901.59375f));
var _S207 : vec2<f32> = s_primal_ctx_wavedx_0(_S205, p_45, 277.96337890625f, _S102 * 49.89064407348632812f + _S101);
(*_s_diff_ctx_0)._S89 = _S207;
var _S208 : vec2<f32> = _S205 + p_45 * vec2<f32>(_S207.y) * vec2<f32>(_S206) * _S104;
var sumOfValues_33 : f32 = sumOfValues_32 + _S207.x * _S206;
var sumOfWeights_33 : f32 = sumOfWeights_32 + _S206;
var _S209 : f32 = s_primal_ctx_lerp_0(_S206, 0.0f, 0.20000000298023224f);
var p_46 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(43133.9921875f), s_primal_ctx_cos_0(43133.9921875f));
var _S210 : vec2<f32> = s_primal_ctx_wavedx_0(_S208, p_46, 327.99676513671875f, _S102 * 53.38299179077148438f + _S101);
(*_s_diff_ctx_0)._S90 = _S210;
var _S211 : f32 = s_primal_ctx_lerp_0(_S209, 0.0f, 0.20000000298023224f);
return (sumOfValues_33 + _S210.x * _S209 + s_primal_ctx_wavedx_0(_S208 + p_46 * vec2<f32>(_S210.y) * vec2<f32>(_S209) * _S104, vec2<f32>(s_primal_ctx_sin_0(44366.390625f), s_primal_ctx_cos_0(44366.390625f)), 387.036163330078125f, _S102 * 57.11980438232421875f + _S101).x * _S211) / (sumOfWeights_33 + _S209 + _S211);
}
fn s_bwd_prop_cos_0( _S212 : ptr<function, DiffPair_float_0>, _S213 : f32)
{
_d_cos_0(&((*_S212)), _S213);
return;
}
fn s_bwd_prop_exp_0( _S214 : ptr<function, DiffPair_float_0>, _S215 : f32)
{
_d_exp_0(&((*_S214)), _S215);
return;
}
fn s_bwd_prop_sin_0( _S216 : ptr<function, DiffPair_float_0>, _S217 : f32)
{
_d_sin_0(&((*_S216)), _S217);
return;
}
fn s_bwd_prop_dot_0( _S218 : ptr<function, DiffPair_vectorx3Cfloatx2C2x3E_0>, _S219 : ptr<function, DiffPair_vectorx3Cfloatx2C2x3E_0>, _S220 : f32)
{
_d_dot_0(&((*_S218)), &((*_S219)), _S220);
return;
}
fn s_bwd_prop_wavedx_0( dpposition_2 : ptr<function, DiffPair_vectorx3Cfloatx2C2x3E_0>, dpdirection_1 : ptr<function, DiffPair_vectorx3Cfloatx2C2x3E_0>, dpfrequency_1 : ptr<function, DiffPair_float_0>, dptimeshift_1 : ptr<function, DiffPair_float_0>, _s_dOut_0 : vec2<f32>)
{
var _S221 : f32 = s_primal_ctx_dot_0((*dpdirection_1).primal_0, (*dpposition_2).primal_0);
var x_2 : f32 = _S221 * (*dpfrequency_1).primal_0 + (*dptimeshift_1).primal_0;
var _S222 : f32 = s_primal_ctx_sin_0(x_2) - 1.0f;
var s_diff_dx_T_0 : f32 = - _s_dOut_0[i32(1)];
var _S223 : f32 = s_primal_ctx_exp_0(_S222) * s_diff_dx_T_0;
var _S224 : f32 = s_primal_ctx_cos_0(x_2) * s_diff_dx_T_0;
var _S225 : DiffPair_float_0;
_S225.primal_0 = x_2;
_S225.differential_0 = 0.0f;
s_bwd_prop_cos_0(&(_S225), _S223);
var _S226 : f32 = _s_dOut_0[i32(0)] + _S224;
var _S227 : DiffPair_float_0;
_S227.primal_0 = _S222;
_S227.differential_0 = 0.0f;
s_bwd_prop_exp_0(&(_S227), _S226);
var _S228 : DiffPair_float_0;
_S228.primal_0 = x_2;
_S228.differential_0 = 0.0f;
s_bwd_prop_sin_0(&(_S228), _S227.differential_0);
var _S229 : f32 = _S225.differential_0 + _S228.differential_0;
var _S230 : f32 = _S221 * _S229;
var _S231 : f32 = (*dpfrequency_1).primal_0 * _S229;
var _S232 : vec2<f32> = vec2<f32>(0.0f);
var _S233 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S233.primal_0 = (*dpdirection_1).primal_0;
_S233.differential_0 = _S232;
var _S234 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S234.primal_0 = (*dpposition_2).primal_0;
_S234.differential_0 = _S232;
s_bwd_prop_dot_0(&(_S233), &(_S234), _S231);
(*dptimeshift_1).primal_0 = (*dptimeshift_1).primal_0;
(*dptimeshift_1).differential_0 = _S229;
(*dpfrequency_1).primal_0 = (*dpfrequency_1).primal_0;
(*dpfrequency_1).differential_0 = _S230;
(*dpdirection_1).primal_0 = (*dpdirection_1).primal_0;
(*dpdirection_1).differential_0 = _S233.differential_0;
(*dpposition_2).primal_0 = (*dpposition_2).primal_0;
(*dpposition_2).differential_0 = _S234.differential_0;
return;
}
fn s_bwd_prop_sqrt_0( _S235 : ptr<function, DiffPair_float_0>, _S236 : f32)
{
_d_sqrt_0(&((*_S235)), _S236);
return;
}
fn s_bwd_prop_length_impl_0( dpx_5 : ptr<function, DiffPair_vectorx3Cfloatx2C2x3E_0>, _s_dOut_1 : f32)
{
var _S237 : f32 = (*dpx_5).primal_0[i32(0)];
var _S238 : f32 = (*dpx_5).primal_0[i32(1)];
var _S239 : DiffPair_float_0;
_S239.primal_0 = _S237 * _S237 + _S238 * _S238;
_S239.differential_0 = 0.0f;
s_bwd_prop_sqrt_0(&(_S239), _s_dOut_1);
var _S240 : f32 = (*dpx_5).primal_0[i32(1)] * _S239.differential_0;
var _S241 : f32 = _S240 + _S240;
var _S242 : f32 = (*dpx_5).primal_0[i32(0)] * _S239.differential_0;
var _S243 : f32 = _S242 + _S242;
var _S244 : vec2<f32> = vec2<f32>(0.0f);
_S244[i32(1)] = _S241;
_S244[i32(0)] = _S243;
(*dpx_5).primal_0 = (*dpx_5).primal_0;
(*dpx_5).differential_0 = _S244;
return;
}
fn s_bwd_length_impl_0( _S245 : ptr<function, DiffPair_vectorx3Cfloatx2C2x3E_0>, _S246 : f32)
{
s_bwd_prop_length_impl_0(&((*_S245)), _S246);
return;
}
fn s_bwd_prop_getwaves_0( dpposition_3 : ptr<function, DiffPair_vectorx3Cfloatx2C2x3E_0>, _s_dOut_2 : f32, _s_diff_ctx_1 : s_bwd_prop_getwaves_Intermediates_0)
{
var _S247 : f32 = length((*dpposition_3).primal_0) * 0.10000000149011612f;
var p_47 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(0.0f), s_primal_ctx_cos_0(0.0f));
var _S248 : f32 = globalParams_0.time_0 * 5.0f + _S247;
var _S249 : vec2<f32> = vec2<f32>(0.37999999523162842f);
var _S250 : vec2<f32> = (*dpposition_3).primal_0 + p_47 * vec2<f32>(_s_diff_ctx_1._S55.y) * _S249;
var _S251 : f32 = s_primal_ctx_lerp_0(1.0f, 0.0f, 0.20000000298023224f);
var _S252 : vec2<f32> = vec2<f32>(_S251);
var p_48 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(1232.39990234375f), s_primal_ctx_cos_0(1232.39990234375f));
var _S253 : f32 = globalParams_0.time_0 * 5.35000038146972656f + _S247;
var _S254 : vec2<f32> = _S250 + p_48 * vec2<f32>(_s_diff_ctx_1._S56.y) * _S252 * _S249;
var _S255 : f32 = s_primal_ctx_lerp_0(_S251, 0.0f, 0.20000000298023224f);
var _S256 : vec2<f32> = vec2<f32>(_S255);
var p_49 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(2464.7998046875f), s_primal_ctx_cos_0(2464.7998046875f));
var _S257 : f32 = globalParams_0.time_0 * 5.72450065612792969f + _S247;
var _S258 : vec2<f32> = _S254 + p_49 * vec2<f32>(_s_diff_ctx_1._S57.y) * _S256 * _S249;
var _S259 : f32 = s_primal_ctx_lerp_0(_S255, 0.0f, 0.20000000298023224f);
var _S260 : vec2<f32> = vec2<f32>(_S259);
var p_50 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(3697.19970703125f), s_primal_ctx_cos_0(3697.19970703125f));
var _S261 : f32 = globalParams_0.time_0 * 6.12521600723266602f + _S247;
var _S262 : vec2<f32> = _S258 + p_50 * vec2<f32>(_s_diff_ctx_1._S58.y) * _S260 * _S249;
var _S263 : f32 = s_primal_ctx_lerp_0(_S259, 0.0f, 0.20000000298023224f);
var _S264 : vec2<f32> = vec2<f32>(_S263);
var p_51 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(4929.599609375f), s_primal_ctx_cos_0(4929.599609375f));
var _S265 : f32 = globalParams_0.time_0 * 6.55398130416870117f + _S247;
var _S266 : vec2<f32> = _S262 + p_51 * vec2<f32>(_s_diff_ctx_1._S59.y) * _S264 * _S249;
var _S267 : f32 = s_primal_ctx_lerp_0(_S263, 0.0f, 0.20000000298023224f);
var _S268 : vec2<f32> = vec2<f32>(_S267);
var p_52 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(6161.99951171875f), s_primal_ctx_cos_0(6161.99951171875f));
var _S269 : f32 = globalParams_0.time_0 * 7.01276016235351562f + _S247;
var _S270 : vec2<f32> = _S266 + p_52 * vec2<f32>(_s_diff_ctx_1._S60.y) * _S268 * _S249;
var _S271 : f32 = s_primal_ctx_lerp_0(_S267, 0.0f, 0.20000000298023224f);
var _S272 : vec2<f32> = vec2<f32>(_S271);
var p_53 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(7394.3994140625f), s_primal_ctx_cos_0(7394.3994140625f));
var _S273 : f32 = globalParams_0.time_0 * 7.50365352630615234f + _S247;
var _S274 : vec2<f32> = _S270 + p_53 * vec2<f32>(_s_diff_ctx_1._S61.y) * _S272 * _S249;
var _S275 : f32 = s_primal_ctx_lerp_0(_S271, 0.0f, 0.20000000298023224f);
var _S276 : vec2<f32> = vec2<f32>(_S275);
var p_54 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(8626.798828125f), s_primal_ctx_cos_0(8626.798828125f));
var _S277 : f32 = globalParams_0.time_0 * 8.02890968322753906f + _S247;
var _S278 : vec2<f32> = _S274 + p_54 * vec2<f32>(_s_diff_ctx_1._S62.y) * _S276 * _S249;
var _S279 : f32 = s_primal_ctx_lerp_0(_S275, 0.0f, 0.20000000298023224f);
var _S280 : vec2<f32> = vec2<f32>(_S279);
var p_55 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(9859.19921875f), s_primal_ctx_cos_0(9859.19921875f));
var _S281 : f32 = globalParams_0.time_0 * 8.59093379974365234f + _S247;
var _S282 : vec2<f32> = _S278 + p_55 * vec2<f32>(_s_diff_ctx_1._S63.y) * _S280 * _S249;
var _S283 : f32 = s_primal_ctx_lerp_0(_S279, 0.0f, 0.20000000298023224f);
var _S284 : vec2<f32> = vec2<f32>(_S283);
var p_56 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(11091.599609375f), s_primal_ctx_cos_0(11091.599609375f));
var _S285 : f32 = globalParams_0.time_0 * 9.19229984283447266f + _S247;
var _S286 : vec2<f32> = _S282 + p_56 * vec2<f32>(_s_diff_ctx_1._S64.y) * _S284 * _S249;
var _S287 : f32 = s_primal_ctx_lerp_0(_S283, 0.0f, 0.20000000298023224f);
var _S288 : vec2<f32> = vec2<f32>(_S287);
var p_57 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(12324.0f), s_primal_ctx_cos_0(12324.0f));
var _S289 : f32 = globalParams_0.time_0 * 9.83576107025146484f + _S247;
var _S290 : vec2<f32> = _S286 + p_57 * vec2<f32>(_s_diff_ctx_1._S65.y) * _S288 * _S249;
var _S291 : f32 = s_primal_ctx_lerp_0(_S287, 0.0f, 0.20000000298023224f);
var _S292 : vec2<f32> = vec2<f32>(_S291);
var p_58 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(13556.400390625f), s_primal_ctx_cos_0(13556.400390625f));
var _S293 : f32 = globalParams_0.time_0 * 10.52426528930664062f + _S247;
var _S294 : vec2<f32> = _S290 + p_58 * vec2<f32>(_s_diff_ctx_1._S66.y) * _S292 * _S249;
var _S295 : f32 = s_primal_ctx_lerp_0(_S291, 0.0f, 0.20000000298023224f);
var _S296 : vec2<f32> = vec2<f32>(_S295);
var p_59 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(14788.80078125f), s_primal_ctx_cos_0(14788.80078125f));
var _S297 : f32 = globalParams_0.time_0 * 11.26096439361572266f + _S247;
var _S298 : vec2<f32> = _S294 + p_59 * vec2<f32>(_s_diff_ctx_1._S67.y) * _S296 * _S249;
var _S299 : f32 = s_primal_ctx_lerp_0(_S295, 0.0f, 0.20000000298023224f);
var _S300 : vec2<f32> = vec2<f32>(_S299);
var p_60 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(16021.201171875f), s_primal_ctx_cos_0(16021.201171875f));
var _S301 : f32 = globalParams_0.time_0 * 12.04923248291015625f + _S247;
var _S302 : vec2<f32> = _S298 + p_60 * vec2<f32>(_s_diff_ctx_1._S68.y) * _S300 * _S249;
var _S303 : f32 = s_primal_ctx_lerp_0(_S299, 0.0f, 0.20000000298023224f);
var _S304 : vec2<f32> = vec2<f32>(_S303);
var p_61 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(17253.6015625f), s_primal_ctx_cos_0(17253.6015625f));
var _S305 : f32 = globalParams_0.time_0 * 12.89267921447753906f + _S247;
var _S306 : vec2<f32> = _S302 + p_61 * vec2<f32>(_s_diff_ctx_1._S69.y) * _S304 * _S249;
var _S307 : f32 = s_primal_ctx_lerp_0(_S303, 0.0f, 0.20000000298023224f);
var _S308 : vec2<f32> = vec2<f32>(_S307);
var p_62 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(18486.001953125f), s_primal_ctx_cos_0(18486.001953125f));
var _S309 : f32 = globalParams_0.time_0 * 13.79516696929931641f + _S247;
var _S310 : vec2<f32> = _S306 + p_62 * vec2<f32>(_s_diff_ctx_1._S70.y) * _S308 * _S249;
var _S311 : f32 = s_primal_ctx_lerp_0(_S307, 0.0f, 0.20000000298023224f);
var _S312 : vec2<f32> = vec2<f32>(_S311);
var p_63 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(19718.40234375f), s_primal_ctx_cos_0(19718.40234375f));
var _S313 : f32 = globalParams_0.time_0 * 14.76082897186279297f + _S247;
var _S314 : vec2<f32> = _S310 + p_63 * vec2<f32>(_s_diff_ctx_1._S71.y) * _S312 * _S249;
var _S315 : f32 = s_primal_ctx_lerp_0(_S311, 0.0f, 0.20000000298023224f);
var _S316 : vec2<f32> = vec2<f32>(_S315);
var p_64 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(20950.802734375f), s_primal_ctx_cos_0(20950.802734375f));
var _S317 : f32 = globalParams_0.time_0 * 15.79408740997314453f + _S247;
var _S318 : vec2<f32> = _S314 + p_64 * vec2<f32>(_s_diff_ctx_1._S72.y) * _S316 * _S249;
var _S319 : f32 = s_primal_ctx_lerp_0(_S315, 0.0f, 0.20000000298023224f);
var _S320 : vec2<f32> = vec2<f32>(_S319);
var p_65 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(22183.203125f), s_primal_ctx_cos_0(22183.203125f));
var _S321 : f32 = globalParams_0.time_0 * 16.8996734619140625f + _S247;
var _S322 : vec2<f32> = _S318 + p_65 * vec2<f32>(_s_diff_ctx_1._S73.y) * _S320 * _S249;
var _S323 : f32 = s_primal_ctx_lerp_0(_S319, 0.0f, 0.20000000298023224f);
var _S324 : vec2<f32> = vec2<f32>(_S323);
var p_66 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(23415.603515625f), s_primal_ctx_cos_0(23415.603515625f));
var _S325 : f32 = globalParams_0.time_0 * 18.08265113830566406f + _S247;
var _S326 : vec2<f32> = _S322 + p_66 * vec2<f32>(_s_diff_ctx_1._S74.y) * _S324 * _S249;
var _S327 : f32 = s_primal_ctx_lerp_0(_S323, 0.0f, 0.20000000298023224f);
var _S328 : vec2<f32> = vec2<f32>(_S327);
var p_67 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(24648.00390625f), s_primal_ctx_cos_0(24648.00390625f));
var _S329 : f32 = globalParams_0.time_0 * 19.34843826293945312f + _S247;
var _S330 : vec2<f32> = _S326 + p_67 * vec2<f32>(_s_diff_ctx_1._S75.y) * _S328 * _S249;
var _S331 : f32 = s_primal_ctx_lerp_0(_S327, 0.0f, 0.20000000298023224f);
var _S332 : vec2<f32> = vec2<f32>(_S331);
var p_68 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(25880.404296875f), s_primal_ctx_cos_0(25880.404296875f));
var _S333 : f32 = globalParams_0.time_0 * 20.70282936096191406f + _S247;
var _S334 : vec2<f32> = _S330 + p_68 * vec2<f32>(_s_diff_ctx_1._S76.y) * _S332 * _S249;
var _S335 : f32 = s_primal_ctx_lerp_0(_S331, 0.0f, 0.20000000298023224f);
var _S336 : vec2<f32> = vec2<f32>(_S335);
var p_69 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(27112.8046875f), s_primal_ctx_cos_0(27112.8046875f));
var _S337 : f32 = globalParams_0.time_0 * 22.15202903747558594f + _S247;
var _S338 : vec2<f32> = _S334 + p_69 * vec2<f32>(_s_diff_ctx_1._S77.y) * _S336 * _S249;
var _S339 : f32 = s_primal_ctx_lerp_0(_S335, 0.0f, 0.20000000298023224f);
var _S340 : vec2<f32> = vec2<f32>(_S339);
var p_70 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(28345.205078125f), s_primal_ctx_cos_0(28345.205078125f));
var _S341 : f32 = globalParams_0.time_0 * 23.70267295837402344f + _S247;
var _S342 : vec2<f32> = _S338 + p_70 * vec2<f32>(_s_diff_ctx_1._S78.y) * _S340 * _S249;
var _S343 : f32 = s_primal_ctx_lerp_0(_S339, 0.0f, 0.20000000298023224f);
var _S344 : vec2<f32> = vec2<f32>(_S343);
var p_71 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(29577.60546875f), s_primal_ctx_cos_0(29577.60546875f));
var _S345 : f32 = globalParams_0.time_0 * 25.3618621826171875f + _S247;
var _S346 : vec2<f32> = _S342 + p_71 * vec2<f32>(_s_diff_ctx_1._S79.y) * _S344 * _S249;
var _S347 : f32 = s_primal_ctx_lerp_0(_S343, 0.0f, 0.20000000298023224f);
var _S348 : vec2<f32> = vec2<f32>(_S347);
var p_72 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(30810.005859375f), s_primal_ctx_cos_0(30810.005859375f));
var _S349 : f32 = globalParams_0.time_0 * 27.13719367980957031f + _S247;
var _S350 : vec2<f32> = _S346 + p_72 * vec2<f32>(_s_diff_ctx_1._S80.y) * _S348 * _S249;
var _S351 : f32 = s_primal_ctx_lerp_0(_S347, 0.0f, 0.20000000298023224f);
var _S352 : vec2<f32> = vec2<f32>(_S351);
var p_73 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(32042.40625f), s_primal_ctx_cos_0(32042.40625f));
var _S353 : f32 = globalParams_0.time_0 * 29.03679847717285156f + _S247;
var _S354 : vec2<f32> = _S350 + p_73 * vec2<f32>(_s_diff_ctx_1._S81.y) * _S352 * _S249;
var _S355 : f32 = s_primal_ctx_lerp_0(_S351, 0.0f, 0.20000000298023224f);
var _S356 : vec2<f32> = vec2<f32>(_S355);
var p_74 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(33274.8046875f), s_primal_ctx_cos_0(33274.8046875f));
var _S357 : f32 = globalParams_0.time_0 * 31.06937599182128906f + _S247;
var _S358 : vec2<f32> = _S354 + p_74 * vec2<f32>(_s_diff_ctx_1._S82.y) * _S356 * _S249;
var _S359 : f32 = s_primal_ctx_lerp_0(_S355, 0.0f, 0.20000000298023224f);
var _S360 : vec2<f32> = vec2<f32>(_S359);
var p_75 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(34507.203125f), s_primal_ctx_cos_0(34507.203125f));
var _S361 : f32 = globalParams_0.time_0 * 33.244232177734375f + _S247;
var _S362 : vec2<f32> = _S358 + p_75 * vec2<f32>(_s_diff_ctx_1._S83.y) * _S360 * _S249;
var _S363 : f32 = s_primal_ctx_lerp_0(_S359, 0.0f, 0.20000000298023224f);
var _S364 : vec2<f32> = vec2<f32>(_S363);
var p_76 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(35739.6015625f), s_primal_ctx_cos_0(35739.6015625f));
var _S365 : f32 = globalParams_0.time_0 * 35.57133102416992188f + _S247;
var _S366 : vec2<f32> = _S362 + p_76 * vec2<f32>(_s_diff_ctx_1._S84.y) * _S364 * _S249;
var _S367 : f32 = s_primal_ctx_lerp_0(_S363, 0.0f, 0.20000000298023224f);
var _S368 : vec2<f32> = vec2<f32>(_S367);
var p_77 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(36972.0f), s_primal_ctx_cos_0(36972.0f));
var _S369 : f32 = globalParams_0.time_0 * 38.0613250732421875f + _S247;
var _S370 : vec2<f32> = _S366 + p_77 * vec2<f32>(_s_diff_ctx_1._S85.y) * _S368 * _S249;
var _S371 : f32 = s_primal_ctx_lerp_0(_S367, 0.0f, 0.20000000298023224f);
var _S372 : vec2<f32> = vec2<f32>(_S371);
var p_78 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(38204.3984375f), s_primal_ctx_cos_0(38204.3984375f));
var _S373 : f32 = globalParams_0.time_0 * 40.72562026977539062f + _S247;
var _S374 : vec2<f32> = _S370 + p_78 * vec2<f32>(_s_diff_ctx_1._S86.y) * _S372 * _S249;
var _S375 : f32 = s_primal_ctx_lerp_0(_S371, 0.0f, 0.20000000298023224f);
var _S376 : vec2<f32> = vec2<f32>(_S375);
var p_79 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(39436.796875f), s_primal_ctx_cos_0(39436.796875f));
var _S377 : f32 = globalParams_0.time_0 * 43.576416015625f + _S247;
var _S378 : vec2<f32> = _S374 + p_79 * vec2<f32>(_s_diff_ctx_1._S87.y) * _S376 * _S249;
var _S379 : f32 = s_primal_ctx_lerp_0(_S375, 0.0f, 0.20000000298023224f);
var _S380 : vec2<f32> = vec2<f32>(_S379);
var p_80 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(40669.1953125f), s_primal_ctx_cos_0(40669.1953125f));
var _S381 : f32 = globalParams_0.time_0 * 46.62676620483398438f + _S247;
var _S382 : vec2<f32> = _S378 + p_80 * vec2<f32>(_s_diff_ctx_1._S88.y) * _S380 * _S249;
var _S383 : f32 = s_primal_ctx_lerp_0(_S379, 0.0f, 0.20000000298023224f);
var _S384 : vec2<f32> = vec2<f32>(_S383);
var p_81 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(41901.59375f), s_primal_ctx_cos_0(41901.59375f));
var _S385 : f32 = globalParams_0.time_0 * 49.89064407348632812f + _S247;
var _S386 : vec2<f32> = _S382 + p_81 * vec2<f32>(_s_diff_ctx_1._S89.y) * _S384 * _S249;
var _S387 : f32 = s_primal_ctx_lerp_0(_S383, 0.0f, 0.20000000298023224f);
var _S388 : vec2<f32> = vec2<f32>(_S387);
var p_82 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(43133.9921875f), s_primal_ctx_cos_0(43133.9921875f));
var _S389 : f32 = globalParams_0.time_0 * 53.38299179077148438f + _S247;
var _S390 : f32 = s_primal_ctx_lerp_0(_S387, 0.0f, 0.20000000298023224f);
var p_83 : vec2<f32> = vec2<f32>(s_primal_ctx_sin_0(44366.390625f), s_primal_ctx_cos_0(44366.390625f));
var _S391 : f32 = globalParams_0.time_0 * 57.11980438232421875f + _S247;
var sumOfWeights_34 : f32 = 1.0f + _S251 + _S255 + _S259 + _S263 + _S267 + _S271 + _S275 + _S279 + _S283 + _S287 + _S291 + _S295 + _S299 + _S303 + _S307 + _S311 + _S315 + _S319 + _S323 + _S327 + _S331 + _S335 + _S339 + _S343 + _S347 + _S351 + _S355 + _S359 + _S363 + _S367 + _S371 + _S375 + _S379 + _S383 + _S387 + _S390;
var s_diff_sumOfValues_T_0 : f32 = sumOfWeights_34 * (_s_dOut_2 / (sumOfWeights_34 * sumOfWeights_34));
var _S392 : vec2<f32> = vec2<f32>(_S390 * s_diff_sumOfValues_T_0, 0.0f);
var _S393 : vec2<f32> = vec2<f32>(0.0f);
var _S394 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S394.primal_0 = _S386 + p_82 * vec2<f32>(_s_diff_ctx_1._S90.y) * _S388 * _S249;
_S394.differential_0 = _S393;
var _S395 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S395.primal_0 = p_83;
_S395.differential_0 = _S393;
var _S396 : DiffPair_float_0;
_S396.primal_0 = 387.036163330078125f;
_S396.differential_0 = 0.0f;
var _S397 : DiffPair_float_0;
_S397.primal_0 = _S391;
_S397.differential_0 = 0.0f;
s_bwd_prop_wavedx_0(&(_S394), &(_S395), &(_S396), &(_S397), _S392);
var _S398 : vec2<f32> = p_82 * (_S388 * (vec2<f32>(0.37999999523162842f) * _S394.differential_0));
var _S399 : vec2<f32> = vec2<f32>(_S387 * s_diff_sumOfValues_T_0, _S398[i32(0)] + _S398[i32(1)]);
var _S400 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S400.primal_0 = _S386;
_S400.differential_0 = _S393;
var _S401 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S401.primal_0 = p_82;
_S401.differential_0 = _S393;
var _S402 : DiffPair_float_0;
_S402.primal_0 = 327.99676513671875f;
_S402.differential_0 = 0.0f;
var _S403 : DiffPair_float_0;
_S403.primal_0 = _S389;
_S403.differential_0 = 0.0f;
s_bwd_prop_wavedx_0(&(_S400), &(_S401), &(_S402), &(_S403), _S399);
var _S404 : vec2<f32> = _S394.differential_0 + _S400.differential_0;
var _S405 : vec2<f32> = p_81 * (_S384 * (vec2<f32>(0.37999999523162842f) * _S404));
var _S406 : vec2<f32> = vec2<f32>(_S383 * s_diff_sumOfValues_T_0, _S405[i32(0)] + _S405[i32(1)]);
var _S407 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S407.primal_0 = _S382;
_S407.differential_0 = _S393;
var _S408 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S408.primal_0 = p_81;
_S408.differential_0 = _S393;
var _S409 : DiffPair_float_0;
_S409.primal_0 = 277.96337890625f;
_S409.differential_0 = 0.0f;
var _S410 : DiffPair_float_0;
_S410.primal_0 = _S385;
_S410.differential_0 = 0.0f;
s_bwd_prop_wavedx_0(&(_S407), &(_S408), &(_S409), &(_S410), _S406);
var _S411 : vec2<f32> = _S404 + _S407.differential_0;
var _S412 : vec2<f32> = p_80 * (_S380 * (vec2<f32>(0.37999999523162842f) * _S411));
var _S413 : vec2<f32> = vec2<f32>(_S379 * s_diff_sumOfValues_T_0, _S412[i32(0)] + _S412[i32(1)]);
var _S414 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S414.primal_0 = _S378;
_S414.differential_0 = _S393;
var _S415 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S415.primal_0 = p_80;
_S415.differential_0 = _S393;
var _S416 : DiffPair_float_0;
_S416.primal_0 = 235.56219482421875f;
_S416.differential_0 = 0.0f;
var _S417 : DiffPair_float_0;
_S417.primal_0 = _S381;
_S417.differential_0 = 0.0f;
s_bwd_prop_wavedx_0(&(_S414), &(_S415), &(_S416), &(_S417), _S413);
var _S418 : vec2<f32> = _S411 + _S414.differential_0;
var _S419 : vec2<f32> = p_79 * (_S376 * (vec2<f32>(0.37999999523162842f) * _S418));
var _S420 : vec2<f32> = vec2<f32>(_S375 * s_diff_sumOfValues_T_0, _S419[i32(0)] + _S419[i32(1)]);
var _S421 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S421.primal_0 = _S374;
_S421.differential_0 = _S393;
var _S422 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S422.primal_0 = p_79;
_S422.differential_0 = _S393;
var _S423 : DiffPair_float_0;
_S423.primal_0 = 199.6289825439453125f;
_S423.differential_0 = 0.0f;
var _S424 : DiffPair_float_0;
_S424.primal_0 = _S377;
_S424.differential_0 = 0.0f;
s_bwd_prop_wavedx_0(&(_S421), &(_S422), &(_S423), &(_S424), _S420);
var _S425 : vec2<f32> = _S418 + _S421.differential_0;
var _S426 : vec2<f32> = p_78 * (_S372 * (vec2<f32>(0.37999999523162842f) * _S425));
var _S427 : vec2<f32> = vec2<f32>(_S371 * s_diff_sumOfValues_T_0, _S426[i32(0)] + _S426[i32(1)]);
var _S428 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S428.primal_0 = _S370;
_S428.differential_0 = _S393;
var _S429 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S429.primal_0 = p_78;
_S429.differential_0 = _S393;
var _S430 : DiffPair_float_0;
_S430.primal_0 = 169.1771087646484375f;
_S430.differential_0 = 0.0f;
var _S431 : DiffPair_float_0;
_S431.primal_0 = _S373;
_S431.differential_0 = 0.0f;
s_bwd_prop_wavedx_0(&(_S428), &(_S429), &(_S430), &(_S431), _S427);
var _S432 : vec2<f32> = _S425 + _S428.differential_0;
var _S433 : vec2<f32> = p_77 * (_S368 * (vec2<f32>(0.37999999523162842f) * _S432));
var _S434 : vec2<f32> = vec2<f32>(_S367 * s_diff_sumOfValues_T_0, _S433[i32(0)] + _S433[i32(1)]);
var _S435 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S435.primal_0 = _S366;
_S435.differential_0 = _S393;
var _S436 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S436.primal_0 = p_77;
_S436.differential_0 = _S393;
var _S437 : DiffPair_float_0;
_S437.primal_0 = 143.3704376220703125f;
_S437.differential_0 = 0.0f;
var _S438 : DiffPair_float_0;
_S438.primal_0 = _S369;
_S438.differential_0 = 0.0f;
s_bwd_prop_wavedx_0(&(_S435), &(_S436), &(_S437), &(_S438), _S434);
var _S439 : vec2<f32> = _S432 + _S435.differential_0;
var _S440 : vec2<f32> = p_76 * (_S364 * (vec2<f32>(0.37999999523162842f) * _S439));
var _S441 : vec2<f32> = vec2<f32>(_S363 * s_diff_sumOfValues_T_0, _S440[i32(0)] + _S440[i32(1)]);
var _S442 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S442.primal_0 = _S362;
_S442.differential_0 = _S393;
var _S443 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S443.primal_0 = p_76;
_S443.differential_0 = _S393;
var _S444 : DiffPair_float_0;
_S444.primal_0 = 121.50037384033203125f;
_S444.differential_0 = 0.0f;
var _S445 : DiffPair_float_0;
_S445.primal_0 = _S365;
_S445.differential_0 = 0.0f;
s_bwd_prop_wavedx_0(&(_S442), &(_S443), &(_S444), &(_S445), _S441);
var _S446 : vec2<f32> = _S439 + _S442.differential_0;
var _S447 : vec2<f32> = p_75 * (_S360 * (vec2<f32>(0.37999999523162842f) * _S446));
var _S448 : vec2<f32> = vec2<f32>(_S359 * s_diff_sumOfValues_T_0, _S447[i32(0)] + _S447[i32(1)]);
var _S449 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S449.primal_0 = _S358;
_S449.differential_0 = _S393;
var _S450 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S450.primal_0 = p_75;
_S450.differential_0 = _S393;
var _S451 : DiffPair_float_0;
_S451.primal_0 = 102.96642303466796875f;
_S451.differential_0 = 0.0f;
var _S452 : DiffPair_float_0;
_S452.primal_0 = _S361;
_S452.differential_0 = 0.0f;
s_bwd_prop_wavedx_0(&(_S449), &(_S450), &(_S451), &(_S452), _S448);
var _S453 : vec2<f32> = _S446 + _S449.differential_0;
var _S454 : vec2<f32> = p_74 * (_S356 * (vec2<f32>(0.37999999523162842f) * _S453));
var _S455 : vec2<f32> = vec2<f32>(_S355 * s_diff_sumOfValues_T_0, _S454[i32(0)] + _S454[i32(1)]);
var _S456 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S456.primal_0 = _S354;
_S456.differential_0 = _S393;
var _S457 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S457.primal_0 = p_74;
_S457.differential_0 = _S393;
var _S458 : DiffPair_float_0;
_S458.primal_0 = 87.25968170166015625f;
_S458.differential_0 = 0.0f;
var _S459 : DiffPair_float_0;
_S459.primal_0 = _S357;
_S459.differential_0 = 0.0f;
s_bwd_prop_wavedx_0(&(_S456), &(_S457), &(_S458), &(_S459), _S455);
var _S460 : vec2<f32> = _S453 + _S456.differential_0;
var _S461 : vec2<f32> = p_73 * (_S352 * (vec2<f32>(0.37999999523162842f) * _S460));
var _S462 : vec2<f32> = vec2<f32>(_S351 * s_diff_sumOfValues_T_0, _S461[i32(0)] + _S461[i32(1)]);
var _S463 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S463.primal_0 = _S350;
_S463.differential_0 = _S393;
var _S464 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S464.primal_0 = p_73;
_S464.differential_0 = _S393;
var _S465 : DiffPair_float_0;
_S465.primal_0 = 73.948883056640625f;
_S465.differential_0 = 0.0f;
var _S466 : DiffPair_float_0;
_S466.primal_0 = _S353;
_S466.differential_0 = 0.0f;
s_bwd_prop_wavedx_0(&(_S463), &(_S464), &(_S465), &(_S466), _S462);
var _S467 : vec2<f32> = _S460 + _S463.differential_0;
var _S468 : vec2<f32> = p_72 * (_S348 * (vec2<f32>(0.37999999523162842f) * _S467));
var _S469 : vec2<f32> = vec2<f32>(_S347 * s_diff_sumOfValues_T_0, _S468[i32(0)] + _S468[i32(1)]);
var _S470 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S470.primal_0 = _S346;
_S470.differential_0 = _S393;
var _S471 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S471.primal_0 = p_72;
_S471.differential_0 = _S393;
var _S472 : DiffPair_float_0;
_S472.primal_0 = 62.66854476928710938f;
_S472.differential_0 = 0.0f;
var _S473 : DiffPair_float_0;
_S473.primal_0 = _S349;
_S473.differential_0 = 0.0f;
s_bwd_prop_wavedx_0(&(_S470), &(_S471), &(_S472), &(_S473), _S469);
var _S474 : vec2<f32> = _S467 + _S470.differential_0;
var _S475 : vec2<f32> = p_71 * (_S344 * (vec2<f32>(0.37999999523162842f) * _S474));
var _S476 : vec2<f32> = vec2<f32>(_S343 * s_diff_sumOfValues_T_0, _S475[i32(0)] + _S475[i32(1)]);
var _S477 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S477.primal_0 = _S342;
_S477.differential_0 = _S393;
var _S478 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S478.primal_0 = p_71;
_S478.differential_0 = _S393;
var _S479 : DiffPair_float_0;
_S479.primal_0 = 53.10894012451171875f;
_S479.differential_0 = 0.0f;
var _S480 : DiffPair_float_0;
_S480.primal_0 = _S345;
_S480.differential_0 = 0.0f;
s_bwd_prop_wavedx_0(&(_S477), &(_S478), &(_S479), &(_S480), _S476);
var _S481 : vec2<f32> = _S474 + _S477.differential_0;
var _S482 : vec2<f32> = p_70 * (_S340 * (vec2<f32>(0.37999999523162842f) * _S481));
var _S483 : vec2<f32> = vec2<f32>(_S339 * s_diff_sumOfValues_T_0, _S482[i32(0)] + _S482[i32(1)]);
var _S484 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S484.primal_0 = _S338;
_S484.differential_0 = _S393;
var _S485 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S485.primal_0 = p_70;
_S485.differential_0 = _S393;
var _S486 : DiffPair_float_0;
_S486.primal_0 = 45.00757980346679688f;
_S486.differential_0 = 0.0f;
var _S487 : DiffPair_float_0;
_S487.primal_0 = _S341;
_S487.differential_0 = 0.0f;
s_bwd_prop_wavedx_0(&(_S484), &(_S485), &(_S486), &(_S487), _S483);
var _S488 : vec2<f32> = _S481 + _S484.differential_0;
var _S489 : vec2<f32> = p_69 * (_S336 * (vec2<f32>(0.37999999523162842f) * _S488));
var _S490 : vec2<f32> = vec2<f32>(_S335 * s_diff_sumOfValues_T_0, _S489[i32(0)] + _S489[i32(1)]);
var _S491 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S491.primal_0 = _S334;
_S491.differential_0 = _S393;
var _S492 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S492.primal_0 = p_69;
_S492.differential_0 = _S393;
var _S493 : DiffPair_float_0;
_S493.primal_0 = 38.14201736450195312f;
_S493.differential_0 = 0.0f;
var _S494 : DiffPair_float_0;
_S494.primal_0 = _S337;
_S494.differential_0 = 0.0f;
s_bwd_prop_wavedx_0(&(_S491), &(_S492), &(_S493), &(_S494), _S490);
var _S495 : vec2<f32> = _S488 + _S491.differential_0;
var _S496 : vec2<f32> = p_68 * (_S332 * (vec2<f32>(0.37999999523162842f) * _S495));
var _S497 : vec2<f32> = vec2<f32>(_S331 * s_diff_sumOfValues_T_0, _S496[i32(0)] + _S496[i32(1)]);
var _S498 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S498.primal_0 = _S330;
_S498.differential_0 = _S393;
var _S499 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S499.primal_0 = p_68;
_S499.differential_0 = _S393;
var _S500 : DiffPair_float_0;
_S500.primal_0 = 32.3237457275390625f;
_S500.differential_0 = 0.0f;
var _S501 : DiffPair_float_0;
_S501.primal_0 = _S333;
_S501.differential_0 = 0.0f;
s_bwd_prop_wavedx_0(&(_S498), &(_S499), &(_S500), &(_S501), _S497);
var _S502 : vec2<f32> = _S495 + _S498.differential_0;
var _S503 : vec2<f32> = p_67 * (_S328 * (vec2<f32>(0.37999999523162842f) * _S502));
var _S504 : vec2<f32> = vec2<f32>(_S327 * s_diff_sumOfValues_T_0, _S503[i32(0)] + _S503[i32(1)]);
var _S505 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S505.primal_0 = _S326;
_S505.differential_0 = _S393;
var _S506 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S506.primal_0 = p_67;
_S506.differential_0 = _S393;
var _S507 : DiffPair_float_0;
_S507.primal_0 = 27.39300727844238281f;
_S507.differential_0 = 0.0f;
var _S508 : DiffPair_float_0;
_S508.primal_0 = _S329;
_S508.differential_0 = 0.0f;
s_bwd_prop_wavedx_0(&(_S505), &(_S506), &(_S507), &(_S508), _S504);
var _S509 : vec2<f32> = _S502 + _S505.differential_0;
var _S510 : vec2<f32> = p_66 * (_S324 * (vec2<f32>(0.37999999523162842f) * _S509));
var _S511 : vec2<f32> = vec2<f32>(_S323 * s_diff_sumOfValues_T_0, _S510[i32(0)] + _S510[i32(1)]);
var _S512 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S512.primal_0 = _S322;
_S512.differential_0 = _S393;
var _S513 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S513.primal_0 = p_66;
_S513.differential_0 = _S393;
var _S514 : DiffPair_float_0;
_S514.primal_0 = 23.21441459655761719f;
_S514.differential_0 = 0.0f;
var _S515 : DiffPair_float_0;
_S515.primal_0 = _S325;
_S515.differential_0 = 0.0f;
s_bwd_prop_wavedx_0(&(_S512), &(_S513), &(_S514), &(_S515), _S511);
var _S516 : vec2<f32> = _S509 + _S512.differential_0;
var _S517 : vec2<f32> = p_65 * (_S320 * (vec2<f32>(0.37999999523162842f) * _S516));
var _S518 : vec2<f32> = vec2<f32>(_S319 * s_diff_sumOfValues_T_0, _S517[i32(0)] + _S517[i32(1)]);
var _S519 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S519.primal_0 = _S318;
_S519.differential_0 = _S393;
var _S520 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S520.primal_0 = p_65;
_S520.differential_0 = _S393;
var _S521 : DiffPair_float_0;
_S521.primal_0 = 19.6732330322265625f;
_S521.differential_0 = 0.0f;
var _S522 : DiffPair_float_0;
_S522.primal_0 = _S321;
_S522.differential_0 = 0.0f;
s_bwd_prop_wavedx_0(&(_S519), &(_S520), &(_S521), &(_S522), _S518);
var _S523 : vec2<f32> = _S516 + _S519.differential_0;
var _S524 : vec2<f32> = p_64 * (_S316 * (vec2<f32>(0.37999999523162842f) * _S523));
var _S525 : vec2<f32> = vec2<f32>(_S315 * s_diff_sumOfValues_T_0, _S524[i32(0)] + _S524[i32(1)]);
var _S526 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S526.primal_0 = _S314;
_S526.differential_0 = _S393;
var _S527 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S527.primal_0 = p_64;
_S527.differential_0 = _S393;
var _S528 : DiffPair_float_0;
_S528.primal_0 = 16.67223167419433594f;
_S528.differential_0 = 0.0f;
var _S529 : DiffPair_float_0;
_S529.primal_0 = _S317;
_S529.differential_0 = 0.0f;
s_bwd_prop_wavedx_0(&(_S526), &(_S527), &(_S528), &(_S529), _S525);
var _S530 : vec2<f32> = _S523 + _S526.differential_0;
var _S531 : vec2<f32> = p_63 * (_S312 * (vec2<f32>(0.37999999523162842f) * _S530));
var _S532 : vec2<f32> = vec2<f32>(_S311 * s_diff_sumOfValues_T_0, _S531[i32(0)] + _S531[i32(1)]);
var _S533 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S533.primal_0 = _S310;
_S533.differential_0 = _S393;
var _S534 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S534.primal_0 = p_63;
_S534.differential_0 = _S393;
var _S535 : DiffPair_float_0;
_S535.primal_0 = 14.12901115417480469f;
_S535.differential_0 = 0.0f;
var _S536 : DiffPair_float_0;
_S536.primal_0 = _S313;
_S536.differential_0 = 0.0f;
s_bwd_prop_wavedx_0(&(_S533), &(_S534), &(_S535), &(_S536), _S532);
var _S537 : vec2<f32> = _S530 + _S533.differential_0;
var _S538 : vec2<f32> = p_62 * (_S308 * (vec2<f32>(0.37999999523162842f) * _S537));
var _S539 : vec2<f32> = vec2<f32>(_S307 * s_diff_sumOfValues_T_0, _S538[i32(0)] + _S538[i32(1)]);
var _S540 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S540.primal_0 = _S306;
_S540.differential_0 = _S393;
var _S541 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S541.primal_0 = p_62;
_S541.differential_0 = _S393;
var _S542 : DiffPair_float_0;
_S542.primal_0 = 11.97373867034912109f;
_S542.differential_0 = 0.0f;
var _S543 : DiffPair_float_0;
_S543.primal_0 = _S309;
_S543.differential_0 = 0.0f;
s_bwd_prop_wavedx_0(&(_S540), &(_S541), &(_S542), &(_S543), _S539);
var _S544 : vec2<f32> = _S537 + _S540.differential_0;
var _S545 : vec2<f32> = p_61 * (_S304 * (vec2<f32>(0.37999999523162842f) * _S544));
var _S546 : vec2<f32> = vec2<f32>(_S303 * s_diff_sumOfValues_T_0, _S545[i32(0)] + _S545[i32(1)]);
var _S547 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S547.primal_0 = _S302;
_S547.differential_0 = _S393;
var _S548 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S548.primal_0 = p_61;
_S548.differential_0 = _S393;
var _S549 : DiffPair_float_0;
_S549.primal_0 = 10.14723682403564453f;
_S549.differential_0 = 0.0f;
var _S550 : DiffPair_float_0;
_S550.primal_0 = _S305;
_S550.differential_0 = 0.0f;
s_bwd_prop_wavedx_0(&(_S547), &(_S548), &(_S549), &(_S550), _S546);
var _S551 : vec2<f32> = _S544 + _S547.differential_0;
var _S552 : vec2<f32> = p_60 * (_S300 * (vec2<f32>(0.37999999523162842f) * _S551));
var _S553 : vec2<f32> = vec2<f32>(_S299 * s_diff_sumOfValues_T_0, _S552[i32(0)] + _S552[i32(1)]);
var _S554 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S554.primal_0 = _S298;
_S554.differential_0 = _S393;
var _S555 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S555.primal_0 = p_60;
_S555.differential_0 = _S393;
var _S556 : DiffPair_float_0;
_S556.primal_0 = 8.59935379028320312f;
_S556.differential_0 = 0.0f;
var _S557 : DiffPair_float_0;
_S557.primal_0 = _S301;
_S557.differential_0 = 0.0f;
s_bwd_prop_wavedx_0(&(_S554), &(_S555), &(_S556), &(_S557), _S553);
var _S558 : vec2<f32> = _S551 + _S554.differential_0;
var _S559 : vec2<f32> = p_59 * (_S296 * (vec2<f32>(0.37999999523162842f) * _S558));
var _S560 : vec2<f32> = vec2<f32>(_S295 * s_diff_sumOfValues_T_0, _S559[i32(0)] + _S559[i32(1)]);
var _S561 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S561.primal_0 = _S294;
_S561.differential_0 = _S393;
var _S562 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S562.primal_0 = p_59;
_S562.differential_0 = _S393;
var _S563 : DiffPair_float_0;
_S563.primal_0 = 7.28758859634399414f;
_S563.differential_0 = 0.0f;
var _S564 : DiffPair_float_0;
_S564.primal_0 = _S297;
_S564.differential_0 = 0.0f;
s_bwd_prop_wavedx_0(&(_S561), &(_S562), &(_S563), &(_S564), _S560);
var _S565 : vec2<f32> = _S558 + _S561.differential_0;
var _S566 : vec2<f32> = p_58 * (_S292 * (vec2<f32>(0.37999999523162842f) * _S565));
var _S567 : vec2<f32> = vec2<f32>(_S291 * s_diff_sumOfValues_T_0, _S566[i32(0)] + _S566[i32(1)]);
var _S568 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S568.primal_0 = _S290;
_S568.differential_0 = _S393;
var _S569 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S569.primal_0 = p_58;
_S569.differential_0 = _S393;
var _S570 : DiffPair_float_0;
_S570.primal_0 = 6.17592287063598633f;
_S570.differential_0 = 0.0f;
var _S571 : DiffPair_float_0;
_S571.primal_0 = _S293;
_S571.differential_0 = 0.0f;
s_bwd_prop_wavedx_0(&(_S568), &(_S569), &(_S570), &(_S571), _S567);
var _S572 : vec2<f32> = _S565 + _S568.differential_0;
var _S573 : vec2<f32> = p_57 * (_S288 * (vec2<f32>(0.37999999523162842f) * _S572));
var _S574 : vec2<f32> = vec2<f32>(_S287 * s_diff_sumOfValues_T_0, _S573[i32(0)] + _S573[i32(1)]);
var _S575 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S575.primal_0 = _S286;
_S575.differential_0 = _S393;
var _S576 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S576.primal_0 = p_57;
_S576.differential_0 = _S393;
var _S577 : DiffPair_float_0;
_S577.primal_0 = 5.23383331298828125f;
_S577.differential_0 = 0.0f;
var _S578 : DiffPair_float_0;
_S578.primal_0 = _S289;
_S578.differential_0 = 0.0f;
s_bwd_prop_wavedx_0(&(_S575), &(_S576), &(_S577), &(_S578), _S574);
var _S579 : vec2<f32> = _S572 + _S575.differential_0;
var _S580 : vec2<f32> = p_56 * (_S284 * (vec2<f32>(0.37999999523162842f) * _S579));
var _S581 : vec2<f32> = vec2<f32>(_S283 * s_diff_sumOfValues_T_0, _S580[i32(0)] + _S580[i32(1)]);
var _S582 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S582.primal_0 = _S282;
_S582.differential_0 = _S393;
var _S583 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S583.primal_0 = p_56;
_S583.differential_0 = _S393;
var _S584 : DiffPair_float_0;
_S584.primal_0 = 4.43545198440551758f;
_S584.differential_0 = 0.0f;
var _S585 : DiffPair_float_0;
_S585.primal_0 = _S285;
_S585.differential_0 = 0.0f;
s_bwd_prop_wavedx_0(&(_S582), &(_S583), &(_S584), &(_S585), _S581);
var _S586 : vec2<f32> = _S579 + _S582.differential_0;
var _S587 : vec2<f32> = p_55 * (_S280 * (vec2<f32>(0.37999999523162842f) * _S586));
var _S588 : vec2<f32> = vec2<f32>(_S279 * s_diff_sumOfValues_T_0, _S587[i32(0)] + _S587[i32(1)]);
var _S589 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S589.primal_0 = _S278;
_S589.differential_0 = _S393;
var _S590 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S590.primal_0 = p_55;
_S590.differential_0 = _S393;
var _S591 : DiffPair_float_0;
_S591.primal_0 = 3.75885796546936035f;
_S591.differential_0 = 0.0f;
var _S592 : DiffPair_float_0;
_S592.primal_0 = _S281;
_S592.differential_0 = 0.0f;
s_bwd_prop_wavedx_0(&(_S589), &(_S590), &(_S591), &(_S592), _S588);
var _S593 : vec2<f32> = _S586 + _S589.differential_0;
var _S594 : vec2<f32> = p_54 * (_S276 * (vec2<f32>(0.37999999523162842f) * _S593));
var _S595 : vec2<f32> = vec2<f32>(_S275 * s_diff_sumOfValues_T_0, _S594[i32(0)] + _S594[i32(1)]);
var _S596 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S596.primal_0 = _S274;
_S596.differential_0 = _S393;
var _S597 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S597.primal_0 = p_54;
_S597.differential_0 = _S393;
var _S598 : DiffPair_float_0;
_S598.primal_0 = 3.18547296524047852f;
_S598.differential_0 = 0.0f;
var _S599 : DiffPair_float_0;
_S599.primal_0 = _S277;
_S599.differential_0 = 0.0f;
s_bwd_prop_wavedx_0(&(_S596), &(_S597), &(_S598), &(_S599), _S595);
var _S600 : vec2<f32> = _S593 + _S596.differential_0;
var _S601 : vec2<f32> = p_53 * (_S272 * (vec2<f32>(0.37999999523162842f) * _S600));
var _S602 : vec2<f32> = vec2<f32>(_S271 * s_diff_sumOfValues_T_0, _S601[i32(0)] + _S601[i32(1)]);
var _S603 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S603.primal_0 = _S270;
_S603.differential_0 = _S393;
var _S604 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S604.primal_0 = p_53;
_S604.differential_0 = _S393;
var _S605 : DiffPair_float_0;
_S605.primal_0 = 2.69955348968505859f;
_S605.differential_0 = 0.0f;
var _S606 : DiffPair_float_0;
_S606.primal_0 = _S273;
_S606.differential_0 = 0.0f;
s_bwd_prop_wavedx_0(&(_S603), &(_S604), &(_S605), &(_S606), _S602);
var _S607 : vec2<f32> = _S600 + _S603.differential_0;
var _S608 : vec2<f32> = p_52 * (_S268 * (vec2<f32>(0.37999999523162842f) * _S607));
var _S609 : vec2<f32> = vec2<f32>(_S267 * s_diff_sumOfValues_T_0, _S608[i32(0)] + _S608[i32(1)]);
var _S610 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S610.primal_0 = _S266;
_S610.differential_0 = _S393;
var _S611 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S611.primal_0 = p_52;
_S611.differential_0 = _S393;
var _S612 : DiffPair_float_0;
_S612.primal_0 = 2.28775739669799805f;
_S612.differential_0 = 0.0f;
var _S613 : DiffPair_float_0;
_S613.primal_0 = _S269;
_S613.differential_0 = 0.0f;
s_bwd_prop_wavedx_0(&(_S610), &(_S611), &(_S612), &(_S613), _S609);
var _S614 : vec2<f32> = _S607 + _S610.differential_0;
var _S615 : vec2<f32> = p_51 * (_S264 * (vec2<f32>(0.37999999523162842f) * _S614));
var _S616 : vec2<f32> = vec2<f32>(_S263 * s_diff_sumOfValues_T_0, _S615[i32(0)] + _S615[i32(1)]);
var _S617 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S617.primal_0 = _S262;
_S617.differential_0 = _S393;
var _S618 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S618.primal_0 = p_51;
_S618.differential_0 = _S393;
var _S619 : DiffPair_float_0;
_S619.primal_0 = 1.93877744674682617f;
_S619.differential_0 = 0.0f;
var _S620 : DiffPair_float_0;
_S620.primal_0 = _S265;
_S620.differential_0 = 0.0f;
s_bwd_prop_wavedx_0(&(_S617), &(_S618), &(_S619), &(_S620), _S616);
var _S621 : vec2<f32> = _S614 + _S617.differential_0;
var _S622 : vec2<f32> = p_50 * (_S260 * (vec2<f32>(0.37999999523162842f) * _S621));
var _S623 : vec2<f32> = vec2<f32>(_S259 * s_diff_sumOfValues_T_0, _S622[i32(0)] + _S622[i32(1)]);
var _S624 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S624.primal_0 = _S258;
_S624.differential_0 = _S393;
var _S625 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S625.primal_0 = p_50;
_S625.differential_0 = _S393;
var _S626 : DiffPair_float_0;
_S626.primal_0 = 1.64303183555603027f;
_S626.differential_0 = 0.0f;
var _S627 : DiffPair_float_0;
_S627.primal_0 = _S261;
_S627.differential_0 = 0.0f;
s_bwd_prop_wavedx_0(&(_S624), &(_S625), &(_S626), &(_S627), _S623);
var _S628 : vec2<f32> = _S621 + _S624.differential_0;
var _S629 : vec2<f32> = p_49 * (_S256 * (vec2<f32>(0.37999999523162842f) * _S628));
var _S630 : vec2<f32> = vec2<f32>(_S255 * s_diff_sumOfValues_T_0, _S629[i32(0)] + _S629[i32(1)]);
var _S631 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S631.primal_0 = _S254;
_S631.differential_0 = _S393;
var _S632 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S632.primal_0 = p_49;
_S632.differential_0 = _S393;
var _S633 : DiffPair_float_0;
_S633.primal_0 = 1.39239990711212158f;
_S633.differential_0 = 0.0f;
var _S634 : DiffPair_float_0;
_S634.primal_0 = _S257;
_S634.differential_0 = 0.0f;
s_bwd_prop_wavedx_0(&(_S631), &(_S632), &(_S633), &(_S634), _S630);
var _S635 : vec2<f32> = _S628 + _S631.differential_0;
var _S636 : vec2<f32> = p_48 * (_S252 * (vec2<f32>(0.37999999523162842f) * _S635));
var _S637 : vec2<f32> = vec2<f32>(_S251 * s_diff_sumOfValues_T_0, _S636[i32(0)] + _S636[i32(1)]);
var _S638 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S638.primal_0 = _S250;
_S638.differential_0 = _S393;
var _S639 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S639.primal_0 = p_48;
_S639.differential_0 = _S393;
var _S640 : DiffPair_float_0;
_S640.primal_0 = 1.1799999475479126f;
_S640.differential_0 = 0.0f;
var _S641 : DiffPair_float_0;
_S641.primal_0 = _S253;
_S641.differential_0 = 0.0f;
s_bwd_prop_wavedx_0(&(_S638), &(_S639), &(_S640), &(_S641), _S637);
var _S642 : vec2<f32> = _S635 + _S638.differential_0;
var _S643 : vec2<f32> = p_47 * (vec2<f32>(0.37999999523162842f) * _S642);
var _S644 : vec2<f32> = vec2<f32>(s_diff_sumOfValues_T_0, _S643[i32(0)] + _S643[i32(1)]);
var _S645 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S645.primal_0 = (*dpposition_3).primal_0;
_S645.differential_0 = _S393;
var _S646 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S646.primal_0 = p_47;
_S646.differential_0 = _S393;
var _S647 : DiffPair_float_0;
_S647.primal_0 = 1.0f;
_S647.differential_0 = 0.0f;
var _S648 : DiffPair_float_0;
_S648.primal_0 = _S248;
_S648.differential_0 = 0.0f;
s_bwd_prop_wavedx_0(&(_S645), &(_S646), &(_S647), &(_S648), _S644);
var _S649 : f32 = 0.10000000149011612f * (_S397.differential_0 + _S403.differential_0 + _S410.differential_0 + _S417.differential_0 + _S424.differential_0 + _S431.differential_0 + _S438.differential_0 + _S445.differential_0 + _S452.differential_0 + _S459.differential_0 + _S466.differential_0 + _S473.differential_0 + _S480.differential_0 + _S487.differential_0 + _S494.differential_0 + _S501.differential_0 + _S508.differential_0 + _S515.differential_0 + _S522.differential_0 + _S529.differential_0 + _S536.differential_0 + _S543.differential_0 + _S550.differential_0 + _S557.differential_0 + _S564.differential_0 + _S571.differential_0 + _S578.differential_0 + _S585.differential_0 + _S592.differential_0 + _S599.differential_0 + _S606.differential_0 + _S613.differential_0 + _S620.differential_0 + _S627.differential_0 + _S634.differential_0 + _S641.differential_0 + _S648.differential_0);
var _S650 : DiffPair_vectorx3Cfloatx2C2x3E_0;
_S650.primal_0 = (*dpposition_3).primal_0;
_S650.differential_0 = _S393;
s_bwd_length_impl_0(&(_S650), _S649);
var _S651 : vec2<f32> = _S642 + _S645.differential_0 + _S650.differential_0;
(*dpposition_3).primal_0 = (*dpposition_3).primal_0;
(*dpposition_3).differential_0 = _S651;
return;
}
fn s_bwd_getwaves_0( _S652 : ptr<function, DiffPair_vectorx3Cfloatx2C2x3E_0>, _S653 : f32)
{
var _S654 : s_bwd_prop_getwaves_Intermediates_0;
var _S655 : f32 = s_primal_ctx_getwaves_0((*_S652).primal_0, &(_S654));
s_bwd_prop_getwaves_0(&((*_S652)), _S653, _S654);
return;
}
fn normal_1( pos_2 : vec2<f32>, e_0 : f32, depth_1 : f32) -> vec3<f32>
{
var _S656 : vec2<f32> = vec2<f32>(0.0f);
var diffPos_0 : DiffPair_vectorx3Cfloatx2C2x3E_0;
diffPos_0.primal_0 = pos_2;
diffPos_0.differential_0 = _S656;
s_bwd_getwaves_0(&(diffPos_0), 1.0f);
return normalize(vec3<f32>(- diffPos_0.differential_0.x, 1.0f, - diffPos_0.differential_0.y));
}
fn imageMain_0( dispatchThreadID_0 : vec2<u32>, screenSize_0 : vec2<i32>) -> vec4<f32>
{
var ray_0 : vec3<f32> = getRay_0(vec2<f32>(dispatchThreadID_0.xy), vec2<f32>(f32(screenSize_0.x), f32(screenSize_0.y)));
if((ray_0.y) >= 0.0f)
{
return vec4<f32>(aces_tonemap_0((getAtmosphere_0(ray_0) + vec3<f32>(getSun_0(ray_0))) * vec3<f32>(2.0f)), 1.0f);
}
var origin_1 : vec3<f32> = vec3<f32>(globalParams_0.time_0 * 2.0f, 1.5f, 1.0f);
const _S657 : vec3<f32> = vec3<f32>(0.0f, 1.0f, 0.0f);
var dist_0 : f32 = raymarchwater_0(origin_1, origin_1 + ray_0 * vec3<f32>(intersectPlane_0(origin_1, ray_0, vec3<f32>(0.0f, 0.0f, 0.0f), _S657)), origin_1 + ray_0 * vec3<f32>(intersectPlane_0(origin_1, ray_0, vec3<f32>(0.0f, -1.0f, 0.0f), _S657)), 1.0f);
var waterHitPos_0 : vec3<f32> = origin_1 + ray_0 * vec3<f32>(dist_0);
var N_0 : vec3<f32> = mix(normal_1(waterHitPos_0.xz, 0.00999999977648258f, 1.0f), _S657, vec3<f32>((0.80000001192092896f * min(1.0f, sqrt(dist_0 * 0.00999999977648258f) * 1.10000002384185791f))));
var fresnel_0 : f32 = 0.03999999910593033f + 0.95999997854232788f * pow(1.0f - max(0.0f, dot((vec3<f32>(0) - N_0), ray_0)), 5.0f);
var _S658 : vec3<f32> = normalize(reflect(ray_0, N_0));
var R_0 : vec3<f32> = _S658;
R_0[i32(1)] = abs(_S658.y);
return vec4<f32>(aces_tonemap_0((vec3<f32>(fresnel_0) * (getAtmosphere_0(R_0) + vec3<f32>(getSun_0(R_0))) + vec3<f32>(0.02930000051856041f, 0.0697999969124794f, 0.17170000076293945f) * vec3<f32>(0.10000000149011612f) * vec3<f32>((0.20000000298023224f + (waterHitPos_0.y + 1.0f)))) * vec3<f32>(2.0f)), 1.0f);
}
@compute
@workgroup_size(16, 16, 1)
fn imageMain(@builtin(global_invocation_id) dispatchThreadID_1 : vec3<u32>)
{
var width_0 : u32 = u32(0);
var height_1 : u32 = u32(0);
{var dim = textureDimensions((outputTexture_0));((width_0)) = dim.x;((height_1)) = dim.y;};
var _S659 : vec2<u32> = dispatchThreadID_1.xy;
var color_1 : vec4<f32> = imageMain_0(_S659, vec2<i32>(i32(width_0), i32(height_1)));
var _S660 : bool;
if((dispatchThreadID_1.x) >= width_0)
{
_S660 = true;
}
else
{
_S660 = (dispatchThreadID_1.y) >= height_1;
}
if(_S660)
{
return;
}
textureStore((outputTexture_0), (_S659), (color_1));
return;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment