agx-photo 0.1.0

An open-source photo editing library with a readable, portable preset format
Documentation
// Algorithm: sRGB-to-linear conversion pass for scene-referred processing
// Canonical explanation: docs/book/src/reference/concepts/color-spaces.md
// CPU equivalent: crates/agx/src/adjust/mod.rs (srgb_to_linear)
// Bindings: storage pixels
// Entry points: main

// sRGB gamma to linear sRGB conversion compute shader.

#import common::color

@group(0) @binding(0) var<storage, read_write> pixels: array<f32>;

@compute @workgroup_size(256)
fn main(@builtin(global_invocation_id) id: vec3u, @builtin(num_workgroups) nwg: vec3u) {
    let idx = id.x + id.y * nwg.x * 256u;
    let pixel_count = arrayLength(&pixels) / 3u;
    if idx >= pixel_count { return; }
    let base = idx * 3u;
    let rgb = vec3f(pixels[base], pixels[base + 1u], pixels[base + 2u]);
    let result = common::color::srgb_to_linear(rgb);
    pixels[base] = result.x;
    pixels[base + 1u] = result.y;
    pixels[base + 2u] = result.z;
}