From 7a05f4d33b611ba1e9b6c68e0d0bd67d6ea011ee Mon Sep 17 00:00:00 2001 From: skal Date: Tue, 10 Feb 2026 21:11:05 +0100 Subject: 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 --- workspaces/main/shaders/cnn/cnn_layer.wgsl | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'workspaces/main/shaders/cnn/cnn_layer.wgsl') 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(0.2126, 0.7152, 0.0722)); var result = vec4(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(gray_out, gray_out, gray_out, 1.0); return mix(original_raw, result, params.blend_amount); // [0,1] -- cgit v1.2.3