From f74bcd843c631f82daefe543fca7741fb5bb71f4 Mon Sep 17 00:00:00 2001 From: skal Date: Fri, 20 Mar 2026 08:42:07 +0100 Subject: feat(cnn_v3): G-buffer phase 1 + training infrastructure MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit G-buffer (Phase 1): - Add NodeTypes GBUF_ALBEDO/DEPTH32/R8/RGBA32UINT to NodeRegistry - GBufferEffect: MRT raster pass (albedo+normal_mat+depth) + pack compute - Shaders: gbuf_raster.wgsl (MRT), gbuf_pack.wgsl (feature packing, 32B/px) - Shadow/SDF passes stubbed (placeholder textures), CMake integration deferred Training infrastructure (Phase 2): - blender_export.py: headless EXR export with all G-buffer render passes - pack_blender_sample.py: EXR → per-channel PNGs (oct-normals, 1/z depth) - pack_photo_sample.py: photo → zero-filled G-buffer sample layout handoff(Gemini): G-buffer phases 3-5 remain (U-Net shaders, CNNv3Effect, parity) --- src/gpu/sequence.cc | 27 ++++++++++++++++++++++++++- src/gpu/sequence.h | 5 +++++ 2 files changed, 31 insertions(+), 1 deletion(-) (limited to 'src/gpu') diff --git a/src/gpu/sequence.cc b/src/gpu/sequence.cc index 1e3be6c..91ca187 100644 --- a/src/gpu/sequence.cc +++ b/src/gpu/sequence.cc @@ -181,6 +181,30 @@ void NodeRegistry::create_texture(Node& node) { usage = (WGPUTextureUsage)(WGPUTextureUsage_StorageBinding | WGPUTextureUsage_TextureBinding); break; + case NodeType::GBUF_ALBEDO: + format = WGPUTextureFormat_RGBA16Float; + usage = (WGPUTextureUsage)(WGPUTextureUsage_RenderAttachment | + WGPUTextureUsage_TextureBinding | + WGPUTextureUsage_StorageBinding | + WGPUTextureUsage_CopySrc); + break; + case NodeType::GBUF_DEPTH32: + format = WGPUTextureFormat_Depth32Float; + usage = (WGPUTextureUsage)(WGPUTextureUsage_RenderAttachment | + WGPUTextureUsage_TextureBinding | + WGPUTextureUsage_CopySrc); + break; + case NodeType::GBUF_R8: + format = WGPUTextureFormat_RGBA8Unorm; + usage = (WGPUTextureUsage)(WGPUTextureUsage_StorageBinding | + WGPUTextureUsage_TextureBinding | + WGPUTextureUsage_RenderAttachment); + break; + case NodeType::GBUF_RGBA32UINT: + format = WGPUTextureFormat_RGBA32Uint; + usage = (WGPUTextureUsage)(WGPUTextureUsage_StorageBinding | + WGPUTextureUsage_TextureBinding); + break; } WGPUTextureDescriptor desc = {}; @@ -201,7 +225,8 @@ void NodeRegistry::create_texture(Node& node) { view_desc.mipLevelCount = 1; view_desc.baseArrayLayer = 0; view_desc.arrayLayerCount = 1; - view_desc.aspect = (node.type == NodeType::DEPTH24) + view_desc.aspect = (node.type == NodeType::DEPTH24 || + node.type == NodeType::GBUF_DEPTH32) ? WGPUTextureAspect_DepthOnly : WGPUTextureAspect_All; diff --git a/src/gpu/sequence.h b/src/gpu/sequence.h index a515d1f..4592082 100644 --- a/src/gpu/sequence.h +++ b/src/gpu/sequence.h @@ -20,6 +20,11 @@ enum class NodeType { F16X8, DEPTH24, COMPUTE_F32, + // G-buffer types for CNN v3 + GBUF_ALBEDO, // rgba16float: RENDER_ATTACHMENT | TEXTURE_BINDING | STORAGE_BINDING | COPY_SRC + GBUF_DEPTH32, // depth32float: RENDER_ATTACHMENT | TEXTURE_BINDING | COPY_SRC + GBUF_R8, // rgba8unorm (4ch for compat): STORAGE_BINDING | TEXTURE_BINDING | RENDER_ATTACHMENT + GBUF_RGBA32UINT, // rgba32uint: STORAGE_BINDING | TEXTURE_BINDING }; struct Node { -- cgit v1.2.3