summaryrefslogtreecommitdiffstats
path: root/dom/canvas/test/webgl-conf/checkout/conformance/uniforms/gl-uniformmatrix4fv.html
diff options
context:
space:
mode:
Diffstat (limited to 'dom/canvas/test/webgl-conf/checkout/conformance/uniforms/gl-uniformmatrix4fv.html')
-rw-r--r--dom/canvas/test/webgl-conf/checkout/conformance/uniforms/gl-uniformmatrix4fv.html149
1 files changed, 149 insertions, 0 deletions
diff --git a/dom/canvas/test/webgl-conf/checkout/conformance/uniforms/gl-uniformmatrix4fv.html b/dom/canvas/test/webgl-conf/checkout/conformance/uniforms/gl-uniformmatrix4fv.html
new file mode 100644
index 0000000000..eb4977a6fd
--- /dev/null
+++ b/dom/canvas/test/webgl-conf/checkout/conformance/uniforms/gl-uniformmatrix4fv.html
@@ -0,0 +1,149 @@
+<!--
+Copyright (c) 2019 The Khronos Group Inc.
+Use of this source code is governed by an MIT-style license that can be
+found in the LICENSE.txt file.
+-->
+
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>WebGL uniformMatrix Conformance Tests</title>
+<link rel="stylesheet" href="../../resources/js-test-style.css"/>
+<script src="../../js/js-test-pre.js"></script>
+<script src="../../js/webgl-test-utils.js"></script>
+</head>
+<body>
+<div id="description"></div>
+<div id="console"></div>
+<canvas id="example" width="2" height="2"> </canvas>
+
+<script id="vshader" type="x-shader/x-vertex">
+uniform mat2 world2x2;
+uniform mat3 world3x3;
+uniform mat4 world4x4;
+void main() {
+ gl_Position.x += world2x2[0][0];
+ gl_Position.x += world3x3[0][0];
+ gl_Position.x += world4x4[0][0];
+}
+</script>
+
+<script id="fshader" type="x-shader/x-fragment">
+void main() {}
+</script>
+
+<script id="vshader300" type="x-shader/x-vertex">
+#version 300 es
+uniform mat2 world2x2;
+uniform mat2x3 world2x3;
+uniform mat2x4 world2x4;
+uniform mat3x2 world3x2;
+uniform mat3 world3x3;
+uniform mat3x4 world3x4;
+uniform mat4x2 world4x2;
+uniform mat4x3 world4x3;
+uniform mat4 world4x4;
+void main() {
+ gl_Position.x += world2x2[0][0];
+ gl_Position.x += world2x3[0][0];
+ gl_Position.x += world2x4[0][0];
+ gl_Position.x += world3x2[0][0];
+ gl_Position.x += world3x3[0][0];
+ gl_Position.x += world3x4[0][0];
+ gl_Position.x += world4x2[0][0];
+ gl_Position.x += world4x3[0][0];
+ gl_Position.x += world4x4[0][0];
+}
+</script>
+
+<script id="fshader300" type="x-shader/x-fragment">
+#version 300 es
+void main() {}
+</script>
+
+<script>
+"use strict";
+description("This test ensures WebGL implementations handle uniformMatrix in a OpenGL ES 2.0 spec compliant way");
+
+debug("");
+debug("Checking gl.uniformMatrix.");
+
+var wtu = WebGLTestUtils;
+var gl = wtu.create3DContext("example");
+var contextVersion = wtu.getDefault3DContextVersion();
+
+let shaders = ["vshader", "fshader"];
+const dims = [
+ [2, 2, 'uniformMatrix2fv'],
+ [3, 3, 'uniformMatrix3fv'],
+ [4, 4, 'uniformMatrix4fv'],
+];
+
+if (contextVersion >= 2) {
+ shaders = ["vshader300", "fshader300"];
+ dims.push(
+ [2, 3, 'uniformMatrix2x3fv'],
+ [2, 4, 'uniformMatrix2x4fv'],
+ [3, 2, 'uniformMatrix3x2fv'],
+ [3, 4, 'uniformMatrix3x4fv'],
+ [4, 2, 'uniformMatrix4x2fv'],
+ [4, 3, 'uniformMatrix4x3fv']
+ );
+}
+
+const program = wtu.setupProgram(gl, shaders);
+let loc;
+
+for (const [A, B, name] of dims) {
+ loc = gl.getUniformLocation(program, `world${A}x${B}`);
+ if (!loc) throw 'missing loc';
+
+ const mat = [];
+ for (let a = 0; a < A; ++a) {
+ for (let b = 0; b < B; ++b) {
+ mat.push((a == b) ? 1 : 0);
+ }
+ }
+ const matLess = mat.slice(0, mat.length-2);
+ const matMore = mat.concat([1]);
+
+ gl[name](loc, false, matLess);
+ wtu.glErrorShouldBe(gl, gl.INVALID_VALUE, "should fail with insufficient array size for " + name);
+ gl[name](loc, false, mat);
+ wtu.glErrorShouldBe(gl, gl.NO_ERROR, "should succeed with correct array size for " + name);
+ gl[name](loc, false, matMore);
+ wtu.glErrorShouldBe(gl, gl.INVALID_VALUE, "should fail with more than 1 array size for " + name);
+
+ const validDatas = [
+ `new Float32Array(${mat.length})`,
+ `new Float32Array(new ArrayBuffer(4*${mat.length}))`,
+ ];
+ if (window.SharedArrayBuffer) {
+ validDatas.push(
+ `new Float32Array(new SharedArrayBuffer(4*${mat.length}))`
+ );
+ }
+ for (const x of validDatas) {
+ shouldNotThrow(`gl.${name}(loc, false, ${x});`);
+ }
+
+ gl[name](loc, false, mat);
+ wtu.glErrorShouldBe(gl, gl.NO_ERROR, "can call " + name + "with transpose = false");
+ if (contextVersion <= 1) {
+ gl[name](loc, true, mat);
+ wtu.glErrorShouldBe(gl, gl.INVALID_VALUE, name + " should return INVALID_VALUE with transpose = true");
+ } else {
+ gl[name](loc, true, mat);
+ wtu.glErrorShouldBe(gl, gl.NO_ERROR, "can call " + name + "with transpose = true");
+ }
+}
+
+debug("");
+var successfullyParsed = true;
+
+</script>
+<script src="../../js/js-test-post.js"></script>
+
+</body>
+</html>