mirror of
https://github.com/KhronosGroup/glslang
synced 2024-11-08 11:30:06 +00:00
38 lines
878 B
GLSL
38 lines
878 B
GLSL
|
#version 450
|
||
|
|
||
|
struct S1 {
|
||
|
float a;
|
||
|
int b;
|
||
|
};
|
||
|
|
||
|
layout(location = 0) flat in S1 in1;
|
||
|
layout(location = 2) flat in S1 in2;
|
||
|
layout(location = 4) flat in int cond;
|
||
|
|
||
|
layout(location = 0) out float outv;
|
||
|
|
||
|
void fun1(){}
|
||
|
void fun2(){}
|
||
|
|
||
|
void main()
|
||
|
{
|
||
|
// glslang will only make OpSelect for very trivial looking expressions
|
||
|
|
||
|
float f1 = 1.0;
|
||
|
float f2 = 2.0;
|
||
|
outv = cond < 8 ? f1 : f2; // in all versions
|
||
|
|
||
|
ivec4 iv1 = ivec4(f1);
|
||
|
ivec4 iv2 = ivec4(f2);
|
||
|
outv *= (cond > 0 ? iv1 : iv2).z; // in all versions, but in 1.4 as scalar condition, not smeared ala mix()
|
||
|
|
||
|
mat3 m1 = mat3(1.0);
|
||
|
mat3 m2 = mat3(2.0);
|
||
|
outv *= (cond < 20 ? m1 : m2)[2][1]; // in 1.4, but not before
|
||
|
|
||
|
S1 fv = cond > 5 ? in1 : in2; // in 1.4, but not before
|
||
|
outv *= fv.a;
|
||
|
|
||
|
cond > 0 ? fun1() : fun2(); // not allowed by any version
|
||
|
}
|