Performance experiment: disable control-flow analysis.
This CL will be used to test for potential performance regressions (or improvements) that we might cause by disabling this optimization pass. It will be reverted in ~1 day. Change-Id: I26b7687c341eb6d81231406381c39869cfccf6d6 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/381259 Auto-Submit: John Stiles <johnstiles@google.com> Commit-Queue: John Stiles <johnstiles@google.com> Reviewed-by: Ethan Nicholas <ethannicholas@google.com> Reviewed-by: Brian Osman <brianosman@google.com>
This commit is contained in:
parent
c8e31ea399
commit
7a3f5506b6
@ -29,13 +29,13 @@ public:
|
||||
R"SkSL(half4 c = %s;
|
||||
half4 p = c.y < c.z ? half4(c.zy, -1.0, 0.66666668653488159) : half4(c.yz, 0.0, -0.3333333432674408);
|
||||
half4 q = c.x < p.x ? half4(p.x, c.x, p.yw) : half4(c.x, p.x, p.yz);
|
||||
;
|
||||
half eps = 9.9999997473787516e-05;
|
||||
half pmV = q.x;
|
||||
half pmC = pmV - min(q.y, q.z);
|
||||
half pmL = pmV - pmC * 0.5;
|
||||
half H = abs(q.w + (q.y - q.z) / (pmC * 6.0 + 9.9999997473787516e-05));
|
||||
half S = pmC / ((c.w + 9.9999997473787516e-05) - abs(pmL * 2.0 - c.w));
|
||||
half L = pmL / (c.w + 9.9999997473787516e-05);
|
||||
half H = abs(q.w + (q.y - q.z) / (pmC * 6.0 + eps));
|
||||
half S = pmC / ((c.w + eps) - abs(pmL * 2.0 - c.w));
|
||||
half L = pmL / (c.w + eps);
|
||||
return half4(H, S, L, c.w);
|
||||
)SkSL",
|
||||
_sample0.c_str());
|
||||
|
@ -76,7 +76,7 @@ namespace SkSL {
|
||||
// These flags allow tools like Viewer or Nanobench to override the compiler's ProgramSettings.
|
||||
bool gSkSLOptimizer = true;
|
||||
bool gSkSLInliner = true;
|
||||
bool gSkSLControlFlowAnalysis = true;
|
||||
bool gSkSLControlFlowAnalysis = false;
|
||||
|
||||
using RefKind = VariableReference::RefKind;
|
||||
|
||||
|
@ -96,14 +96,6 @@ DEF_TEST(SkRuntimeEffectInvalid_SkCapsDisallowed, r) {
|
||||
"unknown identifier 'sk_Caps'");
|
||||
}
|
||||
|
||||
DEF_TEST(SkRuntimeEffectInvalid_LateErrors, r) {
|
||||
// Errors that aren't caught until later in the compilation process (during optimize())
|
||||
test_invalid_effect(r, "half4 main() { return half4(1); return half4(0); }", "unreachable");
|
||||
test_invalid_effect(r, "half4 badFunc() {}"
|
||||
"half4 main() { return badFunc(); }",
|
||||
"without returning");
|
||||
}
|
||||
|
||||
DEF_TEST(SkRuntimeEffectInvalidColorFilters, r) {
|
||||
auto test = [r](const char* sksl) {
|
||||
auto [effect, errorText] = SkRuntimeEffect::Make(SkString(sksl));
|
||||
|
@ -1,6 +1,10 @@
|
||||
### Compilation failed:
|
||||
|
||||
error: 6: division by zero
|
||||
error: 7: division by zero
|
||||
error: 8: division by zero
|
||||
3 errors
|
||||
uniform float unknownInput;
|
||||
void main() {
|
||||
int inlineTest = 0 / 0;
|
||||
|
||||
inlineTest = (ivec4(0) / 0).x;
|
||||
|
||||
inlineTest = int(unknownInput) / 0;
|
||||
|
||||
}
|
||||
|
@ -1,4 +1,5 @@
|
||||
### Compilation failed:
|
||||
|
||||
error: 1: 'i' has not been assigned
|
||||
1 error
|
||||
void main() {
|
||||
int i;
|
||||
ivec3(i--);
|
||||
}
|
||||
|
@ -1,4 +1,2 @@
|
||||
### Compilation failed:
|
||||
|
||||
error: 3: static switch contains non-static conditional exit
|
||||
1 error
|
||||
out vec4 sk_FragColor;
|
||||
|
@ -1,7 +1,5 @@
|
||||
### Compilation failed:
|
||||
|
||||
error: 1: unreachable
|
||||
error: 2: unreachable
|
||||
error: 3: unreachable
|
||||
error: 4: unreachable
|
||||
4 errors
|
||||
void call_after_return() {
|
||||
return;
|
||||
call_after_return();
|
||||
}
|
||||
|
@ -1,4 +1 @@
|
||||
### Compilation failed:
|
||||
|
||||
error: 1: 'i' has not been assigned
|
||||
1 error
|
||||
|
@ -1,4 +1 @@
|
||||
### Compilation failed:
|
||||
|
||||
error: 1: 'x' has not been assigned
|
||||
1 error
|
||||
|
@ -1,4 +1 @@
|
||||
### Compilation failed:
|
||||
|
||||
error: 1: 'x' has not been assigned
|
||||
1 error
|
||||
|
@ -1,4 +1,2 @@
|
||||
### Compilation failed:
|
||||
|
||||
error: 7: 'x' has not been assigned
|
||||
1 error
|
||||
out vec4 sk_FragColor;
|
||||
|
@ -1,4 +1 @@
|
||||
### Compilation failed:
|
||||
|
||||
error: 1: 'r' has not been assigned
|
||||
1 error
|
||||
|
@ -1,4 +1 @@
|
||||
### Compilation failed:
|
||||
|
||||
error: 1: 'x' has not been assigned
|
||||
1 error
|
||||
|
@ -5,26 +5,26 @@ uniform vec4 colorGreen;
|
||||
vec4 main() {
|
||||
bool ok = true;
|
||||
int a = 1;
|
||||
a = 2;
|
||||
a = a + a;
|
||||
a += a;
|
||||
a = a + a;
|
||||
a += a;
|
||||
a = a + a;
|
||||
ok = a == 32;
|
||||
ok = ok && a == 32;
|
||||
int b = 10;
|
||||
b = 8;
|
||||
b = b - 2;
|
||||
b -= 2;
|
||||
b = b - 1;
|
||||
b -= 3;
|
||||
ok = ok && b == 2;
|
||||
int c = 2;
|
||||
c = 4;
|
||||
c = c * c;
|
||||
c *= c;
|
||||
c = c * 4;
|
||||
c *= 2;
|
||||
ok = ok && c == 128;
|
||||
int d = 256;
|
||||
d = 128;
|
||||
d = d / 2;
|
||||
d /= 2;
|
||||
d = d / 4;
|
||||
d /= 4;
|
||||
|
@ -3,6 +3,16 @@ out vec4 sk_FragColor;
|
||||
uniform vec4 colorRed;
|
||||
uniform vec4 colorGreen;
|
||||
vec4 main() {
|
||||
return colorGreen;
|
||||
bool _0_a = true;
|
||||
bool _1_b = false;
|
||||
bool _2_c = true;
|
||||
bool _3_d = false;
|
||||
bool _4_e = true;
|
||||
bool _5_f = false;
|
||||
bool _6_g = true;
|
||||
bool _7_h = false;
|
||||
bool _8_i = true;
|
||||
bool _9_j = false;
|
||||
return ((((((((_0_a && !_1_b) && _2_c) && !_3_d) && _4_e) && !_5_f) && _6_g) && !_7_h) && _8_i) && !_9_j ? colorGreen : colorRed;
|
||||
|
||||
}
|
||||
|
@ -5,55 +5,58 @@ uniform vec4 colorGreen;
|
||||
vec4 main() {
|
||||
bool _0_ok = true;
|
||||
float _1_x = 34.0;
|
||||
_0_ok = true;
|
||||
_0_ok = _0_ok && _1_x == 34.0;
|
||||
_1_x = 30.0;
|
||||
_0_ok = true;
|
||||
_0_ok = _0_ok && _1_x == 30.0;
|
||||
_1_x = 64.0;
|
||||
_0_ok = true;
|
||||
_0_ok = _0_ok && _1_x == 64.0;
|
||||
_1_x = 16.0;
|
||||
_0_ok = true;
|
||||
_0_ok = _0_ok && _1_x == 16.0;
|
||||
_1_x = 19.0;
|
||||
_0_ok = true;
|
||||
_0_ok = _0_ok && _1_x == 19.0;
|
||||
_1_x = 1.0;
|
||||
_0_ok = true;
|
||||
_0_ok = _0_ok && _1_x == 1.0;
|
||||
_1_x = -2.0;
|
||||
_0_ok = true;
|
||||
_0_ok = _0_ok && _1_x == -2.0;
|
||||
_1_x = 3.0;
|
||||
_0_ok = true;
|
||||
_0_ok = _0_ok && _1_x == 3.0;
|
||||
_1_x = -4.0;
|
||||
_0_ok = true;
|
||||
_0_ok = _0_ok && _1_x == -4.0;
|
||||
_1_x = 5.0;
|
||||
_0_ok = true;
|
||||
_0_ok = _0_ok && _1_x == 5.0;
|
||||
_1_x = -6.0;
|
||||
_0_ok = true;
|
||||
_0_ok = _0_ok && _1_x == -6.0;
|
||||
_1_x = 7.0;
|
||||
_0_ok = true;
|
||||
_0_ok = _0_ok && _1_x == 7.0;
|
||||
_1_x = -8.0;
|
||||
_0_ok = true;
|
||||
_0_ok = _0_ok && _1_x == -8.0;
|
||||
_1_x = 9.0;
|
||||
_0_ok = true;
|
||||
_0_ok = _0_ok && _1_x == 9.0;
|
||||
_1_x = -10.0;
|
||||
_0_ok = true;
|
||||
_0_ok = _0_ok && _1_x == -10.0;
|
||||
_1_x = 11.0;
|
||||
_0_ok = true;
|
||||
_0_ok = _0_ok && _1_x == 11.0;
|
||||
_1_x = -12.0;
|
||||
_0_ok = true;
|
||||
_0_ok = _0_ok && _1_x == -12.0;
|
||||
float _2_unknown = sqrt(4.0);
|
||||
_1_x = _2_unknown;
|
||||
_0_ok = _1_x == _2_unknown;
|
||||
_0_ok = _0_ok && _1_x == _2_unknown;
|
||||
_1_x = _2_unknown;
|
||||
_0_ok = _0_ok && _1_x == _2_unknown;
|
||||
_1_x = _2_unknown;
|
||||
_0_ok = _0_ok && _1_x == _2_unknown;
|
||||
_1_x = 0.0;
|
||||
_0_ok = _0_ok && _1_x == 0.0;
|
||||
_1_x = _2_unknown;
|
||||
_0_ok = _0_ok && _1_x == _2_unknown;
|
||||
_1_x = _2_unknown;
|
||||
_0_ok = _0_ok && _1_x == _2_unknown;
|
||||
_1_x = 0.0;
|
||||
_0_ok = _0_ok && _1_x == 0.0;
|
||||
_1_x = _2_unknown;
|
||||
_0_ok = _0_ok && _1_x == _2_unknown;
|
||||
_1_x = 0.0;
|
||||
_0_ok = _0_ok && _1_x == 0.0;
|
||||
_1_x += 1.0;
|
||||
_0_ok = _0_ok && _1_x == 1.0;
|
||||
_0_ok = _0_ok && _1_x == 1.0;
|
||||
|
@ -7,52 +7,55 @@ vec4 main() {
|
||||
int _0_unknown = int(unknownInput);
|
||||
bool _1_ok = true;
|
||||
int _2_x = 34;
|
||||
_1_ok = true;
|
||||
_1_ok = _1_ok && _2_x == 34;
|
||||
_2_x = 30;
|
||||
_1_ok = true;
|
||||
_1_ok = _1_ok && _2_x == 30;
|
||||
_2_x = 64;
|
||||
_1_ok = true;
|
||||
_1_ok = _1_ok && _2_x == 64;
|
||||
_2_x = 16;
|
||||
_1_ok = true;
|
||||
_1_ok = _1_ok && _2_x == 16;
|
||||
_2_x = 1;
|
||||
_1_ok = true;
|
||||
_1_ok = _1_ok && _2_x == 1;
|
||||
_2_x = -2;
|
||||
_1_ok = true;
|
||||
_1_ok = _1_ok && _2_x == -2;
|
||||
_2_x = 3;
|
||||
_1_ok = true;
|
||||
_1_ok = _1_ok && _2_x == 3;
|
||||
_2_x = -4;
|
||||
_1_ok = true;
|
||||
_1_ok = _1_ok && _2_x == -4;
|
||||
_2_x = 5;
|
||||
_1_ok = true;
|
||||
_1_ok = _1_ok && _2_x == 5;
|
||||
_2_x = -6;
|
||||
_1_ok = true;
|
||||
_1_ok = _1_ok && _2_x == -6;
|
||||
_2_x = 7;
|
||||
_1_ok = true;
|
||||
_1_ok = _1_ok && _2_x == 7;
|
||||
_2_x = -8;
|
||||
_1_ok = true;
|
||||
_1_ok = _1_ok && _2_x == -8;
|
||||
_2_x = 9;
|
||||
_1_ok = true;
|
||||
_1_ok = _1_ok && _2_x == 9;
|
||||
_2_x = -10;
|
||||
_1_ok = true;
|
||||
_1_ok = _1_ok && _2_x == -10;
|
||||
_2_x = 11;
|
||||
_1_ok = true;
|
||||
_1_ok = _1_ok && _2_x == 11;
|
||||
_2_x = -12;
|
||||
_1_ok = true;
|
||||
_1_ok = _1_ok && _2_x == -12;
|
||||
_2_x = _0_unknown;
|
||||
_1_ok = _2_x == _0_unknown;
|
||||
_1_ok = _1_ok && _2_x == _0_unknown;
|
||||
_2_x = _0_unknown;
|
||||
_1_ok = _1_ok && _2_x == _0_unknown;
|
||||
_2_x = _0_unknown;
|
||||
_1_ok = _1_ok && _2_x == _0_unknown;
|
||||
_2_x = 0;
|
||||
_1_ok = _1_ok && _2_x == 0;
|
||||
_2_x = _0_unknown;
|
||||
_1_ok = _1_ok && _2_x == _0_unknown;
|
||||
_2_x = _0_unknown;
|
||||
_1_ok = _1_ok && _2_x == _0_unknown;
|
||||
_2_x = 0;
|
||||
_1_ok = _1_ok && _2_x == 0;
|
||||
_2_x = _0_unknown;
|
||||
_1_ok = _1_ok && _2_x == _0_unknown;
|
||||
_2_x = 0;
|
||||
_1_ok = _1_ok && _2_x == 0;
|
||||
_2_x += 1;
|
||||
_1_ok = _1_ok && _2_x == 1;
|
||||
_1_ok = _1_ok && _2_x == 1;
|
||||
|
@ -3,6 +3,21 @@ out vec4 sk_FragColor;
|
||||
uniform vec4 colorRed;
|
||||
uniform vec4 colorGreen;
|
||||
vec4 main() {
|
||||
return colorGreen;
|
||||
bool _0_ok = true;
|
||||
int _1_x = 14;
|
||||
_0_ok = _0_ok && _1_x == 14;
|
||||
_1_x = 6;
|
||||
_0_ok = _0_ok && _1_x == 6;
|
||||
_1_x = 5;
|
||||
_0_ok = _0_ok && _1_x == 5;
|
||||
_1_x = 16;
|
||||
_0_ok = _0_ok && _1_x == 16;
|
||||
_1_x = -8;
|
||||
_0_ok = _0_ok && _1_x == -8;
|
||||
_1_x = 32;
|
||||
_0_ok = _0_ok && _1_x == 32;
|
||||
_1_x = 33;
|
||||
_0_ok = _0_ok && _1_x == 33;
|
||||
return _0_ok ? colorGreen : colorRed;
|
||||
|
||||
}
|
||||
|
@ -3,6 +3,7 @@ out vec4 sk_FragColor;
|
||||
uniform vec4 colorRed;
|
||||
uniform vec4 colorGreen;
|
||||
vec4 main() {
|
||||
return colorGreen;
|
||||
bool _0_ok = true;
|
||||
return _0_ok ? colorGreen : colorRed;
|
||||
|
||||
}
|
||||
|
@ -3,6 +3,7 @@ out vec4 sk_FragColor;
|
||||
uniform vec4 colorRed;
|
||||
uniform vec4 colorGreen;
|
||||
vec4 main() {
|
||||
return colorGreen;
|
||||
bool _0_ok = true;
|
||||
return _0_ok ? colorGreen : colorRed;
|
||||
|
||||
}
|
||||
|
@ -8,7 +8,7 @@ struct S {
|
||||
};
|
||||
vec4 main() {
|
||||
vec4 x = vec4(3.0, 2.0, 1.0, 0.0);
|
||||
x.xyz = vec3(1.0, 2.0, 3.0);
|
||||
x.xyz = x.zyx;
|
||||
S s;
|
||||
s.i = 2.0;
|
||||
s.j = 2.0;
|
||||
|
@ -6,30 +6,38 @@ uniform float unknownInput;
|
||||
bool test_int() {
|
||||
bool ok = true;
|
||||
ivec4 x = ivec4(6, 6, 7, 8);
|
||||
ok = true;
|
||||
ok = ok && x == ivec4(6, 6, 7, 8);
|
||||
x = ivec4(7, 9, 9, 9);
|
||||
ok = true;
|
||||
ok = ok && x == ivec4(7, 9, 9, 9);
|
||||
x = ivec4(9, 9, 10, 10);
|
||||
ok = true;
|
||||
ok = ok && x == ivec4(9, 9, 10, 10);
|
||||
x.xyz = ivec3(6, 6, 6);
|
||||
ok = x == ivec4(6, 6, 6, 10);
|
||||
ok = ok && x == ivec4(6, 6, 6, 10);
|
||||
x.xy = ivec2(3, 3);
|
||||
ok = ok && x == ivec4(3, 3, 6, 10);
|
||||
x = ivec4(6, 6, 6, 6);
|
||||
ok = ok && x == ivec4(6);
|
||||
x = ivec4(6, 6, 7, 8);
|
||||
ok = ok && x == ivec4(6, 6, 7, 8);
|
||||
x = ivec4(-7, -9, -9, -9);
|
||||
ok = ok && x == ivec4(-7, -9, -9, -9);
|
||||
x = ivec4(9, 9, 10, 10);
|
||||
ok = ok && x == ivec4(9, 9, 10, 10);
|
||||
x.xyz = ivec3(6, 6, 6);
|
||||
ok = ok && x == ivec4(6, 6, 6, 10);
|
||||
x.xy = ivec2(8, 8);
|
||||
ok = ok && x == ivec4(8, 8, 6, 10);
|
||||
x = ivec4(200, 100, 50, 25);
|
||||
ok = ok && x == ivec4(200, 100, 50, 25);
|
||||
x = ivec4(6, 6, 6, 6);
|
||||
ok = ok && x == ivec4(6);
|
||||
int unknown = int(unknownInput);
|
||||
x = ivec4(unknown);
|
||||
ok = ok && x == ivec4(unknown);
|
||||
x = ivec4(0);
|
||||
ok = ok && x == ivec4(0);
|
||||
x = ivec4(0);
|
||||
ok = ok && x == ivec4(0);
|
||||
x = ivec4(unknown);
|
||||
ok = ok && x == ivec4(unknown);
|
||||
x = ivec4(unknown);
|
||||
@ -43,12 +51,15 @@ bool test_int() {
|
||||
x = ivec4(unknown);
|
||||
ok = ok && x == ivec4(unknown);
|
||||
x = ivec4(0);
|
||||
ok = ok && x == ivec4(0);
|
||||
x = ivec4(0);
|
||||
ok = ok && x == ivec4(0);
|
||||
x = ivec4(unknown);
|
||||
ok = ok && x == ivec4(unknown);
|
||||
x = ivec4(unknown);
|
||||
ok = ok && x == ivec4(unknown);
|
||||
x = ivec4(0);
|
||||
ok = ok && x == ivec4(0);
|
||||
x = ivec4(unknown);
|
||||
ok = ok && x == ivec4(unknown);
|
||||
x = ivec4(unknown);
|
||||
@ -66,30 +77,38 @@ bool test_int() {
|
||||
vec4 main() {
|
||||
bool _0_ok = true;
|
||||
vec4 _1_x = vec4(6.0, 6.0, 7.0, 8.0);
|
||||
_0_ok = true;
|
||||
_0_ok = _0_ok && _1_x == vec4(6.0, 6.0, 7.0, 8.0);
|
||||
_1_x = vec4(7.0, 9.0, 9.0, 9.0);
|
||||
_0_ok = true;
|
||||
_0_ok = _0_ok && _1_x == vec4(7.0, 9.0, 9.0, 9.0);
|
||||
_1_x = vec4(9.0, 9.0, 10.0, 10.0);
|
||||
_0_ok = true;
|
||||
_0_ok = _0_ok && _1_x == vec4(9.0, 9.0, 10.0, 10.0);
|
||||
_1_x.xyz = vec3(6.0, 6.0, 6.0);
|
||||
_0_ok = _1_x == vec4(6.0, 6.0, 6.0, 10.0);
|
||||
_0_ok = _0_ok && _1_x == vec4(6.0, 6.0, 6.0, 10.0);
|
||||
_1_x.xy = vec2(3.0, 3.0);
|
||||
_0_ok = _0_ok && _1_x == vec4(3.0, 3.0, 6.0, 10.0);
|
||||
_1_x = vec4(6.0, 6.0, 6.0, 6.0);
|
||||
_0_ok = _0_ok && _1_x == vec4(6.0);
|
||||
_1_x = vec4(6.0, 6.0, 7.0, 8.0);
|
||||
_0_ok = _0_ok && _1_x == vec4(6.0, 6.0, 7.0, 8.0);
|
||||
_1_x = vec4(-7.0, -9.0, -9.0, -9.0);
|
||||
_0_ok = _0_ok && _1_x == vec4(-7.0, -9.0, -9.0, -9.0);
|
||||
_1_x = vec4(9.0, 9.0, 10.0, 10.0);
|
||||
_0_ok = _0_ok && _1_x == vec4(9.0, 9.0, 10.0, 10.0);
|
||||
_1_x.xyz = vec3(6.0, 6.0, 6.0);
|
||||
_0_ok = _0_ok && _1_x == vec4(6.0, 6.0, 6.0, 10.0);
|
||||
_1_x.xy = vec2(8.0, 8.0);
|
||||
_0_ok = _0_ok && _1_x == vec4(8.0, 8.0, 6.0, 10.0);
|
||||
_1_x = vec4(2.0, 1.0, 0.5, 0.25);
|
||||
_0_ok = _0_ok && _1_x == vec4(2.0, 1.0, 0.5, 0.25);
|
||||
_1_x = vec4(6.0, 6.0, 6.0, 6.0);
|
||||
_0_ok = _0_ok && _1_x == vec4(6.0);
|
||||
float _2_unknown = unknownInput;
|
||||
_1_x = vec4(_2_unknown);
|
||||
_0_ok = _0_ok && _1_x == vec4(_2_unknown);
|
||||
_1_x = vec4(0.0);
|
||||
_0_ok = _0_ok && _1_x == vec4(0.0);
|
||||
_1_x = vec4(0.0);
|
||||
_0_ok = _0_ok && _1_x == vec4(0.0);
|
||||
_1_x = vec4(_2_unknown);
|
||||
_0_ok = _0_ok && _1_x == vec4(_2_unknown);
|
||||
_1_x = vec4(_2_unknown);
|
||||
@ -103,12 +122,15 @@ vec4 main() {
|
||||
_1_x = vec4(_2_unknown);
|
||||
_0_ok = _0_ok && _1_x == vec4(_2_unknown);
|
||||
_1_x = vec4(0.0);
|
||||
_0_ok = _0_ok && _1_x == vec4(0.0);
|
||||
_1_x = vec4(0.0);
|
||||
_0_ok = _0_ok && _1_x == vec4(0.0);
|
||||
_1_x = vec4(_2_unknown);
|
||||
_0_ok = _0_ok && _1_x == vec4(_2_unknown);
|
||||
_1_x = vec4(_2_unknown);
|
||||
_0_ok = _0_ok && _1_x == vec4(_2_unknown);
|
||||
_1_x = vec4(0.0);
|
||||
_0_ok = _0_ok && _1_x == vec4(0.0);
|
||||
_1_x = vec4(_2_unknown);
|
||||
_0_ok = _0_ok && _1_x == vec4(_2_unknown);
|
||||
_1_x = vec4(_2_unknown);
|
||||
|
@ -6,7 +6,7 @@ uniform vec4 colorGreen;
|
||||
bool test_int() {
|
||||
int unknown = int(unknownInput);
|
||||
bool ok = true;
|
||||
ok = ivec4(unknown) == ivec4(unknown);
|
||||
ok = ok && ivec4(unknown) == ivec4(unknown);
|
||||
ok = ok && ivec4(unknown) == ivec4(unknown);
|
||||
ok = ok && ivec4(unknown) == ivec4(unknown);
|
||||
ok = ok && ivec4(unknown) == ivec4(unknown);
|
||||
@ -27,7 +27,7 @@ bool test_int() {
|
||||
vec4 main() {
|
||||
float _0_unknown = unknownInput;
|
||||
bool _1_ok = true;
|
||||
_1_ok = vec4(_0_unknown) == vec4(_0_unknown);
|
||||
_1_ok = _1_ok && vec4(_0_unknown) == vec4(_0_unknown);
|
||||
_1_ok = _1_ok && vec4(_0_unknown) == vec4(_0_unknown);
|
||||
_1_ok = _1_ok && vec4(_0_unknown) == vec4(_0_unknown);
|
||||
_1_ok = _1_ok && vec4(_0_unknown) == vec4(_0_unknown);
|
||||
|
@ -2,6 +2,32 @@
|
||||
out vec4 sk_FragColor;
|
||||
vec4 helper();
|
||||
void main() {
|
||||
sk_FragColor = vec4(0.5, 0.5, 0.5, 1.0);
|
||||
vec4 _0_helper;
|
||||
for (int _1_loop = 0;_1_loop < 1; _1_loop++) {
|
||||
int _2_temp = 1;
|
||||
switch (_2_temp) {
|
||||
case 0:
|
||||
{
|
||||
_0_helper = vec4(0.0, 0.0, 0.0, 1.0);
|
||||
continue;
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
_0_helper = vec4(0.5, 0.5, 0.5, 1.0);
|
||||
continue;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
_0_helper = vec4(1.0);
|
||||
continue;
|
||||
}
|
||||
default:
|
||||
{
|
||||
_0_helper = vec4(1.0, 0.0, 0.0, 1.0);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
sk_FragColor = _0_helper;
|
||||
|
||||
}
|
||||
|
@ -202,6 +202,7 @@ void fn6() {
|
||||
|
||||
|
||||
|
||||
false;
|
||||
|
||||
sk_FragColor.x = 0.0;
|
||||
|
||||
@ -404,6 +405,7 @@ void fn6() {
|
||||
|
||||
|
||||
|
||||
false;
|
||||
|
||||
sk_FragColor.x = 0.0;
|
||||
|
||||
@ -606,6 +608,7 @@ void fn6() {
|
||||
|
||||
|
||||
|
||||
false;
|
||||
|
||||
}
|
||||
void fn7() {
|
||||
@ -1215,6 +1218,7 @@ void fn7() {
|
||||
|
||||
|
||||
|
||||
false;
|
||||
|
||||
fn6();
|
||||
fn6();
|
||||
|
@ -202,6 +202,7 @@ void fn6() {
|
||||
|
||||
|
||||
|
||||
false;
|
||||
|
||||
sk_FragColor.x = 0.0;
|
||||
|
||||
@ -404,6 +405,7 @@ void fn6() {
|
||||
|
||||
|
||||
|
||||
false;
|
||||
|
||||
sk_FragColor.x = 0.0;
|
||||
|
||||
@ -606,6 +608,7 @@ void fn6() {
|
||||
|
||||
|
||||
|
||||
false;
|
||||
|
||||
}
|
||||
void fn7() {
|
||||
@ -1215,6 +1218,7 @@ void fn7() {
|
||||
|
||||
|
||||
|
||||
false;
|
||||
|
||||
fn6();
|
||||
fn6();
|
||||
|
@ -35,6 +35,7 @@ void main() {
|
||||
++y;
|
||||
++y;
|
||||
++y;
|
||||
false;
|
||||
|
||||
++y;
|
||||
++y;
|
||||
@ -70,5 +71,6 @@ void main() {
|
||||
++y;
|
||||
++y;
|
||||
++y;
|
||||
false;
|
||||
|
||||
}
|
||||
|
@ -3,6 +3,7 @@ out vec4 sk_FragColor;
|
||||
void main() {
|
||||
float x = 1.0;
|
||||
x *= 2.0;
|
||||
false;
|
||||
|
||||
sk_FragColor.x = x;
|
||||
}
|
||||
|
@ -38,7 +38,7 @@ void main() {
|
||||
--_0_x;
|
||||
--_0_x;
|
||||
_0_x = 456.0;
|
||||
float _1_x = 456.0;
|
||||
float _1_x = _0_x;
|
||||
++_1_x;
|
||||
++_1_x;
|
||||
++_1_x;
|
||||
@ -74,7 +74,7 @@ void main() {
|
||||
--_1_x;
|
||||
--_1_x;
|
||||
_1_x = 123.0;
|
||||
sk_FragColor = vec4(123.0);
|
||||
sk_FragColor = vec4(_1_x);
|
||||
|
||||
|
||||
}
|
||||
|
@ -1,7 +1,9 @@
|
||||
|
||||
out vec4 sk_FragColor;
|
||||
void main() {
|
||||
float _0_y = 0.0;
|
||||
float _1_y = 123.0;
|
||||
float z = 0.0;
|
||||
float _0_y = z;
|
||||
++_0_y;
|
||||
++_0_y;
|
||||
++_0_y;
|
||||
@ -38,6 +40,7 @@ void main() {
|
||||
--_0_y;
|
||||
_0_y = 42.0;
|
||||
|
||||
_0_y;
|
||||
|
||||
sk_FragColor.x = 0.0;
|
||||
sk_FragColor.x = z;
|
||||
}
|
||||
|
@ -3,6 +3,7 @@ out vec4 sk_FragColor;
|
||||
void main() {
|
||||
sk_FragColor.x = 2.0;
|
||||
|
||||
sk_FragColor.y = 4.0;
|
||||
float y = 2.0;
|
||||
sk_FragColor.y = y * 2.0;
|
||||
|
||||
}
|
||||
|
@ -3,6 +3,9 @@ out vec4 sk_FragColor;
|
||||
uniform vec4 colorGreen;
|
||||
uniform vec4 colorRed;
|
||||
vec4 main() {
|
||||
return colorRed;
|
||||
float x = 0.0;
|
||||
x = 1.0;
|
||||
x = 2.0;
|
||||
return x == 1.0 && x == 2.0 ? colorGreen : colorRed;
|
||||
|
||||
}
|
||||
|
@ -7,6 +7,7 @@ void main() {
|
||||
sk_FragColor = color.yzyx;
|
||||
|
||||
color = color.wzyx;
|
||||
false;
|
||||
|
||||
sk_FragColor = color;
|
||||
}
|
||||
|
@ -19,42 +19,59 @@ void main() {
|
||||
S as[1];
|
||||
as[0].ah4[0] = vec4(val);
|
||||
sk_FragColor = sk_FragColor.xxxx;
|
||||
false;
|
||||
|
||||
sk_FragColor = vec4(s.h);
|
||||
false;
|
||||
|
||||
sk_FragColor = b ? sk_FragColor.xxxx : sk_FragColor.yyyy;
|
||||
false;
|
||||
|
||||
sk_FragColor = s.ah4[0].ywyw;
|
||||
false;
|
||||
|
||||
sk_FragColor = as[0].ah4[0].xyxy;
|
||||
false;
|
||||
|
||||
sk_FragColor = s.h4.zzzz;
|
||||
false;
|
||||
|
||||
sk_FragColor = uh4.xyzx;
|
||||
false;
|
||||
|
||||
sk_FragColor = vec4(s.h);
|
||||
false;
|
||||
|
||||
sk_FragColor = vec4(s.h);
|
||||
false;
|
||||
|
||||
sk_FragColor = s.ah4[0].xxxy;
|
||||
false;
|
||||
|
||||
sk_FragColor = uh4;
|
||||
false;
|
||||
|
||||
sk_FragColor = sk_FragColor.yyyy;
|
||||
false;
|
||||
|
||||
float _0_h = -s.h;
|
||||
sk_FragColor = vec4(_0_h);
|
||||
false;
|
||||
|
||||
bool _1_b = !b;
|
||||
sk_FragColor = _1_b ? sk_FragColor.xxxx : sk_FragColor.yyyy;
|
||||
false;
|
||||
|
||||
vec2 _2_h2 = s.ah4[ui].yw;
|
||||
sk_FragColor = _2_h2.xyxy;
|
||||
false;
|
||||
|
||||
vec3 _3_h3 = s.h4.yyy + s.h4.zzz;
|
||||
sk_FragColor = _3_h3.xyzx;
|
||||
false;
|
||||
|
||||
vec4 _4_h4 = vec4(s.h4.y, 0.0, 0.0, 1.0);
|
||||
sk_FragColor = _4_h4;
|
||||
false;
|
||||
|
||||
}
|
||||
|
@ -11,6 +11,7 @@ OpMemberName %_UniformBuffer 1 "colorGreen"
|
||||
OpMemberName %_UniformBuffer 2 "colorRed"
|
||||
OpName %_entrypoint "_entrypoint"
|
||||
OpName %main "main"
|
||||
OpName %expected "expected"
|
||||
OpDecorate %sk_FragColor RelaxedPrecision
|
||||
OpDecorate %sk_FragColor Location 0
|
||||
OpDecorate %sk_FragColor Index 0
|
||||
@ -25,13 +26,17 @@ OpMemberDecorate %_UniformBuffer 2 RelaxedPrecision
|
||||
OpDecorate %_UniformBuffer Block
|
||||
OpDecorate %10 Binding 0
|
||||
OpDecorate %10 DescriptorSet 0
|
||||
OpDecorate %26 RelaxedPrecision
|
||||
OpDecorate %34 RelaxedPrecision
|
||||
OpDecorate %47 RelaxedPrecision
|
||||
OpDecorate %60 RelaxedPrecision
|
||||
OpDecorate %74 RelaxedPrecision
|
||||
OpDecorate %77 RelaxedPrecision
|
||||
OpDecorate %78 RelaxedPrecision
|
||||
OpDecorate %33 RelaxedPrecision
|
||||
OpDecorate %35 RelaxedPrecision
|
||||
OpDecorate %42 RelaxedPrecision
|
||||
OpDecorate %45 RelaxedPrecision
|
||||
OpDecorate %55 RelaxedPrecision
|
||||
OpDecorate %58 RelaxedPrecision
|
||||
OpDecorate %68 RelaxedPrecision
|
||||
OpDecorate %69 RelaxedPrecision
|
||||
OpDecorate %80 RelaxedPrecision
|
||||
OpDecorate %83 RelaxedPrecision
|
||||
OpDecorate %84 RelaxedPrecision
|
||||
%float = OpTypeFloat 32
|
||||
%v4float = OpTypeVector %float 4
|
||||
%_ptr_Output_v4float = OpTypePointer Output %v4float
|
||||
@ -45,23 +50,21 @@ OpDecorate %78 RelaxedPrecision
|
||||
%void = OpTypeVoid
|
||||
%15 = OpTypeFunction %void
|
||||
%18 = OpTypeFunction %v4float
|
||||
%_ptr_Function_v4float = OpTypePointer Function %v4float
|
||||
%float_1_25 = OpConstant %float 1.25
|
||||
%float_0 = OpConstant %float 0
|
||||
%float_0_75 = OpConstant %float 0.75
|
||||
%float_2_25 = OpConstant %float 2.25
|
||||
%26 = OpConstantComposite %v4float %float_1_25 %float_0 %float_0_75 %float_2_25
|
||||
%false = OpConstantFalse %bool
|
||||
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
|
||||
%int = OpTypeInt 32 1
|
||||
%int_0 = OpConstant %int 0
|
||||
%float_1_25 = OpConstant %float 1.25
|
||||
%v2float = OpTypeVector %float 2
|
||||
%float_0 = OpConstant %float 0
|
||||
%38 = OpConstantComposite %v2float %float_1_25 %float_0
|
||||
%v2bool = OpTypeVector %bool 2
|
||||
%v3float = OpTypeVector %float 3
|
||||
%float_0_75 = OpConstant %float 0.75
|
||||
%51 = OpConstantComposite %v3float %float_1_25 %float_0 %float_0_75
|
||||
%v3bool = OpTypeVector %bool 3
|
||||
%float_2_25 = OpConstant %float 2.25
|
||||
%62 = OpConstantComposite %v4float %float_1_25 %float_0 %float_0_75 %float_2_25
|
||||
%v4bool = OpTypeVector %bool 4
|
||||
%_ptr_Function_v4float = OpTypePointer Function %v4float
|
||||
%int_1 = OpConstant %int 1
|
||||
%int_2 = OpConstant %int 2
|
||||
%_entrypoint = OpFunction %void None %15
|
||||
@ -72,60 +75,69 @@ OpReturn
|
||||
OpFunctionEnd
|
||||
%main = OpFunction %v4float None %18
|
||||
%19 = OpLabel
|
||||
%67 = OpVariable %_ptr_Function_v4float Function
|
||||
%22 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%26 = OpLoad %v4float %22
|
||||
%27 = OpCompositeExtract %float %26 0
|
||||
%21 = OpExtInst %float %1 FAbs %27
|
||||
%29 = OpFOrdEqual %bool %21 %float_1_25
|
||||
OpSelectionMerge %31 None
|
||||
OpBranchConditional %29 %30 %31
|
||||
%30 = OpLabel
|
||||
%33 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%34 = OpLoad %v4float %33
|
||||
%35 = OpVectorShuffle %v2float %34 %34 0 1
|
||||
%32 = OpExtInst %v2float %1 FAbs %35
|
||||
%39 = OpFOrdEqual %v2bool %32 %38
|
||||
%41 = OpAll %bool %39
|
||||
OpBranch %31
|
||||
%31 = OpLabel
|
||||
%42 = OpPhi %bool %false %19 %41 %30
|
||||
OpSelectionMerge %44 None
|
||||
OpBranchConditional %42 %43 %44
|
||||
%43 = OpLabel
|
||||
%46 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%47 = OpLoad %v4float %46
|
||||
%48 = OpVectorShuffle %v3float %47 %47 0 1 2
|
||||
%45 = OpExtInst %v3float %1 FAbs %48
|
||||
%52 = OpFOrdEqual %v3bool %45 %51
|
||||
%54 = OpAll %bool %52
|
||||
OpBranch %44
|
||||
%44 = OpLabel
|
||||
%55 = OpPhi %bool %false %31 %54 %43
|
||||
OpSelectionMerge %57 None
|
||||
OpBranchConditional %55 %56 %57
|
||||
%56 = OpLabel
|
||||
%59 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%60 = OpLoad %v4float %59
|
||||
%58 = OpExtInst %v4float %1 FAbs %60
|
||||
%63 = OpFOrdEqual %v4bool %58 %62
|
||||
%65 = OpAll %bool %63
|
||||
OpBranch %57
|
||||
%57 = OpLabel
|
||||
%66 = OpPhi %bool %false %44 %65 %56
|
||||
OpSelectionMerge %71 None
|
||||
OpBranchConditional %66 %69 %70
|
||||
%69 = OpLabel
|
||||
%72 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
|
||||
%74 = OpLoad %v4float %72
|
||||
OpStore %67 %74
|
||||
OpBranch %71
|
||||
%70 = OpLabel
|
||||
%75 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
|
||||
%77 = OpLoad %v4float %75
|
||||
OpStore %67 %77
|
||||
OpBranch %71
|
||||
%71 = OpLabel
|
||||
%78 = OpLoad %v4float %67
|
||||
OpReturnValue %78
|
||||
%expected = OpVariable %_ptr_Function_v4float Function
|
||||
%74 = OpVariable %_ptr_Function_v4float Function
|
||||
OpStore %expected %26
|
||||
%29 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%33 = OpLoad %v4float %29
|
||||
%34 = OpCompositeExtract %float %33 0
|
||||
%28 = OpExtInst %float %1 FAbs %34
|
||||
%35 = OpLoad %v4float %expected
|
||||
%36 = OpCompositeExtract %float %35 0
|
||||
%37 = OpFOrdEqual %bool %28 %36
|
||||
OpSelectionMerge %39 None
|
||||
OpBranchConditional %37 %38 %39
|
||||
%38 = OpLabel
|
||||
%41 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%42 = OpLoad %v4float %41
|
||||
%43 = OpVectorShuffle %v2float %42 %42 0 1
|
||||
%40 = OpExtInst %v2float %1 FAbs %43
|
||||
%45 = OpLoad %v4float %expected
|
||||
%46 = OpVectorShuffle %v2float %45 %45 0 1
|
||||
%47 = OpFOrdEqual %v2bool %40 %46
|
||||
%49 = OpAll %bool %47
|
||||
OpBranch %39
|
||||
%39 = OpLabel
|
||||
%50 = OpPhi %bool %false %19 %49 %38
|
||||
OpSelectionMerge %52 None
|
||||
OpBranchConditional %50 %51 %52
|
||||
%51 = OpLabel
|
||||
%54 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%55 = OpLoad %v4float %54
|
||||
%56 = OpVectorShuffle %v3float %55 %55 0 1 2
|
||||
%53 = OpExtInst %v3float %1 FAbs %56
|
||||
%58 = OpLoad %v4float %expected
|
||||
%59 = OpVectorShuffle %v3float %58 %58 0 1 2
|
||||
%60 = OpFOrdEqual %v3bool %53 %59
|
||||
%62 = OpAll %bool %60
|
||||
OpBranch %52
|
||||
%52 = OpLabel
|
||||
%63 = OpPhi %bool %false %39 %62 %51
|
||||
OpSelectionMerge %65 None
|
||||
OpBranchConditional %63 %64 %65
|
||||
%64 = OpLabel
|
||||
%67 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%68 = OpLoad %v4float %67
|
||||
%66 = OpExtInst %v4float %1 FAbs %68
|
||||
%69 = OpLoad %v4float %expected
|
||||
%70 = OpFOrdEqual %v4bool %66 %69
|
||||
%72 = OpAll %bool %70
|
||||
OpBranch %65
|
||||
%65 = OpLabel
|
||||
%73 = OpPhi %bool %false %52 %72 %64
|
||||
OpSelectionMerge %77 None
|
||||
OpBranchConditional %73 %75 %76
|
||||
%75 = OpLabel
|
||||
%78 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
|
||||
%80 = OpLoad %v4float %78
|
||||
OpStore %74 %80
|
||||
OpBranch %77
|
||||
%76 = OpLabel
|
||||
%81 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
|
||||
%83 = OpLoad %v4float %81
|
||||
OpStore %74 %83
|
||||
OpBranch %77
|
||||
%77 = OpLabel
|
||||
%84 = OpLoad %v4float %74
|
||||
OpReturnValue %84
|
||||
OpFunctionEnd
|
||||
|
@ -4,5 +4,6 @@ uniform vec4 testInputs;
|
||||
uniform vec4 colorGreen;
|
||||
uniform vec4 colorRed;
|
||||
vec4 main() {
|
||||
return ((abs(testInputs.x) == 1.25 && abs(testInputs.xy) == vec2(1.25, 0.0)) && abs(testInputs.xyz) == vec3(1.25, 0.0, 0.75)) && abs(testInputs) == vec4(1.25, 0.0, 0.75, 2.25) ? colorGreen : colorRed;
|
||||
vec4 expected = vec4(1.25, 0.0, 0.75, 2.25);
|
||||
return ((abs(testInputs.x) == expected.x && abs(testInputs.xy) == expected.xy) && abs(testInputs.xyz) == expected.xyz) && abs(testInputs) == expected ? colorGreen : colorRed;
|
||||
}
|
||||
|
@ -17,6 +17,7 @@ struct Outputs {
|
||||
fragment Outputs fragmentMain(Inputs _in [[stage_in]], constant Uniforms& _uniforms [[buffer(0)]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
|
||||
Outputs _out;
|
||||
(void)_out;
|
||||
_out.sk_FragColor = ((abs(_uniforms.testInputs.x) == 1.25 && all(abs(_uniforms.testInputs.xy) == float2(1.25, 0.0))) && all(abs(_uniforms.testInputs.xyz) == float3(1.25, 0.0, 0.75))) && all(abs(_uniforms.testInputs) == float4(1.25, 0.0, 0.75, 2.25)) ? _uniforms.colorGreen : _uniforms.colorRed;
|
||||
float4 expected = float4(1.25, 0.0, 0.75, 2.25);
|
||||
_out.sk_FragColor = ((abs(_uniforms.testInputs.x) == expected.x && all(abs(_uniforms.testInputs.xy) == expected.xy)) && all(abs(_uniforms.testInputs.xyz) == expected.xyz)) && all(abs(_uniforms.testInputs) == expected) ? _uniforms.colorGreen : _uniforms.colorRed;
|
||||
return _out;
|
||||
}
|
||||
|
@ -11,6 +11,7 @@ OpMemberName %_UniformBuffer 1 "colorGreen"
|
||||
OpMemberName %_UniformBuffer 2 "colorRed"
|
||||
OpName %_entrypoint "_entrypoint"
|
||||
OpName %main "main"
|
||||
OpName %expected "expected"
|
||||
OpDecorate %sk_FragColor RelaxedPrecision
|
||||
OpDecorate %sk_FragColor Location 0
|
||||
OpDecorate %sk_FragColor Index 0
|
||||
@ -25,13 +26,13 @@ OpMemberDecorate %_UniformBuffer 2 RelaxedPrecision
|
||||
OpDecorate %_UniformBuffer Block
|
||||
OpDecorate %10 Binding 0
|
||||
OpDecorate %10 DescriptorSet 0
|
||||
OpDecorate %26 RelaxedPrecision
|
||||
OpDecorate %35 RelaxedPrecision
|
||||
OpDecorate %53 RelaxedPrecision
|
||||
OpDecorate %73 RelaxedPrecision
|
||||
OpDecorate %96 RelaxedPrecision
|
||||
OpDecorate %98 RelaxedPrecision
|
||||
OpDecorate %99 RelaxedPrecision
|
||||
OpDecorate %32 RelaxedPrecision
|
||||
OpDecorate %42 RelaxedPrecision
|
||||
OpDecorate %61 RelaxedPrecision
|
||||
OpDecorate %82 RelaxedPrecision
|
||||
OpDecorate %103 RelaxedPrecision
|
||||
OpDecorate %105 RelaxedPrecision
|
||||
OpDecorate %106 RelaxedPrecision
|
||||
%float = OpTypeFloat 32
|
||||
%v4float = OpTypeVector %float 4
|
||||
%_ptr_Output_v4float = OpTypePointer Output %v4float
|
||||
@ -45,22 +46,21 @@ OpDecorate %99 RelaxedPrecision
|
||||
%void = OpTypeVoid
|
||||
%15 = OpTypeFunction %void
|
||||
%18 = OpTypeFunction %v4float
|
||||
%int = OpTypeInt 32 1
|
||||
%v4int = OpTypeVector %int 4
|
||||
%_ptr_Function_v4int = OpTypePointer Function %v4int
|
||||
%int_1 = OpConstant %int 1
|
||||
%int_0 = OpConstant %int 0
|
||||
%int_2 = OpConstant %int 2
|
||||
%27 = OpConstantComposite %v4int %int_1 %int_0 %int_0 %int_2
|
||||
%false = OpConstantFalse %bool
|
||||
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
|
||||
%int = OpTypeInt 32 1
|
||||
%int_0 = OpConstant %int 0
|
||||
%int_1 = OpConstant %int 1
|
||||
%v2float = OpTypeVector %float 2
|
||||
%v2int = OpTypeVector %int 2
|
||||
%44 = OpConstantComposite %v2int %int_1 %int_0
|
||||
%v2bool = OpTypeVector %bool 2
|
||||
%v3float = OpTypeVector %float 3
|
||||
%v3int = OpTypeVector %int 3
|
||||
%64 = OpConstantComposite %v3int %int_1 %int_0 %int_0
|
||||
%v3bool = OpTypeVector %bool 3
|
||||
%v4int = OpTypeVector %int 4
|
||||
%int_2 = OpConstant %int 2
|
||||
%85 = OpConstantComposite %v4int %int_1 %int_0 %int_0 %int_2
|
||||
%v4bool = OpTypeVector %bool 4
|
||||
%_ptr_Function_v4float = OpTypePointer Function %v4float
|
||||
%_entrypoint = OpFunction %void None %15
|
||||
@ -71,82 +71,91 @@ OpReturn
|
||||
OpFunctionEnd
|
||||
%main = OpFunction %v4float None %18
|
||||
%19 = OpLabel
|
||||
%90 = OpVariable %_ptr_Function_v4float Function
|
||||
%22 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%26 = OpLoad %v4float %22
|
||||
%27 = OpCompositeExtract %float %26 0
|
||||
%28 = OpConvertFToS %int %27
|
||||
%21 = OpExtInst %int %1 SAbs %28
|
||||
%30 = OpIEqual %bool %21 %int_1
|
||||
OpSelectionMerge %32 None
|
||||
OpBranchConditional %30 %31 %32
|
||||
%31 = OpLabel
|
||||
%34 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%35 = OpLoad %v4float %34
|
||||
%36 = OpVectorShuffle %v2float %35 %35 0 1
|
||||
%38 = OpCompositeExtract %float %36 0
|
||||
%39 = OpConvertFToS %int %38
|
||||
%40 = OpCompositeExtract %float %36 1
|
||||
%41 = OpConvertFToS %int %40
|
||||
%42 = OpCompositeConstruct %v2int %39 %41
|
||||
%33 = OpExtInst %v2int %1 SAbs %42
|
||||
%45 = OpIEqual %v2bool %33 %44
|
||||
%47 = OpAll %bool %45
|
||||
OpBranch %32
|
||||
%32 = OpLabel
|
||||
%48 = OpPhi %bool %false %19 %47 %31
|
||||
OpSelectionMerge %50 None
|
||||
OpBranchConditional %48 %49 %50
|
||||
%49 = OpLabel
|
||||
%52 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%53 = OpLoad %v4float %52
|
||||
%54 = OpVectorShuffle %v3float %53 %53 0 1 2
|
||||
%56 = OpCompositeExtract %float %54 0
|
||||
%57 = OpConvertFToS %int %56
|
||||
%58 = OpCompositeExtract %float %54 1
|
||||
%59 = OpConvertFToS %int %58
|
||||
%60 = OpCompositeExtract %float %54 2
|
||||
%61 = OpConvertFToS %int %60
|
||||
%62 = OpCompositeConstruct %v3int %57 %59 %61
|
||||
%51 = OpExtInst %v3int %1 SAbs %62
|
||||
%65 = OpIEqual %v3bool %51 %64
|
||||
%67 = OpAll %bool %65
|
||||
OpBranch %50
|
||||
%50 = OpLabel
|
||||
%68 = OpPhi %bool %false %32 %67 %49
|
||||
OpSelectionMerge %70 None
|
||||
OpBranchConditional %68 %69 %70
|
||||
%69 = OpLabel
|
||||
%72 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%73 = OpLoad %v4float %72
|
||||
%74 = OpCompositeExtract %float %73 0
|
||||
%75 = OpConvertFToS %int %74
|
||||
%76 = OpCompositeExtract %float %73 1
|
||||
%77 = OpConvertFToS %int %76
|
||||
%78 = OpCompositeExtract %float %73 2
|
||||
%79 = OpConvertFToS %int %78
|
||||
%80 = OpCompositeExtract %float %73 3
|
||||
%81 = OpConvertFToS %int %80
|
||||
%82 = OpCompositeConstruct %v4int %75 %77 %79 %81
|
||||
%71 = OpExtInst %v4int %1 SAbs %82
|
||||
%86 = OpIEqual %v4bool %71 %85
|
||||
%88 = OpAll %bool %86
|
||||
OpBranch %70
|
||||
%70 = OpLabel
|
||||
%89 = OpPhi %bool %false %50 %88 %69
|
||||
OpSelectionMerge %94 None
|
||||
OpBranchConditional %89 %92 %93
|
||||
%92 = OpLabel
|
||||
%95 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
|
||||
%96 = OpLoad %v4float %95
|
||||
OpStore %90 %96
|
||||
OpBranch %94
|
||||
%93 = OpLabel
|
||||
%97 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
|
||||
%98 = OpLoad %v4float %97
|
||||
OpStore %90 %98
|
||||
OpBranch %94
|
||||
%94 = OpLabel
|
||||
%99 = OpLoad %v4float %90
|
||||
OpReturnValue %99
|
||||
%expected = OpVariable %_ptr_Function_v4int Function
|
||||
%97 = OpVariable %_ptr_Function_v4float Function
|
||||
OpStore %expected %27
|
||||
%30 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%32 = OpLoad %v4float %30
|
||||
%33 = OpCompositeExtract %float %32 0
|
||||
%34 = OpConvertFToS %int %33
|
||||
%29 = OpExtInst %int %1 SAbs %34
|
||||
%35 = OpLoad %v4int %expected
|
||||
%36 = OpCompositeExtract %int %35 0
|
||||
%37 = OpIEqual %bool %29 %36
|
||||
OpSelectionMerge %39 None
|
||||
OpBranchConditional %37 %38 %39
|
||||
%38 = OpLabel
|
||||
%41 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%42 = OpLoad %v4float %41
|
||||
%43 = OpVectorShuffle %v2float %42 %42 0 1
|
||||
%45 = OpCompositeExtract %float %43 0
|
||||
%46 = OpConvertFToS %int %45
|
||||
%47 = OpCompositeExtract %float %43 1
|
||||
%48 = OpConvertFToS %int %47
|
||||
%49 = OpCompositeConstruct %v2int %46 %48
|
||||
%40 = OpExtInst %v2int %1 SAbs %49
|
||||
%51 = OpLoad %v4int %expected
|
||||
%52 = OpVectorShuffle %v2int %51 %51 0 1
|
||||
%53 = OpIEqual %v2bool %40 %52
|
||||
%55 = OpAll %bool %53
|
||||
OpBranch %39
|
||||
%39 = OpLabel
|
||||
%56 = OpPhi %bool %false %19 %55 %38
|
||||
OpSelectionMerge %58 None
|
||||
OpBranchConditional %56 %57 %58
|
||||
%57 = OpLabel
|
||||
%60 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%61 = OpLoad %v4float %60
|
||||
%62 = OpVectorShuffle %v3float %61 %61 0 1 2
|
||||
%64 = OpCompositeExtract %float %62 0
|
||||
%65 = OpConvertFToS %int %64
|
||||
%66 = OpCompositeExtract %float %62 1
|
||||
%67 = OpConvertFToS %int %66
|
||||
%68 = OpCompositeExtract %float %62 2
|
||||
%69 = OpConvertFToS %int %68
|
||||
%70 = OpCompositeConstruct %v3int %65 %67 %69
|
||||
%59 = OpExtInst %v3int %1 SAbs %70
|
||||
%72 = OpLoad %v4int %expected
|
||||
%73 = OpVectorShuffle %v3int %72 %72 0 1 2
|
||||
%74 = OpIEqual %v3bool %59 %73
|
||||
%76 = OpAll %bool %74
|
||||
OpBranch %58
|
||||
%58 = OpLabel
|
||||
%77 = OpPhi %bool %false %39 %76 %57
|
||||
OpSelectionMerge %79 None
|
||||
OpBranchConditional %77 %78 %79
|
||||
%78 = OpLabel
|
||||
%81 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%82 = OpLoad %v4float %81
|
||||
%83 = OpCompositeExtract %float %82 0
|
||||
%84 = OpConvertFToS %int %83
|
||||
%85 = OpCompositeExtract %float %82 1
|
||||
%86 = OpConvertFToS %int %85
|
||||
%87 = OpCompositeExtract %float %82 2
|
||||
%88 = OpConvertFToS %int %87
|
||||
%89 = OpCompositeExtract %float %82 3
|
||||
%90 = OpConvertFToS %int %89
|
||||
%91 = OpCompositeConstruct %v4int %84 %86 %88 %90
|
||||
%80 = OpExtInst %v4int %1 SAbs %91
|
||||
%92 = OpLoad %v4int %expected
|
||||
%93 = OpIEqual %v4bool %80 %92
|
||||
%95 = OpAll %bool %93
|
||||
OpBranch %79
|
||||
%79 = OpLabel
|
||||
%96 = OpPhi %bool %false %58 %95 %78
|
||||
OpSelectionMerge %101 None
|
||||
OpBranchConditional %96 %99 %100
|
||||
%99 = OpLabel
|
||||
%102 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
|
||||
%103 = OpLoad %v4float %102
|
||||
OpStore %97 %103
|
||||
OpBranch %101
|
||||
%100 = OpLabel
|
||||
%104 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
|
||||
%105 = OpLoad %v4float %104
|
||||
OpStore %97 %105
|
||||
OpBranch %101
|
||||
%101 = OpLabel
|
||||
%106 = OpLoad %v4float %97
|
||||
OpReturnValue %106
|
||||
OpFunctionEnd
|
||||
|
@ -4,5 +4,6 @@ uniform vec4 testInputs;
|
||||
uniform vec4 colorGreen;
|
||||
uniform vec4 colorRed;
|
||||
vec4 main() {
|
||||
return ((abs(int(testInputs.x)) == 1 && abs(ivec2(testInputs.xy)) == ivec2(1, 0)) && abs(ivec3(testInputs.xyz)) == ivec3(1, 0, 0)) && abs(ivec4(testInputs)) == ivec4(1, 0, 0, 2) ? colorGreen : colorRed;
|
||||
ivec4 expected = ivec4(1, 0, 0, 2);
|
||||
return ((abs(int(testInputs.x)) == expected.x && abs(ivec2(testInputs.xy)) == expected.xy) && abs(ivec3(testInputs.xyz)) == expected.xyz) && abs(ivec4(testInputs)) == expected ? colorGreen : colorRed;
|
||||
}
|
||||
|
@ -17,6 +17,7 @@ struct Outputs {
|
||||
fragment Outputs fragmentMain(Inputs _in [[stage_in]], constant Uniforms& _uniforms [[buffer(0)]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
|
||||
Outputs _out;
|
||||
(void)_out;
|
||||
_out.sk_FragColor = ((abs(int(_uniforms.testInputs.x)) == 1 && all(abs(int2(_uniforms.testInputs.xy)) == int2(1, 0))) && all(abs(int3(_uniforms.testInputs.xyz)) == int3(1, 0, 0))) && all(abs(int4(_uniforms.testInputs)) == int4(1, 0, 0, 2)) ? _uniforms.colorGreen : _uniforms.colorRed;
|
||||
int4 expected = int4(1, 0, 0, 2);
|
||||
_out.sk_FragColor = ((abs(int(_uniforms.testInputs.x)) == expected.x && all(abs(int2(_uniforms.testInputs.xy)) == expected.xy)) && all(abs(int3(_uniforms.testInputs.xyz)) == expected.xyz)) && all(abs(int4(_uniforms.testInputs)) == expected) ? _uniforms.colorGreen : _uniforms.colorRed;
|
||||
return _out;
|
||||
}
|
||||
|
@ -11,6 +11,7 @@ OpMemberName %_UniformBuffer 1 "colorGreen"
|
||||
OpMemberName %_UniformBuffer 2 "colorRed"
|
||||
OpName %_entrypoint "_entrypoint"
|
||||
OpName %main "main"
|
||||
OpName %expected "expected"
|
||||
OpDecorate %sk_FragColor RelaxedPrecision
|
||||
OpDecorate %sk_FragColor Location 0
|
||||
OpDecorate %sk_FragColor Index 0
|
||||
@ -25,13 +26,17 @@ OpMemberDecorate %_UniformBuffer 2 RelaxedPrecision
|
||||
OpDecorate %_UniformBuffer Block
|
||||
OpDecorate %10 Binding 0
|
||||
OpDecorate %10 DescriptorSet 0
|
||||
OpDecorate %26 RelaxedPrecision
|
||||
OpDecorate %34 RelaxedPrecision
|
||||
OpDecorate %47 RelaxedPrecision
|
||||
OpDecorate %60 RelaxedPrecision
|
||||
OpDecorate %74 RelaxedPrecision
|
||||
OpDecorate %77 RelaxedPrecision
|
||||
OpDecorate %78 RelaxedPrecision
|
||||
OpDecorate %33 RelaxedPrecision
|
||||
OpDecorate %35 RelaxedPrecision
|
||||
OpDecorate %42 RelaxedPrecision
|
||||
OpDecorate %45 RelaxedPrecision
|
||||
OpDecorate %55 RelaxedPrecision
|
||||
OpDecorate %58 RelaxedPrecision
|
||||
OpDecorate %68 RelaxedPrecision
|
||||
OpDecorate %69 RelaxedPrecision
|
||||
OpDecorate %80 RelaxedPrecision
|
||||
OpDecorate %83 RelaxedPrecision
|
||||
OpDecorate %84 RelaxedPrecision
|
||||
%float = OpTypeFloat 32
|
||||
%v4float = OpTypeVector %float 4
|
||||
%_ptr_Output_v4float = OpTypePointer Output %v4float
|
||||
@ -45,23 +50,21 @@ OpDecorate %78 RelaxedPrecision
|
||||
%void = OpTypeVoid
|
||||
%15 = OpTypeFunction %void
|
||||
%18 = OpTypeFunction %v4float
|
||||
%_ptr_Function_v4float = OpTypePointer Function %v4float
|
||||
%float_n1 = OpConstant %float -1
|
||||
%float_0 = OpConstant %float 0
|
||||
%float_1 = OpConstant %float 1
|
||||
%float_3 = OpConstant %float 3
|
||||
%26 = OpConstantComposite %v4float %float_n1 %float_0 %float_1 %float_3
|
||||
%false = OpConstantFalse %bool
|
||||
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
|
||||
%int = OpTypeInt 32 1
|
||||
%int_0 = OpConstant %int 0
|
||||
%float_n1 = OpConstant %float -1
|
||||
%v2float = OpTypeVector %float 2
|
||||
%float_0 = OpConstant %float 0
|
||||
%38 = OpConstantComposite %v2float %float_n1 %float_0
|
||||
%v2bool = OpTypeVector %bool 2
|
||||
%v3float = OpTypeVector %float 3
|
||||
%float_1 = OpConstant %float 1
|
||||
%51 = OpConstantComposite %v3float %float_n1 %float_0 %float_1
|
||||
%v3bool = OpTypeVector %bool 3
|
||||
%float_3 = OpConstant %float 3
|
||||
%62 = OpConstantComposite %v4float %float_n1 %float_0 %float_1 %float_3
|
||||
%v4bool = OpTypeVector %bool 4
|
||||
%_ptr_Function_v4float = OpTypePointer Function %v4float
|
||||
%int_1 = OpConstant %int 1
|
||||
%int_2 = OpConstant %int 2
|
||||
%_entrypoint = OpFunction %void None %15
|
||||
@ -72,60 +75,69 @@ OpReturn
|
||||
OpFunctionEnd
|
||||
%main = OpFunction %v4float None %18
|
||||
%19 = OpLabel
|
||||
%67 = OpVariable %_ptr_Function_v4float Function
|
||||
%22 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%26 = OpLoad %v4float %22
|
||||
%27 = OpCompositeExtract %float %26 0
|
||||
%21 = OpExtInst %float %1 Ceil %27
|
||||
%29 = OpFOrdEqual %bool %21 %float_n1
|
||||
OpSelectionMerge %31 None
|
||||
OpBranchConditional %29 %30 %31
|
||||
%30 = OpLabel
|
||||
%33 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%34 = OpLoad %v4float %33
|
||||
%35 = OpVectorShuffle %v2float %34 %34 0 1
|
||||
%32 = OpExtInst %v2float %1 Ceil %35
|
||||
%39 = OpFOrdEqual %v2bool %32 %38
|
||||
%41 = OpAll %bool %39
|
||||
OpBranch %31
|
||||
%31 = OpLabel
|
||||
%42 = OpPhi %bool %false %19 %41 %30
|
||||
OpSelectionMerge %44 None
|
||||
OpBranchConditional %42 %43 %44
|
||||
%43 = OpLabel
|
||||
%46 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%47 = OpLoad %v4float %46
|
||||
%48 = OpVectorShuffle %v3float %47 %47 0 1 2
|
||||
%45 = OpExtInst %v3float %1 Ceil %48
|
||||
%52 = OpFOrdEqual %v3bool %45 %51
|
||||
%54 = OpAll %bool %52
|
||||
OpBranch %44
|
||||
%44 = OpLabel
|
||||
%55 = OpPhi %bool %false %31 %54 %43
|
||||
OpSelectionMerge %57 None
|
||||
OpBranchConditional %55 %56 %57
|
||||
%56 = OpLabel
|
||||
%59 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%60 = OpLoad %v4float %59
|
||||
%58 = OpExtInst %v4float %1 Ceil %60
|
||||
%63 = OpFOrdEqual %v4bool %58 %62
|
||||
%65 = OpAll %bool %63
|
||||
OpBranch %57
|
||||
%57 = OpLabel
|
||||
%66 = OpPhi %bool %false %44 %65 %56
|
||||
OpSelectionMerge %71 None
|
||||
OpBranchConditional %66 %69 %70
|
||||
%69 = OpLabel
|
||||
%72 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
|
||||
%74 = OpLoad %v4float %72
|
||||
OpStore %67 %74
|
||||
OpBranch %71
|
||||
%70 = OpLabel
|
||||
%75 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
|
||||
%77 = OpLoad %v4float %75
|
||||
OpStore %67 %77
|
||||
OpBranch %71
|
||||
%71 = OpLabel
|
||||
%78 = OpLoad %v4float %67
|
||||
OpReturnValue %78
|
||||
%expected = OpVariable %_ptr_Function_v4float Function
|
||||
%74 = OpVariable %_ptr_Function_v4float Function
|
||||
OpStore %expected %26
|
||||
%29 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%33 = OpLoad %v4float %29
|
||||
%34 = OpCompositeExtract %float %33 0
|
||||
%28 = OpExtInst %float %1 Ceil %34
|
||||
%35 = OpLoad %v4float %expected
|
||||
%36 = OpCompositeExtract %float %35 0
|
||||
%37 = OpFOrdEqual %bool %28 %36
|
||||
OpSelectionMerge %39 None
|
||||
OpBranchConditional %37 %38 %39
|
||||
%38 = OpLabel
|
||||
%41 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%42 = OpLoad %v4float %41
|
||||
%43 = OpVectorShuffle %v2float %42 %42 0 1
|
||||
%40 = OpExtInst %v2float %1 Ceil %43
|
||||
%45 = OpLoad %v4float %expected
|
||||
%46 = OpVectorShuffle %v2float %45 %45 0 1
|
||||
%47 = OpFOrdEqual %v2bool %40 %46
|
||||
%49 = OpAll %bool %47
|
||||
OpBranch %39
|
||||
%39 = OpLabel
|
||||
%50 = OpPhi %bool %false %19 %49 %38
|
||||
OpSelectionMerge %52 None
|
||||
OpBranchConditional %50 %51 %52
|
||||
%51 = OpLabel
|
||||
%54 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%55 = OpLoad %v4float %54
|
||||
%56 = OpVectorShuffle %v3float %55 %55 0 1 2
|
||||
%53 = OpExtInst %v3float %1 Ceil %56
|
||||
%58 = OpLoad %v4float %expected
|
||||
%59 = OpVectorShuffle %v3float %58 %58 0 1 2
|
||||
%60 = OpFOrdEqual %v3bool %53 %59
|
||||
%62 = OpAll %bool %60
|
||||
OpBranch %52
|
||||
%52 = OpLabel
|
||||
%63 = OpPhi %bool %false %39 %62 %51
|
||||
OpSelectionMerge %65 None
|
||||
OpBranchConditional %63 %64 %65
|
||||
%64 = OpLabel
|
||||
%67 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%68 = OpLoad %v4float %67
|
||||
%66 = OpExtInst %v4float %1 Ceil %68
|
||||
%69 = OpLoad %v4float %expected
|
||||
%70 = OpFOrdEqual %v4bool %66 %69
|
||||
%72 = OpAll %bool %70
|
||||
OpBranch %65
|
||||
%65 = OpLabel
|
||||
%73 = OpPhi %bool %false %52 %72 %64
|
||||
OpSelectionMerge %77 None
|
||||
OpBranchConditional %73 %75 %76
|
||||
%75 = OpLabel
|
||||
%78 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
|
||||
%80 = OpLoad %v4float %78
|
||||
OpStore %74 %80
|
||||
OpBranch %77
|
||||
%76 = OpLabel
|
||||
%81 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
|
||||
%83 = OpLoad %v4float %81
|
||||
OpStore %74 %83
|
||||
OpBranch %77
|
||||
%77 = OpLabel
|
||||
%84 = OpLoad %v4float %74
|
||||
OpReturnValue %84
|
||||
OpFunctionEnd
|
||||
|
@ -4,5 +4,6 @@ uniform vec4 testInputs;
|
||||
uniform vec4 colorGreen;
|
||||
uniform vec4 colorRed;
|
||||
vec4 main() {
|
||||
return ((ceil(testInputs.x) == -1.0 && ceil(testInputs.xy) == vec2(-1.0, 0.0)) && ceil(testInputs.xyz) == vec3(-1.0, 0.0, 1.0)) && ceil(testInputs) == vec4(-1.0, 0.0, 1.0, 3.0) ? colorGreen : colorRed;
|
||||
vec4 expected = vec4(-1.0, 0.0, 1.0, 3.0);
|
||||
return ((ceil(testInputs.x) == expected.x && ceil(testInputs.xy) == expected.xy) && ceil(testInputs.xyz) == expected.xyz) && ceil(testInputs) == expected ? colorGreen : colorRed;
|
||||
}
|
||||
|
@ -17,6 +17,7 @@ struct Outputs {
|
||||
fragment Outputs fragmentMain(Inputs _in [[stage_in]], constant Uniforms& _uniforms [[buffer(0)]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
|
||||
Outputs _out;
|
||||
(void)_out;
|
||||
_out.sk_FragColor = ((ceil(_uniforms.testInputs.x) == -1.0 && all(ceil(_uniforms.testInputs.xy) == float2(-1.0, 0.0))) && all(ceil(_uniforms.testInputs.xyz) == float3(-1.0, 0.0, 1.0))) && all(ceil(_uniforms.testInputs) == float4(-1.0, 0.0, 1.0, 3.0)) ? _uniforms.colorGreen : _uniforms.colorRed;
|
||||
float4 expected = float4(-1.0, 0.0, 1.0, 3.0);
|
||||
_out.sk_FragColor = ((ceil(_uniforms.testInputs.x) == expected.x && all(ceil(_uniforms.testInputs.xy) == expected.xy)) && all(ceil(_uniforms.testInputs.xyz) == expected.xyz)) && all(ceil(_uniforms.testInputs) == expected) ? _uniforms.colorGreen : _uniforms.colorRed;
|
||||
return _out;
|
||||
}
|
||||
|
@ -11,6 +11,10 @@ OpMemberName %_UniformBuffer 1 "colorGreen"
|
||||
OpMemberName %_UniformBuffer 2 "colorRed"
|
||||
OpName %_entrypoint "_entrypoint"
|
||||
OpName %main "main"
|
||||
OpName %expectedA "expectedA"
|
||||
OpName %clampLow "clampLow"
|
||||
OpName %expectedB "expectedB"
|
||||
OpName %clampHigh "clampHigh"
|
||||
OpDecorate %sk_FragColor RelaxedPrecision
|
||||
OpDecorate %sk_FragColor Location 0
|
||||
OpDecorate %sk_FragColor Index 0
|
||||
@ -25,23 +29,39 @@ OpMemberDecorate %_UniformBuffer 2 RelaxedPrecision
|
||||
OpDecorate %_UniformBuffer Block
|
||||
OpDecorate %10 Binding 0
|
||||
OpDecorate %10 DescriptorSet 0
|
||||
OpDecorate %26 RelaxedPrecision
|
||||
OpDecorate %35 RelaxedPrecision
|
||||
OpDecorate %38 RelaxedPrecision
|
||||
OpDecorate %39 RelaxedPrecision
|
||||
OpDecorate %50 RelaxedPrecision
|
||||
OpDecorate %44 RelaxedPrecision
|
||||
OpDecorate %46 RelaxedPrecision
|
||||
OpDecorate %53 RelaxedPrecision
|
||||
OpDecorate %54 RelaxedPrecision
|
||||
OpDecorate %65 RelaxedPrecision
|
||||
OpDecorate %66 RelaxedPrecision
|
||||
OpDecorate %67 RelaxedPrecision
|
||||
OpDecorate %77 RelaxedPrecision
|
||||
OpDecorate %56 RelaxedPrecision
|
||||
OpDecorate %57 RelaxedPrecision
|
||||
OpDecorate %58 RelaxedPrecision
|
||||
OpDecorate %68 RelaxedPrecision
|
||||
OpDecorate %71 RelaxedPrecision
|
||||
OpDecorate %72 RelaxedPrecision
|
||||
OpDecorate %73 RelaxedPrecision
|
||||
OpDecorate %83 RelaxedPrecision
|
||||
OpDecorate %84 RelaxedPrecision
|
||||
OpDecorate %85 RelaxedPrecision
|
||||
OpDecorate %98 RelaxedPrecision
|
||||
OpDecorate %86 RelaxedPrecision
|
||||
OpDecorate %95 RelaxedPrecision
|
||||
OpDecorate %97 RelaxedPrecision
|
||||
OpDecorate %99 RelaxedPrecision
|
||||
OpDecorate %101 RelaxedPrecision
|
||||
OpDecorate %109 RelaxedPrecision
|
||||
OpDecorate %111 RelaxedPrecision
|
||||
OpDecorate %127 RelaxedPrecision
|
||||
OpDecorate %113 RelaxedPrecision
|
||||
OpDecorate %115 RelaxedPrecision
|
||||
OpDecorate %124 RelaxedPrecision
|
||||
OpDecorate %126 RelaxedPrecision
|
||||
OpDecorate %128 RelaxedPrecision
|
||||
OpDecorate %130 RelaxedPrecision
|
||||
OpDecorate %131 RelaxedPrecision
|
||||
OpDecorate %139 RelaxedPrecision
|
||||
OpDecorate %140 RelaxedPrecision
|
||||
OpDecorate %141 RelaxedPrecision
|
||||
OpDecorate %142 RelaxedPrecision
|
||||
OpDecorate %152 RelaxedPrecision
|
||||
OpDecorate %155 RelaxedPrecision
|
||||
OpDecorate %156 RelaxedPrecision
|
||||
%float = OpTypeFloat 32
|
||||
%v4float = OpTypeVector %float 4
|
||||
%_ptr_Output_v4float = OpTypePointer Output %v4float
|
||||
@ -55,36 +75,29 @@ OpDecorate %131 RelaxedPrecision
|
||||
%void = OpTypeVoid
|
||||
%15 = OpTypeFunction %void
|
||||
%18 = OpTypeFunction %v4float
|
||||
%_ptr_Function_v4float = OpTypePointer Function %v4float
|
||||
%float_n1 = OpConstant %float -1
|
||||
%float_0 = OpConstant %float 0
|
||||
%float_0_75 = OpConstant %float 0.75
|
||||
%float_1 = OpConstant %float 1
|
||||
%26 = OpConstantComposite %v4float %float_n1 %float_0 %float_0_75 %float_1
|
||||
%float_n2 = OpConstant %float -2
|
||||
%29 = OpConstantComposite %v4float %float_n1 %float_n2 %float_n2 %float_1
|
||||
%float_0_5 = OpConstant %float 0.5
|
||||
%float_2_25 = OpConstant %float 2.25
|
||||
%33 = OpConstantComposite %v4float %float_n1 %float_0 %float_0_5 %float_2_25
|
||||
%float_2 = OpConstant %float 2
|
||||
%float_3 = OpConstant %float 3
|
||||
%37 = OpConstantComposite %v4float %float_1 %float_2 %float_0_5 %float_3
|
||||
%false = OpConstantFalse %bool
|
||||
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
|
||||
%int = OpTypeInt 32 1
|
||||
%int_0 = OpConstant %int 0
|
||||
%float_n1 = OpConstant %float -1
|
||||
%float_1 = OpConstant %float 1
|
||||
%v2float = OpTypeVector %float 2
|
||||
%float_0 = OpConstant %float 0
|
||||
%41 = OpConstantComposite %v2float %float_n1 %float_0
|
||||
%v2bool = OpTypeVector %bool 2
|
||||
%v3float = OpTypeVector %float 3
|
||||
%float_0_75 = OpConstant %float 0.75
|
||||
%56 = OpConstantComposite %v3float %float_n1 %float_0 %float_0_75
|
||||
%v3bool = OpTypeVector %bool 3
|
||||
%68 = OpConstantComposite %v4float %float_n1 %float_0 %float_0_75 %float_1
|
||||
%v4bool = OpTypeVector %bool 4
|
||||
%float_n2 = OpConstant %float -2
|
||||
%88 = OpConstantComposite %v2float %float_n1 %float_n2
|
||||
%float_2 = OpConstant %float 2
|
||||
%90 = OpConstantComposite %v2float %float_1 %float_2
|
||||
%100 = OpConstantComposite %v3float %float_n1 %float_n2 %float_n2
|
||||
%float_0_5 = OpConstant %float 0.5
|
||||
%102 = OpConstantComposite %v3float %float_1 %float_2 %float_0_5
|
||||
%103 = OpConstantComposite %v3float %float_n1 %float_0 %float_0_5
|
||||
%112 = OpConstantComposite %v4float %float_n1 %float_n2 %float_n2 %float_1
|
||||
%float_3 = OpConstant %float 3
|
||||
%114 = OpConstantComposite %v4float %float_1 %float_2 %float_0_5 %float_3
|
||||
%float_2_25 = OpConstant %float 2.25
|
||||
%116 = OpConstantComposite %v4float %float_n1 %float_0 %float_0_5 %float_2_25
|
||||
%_ptr_Function_v4float = OpTypePointer Function %v4float
|
||||
%int_1 = OpConstant %int 1
|
||||
%int_2 = OpConstant %int 2
|
||||
%_entrypoint = OpFunction %void None %15
|
||||
@ -95,112 +108,148 @@ OpReturn
|
||||
OpFunctionEnd
|
||||
%main = OpFunction %v4float None %18
|
||||
%19 = OpLabel
|
||||
%120 = OpVariable %_ptr_Function_v4float Function
|
||||
%22 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%26 = OpLoad %v4float %22
|
||||
%27 = OpCompositeExtract %float %26 0
|
||||
%21 = OpExtInst %float %1 FClamp %27 %float_n1 %float_1
|
||||
%30 = OpFOrdEqual %bool %21 %float_n1
|
||||
OpSelectionMerge %32 None
|
||||
OpBranchConditional %30 %31 %32
|
||||
%31 = OpLabel
|
||||
%34 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%35 = OpLoad %v4float %34
|
||||
%36 = OpVectorShuffle %v2float %35 %35 0 1
|
||||
%38 = OpCompositeConstruct %v2float %float_n1 %float_n1
|
||||
%39 = OpCompositeConstruct %v2float %float_1 %float_1
|
||||
%33 = OpExtInst %v2float %1 FClamp %36 %38 %39
|
||||
%42 = OpFOrdEqual %v2bool %33 %41
|
||||
%44 = OpAll %bool %42
|
||||
OpBranch %32
|
||||
%32 = OpLabel
|
||||
%45 = OpPhi %bool %false %19 %44 %31
|
||||
OpSelectionMerge %47 None
|
||||
OpBranchConditional %45 %46 %47
|
||||
%46 = OpLabel
|
||||
%49 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%50 = OpLoad %v4float %49
|
||||
%51 = OpVectorShuffle %v3float %50 %50 0 1 2
|
||||
%53 = OpCompositeConstruct %v3float %float_n1 %float_n1 %float_n1
|
||||
%54 = OpCompositeConstruct %v3float %float_1 %float_1 %float_1
|
||||
%48 = OpExtInst %v3float %1 FClamp %51 %53 %54
|
||||
%57 = OpFOrdEqual %v3bool %48 %56
|
||||
%59 = OpAll %bool %57
|
||||
OpBranch %47
|
||||
%47 = OpLabel
|
||||
%60 = OpPhi %bool %false %32 %59 %46
|
||||
OpSelectionMerge %62 None
|
||||
OpBranchConditional %60 %61 %62
|
||||
%61 = OpLabel
|
||||
%64 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%65 = OpLoad %v4float %64
|
||||
%66 = OpCompositeConstruct %v4float %float_n1 %float_n1 %float_n1 %float_n1
|
||||
%67 = OpCompositeConstruct %v4float %float_1 %float_1 %float_1 %float_1
|
||||
%63 = OpExtInst %v4float %1 FClamp %65 %66 %67
|
||||
%69 = OpFOrdEqual %v4bool %63 %68
|
||||
%71 = OpAll %bool %69
|
||||
OpBranch %62
|
||||
%62 = OpLabel
|
||||
%72 = OpPhi %bool %false %47 %71 %61
|
||||
OpSelectionMerge %74 None
|
||||
OpBranchConditional %72 %73 %74
|
||||
%73 = OpLabel
|
||||
%76 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%77 = OpLoad %v4float %76
|
||||
%78 = OpCompositeExtract %float %77 0
|
||||
%75 = OpExtInst %float %1 FClamp %78 %float_n1 %float_1
|
||||
%79 = OpFOrdEqual %bool %75 %float_n1
|
||||
OpBranch %74
|
||||
%74 = OpLabel
|
||||
%80 = OpPhi %bool %false %62 %79 %73
|
||||
OpSelectionMerge %82 None
|
||||
OpBranchConditional %80 %81 %82
|
||||
%81 = OpLabel
|
||||
%84 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%85 = OpLoad %v4float %84
|
||||
%86 = OpVectorShuffle %v2float %85 %85 0 1
|
||||
%83 = OpExtInst %v2float %1 FClamp %86 %88 %90
|
||||
%91 = OpFOrdEqual %v2bool %83 %41
|
||||
%92 = OpAll %bool %91
|
||||
OpBranch %82
|
||||
%82 = OpLabel
|
||||
%93 = OpPhi %bool %false %74 %92 %81
|
||||
OpSelectionMerge %95 None
|
||||
OpBranchConditional %93 %94 %95
|
||||
%94 = OpLabel
|
||||
%97 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%98 = OpLoad %v4float %97
|
||||
%99 = OpVectorShuffle %v3float %98 %98 0 1 2
|
||||
%96 = OpExtInst %v3float %1 FClamp %99 %100 %102
|
||||
%104 = OpFOrdEqual %v3bool %96 %103
|
||||
%105 = OpAll %bool %104
|
||||
OpBranch %95
|
||||
%95 = OpLabel
|
||||
%106 = OpPhi %bool %false %82 %105 %94
|
||||
OpSelectionMerge %108 None
|
||||
OpBranchConditional %106 %107 %108
|
||||
%107 = OpLabel
|
||||
%110 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%111 = OpLoad %v4float %110
|
||||
%109 = OpExtInst %v4float %1 FClamp %111 %112 %114
|
||||
%117 = OpFOrdEqual %v4bool %109 %116
|
||||
%expectedA = OpVariable %_ptr_Function_v4float Function
|
||||
%clampLow = OpVariable %_ptr_Function_v4float Function
|
||||
%expectedB = OpVariable %_ptr_Function_v4float Function
|
||||
%clampHigh = OpVariable %_ptr_Function_v4float Function
|
||||
%146 = OpVariable %_ptr_Function_v4float Function
|
||||
OpStore %expectedA %26
|
||||
OpStore %clampLow %29
|
||||
OpStore %expectedB %33
|
||||
OpStore %clampHigh %37
|
||||
%40 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%44 = OpLoad %v4float %40
|
||||
%45 = OpCompositeExtract %float %44 0
|
||||
%39 = OpExtInst %float %1 FClamp %45 %float_n1 %float_1
|
||||
%46 = OpLoad %v4float %expectedA
|
||||
%47 = OpCompositeExtract %float %46 0
|
||||
%48 = OpFOrdEqual %bool %39 %47
|
||||
OpSelectionMerge %50 None
|
||||
OpBranchConditional %48 %49 %50
|
||||
%49 = OpLabel
|
||||
%52 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%53 = OpLoad %v4float %52
|
||||
%54 = OpVectorShuffle %v2float %53 %53 0 1
|
||||
%56 = OpCompositeConstruct %v2float %float_n1 %float_n1
|
||||
%57 = OpCompositeConstruct %v2float %float_1 %float_1
|
||||
%51 = OpExtInst %v2float %1 FClamp %54 %56 %57
|
||||
%58 = OpLoad %v4float %expectedA
|
||||
%59 = OpVectorShuffle %v2float %58 %58 0 1
|
||||
%60 = OpFOrdEqual %v2bool %51 %59
|
||||
%62 = OpAll %bool %60
|
||||
OpBranch %50
|
||||
%50 = OpLabel
|
||||
%63 = OpPhi %bool %false %19 %62 %49
|
||||
OpSelectionMerge %65 None
|
||||
OpBranchConditional %63 %64 %65
|
||||
%64 = OpLabel
|
||||
%67 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%68 = OpLoad %v4float %67
|
||||
%69 = OpVectorShuffle %v3float %68 %68 0 1 2
|
||||
%71 = OpCompositeConstruct %v3float %float_n1 %float_n1 %float_n1
|
||||
%72 = OpCompositeConstruct %v3float %float_1 %float_1 %float_1
|
||||
%66 = OpExtInst %v3float %1 FClamp %69 %71 %72
|
||||
%73 = OpLoad %v4float %expectedA
|
||||
%74 = OpVectorShuffle %v3float %73 %73 0 1 2
|
||||
%75 = OpFOrdEqual %v3bool %66 %74
|
||||
%77 = OpAll %bool %75
|
||||
OpBranch %65
|
||||
%65 = OpLabel
|
||||
%78 = OpPhi %bool %false %50 %77 %64
|
||||
OpSelectionMerge %80 None
|
||||
OpBranchConditional %78 %79 %80
|
||||
%79 = OpLabel
|
||||
%82 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%83 = OpLoad %v4float %82
|
||||
%84 = OpCompositeConstruct %v4float %float_n1 %float_n1 %float_n1 %float_n1
|
||||
%85 = OpCompositeConstruct %v4float %float_1 %float_1 %float_1 %float_1
|
||||
%81 = OpExtInst %v4float %1 FClamp %83 %84 %85
|
||||
%86 = OpLoad %v4float %expectedA
|
||||
%87 = OpFOrdEqual %v4bool %81 %86
|
||||
%89 = OpAll %bool %87
|
||||
OpBranch %80
|
||||
%80 = OpLabel
|
||||
%90 = OpPhi %bool %false %65 %89 %79
|
||||
OpSelectionMerge %92 None
|
||||
OpBranchConditional %90 %91 %92
|
||||
%91 = OpLabel
|
||||
%94 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%95 = OpLoad %v4float %94
|
||||
%96 = OpCompositeExtract %float %95 0
|
||||
%97 = OpLoad %v4float %clampLow
|
||||
%98 = OpCompositeExtract %float %97 0
|
||||
%99 = OpLoad %v4float %clampHigh
|
||||
%100 = OpCompositeExtract %float %99 0
|
||||
%93 = OpExtInst %float %1 FClamp %96 %98 %100
|
||||
%101 = OpLoad %v4float %expectedB
|
||||
%102 = OpCompositeExtract %float %101 0
|
||||
%103 = OpFOrdEqual %bool %93 %102
|
||||
OpBranch %92
|
||||
%92 = OpLabel
|
||||
%104 = OpPhi %bool %false %80 %103 %91
|
||||
OpSelectionMerge %106 None
|
||||
OpBranchConditional %104 %105 %106
|
||||
%105 = OpLabel
|
||||
%108 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%109 = OpLoad %v4float %108
|
||||
%110 = OpVectorShuffle %v2float %109 %109 0 1
|
||||
%111 = OpLoad %v4float %clampLow
|
||||
%112 = OpVectorShuffle %v2float %111 %111 0 1
|
||||
%113 = OpLoad %v4float %clampHigh
|
||||
%114 = OpVectorShuffle %v2float %113 %113 0 1
|
||||
%107 = OpExtInst %v2float %1 FClamp %110 %112 %114
|
||||
%115 = OpLoad %v4float %expectedB
|
||||
%116 = OpVectorShuffle %v2float %115 %115 0 1
|
||||
%117 = OpFOrdEqual %v2bool %107 %116
|
||||
%118 = OpAll %bool %117
|
||||
OpBranch %108
|
||||
%108 = OpLabel
|
||||
%119 = OpPhi %bool %false %95 %118 %107
|
||||
OpSelectionMerge %124 None
|
||||
OpBranchConditional %119 %122 %123
|
||||
%122 = OpLabel
|
||||
%125 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
|
||||
%127 = OpLoad %v4float %125
|
||||
OpStore %120 %127
|
||||
OpBranch %124
|
||||
%123 = OpLabel
|
||||
%128 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
|
||||
%130 = OpLoad %v4float %128
|
||||
OpStore %120 %130
|
||||
OpBranch %124
|
||||
%124 = OpLabel
|
||||
%131 = OpLoad %v4float %120
|
||||
OpReturnValue %131
|
||||
OpBranch %106
|
||||
%106 = OpLabel
|
||||
%119 = OpPhi %bool %false %92 %118 %105
|
||||
OpSelectionMerge %121 None
|
||||
OpBranchConditional %119 %120 %121
|
||||
%120 = OpLabel
|
||||
%123 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%124 = OpLoad %v4float %123
|
||||
%125 = OpVectorShuffle %v3float %124 %124 0 1 2
|
||||
%126 = OpLoad %v4float %clampLow
|
||||
%127 = OpVectorShuffle %v3float %126 %126 0 1 2
|
||||
%128 = OpLoad %v4float %clampHigh
|
||||
%129 = OpVectorShuffle %v3float %128 %128 0 1 2
|
||||
%122 = OpExtInst %v3float %1 FClamp %125 %127 %129
|
||||
%130 = OpLoad %v4float %expectedB
|
||||
%131 = OpVectorShuffle %v3float %130 %130 0 1 2
|
||||
%132 = OpFOrdEqual %v3bool %122 %131
|
||||
%133 = OpAll %bool %132
|
||||
OpBranch %121
|
||||
%121 = OpLabel
|
||||
%134 = OpPhi %bool %false %106 %133 %120
|
||||
OpSelectionMerge %136 None
|
||||
OpBranchConditional %134 %135 %136
|
||||
%135 = OpLabel
|
||||
%138 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%139 = OpLoad %v4float %138
|
||||
%140 = OpLoad %v4float %clampLow
|
||||
%141 = OpLoad %v4float %clampHigh
|
||||
%137 = OpExtInst %v4float %1 FClamp %139 %140 %141
|
||||
%142 = OpLoad %v4float %expectedB
|
||||
%143 = OpFOrdEqual %v4bool %137 %142
|
||||
%144 = OpAll %bool %143
|
||||
OpBranch %136
|
||||
%136 = OpLabel
|
||||
%145 = OpPhi %bool %false %121 %144 %135
|
||||
OpSelectionMerge %149 None
|
||||
OpBranchConditional %145 %147 %148
|
||||
%147 = OpLabel
|
||||
%150 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
|
||||
%152 = OpLoad %v4float %150
|
||||
OpStore %146 %152
|
||||
OpBranch %149
|
||||
%148 = OpLabel
|
||||
%153 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
|
||||
%155 = OpLoad %v4float %153
|
||||
OpStore %146 %155
|
||||
OpBranch %149
|
||||
%149 = OpLabel
|
||||
%156 = OpLoad %v4float %146
|
||||
OpReturnValue %156
|
||||
OpFunctionEnd
|
||||
|
@ -4,5 +4,9 @@ uniform vec4 testInputs;
|
||||
uniform vec4 colorGreen;
|
||||
uniform vec4 colorRed;
|
||||
vec4 main() {
|
||||
return ((((((clamp(testInputs.x, -1.0, 1.0) == -1.0 && clamp(testInputs.xy, -1.0, 1.0) == vec2(-1.0, 0.0)) && clamp(testInputs.xyz, -1.0, 1.0) == vec3(-1.0, 0.0, 0.75)) && clamp(testInputs, -1.0, 1.0) == vec4(-1.0, 0.0, 0.75, 1.0)) && clamp(testInputs.x, -1.0, 1.0) == -1.0) && clamp(testInputs.xy, vec2(-1.0, -2.0), vec2(1.0, 2.0)) == vec2(-1.0, 0.0)) && clamp(testInputs.xyz, vec3(-1.0, -2.0, -2.0), vec3(1.0, 2.0, 0.5)) == vec3(-1.0, 0.0, 0.5)) && clamp(testInputs, vec4(-1.0, -2.0, -2.0, 1.0), vec4(1.0, 2.0, 0.5, 3.0)) == vec4(-1.0, 0.0, 0.5, 2.25) ? colorGreen : colorRed;
|
||||
vec4 expectedA = vec4(-1.0, 0.0, 0.75, 1.0);
|
||||
vec4 clampLow = vec4(-1.0, -2.0, -2.0, 1.0);
|
||||
vec4 expectedB = vec4(-1.0, 0.0, 0.5, 2.25);
|
||||
vec4 clampHigh = vec4(1.0, 2.0, 0.5, 3.0);
|
||||
return ((((((clamp(testInputs.x, -1.0, 1.0) == expectedA.x && clamp(testInputs.xy, -1.0, 1.0) == expectedA.xy) && clamp(testInputs.xyz, -1.0, 1.0) == expectedA.xyz) && clamp(testInputs, -1.0, 1.0) == expectedA) && clamp(testInputs.x, clampLow.x, clampHigh.x) == expectedB.x) && clamp(testInputs.xy, clampLow.xy, clampHigh.xy) == expectedB.xy) && clamp(testInputs.xyz, clampLow.xyz, clampHigh.xyz) == expectedB.xyz) && clamp(testInputs, clampLow, clampHigh) == expectedB ? colorGreen : colorRed;
|
||||
}
|
||||
|
@ -17,6 +17,10 @@ struct Outputs {
|
||||
fragment Outputs fragmentMain(Inputs _in [[stage_in]], constant Uniforms& _uniforms [[buffer(0)]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
|
||||
Outputs _out;
|
||||
(void)_out;
|
||||
_out.sk_FragColor = ((((((clamp(_uniforms.testInputs.x, -1.0, 1.0) == -1.0 && all(clamp(_uniforms.testInputs.xy, -1.0, 1.0) == float2(-1.0, 0.0))) && all(clamp(_uniforms.testInputs.xyz, -1.0, 1.0) == float3(-1.0, 0.0, 0.75))) && all(clamp(_uniforms.testInputs, -1.0, 1.0) == float4(-1.0, 0.0, 0.75, 1.0))) && clamp(_uniforms.testInputs.x, -1.0, 1.0) == -1.0) && all(clamp(_uniforms.testInputs.xy, float2(-1.0, -2.0), float2(1.0, 2.0)) == float2(-1.0, 0.0))) && all(clamp(_uniforms.testInputs.xyz, float3(-1.0, -2.0, -2.0), float3(1.0, 2.0, 0.5)) == float3(-1.0, 0.0, 0.5))) && all(clamp(_uniforms.testInputs, float4(-1.0, -2.0, -2.0, 1.0), float4(1.0, 2.0, 0.5, 3.0)) == float4(-1.0, 0.0, 0.5, 2.25)) ? _uniforms.colorGreen : _uniforms.colorRed;
|
||||
float4 expectedA = float4(-1.0, 0.0, 0.75, 1.0);
|
||||
float4 clampLow = float4(-1.0, -2.0, -2.0, 1.0);
|
||||
float4 expectedB = float4(-1.0, 0.0, 0.5, 2.25);
|
||||
float4 clampHigh = float4(1.0, 2.0, 0.5, 3.0);
|
||||
_out.sk_FragColor = ((((((clamp(_uniforms.testInputs.x, -1.0, 1.0) == expectedA.x && all(clamp(_uniforms.testInputs.xy, -1.0, 1.0) == expectedA.xy)) && all(clamp(_uniforms.testInputs.xyz, -1.0, 1.0) == expectedA.xyz)) && all(clamp(_uniforms.testInputs, -1.0, 1.0) == expectedA)) && clamp(_uniforms.testInputs.x, clampLow.x, clampHigh.x) == expectedB.x) && all(clamp(_uniforms.testInputs.xy, clampLow.xy, clampHigh.xy) == expectedB.xy)) && all(clamp(_uniforms.testInputs.xyz, clampLow.xyz, clampHigh.xyz) == expectedB.xyz)) && all(clamp(_uniforms.testInputs, clampLow, clampHigh) == expectedB) ? _uniforms.colorGreen : _uniforms.colorRed;
|
||||
return _out;
|
||||
}
|
||||
|
@ -11,7 +11,11 @@ OpMemberName %_UniformBuffer 1 "colorGreen"
|
||||
OpMemberName %_UniformBuffer 2 "colorRed"
|
||||
OpName %_entrypoint "_entrypoint"
|
||||
OpName %main "main"
|
||||
OpName %expectedA "expectedA"
|
||||
OpName %intValues "intValues"
|
||||
OpName %clampLow "clampLow"
|
||||
OpName %expectedB "expectedB"
|
||||
OpName %clampHigh "clampHigh"
|
||||
OpDecorate %sk_FragColor RelaxedPrecision
|
||||
OpDecorate %sk_FragColor Location 0
|
||||
OpDecorate %sk_FragColor Index 0
|
||||
@ -26,10 +30,10 @@ OpMemberDecorate %_UniformBuffer 2 RelaxedPrecision
|
||||
OpDecorate %_UniformBuffer Block
|
||||
OpDecorate %10 Binding 0
|
||||
OpDecorate %10 DescriptorSet 0
|
||||
OpDecorate %27 RelaxedPrecision
|
||||
OpDecorate %134 RelaxedPrecision
|
||||
OpDecorate %137 RelaxedPrecision
|
||||
OpDecorate %138 RelaxedPrecision
|
||||
OpDecorate %32 RelaxedPrecision
|
||||
OpDecorate %159 RelaxedPrecision
|
||||
OpDecorate %162 RelaxedPrecision
|
||||
OpDecorate %163 RelaxedPrecision
|
||||
%float = OpTypeFloat 32
|
||||
%v4float = OpTypeVector %float 4
|
||||
%_ptr_Output_v4float = OpTypePointer Output %v4float
|
||||
@ -46,34 +50,27 @@ OpDecorate %138 RelaxedPrecision
|
||||
%int = OpTypeInt 32 1
|
||||
%v4int = OpTypeVector %int 4
|
||||
%_ptr_Function_v4int = OpTypePointer Function %v4int
|
||||
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
|
||||
%int_0 = OpConstant %int 0
|
||||
%float_100 = OpConstant %float 100
|
||||
%false = OpConstantFalse %bool
|
||||
%int_n100 = OpConstant %int -100
|
||||
%int_0 = OpConstant %int 0
|
||||
%int_75 = OpConstant %int 75
|
||||
%int_100 = OpConstant %int 100
|
||||
%28 = OpConstantComposite %v4int %int_n100 %int_0 %int_75 %int_100
|
||||
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
|
||||
%float_100 = OpConstant %float 100
|
||||
%int_n200 = OpConstant %int -200
|
||||
%46 = OpConstantComposite %v4int %int_n100 %int_n200 %int_n200 %int_100
|
||||
%int_50 = OpConstant %int 50
|
||||
%int_225 = OpConstant %int 225
|
||||
%50 = OpConstantComposite %v4int %int_n100 %int_0 %int_50 %int_225
|
||||
%int_200 = OpConstant %int 200
|
||||
%int_300 = OpConstant %int 300
|
||||
%54 = OpConstantComposite %v4int %int_100 %int_200 %int_50 %int_300
|
||||
%false = OpConstantFalse %bool
|
||||
%v2int = OpTypeVector %int 2
|
||||
%54 = OpConstantComposite %v2int %int_n100 %int_0
|
||||
%v2bool = OpTypeVector %bool 2
|
||||
%v3int = OpTypeVector %int 3
|
||||
%int_75 = OpConstant %int 75
|
||||
%68 = OpConstantComposite %v3int %int_n100 %int_0 %int_75
|
||||
%v3bool = OpTypeVector %bool 3
|
||||
%79 = OpConstantComposite %v4int %int_n100 %int_0 %int_75 %int_100
|
||||
%v4bool = OpTypeVector %bool 4
|
||||
%int_n200 = OpConstant %int -200
|
||||
%97 = OpConstantComposite %v2int %int_n100 %int_n200
|
||||
%int_200 = OpConstant %int 200
|
||||
%99 = OpConstantComposite %v2int %int_100 %int_200
|
||||
%108 = OpConstantComposite %v3int %int_n100 %int_n200 %int_n200
|
||||
%int_50 = OpConstant %int 50
|
||||
%110 = OpConstantComposite %v3int %int_100 %int_200 %int_50
|
||||
%111 = OpConstantComposite %v3int %int_n100 %int_0 %int_50
|
||||
%119 = OpConstantComposite %v4int %int_n100 %int_n200 %int_n200 %int_100
|
||||
%int_300 = OpConstant %int 300
|
||||
%121 = OpConstantComposite %v4int %int_100 %int_200 %int_50 %int_300
|
||||
%int_225 = OpConstant %int 225
|
||||
%123 = OpConstantComposite %v4int %int_n100 %int_0 %int_50 %int_225
|
||||
%_ptr_Function_v4float = OpTypePointer Function %v4float
|
||||
%int_1 = OpConstant %int 1
|
||||
%int_2 = OpConstant %int 2
|
||||
@ -85,118 +82,154 @@ OpReturn
|
||||
OpFunctionEnd
|
||||
%main = OpFunction %v4float None %18
|
||||
%19 = OpLabel
|
||||
%expectedA = OpVariable %_ptr_Function_v4int Function
|
||||
%intValues = OpVariable %_ptr_Function_v4int Function
|
||||
%127 = OpVariable %_ptr_Function_v4float Function
|
||||
%24 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%27 = OpLoad %v4float %24
|
||||
%29 = OpVectorTimesScalar %v4float %27 %float_100
|
||||
%30 = OpCompositeExtract %float %29 0
|
||||
%31 = OpConvertFToS %int %30
|
||||
%32 = OpCompositeExtract %float %29 1
|
||||
%33 = OpConvertFToS %int %32
|
||||
%34 = OpCompositeExtract %float %29 2
|
||||
%35 = OpConvertFToS %int %34
|
||||
%36 = OpCompositeExtract %float %29 3
|
||||
%37 = OpConvertFToS %int %36
|
||||
%38 = OpCompositeConstruct %v4int %31 %33 %35 %37
|
||||
OpStore %intValues %38
|
||||
%41 = OpLoad %v4int %intValues
|
||||
%42 = OpCompositeExtract %int %41 0
|
||||
%40 = OpExtInst %int %1 SClamp %42 %int_n100 %int_100
|
||||
%45 = OpIEqual %bool %40 %int_n100
|
||||
OpSelectionMerge %47 None
|
||||
OpBranchConditional %45 %46 %47
|
||||
%46 = OpLabel
|
||||
%49 = OpLoad %v4int %intValues
|
||||
%50 = OpVectorShuffle %v2int %49 %49 0 1
|
||||
%52 = OpCompositeConstruct %v2int %int_n100 %int_n100
|
||||
%53 = OpCompositeConstruct %v2int %int_100 %int_100
|
||||
%48 = OpExtInst %v2int %1 SClamp %50 %52 %53
|
||||
%55 = OpIEqual %v2bool %48 %54
|
||||
%57 = OpAll %bool %55
|
||||
OpBranch %47
|
||||
%47 = OpLabel
|
||||
%58 = OpPhi %bool %false %19 %57 %46
|
||||
OpSelectionMerge %60 None
|
||||
OpBranchConditional %58 %59 %60
|
||||
%59 = OpLabel
|
||||
%62 = OpLoad %v4int %intValues
|
||||
%63 = OpVectorShuffle %v3int %62 %62 0 1 2
|
||||
%65 = OpCompositeConstruct %v3int %int_n100 %int_n100 %int_n100
|
||||
%66 = OpCompositeConstruct %v3int %int_100 %int_100 %int_100
|
||||
%61 = OpExtInst %v3int %1 SClamp %63 %65 %66
|
||||
%69 = OpIEqual %v3bool %61 %68
|
||||
%71 = OpAll %bool %69
|
||||
OpBranch %60
|
||||
%60 = OpLabel
|
||||
%72 = OpPhi %bool %false %47 %71 %59
|
||||
OpSelectionMerge %74 None
|
||||
OpBranchConditional %72 %73 %74
|
||||
%73 = OpLabel
|
||||
%76 = OpLoad %v4int %intValues
|
||||
%77 = OpCompositeConstruct %v4int %int_n100 %int_n100 %int_n100 %int_n100
|
||||
%78 = OpCompositeConstruct %v4int %int_100 %int_100 %int_100 %int_100
|
||||
%75 = OpExtInst %v4int %1 SClamp %76 %77 %78
|
||||
%80 = OpIEqual %v4bool %75 %79
|
||||
%82 = OpAll %bool %80
|
||||
OpBranch %74
|
||||
%74 = OpLabel
|
||||
%83 = OpPhi %bool %false %60 %82 %73
|
||||
OpSelectionMerge %85 None
|
||||
OpBranchConditional %83 %84 %85
|
||||
%84 = OpLabel
|
||||
%87 = OpLoad %v4int %intValues
|
||||
%88 = OpCompositeExtract %int %87 0
|
||||
%86 = OpExtInst %int %1 SClamp %88 %int_n100 %int_100
|
||||
%89 = OpIEqual %bool %86 %int_n100
|
||||
OpBranch %85
|
||||
%85 = OpLabel
|
||||
%90 = OpPhi %bool %false %74 %89 %84
|
||||
OpSelectionMerge %92 None
|
||||
OpBranchConditional %90 %91 %92
|
||||
%clampLow = OpVariable %_ptr_Function_v4int Function
|
||||
%expectedB = OpVariable %_ptr_Function_v4int Function
|
||||
%clampHigh = OpVariable %_ptr_Function_v4int Function
|
||||
%152 = OpVariable %_ptr_Function_v4float Function
|
||||
OpStore %expectedA %28
|
||||
%30 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%32 = OpLoad %v4float %30
|
||||
%34 = OpVectorTimesScalar %v4float %32 %float_100
|
||||
%35 = OpCompositeExtract %float %34 0
|
||||
%36 = OpConvertFToS %int %35
|
||||
%37 = OpCompositeExtract %float %34 1
|
||||
%38 = OpConvertFToS %int %37
|
||||
%39 = OpCompositeExtract %float %34 2
|
||||
%40 = OpConvertFToS %int %39
|
||||
%41 = OpCompositeExtract %float %34 3
|
||||
%42 = OpConvertFToS %int %41
|
||||
%43 = OpCompositeConstruct %v4int %36 %38 %40 %42
|
||||
OpStore %intValues %43
|
||||
OpStore %clampLow %46
|
||||
OpStore %expectedB %50
|
||||
OpStore %clampHigh %54
|
||||
%57 = OpLoad %v4int %intValues
|
||||
%58 = OpCompositeExtract %int %57 0
|
||||
%56 = OpExtInst %int %1 SClamp %58 %int_n100 %int_100
|
||||
%59 = OpLoad %v4int %expectedA
|
||||
%60 = OpCompositeExtract %int %59 0
|
||||
%61 = OpIEqual %bool %56 %60
|
||||
OpSelectionMerge %63 None
|
||||
OpBranchConditional %61 %62 %63
|
||||
%62 = OpLabel
|
||||
%65 = OpLoad %v4int %intValues
|
||||
%66 = OpVectorShuffle %v2int %65 %65 0 1
|
||||
%68 = OpCompositeConstruct %v2int %int_n100 %int_n100
|
||||
%69 = OpCompositeConstruct %v2int %int_100 %int_100
|
||||
%64 = OpExtInst %v2int %1 SClamp %66 %68 %69
|
||||
%70 = OpLoad %v4int %expectedA
|
||||
%71 = OpVectorShuffle %v2int %70 %70 0 1
|
||||
%72 = OpIEqual %v2bool %64 %71
|
||||
%74 = OpAll %bool %72
|
||||
OpBranch %63
|
||||
%63 = OpLabel
|
||||
%75 = OpPhi %bool %false %19 %74 %62
|
||||
OpSelectionMerge %77 None
|
||||
OpBranchConditional %75 %76 %77
|
||||
%76 = OpLabel
|
||||
%79 = OpLoad %v4int %intValues
|
||||
%80 = OpVectorShuffle %v3int %79 %79 0 1 2
|
||||
%82 = OpCompositeConstruct %v3int %int_n100 %int_n100 %int_n100
|
||||
%83 = OpCompositeConstruct %v3int %int_100 %int_100 %int_100
|
||||
%78 = OpExtInst %v3int %1 SClamp %80 %82 %83
|
||||
%84 = OpLoad %v4int %expectedA
|
||||
%85 = OpVectorShuffle %v3int %84 %84 0 1 2
|
||||
%86 = OpIEqual %v3bool %78 %85
|
||||
%88 = OpAll %bool %86
|
||||
OpBranch %77
|
||||
%77 = OpLabel
|
||||
%89 = OpPhi %bool %false %63 %88 %76
|
||||
OpSelectionMerge %91 None
|
||||
OpBranchConditional %89 %90 %91
|
||||
%90 = OpLabel
|
||||
%93 = OpLoad %v4int %intValues
|
||||
%94 = OpCompositeConstruct %v4int %int_n100 %int_n100 %int_n100 %int_n100
|
||||
%95 = OpCompositeConstruct %v4int %int_100 %int_100 %int_100 %int_100
|
||||
%92 = OpExtInst %v4int %1 SClamp %93 %94 %95
|
||||
%96 = OpLoad %v4int %expectedA
|
||||
%97 = OpIEqual %v4bool %92 %96
|
||||
%99 = OpAll %bool %97
|
||||
OpBranch %91
|
||||
%91 = OpLabel
|
||||
%94 = OpLoad %v4int %intValues
|
||||
%95 = OpVectorShuffle %v2int %94 %94 0 1
|
||||
%93 = OpExtInst %v2int %1 SClamp %95 %97 %99
|
||||
%100 = OpIEqual %v2bool %93 %54
|
||||
%101 = OpAll %bool %100
|
||||
OpBranch %92
|
||||
%92 = OpLabel
|
||||
%102 = OpPhi %bool %false %85 %101 %91
|
||||
OpSelectionMerge %104 None
|
||||
OpBranchConditional %102 %103 %104
|
||||
%103 = OpLabel
|
||||
%106 = OpLoad %v4int %intValues
|
||||
%107 = OpVectorShuffle %v3int %106 %106 0 1 2
|
||||
%105 = OpExtInst %v3int %1 SClamp %107 %108 %110
|
||||
%112 = OpIEqual %v3bool %105 %111
|
||||
%113 = OpAll %bool %112
|
||||
OpBranch %104
|
||||
%104 = OpLabel
|
||||
%114 = OpPhi %bool %false %92 %113 %103
|
||||
OpSelectionMerge %116 None
|
||||
OpBranchConditional %114 %115 %116
|
||||
%100 = OpPhi %bool %false %77 %99 %90
|
||||
OpSelectionMerge %102 None
|
||||
OpBranchConditional %100 %101 %102
|
||||
%101 = OpLabel
|
||||
%104 = OpLoad %v4int %intValues
|
||||
%105 = OpCompositeExtract %int %104 0
|
||||
%106 = OpLoad %v4int %clampLow
|
||||
%107 = OpCompositeExtract %int %106 0
|
||||
%108 = OpLoad %v4int %clampHigh
|
||||
%109 = OpCompositeExtract %int %108 0
|
||||
%103 = OpExtInst %int %1 SClamp %105 %107 %109
|
||||
%110 = OpLoad %v4int %expectedB
|
||||
%111 = OpCompositeExtract %int %110 0
|
||||
%112 = OpIEqual %bool %103 %111
|
||||
OpBranch %102
|
||||
%102 = OpLabel
|
||||
%113 = OpPhi %bool %false %91 %112 %101
|
||||
OpSelectionMerge %115 None
|
||||
OpBranchConditional %113 %114 %115
|
||||
%114 = OpLabel
|
||||
%117 = OpLoad %v4int %intValues
|
||||
%118 = OpVectorShuffle %v2int %117 %117 0 1
|
||||
%119 = OpLoad %v4int %clampLow
|
||||
%120 = OpVectorShuffle %v2int %119 %119 0 1
|
||||
%121 = OpLoad %v4int %clampHigh
|
||||
%122 = OpVectorShuffle %v2int %121 %121 0 1
|
||||
%116 = OpExtInst %v2int %1 SClamp %118 %120 %122
|
||||
%123 = OpLoad %v4int %expectedB
|
||||
%124 = OpVectorShuffle %v2int %123 %123 0 1
|
||||
%125 = OpIEqual %v2bool %116 %124
|
||||
%126 = OpAll %bool %125
|
||||
OpBranch %115
|
||||
%115 = OpLabel
|
||||
%118 = OpLoad %v4int %intValues
|
||||
%117 = OpExtInst %v4int %1 SClamp %118 %119 %121
|
||||
%124 = OpIEqual %v4bool %117 %123
|
||||
%125 = OpAll %bool %124
|
||||
OpBranch %116
|
||||
%116 = OpLabel
|
||||
%126 = OpPhi %bool %false %104 %125 %115
|
||||
OpSelectionMerge %131 None
|
||||
OpBranchConditional %126 %129 %130
|
||||
%127 = OpPhi %bool %false %102 %126 %114
|
||||
OpSelectionMerge %129 None
|
||||
OpBranchConditional %127 %128 %129
|
||||
%128 = OpLabel
|
||||
%131 = OpLoad %v4int %intValues
|
||||
%132 = OpVectorShuffle %v3int %131 %131 0 1 2
|
||||
%133 = OpLoad %v4int %clampLow
|
||||
%134 = OpVectorShuffle %v3int %133 %133 0 1 2
|
||||
%135 = OpLoad %v4int %clampHigh
|
||||
%136 = OpVectorShuffle %v3int %135 %135 0 1 2
|
||||
%130 = OpExtInst %v3int %1 SClamp %132 %134 %136
|
||||
%137 = OpLoad %v4int %expectedB
|
||||
%138 = OpVectorShuffle %v3int %137 %137 0 1 2
|
||||
%139 = OpIEqual %v3bool %130 %138
|
||||
%140 = OpAll %bool %139
|
||||
OpBranch %129
|
||||
%129 = OpLabel
|
||||
%132 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
|
||||
%134 = OpLoad %v4float %132
|
||||
OpStore %127 %134
|
||||
OpBranch %131
|
||||
%130 = OpLabel
|
||||
%135 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
|
||||
%137 = OpLoad %v4float %135
|
||||
OpStore %127 %137
|
||||
OpBranch %131
|
||||
%131 = OpLabel
|
||||
%138 = OpLoad %v4float %127
|
||||
OpReturnValue %138
|
||||
%141 = OpPhi %bool %false %115 %140 %128
|
||||
OpSelectionMerge %143 None
|
||||
OpBranchConditional %141 %142 %143
|
||||
%142 = OpLabel
|
||||
%145 = OpLoad %v4int %intValues
|
||||
%146 = OpLoad %v4int %clampLow
|
||||
%147 = OpLoad %v4int %clampHigh
|
||||
%144 = OpExtInst %v4int %1 SClamp %145 %146 %147
|
||||
%148 = OpLoad %v4int %expectedB
|
||||
%149 = OpIEqual %v4bool %144 %148
|
||||
%150 = OpAll %bool %149
|
||||
OpBranch %143
|
||||
%143 = OpLabel
|
||||
%151 = OpPhi %bool %false %129 %150 %142
|
||||
OpSelectionMerge %156 None
|
||||
OpBranchConditional %151 %154 %155
|
||||
%154 = OpLabel
|
||||
%157 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
|
||||
%159 = OpLoad %v4float %157
|
||||
OpStore %152 %159
|
||||
OpBranch %156
|
||||
%155 = OpLabel
|
||||
%160 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
|
||||
%162 = OpLoad %v4float %160
|
||||
OpStore %152 %162
|
||||
OpBranch %156
|
||||
%156 = OpLabel
|
||||
%163 = OpLoad %v4float %152
|
||||
OpReturnValue %163
|
||||
OpFunctionEnd
|
||||
|
@ -4,6 +4,10 @@ uniform vec4 testInputs;
|
||||
uniform vec4 colorGreen;
|
||||
uniform vec4 colorRed;
|
||||
vec4 main() {
|
||||
ivec4 expectedA = ivec4(-100, 0, 75, 100);
|
||||
ivec4 intValues = ivec4(testInputs * 100.0);
|
||||
return ((((((clamp(intValues.x, -100, 100) == -100 && clamp(intValues.xy, -100, 100) == ivec2(-100, 0)) && clamp(intValues.xyz, -100, 100) == ivec3(-100, 0, 75)) && clamp(intValues, -100, 100) == ivec4(-100, 0, 75, 100)) && clamp(intValues.x, -100, 100) == -100) && clamp(intValues.xy, ivec2(-100, -200), ivec2(100, 200)) == ivec2(-100, 0)) && clamp(intValues.xyz, ivec3(-100, -200, -200), ivec3(100, 200, 50)) == ivec3(-100, 0, 50)) && clamp(intValues, ivec4(-100, -200, -200, 100), ivec4(100, 200, 50, 300)) == ivec4(-100, 0, 50, 225) ? colorGreen : colorRed;
|
||||
ivec4 clampLow = ivec4(-100, -200, -200, 100);
|
||||
ivec4 expectedB = ivec4(-100, 0, 50, 225);
|
||||
ivec4 clampHigh = ivec4(100, 200, 50, 300);
|
||||
return ((((((clamp(intValues.x, -100, 100) == expectedA.x && clamp(intValues.xy, -100, 100) == expectedA.xy) && clamp(intValues.xyz, -100, 100) == expectedA.xyz) && clamp(intValues, -100, 100) == expectedA) && clamp(intValues.x, clampLow.x, clampHigh.x) == expectedB.x) && clamp(intValues.xy, clampLow.xy, clampHigh.xy) == expectedB.xy) && clamp(intValues.xyz, clampLow.xyz, clampHigh.xyz) == expectedB.xyz) && clamp(intValues, clampLow, clampHigh) == expectedB ? colorGreen : colorRed;
|
||||
}
|
||||
|
@ -17,7 +17,11 @@ struct Outputs {
|
||||
fragment Outputs fragmentMain(Inputs _in [[stage_in]], constant Uniforms& _uniforms [[buffer(0)]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
|
||||
Outputs _out;
|
||||
(void)_out;
|
||||
int4 expectedA = int4(-100, 0, 75, 100);
|
||||
int4 intValues = int4(_uniforms.testInputs * 100.0);
|
||||
_out.sk_FragColor = ((((((clamp(intValues.x, -100, 100) == -100 && all(clamp(intValues.xy, -100, 100) == int2(-100, 0))) && all(clamp(intValues.xyz, -100, 100) == int3(-100, 0, 75))) && all(clamp(intValues, -100, 100) == int4(-100, 0, 75, 100))) && clamp(intValues.x, -100, 100) == -100) && all(clamp(intValues.xy, int2(-100, -200), int2(100, 200)) == int2(-100, 0))) && all(clamp(intValues.xyz, int3(-100, -200, -200), int3(100, 200, 50)) == int3(-100, 0, 50))) && all(clamp(intValues, int4(-100, -200, -200, 100), int4(100, 200, 50, 300)) == int4(-100, 0, 50, 225)) ? _uniforms.colorGreen : _uniforms.colorRed;
|
||||
int4 clampLow = int4(-100, -200, -200, 100);
|
||||
int4 expectedB = int4(-100, 0, 50, 225);
|
||||
int4 clampHigh = int4(100, 200, 50, 300);
|
||||
_out.sk_FragColor = ((((((clamp(intValues.x, -100, 100) == expectedA.x && all(clamp(intValues.xy, -100, 100) == expectedA.xy)) && all(clamp(intValues.xyz, -100, 100) == expectedA.xyz)) && all(clamp(intValues, -100, 100) == expectedA)) && clamp(intValues.x, clampLow.x, clampHigh.x) == expectedB.x) && all(clamp(intValues.xy, clampLow.xy, clampHigh.xy) == expectedB.xy)) && all(clamp(intValues.xyz, clampLow.xyz, clampHigh.xyz) == expectedB.xyz)) && all(clamp(intValues, clampLow, clampHigh) == expectedB) ? _uniforms.colorGreen : _uniforms.colorRed;
|
||||
return _out;
|
||||
}
|
||||
|
@ -11,6 +11,7 @@ OpMemberName %_UniformBuffer 1 "colorGreen"
|
||||
OpMemberName %_UniformBuffer 2 "colorRed"
|
||||
OpName %_entrypoint "_entrypoint"
|
||||
OpName %main "main"
|
||||
OpName %expected "expected"
|
||||
OpDecorate %sk_FragColor RelaxedPrecision
|
||||
OpDecorate %sk_FragColor Location 0
|
||||
OpDecorate %sk_FragColor Index 0
|
||||
@ -25,13 +26,17 @@ OpMemberDecorate %_UniformBuffer 2 RelaxedPrecision
|
||||
OpDecorate %_UniformBuffer Block
|
||||
OpDecorate %10 Binding 0
|
||||
OpDecorate %10 DescriptorSet 0
|
||||
OpDecorate %26 RelaxedPrecision
|
||||
OpDecorate %32 RelaxedPrecision
|
||||
OpDecorate %34 RelaxedPrecision
|
||||
OpDecorate %47 RelaxedPrecision
|
||||
OpDecorate %59 RelaxedPrecision
|
||||
OpDecorate %73 RelaxedPrecision
|
||||
OpDecorate %76 RelaxedPrecision
|
||||
OpDecorate %77 RelaxedPrecision
|
||||
OpDecorate %41 RelaxedPrecision
|
||||
OpDecorate %44 RelaxedPrecision
|
||||
OpDecorate %54 RelaxedPrecision
|
||||
OpDecorate %57 RelaxedPrecision
|
||||
OpDecorate %67 RelaxedPrecision
|
||||
OpDecorate %68 RelaxedPrecision
|
||||
OpDecorate %79 RelaxedPrecision
|
||||
OpDecorate %82 RelaxedPrecision
|
||||
OpDecorate %83 RelaxedPrecision
|
||||
%float = OpTypeFloat 32
|
||||
%v4float = OpTypeVector %float 4
|
||||
%_ptr_Output_v4float = OpTypePointer Output %v4float
|
||||
@ -45,22 +50,20 @@ OpDecorate %77 RelaxedPrecision
|
||||
%void = OpTypeVoid
|
||||
%15 = OpTypeFunction %void
|
||||
%18 = OpTypeFunction %v4float
|
||||
%_ptr_Function_v4float = OpTypePointer Function %v4float
|
||||
%float_n2 = OpConstant %float -2
|
||||
%float_0 = OpConstant %float 0
|
||||
%float_2 = OpConstant %float 2
|
||||
%25 = OpConstantComposite %v4float %float_n2 %float_0 %float_0 %float_2
|
||||
%false = OpConstantFalse %bool
|
||||
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
|
||||
%int = OpTypeInt 32 1
|
||||
%int_0 = OpConstant %int 0
|
||||
%float_n2 = OpConstant %float -2
|
||||
%v2float = OpTypeVector %float 2
|
||||
%float_0 = OpConstant %float 0
|
||||
%38 = OpConstantComposite %v2float %float_n2 %float_0
|
||||
%v2bool = OpTypeVector %bool 2
|
||||
%v3float = OpTypeVector %float 3
|
||||
%50 = OpConstantComposite %v3float %float_n2 %float_0 %float_0
|
||||
%v3bool = OpTypeVector %bool 3
|
||||
%float_2 = OpConstant %float 2
|
||||
%61 = OpConstantComposite %v4float %float_n2 %float_0 %float_0 %float_2
|
||||
%v4bool = OpTypeVector %bool 4
|
||||
%_ptr_Function_v4float = OpTypePointer Function %v4float
|
||||
%int_1 = OpConstant %int 1
|
||||
%int_2 = OpConstant %int 2
|
||||
%_entrypoint = OpFunction %void None %15
|
||||
@ -71,60 +74,69 @@ OpReturn
|
||||
OpFunctionEnd
|
||||
%main = OpFunction %v4float None %18
|
||||
%19 = OpLabel
|
||||
%66 = OpVariable %_ptr_Function_v4float Function
|
||||
%22 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%26 = OpLoad %v4float %22
|
||||
%27 = OpCompositeExtract %float %26 0
|
||||
%21 = OpExtInst %float %1 Floor %27
|
||||
%29 = OpFOrdEqual %bool %21 %float_n2
|
||||
OpSelectionMerge %31 None
|
||||
OpBranchConditional %29 %30 %31
|
||||
%30 = OpLabel
|
||||
%33 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%34 = OpLoad %v4float %33
|
||||
%35 = OpVectorShuffle %v2float %34 %34 0 1
|
||||
%32 = OpExtInst %v2float %1 Floor %35
|
||||
%39 = OpFOrdEqual %v2bool %32 %38
|
||||
%41 = OpAll %bool %39
|
||||
OpBranch %31
|
||||
%31 = OpLabel
|
||||
%42 = OpPhi %bool %false %19 %41 %30
|
||||
OpSelectionMerge %44 None
|
||||
OpBranchConditional %42 %43 %44
|
||||
%43 = OpLabel
|
||||
%46 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%47 = OpLoad %v4float %46
|
||||
%48 = OpVectorShuffle %v3float %47 %47 0 1 2
|
||||
%45 = OpExtInst %v3float %1 Floor %48
|
||||
%51 = OpFOrdEqual %v3bool %45 %50
|
||||
%53 = OpAll %bool %51
|
||||
OpBranch %44
|
||||
%44 = OpLabel
|
||||
%54 = OpPhi %bool %false %31 %53 %43
|
||||
OpSelectionMerge %56 None
|
||||
OpBranchConditional %54 %55 %56
|
||||
%55 = OpLabel
|
||||
%58 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%59 = OpLoad %v4float %58
|
||||
%57 = OpExtInst %v4float %1 Floor %59
|
||||
%62 = OpFOrdEqual %v4bool %57 %61
|
||||
%64 = OpAll %bool %62
|
||||
OpBranch %56
|
||||
%56 = OpLabel
|
||||
%65 = OpPhi %bool %false %44 %64 %55
|
||||
OpSelectionMerge %70 None
|
||||
OpBranchConditional %65 %68 %69
|
||||
%68 = OpLabel
|
||||
%71 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
|
||||
%73 = OpLoad %v4float %71
|
||||
OpStore %66 %73
|
||||
OpBranch %70
|
||||
%69 = OpLabel
|
||||
%74 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
|
||||
%76 = OpLoad %v4float %74
|
||||
OpStore %66 %76
|
||||
OpBranch %70
|
||||
%70 = OpLabel
|
||||
%77 = OpLoad %v4float %66
|
||||
OpReturnValue %77
|
||||
%expected = OpVariable %_ptr_Function_v4float Function
|
||||
%73 = OpVariable %_ptr_Function_v4float Function
|
||||
OpStore %expected %25
|
||||
%28 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%32 = OpLoad %v4float %28
|
||||
%33 = OpCompositeExtract %float %32 0
|
||||
%27 = OpExtInst %float %1 Floor %33
|
||||
%34 = OpLoad %v4float %expected
|
||||
%35 = OpCompositeExtract %float %34 0
|
||||
%36 = OpFOrdEqual %bool %27 %35
|
||||
OpSelectionMerge %38 None
|
||||
OpBranchConditional %36 %37 %38
|
||||
%37 = OpLabel
|
||||
%40 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%41 = OpLoad %v4float %40
|
||||
%42 = OpVectorShuffle %v2float %41 %41 0 1
|
||||
%39 = OpExtInst %v2float %1 Floor %42
|
||||
%44 = OpLoad %v4float %expected
|
||||
%45 = OpVectorShuffle %v2float %44 %44 0 1
|
||||
%46 = OpFOrdEqual %v2bool %39 %45
|
||||
%48 = OpAll %bool %46
|
||||
OpBranch %38
|
||||
%38 = OpLabel
|
||||
%49 = OpPhi %bool %false %19 %48 %37
|
||||
OpSelectionMerge %51 None
|
||||
OpBranchConditional %49 %50 %51
|
||||
%50 = OpLabel
|
||||
%53 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%54 = OpLoad %v4float %53
|
||||
%55 = OpVectorShuffle %v3float %54 %54 0 1 2
|
||||
%52 = OpExtInst %v3float %1 Floor %55
|
||||
%57 = OpLoad %v4float %expected
|
||||
%58 = OpVectorShuffle %v3float %57 %57 0 1 2
|
||||
%59 = OpFOrdEqual %v3bool %52 %58
|
||||
%61 = OpAll %bool %59
|
||||
OpBranch %51
|
||||
%51 = OpLabel
|
||||
%62 = OpPhi %bool %false %38 %61 %50
|
||||
OpSelectionMerge %64 None
|
||||
OpBranchConditional %62 %63 %64
|
||||
%63 = OpLabel
|
||||
%66 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%67 = OpLoad %v4float %66
|
||||
%65 = OpExtInst %v4float %1 Floor %67
|
||||
%68 = OpLoad %v4float %expected
|
||||
%69 = OpFOrdEqual %v4bool %65 %68
|
||||
%71 = OpAll %bool %69
|
||||
OpBranch %64
|
||||
%64 = OpLabel
|
||||
%72 = OpPhi %bool %false %51 %71 %63
|
||||
OpSelectionMerge %76 None
|
||||
OpBranchConditional %72 %74 %75
|
||||
%74 = OpLabel
|
||||
%77 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
|
||||
%79 = OpLoad %v4float %77
|
||||
OpStore %73 %79
|
||||
OpBranch %76
|
||||
%75 = OpLabel
|
||||
%80 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
|
||||
%82 = OpLoad %v4float %80
|
||||
OpStore %73 %82
|
||||
OpBranch %76
|
||||
%76 = OpLabel
|
||||
%83 = OpLoad %v4float %73
|
||||
OpReturnValue %83
|
||||
OpFunctionEnd
|
||||
|
@ -4,5 +4,6 @@ uniform vec4 testInputs;
|
||||
uniform vec4 colorGreen;
|
||||
uniform vec4 colorRed;
|
||||
vec4 main() {
|
||||
return ((floor(testInputs.x) == -2.0 && floor(testInputs.xy) == vec2(-2.0, 0.0)) && floor(testInputs.xyz) == vec3(-2.0, 0.0, 0.0)) && floor(testInputs) == vec4(-2.0, 0.0, 0.0, 2.0) ? colorGreen : colorRed;
|
||||
vec4 expected = vec4(-2.0, 0.0, 0.0, 2.0);
|
||||
return ((floor(testInputs.x) == expected.x && floor(testInputs.xy) == expected.xy) && floor(testInputs.xyz) == expected.xyz) && floor(testInputs) == expected ? colorGreen : colorRed;
|
||||
}
|
||||
|
@ -17,6 +17,7 @@ struct Outputs {
|
||||
fragment Outputs fragmentMain(Inputs _in [[stage_in]], constant Uniforms& _uniforms [[buffer(0)]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
|
||||
Outputs _out;
|
||||
(void)_out;
|
||||
_out.sk_FragColor = ((floor(_uniforms.testInputs.x) == -2.0 && all(floor(_uniforms.testInputs.xy) == float2(-2.0, 0.0))) && all(floor(_uniforms.testInputs.xyz) == float3(-2.0, 0.0, 0.0))) && all(floor(_uniforms.testInputs) == float4(-2.0, 0.0, 0.0, 2.0)) ? _uniforms.colorGreen : _uniforms.colorRed;
|
||||
float4 expected = float4(-2.0, 0.0, 0.0, 2.0);
|
||||
_out.sk_FragColor = ((floor(_uniforms.testInputs.x) == expected.x && all(floor(_uniforms.testInputs.xy) == expected.xy)) && all(floor(_uniforms.testInputs.xyz) == expected.xyz)) && all(floor(_uniforms.testInputs) == expected) ? _uniforms.colorGreen : _uniforms.colorRed;
|
||||
return _out;
|
||||
}
|
||||
|
@ -11,6 +11,8 @@ OpMemberName %_UniformBuffer 1 "colorGreen"
|
||||
OpMemberName %_UniformBuffer 2 "colorRed"
|
||||
OpName %_entrypoint "_entrypoint"
|
||||
OpName %main "main"
|
||||
OpName %expectedA "expectedA"
|
||||
OpName %expectedB "expectedB"
|
||||
OpDecorate %sk_FragColor RelaxedPrecision
|
||||
OpDecorate %sk_FragColor Location 0
|
||||
OpDecorate %sk_FragColor Index 0
|
||||
@ -25,24 +27,32 @@ OpMemberDecorate %_UniformBuffer 2 RelaxedPrecision
|
||||
OpDecorate %_UniformBuffer Block
|
||||
OpDecorate %10 Binding 0
|
||||
OpDecorate %10 DescriptorSet 0
|
||||
OpDecorate %26 RelaxedPrecision
|
||||
OpDecorate %34 RelaxedPrecision
|
||||
OpDecorate %37 RelaxedPrecision
|
||||
OpDecorate %47 RelaxedPrecision
|
||||
OpDecorate %50 RelaxedPrecision
|
||||
OpDecorate %61 RelaxedPrecision
|
||||
OpDecorate %36 RelaxedPrecision
|
||||
OpDecorate %38 RelaxedPrecision
|
||||
OpDecorate %45 RelaxedPrecision
|
||||
OpDecorate %48 RelaxedPrecision
|
||||
OpDecorate %49 RelaxedPrecision
|
||||
OpDecorate %59 RelaxedPrecision
|
||||
OpDecorate %62 RelaxedPrecision
|
||||
OpDecorate %63 RelaxedPrecision
|
||||
OpDecorate %73 RelaxedPrecision
|
||||
OpDecorate %77 RelaxedPrecision
|
||||
OpDecorate %86 RelaxedPrecision
|
||||
OpDecorate %89 RelaxedPrecision
|
||||
OpDecorate %100 RelaxedPrecision
|
||||
OpDecorate %74 RelaxedPrecision
|
||||
OpDecorate %75 RelaxedPrecision
|
||||
OpDecorate %84 RelaxedPrecision
|
||||
OpDecorate %88 RelaxedPrecision
|
||||
OpDecorate %90 RelaxedPrecision
|
||||
OpDecorate %98 RelaxedPrecision
|
||||
OpDecorate %101 RelaxedPrecision
|
||||
OpDecorate %103 RelaxedPrecision
|
||||
OpDecorate %113 RelaxedPrecision
|
||||
OpDecorate %112 RelaxedPrecision
|
||||
OpDecorate %115 RelaxedPrecision
|
||||
OpDecorate %117 RelaxedPrecision
|
||||
OpDecorate %126 RelaxedPrecision
|
||||
OpDecorate %128 RelaxedPrecision
|
||||
OpDecorate %129 RelaxedPrecision
|
||||
OpDecorate %130 RelaxedPrecision
|
||||
OpDecorate %138 RelaxedPrecision
|
||||
OpDecorate %141 RelaxedPrecision
|
||||
OpDecorate %142 RelaxedPrecision
|
||||
%float = OpTypeFloat 32
|
||||
%v4float = OpTypeVector %float 4
|
||||
%_ptr_Output_v4float = OpTypePointer Output %v4float
|
||||
@ -56,28 +66,24 @@ OpDecorate %130 RelaxedPrecision
|
||||
%void = OpTypeVoid
|
||||
%15 = OpTypeFunction %void
|
||||
%18 = OpTypeFunction %v4float
|
||||
%_ptr_Function_v4float = OpTypePointer Function %v4float
|
||||
%float_0_5 = OpConstant %float 0.5
|
||||
%float_0_75 = OpConstant %float 0.75
|
||||
%float_2_25 = OpConstant %float 2.25
|
||||
%25 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0_75 %float_2_25
|
||||
%float_0 = OpConstant %float 0
|
||||
%float_1 = OpConstant %float 1
|
||||
%29 = OpConstantComposite %v4float %float_0 %float_1 %float_0_75 %float_2_25
|
||||
%false = OpConstantFalse %bool
|
||||
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
|
||||
%int = OpTypeInt 32 1
|
||||
%int_0 = OpConstant %int 0
|
||||
%float_0_5 = OpConstant %float 0.5
|
||||
%v2float = OpTypeVector %float 2
|
||||
%38 = OpConstantComposite %v2float %float_0_5 %float_0_5
|
||||
%v2bool = OpTypeVector %bool 2
|
||||
%v3float = OpTypeVector %float 3
|
||||
%float_0_75 = OpConstant %float 0.75
|
||||
%52 = OpConstantComposite %v3float %float_0_5 %float_0_5 %float_0_75
|
||||
%v3bool = OpTypeVector %bool 3
|
||||
%float_2_25 = OpConstant %float 2.25
|
||||
%64 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0_75 %float_2_25
|
||||
%v4bool = OpTypeVector %bool 4
|
||||
%int_1 = OpConstant %int 1
|
||||
%float_0 = OpConstant %float 0
|
||||
%float_1 = OpConstant %float 1
|
||||
%92 = OpConstantComposite %v2float %float_0 %float_1
|
||||
%105 = OpConstantComposite %v3float %float_0 %float_1 %float_0_75
|
||||
%116 = OpConstantComposite %v4float %float_0 %float_1 %float_0_75 %float_2_25
|
||||
%_ptr_Function_v4float = OpTypePointer Function %v4float
|
||||
%int_2 = OpConstant %int 2
|
||||
%_entrypoint = OpFunction %void None %15
|
||||
%16 = OpLabel
|
||||
@ -87,120 +93,138 @@ OpReturn
|
||||
OpFunctionEnd
|
||||
%main = OpFunction %v4float None %18
|
||||
%19 = OpLabel
|
||||
%120 = OpVariable %_ptr_Function_v4float Function
|
||||
%22 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%26 = OpLoad %v4float %22
|
||||
%27 = OpCompositeExtract %float %26 0
|
||||
%21 = OpExtInst %float %1 FMax %27 %float_0_5
|
||||
%29 = OpFOrdEqual %bool %21 %float_0_5
|
||||
OpSelectionMerge %31 None
|
||||
OpBranchConditional %29 %30 %31
|
||||
%30 = OpLabel
|
||||
%33 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%34 = OpLoad %v4float %33
|
||||
%35 = OpVectorShuffle %v2float %34 %34 0 1
|
||||
%37 = OpCompositeConstruct %v2float %float_0_5 %float_0_5
|
||||
%32 = OpExtInst %v2float %1 FMax %35 %37
|
||||
%39 = OpFOrdEqual %v2bool %32 %38
|
||||
%41 = OpAll %bool %39
|
||||
OpBranch %31
|
||||
%31 = OpLabel
|
||||
%42 = OpPhi %bool %false %19 %41 %30
|
||||
OpSelectionMerge %44 None
|
||||
OpBranchConditional %42 %43 %44
|
||||
%43 = OpLabel
|
||||
%46 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%47 = OpLoad %v4float %46
|
||||
%48 = OpVectorShuffle %v3float %47 %47 0 1 2
|
||||
%50 = OpCompositeConstruct %v3float %float_0_5 %float_0_5 %float_0_5
|
||||
%45 = OpExtInst %v3float %1 FMax %48 %50
|
||||
%53 = OpFOrdEqual %v3bool %45 %52
|
||||
%55 = OpAll %bool %53
|
||||
OpBranch %44
|
||||
%44 = OpLabel
|
||||
%56 = OpPhi %bool %false %31 %55 %43
|
||||
OpSelectionMerge %58 None
|
||||
OpBranchConditional %56 %57 %58
|
||||
%57 = OpLabel
|
||||
%60 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%61 = OpLoad %v4float %60
|
||||
%62 = OpCompositeConstruct %v4float %float_0_5 %float_0_5 %float_0_5 %float_0_5
|
||||
%59 = OpExtInst %v4float %1 FMax %61 %62
|
||||
%65 = OpFOrdEqual %v4bool %59 %64
|
||||
%expectedA = OpVariable %_ptr_Function_v4float Function
|
||||
%expectedB = OpVariable %_ptr_Function_v4float Function
|
||||
%133 = OpVariable %_ptr_Function_v4float Function
|
||||
OpStore %expectedA %25
|
||||
OpStore %expectedB %29
|
||||
%32 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%36 = OpLoad %v4float %32
|
||||
%37 = OpCompositeExtract %float %36 0
|
||||
%31 = OpExtInst %float %1 FMax %37 %float_0_5
|
||||
%38 = OpLoad %v4float %expectedA
|
||||
%39 = OpCompositeExtract %float %38 0
|
||||
%40 = OpFOrdEqual %bool %31 %39
|
||||
OpSelectionMerge %42 None
|
||||
OpBranchConditional %40 %41 %42
|
||||
%41 = OpLabel
|
||||
%44 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%45 = OpLoad %v4float %44
|
||||
%46 = OpVectorShuffle %v2float %45 %45 0 1
|
||||
%48 = OpCompositeConstruct %v2float %float_0_5 %float_0_5
|
||||
%43 = OpExtInst %v2float %1 FMax %46 %48
|
||||
%49 = OpLoad %v4float %expectedA
|
||||
%50 = OpVectorShuffle %v2float %49 %49 0 1
|
||||
%51 = OpFOrdEqual %v2bool %43 %50
|
||||
%53 = OpAll %bool %51
|
||||
OpBranch %42
|
||||
%42 = OpLabel
|
||||
%54 = OpPhi %bool %false %19 %53 %41
|
||||
OpSelectionMerge %56 None
|
||||
OpBranchConditional %54 %55 %56
|
||||
%55 = OpLabel
|
||||
%58 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%59 = OpLoad %v4float %58
|
||||
%60 = OpVectorShuffle %v3float %59 %59 0 1 2
|
||||
%62 = OpCompositeConstruct %v3float %float_0_5 %float_0_5 %float_0_5
|
||||
%57 = OpExtInst %v3float %1 FMax %60 %62
|
||||
%63 = OpLoad %v4float %expectedA
|
||||
%64 = OpVectorShuffle %v3float %63 %63 0 1 2
|
||||
%65 = OpFOrdEqual %v3bool %57 %64
|
||||
%67 = OpAll %bool %65
|
||||
OpBranch %58
|
||||
%58 = OpLabel
|
||||
%68 = OpPhi %bool %false %44 %67 %57
|
||||
OpBranch %56
|
||||
%56 = OpLabel
|
||||
%68 = OpPhi %bool %false %42 %67 %55
|
||||
OpSelectionMerge %70 None
|
||||
OpBranchConditional %68 %69 %70
|
||||
%69 = OpLabel
|
||||
%72 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%73 = OpLoad %v4float %72
|
||||
%74 = OpCompositeExtract %float %73 0
|
||||
%75 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
|
||||
%77 = OpLoad %v4float %75
|
||||
%78 = OpCompositeExtract %float %77 0
|
||||
%71 = OpExtInst %float %1 FMax %74 %78
|
||||
%80 = OpFOrdEqual %bool %71 %float_0
|
||||
%74 = OpCompositeConstruct %v4float %float_0_5 %float_0_5 %float_0_5 %float_0_5
|
||||
%71 = OpExtInst %v4float %1 FMax %73 %74
|
||||
%75 = OpLoad %v4float %expectedA
|
||||
%76 = OpFOrdEqual %v4bool %71 %75
|
||||
%78 = OpAll %bool %76
|
||||
OpBranch %70
|
||||
%70 = OpLabel
|
||||
%81 = OpPhi %bool %false %58 %80 %69
|
||||
OpSelectionMerge %83 None
|
||||
OpBranchConditional %81 %82 %83
|
||||
%82 = OpLabel
|
||||
%85 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%86 = OpLoad %v4float %85
|
||||
%87 = OpVectorShuffle %v2float %86 %86 0 1
|
||||
%88 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
|
||||
%89 = OpLoad %v4float %88
|
||||
%90 = OpVectorShuffle %v2float %89 %89 0 1
|
||||
%84 = OpExtInst %v2float %1 FMax %87 %90
|
||||
%93 = OpFOrdEqual %v2bool %84 %92
|
||||
%94 = OpAll %bool %93
|
||||
OpBranch %83
|
||||
%83 = OpLabel
|
||||
%95 = OpPhi %bool %false %70 %94 %82
|
||||
OpSelectionMerge %97 None
|
||||
OpBranchConditional %95 %96 %97
|
||||
%96 = OpLabel
|
||||
%99 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%100 = OpLoad %v4float %99
|
||||
%101 = OpVectorShuffle %v3float %100 %100 0 1 2
|
||||
%102 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
|
||||
%103 = OpLoad %v4float %102
|
||||
%104 = OpVectorShuffle %v3float %103 %103 0 1 2
|
||||
%98 = OpExtInst %v3float %1 FMax %101 %104
|
||||
%106 = OpFOrdEqual %v3bool %98 %105
|
||||
%107 = OpAll %bool %106
|
||||
OpBranch %97
|
||||
%97 = OpLabel
|
||||
%108 = OpPhi %bool %false %83 %107 %96
|
||||
OpSelectionMerge %110 None
|
||||
OpBranchConditional %108 %109 %110
|
||||
%109 = OpLabel
|
||||
%112 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%113 = OpLoad %v4float %112
|
||||
%79 = OpPhi %bool %false %56 %78 %69
|
||||
OpSelectionMerge %81 None
|
||||
OpBranchConditional %79 %80 %81
|
||||
%80 = OpLabel
|
||||
%83 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%84 = OpLoad %v4float %83
|
||||
%85 = OpCompositeExtract %float %84 0
|
||||
%86 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
|
||||
%88 = OpLoad %v4float %86
|
||||
%89 = OpCompositeExtract %float %88 0
|
||||
%82 = OpExtInst %float %1 FMax %85 %89
|
||||
%90 = OpLoad %v4float %expectedB
|
||||
%91 = OpCompositeExtract %float %90 0
|
||||
%92 = OpFOrdEqual %bool %82 %91
|
||||
OpBranch %81
|
||||
%81 = OpLabel
|
||||
%93 = OpPhi %bool %false %70 %92 %80
|
||||
OpSelectionMerge %95 None
|
||||
OpBranchConditional %93 %94 %95
|
||||
%94 = OpLabel
|
||||
%97 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%98 = OpLoad %v4float %97
|
||||
%99 = OpVectorShuffle %v2float %98 %98 0 1
|
||||
%100 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
|
||||
%101 = OpLoad %v4float %100
|
||||
%102 = OpVectorShuffle %v2float %101 %101 0 1
|
||||
%96 = OpExtInst %v2float %1 FMax %99 %102
|
||||
%103 = OpLoad %v4float %expectedB
|
||||
%104 = OpVectorShuffle %v2float %103 %103 0 1
|
||||
%105 = OpFOrdEqual %v2bool %96 %104
|
||||
%106 = OpAll %bool %105
|
||||
OpBranch %95
|
||||
%95 = OpLabel
|
||||
%107 = OpPhi %bool %false %81 %106 %94
|
||||
OpSelectionMerge %109 None
|
||||
OpBranchConditional %107 %108 %109
|
||||
%108 = OpLabel
|
||||
%111 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%112 = OpLoad %v4float %111
|
||||
%113 = OpVectorShuffle %v3float %112 %112 0 1 2
|
||||
%114 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
|
||||
%115 = OpLoad %v4float %114
|
||||
%111 = OpExtInst %v4float %1 FMax %113 %115
|
||||
%117 = OpFOrdEqual %v4bool %111 %116
|
||||
%118 = OpAll %bool %117
|
||||
OpBranch %110
|
||||
%110 = OpLabel
|
||||
%119 = OpPhi %bool %false %97 %118 %109
|
||||
OpSelectionMerge %124 None
|
||||
OpBranchConditional %119 %122 %123
|
||||
%116 = OpVectorShuffle %v3float %115 %115 0 1 2
|
||||
%110 = OpExtInst %v3float %1 FMax %113 %116
|
||||
%117 = OpLoad %v4float %expectedB
|
||||
%118 = OpVectorShuffle %v3float %117 %117 0 1 2
|
||||
%119 = OpFOrdEqual %v3bool %110 %118
|
||||
%120 = OpAll %bool %119
|
||||
OpBranch %109
|
||||
%109 = OpLabel
|
||||
%121 = OpPhi %bool %false %95 %120 %108
|
||||
OpSelectionMerge %123 None
|
||||
OpBranchConditional %121 %122 %123
|
||||
%122 = OpLabel
|
||||
%125 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
|
||||
%125 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%126 = OpLoad %v4float %125
|
||||
OpStore %120 %126
|
||||
OpBranch %124
|
||||
%127 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
|
||||
%128 = OpLoad %v4float %127
|
||||
%124 = OpExtInst %v4float %1 FMax %126 %128
|
||||
%129 = OpLoad %v4float %expectedB
|
||||
%130 = OpFOrdEqual %v4bool %124 %129
|
||||
%131 = OpAll %bool %130
|
||||
OpBranch %123
|
||||
%123 = OpLabel
|
||||
%127 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
|
||||
%129 = OpLoad %v4float %127
|
||||
OpStore %120 %129
|
||||
OpBranch %124
|
||||
%124 = OpLabel
|
||||
%130 = OpLoad %v4float %120
|
||||
OpReturnValue %130
|
||||
%132 = OpPhi %bool %false %109 %131 %122
|
||||
OpSelectionMerge %136 None
|
||||
OpBranchConditional %132 %134 %135
|
||||
%134 = OpLabel
|
||||
%137 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
|
||||
%138 = OpLoad %v4float %137
|
||||
OpStore %133 %138
|
||||
OpBranch %136
|
||||
%135 = OpLabel
|
||||
%139 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
|
||||
%141 = OpLoad %v4float %139
|
||||
OpStore %133 %141
|
||||
OpBranch %136
|
||||
%136 = OpLabel
|
||||
%142 = OpLoad %v4float %133
|
||||
OpReturnValue %142
|
||||
OpFunctionEnd
|
||||
|
@ -4,5 +4,7 @@ uniform vec4 testInputs;
|
||||
uniform vec4 colorGreen;
|
||||
uniform vec4 colorRed;
|
||||
vec4 main() {
|
||||
return ((((((max(testInputs.x, 0.5) == 0.5 && max(testInputs.xy, 0.5) == vec2(0.5, 0.5)) && max(testInputs.xyz, 0.5) == vec3(0.5, 0.5, 0.75)) && max(testInputs, 0.5) == vec4(0.5, 0.5, 0.75, 2.25)) && max(testInputs.x, colorGreen.x) == 0.0) && max(testInputs.xy, colorGreen.xy) == vec2(0.0, 1.0)) && max(testInputs.xyz, colorGreen.xyz) == vec3(0.0, 1.0, 0.75)) && max(testInputs, colorGreen) == vec4(0.0, 1.0, 0.75, 2.25) ? colorGreen : colorRed;
|
||||
vec4 expectedA = vec4(0.5, 0.5, 0.75, 2.25);
|
||||
vec4 expectedB = vec4(0.0, 1.0, 0.75, 2.25);
|
||||
return ((((((max(testInputs.x, 0.5) == expectedA.x && max(testInputs.xy, 0.5) == expectedA.xy) && max(testInputs.xyz, 0.5) == expectedA.xyz) && max(testInputs, 0.5) == expectedA) && max(testInputs.x, colorGreen.x) == expectedB.x) && max(testInputs.xy, colorGreen.xy) == expectedB.xy) && max(testInputs.xyz, colorGreen.xyz) == expectedB.xyz) && max(testInputs, colorGreen) == expectedB ? colorGreen : colorRed;
|
||||
}
|
||||
|
@ -17,6 +17,8 @@ struct Outputs {
|
||||
fragment Outputs fragmentMain(Inputs _in [[stage_in]], constant Uniforms& _uniforms [[buffer(0)]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
|
||||
Outputs _out;
|
||||
(void)_out;
|
||||
_out.sk_FragColor = ((((((max(_uniforms.testInputs.x, 0.5) == 0.5 && all(max(_uniforms.testInputs.xy, 0.5) == float2(0.5, 0.5))) && all(max(_uniforms.testInputs.xyz, 0.5) == float3(0.5, 0.5, 0.75))) && all(max(_uniforms.testInputs, 0.5) == float4(0.5, 0.5, 0.75, 2.25))) && max(_uniforms.testInputs.x, _uniforms.colorGreen.x) == 0.0) && all(max(_uniforms.testInputs.xy, _uniforms.colorGreen.xy) == float2(0.0, 1.0))) && all(max(_uniforms.testInputs.xyz, _uniforms.colorGreen.xyz) == float3(0.0, 1.0, 0.75))) && all(max(_uniforms.testInputs, _uniforms.colorGreen) == float4(0.0, 1.0, 0.75, 2.25)) ? _uniforms.colorGreen : _uniforms.colorRed;
|
||||
float4 expectedA = float4(0.5, 0.5, 0.75, 2.25);
|
||||
float4 expectedB = float4(0.0, 1.0, 0.75, 2.25);
|
||||
_out.sk_FragColor = ((((((max(_uniforms.testInputs.x, 0.5) == expectedA.x && all(max(_uniforms.testInputs.xy, 0.5) == expectedA.xy)) && all(max(_uniforms.testInputs.xyz, 0.5) == expectedA.xyz)) && all(max(_uniforms.testInputs, 0.5) == expectedA)) && max(_uniforms.testInputs.x, _uniforms.colorGreen.x) == expectedB.x) && all(max(_uniforms.testInputs.xy, _uniforms.colorGreen.xy) == expectedB.xy)) && all(max(_uniforms.testInputs.xyz, _uniforms.colorGreen.xyz) == expectedB.xyz)) && all(max(_uniforms.testInputs, _uniforms.colorGreen) == expectedB) ? _uniforms.colorGreen : _uniforms.colorRed;
|
||||
return _out;
|
||||
}
|
||||
|
@ -13,6 +13,8 @@ OpName %_entrypoint "_entrypoint"
|
||||
OpName %main "main"
|
||||
OpName %intValues "intValues"
|
||||
OpName %intGreen "intGreen"
|
||||
OpName %expectedA "expectedA"
|
||||
OpName %expectedB "expectedB"
|
||||
OpDecorate %sk_FragColor RelaxedPrecision
|
||||
OpDecorate %sk_FragColor Location 0
|
||||
OpDecorate %sk_FragColor Index 0
|
||||
@ -29,9 +31,9 @@ OpDecorate %10 Binding 0
|
||||
OpDecorate %10 DescriptorSet 0
|
||||
OpDecorate %27 RelaxedPrecision
|
||||
OpDecorate %42 RelaxedPrecision
|
||||
OpDecorate %142 RelaxedPrecision
|
||||
OpDecorate %145 RelaxedPrecision
|
||||
OpDecorate %146 RelaxedPrecision
|
||||
OpDecorate %154 RelaxedPrecision
|
||||
OpDecorate %157 RelaxedPrecision
|
||||
OpDecorate %158 RelaxedPrecision
|
||||
%float = OpTypeFloat 32
|
||||
%v4float = OpTypeVector %float 4
|
||||
%_ptr_Output_v4float = OpTypePointer Output %v4float
|
||||
@ -52,22 +54,18 @@ OpDecorate %146 RelaxedPrecision
|
||||
%int_0 = OpConstant %int 0
|
||||
%float_100 = OpConstant %float 100
|
||||
%int_1 = OpConstant %int 1
|
||||
%false = OpConstantFalse %bool
|
||||
%int_50 = OpConstant %int 50
|
||||
%int_75 = OpConstant %int 75
|
||||
%int_225 = OpConstant %int 225
|
||||
%57 = OpConstantComposite %v4int %int_50 %int_50 %int_75 %int_225
|
||||
%int_100 = OpConstant %int 100
|
||||
%60 = OpConstantComposite %v4int %int_0 %int_100 %int_75 %int_225
|
||||
%false = OpConstantFalse %bool
|
||||
%v2int = OpTypeVector %int 2
|
||||
%66 = OpConstantComposite %v2int %int_50 %int_50
|
||||
%v2bool = OpTypeVector %bool 2
|
||||
%v3int = OpTypeVector %int 3
|
||||
%int_75 = OpConstant %int 75
|
||||
%79 = OpConstantComposite %v3int %int_50 %int_50 %int_75
|
||||
%v3bool = OpTypeVector %bool 3
|
||||
%int_225 = OpConstant %int 225
|
||||
%90 = OpConstantComposite %v4int %int_50 %int_50 %int_75 %int_225
|
||||
%v4bool = OpTypeVector %bool 4
|
||||
%int_100 = OpConstant %int 100
|
||||
%112 = OpConstantComposite %v2int %int_0 %int_100
|
||||
%123 = OpConstantComposite %v3int %int_0 %int_100 %int_75
|
||||
%132 = OpConstantComposite %v4int %int_0 %int_100 %int_75 %int_225
|
||||
%_ptr_Function_v4float = OpTypePointer Function %v4float
|
||||
%int_2 = OpConstant %int 2
|
||||
%_entrypoint = OpFunction %void None %15
|
||||
@ -80,7 +78,9 @@ OpFunctionEnd
|
||||
%19 = OpLabel
|
||||
%intValues = OpVariable %_ptr_Function_v4int Function
|
||||
%intGreen = OpVariable %_ptr_Function_v4int Function
|
||||
%136 = OpVariable %_ptr_Function_v4float Function
|
||||
%expectedA = OpVariable %_ptr_Function_v4int Function
|
||||
%expectedB = OpVariable %_ptr_Function_v4int Function
|
||||
%148 = OpVariable %_ptr_Function_v4float Function
|
||||
%24 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%27 = OpLoad %v4float %24
|
||||
%29 = OpVectorTimesScalar %v4float %27 %float_100
|
||||
@ -107,107 +107,123 @@ OpStore %intValues %38
|
||||
%51 = OpConvertFToS %int %50
|
||||
%52 = OpCompositeConstruct %v4int %45 %47 %49 %51
|
||||
OpStore %intGreen %52
|
||||
%55 = OpLoad %v4int %intValues
|
||||
%56 = OpCompositeExtract %int %55 0
|
||||
%54 = OpExtInst %int %1 SMax %56 %int_50
|
||||
%58 = OpIEqual %bool %54 %int_50
|
||||
OpSelectionMerge %60 None
|
||||
OpBranchConditional %58 %59 %60
|
||||
%59 = OpLabel
|
||||
%62 = OpLoad %v4int %intValues
|
||||
%63 = OpVectorShuffle %v2int %62 %62 0 1
|
||||
%65 = OpCompositeConstruct %v2int %int_50 %int_50
|
||||
%61 = OpExtInst %v2int %1 SMax %63 %65
|
||||
%67 = OpIEqual %v2bool %61 %66
|
||||
%69 = OpAll %bool %67
|
||||
OpBranch %60
|
||||
%60 = OpLabel
|
||||
%70 = OpPhi %bool %false %19 %69 %59
|
||||
OpSelectionMerge %72 None
|
||||
OpBranchConditional %70 %71 %72
|
||||
%71 = OpLabel
|
||||
%74 = OpLoad %v4int %intValues
|
||||
%75 = OpVectorShuffle %v3int %74 %74 0 1 2
|
||||
%77 = OpCompositeConstruct %v3int %int_50 %int_50 %int_50
|
||||
%73 = OpExtInst %v3int %1 SMax %75 %77
|
||||
%80 = OpIEqual %v3bool %73 %79
|
||||
%82 = OpAll %bool %80
|
||||
OpBranch %72
|
||||
%72 = OpLabel
|
||||
%83 = OpPhi %bool %false %60 %82 %71
|
||||
OpSelectionMerge %85 None
|
||||
OpBranchConditional %83 %84 %85
|
||||
%84 = OpLabel
|
||||
%87 = OpLoad %v4int %intValues
|
||||
%88 = OpCompositeConstruct %v4int %int_50 %int_50 %int_50 %int_50
|
||||
%86 = OpExtInst %v4int %1 SMax %87 %88
|
||||
%91 = OpIEqual %v4bool %86 %90
|
||||
%93 = OpAll %bool %91
|
||||
OpBranch %85
|
||||
%85 = OpLabel
|
||||
%94 = OpPhi %bool %false %72 %93 %84
|
||||
OpSelectionMerge %96 None
|
||||
OpBranchConditional %94 %95 %96
|
||||
OpStore %expectedA %57
|
||||
OpStore %expectedB %60
|
||||
%63 = OpLoad %v4int %intValues
|
||||
%64 = OpCompositeExtract %int %63 0
|
||||
%62 = OpExtInst %int %1 SMax %64 %int_50
|
||||
%65 = OpLoad %v4int %expectedA
|
||||
%66 = OpCompositeExtract %int %65 0
|
||||
%67 = OpIEqual %bool %62 %66
|
||||
OpSelectionMerge %69 None
|
||||
OpBranchConditional %67 %68 %69
|
||||
%68 = OpLabel
|
||||
%71 = OpLoad %v4int %intValues
|
||||
%72 = OpVectorShuffle %v2int %71 %71 0 1
|
||||
%74 = OpCompositeConstruct %v2int %int_50 %int_50
|
||||
%70 = OpExtInst %v2int %1 SMax %72 %74
|
||||
%75 = OpLoad %v4int %expectedA
|
||||
%76 = OpVectorShuffle %v2int %75 %75 0 1
|
||||
%77 = OpIEqual %v2bool %70 %76
|
||||
%79 = OpAll %bool %77
|
||||
OpBranch %69
|
||||
%69 = OpLabel
|
||||
%80 = OpPhi %bool %false %19 %79 %68
|
||||
OpSelectionMerge %82 None
|
||||
OpBranchConditional %80 %81 %82
|
||||
%81 = OpLabel
|
||||
%84 = OpLoad %v4int %intValues
|
||||
%85 = OpVectorShuffle %v3int %84 %84 0 1 2
|
||||
%87 = OpCompositeConstruct %v3int %int_50 %int_50 %int_50
|
||||
%83 = OpExtInst %v3int %1 SMax %85 %87
|
||||
%88 = OpLoad %v4int %expectedA
|
||||
%89 = OpVectorShuffle %v3int %88 %88 0 1 2
|
||||
%90 = OpIEqual %v3bool %83 %89
|
||||
%92 = OpAll %bool %90
|
||||
OpBranch %82
|
||||
%82 = OpLabel
|
||||
%93 = OpPhi %bool %false %69 %92 %81
|
||||
OpSelectionMerge %95 None
|
||||
OpBranchConditional %93 %94 %95
|
||||
%94 = OpLabel
|
||||
%97 = OpLoad %v4int %intValues
|
||||
%98 = OpCompositeConstruct %v4int %int_50 %int_50 %int_50 %int_50
|
||||
%96 = OpExtInst %v4int %1 SMax %97 %98
|
||||
%99 = OpLoad %v4int %expectedA
|
||||
%100 = OpIEqual %v4bool %96 %99
|
||||
%102 = OpAll %bool %100
|
||||
OpBranch %95
|
||||
%95 = OpLabel
|
||||
%98 = OpLoad %v4int %intValues
|
||||
%99 = OpCompositeExtract %int %98 0
|
||||
%100 = OpLoad %v4int %intGreen
|
||||
%101 = OpCompositeExtract %int %100 0
|
||||
%97 = OpExtInst %int %1 SMax %99 %101
|
||||
%102 = OpIEqual %bool %97 %int_0
|
||||
OpBranch %96
|
||||
%96 = OpLabel
|
||||
%103 = OpPhi %bool %false %85 %102 %95
|
||||
%103 = OpPhi %bool %false %82 %102 %94
|
||||
OpSelectionMerge %105 None
|
||||
OpBranchConditional %103 %104 %105
|
||||
%104 = OpLabel
|
||||
%107 = OpLoad %v4int %intValues
|
||||
%108 = OpVectorShuffle %v2int %107 %107 0 1
|
||||
%108 = OpCompositeExtract %int %107 0
|
||||
%109 = OpLoad %v4int %intGreen
|
||||
%110 = OpVectorShuffle %v2int %109 %109 0 1
|
||||
%106 = OpExtInst %v2int %1 SMax %108 %110
|
||||
%113 = OpIEqual %v2bool %106 %112
|
||||
%114 = OpAll %bool %113
|
||||
%110 = OpCompositeExtract %int %109 0
|
||||
%106 = OpExtInst %int %1 SMax %108 %110
|
||||
%111 = OpLoad %v4int %expectedB
|
||||
%112 = OpCompositeExtract %int %111 0
|
||||
%113 = OpIEqual %bool %106 %112
|
||||
OpBranch %105
|
||||
%105 = OpLabel
|
||||
%115 = OpPhi %bool %false %96 %114 %104
|
||||
OpSelectionMerge %117 None
|
||||
OpBranchConditional %115 %116 %117
|
||||
%116 = OpLabel
|
||||
%119 = OpLoad %v4int %intValues
|
||||
%120 = OpVectorShuffle %v3int %119 %119 0 1 2
|
||||
%121 = OpLoad %v4int %intGreen
|
||||
%122 = OpVectorShuffle %v3int %121 %121 0 1 2
|
||||
%118 = OpExtInst %v3int %1 SMax %120 %122
|
||||
%124 = OpIEqual %v3bool %118 %123
|
||||
%114 = OpPhi %bool %false %95 %113 %104
|
||||
OpSelectionMerge %116 None
|
||||
OpBranchConditional %114 %115 %116
|
||||
%115 = OpLabel
|
||||
%118 = OpLoad %v4int %intValues
|
||||
%119 = OpVectorShuffle %v2int %118 %118 0 1
|
||||
%120 = OpLoad %v4int %intGreen
|
||||
%121 = OpVectorShuffle %v2int %120 %120 0 1
|
||||
%117 = OpExtInst %v2int %1 SMax %119 %121
|
||||
%122 = OpLoad %v4int %expectedB
|
||||
%123 = OpVectorShuffle %v2int %122 %122 0 1
|
||||
%124 = OpIEqual %v2bool %117 %123
|
||||
%125 = OpAll %bool %124
|
||||
OpBranch %117
|
||||
%117 = OpLabel
|
||||
%126 = OpPhi %bool %false %105 %125 %116
|
||||
OpBranch %116
|
||||
%116 = OpLabel
|
||||
%126 = OpPhi %bool %false %105 %125 %115
|
||||
OpSelectionMerge %128 None
|
||||
OpBranchConditional %126 %127 %128
|
||||
%127 = OpLabel
|
||||
%130 = OpLoad %v4int %intValues
|
||||
%131 = OpLoad %v4int %intGreen
|
||||
%129 = OpExtInst %v4int %1 SMax %130 %131
|
||||
%133 = OpIEqual %v4bool %129 %132
|
||||
%134 = OpAll %bool %133
|
||||
%131 = OpVectorShuffle %v3int %130 %130 0 1 2
|
||||
%132 = OpLoad %v4int %intGreen
|
||||
%133 = OpVectorShuffle %v3int %132 %132 0 1 2
|
||||
%129 = OpExtInst %v3int %1 SMax %131 %133
|
||||
%134 = OpLoad %v4int %expectedB
|
||||
%135 = OpVectorShuffle %v3int %134 %134 0 1 2
|
||||
%136 = OpIEqual %v3bool %129 %135
|
||||
%137 = OpAll %bool %136
|
||||
OpBranch %128
|
||||
%128 = OpLabel
|
||||
%135 = OpPhi %bool %false %117 %134 %127
|
||||
%138 = OpPhi %bool %false %116 %137 %127
|
||||
OpSelectionMerge %140 None
|
||||
OpBranchConditional %135 %138 %139
|
||||
%138 = OpLabel
|
||||
%141 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
|
||||
%142 = OpLoad %v4float %141
|
||||
OpStore %136 %142
|
||||
OpBranch %140
|
||||
OpBranchConditional %138 %139 %140
|
||||
%139 = OpLabel
|
||||
%143 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
|
||||
%145 = OpLoad %v4float %143
|
||||
OpStore %136 %145
|
||||
%142 = OpLoad %v4int %intValues
|
||||
%143 = OpLoad %v4int %intGreen
|
||||
%141 = OpExtInst %v4int %1 SMax %142 %143
|
||||
%144 = OpLoad %v4int %expectedB
|
||||
%145 = OpIEqual %v4bool %141 %144
|
||||
%146 = OpAll %bool %145
|
||||
OpBranch %140
|
||||
%140 = OpLabel
|
||||
%146 = OpLoad %v4float %136
|
||||
OpReturnValue %146
|
||||
%147 = OpPhi %bool %false %128 %146 %139
|
||||
OpSelectionMerge %152 None
|
||||
OpBranchConditional %147 %150 %151
|
||||
%150 = OpLabel
|
||||
%153 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
|
||||
%154 = OpLoad %v4float %153
|
||||
OpStore %148 %154
|
||||
OpBranch %152
|
||||
%151 = OpLabel
|
||||
%155 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
|
||||
%157 = OpLoad %v4float %155
|
||||
OpStore %148 %157
|
||||
OpBranch %152
|
||||
%152 = OpLabel
|
||||
%158 = OpLoad %v4float %148
|
||||
OpReturnValue %158
|
||||
OpFunctionEnd
|
||||
|
@ -6,5 +6,7 @@ uniform vec4 colorRed;
|
||||
vec4 main() {
|
||||
ivec4 intValues = ivec4(testInputs * 100.0);
|
||||
ivec4 intGreen = ivec4(colorGreen * 100.0);
|
||||
return ((((((max(intValues.x, 50) == 50 && max(intValues.xy, 50) == ivec2(50, 50)) && max(intValues.xyz, 50) == ivec3(50, 50, 75)) && max(intValues, 50) == ivec4(50, 50, 75, 225)) && max(intValues.x, intGreen.x) == 0) && max(intValues.xy, intGreen.xy) == ivec2(0, 100)) && max(intValues.xyz, intGreen.xyz) == ivec3(0, 100, 75)) && max(intValues, intGreen) == ivec4(0, 100, 75, 225) ? colorGreen : colorRed;
|
||||
ivec4 expectedA = ivec4(50, 50, 75, 225);
|
||||
ivec4 expectedB = ivec4(0, 100, 75, 225);
|
||||
return ((((((max(intValues.x, 50) == expectedA.x && max(intValues.xy, 50) == expectedA.xy) && max(intValues.xyz, 50) == expectedA.xyz) && max(intValues, 50) == expectedA) && max(intValues.x, intGreen.x) == expectedB.x) && max(intValues.xy, intGreen.xy) == expectedB.xy) && max(intValues.xyz, intGreen.xyz) == expectedB.xyz) && max(intValues, intGreen) == expectedB ? colorGreen : colorRed;
|
||||
}
|
||||
|
@ -19,6 +19,8 @@ fragment Outputs fragmentMain(Inputs _in [[stage_in]], constant Uniforms& _unifo
|
||||
(void)_out;
|
||||
int4 intValues = int4(_uniforms.testInputs * 100.0);
|
||||
int4 intGreen = int4(_uniforms.colorGreen * 100.0);
|
||||
_out.sk_FragColor = ((((((max(intValues.x, 50) == 50 && all(max(intValues.xy, 50) == int2(50, 50))) && all(max(intValues.xyz, 50) == int3(50, 50, 75))) && all(max(intValues, 50) == int4(50, 50, 75, 225))) && max(intValues.x, intGreen.x) == 0) && all(max(intValues.xy, intGreen.xy) == int2(0, 100))) && all(max(intValues.xyz, intGreen.xyz) == int3(0, 100, 75))) && all(max(intValues, intGreen) == int4(0, 100, 75, 225)) ? _uniforms.colorGreen : _uniforms.colorRed;
|
||||
int4 expectedA = int4(50, 50, 75, 225);
|
||||
int4 expectedB = int4(0, 100, 75, 225);
|
||||
_out.sk_FragColor = ((((((max(intValues.x, 50) == expectedA.x && all(max(intValues.xy, 50) == expectedA.xy)) && all(max(intValues.xyz, 50) == expectedA.xyz)) && all(max(intValues, 50) == expectedA)) && max(intValues.x, intGreen.x) == expectedB.x) && all(max(intValues.xy, intGreen.xy) == expectedB.xy)) && all(max(intValues.xyz, intGreen.xyz) == expectedB.xyz)) && all(max(intValues, intGreen) == expectedB) ? _uniforms.colorGreen : _uniforms.colorRed;
|
||||
return _out;
|
||||
}
|
||||
|
@ -11,6 +11,8 @@ OpMemberName %_UniformBuffer 1 "colorGreen"
|
||||
OpMemberName %_UniformBuffer 2 "colorRed"
|
||||
OpName %_entrypoint "_entrypoint"
|
||||
OpName %main "main"
|
||||
OpName %expectedA "expectedA"
|
||||
OpName %expectedB "expectedB"
|
||||
OpDecorate %sk_FragColor RelaxedPrecision
|
||||
OpDecorate %sk_FragColor Location 0
|
||||
OpDecorate %sk_FragColor Index 0
|
||||
@ -25,24 +27,32 @@ OpMemberDecorate %_UniformBuffer 2 RelaxedPrecision
|
||||
OpDecorate %_UniformBuffer Block
|
||||
OpDecorate %10 Binding 0
|
||||
OpDecorate %10 DescriptorSet 0
|
||||
OpDecorate %26 RelaxedPrecision
|
||||
OpDecorate %35 RelaxedPrecision
|
||||
OpDecorate %38 RelaxedPrecision
|
||||
OpDecorate %49 RelaxedPrecision
|
||||
OpDecorate %52 RelaxedPrecision
|
||||
OpDecorate %37 RelaxedPrecision
|
||||
OpDecorate %44 RelaxedPrecision
|
||||
OpDecorate %47 RelaxedPrecision
|
||||
OpDecorate %48 RelaxedPrecision
|
||||
OpDecorate %58 RelaxedPrecision
|
||||
OpDecorate %61 RelaxedPrecision
|
||||
OpDecorate %62 RelaxedPrecision
|
||||
OpDecorate %63 RelaxedPrecision
|
||||
OpDecorate %72 RelaxedPrecision
|
||||
OpDecorate %73 RelaxedPrecision
|
||||
OpDecorate %77 RelaxedPrecision
|
||||
OpDecorate %85 RelaxedPrecision
|
||||
OpDecorate %88 RelaxedPrecision
|
||||
OpDecorate %74 RelaxedPrecision
|
||||
OpDecorate %83 RelaxedPrecision
|
||||
OpDecorate %87 RelaxedPrecision
|
||||
OpDecorate %89 RelaxedPrecision
|
||||
OpDecorate %97 RelaxedPrecision
|
||||
OpDecorate %100 RelaxedPrecision
|
||||
OpDecorate %110 RelaxedPrecision
|
||||
OpDecorate %112 RelaxedPrecision
|
||||
OpDecorate %124 RelaxedPrecision
|
||||
OpDecorate %102 RelaxedPrecision
|
||||
OpDecorate %111 RelaxedPrecision
|
||||
OpDecorate %114 RelaxedPrecision
|
||||
OpDecorate %116 RelaxedPrecision
|
||||
OpDecorate %125 RelaxedPrecision
|
||||
OpDecorate %127 RelaxedPrecision
|
||||
OpDecorate %128 RelaxedPrecision
|
||||
OpDecorate %137 RelaxedPrecision
|
||||
OpDecorate %140 RelaxedPrecision
|
||||
OpDecorate %141 RelaxedPrecision
|
||||
%float = OpTypeFloat 32
|
||||
%v4float = OpTypeVector %float 4
|
||||
%_ptr_Output_v4float = OpTypePointer Output %v4float
|
||||
@ -56,26 +66,23 @@ OpDecorate %128 RelaxedPrecision
|
||||
%void = OpTypeVoid
|
||||
%15 = OpTypeFunction %void
|
||||
%18 = OpTypeFunction %v4float
|
||||
%_ptr_Function_v4float = OpTypePointer Function %v4float
|
||||
%float_n1_25 = OpConstant %float -1.25
|
||||
%float_0 = OpConstant %float 0
|
||||
%float_0_5 = OpConstant %float 0.5
|
||||
%25 = OpConstantComposite %v4float %float_n1_25 %float_0 %float_0_5 %float_0_5
|
||||
%float_1 = OpConstant %float 1
|
||||
%28 = OpConstantComposite %v4float %float_n1_25 %float_0 %float_0 %float_1
|
||||
%false = OpConstantFalse %bool
|
||||
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
|
||||
%int = OpTypeInt 32 1
|
||||
%int_0 = OpConstant %int 0
|
||||
%float_0_5 = OpConstant %float 0.5
|
||||
%float_n1_25 = OpConstant %float -1.25
|
||||
%v2float = OpTypeVector %float 2
|
||||
%float_0 = OpConstant %float 0
|
||||
%40 = OpConstantComposite %v2float %float_n1_25 %float_0
|
||||
%v2bool = OpTypeVector %bool 2
|
||||
%v3float = OpTypeVector %float 3
|
||||
%53 = OpConstantComposite %v3float %float_n1_25 %float_0 %float_0_5
|
||||
%v3bool = OpTypeVector %bool 3
|
||||
%64 = OpConstantComposite %v4float %float_n1_25 %float_0 %float_0_5 %float_0_5
|
||||
%v4bool = OpTypeVector %bool 4
|
||||
%int_1 = OpConstant %int 1
|
||||
%102 = OpConstantComposite %v3float %float_n1_25 %float_0 %float_0
|
||||
%float_1 = OpConstant %float 1
|
||||
%114 = OpConstantComposite %v4float %float_n1_25 %float_0 %float_0 %float_1
|
||||
%_ptr_Function_v4float = OpTypePointer Function %v4float
|
||||
%int_2 = OpConstant %int 2
|
||||
%_entrypoint = OpFunction %void None %15
|
||||
%16 = OpLabel
|
||||
@ -85,120 +92,138 @@ OpReturn
|
||||
OpFunctionEnd
|
||||
%main = OpFunction %v4float None %18
|
||||
%19 = OpLabel
|
||||
%118 = OpVariable %_ptr_Function_v4float Function
|
||||
%22 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%26 = OpLoad %v4float %22
|
||||
%27 = OpCompositeExtract %float %26 0
|
||||
%21 = OpExtInst %float %1 FMin %27 %float_0_5
|
||||
%30 = OpFOrdEqual %bool %21 %float_n1_25
|
||||
OpSelectionMerge %32 None
|
||||
OpBranchConditional %30 %31 %32
|
||||
%31 = OpLabel
|
||||
%34 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%35 = OpLoad %v4float %34
|
||||
%36 = OpVectorShuffle %v2float %35 %35 0 1
|
||||
%38 = OpCompositeConstruct %v2float %float_0_5 %float_0_5
|
||||
%33 = OpExtInst %v2float %1 FMin %36 %38
|
||||
%41 = OpFOrdEqual %v2bool %33 %40
|
||||
%43 = OpAll %bool %41
|
||||
OpBranch %32
|
||||
%32 = OpLabel
|
||||
%44 = OpPhi %bool %false %19 %43 %31
|
||||
OpSelectionMerge %46 None
|
||||
OpBranchConditional %44 %45 %46
|
||||
%45 = OpLabel
|
||||
%48 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%49 = OpLoad %v4float %48
|
||||
%50 = OpVectorShuffle %v3float %49 %49 0 1 2
|
||||
%52 = OpCompositeConstruct %v3float %float_0_5 %float_0_5 %float_0_5
|
||||
%47 = OpExtInst %v3float %1 FMin %50 %52
|
||||
%54 = OpFOrdEqual %v3bool %47 %53
|
||||
%56 = OpAll %bool %54
|
||||
OpBranch %46
|
||||
%46 = OpLabel
|
||||
%57 = OpPhi %bool %false %32 %56 %45
|
||||
OpSelectionMerge %59 None
|
||||
OpBranchConditional %57 %58 %59
|
||||
%58 = OpLabel
|
||||
%61 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%62 = OpLoad %v4float %61
|
||||
%63 = OpCompositeConstruct %v4float %float_0_5 %float_0_5 %float_0_5 %float_0_5
|
||||
%60 = OpExtInst %v4float %1 FMin %62 %63
|
||||
%65 = OpFOrdEqual %v4bool %60 %64
|
||||
%67 = OpAll %bool %65
|
||||
OpBranch %59
|
||||
%59 = OpLabel
|
||||
%68 = OpPhi %bool %false %46 %67 %58
|
||||
OpSelectionMerge %70 None
|
||||
OpBranchConditional %68 %69 %70
|
||||
%expectedA = OpVariable %_ptr_Function_v4float Function
|
||||
%expectedB = OpVariable %_ptr_Function_v4float Function
|
||||
%132 = OpVariable %_ptr_Function_v4float Function
|
||||
OpStore %expectedA %25
|
||||
OpStore %expectedB %28
|
||||
%31 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%35 = OpLoad %v4float %31
|
||||
%36 = OpCompositeExtract %float %35 0
|
||||
%30 = OpExtInst %float %1 FMin %36 %float_0_5
|
||||
%37 = OpLoad %v4float %expectedA
|
||||
%38 = OpCompositeExtract %float %37 0
|
||||
%39 = OpFOrdEqual %bool %30 %38
|
||||
OpSelectionMerge %41 None
|
||||
OpBranchConditional %39 %40 %41
|
||||
%40 = OpLabel
|
||||
%43 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%44 = OpLoad %v4float %43
|
||||
%45 = OpVectorShuffle %v2float %44 %44 0 1
|
||||
%47 = OpCompositeConstruct %v2float %float_0_5 %float_0_5
|
||||
%42 = OpExtInst %v2float %1 FMin %45 %47
|
||||
%48 = OpLoad %v4float %expectedA
|
||||
%49 = OpVectorShuffle %v2float %48 %48 0 1
|
||||
%50 = OpFOrdEqual %v2bool %42 %49
|
||||
%52 = OpAll %bool %50
|
||||
OpBranch %41
|
||||
%41 = OpLabel
|
||||
%53 = OpPhi %bool %false %19 %52 %40
|
||||
OpSelectionMerge %55 None
|
||||
OpBranchConditional %53 %54 %55
|
||||
%54 = OpLabel
|
||||
%57 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%58 = OpLoad %v4float %57
|
||||
%59 = OpVectorShuffle %v3float %58 %58 0 1 2
|
||||
%61 = OpCompositeConstruct %v3float %float_0_5 %float_0_5 %float_0_5
|
||||
%56 = OpExtInst %v3float %1 FMin %59 %61
|
||||
%62 = OpLoad %v4float %expectedA
|
||||
%63 = OpVectorShuffle %v3float %62 %62 0 1 2
|
||||
%64 = OpFOrdEqual %v3bool %56 %63
|
||||
%66 = OpAll %bool %64
|
||||
OpBranch %55
|
||||
%55 = OpLabel
|
||||
%67 = OpPhi %bool %false %41 %66 %54
|
||||
OpSelectionMerge %69 None
|
||||
OpBranchConditional %67 %68 %69
|
||||
%68 = OpLabel
|
||||
%71 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%72 = OpLoad %v4float %71
|
||||
%73 = OpCompositeConstruct %v4float %float_0_5 %float_0_5 %float_0_5 %float_0_5
|
||||
%70 = OpExtInst %v4float %1 FMin %72 %73
|
||||
%74 = OpLoad %v4float %expectedA
|
||||
%75 = OpFOrdEqual %v4bool %70 %74
|
||||
%77 = OpAll %bool %75
|
||||
OpBranch %69
|
||||
%69 = OpLabel
|
||||
%72 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%73 = OpLoad %v4float %72
|
||||
%74 = OpCompositeExtract %float %73 0
|
||||
%75 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
|
||||
%77 = OpLoad %v4float %75
|
||||
%78 = OpCompositeExtract %float %77 0
|
||||
%71 = OpExtInst %float %1 FMin %74 %78
|
||||
%79 = OpFOrdEqual %bool %71 %float_n1_25
|
||||
OpBranch %70
|
||||
%70 = OpLabel
|
||||
%80 = OpPhi %bool %false %59 %79 %69
|
||||
OpSelectionMerge %82 None
|
||||
OpBranchConditional %80 %81 %82
|
||||
%81 = OpLabel
|
||||
%84 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%85 = OpLoad %v4float %84
|
||||
%86 = OpVectorShuffle %v2float %85 %85 0 1
|
||||
%87 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
|
||||
%88 = OpLoad %v4float %87
|
||||
%89 = OpVectorShuffle %v2float %88 %88 0 1
|
||||
%83 = OpExtInst %v2float %1 FMin %86 %89
|
||||
%90 = OpFOrdEqual %v2bool %83 %40
|
||||
%91 = OpAll %bool %90
|
||||
OpBranch %82
|
||||
%82 = OpLabel
|
||||
%92 = OpPhi %bool %false %70 %91 %81
|
||||
%78 = OpPhi %bool %false %55 %77 %68
|
||||
OpSelectionMerge %80 None
|
||||
OpBranchConditional %78 %79 %80
|
||||
%79 = OpLabel
|
||||
%82 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%83 = OpLoad %v4float %82
|
||||
%84 = OpCompositeExtract %float %83 0
|
||||
%85 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
|
||||
%87 = OpLoad %v4float %85
|
||||
%88 = OpCompositeExtract %float %87 0
|
||||
%81 = OpExtInst %float %1 FMin %84 %88
|
||||
%89 = OpLoad %v4float %expectedB
|
||||
%90 = OpCompositeExtract %float %89 0
|
||||
%91 = OpFOrdEqual %bool %81 %90
|
||||
OpBranch %80
|
||||
%80 = OpLabel
|
||||
%92 = OpPhi %bool %false %69 %91 %79
|
||||
OpSelectionMerge %94 None
|
||||
OpBranchConditional %92 %93 %94
|
||||
%93 = OpLabel
|
||||
%96 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%97 = OpLoad %v4float %96
|
||||
%98 = OpVectorShuffle %v3float %97 %97 0 1 2
|
||||
%98 = OpVectorShuffle %v2float %97 %97 0 1
|
||||
%99 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
|
||||
%100 = OpLoad %v4float %99
|
||||
%101 = OpVectorShuffle %v3float %100 %100 0 1 2
|
||||
%95 = OpExtInst %v3float %1 FMin %98 %101
|
||||
%103 = OpFOrdEqual %v3bool %95 %102
|
||||
%104 = OpAll %bool %103
|
||||
%101 = OpVectorShuffle %v2float %100 %100 0 1
|
||||
%95 = OpExtInst %v2float %1 FMin %98 %101
|
||||
%102 = OpLoad %v4float %expectedB
|
||||
%103 = OpVectorShuffle %v2float %102 %102 0 1
|
||||
%104 = OpFOrdEqual %v2bool %95 %103
|
||||
%105 = OpAll %bool %104
|
||||
OpBranch %94
|
||||
%94 = OpLabel
|
||||
%105 = OpPhi %bool %false %82 %104 %93
|
||||
OpSelectionMerge %107 None
|
||||
OpBranchConditional %105 %106 %107
|
||||
%106 = OpLabel
|
||||
%109 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%110 = OpLoad %v4float %109
|
||||
%111 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
|
||||
%112 = OpLoad %v4float %111
|
||||
%108 = OpExtInst %v4float %1 FMin %110 %112
|
||||
%115 = OpFOrdEqual %v4bool %108 %114
|
||||
%116 = OpAll %bool %115
|
||||
OpBranch %107
|
||||
%106 = OpPhi %bool %false %80 %105 %93
|
||||
OpSelectionMerge %108 None
|
||||
OpBranchConditional %106 %107 %108
|
||||
%107 = OpLabel
|
||||
%117 = OpPhi %bool %false %94 %116 %106
|
||||
%110 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%111 = OpLoad %v4float %110
|
||||
%112 = OpVectorShuffle %v3float %111 %111 0 1 2
|
||||
%113 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
|
||||
%114 = OpLoad %v4float %113
|
||||
%115 = OpVectorShuffle %v3float %114 %114 0 1 2
|
||||
%109 = OpExtInst %v3float %1 FMin %112 %115
|
||||
%116 = OpLoad %v4float %expectedB
|
||||
%117 = OpVectorShuffle %v3float %116 %116 0 1 2
|
||||
%118 = OpFOrdEqual %v3bool %109 %117
|
||||
%119 = OpAll %bool %118
|
||||
OpBranch %108
|
||||
%108 = OpLabel
|
||||
%120 = OpPhi %bool %false %94 %119 %107
|
||||
OpSelectionMerge %122 None
|
||||
OpBranchConditional %117 %120 %121
|
||||
%120 = OpLabel
|
||||
%123 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
|
||||
%124 = OpLoad %v4float %123
|
||||
OpStore %118 %124
|
||||
OpBranch %122
|
||||
OpBranchConditional %120 %121 %122
|
||||
%121 = OpLabel
|
||||
%125 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
|
||||
%127 = OpLoad %v4float %125
|
||||
OpStore %118 %127
|
||||
%124 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%125 = OpLoad %v4float %124
|
||||
%126 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
|
||||
%127 = OpLoad %v4float %126
|
||||
%123 = OpExtInst %v4float %1 FMin %125 %127
|
||||
%128 = OpLoad %v4float %expectedB
|
||||
%129 = OpFOrdEqual %v4bool %123 %128
|
||||
%130 = OpAll %bool %129
|
||||
OpBranch %122
|
||||
%122 = OpLabel
|
||||
%128 = OpLoad %v4float %118
|
||||
OpReturnValue %128
|
||||
%131 = OpPhi %bool %false %108 %130 %121
|
||||
OpSelectionMerge %135 None
|
||||
OpBranchConditional %131 %133 %134
|
||||
%133 = OpLabel
|
||||
%136 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
|
||||
%137 = OpLoad %v4float %136
|
||||
OpStore %132 %137
|
||||
OpBranch %135
|
||||
%134 = OpLabel
|
||||
%138 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
|
||||
%140 = OpLoad %v4float %138
|
||||
OpStore %132 %140
|
||||
OpBranch %135
|
||||
%135 = OpLabel
|
||||
%141 = OpLoad %v4float %132
|
||||
OpReturnValue %141
|
||||
OpFunctionEnd
|
||||
|
@ -4,5 +4,7 @@ uniform vec4 testInputs;
|
||||
uniform vec4 colorGreen;
|
||||
uniform vec4 colorRed;
|
||||
vec4 main() {
|
||||
return ((((((min(testInputs.x, 0.5) == -1.25 && min(testInputs.xy, 0.5) == vec2(-1.25, 0.0)) && min(testInputs.xyz, 0.5) == vec3(-1.25, 0.0, 0.5)) && min(testInputs, 0.5) == vec4(-1.25, 0.0, 0.5, 0.5)) && min(testInputs.x, colorGreen.x) == -1.25) && min(testInputs.xy, colorGreen.xy) == vec2(-1.25, 0.0)) && min(testInputs.xyz, colorGreen.xyz) == vec3(-1.25, 0.0, 0.0)) && min(testInputs, colorGreen) == vec4(-1.25, 0.0, 0.0, 1.0) ? colorGreen : colorRed;
|
||||
vec4 expectedA = vec4(-1.25, 0.0, 0.5, 0.5);
|
||||
vec4 expectedB = vec4(-1.25, 0.0, 0.0, 1.0);
|
||||
return ((((((min(testInputs.x, 0.5) == expectedA.x && min(testInputs.xy, 0.5) == expectedA.xy) && min(testInputs.xyz, 0.5) == expectedA.xyz) && min(testInputs, 0.5) == expectedA) && min(testInputs.x, colorGreen.x) == expectedB.x) && min(testInputs.xy, colorGreen.xy) == expectedB.xy) && min(testInputs.xyz, colorGreen.xyz) == expectedB.xyz) && min(testInputs, colorGreen) == expectedB ? colorGreen : colorRed;
|
||||
}
|
||||
|
@ -17,6 +17,8 @@ struct Outputs {
|
||||
fragment Outputs fragmentMain(Inputs _in [[stage_in]], constant Uniforms& _uniforms [[buffer(0)]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
|
||||
Outputs _out;
|
||||
(void)_out;
|
||||
_out.sk_FragColor = ((((((min(_uniforms.testInputs.x, 0.5) == -1.25 && all(min(_uniforms.testInputs.xy, 0.5) == float2(-1.25, 0.0))) && all(min(_uniforms.testInputs.xyz, 0.5) == float3(-1.25, 0.0, 0.5))) && all(min(_uniforms.testInputs, 0.5) == float4(-1.25, 0.0, 0.5, 0.5))) && min(_uniforms.testInputs.x, _uniforms.colorGreen.x) == -1.25) && all(min(_uniforms.testInputs.xy, _uniforms.colorGreen.xy) == float2(-1.25, 0.0))) && all(min(_uniforms.testInputs.xyz, _uniforms.colorGreen.xyz) == float3(-1.25, 0.0, 0.0))) && all(min(_uniforms.testInputs, _uniforms.colorGreen) == float4(-1.25, 0.0, 0.0, 1.0)) ? _uniforms.colorGreen : _uniforms.colorRed;
|
||||
float4 expectedA = float4(-1.25, 0.0, 0.5, 0.5);
|
||||
float4 expectedB = float4(-1.25, 0.0, 0.0, 1.0);
|
||||
_out.sk_FragColor = ((((((min(_uniforms.testInputs.x, 0.5) == expectedA.x && all(min(_uniforms.testInputs.xy, 0.5) == expectedA.xy)) && all(min(_uniforms.testInputs.xyz, 0.5) == expectedA.xyz)) && all(min(_uniforms.testInputs, 0.5) == expectedA)) && min(_uniforms.testInputs.x, _uniforms.colorGreen.x) == expectedB.x) && all(min(_uniforms.testInputs.xy, _uniforms.colorGreen.xy) == expectedB.xy)) && all(min(_uniforms.testInputs.xyz, _uniforms.colorGreen.xyz) == expectedB.xyz)) && all(min(_uniforms.testInputs, _uniforms.colorGreen) == expectedB) ? _uniforms.colorGreen : _uniforms.colorRed;
|
||||
return _out;
|
||||
}
|
||||
|
@ -13,6 +13,8 @@ OpName %_entrypoint "_entrypoint"
|
||||
OpName %main "main"
|
||||
OpName %intValues "intValues"
|
||||
OpName %intGreen "intGreen"
|
||||
OpName %expectedA "expectedA"
|
||||
OpName %expectedB "expectedB"
|
||||
OpDecorate %sk_FragColor RelaxedPrecision
|
||||
OpDecorate %sk_FragColor Location 0
|
||||
OpDecorate %sk_FragColor Index 0
|
||||
@ -29,9 +31,9 @@ OpDecorate %10 Binding 0
|
||||
OpDecorate %10 DescriptorSet 0
|
||||
OpDecorate %27 RelaxedPrecision
|
||||
OpDecorate %42 RelaxedPrecision
|
||||
OpDecorate %140 RelaxedPrecision
|
||||
OpDecorate %143 RelaxedPrecision
|
||||
OpDecorate %144 RelaxedPrecision
|
||||
OpDecorate %153 RelaxedPrecision
|
||||
OpDecorate %156 RelaxedPrecision
|
||||
OpDecorate %157 RelaxedPrecision
|
||||
%float = OpTypeFloat 32
|
||||
%v4float = OpTypeVector %float 4
|
||||
%_ptr_Output_v4float = OpTypePointer Output %v4float
|
||||
@ -52,20 +54,17 @@ OpDecorate %144 RelaxedPrecision
|
||||
%int_0 = OpConstant %int 0
|
||||
%float_100 = OpConstant %float 100
|
||||
%int_1 = OpConstant %int 1
|
||||
%false = OpConstantFalse %bool
|
||||
%int_50 = OpConstant %int 50
|
||||
%int_n125 = OpConstant %int -125
|
||||
%int_50 = OpConstant %int 50
|
||||
%56 = OpConstantComposite %v4int %int_n125 %int_0 %int_50 %int_50
|
||||
%int_100 = OpConstant %int 100
|
||||
%59 = OpConstantComposite %v4int %int_n125 %int_0 %int_0 %int_100
|
||||
%false = OpConstantFalse %bool
|
||||
%v2int = OpTypeVector %int 2
|
||||
%67 = OpConstantComposite %v2int %int_n125 %int_0
|
||||
%v2bool = OpTypeVector %bool 2
|
||||
%v3int = OpTypeVector %int 3
|
||||
%79 = OpConstantComposite %v3int %int_n125 %int_0 %int_50
|
||||
%v3bool = OpTypeVector %bool 3
|
||||
%89 = OpConstantComposite %v4int %int_n125 %int_0 %int_50 %int_50
|
||||
%v4bool = OpTypeVector %bool 4
|
||||
%120 = OpConstantComposite %v3int %int_n125 %int_0 %int_0
|
||||
%int_100 = OpConstant %int 100
|
||||
%130 = OpConstantComposite %v4int %int_n125 %int_0 %int_0 %int_100
|
||||
%_ptr_Function_v4float = OpTypePointer Function %v4float
|
||||
%int_2 = OpConstant %int 2
|
||||
%_entrypoint = OpFunction %void None %15
|
||||
@ -78,7 +77,9 @@ OpFunctionEnd
|
||||
%19 = OpLabel
|
||||
%intValues = OpVariable %_ptr_Function_v4int Function
|
||||
%intGreen = OpVariable %_ptr_Function_v4int Function
|
||||
%134 = OpVariable %_ptr_Function_v4float Function
|
||||
%expectedA = OpVariable %_ptr_Function_v4int Function
|
||||
%expectedB = OpVariable %_ptr_Function_v4int Function
|
||||
%147 = OpVariable %_ptr_Function_v4float Function
|
||||
%24 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%27 = OpLoad %v4float %24
|
||||
%29 = OpVectorTimesScalar %v4float %27 %float_100
|
||||
@ -105,107 +106,123 @@ OpStore %intValues %38
|
||||
%51 = OpConvertFToS %int %50
|
||||
%52 = OpCompositeConstruct %v4int %45 %47 %49 %51
|
||||
OpStore %intGreen %52
|
||||
%55 = OpLoad %v4int %intValues
|
||||
%56 = OpCompositeExtract %int %55 0
|
||||
%54 = OpExtInst %int %1 SMin %56 %int_50
|
||||
%59 = OpIEqual %bool %54 %int_n125
|
||||
OpSelectionMerge %61 None
|
||||
OpBranchConditional %59 %60 %61
|
||||
%60 = OpLabel
|
||||
%63 = OpLoad %v4int %intValues
|
||||
%64 = OpVectorShuffle %v2int %63 %63 0 1
|
||||
%66 = OpCompositeConstruct %v2int %int_50 %int_50
|
||||
%62 = OpExtInst %v2int %1 SMin %64 %66
|
||||
%68 = OpIEqual %v2bool %62 %67
|
||||
%70 = OpAll %bool %68
|
||||
OpBranch %61
|
||||
%61 = OpLabel
|
||||
%71 = OpPhi %bool %false %19 %70 %60
|
||||
OpSelectionMerge %73 None
|
||||
OpBranchConditional %71 %72 %73
|
||||
%72 = OpLabel
|
||||
%75 = OpLoad %v4int %intValues
|
||||
%76 = OpVectorShuffle %v3int %75 %75 0 1 2
|
||||
%78 = OpCompositeConstruct %v3int %int_50 %int_50 %int_50
|
||||
%74 = OpExtInst %v3int %1 SMin %76 %78
|
||||
%80 = OpIEqual %v3bool %74 %79
|
||||
%82 = OpAll %bool %80
|
||||
OpBranch %73
|
||||
%73 = OpLabel
|
||||
%83 = OpPhi %bool %false %61 %82 %72
|
||||
OpSelectionMerge %85 None
|
||||
OpBranchConditional %83 %84 %85
|
||||
%84 = OpLabel
|
||||
%87 = OpLoad %v4int %intValues
|
||||
%88 = OpCompositeConstruct %v4int %int_50 %int_50 %int_50 %int_50
|
||||
%86 = OpExtInst %v4int %1 SMin %87 %88
|
||||
%90 = OpIEqual %v4bool %86 %89
|
||||
%92 = OpAll %bool %90
|
||||
OpBranch %85
|
||||
%85 = OpLabel
|
||||
%93 = OpPhi %bool %false %73 %92 %84
|
||||
OpSelectionMerge %95 None
|
||||
OpBranchConditional %93 %94 %95
|
||||
OpStore %expectedA %56
|
||||
OpStore %expectedB %59
|
||||
%62 = OpLoad %v4int %intValues
|
||||
%63 = OpCompositeExtract %int %62 0
|
||||
%61 = OpExtInst %int %1 SMin %63 %int_50
|
||||
%64 = OpLoad %v4int %expectedA
|
||||
%65 = OpCompositeExtract %int %64 0
|
||||
%66 = OpIEqual %bool %61 %65
|
||||
OpSelectionMerge %68 None
|
||||
OpBranchConditional %66 %67 %68
|
||||
%67 = OpLabel
|
||||
%70 = OpLoad %v4int %intValues
|
||||
%71 = OpVectorShuffle %v2int %70 %70 0 1
|
||||
%73 = OpCompositeConstruct %v2int %int_50 %int_50
|
||||
%69 = OpExtInst %v2int %1 SMin %71 %73
|
||||
%74 = OpLoad %v4int %expectedA
|
||||
%75 = OpVectorShuffle %v2int %74 %74 0 1
|
||||
%76 = OpIEqual %v2bool %69 %75
|
||||
%78 = OpAll %bool %76
|
||||
OpBranch %68
|
||||
%68 = OpLabel
|
||||
%79 = OpPhi %bool %false %19 %78 %67
|
||||
OpSelectionMerge %81 None
|
||||
OpBranchConditional %79 %80 %81
|
||||
%80 = OpLabel
|
||||
%83 = OpLoad %v4int %intValues
|
||||
%84 = OpVectorShuffle %v3int %83 %83 0 1 2
|
||||
%86 = OpCompositeConstruct %v3int %int_50 %int_50 %int_50
|
||||
%82 = OpExtInst %v3int %1 SMin %84 %86
|
||||
%87 = OpLoad %v4int %expectedA
|
||||
%88 = OpVectorShuffle %v3int %87 %87 0 1 2
|
||||
%89 = OpIEqual %v3bool %82 %88
|
||||
%91 = OpAll %bool %89
|
||||
OpBranch %81
|
||||
%81 = OpLabel
|
||||
%92 = OpPhi %bool %false %68 %91 %80
|
||||
OpSelectionMerge %94 None
|
||||
OpBranchConditional %92 %93 %94
|
||||
%93 = OpLabel
|
||||
%96 = OpLoad %v4int %intValues
|
||||
%97 = OpCompositeConstruct %v4int %int_50 %int_50 %int_50 %int_50
|
||||
%95 = OpExtInst %v4int %1 SMin %96 %97
|
||||
%98 = OpLoad %v4int %expectedA
|
||||
%99 = OpIEqual %v4bool %95 %98
|
||||
%101 = OpAll %bool %99
|
||||
OpBranch %94
|
||||
%94 = OpLabel
|
||||
%97 = OpLoad %v4int %intValues
|
||||
%98 = OpCompositeExtract %int %97 0
|
||||
%99 = OpLoad %v4int %intGreen
|
||||
%100 = OpCompositeExtract %int %99 0
|
||||
%96 = OpExtInst %int %1 SMin %98 %100
|
||||
%101 = OpIEqual %bool %96 %int_n125
|
||||
OpBranch %95
|
||||
%95 = OpLabel
|
||||
%102 = OpPhi %bool %false %85 %101 %94
|
||||
%102 = OpPhi %bool %false %81 %101 %93
|
||||
OpSelectionMerge %104 None
|
||||
OpBranchConditional %102 %103 %104
|
||||
%103 = OpLabel
|
||||
%106 = OpLoad %v4int %intValues
|
||||
%107 = OpVectorShuffle %v2int %106 %106 0 1
|
||||
%107 = OpCompositeExtract %int %106 0
|
||||
%108 = OpLoad %v4int %intGreen
|
||||
%109 = OpVectorShuffle %v2int %108 %108 0 1
|
||||
%105 = OpExtInst %v2int %1 SMin %107 %109
|
||||
%110 = OpIEqual %v2bool %105 %67
|
||||
%111 = OpAll %bool %110
|
||||
%109 = OpCompositeExtract %int %108 0
|
||||
%105 = OpExtInst %int %1 SMin %107 %109
|
||||
%110 = OpLoad %v4int %expectedB
|
||||
%111 = OpCompositeExtract %int %110 0
|
||||
%112 = OpIEqual %bool %105 %111
|
||||
OpBranch %104
|
||||
%104 = OpLabel
|
||||
%112 = OpPhi %bool %false %95 %111 %103
|
||||
OpSelectionMerge %114 None
|
||||
OpBranchConditional %112 %113 %114
|
||||
%113 = OpLabel
|
||||
%116 = OpLoad %v4int %intValues
|
||||
%117 = OpVectorShuffle %v3int %116 %116 0 1 2
|
||||
%118 = OpLoad %v4int %intGreen
|
||||
%119 = OpVectorShuffle %v3int %118 %118 0 1 2
|
||||
%115 = OpExtInst %v3int %1 SMin %117 %119
|
||||
%121 = OpIEqual %v3bool %115 %120
|
||||
%122 = OpAll %bool %121
|
||||
OpBranch %114
|
||||
%113 = OpPhi %bool %false %94 %112 %103
|
||||
OpSelectionMerge %115 None
|
||||
OpBranchConditional %113 %114 %115
|
||||
%114 = OpLabel
|
||||
%123 = OpPhi %bool %false %104 %122 %113
|
||||
OpSelectionMerge %125 None
|
||||
OpBranchConditional %123 %124 %125
|
||||
%124 = OpLabel
|
||||
%127 = OpLoad %v4int %intValues
|
||||
%128 = OpLoad %v4int %intGreen
|
||||
%126 = OpExtInst %v4int %1 SMin %127 %128
|
||||
%131 = OpIEqual %v4bool %126 %130
|
||||
%132 = OpAll %bool %131
|
||||
OpBranch %125
|
||||
%125 = OpLabel
|
||||
%133 = OpPhi %bool %false %114 %132 %124
|
||||
OpSelectionMerge %138 None
|
||||
OpBranchConditional %133 %136 %137
|
||||
%136 = OpLabel
|
||||
%139 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
|
||||
%140 = OpLoad %v4float %139
|
||||
OpStore %134 %140
|
||||
OpBranch %138
|
||||
%137 = OpLabel
|
||||
%141 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
|
||||
%143 = OpLoad %v4float %141
|
||||
OpStore %134 %143
|
||||
OpBranch %138
|
||||
%117 = OpLoad %v4int %intValues
|
||||
%118 = OpVectorShuffle %v2int %117 %117 0 1
|
||||
%119 = OpLoad %v4int %intGreen
|
||||
%120 = OpVectorShuffle %v2int %119 %119 0 1
|
||||
%116 = OpExtInst %v2int %1 SMin %118 %120
|
||||
%121 = OpLoad %v4int %expectedB
|
||||
%122 = OpVectorShuffle %v2int %121 %121 0 1
|
||||
%123 = OpIEqual %v2bool %116 %122
|
||||
%124 = OpAll %bool %123
|
||||
OpBranch %115
|
||||
%115 = OpLabel
|
||||
%125 = OpPhi %bool %false %104 %124 %114
|
||||
OpSelectionMerge %127 None
|
||||
OpBranchConditional %125 %126 %127
|
||||
%126 = OpLabel
|
||||
%129 = OpLoad %v4int %intValues
|
||||
%130 = OpVectorShuffle %v3int %129 %129 0 1 2
|
||||
%131 = OpLoad %v4int %intGreen
|
||||
%132 = OpVectorShuffle %v3int %131 %131 0 1 2
|
||||
%128 = OpExtInst %v3int %1 SMin %130 %132
|
||||
%133 = OpLoad %v4int %expectedB
|
||||
%134 = OpVectorShuffle %v3int %133 %133 0 1 2
|
||||
%135 = OpIEqual %v3bool %128 %134
|
||||
%136 = OpAll %bool %135
|
||||
OpBranch %127
|
||||
%127 = OpLabel
|
||||
%137 = OpPhi %bool %false %115 %136 %126
|
||||
OpSelectionMerge %139 None
|
||||
OpBranchConditional %137 %138 %139
|
||||
%138 = OpLabel
|
||||
%144 = OpLoad %v4float %134
|
||||
OpReturnValue %144
|
||||
%141 = OpLoad %v4int %intValues
|
||||
%142 = OpLoad %v4int %intGreen
|
||||
%140 = OpExtInst %v4int %1 SMin %141 %142
|
||||
%143 = OpLoad %v4int %expectedB
|
||||
%144 = OpIEqual %v4bool %140 %143
|
||||
%145 = OpAll %bool %144
|
||||
OpBranch %139
|
||||
%139 = OpLabel
|
||||
%146 = OpPhi %bool %false %127 %145 %138
|
||||
OpSelectionMerge %151 None
|
||||
OpBranchConditional %146 %149 %150
|
||||
%149 = OpLabel
|
||||
%152 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
|
||||
%153 = OpLoad %v4float %152
|
||||
OpStore %147 %153
|
||||
OpBranch %151
|
||||
%150 = OpLabel
|
||||
%154 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
|
||||
%156 = OpLoad %v4float %154
|
||||
OpStore %147 %156
|
||||
OpBranch %151
|
||||
%151 = OpLabel
|
||||
%157 = OpLoad %v4float %147
|
||||
OpReturnValue %157
|
||||
OpFunctionEnd
|
||||
|
@ -6,5 +6,7 @@ uniform vec4 colorRed;
|
||||
vec4 main() {
|
||||
ivec4 intValues = ivec4(testInputs * 100.0);
|
||||
ivec4 intGreen = ivec4(colorGreen * 100.0);
|
||||
return ((((((min(intValues.x, 50) == -125 && min(intValues.xy, 50) == ivec2(-125, 0)) && min(intValues.xyz, 50) == ivec3(-125, 0, 50)) && min(intValues, 50) == ivec4(-125, 0, 50, 50)) && min(intValues.x, intGreen.x) == -125) && min(intValues.xy, intGreen.xy) == ivec2(-125, 0)) && min(intValues.xyz, intGreen.xyz) == ivec3(-125, 0, 0)) && min(intValues, intGreen) == ivec4(-125, 0, 0, 100) ? colorGreen : colorRed;
|
||||
ivec4 expectedA = ivec4(-125, 0, 50, 50);
|
||||
ivec4 expectedB = ivec4(-125, 0, 0, 100);
|
||||
return ((((((min(intValues.x, 50) == expectedA.x && min(intValues.xy, 50) == expectedA.xy) && min(intValues.xyz, 50) == expectedA.xyz) && min(intValues, 50) == expectedA) && min(intValues.x, intGreen.x) == expectedB.x) && min(intValues.xy, intGreen.xy) == expectedB.xy) && min(intValues.xyz, intGreen.xyz) == expectedB.xyz) && min(intValues, intGreen) == expectedB ? colorGreen : colorRed;
|
||||
}
|
||||
|
@ -19,6 +19,8 @@ fragment Outputs fragmentMain(Inputs _in [[stage_in]], constant Uniforms& _unifo
|
||||
(void)_out;
|
||||
int4 intValues = int4(_uniforms.testInputs * 100.0);
|
||||
int4 intGreen = int4(_uniforms.colorGreen * 100.0);
|
||||
_out.sk_FragColor = ((((((min(intValues.x, 50) == -125 && all(min(intValues.xy, 50) == int2(-125, 0))) && all(min(intValues.xyz, 50) == int3(-125, 0, 50))) && all(min(intValues, 50) == int4(-125, 0, 50, 50))) && min(intValues.x, intGreen.x) == -125) && all(min(intValues.xy, intGreen.xy) == int2(-125, 0))) && all(min(intValues.xyz, intGreen.xyz) == int3(-125, 0, 0))) && all(min(intValues, intGreen) == int4(-125, 0, 0, 100)) ? _uniforms.colorGreen : _uniforms.colorRed;
|
||||
int4 expectedA = int4(-125, 0, 50, 50);
|
||||
int4 expectedB = int4(-125, 0, 0, 100);
|
||||
_out.sk_FragColor = ((((((min(intValues.x, 50) == expectedA.x && all(min(intValues.xy, 50) == expectedA.xy)) && all(min(intValues.xyz, 50) == expectedA.xyz)) && all(min(intValues, 50) == expectedA)) && min(intValues.x, intGreen.x) == expectedB.x) && all(min(intValues.xy, intGreen.xy) == expectedB.xy)) && all(min(intValues.xyz, intGreen.xyz) == expectedB.xyz)) && all(min(intValues, intGreen) == expectedB) ? _uniforms.colorGreen : _uniforms.colorRed;
|
||||
return _out;
|
||||
}
|
||||
|
@ -13,6 +13,8 @@ OpMemberName %_UniformBuffer 3 "colorWhite"
|
||||
OpMemberName %_UniformBuffer 4 "testInputs"
|
||||
OpName %_entrypoint "_entrypoint"
|
||||
OpName %main "main"
|
||||
OpName %expectedBW "expectedBW"
|
||||
OpName %expectedWT "expectedWT"
|
||||
OpDecorate %sk_FragColor RelaxedPrecision
|
||||
OpDecorate %sk_FragColor Location 0
|
||||
OpDecorate %sk_FragColor Index 0
|
||||
@ -31,40 +33,48 @@ OpMemberDecorate %_UniformBuffer 4 RelaxedPrecision
|
||||
OpDecorate %_UniformBuffer Block
|
||||
OpDecorate %10 Binding 0
|
||||
OpDecorate %10 DescriptorSet 0
|
||||
OpDecorate %26 RelaxedPrecision
|
||||
OpDecorate %29 RelaxedPrecision
|
||||
OpDecorate %31 RelaxedPrecision
|
||||
OpDecorate %41 RelaxedPrecision
|
||||
OpDecorate %43 RelaxedPrecision
|
||||
OpDecorate %45 RelaxedPrecision
|
||||
OpDecorate %55 RelaxedPrecision
|
||||
OpDecorate %57 RelaxedPrecision
|
||||
OpDecorate %58 RelaxedPrecision
|
||||
OpDecorate %67 RelaxedPrecision
|
||||
OpDecorate %69 RelaxedPrecision
|
||||
OpDecorate %70 RelaxedPrecision
|
||||
OpDecorate %80 RelaxedPrecision
|
||||
OpDecorate %84 RelaxedPrecision
|
||||
OpDecorate %34 RelaxedPrecision
|
||||
OpDecorate %37 RelaxedPrecision
|
||||
OpDecorate %39 RelaxedPrecision
|
||||
OpDecorate %48 RelaxedPrecision
|
||||
OpDecorate %50 RelaxedPrecision
|
||||
OpDecorate %52 RelaxedPrecision
|
||||
OpDecorate %62 RelaxedPrecision
|
||||
OpDecorate %64 RelaxedPrecision
|
||||
OpDecorate %65 RelaxedPrecision
|
||||
OpDecorate %74 RelaxedPrecision
|
||||
OpDecorate %76 RelaxedPrecision
|
||||
OpDecorate %77 RelaxedPrecision
|
||||
OpDecorate %87 RelaxedPrecision
|
||||
OpDecorate %91 RelaxedPrecision
|
||||
OpDecorate %93 RelaxedPrecision
|
||||
OpDecorate %97 RelaxedPrecision
|
||||
OpDecorate %99 RelaxedPrecision
|
||||
OpDecorate %109 RelaxedPrecision
|
||||
OpDecorate %113 RelaxedPrecision
|
||||
OpDecorate %115 RelaxedPrecision
|
||||
OpDecorate %101 RelaxedPrecision
|
||||
OpDecorate %105 RelaxedPrecision
|
||||
OpDecorate %107 RelaxedPrecision
|
||||
OpDecorate %108 RelaxedPrecision
|
||||
OpDecorate %118 RelaxedPrecision
|
||||
OpDecorate %122 RelaxedPrecision
|
||||
OpDecorate %124 RelaxedPrecision
|
||||
OpDecorate %125 RelaxedPrecision
|
||||
OpDecorate %127 RelaxedPrecision
|
||||
OpDecorate %128 RelaxedPrecision
|
||||
OpDecorate %135 RelaxedPrecision
|
||||
OpDecorate %137 RelaxedPrecision
|
||||
OpDecorate %141 RelaxedPrecision
|
||||
OpDecorate %149 RelaxedPrecision
|
||||
OpDecorate %152 RelaxedPrecision
|
||||
OpDecorate %163 RelaxedPrecision
|
||||
OpDecorate %166 RelaxedPrecision
|
||||
OpDecorate %177 RelaxedPrecision
|
||||
OpDecorate %138 RelaxedPrecision
|
||||
OpDecorate %139 RelaxedPrecision
|
||||
OpDecorate %147 RelaxedPrecision
|
||||
OpDecorate %151 RelaxedPrecision
|
||||
OpDecorate %153 RelaxedPrecision
|
||||
OpDecorate %161 RelaxedPrecision
|
||||
OpDecorate %164 RelaxedPrecision
|
||||
OpDecorate %167 RelaxedPrecision
|
||||
OpDecorate %176 RelaxedPrecision
|
||||
OpDecorate %179 RelaxedPrecision
|
||||
OpDecorate %192 RelaxedPrecision
|
||||
OpDecorate %194 RelaxedPrecision
|
||||
OpDecorate %182 RelaxedPrecision
|
||||
OpDecorate %191 RelaxedPrecision
|
||||
OpDecorate %193 RelaxedPrecision
|
||||
OpDecorate %195 RelaxedPrecision
|
||||
OpDecorate %204 RelaxedPrecision
|
||||
OpDecorate %206 RelaxedPrecision
|
||||
OpDecorate %207 RelaxedPrecision
|
||||
%float = OpTypeFloat 32
|
||||
%v4float = OpTypeVector %float 4
|
||||
%_ptr_Output_v4float = OpTypePointer Output %v4float
|
||||
@ -78,39 +88,35 @@ OpDecorate %195 RelaxedPrecision
|
||||
%void = OpTypeVoid
|
||||
%15 = OpTypeFunction %void
|
||||
%18 = OpTypeFunction %v4float
|
||||
%_ptr_Function_v4float = OpTypePointer Function %v4float
|
||||
%float_0_5 = OpConstant %float 0.5
|
||||
%float_1 = OpConstant %float 1
|
||||
%24 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0_5 %float_1
|
||||
%float_2_25 = OpConstant %float 2.25
|
||||
%27 = OpConstantComposite %v4float %float_1 %float_0_5 %float_1 %float_2_25
|
||||
%false = OpConstantFalse %bool
|
||||
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
|
||||
%int = OpTypeInt 32 1
|
||||
%int_0 = OpConstant %int 0
|
||||
%int_1 = OpConstant %int 1
|
||||
%float_0 = OpConstant %float 0
|
||||
%float_1 = OpConstant %float 1
|
||||
%33 = OpConstantComposite %v4float %float_0 %float_1 %float_0 %float_1
|
||||
%40 = OpConstantComposite %v4float %float_0 %float_1 %float_0 %float_1
|
||||
%v4bool = OpTypeVector %bool 4
|
||||
%float_0_25 = OpConstant %float 0.25
|
||||
%float_0_75 = OpConstant %float 0.75
|
||||
%47 = OpConstantComposite %v4float %float_0_25 %float_0_75 %float_0 %float_1
|
||||
%59 = OpConstantComposite %v4float %float_0_75 %float_0_25 %float_0 %float_1
|
||||
%71 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
|
||||
%54 = OpConstantComposite %v4float %float_0_25 %float_0_75 %float_0 %float_1
|
||||
%66 = OpConstantComposite %v4float %float_0_75 %float_0_25 %float_0 %float_1
|
||||
%78 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
|
||||
%int_2 = OpConstant %int 2
|
||||
%int_3 = OpConstant %int 3
|
||||
%float_0_5 = OpConstant %float 0.5
|
||||
%v2float = OpTypeVector %float 2
|
||||
%100 = OpConstantComposite %v2float %float_0_5 %float_0_5
|
||||
%v2bool = OpTypeVector %bool 2
|
||||
%v3float = OpTypeVector %float 3
|
||||
%116 = OpConstantComposite %v3float %float_0_5 %float_0_5 %float_0_5
|
||||
%v3bool = OpTypeVector %bool 3
|
||||
%129 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0_5 %float_1
|
||||
%int_4 = OpConstant %int 4
|
||||
%154 = OpConstantComposite %v2float %float_0 %float_0_5
|
||||
%155 = OpConstantComposite %v2float %float_1 %float_0_5
|
||||
%168 = OpConstantComposite %v3float %float_0 %float_0_5 %float_0
|
||||
%169 = OpConstantComposite %v3float %float_1 %float_0_5 %float_1
|
||||
%180 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0 %float_1
|
||||
%float_2_25 = OpConstant %float 2.25
|
||||
%182 = OpConstantComposite %v4float %float_1 %float_0_5 %float_1 %float_2_25
|
||||
%_ptr_Function_v4float = OpTypePointer Function %v4float
|
||||
%166 = OpConstantComposite %v2float %float_0 %float_0_5
|
||||
%181 = OpConstantComposite %v3float %float_0 %float_0_5 %float_0
|
||||
%194 = OpConstantComposite %v4float %float_0 %float_0_5 %float_0 %float_1
|
||||
%_entrypoint = OpFunction %void None %15
|
||||
%16 = OpLabel
|
||||
%17 = OpFunctionCall %v4float %main
|
||||
@ -119,187 +125,205 @@ OpReturn
|
||||
OpFunctionEnd
|
||||
%main = OpFunction %v4float None %18
|
||||
%19 = OpLabel
|
||||
%186 = OpVariable %_ptr_Function_v4float Function
|
||||
%22 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%26 = OpLoad %v4float %22
|
||||
%27 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
|
||||
%29 = OpLoad %v4float %27
|
||||
%31 = OpCompositeConstruct %v4float %float_0 %float_0 %float_0 %float_0
|
||||
%21 = OpExtInst %v4float %1 FMix %26 %29 %31
|
||||
%34 = OpFOrdEqual %v4bool %21 %33
|
||||
%36 = OpAll %bool %34
|
||||
OpSelectionMerge %38 None
|
||||
OpBranchConditional %36 %37 %38
|
||||
%37 = OpLabel
|
||||
%40 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%41 = OpLoad %v4float %40
|
||||
%42 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
|
||||
%43 = OpLoad %v4float %42
|
||||
%45 = OpCompositeConstruct %v4float %float_0_25 %float_0_25 %float_0_25 %float_0_25
|
||||
%39 = OpExtInst %v4float %1 FMix %41 %43 %45
|
||||
%48 = OpFOrdEqual %v4bool %39 %47
|
||||
%49 = OpAll %bool %48
|
||||
OpBranch %38
|
||||
%38 = OpLabel
|
||||
%50 = OpPhi %bool %false %19 %49 %37
|
||||
OpSelectionMerge %52 None
|
||||
OpBranchConditional %50 %51 %52
|
||||
%51 = OpLabel
|
||||
%54 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%55 = OpLoad %v4float %54
|
||||
%56 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
|
||||
%57 = OpLoad %v4float %56
|
||||
%58 = OpCompositeConstruct %v4float %float_0_75 %float_0_75 %float_0_75 %float_0_75
|
||||
%53 = OpExtInst %v4float %1 FMix %55 %57 %58
|
||||
%60 = OpFOrdEqual %v4bool %53 %59
|
||||
%61 = OpAll %bool %60
|
||||
OpBranch %52
|
||||
%52 = OpLabel
|
||||
%62 = OpPhi %bool %false %38 %61 %51
|
||||
OpSelectionMerge %64 None
|
||||
OpBranchConditional %62 %63 %64
|
||||
%63 = OpLabel
|
||||
%66 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%67 = OpLoad %v4float %66
|
||||
%68 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
|
||||
%69 = OpLoad %v4float %68
|
||||
%70 = OpCompositeConstruct %v4float %float_1 %float_1 %float_1 %float_1
|
||||
%65 = OpExtInst %v4float %1 FMix %67 %69 %70
|
||||
%72 = OpFOrdEqual %v4bool %65 %71
|
||||
%73 = OpAll %bool %72
|
||||
OpBranch %64
|
||||
%64 = OpLabel
|
||||
%74 = OpPhi %bool %false %52 %73 %63
|
||||
OpSelectionMerge %76 None
|
||||
OpBranchConditional %74 %75 %76
|
||||
%75 = OpLabel
|
||||
%78 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
|
||||
%80 = OpLoad %v4float %78
|
||||
%81 = OpCompositeExtract %float %80 0
|
||||
%82 = OpAccessChain %_ptr_Uniform_v4float %10 %int_3
|
||||
%84 = OpLoad %v4float %82
|
||||
%85 = OpCompositeExtract %float %84 0
|
||||
%77 = OpExtInst %float %1 FMix %81 %85 %float_0_5
|
||||
%87 = OpFOrdEqual %bool %77 %float_0_5
|
||||
OpBranch %76
|
||||
%76 = OpLabel
|
||||
%88 = OpPhi %bool %false %64 %87 %75
|
||||
OpSelectionMerge %90 None
|
||||
OpBranchConditional %88 %89 %90
|
||||
%89 = OpLabel
|
||||
%92 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
|
||||
%93 = OpLoad %v4float %92
|
||||
%94 = OpVectorShuffle %v2float %93 %93 0 1
|
||||
%96 = OpAccessChain %_ptr_Uniform_v4float %10 %int_3
|
||||
%97 = OpLoad %v4float %96
|
||||
%98 = OpVectorShuffle %v2float %97 %97 0 1
|
||||
%99 = OpCompositeConstruct %v2float %float_0_5 %float_0_5
|
||||
%91 = OpExtInst %v2float %1 FMix %94 %98 %99
|
||||
%101 = OpFOrdEqual %v2bool %91 %100
|
||||
%103 = OpAll %bool %101
|
||||
OpBranch %90
|
||||
%90 = OpLabel
|
||||
%104 = OpPhi %bool %false %76 %103 %89
|
||||
OpSelectionMerge %106 None
|
||||
OpBranchConditional %104 %105 %106
|
||||
%105 = OpLabel
|
||||
%108 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
|
||||
%109 = OpLoad %v4float %108
|
||||
%110 = OpVectorShuffle %v3float %109 %109 0 1 2
|
||||
%112 = OpAccessChain %_ptr_Uniform_v4float %10 %int_3
|
||||
%113 = OpLoad %v4float %112
|
||||
%114 = OpVectorShuffle %v3float %113 %113 0 1 2
|
||||
%115 = OpCompositeConstruct %v3float %float_0_5 %float_0_5 %float_0_5
|
||||
%107 = OpExtInst %v3float %1 FMix %110 %114 %115
|
||||
%117 = OpFOrdEqual %v3bool %107 %116
|
||||
%119 = OpAll %bool %117
|
||||
OpBranch %106
|
||||
%106 = OpLabel
|
||||
%120 = OpPhi %bool %false %90 %119 %105
|
||||
OpSelectionMerge %122 None
|
||||
OpBranchConditional %120 %121 %122
|
||||
%121 = OpLabel
|
||||
%124 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
|
||||
%125 = OpLoad %v4float %124
|
||||
%126 = OpAccessChain %_ptr_Uniform_v4float %10 %int_3
|
||||
%127 = OpLoad %v4float %126
|
||||
%128 = OpCompositeConstruct %v4float %float_0_5 %float_0_5 %float_0_5 %float_0_5
|
||||
%123 = OpExtInst %v4float %1 FMix %125 %127 %128
|
||||
%130 = OpFOrdEqual %v4bool %123 %129
|
||||
%131 = OpAll %bool %130
|
||||
OpBranch %122
|
||||
%122 = OpLabel
|
||||
%132 = OpPhi %bool %false %106 %131 %121
|
||||
OpSelectionMerge %134 None
|
||||
OpBranchConditional %132 %133 %134
|
||||
%133 = OpLabel
|
||||
%expectedBW = OpVariable %_ptr_Function_v4float Function
|
||||
%expectedWT = OpVariable %_ptr_Function_v4float Function
|
||||
%199 = OpVariable %_ptr_Function_v4float Function
|
||||
OpStore %expectedBW %24
|
||||
OpStore %expectedWT %27
|
||||
%30 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%34 = OpLoad %v4float %30
|
||||
%35 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
|
||||
%37 = OpLoad %v4float %35
|
||||
%39 = OpCompositeConstruct %v4float %float_0 %float_0 %float_0 %float_0
|
||||
%29 = OpExtInst %v4float %1 FMix %34 %37 %39
|
||||
%41 = OpFOrdEqual %v4bool %29 %40
|
||||
%43 = OpAll %bool %41
|
||||
OpSelectionMerge %45 None
|
||||
OpBranchConditional %43 %44 %45
|
||||
%44 = OpLabel
|
||||
%47 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%48 = OpLoad %v4float %47
|
||||
%49 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
|
||||
%50 = OpLoad %v4float %49
|
||||
%52 = OpCompositeConstruct %v4float %float_0_25 %float_0_25 %float_0_25 %float_0_25
|
||||
%46 = OpExtInst %v4float %1 FMix %48 %50 %52
|
||||
%55 = OpFOrdEqual %v4bool %46 %54
|
||||
%56 = OpAll %bool %55
|
||||
OpBranch %45
|
||||
%45 = OpLabel
|
||||
%57 = OpPhi %bool %false %19 %56 %44
|
||||
OpSelectionMerge %59 None
|
||||
OpBranchConditional %57 %58 %59
|
||||
%58 = OpLabel
|
||||
%61 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%62 = OpLoad %v4float %61
|
||||
%63 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
|
||||
%64 = OpLoad %v4float %63
|
||||
%65 = OpCompositeConstruct %v4float %float_0_75 %float_0_75 %float_0_75 %float_0_75
|
||||
%60 = OpExtInst %v4float %1 FMix %62 %64 %65
|
||||
%67 = OpFOrdEqual %v4bool %60 %66
|
||||
%68 = OpAll %bool %67
|
||||
OpBranch %59
|
||||
%59 = OpLabel
|
||||
%69 = OpPhi %bool %false %45 %68 %58
|
||||
OpSelectionMerge %71 None
|
||||
OpBranchConditional %69 %70 %71
|
||||
%70 = OpLabel
|
||||
%73 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%74 = OpLoad %v4float %73
|
||||
%75 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
|
||||
%76 = OpLoad %v4float %75
|
||||
%77 = OpCompositeConstruct %v4float %float_1 %float_1 %float_1 %float_1
|
||||
%72 = OpExtInst %v4float %1 FMix %74 %76 %77
|
||||
%79 = OpFOrdEqual %v4bool %72 %78
|
||||
%80 = OpAll %bool %79
|
||||
OpBranch %71
|
||||
%71 = OpLabel
|
||||
%81 = OpPhi %bool %false %59 %80 %70
|
||||
OpSelectionMerge %83 None
|
||||
OpBranchConditional %81 %82 %83
|
||||
%82 = OpLabel
|
||||
%85 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
|
||||
%87 = OpLoad %v4float %85
|
||||
%88 = OpCompositeExtract %float %87 0
|
||||
%89 = OpAccessChain %_ptr_Uniform_v4float %10 %int_3
|
||||
%91 = OpLoad %v4float %89
|
||||
%92 = OpCompositeExtract %float %91 0
|
||||
%84 = OpExtInst %float %1 FMix %88 %92 %float_0_5
|
||||
%93 = OpLoad %v4float %expectedBW
|
||||
%94 = OpCompositeExtract %float %93 0
|
||||
%95 = OpFOrdEqual %bool %84 %94
|
||||
OpBranch %83
|
||||
%83 = OpLabel
|
||||
%96 = OpPhi %bool %false %71 %95 %82
|
||||
OpSelectionMerge %98 None
|
||||
OpBranchConditional %96 %97 %98
|
||||
%97 = OpLabel
|
||||
%100 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
|
||||
%101 = OpLoad %v4float %100
|
||||
%102 = OpVectorShuffle %v2float %101 %101 0 1
|
||||
%104 = OpAccessChain %_ptr_Uniform_v4float %10 %int_3
|
||||
%105 = OpLoad %v4float %104
|
||||
%106 = OpVectorShuffle %v2float %105 %105 0 1
|
||||
%107 = OpCompositeConstruct %v2float %float_0_5 %float_0_5
|
||||
%99 = OpExtInst %v2float %1 FMix %102 %106 %107
|
||||
%108 = OpLoad %v4float %expectedBW
|
||||
%109 = OpVectorShuffle %v2float %108 %108 0 1
|
||||
%110 = OpFOrdEqual %v2bool %99 %109
|
||||
%112 = OpAll %bool %110
|
||||
OpBranch %98
|
||||
%98 = OpLabel
|
||||
%113 = OpPhi %bool %false %83 %112 %97
|
||||
OpSelectionMerge %115 None
|
||||
OpBranchConditional %113 %114 %115
|
||||
%114 = OpLabel
|
||||
%117 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
|
||||
%118 = OpLoad %v4float %117
|
||||
%119 = OpVectorShuffle %v3float %118 %118 0 1 2
|
||||
%121 = OpAccessChain %_ptr_Uniform_v4float %10 %int_3
|
||||
%122 = OpLoad %v4float %121
|
||||
%123 = OpVectorShuffle %v3float %122 %122 0 1 2
|
||||
%124 = OpCompositeConstruct %v3float %float_0_5 %float_0_5 %float_0_5
|
||||
%116 = OpExtInst %v3float %1 FMix %119 %123 %124
|
||||
%125 = OpLoad %v4float %expectedBW
|
||||
%126 = OpVectorShuffle %v3float %125 %125 0 1 2
|
||||
%127 = OpFOrdEqual %v3bool %116 %126
|
||||
%129 = OpAll %bool %127
|
||||
OpBranch %115
|
||||
%115 = OpLabel
|
||||
%130 = OpPhi %bool %false %98 %129 %114
|
||||
OpSelectionMerge %132 None
|
||||
OpBranchConditional %130 %131 %132
|
||||
%131 = OpLabel
|
||||
%134 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
|
||||
%135 = OpLoad %v4float %134
|
||||
%136 = OpAccessChain %_ptr_Uniform_v4float %10 %int_3
|
||||
%137 = OpLoad %v4float %136
|
||||
%138 = OpCompositeExtract %float %137 0
|
||||
%139 = OpAccessChain %_ptr_Uniform_v4float %10 %int_4
|
||||
%141 = OpLoad %v4float %139
|
||||
%142 = OpCompositeExtract %float %141 0
|
||||
%135 = OpExtInst %float %1 FMix %138 %142 %float_0
|
||||
%143 = OpFOrdEqual %bool %135 %float_1
|
||||
OpBranch %134
|
||||
%134 = OpLabel
|
||||
%144 = OpPhi %bool %false %122 %143 %133
|
||||
OpSelectionMerge %146 None
|
||||
OpBranchConditional %144 %145 %146
|
||||
%145 = OpLabel
|
||||
%148 = OpAccessChain %_ptr_Uniform_v4float %10 %int_3
|
||||
%149 = OpLoad %v4float %148
|
||||
%150 = OpVectorShuffle %v2float %149 %149 0 1
|
||||
%151 = OpAccessChain %_ptr_Uniform_v4float %10 %int_4
|
||||
%152 = OpLoad %v4float %151
|
||||
%153 = OpVectorShuffle %v2float %152 %152 0 1
|
||||
%147 = OpExtInst %v2float %1 FMix %150 %153 %154
|
||||
%156 = OpFOrdEqual %v2bool %147 %155
|
||||
%157 = OpAll %bool %156
|
||||
OpBranch %146
|
||||
%146 = OpLabel
|
||||
%158 = OpPhi %bool %false %134 %157 %145
|
||||
OpSelectionMerge %160 None
|
||||
OpBranchConditional %158 %159 %160
|
||||
%159 = OpLabel
|
||||
%162 = OpAccessChain %_ptr_Uniform_v4float %10 %int_3
|
||||
%163 = OpLoad %v4float %162
|
||||
%164 = OpVectorShuffle %v3float %163 %163 0 1 2
|
||||
%165 = OpAccessChain %_ptr_Uniform_v4float %10 %int_4
|
||||
%166 = OpLoad %v4float %165
|
||||
%167 = OpVectorShuffle %v3float %166 %166 0 1 2
|
||||
%161 = OpExtInst %v3float %1 FMix %164 %167 %168
|
||||
%170 = OpFOrdEqual %v3bool %161 %169
|
||||
%171 = OpAll %bool %170
|
||||
OpBranch %160
|
||||
%160 = OpLabel
|
||||
%172 = OpPhi %bool %false %146 %171 %159
|
||||
OpSelectionMerge %174 None
|
||||
OpBranchConditional %172 %173 %174
|
||||
%173 = OpLabel
|
||||
%176 = OpAccessChain %_ptr_Uniform_v4float %10 %int_3
|
||||
%177 = OpLoad %v4float %176
|
||||
%138 = OpCompositeConstruct %v4float %float_0_5 %float_0_5 %float_0_5 %float_0_5
|
||||
%133 = OpExtInst %v4float %1 FMix %135 %137 %138
|
||||
%139 = OpLoad %v4float %expectedBW
|
||||
%140 = OpFOrdEqual %v4bool %133 %139
|
||||
%141 = OpAll %bool %140
|
||||
OpBranch %132
|
||||
%132 = OpLabel
|
||||
%142 = OpPhi %bool %false %115 %141 %131
|
||||
OpSelectionMerge %144 None
|
||||
OpBranchConditional %142 %143 %144
|
||||
%143 = OpLabel
|
||||
%146 = OpAccessChain %_ptr_Uniform_v4float %10 %int_3
|
||||
%147 = OpLoad %v4float %146
|
||||
%148 = OpCompositeExtract %float %147 0
|
||||
%149 = OpAccessChain %_ptr_Uniform_v4float %10 %int_4
|
||||
%151 = OpLoad %v4float %149
|
||||
%152 = OpCompositeExtract %float %151 0
|
||||
%145 = OpExtInst %float %1 FMix %148 %152 %float_0
|
||||
%153 = OpLoad %v4float %expectedWT
|
||||
%154 = OpCompositeExtract %float %153 0
|
||||
%155 = OpFOrdEqual %bool %145 %154
|
||||
OpBranch %144
|
||||
%144 = OpLabel
|
||||
%156 = OpPhi %bool %false %132 %155 %143
|
||||
OpSelectionMerge %158 None
|
||||
OpBranchConditional %156 %157 %158
|
||||
%157 = OpLabel
|
||||
%160 = OpAccessChain %_ptr_Uniform_v4float %10 %int_3
|
||||
%161 = OpLoad %v4float %160
|
||||
%162 = OpVectorShuffle %v2float %161 %161 0 1
|
||||
%163 = OpAccessChain %_ptr_Uniform_v4float %10 %int_4
|
||||
%164 = OpLoad %v4float %163
|
||||
%165 = OpVectorShuffle %v2float %164 %164 0 1
|
||||
%159 = OpExtInst %v2float %1 FMix %162 %165 %166
|
||||
%167 = OpLoad %v4float %expectedWT
|
||||
%168 = OpVectorShuffle %v2float %167 %167 0 1
|
||||
%169 = OpFOrdEqual %v2bool %159 %168
|
||||
%170 = OpAll %bool %169
|
||||
OpBranch %158
|
||||
%158 = OpLabel
|
||||
%171 = OpPhi %bool %false %144 %170 %157
|
||||
OpSelectionMerge %173 None
|
||||
OpBranchConditional %171 %172 %173
|
||||
%172 = OpLabel
|
||||
%175 = OpAccessChain %_ptr_Uniform_v4float %10 %int_3
|
||||
%176 = OpLoad %v4float %175
|
||||
%177 = OpVectorShuffle %v3float %176 %176 0 1 2
|
||||
%178 = OpAccessChain %_ptr_Uniform_v4float %10 %int_4
|
||||
%179 = OpLoad %v4float %178
|
||||
%175 = OpExtInst %v4float %1 FMix %177 %179 %180
|
||||
%183 = OpFOrdEqual %v4bool %175 %182
|
||||
%184 = OpAll %bool %183
|
||||
OpBranch %174
|
||||
%174 = OpLabel
|
||||
%185 = OpPhi %bool %false %160 %184 %173
|
||||
OpSelectionMerge %190 None
|
||||
OpBranchConditional %185 %188 %189
|
||||
%180 = OpVectorShuffle %v3float %179 %179 0 1 2
|
||||
%174 = OpExtInst %v3float %1 FMix %177 %180 %181
|
||||
%182 = OpLoad %v4float %expectedWT
|
||||
%183 = OpVectorShuffle %v3float %182 %182 0 1 2
|
||||
%184 = OpFOrdEqual %v3bool %174 %183
|
||||
%185 = OpAll %bool %184
|
||||
OpBranch %173
|
||||
%173 = OpLabel
|
||||
%186 = OpPhi %bool %false %158 %185 %172
|
||||
OpSelectionMerge %188 None
|
||||
OpBranchConditional %186 %187 %188
|
||||
%187 = OpLabel
|
||||
%190 = OpAccessChain %_ptr_Uniform_v4float %10 %int_3
|
||||
%191 = OpLoad %v4float %190
|
||||
%192 = OpAccessChain %_ptr_Uniform_v4float %10 %int_4
|
||||
%193 = OpLoad %v4float %192
|
||||
%189 = OpExtInst %v4float %1 FMix %191 %193 %194
|
||||
%195 = OpLoad %v4float %expectedWT
|
||||
%196 = OpFOrdEqual %v4bool %189 %195
|
||||
%197 = OpAll %bool %196
|
||||
OpBranch %188
|
||||
%188 = OpLabel
|
||||
%191 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%192 = OpLoad %v4float %191
|
||||
OpStore %186 %192
|
||||
OpBranch %190
|
||||
%189 = OpLabel
|
||||
%193 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
|
||||
%194 = OpLoad %v4float %193
|
||||
OpStore %186 %194
|
||||
OpBranch %190
|
||||
%190 = OpLabel
|
||||
%195 = OpLoad %v4float %186
|
||||
OpReturnValue %195
|
||||
%198 = OpPhi %bool %false %173 %197 %187
|
||||
OpSelectionMerge %202 None
|
||||
OpBranchConditional %198 %200 %201
|
||||
%200 = OpLabel
|
||||
%203 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%204 = OpLoad %v4float %203
|
||||
OpStore %199 %204
|
||||
OpBranch %202
|
||||
%201 = OpLabel
|
||||
%205 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
|
||||
%206 = OpLoad %v4float %205
|
||||
OpStore %199 %206
|
||||
OpBranch %202
|
||||
%202 = OpLabel
|
||||
%207 = OpLoad %v4float %199
|
||||
OpReturnValue %207
|
||||
OpFunctionEnd
|
||||
|
@ -6,5 +6,7 @@ uniform vec4 colorBlack;
|
||||
uniform vec4 colorWhite;
|
||||
uniform vec4 testInputs;
|
||||
vec4 main() {
|
||||
return ((((((((((mix(colorGreen, colorRed, 0.0) == vec4(0.0, 1.0, 0.0, 1.0) && mix(colorGreen, colorRed, 0.25) == vec4(0.25, 0.75, 0.0, 1.0)) && mix(colorGreen, colorRed, 0.75) == vec4(0.75, 0.25, 0.0, 1.0)) && mix(colorGreen, colorRed, 1.0) == vec4(1.0, 0.0, 0.0, 1.0)) && mix(colorBlack.x, colorWhite.x, 0.5) == 0.5) && mix(colorBlack.xy, colorWhite.xy, 0.5) == vec2(0.5, 0.5)) && mix(colorBlack.xyz, colorWhite.xyz, 0.5) == vec3(0.5, 0.5, 0.5)) && mix(colorBlack, colorWhite, 0.5) == vec4(0.5, 0.5, 0.5, 1.0)) && mix(colorWhite.x, testInputs.x, 0.0) == 1.0) && mix(colorWhite.xy, testInputs.xy, vec2(0.0, 0.5)) == vec2(1.0, 0.5)) && mix(colorWhite.xyz, testInputs.xyz, vec3(0.0, 0.5, 0.0)) == vec3(1.0, 0.5, 1.0)) && mix(colorWhite, testInputs, vec4(0.0, 0.5, 0.0, 1.0)) == vec4(1.0, 0.5, 1.0, 2.25) ? colorGreen : colorRed;
|
||||
vec4 expectedBW = vec4(0.5, 0.5, 0.5, 1.0);
|
||||
vec4 expectedWT = vec4(1.0, 0.5, 1.0, 2.25);
|
||||
return ((((((((((mix(colorGreen, colorRed, 0.0) == vec4(0.0, 1.0, 0.0, 1.0) && mix(colorGreen, colorRed, 0.25) == vec4(0.25, 0.75, 0.0, 1.0)) && mix(colorGreen, colorRed, 0.75) == vec4(0.75, 0.25, 0.0, 1.0)) && mix(colorGreen, colorRed, 1.0) == vec4(1.0, 0.0, 0.0, 1.0)) && mix(colorBlack.x, colorWhite.x, 0.5) == expectedBW.x) && mix(colorBlack.xy, colorWhite.xy, 0.5) == expectedBW.xy) && mix(colorBlack.xyz, colorWhite.xyz, 0.5) == expectedBW.xyz) && mix(colorBlack, colorWhite, 0.5) == expectedBW) && mix(colorWhite.x, testInputs.x, 0.0) == expectedWT.x) && mix(colorWhite.xy, testInputs.xy, vec2(0.0, 0.5)) == expectedWT.xy) && mix(colorWhite.xyz, testInputs.xyz, vec3(0.0, 0.5, 0.0)) == expectedWT.xyz) && mix(colorWhite, testInputs, vec4(0.0, 0.5, 0.0, 1.0)) == expectedWT ? colorGreen : colorRed;
|
||||
}
|
||||
|
@ -21,6 +21,8 @@ struct Outputs {
|
||||
fragment Outputs fragmentMain(Inputs _in [[stage_in]], constant Uniforms& _uniforms [[buffer(0)]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
|
||||
Outputs _out;
|
||||
(void)_out;
|
||||
_out.sk_FragColor = ((((((((((all(mix(_uniforms.colorGreen, _uniforms.colorRed, 0.0) == float4(0.0, 1.0, 0.0, 1.0)) && all(mix(_uniforms.colorGreen, _uniforms.colorRed, 0.25) == float4(0.25, 0.75, 0.0, 1.0))) && all(mix(_uniforms.colorGreen, _uniforms.colorRed, 0.75) == float4(0.75, 0.25, 0.0, 1.0))) && all(mix(_uniforms.colorGreen, _uniforms.colorRed, 1.0) == float4(1.0, 0.0, 0.0, 1.0))) && mix(_uniforms.colorBlack.x, _uniforms.colorWhite.x, 0.5) == 0.5) && all(mix(_uniforms.colorBlack.xy, _uniforms.colorWhite.xy, 0.5) == float2(0.5, 0.5))) && all(mix(_uniforms.colorBlack.xyz, _uniforms.colorWhite.xyz, 0.5) == float3(0.5, 0.5, 0.5))) && all(mix(_uniforms.colorBlack, _uniforms.colorWhite, 0.5) == float4(0.5, 0.5, 0.5, 1.0))) && mix(_uniforms.colorWhite.x, _uniforms.testInputs.x, 0.0) == 1.0) && all(mix(_uniforms.colorWhite.xy, _uniforms.testInputs.xy, float2(0.0, 0.5)) == float2(1.0, 0.5))) && all(mix(_uniforms.colorWhite.xyz, _uniforms.testInputs.xyz, float3(0.0, 0.5, 0.0)) == float3(1.0, 0.5, 1.0))) && all(mix(_uniforms.colorWhite, _uniforms.testInputs, float4(0.0, 0.5, 0.0, 1.0)) == float4(1.0, 0.5, 1.0, 2.25)) ? _uniforms.colorGreen : _uniforms.colorRed;
|
||||
float4 expectedBW = float4(0.5, 0.5, 0.5, 1.0);
|
||||
float4 expectedWT = float4(1.0, 0.5, 1.0, 2.25);
|
||||
_out.sk_FragColor = ((((((((((all(mix(_uniforms.colorGreen, _uniforms.colorRed, 0.0) == float4(0.0, 1.0, 0.0, 1.0)) && all(mix(_uniforms.colorGreen, _uniforms.colorRed, 0.25) == float4(0.25, 0.75, 0.0, 1.0))) && all(mix(_uniforms.colorGreen, _uniforms.colorRed, 0.75) == float4(0.75, 0.25, 0.0, 1.0))) && all(mix(_uniforms.colorGreen, _uniforms.colorRed, 1.0) == float4(1.0, 0.0, 0.0, 1.0))) && mix(_uniforms.colorBlack.x, _uniforms.colorWhite.x, 0.5) == expectedBW.x) && all(mix(_uniforms.colorBlack.xy, _uniforms.colorWhite.xy, 0.5) == expectedBW.xy)) && all(mix(_uniforms.colorBlack.xyz, _uniforms.colorWhite.xyz, 0.5) == expectedBW.xyz)) && all(mix(_uniforms.colorBlack, _uniforms.colorWhite, 0.5) == expectedBW)) && mix(_uniforms.colorWhite.x, _uniforms.testInputs.x, 0.0) == expectedWT.x) && all(mix(_uniforms.colorWhite.xy, _uniforms.testInputs.xy, float2(0.0, 0.5)) == expectedWT.xy)) && all(mix(_uniforms.colorWhite.xyz, _uniforms.testInputs.xyz, float3(0.0, 0.5, 0.0)) == expectedWT.xyz)) && all(mix(_uniforms.colorWhite, _uniforms.testInputs, float4(0.0, 0.5, 0.0, 1.0)) == expectedWT) ? _uniforms.colorGreen : _uniforms.colorRed;
|
||||
return _out;
|
||||
}
|
||||
|
@ -11,6 +11,7 @@ OpMemberName %_UniformBuffer 1 "colorGreen"
|
||||
OpMemberName %_UniformBuffer 2 "colorRed"
|
||||
OpName %_entrypoint "_entrypoint"
|
||||
OpName %main "main"
|
||||
OpName %expected "expected"
|
||||
OpDecorate %sk_FragColor RelaxedPrecision
|
||||
OpDecorate %sk_FragColor Location 0
|
||||
OpDecorate %sk_FragColor Index 0
|
||||
@ -25,13 +26,17 @@ OpMemberDecorate %_UniformBuffer 2 RelaxedPrecision
|
||||
OpDecorate %_UniformBuffer Block
|
||||
OpDecorate %10 Binding 0
|
||||
OpDecorate %10 DescriptorSet 0
|
||||
OpDecorate %26 RelaxedPrecision
|
||||
OpDecorate %32 RelaxedPrecision
|
||||
OpDecorate %34 RelaxedPrecision
|
||||
OpDecorate %47 RelaxedPrecision
|
||||
OpDecorate %60 RelaxedPrecision
|
||||
OpDecorate %73 RelaxedPrecision
|
||||
OpDecorate %76 RelaxedPrecision
|
||||
OpDecorate %77 RelaxedPrecision
|
||||
OpDecorate %41 RelaxedPrecision
|
||||
OpDecorate %44 RelaxedPrecision
|
||||
OpDecorate %54 RelaxedPrecision
|
||||
OpDecorate %57 RelaxedPrecision
|
||||
OpDecorate %67 RelaxedPrecision
|
||||
OpDecorate %68 RelaxedPrecision
|
||||
OpDecorate %79 RelaxedPrecision
|
||||
OpDecorate %82 RelaxedPrecision
|
||||
OpDecorate %83 RelaxedPrecision
|
||||
%float = OpTypeFloat 32
|
||||
%v4float = OpTypeVector %float 4
|
||||
%_ptr_Output_v4float = OpTypePointer Output %v4float
|
||||
@ -45,22 +50,20 @@ OpDecorate %77 RelaxedPrecision
|
||||
%void = OpTypeVoid
|
||||
%15 = OpTypeFunction %void
|
||||
%18 = OpTypeFunction %v4float
|
||||
%_ptr_Function_v4float = OpTypePointer Function %v4float
|
||||
%float_n1 = OpConstant %float -1
|
||||
%float_0 = OpConstant %float 0
|
||||
%float_1 = OpConstant %float 1
|
||||
%25 = OpConstantComposite %v4float %float_n1 %float_0 %float_1 %float_1
|
||||
%false = OpConstantFalse %bool
|
||||
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
|
||||
%int = OpTypeInt 32 1
|
||||
%int_0 = OpConstant %int 0
|
||||
%float_n1 = OpConstant %float -1
|
||||
%v2float = OpTypeVector %float 2
|
||||
%float_0 = OpConstant %float 0
|
||||
%38 = OpConstantComposite %v2float %float_n1 %float_0
|
||||
%v2bool = OpTypeVector %bool 2
|
||||
%v3float = OpTypeVector %float 3
|
||||
%float_1 = OpConstant %float 1
|
||||
%51 = OpConstantComposite %v3float %float_n1 %float_0 %float_1
|
||||
%v3bool = OpTypeVector %bool 3
|
||||
%61 = OpConstantComposite %v4float %float_n1 %float_0 %float_1 %float_1
|
||||
%v4bool = OpTypeVector %bool 4
|
||||
%_ptr_Function_v4float = OpTypePointer Function %v4float
|
||||
%int_1 = OpConstant %int 1
|
||||
%int_2 = OpConstant %int 2
|
||||
%_entrypoint = OpFunction %void None %15
|
||||
@ -71,60 +74,69 @@ OpReturn
|
||||
OpFunctionEnd
|
||||
%main = OpFunction %v4float None %18
|
||||
%19 = OpLabel
|
||||
%66 = OpVariable %_ptr_Function_v4float Function
|
||||
%22 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%26 = OpLoad %v4float %22
|
||||
%27 = OpCompositeExtract %float %26 0
|
||||
%21 = OpExtInst %float %1 FSign %27
|
||||
%29 = OpFOrdEqual %bool %21 %float_n1
|
||||
OpSelectionMerge %31 None
|
||||
OpBranchConditional %29 %30 %31
|
||||
%30 = OpLabel
|
||||
%33 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%34 = OpLoad %v4float %33
|
||||
%35 = OpVectorShuffle %v2float %34 %34 0 1
|
||||
%32 = OpExtInst %v2float %1 FSign %35
|
||||
%39 = OpFOrdEqual %v2bool %32 %38
|
||||
%41 = OpAll %bool %39
|
||||
OpBranch %31
|
||||
%31 = OpLabel
|
||||
%42 = OpPhi %bool %false %19 %41 %30
|
||||
OpSelectionMerge %44 None
|
||||
OpBranchConditional %42 %43 %44
|
||||
%43 = OpLabel
|
||||
%46 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%47 = OpLoad %v4float %46
|
||||
%48 = OpVectorShuffle %v3float %47 %47 0 1 2
|
||||
%45 = OpExtInst %v3float %1 FSign %48
|
||||
%52 = OpFOrdEqual %v3bool %45 %51
|
||||
%54 = OpAll %bool %52
|
||||
OpBranch %44
|
||||
%44 = OpLabel
|
||||
%55 = OpPhi %bool %false %31 %54 %43
|
||||
OpSelectionMerge %57 None
|
||||
OpBranchConditional %55 %56 %57
|
||||
%56 = OpLabel
|
||||
%59 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%60 = OpLoad %v4float %59
|
||||
%58 = OpExtInst %v4float %1 FSign %60
|
||||
%62 = OpFOrdEqual %v4bool %58 %61
|
||||
%64 = OpAll %bool %62
|
||||
OpBranch %57
|
||||
%57 = OpLabel
|
||||
%65 = OpPhi %bool %false %44 %64 %56
|
||||
OpSelectionMerge %70 None
|
||||
OpBranchConditional %65 %68 %69
|
||||
%68 = OpLabel
|
||||
%71 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
|
||||
%73 = OpLoad %v4float %71
|
||||
OpStore %66 %73
|
||||
OpBranch %70
|
||||
%69 = OpLabel
|
||||
%74 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
|
||||
%76 = OpLoad %v4float %74
|
||||
OpStore %66 %76
|
||||
OpBranch %70
|
||||
%70 = OpLabel
|
||||
%77 = OpLoad %v4float %66
|
||||
OpReturnValue %77
|
||||
%expected = OpVariable %_ptr_Function_v4float Function
|
||||
%73 = OpVariable %_ptr_Function_v4float Function
|
||||
OpStore %expected %25
|
||||
%28 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%32 = OpLoad %v4float %28
|
||||
%33 = OpCompositeExtract %float %32 0
|
||||
%27 = OpExtInst %float %1 FSign %33
|
||||
%34 = OpLoad %v4float %expected
|
||||
%35 = OpCompositeExtract %float %34 0
|
||||
%36 = OpFOrdEqual %bool %27 %35
|
||||
OpSelectionMerge %38 None
|
||||
OpBranchConditional %36 %37 %38
|
||||
%37 = OpLabel
|
||||
%40 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%41 = OpLoad %v4float %40
|
||||
%42 = OpVectorShuffle %v2float %41 %41 0 1
|
||||
%39 = OpExtInst %v2float %1 FSign %42
|
||||
%44 = OpLoad %v4float %expected
|
||||
%45 = OpVectorShuffle %v2float %44 %44 0 1
|
||||
%46 = OpFOrdEqual %v2bool %39 %45
|
||||
%48 = OpAll %bool %46
|
||||
OpBranch %38
|
||||
%38 = OpLabel
|
||||
%49 = OpPhi %bool %false %19 %48 %37
|
||||
OpSelectionMerge %51 None
|
||||
OpBranchConditional %49 %50 %51
|
||||
%50 = OpLabel
|
||||
%53 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%54 = OpLoad %v4float %53
|
||||
%55 = OpVectorShuffle %v3float %54 %54 0 1 2
|
||||
%52 = OpExtInst %v3float %1 FSign %55
|
||||
%57 = OpLoad %v4float %expected
|
||||
%58 = OpVectorShuffle %v3float %57 %57 0 1 2
|
||||
%59 = OpFOrdEqual %v3bool %52 %58
|
||||
%61 = OpAll %bool %59
|
||||
OpBranch %51
|
||||
%51 = OpLabel
|
||||
%62 = OpPhi %bool %false %38 %61 %50
|
||||
OpSelectionMerge %64 None
|
||||
OpBranchConditional %62 %63 %64
|
||||
%63 = OpLabel
|
||||
%66 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%67 = OpLoad %v4float %66
|
||||
%65 = OpExtInst %v4float %1 FSign %67
|
||||
%68 = OpLoad %v4float %expected
|
||||
%69 = OpFOrdEqual %v4bool %65 %68
|
||||
%71 = OpAll %bool %69
|
||||
OpBranch %64
|
||||
%64 = OpLabel
|
||||
%72 = OpPhi %bool %false %51 %71 %63
|
||||
OpSelectionMerge %76 None
|
||||
OpBranchConditional %72 %74 %75
|
||||
%74 = OpLabel
|
||||
%77 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
|
||||
%79 = OpLoad %v4float %77
|
||||
OpStore %73 %79
|
||||
OpBranch %76
|
||||
%75 = OpLabel
|
||||
%80 = OpAccessChain %_ptr_Uniform_v4float %10 %int_2
|
||||
%82 = OpLoad %v4float %80
|
||||
OpStore %73 %82
|
||||
OpBranch %76
|
||||
%76 = OpLabel
|
||||
%83 = OpLoad %v4float %73
|
||||
OpReturnValue %83
|
||||
OpFunctionEnd
|
||||
|
@ -4,5 +4,6 @@ uniform vec4 testInputs;
|
||||
uniform vec4 colorGreen;
|
||||
uniform vec4 colorRed;
|
||||
vec4 main() {
|
||||
return ((sign(testInputs.x) == -1.0 && sign(testInputs.xy) == vec2(-1.0, 0.0)) && sign(testInputs.xyz) == vec3(-1.0, 0.0, 1.0)) && sign(testInputs) == vec4(-1.0, 0.0, 1.0, 1.0) ? colorGreen : colorRed;
|
||||
vec4 expected = vec4(-1.0, 0.0, 1.0, 1.0);
|
||||
return ((sign(testInputs.x) == expected.x && sign(testInputs.xy) == expected.xy) && sign(testInputs.xyz) == expected.xyz) && sign(testInputs) == expected ? colorGreen : colorRed;
|
||||
}
|
||||
|
@ -17,6 +17,7 @@ struct Outputs {
|
||||
fragment Outputs fragmentMain(Inputs _in [[stage_in]], constant Uniforms& _uniforms [[buffer(0)]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
|
||||
Outputs _out;
|
||||
(void)_out;
|
||||
_out.sk_FragColor = ((sign(_uniforms.testInputs.x) == -1.0 && all(sign(_uniforms.testInputs.xy) == float2(-1.0, 0.0))) && all(sign(_uniforms.testInputs.xyz) == float3(-1.0, 0.0, 1.0))) && all(sign(_uniforms.testInputs) == float4(-1.0, 0.0, 1.0, 1.0)) ? _uniforms.colorGreen : _uniforms.colorRed;
|
||||
float4 expected = float4(-1.0, 0.0, 1.0, 1.0);
|
||||
_out.sk_FragColor = ((sign(_uniforms.testInputs.x) == expected.x && all(sign(_uniforms.testInputs.xy) == expected.xy)) && all(sign(_uniforms.testInputs.xyz) == expected.xyz)) && all(sign(_uniforms.testInputs) == expected) ? _uniforms.colorGreen : _uniforms.colorRed;
|
||||
return _out;
|
||||
}
|
||||
|
@ -9,6 +9,7 @@ struct Outputs {
|
||||
fragment Outputs fragmentMain(Inputs _in [[stage_in]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
|
||||
Outputs _out;
|
||||
(void)_out;
|
||||
_out.sk_FragColor = float2x2(float2(1.0, 2.0), float2(3.0, 4.0))[0].xyxy;
|
||||
float2x2 m1 = float2x2(float2(1.0, 2.0), float2(3.0, 4.0));
|
||||
_out.sk_FragColor = m1[0].xyxy;
|
||||
return _out;
|
||||
}
|
||||
|
@ -12,6 +12,8 @@ float3x3 float3x3_from_float2x2(float2x2 x0) {
|
||||
fragment Outputs fragmentMain(Inputs _in [[stage_in]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
|
||||
Outputs _out;
|
||||
(void)_out;
|
||||
_out.sk_FragColor.x = float(all(float3x3(1.0)[0] == float3x3_from_float2x2(float2x2(1.0))[0]) ? 0 : 1);
|
||||
float3x3 a = float3x3(1.0);
|
||||
float3x3 b = float3x3_from_float2x2(float2x2(1.0));
|
||||
_out.sk_FragColor.x = float(all(a[0] == b[0]) ? 0 : 1);
|
||||
return _out;
|
||||
}
|
||||
|
@ -12,6 +12,8 @@ float4x4 float4x4_from_float2x3(float2x3 x0) {
|
||||
fragment Outputs fragmentMain(Inputs _in [[stage_in]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
|
||||
Outputs _out;
|
||||
(void)_out;
|
||||
_out.sk_FragColor.x = float(all(float4x4(6.0)[1] == float4x4_from_float2x3(float2x3(7.0))[1]) ? 0 : 1);
|
||||
float4x4 a = float4x4(6.0);
|
||||
float4x4 b = float4x4_from_float2x3(float2x3(7.0));
|
||||
_out.sk_FragColor.x = float(all(a[1] == b[1]) ? 0 : 1);
|
||||
return _out;
|
||||
}
|
||||
|
@ -12,6 +12,8 @@ float3x4 float3x4_from_float4x4(float4x4 x0) {
|
||||
fragment Outputs fragmentMain(Inputs _in [[stage_in]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
|
||||
Outputs _out;
|
||||
(void)_out;
|
||||
_out.sk_FragColor.x = float(all(float3x4(1.0)[0] == float3x4_from_float4x4(float4x4(1.0))[0]) ? 0 : 1);
|
||||
float3x4 a = float3x4(1.0);
|
||||
float3x4 b = float3x4_from_float4x4(float4x4(1.0));
|
||||
_out.sk_FragColor.x = float(all(a[0] == b[0]) ? 0 : 1);
|
||||
return _out;
|
||||
}
|
||||
|
@ -12,6 +12,8 @@ float4x3 float4x3_from_float4x4(float4x4 x0) {
|
||||
fragment Outputs fragmentMain(Inputs _in [[stage_in]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
|
||||
Outputs _out;
|
||||
(void)_out;
|
||||
_out.sk_FragColor.x = float(all(float4x3(1.0)[0] == float4x3_from_float4x4(float4x4(1.0))[0]) ? 0 : 1);
|
||||
float4x3 a = float4x3(1.0);
|
||||
float4x3 b = float4x3_from_float4x4(float4x4(1.0));
|
||||
_out.sk_FragColor.x = float(all(a[0] == b[0]) ? 0 : 1);
|
||||
return _out;
|
||||
}
|
||||
|
@ -33,8 +33,10 @@ fragment Outputs fragmentMain(Inputs _in [[stage_in]], bool _frontFacing [[front
|
||||
(void)_globals;
|
||||
Outputs _out;
|
||||
(void)_out;
|
||||
float2 a = float2(1.0);
|
||||
float3 b = float3(2.0);
|
||||
float4x4 c = float4x4(3.0);
|
||||
float3x3 d = float3x3(4.0);
|
||||
_out.sk_FragColor = _skOutParamHelper0_fn(_out, _globals, 1.0, b, _globals.glob, d);
|
||||
_out.sk_FragColor = _skOutParamHelper0_fn(_out, _globals, a.x, b, _globals.glob, d);
|
||||
return _out;
|
||||
}
|
||||
|
@ -10,6 +10,9 @@ OpMemberName %_UniformBuffer 0 "colorGreen"
|
||||
OpMemberName %_UniformBuffer 1 "colorRed"
|
||||
OpName %_entrypoint "_entrypoint"
|
||||
OpName %main "main"
|
||||
OpName %test1 "test1"
|
||||
OpName %test2 "test2"
|
||||
OpName %test3 "test3"
|
||||
OpDecorate %sk_FragColor RelaxedPrecision
|
||||
OpDecorate %sk_FragColor Location 0
|
||||
OpDecorate %sk_FragColor Index 0
|
||||
@ -49,21 +52,21 @@ OpDecorate %77 RelaxedPrecision
|
||||
%float_2 = OpConstant %float 2
|
||||
%float_3 = OpConstant %float 3
|
||||
%float_4 = OpConstant %float 4
|
||||
%int_3 = OpConstant %int 3
|
||||
%_ptr_Function_float = OpTypePointer Function %float
|
||||
%v2float = OpTypeVector %float 2
|
||||
%int_2 = OpConstant %int 2
|
||||
%_arr_v2float_int_2 = OpTypeArray %v2float %int_2
|
||||
%_ptr_Function__arr_v2float_int_2 = OpTypePointer Function %_arr_v2float_int_2
|
||||
%39 = OpConstantComposite %v2float %float_1 %float_2
|
||||
%40 = OpConstantComposite %v2float %float_3 %float_4
|
||||
%int_1 = OpConstant %int 1
|
||||
%_ptr_Function_v2float = OpTypePointer Function %v2float
|
||||
%35 = OpConstantComposite %v2float %float_1 %float_2
|
||||
%36 = OpConstantComposite %v2float %float_3 %float_4
|
||||
%mat4v4float = OpTypeMatrix %v4float 4
|
||||
%int_1 = OpConstant %int 1
|
||||
%_arr_mat4v4float_int_1 = OpTypeArray %mat4v4float %int_1
|
||||
%_ptr_Function__arr_mat4v4float_int_1 = OpTypePointer Function %_arr_mat4v4float_int_1
|
||||
%float_16 = OpConstant %float 16
|
||||
%float_0 = OpConstant %float 0
|
||||
%int_3 = OpConstant %int 3
|
||||
%_ptr_Function_float = OpTypePointer Function %float
|
||||
%_ptr_Function_v2float = OpTypePointer Function %v2float
|
||||
%int_0 = OpConstant %int 0
|
||||
%_ptr_Function_v4float = OpTypePointer Function %v4float
|
||||
%float_24 = OpConstant %float 24
|
||||
@ -76,31 +79,31 @@ OpReturn
|
||||
OpFunctionEnd
|
||||
%main = OpFunction %v4float None %18
|
||||
%19 = OpLabel
|
||||
%20 = OpVariable %_ptr_Function__arr_float_int_4 Function
|
||||
%34 = OpVariable %_ptr_Function__arr_v2float_int_2 Function
|
||||
%48 = OpVariable %_ptr_Function__arr_mat4v4float_int_1 Function
|
||||
%test1 = OpVariable %_ptr_Function__arr_float_int_4 Function
|
||||
%test2 = OpVariable %_ptr_Function__arr_v2float_int_2 Function
|
||||
%test3 = OpVariable %_ptr_Function__arr_mat4v4float_int_1 Function
|
||||
%68 = OpVariable %_ptr_Function_v4float Function
|
||||
%29 = OpCompositeConstruct %_arr_float_int_4 %float_1 %float_2 %float_3 %float_4
|
||||
OpStore %20 %29
|
||||
%31 = OpAccessChain %_ptr_Function_float %20 %int_3
|
||||
%33 = OpLoad %float %31
|
||||
%41 = OpCompositeConstruct %_arr_v2float_int_2 %39 %40
|
||||
OpStore %34 %41
|
||||
%43 = OpAccessChain %_ptr_Function_v2float %34 %int_1
|
||||
%45 = OpLoad %v2float %43
|
||||
%46 = OpCompositeExtract %float %45 1
|
||||
%47 = OpFAdd %float %33 %46
|
||||
%55 = OpCompositeConstruct %v4float %float_16 %float_0 %float_0 %float_0
|
||||
%56 = OpCompositeConstruct %v4float %float_0 %float_16 %float_0 %float_0
|
||||
%57 = OpCompositeConstruct %v4float %float_0 %float_0 %float_16 %float_0
|
||||
%58 = OpCompositeConstruct %v4float %float_0 %float_0 %float_0 %float_16
|
||||
%53 = OpCompositeConstruct %mat4v4float %55 %56 %57 %58
|
||||
%59 = OpCompositeConstruct %_arr_mat4v4float_int_1 %53
|
||||
OpStore %48 %59
|
||||
%61 = OpAccessChain %_ptr_Function_v4float %48 %int_0 %int_3
|
||||
OpStore %test1 %29
|
||||
%37 = OpCompositeConstruct %_arr_v2float_int_2 %35 %36
|
||||
OpStore %test2 %37
|
||||
%46 = OpCompositeConstruct %v4float %float_16 %float_0 %float_0 %float_0
|
||||
%47 = OpCompositeConstruct %v4float %float_0 %float_16 %float_0 %float_0
|
||||
%48 = OpCompositeConstruct %v4float %float_0 %float_0 %float_16 %float_0
|
||||
%49 = OpCompositeConstruct %v4float %float_0 %float_0 %float_0 %float_16
|
||||
%44 = OpCompositeConstruct %mat4v4float %46 %47 %48 %49
|
||||
%50 = OpCompositeConstruct %_arr_mat4v4float_int_1 %44
|
||||
OpStore %test3 %50
|
||||
%52 = OpAccessChain %_ptr_Function_float %test1 %int_3
|
||||
%54 = OpLoad %float %52
|
||||
%55 = OpAccessChain %_ptr_Function_v2float %test2 %int_1
|
||||
%57 = OpLoad %v2float %55
|
||||
%58 = OpCompositeExtract %float %57 1
|
||||
%59 = OpFAdd %float %54 %58
|
||||
%61 = OpAccessChain %_ptr_Function_v4float %test3 %int_0 %int_3
|
||||
%63 = OpLoad %v4float %61
|
||||
%64 = OpCompositeExtract %float %63 3
|
||||
%65 = OpFAdd %float %47 %64
|
||||
%65 = OpFAdd %float %59 %64
|
||||
%67 = OpFOrdEqual %bool %65 %float_24
|
||||
OpSelectionMerge %71 None
|
||||
OpBranchConditional %67 %69 %70
|
||||
|
@ -3,5 +3,8 @@ out vec4 sk_FragColor;
|
||||
uniform vec4 colorGreen;
|
||||
uniform vec4 colorRed;
|
||||
vec4 main() {
|
||||
return (float[4](1.0, 2.0, 3.0, 4.0)[3] + vec2[2](vec2(1.0, 2.0), vec2(3.0, 4.0))[1].y) + mat4[1](mat4(16.0))[0][3].w == 24.0 ? colorGreen : colorRed;
|
||||
float test1[4] = float[4](1.0, 2.0, 3.0, 4.0);
|
||||
vec2 test2[2] = vec2[2](vec2(1.0, 2.0), vec2(3.0, 4.0));
|
||||
mat4 test3[1] = mat4[1](mat4(16.0));
|
||||
return (test1[3] + test2[1].y) + test3[0][3].w == 24.0 ? colorGreen : colorRed;
|
||||
}
|
||||
|
@ -15,6 +15,9 @@ struct Outputs {
|
||||
fragment Outputs fragmentMain(Inputs _in [[stage_in]], constant Uniforms& _uniforms [[buffer(0)]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
|
||||
Outputs _out;
|
||||
(void)_out;
|
||||
_out.sk_FragColor = (array<float, 4>{1.0, 2.0, 3.0, 4.0}[3] + array<float2, 2>{float2(1.0, 2.0), float2(3.0, 4.0)}[1].y) + array<float4x4, 1>{float4x4(16.0)}[0][3].w == 24.0 ? _uniforms.colorGreen : _uniforms.colorRed;
|
||||
array<float, 4> test1 = array<float, 4>{1.0, 2.0, 3.0, 4.0};
|
||||
array<float2, 2> test2 = array<float2, 2>{float2(1.0, 2.0), float2(3.0, 4.0)};
|
||||
array<float4x4, 1> test3 = array<float4x4, 1>{float4x4(16.0)};
|
||||
_out.sk_FragColor = (test1[3] + test2[1].y) + test3[0][3].w == 24.0 ? _uniforms.colorGreen : _uniforms.colorRed;
|
||||
return _out;
|
||||
}
|
||||
|
@ -6,12 +6,19 @@ OpExecutionMode %main OriginUpperLeft
|
||||
OpName %sk_FragColor "sk_FragColor"
|
||||
OpName %sk_Clockwise "sk_Clockwise"
|
||||
OpName %main "main"
|
||||
OpName %array "array"
|
||||
OpName %x "x"
|
||||
OpName %y "y"
|
||||
OpName %z "z"
|
||||
OpName %w "w"
|
||||
OpDecorate %sk_FragColor RelaxedPrecision
|
||||
OpDecorate %sk_FragColor Location 0
|
||||
OpDecorate %sk_FragColor Index 0
|
||||
OpDecorate %sk_Clockwise RelaxedPrecision
|
||||
OpDecorate %sk_Clockwise BuiltIn FrontFacing
|
||||
OpDecorate %_arr_float_int_4 ArrayStride 16
|
||||
OpDecorate %34 RelaxedPrecision
|
||||
OpDecorate %38 RelaxedPrecision
|
||||
%float = OpTypeFloat 32
|
||||
%v4float = OpTypeVector %float 4
|
||||
%_ptr_Output_v4float = OpTypePointer Output %v4float
|
||||
@ -29,35 +36,40 @@ OpDecorate %_arr_float_int_4 ArrayStride 16
|
||||
%float_2 = OpConstant %float 2
|
||||
%float_3 = OpConstant %float 3
|
||||
%float_4 = OpConstant %float 4
|
||||
%_ptr_Function_int = OpTypePointer Function %int
|
||||
%int_0 = OpConstant %int 0
|
||||
%_ptr_Function_float = OpTypePointer Function %float
|
||||
%uint = OpTypeInt 32 0
|
||||
%_ptr_Function_uint = OpTypePointer Function %uint
|
||||
%uint_1 = OpConstant %uint 1
|
||||
%int_2 = OpConstant %int 2
|
||||
%uint_3 = OpConstant %uint 3
|
||||
%_ptr_Function_float = OpTypePointer Function %float
|
||||
%main = OpFunction %void None %11
|
||||
%12 = OpLabel
|
||||
%13 = OpVariable %_ptr_Function__arr_float_int_4 Function
|
||||
%27 = OpVariable %_ptr_Function__arr_float_int_4 Function
|
||||
%33 = OpVariable %_ptr_Function__arr_float_int_4 Function
|
||||
%38 = OpVariable %_ptr_Function__arr_float_int_4 Function
|
||||
%array = OpVariable %_ptr_Function__arr_float_int_4 Function
|
||||
%x = OpVariable %_ptr_Function_int Function
|
||||
%y = OpVariable %_ptr_Function_uint Function
|
||||
%z = OpVariable %_ptr_Function_int Function
|
||||
%w = OpVariable %_ptr_Function_uint Function
|
||||
%22 = OpCompositeConstruct %_arr_float_int_4 %float_1 %float_2 %float_3 %float_4
|
||||
OpStore %13 %22
|
||||
%24 = OpAccessChain %_ptr_Function_float %13 %int_0
|
||||
%26 = OpLoad %float %24
|
||||
%28 = OpCompositeConstruct %_arr_float_int_4 %float_1 %float_2 %float_3 %float_4
|
||||
OpStore %27 %28
|
||||
%31 = OpAccessChain %_ptr_Function_float %27 %uint_1
|
||||
%32 = OpLoad %float %31
|
||||
%34 = OpCompositeConstruct %_arr_float_int_4 %float_1 %float_2 %float_3 %float_4
|
||||
OpStore %33 %34
|
||||
%36 = OpAccessChain %_ptr_Function_float %33 %int_2
|
||||
%37 = OpLoad %float %36
|
||||
%39 = OpCompositeConstruct %_arr_float_int_4 %float_1 %float_2 %float_3 %float_4
|
||||
OpStore %38 %39
|
||||
%41 = OpAccessChain %_ptr_Function_float %38 %uint_3
|
||||
%42 = OpLoad %float %41
|
||||
%43 = OpCompositeConstruct %v4float %26 %32 %37 %42
|
||||
OpStore %sk_FragColor %43
|
||||
OpStore %array %22
|
||||
OpStore %x %int_0
|
||||
OpStore %y %uint_1
|
||||
OpStore %z %int_2
|
||||
OpStore %w %uint_3
|
||||
%34 = OpLoad %int %x
|
||||
%35 = OpAccessChain %_ptr_Function_float %array %34
|
||||
%37 = OpLoad %float %35
|
||||
%38 = OpLoad %uint %y
|
||||
%39 = OpAccessChain %_ptr_Function_float %array %38
|
||||
%40 = OpLoad %float %39
|
||||
%41 = OpLoad %int %z
|
||||
%42 = OpAccessChain %_ptr_Function_float %array %41
|
||||
%43 = OpLoad %float %42
|
||||
%44 = OpLoad %uint %w
|
||||
%45 = OpAccessChain %_ptr_Function_float %array %44
|
||||
%46 = OpLoad %float %45
|
||||
%47 = OpCompositeConstruct %v4float %37 %40 %43 %46
|
||||
OpStore %sk_FragColor %47
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
|
@ -1,5 +1,10 @@
|
||||
|
||||
out vec4 sk_FragColor;
|
||||
void main() {
|
||||
sk_FragColor = vec4(float[4](1.0, 2.0, 3.0, 4.0)[0], float[4](1.0, 2.0, 3.0, 4.0)[1u], float[4](1.0, 2.0, 3.0, 4.0)[2], float[4](1.0, 2.0, 3.0, 4.0)[3u]);
|
||||
float array[4] = float[4](1.0, 2.0, 3.0, 4.0);
|
||||
int x = 0;
|
||||
uint y = 1u;
|
||||
int z = 2;
|
||||
uint w = 3u;
|
||||
sk_FragColor = vec4(array[x], array[y], array[z], array[w]);
|
||||
}
|
||||
|
@ -9,6 +9,11 @@ struct Outputs {
|
||||
fragment Outputs fragmentMain(Inputs _in [[stage_in]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
|
||||
Outputs _out;
|
||||
(void)_out;
|
||||
_out.sk_FragColor = float4(array<float, 4>{1.0, 2.0, 3.0, 4.0}[0], array<float, 4>{1.0, 2.0, 3.0, 4.0}[1u], array<float, 4>{1.0, 2.0, 3.0, 4.0}[2], array<float, 4>{1.0, 2.0, 3.0, 4.0}[3u]);
|
||||
array<float, 4> array = array<float, 4>{1.0, 2.0, 3.0, 4.0};
|
||||
short x = 0;
|
||||
ushort y = 1u;
|
||||
int z = 2;
|
||||
uint w = 3u;
|
||||
_out.sk_FragColor = float4(array[x], array[y], array[z], array[w]);
|
||||
return _out;
|
||||
}
|
||||
|
@ -9,7 +9,9 @@ OpName %_UniformBuffer "_UniformBuffer"
|
||||
OpMemberName %_UniformBuffer 0 "colorGreen"
|
||||
OpName %_entrypoint "_entrypoint"
|
||||
OpName %main "main"
|
||||
OpName %i "i"
|
||||
OpName %i4 "i4"
|
||||
OpName %f3x3 "f3x3"
|
||||
OpName %x "x"
|
||||
OpName %ai "ai"
|
||||
OpName %ai4 "ai4"
|
||||
@ -21,6 +23,8 @@ OpMemberName %S 1 "af"
|
||||
OpMemberName %S 2 "h4"
|
||||
OpMemberName %S 3 "ah4"
|
||||
OpName %s "s"
|
||||
OpName %l "l"
|
||||
OpName %r "r"
|
||||
OpDecorate %sk_FragColor RelaxedPrecision
|
||||
OpDecorate %sk_FragColor Location 0
|
||||
OpDecorate %sk_FragColor Index 0
|
||||
@ -31,14 +35,14 @@ OpMemberDecorate %_UniformBuffer 0 RelaxedPrecision
|
||||
OpDecorate %_UniformBuffer Block
|
||||
OpDecorate %10 Binding 0
|
||||
OpDecorate %10 DescriptorSet 0
|
||||
OpDecorate %37 RelaxedPrecision
|
||||
OpDecorate %57 RelaxedPrecision
|
||||
OpDecorate %_arr_int_int_1 ArrayStride 16
|
||||
OpDecorate %_arr_v4int_int_1 ArrayStride 16
|
||||
OpDecorate %_arr_mat3v3float_int_1 ArrayStride 48
|
||||
OpDecorate %63 RelaxedPrecision
|
||||
OpDecorate %64 RelaxedPrecision
|
||||
OpDecorate %65 RelaxedPrecision
|
||||
OpDecorate %62 RelaxedPrecision
|
||||
OpDecorate %70 RelaxedPrecision
|
||||
OpDecorate %71 RelaxedPrecision
|
||||
OpDecorate %72 RelaxedPrecision
|
||||
OpDecorate %69 RelaxedPrecision
|
||||
OpDecorate %_arr_v4float_int_1 ArrayStride 16
|
||||
OpDecorate %_arr_float_int_5 ArrayStride 16
|
||||
OpDecorate %_arr_v4float_int_5 ArrayStride 16
|
||||
@ -48,12 +52,14 @@ OpMemberDecorate %S 2 Offset 96
|
||||
OpMemberDecorate %S 2 RelaxedPrecision
|
||||
OpMemberDecorate %S 3 Offset 112
|
||||
OpMemberDecorate %S 3 RelaxedPrecision
|
||||
OpDecorate %88 RelaxedPrecision
|
||||
OpDecorate %92 RelaxedPrecision
|
||||
OpDecorate %108 RelaxedPrecision
|
||||
OpDecorate %115 RelaxedPrecision
|
||||
OpDecorate %94 RelaxedPrecision
|
||||
OpDecorate %98 RelaxedPrecision
|
||||
OpDecorate %116 RelaxedPrecision
|
||||
OpDecorate %122 RelaxedPrecision
|
||||
OpDecorate %124 RelaxedPrecision
|
||||
OpDecorate %125 RelaxedPrecision
|
||||
OpDecorate %126 RelaxedPrecision
|
||||
OpDecorate %129 RelaxedPrecision
|
||||
OpDecorate %133 RelaxedPrecision
|
||||
%float = OpTypeFloat 32
|
||||
%v4float = OpTypeVector %float 4
|
||||
%_ptr_Output_v4float = OpTypePointer Output %v4float
|
||||
@ -68,28 +74,18 @@ OpDecorate %122 RelaxedPrecision
|
||||
%15 = OpTypeFunction %void
|
||||
%18 = OpTypeFunction %v4float
|
||||
%int = OpTypeInt 32 1
|
||||
%_ptr_Function_int = OpTypePointer Function %int
|
||||
%int_0 = OpConstant %int 0
|
||||
%v4int = OpTypeVector %int 4
|
||||
%_ptr_Function_v4int = OpTypePointer Function %v4int
|
||||
%int_1 = OpConstant %int 1
|
||||
%int_2 = OpConstant %int 2
|
||||
%int_3 = OpConstant %int 3
|
||||
%int_4 = OpConstant %int 4
|
||||
%28 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
|
||||
%_ptr_Function_v4float = OpTypePointer Function %v4float
|
||||
%float_0 = OpConstant %float 0
|
||||
%_ptr_Function_float = OpTypePointer Function %float
|
||||
%v2float = OpTypeVector %float 2
|
||||
%35 = OpConstantComposite %v2float %float_0 %float_0
|
||||
%_arr_int_int_1 = OpTypeArray %int %int_1
|
||||
%_ptr_Function__arr_int_int_1 = OpTypePointer Function %_arr_int_int_1
|
||||
%int_0 = OpConstant %int 0
|
||||
%_ptr_Function_int = OpTypePointer Function %int
|
||||
%_arr_v4int_int_1 = OpTypeArray %v4int %int_1
|
||||
%_ptr_Function__arr_v4int_int_1 = OpTypePointer Function %_arr_v4int_int_1
|
||||
%31 = OpConstantComposite %v4int %int_1 %int_2 %int_3 %int_4
|
||||
%v3float = OpTypeVector %float 3
|
||||
%mat3v3float = OpTypeMatrix %v3float 3
|
||||
%_arr_mat3v3float_int_1 = OpTypeArray %mat3v3float %int_1
|
||||
%_ptr_Function__arr_mat3v3float_int_1 = OpTypePointer Function %_arr_mat3v3float_int_1
|
||||
%_ptr_Function_mat3v3float = OpTypePointer Function %mat3v3float
|
||||
%float_1 = OpConstant %float 1
|
||||
%float_2 = OpConstant %float 2
|
||||
%float_3 = OpConstant %float 3
|
||||
@ -99,18 +95,28 @@ OpDecorate %122 RelaxedPrecision
|
||||
%float_7 = OpConstant %float 7
|
||||
%float_8 = OpConstant %float 8
|
||||
%float_9 = OpConstant %float 9
|
||||
%_ptr_Function_mat3v3float = OpTypePointer Function %mat3v3float
|
||||
%_ptr_Function_v4float = OpTypePointer Function %v4float
|
||||
%float_0 = OpConstant %float 0
|
||||
%_ptr_Function_float = OpTypePointer Function %float
|
||||
%v2float = OpTypeVector %float 2
|
||||
%55 = OpConstantComposite %v2float %float_0 %float_0
|
||||
%_arr_int_int_1 = OpTypeArray %int %int_1
|
||||
%_ptr_Function__arr_int_int_1 = OpTypePointer Function %_arr_int_int_1
|
||||
%_arr_v4int_int_1 = OpTypeArray %v4int %int_1
|
||||
%_ptr_Function__arr_v4int_int_1 = OpTypePointer Function %_arr_v4int_int_1
|
||||
%_arr_mat3v3float_int_1 = OpTypeArray %mat3v3float %int_1
|
||||
%_ptr_Function__arr_mat3v3float_int_1 = OpTypePointer Function %_arr_mat3v3float_int_1
|
||||
%_arr_v4float_int_1 = OpTypeArray %v4float %int_1
|
||||
%_ptr_Function__arr_v4float_int_1 = OpTypePointer Function %_arr_v4float_int_1
|
||||
%73 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
|
||||
%79 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
|
||||
%int_5 = OpConstant %int 5
|
||||
%_arr_float_int_5 = OpTypeArray %float %int_5
|
||||
%_arr_v4float_int_5 = OpTypeArray %v4float %int_5
|
||||
%S = OpTypeStruct %float %_arr_float_int_5 %v4float %_arr_v4float_int_5
|
||||
%_ptr_Function_S = OpTypePointer Function %S
|
||||
%85 = OpConstantComposite %v3float %float_9 %float_9 %float_9
|
||||
%89 = OpConstantComposite %v2float %float_5 %float_5
|
||||
%102 = OpConstantComposite %v4float %float_2 %float_2 %float_2 %float_2
|
||||
%91 = OpConstantComposite %v3float %float_9 %float_9 %float_9
|
||||
%95 = OpConstantComposite %v2float %float_5 %float_5
|
||||
%110 = OpConstantComposite %v4float %float_2 %float_2 %float_2 %float_2
|
||||
%_ptr_Function_v3float = OpTypePointer Function %v3float
|
||||
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
|
||||
%_entrypoint = OpFunction %void None %15
|
||||
@ -121,83 +127,97 @@ OpReturn
|
||||
OpFunctionEnd
|
||||
%main = OpFunction %v4float None %18
|
||||
%19 = OpLabel
|
||||
%i = OpVariable %_ptr_Function_int Function
|
||||
%i4 = OpVariable %_ptr_Function_v4int Function
|
||||
%f3x3 = OpVariable %_ptr_Function_mat3v3float Function
|
||||
%x = OpVariable %_ptr_Function_v4float Function
|
||||
%ai = OpVariable %_ptr_Function__arr_int_int_1 Function
|
||||
%ai4 = OpVariable %_ptr_Function__arr_v4int_int_1 Function
|
||||
%ah2x4 = OpVariable %_ptr_Function__arr_mat3v3float_int_1 Function
|
||||
%af4 = OpVariable %_ptr_Function__arr_v4float_int_1 Function
|
||||
%s = OpVariable %_ptr_Function_S Function
|
||||
OpStore %i4 %28
|
||||
%32 = OpAccessChain %_ptr_Function_float %x %int_3
|
||||
OpStore %32 %float_0
|
||||
%36 = OpLoad %v4float %x
|
||||
%37 = OpVectorShuffle %v4float %36 %35 5 4 2 3
|
||||
OpStore %x %37
|
||||
%42 = OpAccessChain %_ptr_Function_int %ai %int_0
|
||||
OpStore %42 %int_0
|
||||
%47 = OpAccessChain %_ptr_Function_v4int %ai4 %int_0
|
||||
OpStore %47 %28
|
||||
%63 = OpCompositeConstruct %v3float %float_1 %float_2 %float_3
|
||||
%64 = OpCompositeConstruct %v3float %float_4 %float_5 %float_6
|
||||
%65 = OpCompositeConstruct %v3float %float_7 %float_8 %float_9
|
||||
%62 = OpCompositeConstruct %mat3v3float %63 %64 %65
|
||||
%66 = OpAccessChain %_ptr_Function_mat3v3float %ah2x4 %int_0
|
||||
OpStore %66 %62
|
||||
%71 = OpAccessChain %_ptr_Function_v4float %af4 %int_0
|
||||
%72 = OpAccessChain %_ptr_Function_float %71 %int_0
|
||||
OpStore %72 %float_0
|
||||
%74 = OpAccessChain %_ptr_Function_v4float %af4 %int_0
|
||||
%75 = OpLoad %v4float %74
|
||||
%76 = OpVectorShuffle %v4float %75 %73 6 4 7 5
|
||||
OpStore %74 %76
|
||||
%83 = OpAccessChain %_ptr_Function_float %s %int_0
|
||||
OpStore %83 %float_0
|
||||
%84 = OpAccessChain %_ptr_Function_float %s %int_1 %int_1
|
||||
OpStore %84 %float_0
|
||||
%86 = OpAccessChain %_ptr_Function_v4float %s %int_2
|
||||
%87 = OpLoad %v4float %86
|
||||
%88 = OpVectorShuffle %v4float %87 %85 5 6 4 3
|
||||
OpStore %86 %88
|
||||
%90 = OpAccessChain %_ptr_Function_v4float %s %int_3 %int_2
|
||||
%91 = OpLoad %v4float %90
|
||||
%92 = OpVectorShuffle %v4float %91 %89 0 4 2 5
|
||||
OpStore %90 %92
|
||||
%93 = OpAccessChain %_ptr_Function_int %ai %int_0
|
||||
%94 = OpLoad %int %93
|
||||
%95 = OpAccessChain %_ptr_Function_v4int %ai4 %int_0
|
||||
%96 = OpLoad %v4int %95
|
||||
%97 = OpCompositeExtract %int %96 0
|
||||
%98 = OpIAdd %int %94 %97
|
||||
OpStore %93 %98
|
||||
%99 = OpAccessChain %_ptr_Function_float %s %int_0
|
||||
OpStore %99 %float_1
|
||||
%100 = OpAccessChain %_ptr_Function_float %s %int_1 %int_0
|
||||
OpStore %100 %float_2
|
||||
%101 = OpAccessChain %_ptr_Function_v4float %s %int_2
|
||||
OpStore %101 %73
|
||||
%103 = OpAccessChain %_ptr_Function_v4float %s %int_3 %int_0
|
||||
OpStore %103 %102
|
||||
%104 = OpAccessChain %_ptr_Function_v4float %af4 %int_0
|
||||
%105 = OpLoad %v4float %104
|
||||
%106 = OpAccessChain %_ptr_Function_v3float %ah2x4 %int_0 %int_0
|
||||
%108 = OpLoad %v3float %106
|
||||
%109 = OpCompositeExtract %float %108 0
|
||||
%110 = OpVectorTimesScalar %v4float %105 %109
|
||||
OpStore %104 %110
|
||||
%111 = OpAccessChain %_ptr_Function_int %i4 %int_1
|
||||
%112 = OpLoad %int %111
|
||||
%113 = OpIMul %int %112 %int_0
|
||||
OpStore %111 %113
|
||||
%114 = OpAccessChain %_ptr_Function_float %x %int_1
|
||||
%115 = OpLoad %float %114
|
||||
%116 = OpFMul %float %115 %float_0
|
||||
OpStore %114 %116
|
||||
%117 = OpAccessChain %_ptr_Function_float %s %int_0
|
||||
%118 = OpLoad %float %117
|
||||
%119 = OpFMul %float %118 %float_0
|
||||
OpStore %117 %119
|
||||
%120 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%122 = OpLoad %v4float %120
|
||||
OpReturnValue %122
|
||||
%l = OpVariable %_ptr_Function_float Function
|
||||
%r = OpVariable %_ptr_Function_float Function
|
||||
OpStore %i %int_0
|
||||
OpStore %i4 %31
|
||||
%46 = OpCompositeConstruct %v3float %float_1 %float_2 %float_3
|
||||
%47 = OpCompositeConstruct %v3float %float_4 %float_5 %float_6
|
||||
%48 = OpCompositeConstruct %v3float %float_7 %float_8 %float_9
|
||||
%45 = OpCompositeConstruct %mat3v3float %46 %47 %48
|
||||
OpStore %f3x3 %45
|
||||
%52 = OpAccessChain %_ptr_Function_float %x %int_3
|
||||
OpStore %52 %float_0
|
||||
%56 = OpLoad %v4float %x
|
||||
%57 = OpVectorShuffle %v4float %56 %55 5 4 2 3
|
||||
OpStore %x %57
|
||||
%61 = OpAccessChain %_ptr_Function_int %ai %int_0
|
||||
OpStore %61 %int_0
|
||||
%65 = OpAccessChain %_ptr_Function_v4int %ai4 %int_0
|
||||
OpStore %65 %31
|
||||
%70 = OpCompositeConstruct %v3float %float_1 %float_2 %float_3
|
||||
%71 = OpCompositeConstruct %v3float %float_4 %float_5 %float_6
|
||||
%72 = OpCompositeConstruct %v3float %float_7 %float_8 %float_9
|
||||
%69 = OpCompositeConstruct %mat3v3float %70 %71 %72
|
||||
%73 = OpAccessChain %_ptr_Function_mat3v3float %ah2x4 %int_0
|
||||
OpStore %73 %69
|
||||
%77 = OpAccessChain %_ptr_Function_v4float %af4 %int_0
|
||||
%78 = OpAccessChain %_ptr_Function_float %77 %int_0
|
||||
OpStore %78 %float_0
|
||||
%80 = OpAccessChain %_ptr_Function_v4float %af4 %int_0
|
||||
%81 = OpLoad %v4float %80
|
||||
%82 = OpVectorShuffle %v4float %81 %79 6 4 7 5
|
||||
OpStore %80 %82
|
||||
%89 = OpAccessChain %_ptr_Function_float %s %int_0
|
||||
OpStore %89 %float_0
|
||||
%90 = OpAccessChain %_ptr_Function_float %s %int_1 %int_1
|
||||
OpStore %90 %float_0
|
||||
%92 = OpAccessChain %_ptr_Function_v4float %s %int_2
|
||||
%93 = OpLoad %v4float %92
|
||||
%94 = OpVectorShuffle %v4float %93 %91 5 6 4 3
|
||||
OpStore %92 %94
|
||||
%96 = OpAccessChain %_ptr_Function_v4float %s %int_3 %int_2
|
||||
%97 = OpLoad %v4float %96
|
||||
%98 = OpVectorShuffle %v4float %97 %95 0 4 2 5
|
||||
OpStore %96 %98
|
||||
OpStore %l %float_0
|
||||
%101 = OpAccessChain %_ptr_Function_int %ai %int_0
|
||||
%102 = OpLoad %int %101
|
||||
%103 = OpAccessChain %_ptr_Function_v4int %ai4 %int_0
|
||||
%104 = OpLoad %v4int %103
|
||||
%105 = OpCompositeExtract %int %104 0
|
||||
%106 = OpIAdd %int %102 %105
|
||||
OpStore %101 %106
|
||||
%107 = OpAccessChain %_ptr_Function_float %s %int_0
|
||||
OpStore %107 %float_1
|
||||
%108 = OpAccessChain %_ptr_Function_float %s %int_1 %int_0
|
||||
OpStore %108 %float_2
|
||||
%109 = OpAccessChain %_ptr_Function_v4float %s %int_2
|
||||
OpStore %109 %79
|
||||
%111 = OpAccessChain %_ptr_Function_v4float %s %int_3 %int_0
|
||||
OpStore %111 %110
|
||||
%112 = OpAccessChain %_ptr_Function_v4float %af4 %int_0
|
||||
%113 = OpLoad %v4float %112
|
||||
%114 = OpAccessChain %_ptr_Function_v3float %ah2x4 %int_0 %int_0
|
||||
%116 = OpLoad %v3float %114
|
||||
%117 = OpCompositeExtract %float %116 0
|
||||
%118 = OpVectorTimesScalar %v4float %113 %117
|
||||
OpStore %112 %118
|
||||
%119 = OpAccessChain %_ptr_Function_int %i4 %int_1
|
||||
%120 = OpLoad %int %119
|
||||
%121 = OpLoad %int %i
|
||||
%122 = OpIMul %int %120 %121
|
||||
OpStore %119 %122
|
||||
%123 = OpAccessChain %_ptr_Function_float %x %int_1
|
||||
%124 = OpLoad %float %123
|
||||
%125 = OpLoad %float %l
|
||||
%126 = OpFMul %float %124 %125
|
||||
OpStore %123 %126
|
||||
%127 = OpAccessChain %_ptr_Function_float %s %int_0
|
||||
%128 = OpLoad %float %127
|
||||
%129 = OpLoad %float %l
|
||||
%130 = OpFMul %float %128 %129
|
||||
OpStore %127 %130
|
||||
%131 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%133 = OpLoad %v4float %131
|
||||
OpReturnValue %133
|
||||
OpFunctionEnd
|
||||
|
@ -8,8 +8,12 @@ struct S {
|
||||
vec4 ah4[5];
|
||||
};
|
||||
vec4 main() {
|
||||
int i;
|
||||
i = 0;
|
||||
ivec4 i4;
|
||||
i4 = ivec4(1, 2, 3, 4);
|
||||
mat3 f3x3;
|
||||
f3x3 = mat3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0);
|
||||
vec4 x;
|
||||
x.w = 0.0;
|
||||
x.yx = vec2(0.0);
|
||||
@ -27,14 +31,18 @@ vec4 main() {
|
||||
s.af[1] = 0.0;
|
||||
s.h4.zxy = vec3(9.0);
|
||||
s.ah4[2].yw = vec2(5.0);
|
||||
float l;
|
||||
float r;
|
||||
|
||||
l = 0.0;
|
||||
ai[0] += ai4[0].x;
|
||||
s.f = 1.0;
|
||||
s.af[0] = 2.0;
|
||||
s.h4 = vec4(1.0);
|
||||
s.ah4[0] = vec4(2.0);
|
||||
af4[0] *= ah2x4[0][0].x;
|
||||
i4.y *= 0;
|
||||
x.y *= 0.0;
|
||||
s.f *= 0.0;
|
||||
i4.y *= i;
|
||||
x.y *= l;
|
||||
s.f *= l;
|
||||
return colorGreen;
|
||||
}
|
||||
|
@ -19,8 +19,12 @@ struct Outputs {
|
||||
fragment Outputs fragmentMain(Inputs _in [[stage_in]], constant Uniforms& _uniforms [[buffer(0)]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
|
||||
Outputs _out;
|
||||
(void)_out;
|
||||
int i;
|
||||
i = 0;
|
||||
int4 i4;
|
||||
i4 = int4(1, 2, 3, 4);
|
||||
float3x3 f3x3;
|
||||
f3x3 = float3x3(float3(1.0, 2.0, 3.0), float3(4.0, 5.0, 6.0), float3(7.0, 8.0, 9.0));
|
||||
float4 x;
|
||||
x.w = 0.0;
|
||||
x.yx = float2(0.0);
|
||||
@ -38,15 +42,19 @@ fragment Outputs fragmentMain(Inputs _in [[stage_in]], constant Uniforms& _unifo
|
||||
s.af[1] = 0.0;
|
||||
s.h4.zxy = float3(9.0);
|
||||
s.ah4[2].yw = float2(5.0);
|
||||
float l;
|
||||
float r;
|
||||
|
||||
l = 0.0;
|
||||
ai[0] += ai4[0].x;
|
||||
s.f = 1.0;
|
||||
s.af[0] = 2.0;
|
||||
s.h4 = float4(1.0);
|
||||
s.ah4[0] = float4(2.0);
|
||||
af4[0] *= ah2x4[0][0].x;
|
||||
i4.y = i4.y * 0;
|
||||
x.y = x.y * 0.0;
|
||||
s.f *= 0.0;
|
||||
i4.y = i4.y * i;
|
||||
x.y = x.y * l;
|
||||
s.f *= l;
|
||||
_out.sk_FragColor = _uniforms.colorGreen;
|
||||
return _out;
|
||||
}
|
||||
|
@ -6,12 +6,15 @@ OpExecutionMode %main OriginUpperLeft
|
||||
OpName %sk_FragColor "sk_FragColor"
|
||||
OpName %sk_Clockwise "sk_Clockwise"
|
||||
OpName %main "main"
|
||||
OpName %x "x"
|
||||
OpName %y "y"
|
||||
OpName %z "z"
|
||||
OpDecorate %sk_FragColor RelaxedPrecision
|
||||
OpDecorate %sk_FragColor Location 0
|
||||
OpDecorate %sk_FragColor Index 0
|
||||
OpDecorate %sk_Clockwise RelaxedPrecision
|
||||
OpDecorate %sk_Clockwise BuiltIn FrontFacing
|
||||
OpDecorate %17 RelaxedPrecision
|
||||
OpDecorate %29 RelaxedPrecision
|
||||
%float = OpTypeFloat 32
|
||||
%v4float = OpTypeVector %float 4
|
||||
%_ptr_Output_v4float = OpTypePointer Output %v4float
|
||||
@ -21,13 +24,31 @@ OpDecorate %17 RelaxedPrecision
|
||||
%sk_Clockwise = OpVariable %_ptr_Input_bool Input
|
||||
%void = OpTypeVoid
|
||||
%11 = OpTypeFunction %void
|
||||
%int = OpTypeInt 32 1
|
||||
%_ptr_Function_int = OpTypePointer Function %int
|
||||
%int_0 = OpConstant %int 0
|
||||
%int_1 = OpConstant %int 1
|
||||
%v3float = OpTypeVector %float 3
|
||||
%float_1 = OpConstant %float 1
|
||||
%15 = OpConstantComposite %v3float %float_1 %float_1 %float_1
|
||||
%main = OpFunction %void None %11
|
||||
%12 = OpLabel
|
||||
%16 = OpLoad %v4float %sk_FragColor
|
||||
%17 = OpVectorShuffle %v4float %16 %15 4 5 6 3
|
||||
OpStore %sk_FragColor %17
|
||||
%x = OpVariable %_ptr_Function_int Function
|
||||
%y = OpVariable %_ptr_Function_int Function
|
||||
%z = OpVariable %_ptr_Function_int Function
|
||||
OpStore %x %int_0
|
||||
OpStore %y %int_0
|
||||
OpStore %z %int_0
|
||||
OpStore %x %int_1
|
||||
OpStore %y %int_1
|
||||
OpStore %z %int_1
|
||||
%20 = OpLoad %int %x
|
||||
%21 = OpConvertSToF %float %20
|
||||
%22 = OpLoad %int %y
|
||||
%23 = OpConvertSToF %float %22
|
||||
%24 = OpLoad %int %z
|
||||
%25 = OpConvertSToF %float %24
|
||||
%26 = OpCompositeConstruct %v3float %21 %23 %25
|
||||
%28 = OpLoad %v4float %sk_FragColor
|
||||
%29 = OpVectorShuffle %v4float %28 %26 4 5 6 3
|
||||
OpStore %sk_FragColor %29
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
|
@ -1,5 +1,11 @@
|
||||
|
||||
out vec4 sk_FragColor;
|
||||
void main() {
|
||||
sk_FragColor.xyz = vec3(1.0, 1.0, 1.0);
|
||||
int x = 0;
|
||||
int y = 0;
|
||||
int z = 0;
|
||||
x = 1;
|
||||
y = 1;
|
||||
z = 1;
|
||||
sk_FragColor.xyz = vec3(float(x), float(y), float(z));
|
||||
}
|
||||
|
@ -9,6 +9,12 @@ struct Outputs {
|
||||
fragment Outputs fragmentMain(Inputs _in [[stage_in]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
|
||||
Outputs _out;
|
||||
(void)_out;
|
||||
_out.sk_FragColor.xyz = float3(1.0, 1.0, 1.0);
|
||||
int x = 0;
|
||||
int y = 0;
|
||||
int z = 0;
|
||||
x = 1;
|
||||
y = 1;
|
||||
z = 1;
|
||||
_out.sk_FragColor.xyz = float3(float(x), float(y), float(z));
|
||||
return _out;
|
||||
}
|
||||
|
@ -10,6 +10,7 @@ OpMemberName %_UniformBuffer 0 "colorGreen"
|
||||
OpMemberName %_UniformBuffer 1 "colorRed"
|
||||
OpName %_entrypoint "_entrypoint"
|
||||
OpName %main "main"
|
||||
OpName %ok "ok"
|
||||
OpDecorate %sk_FragColor RelaxedPrecision
|
||||
OpDecorate %sk_FragColor Location 0
|
||||
OpDecorate %sk_FragColor Index 0
|
||||
@ -22,7 +23,10 @@ OpMemberDecorate %_UniformBuffer 1 RelaxedPrecision
|
||||
OpDecorate %_UniformBuffer Block
|
||||
OpDecorate %10 Binding 0
|
||||
OpDecorate %10 DescriptorSet 0
|
||||
OpDecorate %24 RelaxedPrecision
|
||||
OpDecorate %23 RelaxedPrecision
|
||||
OpDecorate %33 RelaxedPrecision
|
||||
OpDecorate %36 RelaxedPrecision
|
||||
OpDecorate %37 RelaxedPrecision
|
||||
%float = OpTypeFloat 32
|
||||
%v4float = OpTypeVector %float 4
|
||||
%_ptr_Output_v4float = OpTypePointer Output %v4float
|
||||
@ -36,9 +40,13 @@ OpDecorate %24 RelaxedPrecision
|
||||
%void = OpTypeVoid
|
||||
%15 = OpTypeFunction %void
|
||||
%18 = OpTypeFunction %v4float
|
||||
%_ptr_Function_bool = OpTypePointer Function %bool
|
||||
%true = OpConstantTrue %bool
|
||||
%_ptr_Function_v4float = OpTypePointer Function %v4float
|
||||
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
|
||||
%int = OpTypeInt 32 1
|
||||
%int_0 = OpConstant %int 0
|
||||
%int_1 = OpConstant %int 1
|
||||
%_entrypoint = OpFunction %void None %15
|
||||
%16 = OpLabel
|
||||
%17 = OpFunctionCall %v4float %main
|
||||
@ -47,7 +55,23 @@ OpReturn
|
||||
OpFunctionEnd
|
||||
%main = OpFunction %v4float None %18
|
||||
%19 = OpLabel
|
||||
%20 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%24 = OpLoad %v4float %20
|
||||
OpReturnValue %24
|
||||
%ok = OpVariable %_ptr_Function_bool Function
|
||||
%24 = OpVariable %_ptr_Function_v4float Function
|
||||
OpStore %ok %true
|
||||
%23 = OpLoad %bool %ok
|
||||
OpSelectionMerge %28 None
|
||||
OpBranchConditional %23 %26 %27
|
||||
%26 = OpLabel
|
||||
%29 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%33 = OpLoad %v4float %29
|
||||
OpStore %24 %33
|
||||
OpBranch %28
|
||||
%27 = OpLabel
|
||||
%34 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
|
||||
%36 = OpLoad %v4float %34
|
||||
OpStore %24 %36
|
||||
OpBranch %28
|
||||
%28 = OpLabel
|
||||
%37 = OpLoad %v4float %24
|
||||
OpReturnValue %37
|
||||
OpFunctionEnd
|
||||
|
@ -3,5 +3,6 @@ out vec4 sk_FragColor;
|
||||
uniform vec4 colorGreen;
|
||||
uniform vec4 colorRed;
|
||||
vec4 main() {
|
||||
return colorGreen;
|
||||
bool ok = true;
|
||||
return ok ? colorGreen : colorRed;
|
||||
}
|
||||
|
@ -15,6 +15,7 @@ struct Outputs {
|
||||
fragment Outputs fragmentMain(Inputs _in [[stage_in]], constant Uniforms& _uniforms [[buffer(0)]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
|
||||
Outputs _out;
|
||||
(void)_out;
|
||||
_out.sk_FragColor = _uniforms.colorGreen;
|
||||
bool ok = true;
|
||||
_out.sk_FragColor = ok ? _uniforms.colorGreen : _uniforms.colorRed;
|
||||
return _out;
|
||||
}
|
||||
|
@ -10,6 +10,8 @@ OpMemberName %_UniformBuffer 0 "colorGreen"
|
||||
OpMemberName %_UniformBuffer 1 "colorRed"
|
||||
OpName %_entrypoint "_entrypoint"
|
||||
OpName %main "main"
|
||||
OpName %a "a"
|
||||
OpName %b "b"
|
||||
OpName %c "c"
|
||||
OpDecorate %sk_FragColor RelaxedPrecision
|
||||
OpDecorate %sk_FragColor Location 0
|
||||
@ -23,8 +25,8 @@ OpMemberDecorate %_UniformBuffer 1 RelaxedPrecision
|
||||
OpDecorate %_UniformBuffer Block
|
||||
OpDecorate %10 Binding 0
|
||||
OpDecorate %10 DescriptorSet 0
|
||||
OpDecorate %36 RelaxedPrecision
|
||||
OpDecorate %39 RelaxedPrecision
|
||||
OpDecorate %42 RelaxedPrecision
|
||||
OpDecorate %45 RelaxedPrecision
|
||||
%float = OpTypeFloat 32
|
||||
%v4float = OpTypeVector %float 4
|
||||
%_ptr_Output_v4float = OpTypePointer Output %v4float
|
||||
@ -39,8 +41,10 @@ OpDecorate %39 RelaxedPrecision
|
||||
%15 = OpTypeFunction %void
|
||||
%18 = OpTypeFunction %v4float
|
||||
%_ptr_Function_v4float = OpTypePointer Function %v4float
|
||||
%float_0 = OpConstant %float 0
|
||||
%23 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
|
||||
%float_1 = OpConstant %float 1
|
||||
%24 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
|
||||
%26 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
|
||||
%v4bool = OpTypeVector %bool 4
|
||||
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
|
||||
%int = OpTypeInt 32 1
|
||||
@ -54,22 +58,28 @@ OpReturn
|
||||
OpFunctionEnd
|
||||
%main = OpFunction %v4float None %18
|
||||
%19 = OpLabel
|
||||
%a = OpVariable %_ptr_Function_v4float Function
|
||||
%b = OpVariable %_ptr_Function_v4float Function
|
||||
%c = OpVariable %_ptr_Function_v4float Function
|
||||
%22 = OpExtInst %v4float %1 FAbs %24
|
||||
OpStore %c %22
|
||||
%25 = OpLoad %v4float %c
|
||||
%26 = OpFOrdNotEqual %v4bool %24 %25
|
||||
%28 = OpAny %bool %26
|
||||
OpSelectionMerge %31 None
|
||||
OpBranchConditional %28 %29 %30
|
||||
%29 = OpLabel
|
||||
%32 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
|
||||
%36 = OpLoad %v4float %32
|
||||
OpReturnValue %36
|
||||
%30 = OpLabel
|
||||
%37 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%39 = OpLoad %v4float %37
|
||||
OpReturnValue %39
|
||||
%31 = OpLabel
|
||||
OpStore %a %23
|
||||
OpStore %b %26
|
||||
%29 = OpLoad %v4float %b
|
||||
%28 = OpExtInst %v4float %1 FAbs %29
|
||||
OpStore %c %28
|
||||
%30 = OpLoad %v4float %b
|
||||
%31 = OpLoad %v4float %c
|
||||
%32 = OpFOrdNotEqual %v4bool %30 %31
|
||||
%34 = OpAny %bool %32
|
||||
OpSelectionMerge %37 None
|
||||
OpBranchConditional %34 %35 %36
|
||||
%35 = OpLabel
|
||||
%38 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
|
||||
%42 = OpLoad %v4float %38
|
||||
OpReturnValue %42
|
||||
%36 = OpLabel
|
||||
%43 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%45 = OpLoad %v4float %43
|
||||
OpReturnValue %45
|
||||
%37 = OpLabel
|
||||
OpUnreachable
|
||||
OpFunctionEnd
|
||||
|
@ -3,8 +3,10 @@ out vec4 sk_FragColor;
|
||||
uniform vec4 colorGreen;
|
||||
uniform vec4 colorRed;
|
||||
vec4 main() {
|
||||
vec4 c = abs(vec4(1.0));
|
||||
if (vec4(1.0) != c) {
|
||||
const vec4 a = vec4(0.0);
|
||||
const vec4 b = vec4(1.0);
|
||||
vec4 c = abs(b);
|
||||
if (b != c) {
|
||||
return colorRed;
|
||||
} else {
|
||||
return colorGreen;
|
||||
|
@ -15,8 +15,10 @@ struct Outputs {
|
||||
fragment Outputs fragmentMain(Inputs _in [[stage_in]], constant Uniforms& _uniforms [[buffer(0)]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
|
||||
Outputs _out;
|
||||
(void)_out;
|
||||
float4 c = abs(float4(1.0));
|
||||
if (any(float4(1.0) != c)) {
|
||||
const float4 a = float4(0.0);
|
||||
const float4 b = float4(1.0);
|
||||
float4 c = abs(b);
|
||||
if (any(b != c)) {
|
||||
_out.sk_FragColor = _uniforms.colorRed;
|
||||
return _out;
|
||||
} else {
|
||||
|
@ -10,6 +10,10 @@ OpMemberName %_UniformBuffer 0 "colorGreen"
|
||||
OpMemberName %_UniformBuffer 1 "colorRed"
|
||||
OpName %_entrypoint "_entrypoint"
|
||||
OpName %main "main"
|
||||
OpName %a "a"
|
||||
OpName %b "b"
|
||||
OpName %c "c"
|
||||
OpName %d "d"
|
||||
OpDecorate %sk_FragColor RelaxedPrecision
|
||||
OpDecorate %sk_FragColor Location 0
|
||||
OpDecorate %sk_FragColor Index 0
|
||||
@ -22,7 +26,9 @@ OpMemberDecorate %_UniformBuffer 1 RelaxedPrecision
|
||||
OpDecorate %_UniformBuffer Block
|
||||
OpDecorate %10 Binding 0
|
||||
OpDecorate %10 DescriptorSet 0
|
||||
OpDecorate %24 RelaxedPrecision
|
||||
OpDecorate %55 RelaxedPrecision
|
||||
OpDecorate %57 RelaxedPrecision
|
||||
OpDecorate %58 RelaxedPrecision
|
||||
%float = OpTypeFloat 32
|
||||
%v4float = OpTypeVector %float 4
|
||||
%_ptr_Output_v4float = OpTypePointer Output %v4float
|
||||
@ -36,9 +42,15 @@ OpDecorate %24 RelaxedPrecision
|
||||
%void = OpTypeVoid
|
||||
%15 = OpTypeFunction %void
|
||||
%18 = OpTypeFunction %v4float
|
||||
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
|
||||
%int = OpTypeInt 32 1
|
||||
%_ptr_Function_int = OpTypePointer Function %int
|
||||
%int_0 = OpConstant %int 0
|
||||
%int_1 = OpConstant %int 1
|
||||
%int_2 = OpConstant %int 2
|
||||
%int_5 = OpConstant %int 5
|
||||
%false = OpConstantFalse %bool
|
||||
%_ptr_Function_v4float = OpTypePointer Function %v4float
|
||||
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
|
||||
%_entrypoint = OpFunction %void None %15
|
||||
%16 = OpLabel
|
||||
%17 = OpFunctionCall %v4float %main
|
||||
@ -47,7 +59,57 @@ OpReturn
|
||||
OpFunctionEnd
|
||||
%main = OpFunction %v4float None %18
|
||||
%19 = OpLabel
|
||||
%20 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%24 = OpLoad %v4float %20
|
||||
OpReturnValue %24
|
||||
%a = OpVariable %_ptr_Function_int Function
|
||||
%b = OpVariable %_ptr_Function_int Function
|
||||
%c = OpVariable %_ptr_Function_int Function
|
||||
%d = OpVariable %_ptr_Function_int Function
|
||||
%48 = OpVariable %_ptr_Function_v4float Function
|
||||
OpStore %a %int_0
|
||||
OpStore %b %int_0
|
||||
OpStore %c %int_0
|
||||
OpStore %d %int_0
|
||||
OpStore %a %int_1
|
||||
OpStore %b %int_2
|
||||
OpStore %c %int_5
|
||||
%31 = OpLoad %int %a
|
||||
%32 = OpIEqual %bool %31 %int_1
|
||||
OpSelectionMerge %34 None
|
||||
OpBranchConditional %32 %33 %34
|
||||
%33 = OpLabel
|
||||
%35 = OpLoad %int %b
|
||||
%36 = OpIEqual %bool %35 %int_2
|
||||
OpBranch %34
|
||||
%34 = OpLabel
|
||||
%37 = OpPhi %bool %false %19 %36 %33
|
||||
OpSelectionMerge %39 None
|
||||
OpBranchConditional %37 %38 %39
|
||||
%38 = OpLabel
|
||||
%40 = OpLoad %int %c
|
||||
%41 = OpIEqual %bool %40 %int_5
|
||||
OpBranch %39
|
||||
%39 = OpLabel
|
||||
%42 = OpPhi %bool %false %34 %41 %38
|
||||
OpSelectionMerge %44 None
|
||||
OpBranchConditional %42 %43 %44
|
||||
%43 = OpLabel
|
||||
%45 = OpLoad %int %d
|
||||
%46 = OpIEqual %bool %45 %int_0
|
||||
OpBranch %44
|
||||
%44 = OpLabel
|
||||
%47 = OpPhi %bool %false %39 %46 %43
|
||||
OpSelectionMerge %52 None
|
||||
OpBranchConditional %47 %50 %51
|
||||
%50 = OpLabel
|
||||
%53 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%55 = OpLoad %v4float %53
|
||||
OpStore %48 %55
|
||||
OpBranch %52
|
||||
%51 = OpLabel
|
||||
%56 = OpAccessChain %_ptr_Uniform_v4float %10 %int_1
|
||||
%57 = OpLoad %v4float %56
|
||||
OpStore %48 %57
|
||||
OpBranch %52
|
||||
%52 = OpLabel
|
||||
%58 = OpLoad %v4float %48
|
||||
OpReturnValue %58
|
||||
OpFunctionEnd
|
||||
|
@ -3,5 +3,13 @@ out vec4 sk_FragColor;
|
||||
uniform vec4 colorGreen;
|
||||
uniform vec4 colorRed;
|
||||
vec4 main() {
|
||||
return colorGreen;
|
||||
int a = 0;
|
||||
int b = 0;
|
||||
int c = 0;
|
||||
int d = 0;
|
||||
|
||||
a = 1;
|
||||
b = 2;
|
||||
c = 5;
|
||||
return ((a == 1 && b == 2) && c == 5) && d == 0 ? colorGreen : colorRed;
|
||||
}
|
||||
|
@ -15,6 +15,14 @@ struct Outputs {
|
||||
fragment Outputs fragmentMain(Inputs _in [[stage_in]], constant Uniforms& _uniforms [[buffer(0)]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
|
||||
Outputs _out;
|
||||
(void)_out;
|
||||
_out.sk_FragColor = _uniforms.colorGreen;
|
||||
int a = 0;
|
||||
int b = 0;
|
||||
int c = 0;
|
||||
int d = 0;
|
||||
|
||||
a = 1;
|
||||
b = 2;
|
||||
c = 5;
|
||||
_out.sk_FragColor = ((a == 1 && b == 2) && c == 5) && d == 0 ? _uniforms.colorGreen : _uniforms.colorRed;
|
||||
return _out;
|
||||
}
|
||||
|
@ -10,6 +10,7 @@ OpMemberName %_UniformBuffer 0 "colorGreen"
|
||||
OpMemberName %_UniformBuffer 1 "colorRed"
|
||||
OpName %_entrypoint "_entrypoint"
|
||||
OpName %main "main"
|
||||
OpName %x "x"
|
||||
OpDecorate %sk_FragColor RelaxedPrecision
|
||||
OpDecorate %sk_FragColor Location 0
|
||||
OpDecorate %sk_FragColor Index 0
|
||||
@ -22,7 +23,7 @@ OpMemberDecorate %_UniformBuffer 1 RelaxedPrecision
|
||||
OpDecorate %_UniformBuffer Block
|
||||
OpDecorate %10 Binding 0
|
||||
OpDecorate %10 DescriptorSet 0
|
||||
OpDecorate %24 RelaxedPrecision
|
||||
OpDecorate %27 RelaxedPrecision
|
||||
%float = OpTypeFloat 32
|
||||
%v4float = OpTypeVector %float 4
|
||||
%_ptr_Output_v4float = OpTypePointer Output %v4float
|
||||
@ -36,6 +37,8 @@ OpDecorate %24 RelaxedPrecision
|
||||
%void = OpTypeVoid
|
||||
%15 = OpTypeFunction %void
|
||||
%18 = OpTypeFunction %v4float
|
||||
%_ptr_Function_bool = OpTypePointer Function %bool
|
||||
%true = OpConstantTrue %bool
|
||||
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
|
||||
%int = OpTypeInt 32 1
|
||||
%int_0 = OpConstant %int 0
|
||||
@ -47,7 +50,9 @@ OpReturn
|
||||
OpFunctionEnd
|
||||
%main = OpFunction %v4float None %18
|
||||
%19 = OpLabel
|
||||
%20 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%24 = OpLoad %v4float %20
|
||||
OpReturnValue %24
|
||||
%x = OpVariable %_ptr_Function_bool Function
|
||||
OpStore %x %true
|
||||
%23 = OpAccessChain %_ptr_Uniform_v4float %10 %int_0
|
||||
%27 = OpLoad %v4float %23
|
||||
OpReturnValue %27
|
||||
OpFunctionEnd
|
||||
|
@ -3,5 +3,6 @@ out vec4 sk_FragColor;
|
||||
uniform vec4 colorGreen;
|
||||
uniform vec4 colorRed;
|
||||
vec4 main() {
|
||||
const bool x = true;
|
||||
return colorGreen;
|
||||
}
|
||||
|
@ -15,6 +15,7 @@ struct Outputs {
|
||||
fragment Outputs fragmentMain(Inputs _in [[stage_in]], constant Uniforms& _uniforms [[buffer(0)]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
|
||||
Outputs _out;
|
||||
(void)_out;
|
||||
const bool x = true;
|
||||
_out.sk_FragColor = _uniforms.colorGreen;
|
||||
return _out;
|
||||
}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user