Bump github/codeql-action from 3.27.1 to 3.27.4
[glslang.git] / Test / spv.1.4.OpSelect.frag
blobcfbf337a298d7d8a8e263ae47d5a8d0918f51f85
1 #version 450
3 struct S1 {
4     float a;
5     int b;
6 };
8 layout(location = 0) flat in S1 in1;
9 layout(location = 2) flat in S1 in2;
10 layout(location = 4) flat in int cond;
12 layout(location = 0) out float outv;
14 void fun1(){}
15 void fun2(){}
17 void main()
19     // glslang will only make OpSelect for very trivial looking expressions
21     float f1 = 1.0;
22     float f2 = 2.0;
23     outv = cond < 8 ? f1 : f2;           // in all versions
25     ivec4 iv1 = ivec4(f1);
26     ivec4 iv2 = ivec4(f2);
27     outv *= (cond > 0 ? iv1 : iv2).z;     // in all versions, but in 1.4 as scalar condition, not smeared ala mix()
29     mat3 m1 = mat3(1.0);
30     mat3 m2 = mat3(2.0);
31     outv *= (cond < 20 ? m1 : m2)[2][1];  // in 1.4, but not before
33     S1 fv = cond > 5 ? in1 : in2;         // in 1.4, but not before
34     outv *= fv.a;
36     cond > 0 ? fun1() : fun2();           // not allowed by any version