2 Copyright (c) 2019 The Khronos Group Inc.
3 Use of this source code is governed by an MIT-style license that can be
4 found in the LICENSE.txt file.
10 <link rel=
"stylesheet" href=
"../../../resources/js-test-style.css" />
11 <link rel=
"stylesheet" href=
"../../../resources/glsl-feature-tests.css" />
12 <script src=
"../../../js/js-test-pre.js"></script>
13 <script src=
"../../../js/webgl-test-utils.js"></script>
14 <script src=
"../../../js/glsl-conformance-test.js"></script>
18 <div id=
"description"></div>
19 <div id=
"console"></div>
20 <script id=
"intFragShader" type=
"text/something-not-javascript">
22 int i =
2, j = (i
> 1) ?
1 :
0;
23 gl_FragColor = vec4(
0.0, j,
0.0,
1.0);
26 <script id=
"ivec2FragShader" type=
"text/something-not-javascript">
28 ivec2 i = ivec2(
2,
0), j = (i.x
> 1) ? ivec2(
0,
1) : ivec2(
0,
0);
29 gl_FragColor = vec4(j,
0.0,
1.0);
32 <script id=
"ivec3FragShader" type=
"text/something-not-javascript">
34 ivec3 i = ivec3(
0,
2,
0), j = (i.y
> 1) ? ivec3(
0,
1,
0) : ivec3(
0,
0,
0);
35 gl_FragColor = vec4(j,
1.0);
38 <script id=
"ivec4FragShader" type=
"text/something-not-javascript">
40 ivec4 i = ivec4(
0.0,
0.0,
2.0,
0.0), j = (i.z
> 1) ? ivec4(
0,
1,
0,
1) : ivec4(
0,
0,
0,
1);
41 gl_FragColor = vec4(j);
44 <script id=
"floatFragShader" type=
"text/something-not-javascript">
46 precision mediump float;
47 float i =
2.0, j = (i
> 1.0) ?
1.0 :
0.0;
48 gl_FragColor = vec4(
0.0, j,
0.0,
1.0);
51 <script id=
"vec2FragShader" type=
"text/something-not-javascript">
53 precision mediump float;
54 vec2 i = vec2(
2.0,
0.0), j = (i.x
> 1.0) ? vec2(
0.0,
1.0) : vec2(
0.0,
0.0);
55 gl_FragColor = vec4(j,
0.0,
1.0);
58 <script id=
"vec3FragShader" type=
"text/something-not-javascript">
60 precision mediump float;
61 vec3 i = vec3(
0.0,
2.0,
0.0), j = (i.y
> 1.0) ? vec3(
0.0,
1.0,
0.0) : vec3(
0.0,
0.0,
0.0);
62 gl_FragColor = vec4(j,
1.0);
65 <script id=
"vec4FragShader" type=
"text/something-not-javascript">
67 precision mediump float;
68 vec4 i = vec4(
0.0,
0.0,
2.0,
0.0), j = (i.z
> 1.0) ? vec4(
0.0,
1.0,
0.0,
1.0) : vec4(
0.0,
0.0,
0.0,
1.0);
72 <script id=
"boolFragShader" type=
"text/something-not-javascript">
74 bool i = true, j = i ? true : false;
75 gl_FragColor = vec4(
0.0, j,
0.0,
1.0);
78 <script id=
"bvec2FragShader" type=
"text/something-not-javascript">
80 bvec2 i = bvec2(true, false), j = i.x ? bvec2(false, true) : bvec2(false, false);
81 gl_FragColor = vec4(j,
0.0,
1.0);
84 <script id=
"bvec3FragShader" type=
"text/something-not-javascript">
86 bvec3 i = bvec3(false, true, false), j = i.y ? bvec3(false, true, false) : bvec3(false, false, false);
87 gl_FragColor = vec4(j,
1.0);
90 <script id=
"bvec4FragShader" type=
"text/something-not-javascript">
92 bvec4 i = bvec4(false, false, true, true), j = i.z ? bvec4(false, true, false, true) : bvec4(false, false, false, true);
93 gl_FragColor = vec4(j);
98 description("This test verifies initializers with ternary operators correctly initialize all variables.");
99 // Test fragment shaders are of the form
101 // {type} i = {initializer}, j = {ternary test using i that succeeds} ? : {green} : {black};
102 // gl_FragColor = vec4(...); // Emit green so that test will pass
104 // The fragment shader must compile and link with the default vertex shader. J must be able to use the values of I as well as have its own
105 // values properly initialized.
107 { fShaderId
: 'intFragShader', passMsg
: 'Ternary operator in integer initalization', fShaderSuccess
: true, linkSuccess
: true, render
: true },
108 { fShaderId
: 'ivec2FragShader', passMsg
: 'Ternary operator in ivec2 initalization', fShaderSuccess
: true, linkSuccess
: true, render
: true },
109 { fShaderId
: 'ivec3FragShader', passMsg
: 'Ternary operator in ivec3 initalization', fShaderSuccess
: true, linkSuccess
: true, render
: true },
110 { fShaderId
: 'ivec4FragShader', passMsg
: 'Ternary operator in ivec4 initalization', fShaderSuccess
: true, linkSuccess
: true, render
: true },
111 { fShaderId
: 'floatFragShader', passMsg
: 'Ternary operator in float initalization', fShaderSuccess
: true, linkSuccess
: true, render
: true },
112 { fShaderId
: 'vec2FragShader', passMsg
: 'Ternary operator in vec2 initalization', fShaderSuccess
: true, linkSuccess
: true, render
: true },
113 { fShaderId
: 'vec3FragShader', passMsg
: 'Ternary operator in vec3 initalization', fShaderSuccess
: true, linkSuccess
: true, render
: true },
114 { fShaderId
: 'vec4FragShader', passMsg
: 'Ternary operator in vec4 initalization', fShaderSuccess
: true, linkSuccess
: true, render
: true },
115 { fShaderId
: 'boolFragShader', passMsg
: 'Ternary operator in bool initalization', fShaderSuccess
: true, linkSuccess
: true, render
: true },
116 { fShaderId
: 'bvec2FragShader', passMsg
: 'Ternary operator in bvec2 initalization', fShaderSuccess
: true, linkSuccess
: true, render
: true },
117 { fShaderId
: 'bvec3FragShader', passMsg
: 'Ternary operator in bvec3 initalization', fShaderSuccess
: true, linkSuccess
: true, render
: true },
118 { fShaderId
: 'bvec4FragShader', passMsg
: 'Ternary operator in bvec4 initalization', fShaderSuccess
: true, linkSuccess
: true, render
: true },
120 GLSLConformanceTester
.runTests(tests
);
121 var successfullyParsed
= true;