summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorskal <pascal.massimino@gmail.com>2026-03-21 08:52:53 +0100
committerskal <pascal.massimino@gmail.com>2026-03-21 08:52:53 +0100
commitfe008df92f7a68d81c9bedb4328da7001e0775f0 (patch)
tree2c0182ef4df3b682ee5aa3ab22dcf3e2af08a4ed /src
parenta4ff60233fce134e8f779ef001872dfd9a8f9923 (diff)
feat(cnn_v3): Phase 4 complete — CNNv3Effect C++ + FiLM uniform upload
- cnn_v3/src/cnn_v3_effect.{h,cc}: full Effect subclass with 5 compute passes (enc0→enc1→bottleneck→dec1→dec0), shared weights storage buffer, per-pass uniform buffers, set_film_params() API - Fixed WGSL/C++ struct alignment: vec3u has align=16, so CnnV3Params4ch is 64 bytes and CnnV3ParamsEnc1 is 96 bytes (not 48/80) - Weight offsets computed as explicit formulas (e.g. 20*4*9+4) for clarity - Registered in CMake, shaders.h/cc, demo_effects.h, test_demo_effects.cc - 35/35 tests pass handoff(Gemini): CNN v3 Phase 5 next — parity validation (Python ref vs WGSL)
Diffstat (limited to 'src')
-rw-r--r--src/effects/shaders.cc5
-rw-r--r--src/effects/shaders.h7
-rw-r--r--src/gpu/demo_effects.h3
-rw-r--r--src/tests/gpu/test_demo_effects.cc5
4 files changed, 19 insertions, 1 deletions
diff --git a/src/effects/shaders.cc b/src/effects/shaders.cc
index 22c6a6d..f64e135 100644
--- a/src/effects/shaders.cc
+++ b/src/effects/shaders.cc
@@ -117,6 +117,11 @@ const char* ntsc_rgb_shader_wgsl = SafeGetAsset(AssetId::ASSET_SHADER_NTSC_RGB);
const char* ntsc_yiq_shader_wgsl = SafeGetAsset(AssetId::ASSET_SHADER_NTSC_YIQ);
const char* gbuf_raster_wgsl = SafeGetAsset(AssetId::ASSET_SHADER_GBUF_RASTER);
const char* gbuf_pack_wgsl = SafeGetAsset(AssetId::ASSET_SHADER_GBUF_PACK);
+const char* cnn_v3_enc0_wgsl = SafeGetAsset(AssetId::ASSET_SHADER_CNN_V3_ENC0);
+const char* cnn_v3_enc1_wgsl = SafeGetAsset(AssetId::ASSET_SHADER_CNN_V3_ENC1);
+const char* cnn_v3_bottleneck_wgsl = SafeGetAsset(AssetId::ASSET_SHADER_CNN_V3_BOTTLENECK);
+const char* cnn_v3_dec1_wgsl = SafeGetAsset(AssetId::ASSET_SHADER_CNN_V3_DEC1);
+const char* cnn_v3_dec0_wgsl = SafeGetAsset(AssetId::ASSET_SHADER_CNN_V3_DEC0);
// Compute shaders
const char* gen_noise_compute_wgsl =
diff --git a/src/effects/shaders.h b/src/effects/shaders.h
index cf095fb..4a77597 100644
--- a/src/effects/shaders.h
+++ b/src/effects/shaders.h
@@ -24,6 +24,13 @@ extern const char* ntsc_yiq_shader_wgsl;
extern const char* gbuf_raster_wgsl;
extern const char* gbuf_pack_wgsl;
+// CNN v3 inference shaders
+extern const char* cnn_v3_enc0_wgsl;
+extern const char* cnn_v3_enc1_wgsl;
+extern const char* cnn_v3_bottleneck_wgsl;
+extern const char* cnn_v3_dec1_wgsl;
+extern const char* cnn_v3_dec0_wgsl;
+
// Compute shaders
extern const char* gen_noise_compute_wgsl;
extern const char* gen_perlin_compute_wgsl;
diff --git a/src/gpu/demo_effects.h b/src/gpu/demo_effects.h
index 91ab6f2..66b920c 100644
--- a/src/gpu/demo_effects.h
+++ b/src/gpu/demo_effects.h
@@ -32,8 +32,9 @@
#include "effects/scratch_effect.h"
#include "effects/ntsc_effect.h"
-// CNN v3 G-buffer
+// CNN v3 G-buffer + inference
#include "../../cnn_v3/src/gbuffer_effect.h"
+#include "../../cnn_v3/src/cnn_v3_effect.h"
// TODO: Port CNN effects
// #include "../../cnn_v1/src/cnn_v1_effect.h"
diff --git a/src/tests/gpu/test_demo_effects.cc b/src/tests/gpu/test_demo_effects.cc
index c2588f2..f5af5a9 100644
--- a/src/tests/gpu/test_demo_effects.cc
+++ b/src/tests/gpu/test_demo_effects.cc
@@ -84,6 +84,11 @@ static void test_effects() {
fixture.ctx(), std::vector<std::string>{"source"},
std::vector<std::string>{"gbuf_feat0", "gbuf_feat1"}, 0.0f,
1000.0f)},
+ {"CNNv3Effect",
+ std::make_shared<CNNv3Effect>(
+ fixture.ctx(),
+ std::vector<std::string>{"gbuf_feat0", "gbuf_feat1"},
+ std::vector<std::string>{"cnn_v3_output"}, 0.0f, 1000.0f)},
};
int passed = 0;