#version 450

struct S {
    int a;
};

uniform ubuf {
    S s;
};

uniform sampler2D s2d;

layout(location = 0) in vec4 inv;
layout(location = 0) out vec4 outv;

vec4 foo(S s)
{
    vec4 r = s.a * inv;
    ++r;
    if (r.x > 3.0)
        --r;
    else
        r *= 2;

    return r;
}

float testBranch(float x, float y)
{
    float result = 0;
    bool b = x > 0;

    // branch with load
    if (b) {
        result += 1;
    }
    else {
        result -= 1;
    }

    // branch with expression
    if (x > y) {
        result += x - y;
    }

    // selection with load
    result += b ?
        1 : -1;

    // selection with expression
    result += x < y ? 
        y : 
        float(b);

    return result;
}

void main()
{
    outv = foo(s);
    outv += testBranch(inv.x, inv.y);
    outv += texture(s2d, vec2(0.5));

    switch (s.a) {
    case 10:
        ++outv;
        break;
    case 20:
        outv = 2 * outv;
        ++outv;
        break;
    default:
        --outv;
        break;
    }

    for (int i = 0; i < 10; ++i)
        outv *= 3.0;

    outv.x < 10.0 ?
        outv = sin(outv) :
        outv = cos(outv);
}