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 <meta charset=
"utf-8">
11 <title>WebGL WebGL_debug_shaders Conformance Tests
</title>
12 <link rel=
"stylesheet" href=
"../../resources/js-test-style.css"/>
13 <script src=
"../../js/js-test-pre.js"></script>
14 <script src=
"../../js/webgl-test-utils.js"></script>
17 <div id=
"description"></div>
18 <canvas id=
"canvas" style=
"width: 1px; height: 1px;"> </canvas>
19 <div id=
"console"></div>
20 <!-- Shaders for testing standard derivatives -->
24 description("This test verifies the functionality of the WEBGL_debug_shaders extension, if it is available.");
28 var wtu
= WebGLTestUtils
;
29 var gl
= wtu
.create3DContext("canvas");
35 var newTranslatedSource
;
38 testFailed("WebGL context does not exist");
40 testPassed("WebGL context exists");
42 // Query the extension and store globally so shouldBe can access it
43 ext
= gl
.getExtension("WEBGL_debug_shaders");
45 testPassed("No WEBGL_debug_shaders support -- this is legal");
47 runSupportedTest(false);
49 testPassed("Successfully enabled WEBGL_debug_shaders extension");
51 runSupportedTest(true);
56 function runSupportedTest(extensionEnabled
) {
57 var supported
= gl
.getSupportedExtensions();
58 if (supported
.indexOf("WEBGL_debug_shaders") >= 0) {
59 if (extensionEnabled
) {
60 testPassed("WEBGL_debug_shaders listed as supported and getExtension succeeded");
62 testFailed("WEBGL_debug_shaders listed as supported but getExtension failed");
65 if (extensionEnabled
) {
66 testFailed("WEBGL_debug_shaders not listed as supported but getExtension succeeded");
68 testPassed("WEBGL_debug_shaders not listed as supported and getExtension failed -- this is legal");
73 function runTestEnabled() {
74 debug("Testing function with extension enabled");
78 source
: "void main() { gl_Position = vec4(1.0, 0.0, 0.0, 1.0); }",
79 type
: gl
.VERTEX_SHADER
82 source
: "void main() { gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0); }",
83 type
: gl
.FRAGMENT_SHADER
87 // Do this twice to test for caching issues.
88 for (var jj
= 0; jj
< 2; ++jj
) {
89 debug("pass:" + (jj
+ 1));
90 program
= gl
.createProgram();
91 for (var ii
= 0; ii
< shaderInfos
.length
; ++ii
) {
92 info
= shaderInfos
[ii
];
94 shader
= gl
.createShader(info
.type
);
96 // if no source has been defined or compileShader() has not been called,
97 // getTranslatedShaderSource() should return an empty string.
98 shouldBe("ext.getTranslatedShaderSource(shader)", '""');
99 gl
.shaderSource(shader
, info
.source
);
100 shouldBe("ext.getTranslatedShaderSource(shader)", '""');
101 gl
.compileShader(shader
);
102 shouldBeTrue("gl.getShaderParameter(shader, gl.COMPILE_STATUS)");
103 translatedSource
= ext
.getTranslatedShaderSource(shader
);
104 wtu
.glErrorShouldBe(gl
, gl
.NO_ERROR
, "No gl error should occur");
105 if (translatedSource
&& translatedSource
.length
> 0) {
106 testPassed("Successfully called getTranslatedShaderSource()");
108 testFailed("Calling getTranslatedShaderSource() failed");
110 gl
.attachShader(program
, shader
);
112 gl
.linkProgram(program
);
113 shouldBeTrue("gl.getProgramParameter(program, gl.LINK_STATUS)");
116 // Test changing the source. Make sure we get the correct source each time.
117 debug("test changing source");
118 shader
= gl
.createShader(gl
.FRAGMENT_SHADER
);
119 gl
.shaderSource(shader
, "void main() { gl_FragColor = vec4(gl_FragCoord.x, 0.0, 0.0, 1.0); }");
120 gl
.compileShader(shader
);
121 shouldBeTrue("gl.getShaderParameter(shader, gl.COMPILE_STATUS)");
122 shouldThrow("ext.getTranslatedShaderSource(null)");
123 translatedSource
= ext
.getTranslatedShaderSource(shader
);
124 shouldBeTrue('translatedSource && translatedSource.indexOf("gl_FragCoord") >= 0');
125 // change the source but don't compile.
126 gl
.shaderSource(shader
, "void main() { gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0); }");
127 // the source should NOT change. It should be the same as the old source.
128 newTranslatedSource
= ext
.getTranslatedShaderSource(shader
);
129 shouldBe('newTranslatedSource', 'translatedSource');
131 gl
.compileShader(shader
);
132 shouldBeTrue("gl.getShaderParameter(shader, gl.COMPILE_STATUS)");
133 // the source should have change.
134 newTranslatedSource
= ext
.getTranslatedShaderSource(shader
);
135 shouldNotBe('newTranslatedSource', 'translatedSource');
139 var successfullyParsed
= true;
141 <script src=
"../../js/js-test-post.js"></script>