From a10cabbe3a5ae05730c2e76493e42554ee6037ba Mon Sep 17 00:00:00 2001 From: skal Date: Fri, 20 Mar 2026 09:22:18 +0100 Subject: feat(cnn_v3): Phase 1 complete - GBufferEffect integrated + HOWTO playbook - Wire GBufferEffect into demo build: assets.txt, DemoSourceLists.cmake, demo_effects.h, shaders.h/cc. ShaderComposer::Compose() applied to gbuf_raster.wgsl (resolves #include "common_uniforms"). - Add GBufferEffect construction test. 35/35 passing. - Write cnn_v3/docs/HOWTO.md: G-buffer wiring, training data prep, training plan, per-pixel validation workflow, phase status table, troubleshooting guide. - Add project hooks: remind to update HOWTO.md on cnn_v3/ edits; warn on direct str_view(*_wgsl) usage bypassing ShaderComposer. - Update PROJECT_CONTEXT.md and TODO.md: Phase 1 done, Phase 3 (WGSL U-Net shaders) is next active. handoff(Gemini): CNN v3 Phase 3 is next - WGSL enc/dec/bottleneck/FiLM shaders in cnn_v3/shaders/. See cnn_v3/docs/CNN_V3.md Architecture section and cnn_v3/docs/HOWTO.md section 3 for spec. GBufferEffect outputs feat_tex0 + feat_tex1 (rgba32uint, 20ch, 32 bytes/pixel). C++ CNNv3Effect (Phase 4) takes those as input nodes. --- src/effects/shaders.cc | 2 ++ src/effects/shaders.h | 4 ++++ src/gpu/demo_effects.h | 3 +++ src/tests/gpu/test_demo_effects.cc | 5 +++++ 4 files changed, 14 insertions(+) (limited to 'src') diff --git a/src/effects/shaders.cc b/src/effects/shaders.cc index 8a81bb0..1adbff5 100644 --- a/src/effects/shaders.cc +++ b/src/effects/shaders.cc @@ -107,6 +107,8 @@ const char* scene2_shader_wgsl = SafeGetAsset(AssetId::ASSET_SHADER_SCENE2); const char* scratch_shader_wgsl = SafeGetAsset(AssetId::ASSET_SHADER_SCRATCH); 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); // Compute shaders const char* gen_noise_compute_wgsl = diff --git a/src/effects/shaders.h b/src/effects/shaders.h index 527a8a3..cf095fb 100644 --- a/src/effects/shaders.h +++ b/src/effects/shaders.h @@ -20,6 +20,10 @@ extern const char* scratch_shader_wgsl; extern const char* ntsc_rgb_shader_wgsl; extern const char* ntsc_yiq_shader_wgsl; +// CNN v3 G-buffer shaders +extern const char* gbuf_raster_wgsl; +extern const char* gbuf_pack_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 9d794aa..91ab6f2 100644 --- a/src/gpu/demo_effects.h +++ b/src/gpu/demo_effects.h @@ -32,6 +32,9 @@ #include "effects/scratch_effect.h" #include "effects/ntsc_effect.h" +// CNN v3 G-buffer +#include "../../cnn_v3/src/gbuffer_effect.h" + // TODO: Port CNN effects // #include "../../cnn_v1/src/cnn_v1_effect.h" // #include "../../cnn_v2/src/cnn_v2_effect.h" diff --git a/src/tests/gpu/test_demo_effects.cc b/src/tests/gpu/test_demo_effects.cc index 9d8cb7d..c2588f2 100644 --- a/src/tests/gpu/test_demo_effects.cc +++ b/src/tests/gpu/test_demo_effects.cc @@ -79,6 +79,11 @@ static void test_effects() { {"NtscYiq", std::make_shared( fixture.ctx(), std::vector{"source"}, std::vector{"sink"}, 0.0f, 1000.0f)}, + {"GBufferEffect", + std::make_shared( + fixture.ctx(), std::vector{"source"}, + std::vector{"gbuf_feat0", "gbuf_feat1"}, 0.0f, + 1000.0f)}, }; int passed = 0; -- cgit v1.2.3