summaryrefslogtreecommitdiff
path: root/workspaces/main/shaders/cnn/cnn_layer.wgsl
diff options
context:
space:
mode:
authorskal <pascal.massimino@gmail.com>2026-02-10 21:11:05 +0100
committerskal <pascal.massimino@gmail.com>2026-02-10 21:11:05 +0100
commit7a05f4d33b611ba1e9b6c68e0d0bd67d6ea011ee (patch)
treea88109bee56197ffca8d7aacd07a878fae502d11 /workspaces/main/shaders/cnn/cnn_layer.wgsl
parent2fbfc406abe5a42f45face9b07a91ec64c0d4f78 (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.wgsl5
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]