diff options
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.html | 149 |
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> |