summaryrefslogtreecommitdiff
path: root/cnn_v3/shaders
diff options
context:
space:
mode:
authorskal <pascal.massimino@gmail.com>2026-03-22 19:58:04 +0100
committerskal <pascal.massimino@gmail.com>2026-03-22 19:58:04 +0100
commit9bf9b0aa0573f77bd667e6976a8bb413153daa1d (patch)
treec204a3ccf604ebb3cc28cda1b35f2a6aecc9b27e /cnn_v3/shaders
parent053f455132003267fbe6c4822124f9e447a646a6 (diff)
feat(cnn_v3): GBufDeferredEffect — simple deferred render (albedo * shadow)
New effect unpacks feat_tex0/feat_tex1 and outputs albedo * shadow. Replaces CNNv3Effect in cnn_v3_test sequence until training is complete. 37/37 tests passing. handoff(Gemini): GBufDeferredEffect wired in timeline; CNN v3 pipeline: GBufferEffect → GBufDeferredEffect → sink.
Diffstat (limited to 'cnn_v3/shaders')
-rw-r--r--cnn_v3/shaders/gbuf_deferred.wgsl39
1 files changed, 39 insertions, 0 deletions
diff --git a/cnn_v3/shaders/gbuf_deferred.wgsl b/cnn_v3/shaders/gbuf_deferred.wgsl
new file mode 100644
index 0000000..959ab60
--- /dev/null
+++ b/cnn_v3/shaders/gbuf_deferred.wgsl
@@ -0,0 +1,39 @@
+// G-buffer deferred render — albedo * shadow
+// Reads feat_tex0 (rgba32uint, f16 geometric) and feat_tex1 (rgba32uint, u8 context).
+// Unpacks albedo and shadow and outputs albedo * shadow.
+
+@group(0) @binding(0) var feat_tex0: texture_2d<u32>;
+@group(0) @binding(1) var feat_tex1: texture_2d<u32>;
+@group(0) @binding(2) var<uniform> uniforms: GBufDeferredUniforms;
+
+struct GBufDeferredUniforms {
+ resolution: vec2f,
+}
+
+@vertex
+fn vs_main(@builtin(vertex_index) vid: u32) -> @builtin(position) vec4f {
+ let x = f32((vid & 1u) << 2u) - 1.0;
+ let y = f32((vid & 2u) << 1u) - 1.0;
+ return vec4f(x, y, 0.0, 1.0);
+}
+
+@fragment
+fn fs_main(@builtin(position) pos: vec4f) -> @location(0) vec4f {
+ let coord = vec2i(pos.xy);
+
+ // feat_tex0 layout:
+ // [0] pack2x16float(albedo.r, albedo.g)
+ // [1] pack2x16float(albedo.b, normal.x)
+ let t0 = textureLoad(feat_tex0, coord, 0);
+ let rg = unpack2x16float(t0.x);
+ let bx = unpack2x16float(t0.y);
+ let albedo = vec3f(rg.x, rg.y, bx.x);
+
+ // feat_tex1 layout:
+ // [2] pack4x8unorm(mip2.g, mip2.b, shadow, transp)
+ let t1 = textureLoad(feat_tex1, coord, 0);
+ let ctx2 = unpack4x8unorm(t1.z);
+ let shadow = ctx2.z; // shadow is the third byte
+
+ return vec4f(albedo * shadow, 1.0);
+}