diff options
| author | skal <pascal.massimino@gmail.com> | 2026-02-10 21:11:05 +0100 |
|---|---|---|
| committer | skal <pascal.massimino@gmail.com> | 2026-02-10 21:11:05 +0100 |
| commit | 7a05f4d33b611ba1e9b6c68e0d0bd67d6ea011ee (patch) | |
| tree | a88109bee56197ffca8d7aacd07a878fae502d11 /workspaces/main/shaders/cnn/cnn_layer.wgsl | |
| parent | 2fbfc406abe5a42f45face9b07a91ec64c0d4f78 (diff) | |
refactor: Optimize CNN grayscale computation
Compute gray once per fragment using dot() instead of per-layer.
Pass gray as f32 parameter to conv functions instead of vec4 original.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Diffstat (limited to 'workspaces/main/shaders/cnn/cnn_layer.wgsl')
| -rw-r--r-- | workspaces/main/shaders/cnn/cnn_layer.wgsl | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/workspaces/main/shaders/cnn/cnn_layer.wgsl b/workspaces/main/shaders/cnn/cnn_layer.wgsl index 3f970df..e67ad31 100644 --- a/workspaces/main/shaders/cnn/cnn_layer.wgsl +++ b/workspaces/main/shaders/cnn/cnn_layer.wgsl @@ -32,6 +32,7 @@ struct CNNLayerParams { let uv = p.xy / uniforms.resolution; let original_raw = textureSample(original_input, smplr, uv); let original = (original_raw - 0.5) * 2.0; // Normalize to [-1,1] + let gray = dot(original.rgb, vec3<f32>(0.2126, 0.7152, 0.0722)); var result = vec4<f32>(0.0); // Layer 0: 7→4 (RGBD output, normalizes [0,1] input) @@ -42,12 +43,12 @@ struct CNNLayerParams { } else if (params.layer_index == 1) { result = cnn_conv5x5_7to4(txt, smplr, uv, uniforms.resolution, - original, weights_layer1); + gray, weights_layer1); result = cnn_tanh(result); // Keep in [-1,1] } else if (params.layer_index == 2) { let gray_out = cnn_conv3x3_7to1(txt, smplr, uv, uniforms.resolution, - original, weights_layer2); + gray, weights_layer2); // gray_out already in [0,1] from clipped training result = vec4<f32>(gray_out, gray_out, gray_out, 1.0); return mix(original_raw, result, params.blend_amount); // [0,1] |
