// Benchmark case: no screen-space derivatives used (deriv-on vs deriv-off should match).

float wave_mix(float a, float b, float phase) {
    float w = sin(phase) * 0.5f + cos(phase * 0.73f) * 0.5f;
    return a * w + b * (1.0f - w);
}

float rational_shape(float x, float denom) {
    float num = x * x + 1.0f;
    return num / (denom + 2.0f);
}

float soften(float t) {
    return t / (1.0f + t * t);
}

shader main(out float o) {
    float x1 = global_value<x1>;
    float x2 = global_value<x2>;
    float u = global_value<uv_u>;
    float v = global_value<uv_v>;
    float p = wave_mix(x1, x2, u + v);
    float q = rational_shape(p, x2);
    o = soften(q) + log(1.0f + u * v) * 0.1f;
}