// CNN v2 Static Features Compute Shader // Generates 7D features + bias: [R, G, B, D, uv.x, uv.y, sin10_x, 1.0] @group(0) @binding(0) var input_tex: texture_2d; @group(0) @binding(1) var input_tex_mip1: texture_2d; @group(0) @binding(2) var input_tex_mip2: texture_2d; @group(0) @binding(3) var depth_tex: texture_2d; @group(0) @binding(4) var output_tex: texture_storage_2d; @compute @workgroup_size(8, 8) fn main(@builtin(global_invocation_id) id: vec3) { let coord = vec2(id.xy); let dims = textureDimensions(input_tex); if (coord.x >= i32(dims.x) || coord.y >= i32(dims.y)) { return; } // Sample RGBA from mip 0 let rgba = textureLoad(input_tex, coord, 0); let r = rgba.r; let g = rgba.g; let b = rgba.b; // Sample depth let d = textureLoad(depth_tex, coord, 0).r; // UV coordinates (normalized [0,1]) let uv_x = f32(coord.x) / f32(dims.x); let uv_y = f32(coord.y) / f32(dims.y); // Multi-frequency position encoding let sin10_x = sin(10.0 * uv_x); // Bias dimension (always 1.0) let bias = 1.0; // Pack 8×f16 into 4×u32 (rgba32uint) let packed = vec4( pack2x16float(vec2(r, g)), pack2x16float(vec2(b, d)), pack2x16float(vec2(uv_x, uv_y)), pack2x16float(vec2(sin10_x, bias)) ); textureStore(output_tex, coord, packed); }