summaryrefslogtreecommitdiff
path: root/workspaces
diff options
context:
space:
mode:
authorskal <pascal.massimino@gmail.com>2026-02-12 15:10:17 +0100
committerskal <pascal.massimino@gmail.com>2026-02-12 15:10:17 +0100
commit8b30cadfc19647487986d14dba9ddba7908dd1d0 (patch)
treef865b42945f72bfc480e2c2a6849127bf56d1a59 /workspaces
parent1effb125973ac0948de3015be1d53ae72463858b (diff)
test_demo: Add beat-synchronized CNN post-processing with version selection
- Add --cnn-version <1|2> flag to select between CNN v1 and v2 - Implement beat_phase modulation for dynamic blend in both CNN effects - Fix CNN v2 per-layer uniform buffer sharing (each layer needs own buffer) - Fix CNN v2 y-axis orientation to match render pass convention - Add Scene1Effect as base visual layer to test_demo timeline - Reorganize CNN v2 shaders into cnn_v2/ subdirectory - Update asset paths and documentation for new shader organization Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Diffstat (limited to 'workspaces')
-rw-r--r--workspaces/main/shaders/cnn_v2/cnn_v2_compute.wgsl (renamed from workspaces/main/shaders/cnn_v2_compute.wgsl)12
-rw-r--r--workspaces/main/shaders/cnn_v2/cnn_v2_layer_0.wgsl (renamed from workspaces/main/shaders/cnn_v2_layer_0.wgsl)0
-rw-r--r--workspaces/main/shaders/cnn_v2/cnn_v2_layer_1.wgsl (renamed from workspaces/main/shaders/cnn_v2_layer_1.wgsl)0
-rw-r--r--workspaces/main/shaders/cnn_v2/cnn_v2_layer_2.wgsl (renamed from workspaces/main/shaders/cnn_v2_layer_2.wgsl)0
-rw-r--r--workspaces/main/shaders/cnn_v2/cnn_v2_layer_template.wgsl (renamed from workspaces/main/shaders/cnn_v2_layer_template.wgsl)0
-rw-r--r--workspaces/main/shaders/cnn_v2/cnn_v2_static.wgsl (renamed from workspaces/main/shaders/cnn_v2_static.wgsl)4
6 files changed, 14 insertions, 2 deletions
diff --git a/workspaces/main/shaders/cnn_v2_compute.wgsl b/workspaces/main/shaders/cnn_v2/cnn_v2_compute.wgsl
index b19a692..1e1704d 100644
--- a/workspaces/main/shaders/cnn_v2_compute.wgsl
+++ b/workspaces/main/shaders/cnn_v2/cnn_v2_compute.wgsl
@@ -9,6 +9,7 @@ struct LayerParams {
out_channels: u32,
weight_offset: u32, // Offset in f16 units
is_output_layer: u32, // 1 if final layer (sigmoid), 0 otherwise (relu)
+ blend_amount: f32, // [0,1] blend with original
}
@group(0) @binding(0) var static_features: texture_2d<u32>; // 8-channel static features
@@ -16,6 +17,7 @@ struct LayerParams {
@group(0) @binding(2) var output_tex: texture_storage_2d<rgba32uint, write>; // Current layer output
@group(0) @binding(3) var<storage, read> weights_buffer: array<u32>; // Packed f16 weights
@group(0) @binding(4) var<uniform> params: LayerParams;
+@group(0) @binding(5) var original_input: texture_2d<f32>; // Original RGB input for blending
fn unpack_static_features(coord: vec2<i32>) -> array<f32, 8> {
let packed = textureLoad(static_features, coord, 0);
@@ -133,5 +135,15 @@ fn main(@builtin(global_invocation_id) id: vec3<u32>) {
output[c] = 0.0;
}
+ // Blend with original on final layer
+ if (is_output) {
+ let original = textureLoad(original_input, coord, 0).rgb;
+ let result_rgb = vec3<f32>(output[0], output[1], output[2]);
+ let blended = mix(original, result_rgb, params.blend_amount);
+ output[0] = blended.r;
+ output[1] = blended.g;
+ output[2] = blended.b;
+ }
+
textureStore(output_tex, coord, pack_channels(output));
}
diff --git a/workspaces/main/shaders/cnn_v2_layer_0.wgsl b/workspaces/main/shaders/cnn_v2/cnn_v2_layer_0.wgsl
index 8e14957..8e14957 100644
--- a/workspaces/main/shaders/cnn_v2_layer_0.wgsl
+++ b/workspaces/main/shaders/cnn_v2/cnn_v2_layer_0.wgsl
diff --git a/workspaces/main/shaders/cnn_v2_layer_1.wgsl b/workspaces/main/shaders/cnn_v2/cnn_v2_layer_1.wgsl
index f490d13..f490d13 100644
--- a/workspaces/main/shaders/cnn_v2_layer_1.wgsl
+++ b/workspaces/main/shaders/cnn_v2/cnn_v2_layer_1.wgsl
diff --git a/workspaces/main/shaders/cnn_v2_layer_2.wgsl b/workspaces/main/shaders/cnn_v2/cnn_v2_layer_2.wgsl
index 2f9836a..2f9836a 100644
--- a/workspaces/main/shaders/cnn_v2_layer_2.wgsl
+++ b/workspaces/main/shaders/cnn_v2/cnn_v2_layer_2.wgsl
diff --git a/workspaces/main/shaders/cnn_v2_layer_template.wgsl b/workspaces/main/shaders/cnn_v2/cnn_v2_layer_template.wgsl
index 1bf6819..1bf6819 100644
--- a/workspaces/main/shaders/cnn_v2_layer_template.wgsl
+++ b/workspaces/main/shaders/cnn_v2/cnn_v2_layer_template.wgsl
diff --git a/workspaces/main/shaders/cnn_v2_static.wgsl b/workspaces/main/shaders/cnn_v2/cnn_v2_static.wgsl
index c3a2de7..dd07f19 100644
--- a/workspaces/main/shaders/cnn_v2_static.wgsl
+++ b/workspaces/main/shaders/cnn_v2/cnn_v2_static.wgsl
@@ -25,9 +25,9 @@ fn main(@builtin(global_invocation_id) id: vec3<u32>) {
// Sample depth
let d = textureLoad(depth_tex, coord, 0).r;
- // UV coordinates (normalized [0,1])
+ // UV coordinates (normalized [0,1], bottom-left origin)
let uv_x = f32(coord.x) / f32(dims.x);
- let uv_y = f32(coord.y) / f32(dims.y);
+ let uv_y = 1.0 - (f32(coord.y) / f32(dims.y));
// Multi-frequency position encoding
let sin10_x = sin(10.0 * uv_x);