blob: 04f6b9f097c444fceea176803a5bd2eb49323628 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script src="resources/webgl-test.js"></script>
<script src="resources/webgl-test-utils.js"></script>
</head>
<body>
<script>
if (window.SharedArrayBuffer) {
var canvas = document.createElement("canvas");
var gl;
for (var name of ['webgl2', 'webgl']) {
try {
gl = canvas.getContext(name);
} catch(e) {
}
if (gl)
break;
}
var has_webgl2 = name == 'webgl2';
if (gl) {
// Nearly all of the tests below are invalid (e.g. will set the GL error),
// but we don't really care; we just want to ensure that passing a
// SharedArrayBuffer view is allowed and doesn't throw.
var sab = new SharedArrayBuffer(16);
var u8array = new Uint8Array(sab);
var i32array = new Int32Array(sab);
var u32array = new Uint32Array(sab);
var f32array = new Float32Array(sab);
var vs = "attribute float a; uniform float u; void main() {}";
var fs = "precision mediump float; void main() {}";
var program = WebGLTestUtils.loadProgram(gl, vs, fs);
var uniform = gl.getUniformLocation(program, 'u');
var attribute = gl.getAttribLocation(program, 'a');
test(() => {
gl.bufferData(gl.ARRAY_BUFFER, u8array, gl.STATIC_DRAW);
if (has_webgl2) {
gl.bufferData(gl.ARRAY_BUFFER, u8array, gl.STATIC_DRAW, 0, 1);
}
}, "bufferData");
test(() => {
gl.compressedTexImage2D(gl.TEXTURE_2D, 0, 0, 1, 1, 0, u8array);
if (has_webgl2) {
gl.compressedTexImage2D(gl.TEXTURE_2D, 0, 0, 1, 1, 0, u8array, 0);
}
}, "compressedTexImage2D");
test(() => {
gl.compressedTexSubImage2D(gl.TEXTURE_2D, 0, 0, 1, 1, 0, 0, u8array);
if (has_webgl2) {
gl.compressedTexSubImage2D(gl.TEXTURE_2D, 0, 0, 1, 1, 0, 0, u8array, 0);
}
}, "compressedTexSubImage2D");
test(() => {
gl.readPixels(0, 0, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, u8array);
if (has_webgl2) {
gl.readPixels(0, 0, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, u8array, 0);
}
}, "readPixels");
test(() => {
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 1, 1, 0, gl.RGBA,
gl.UNSIGNED_BYTE, u8array);
if (has_webgl2) {
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 1, 1, 0, gl.RGBA,
gl.UNSIGNED_BYTE, u8array, 0);
}
}, "texImage2D");
test(() => {
gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE,
u8array);
if (has_webgl2) {
gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, 1, 1, gl.RGBA,
gl.UNSIGNED_BYTE, u8array, 0);
}
}, "texSubImage2D");
test(() => {
gl.uniformMatrix2fv(uniform, false, f32array);
}, "uniformMatrix2fv");
test(() => {
gl.uniformMatrix3fv(uniform, false, f32array);
}, "uniformMatrix3fv");
test(() => {
gl.uniformMatrix4fv(uniform, false, f32array);
}, "uniformMatrix4fv");
test(() => {
gl.vertexAttrib1fv(attribute, f32array);
}, "vertexAttrib1fv");
test(() => {
gl.vertexAttrib2fv(attribute, f32array);
}, "vertexAttrib2fv");
test(() => {
gl.vertexAttrib3fv(attribute, f32array);
}, "vertexAttrib3fv");
test(() => {
gl.vertexAttrib4fv(attribute, f32array);
}, "vertexAttrib4fv");
if (has_webgl2) {
test(() => {
gl.bufferSubData(gl.ARRAY_BUFFER, 0, u8array, 0, 1);
}, "bufferSubData");
test(() => {
gl.getBufferSubData(gl.ARRAY_BUFFER, 0, u8array);
}, "getBufferSubData");
test(() => {
gl.compressedTexImage3D(gl.TEXTURE_3D, 0, 0, 1, 1, 1, 0, u8array);
}, "compressedTexImage3D");
test(() => {
gl.compressedTexSubImage3D(gl.TEXTURE_3D, 0, 0, 1, 1, 1, 0, 0, 0,
u8array);
}, "compressedTexSubImage3D");
test(() => {
gl.texImage3D(gl.TEXTURE_3D, 0, gl.RGBA, 1, 1, 1, 0, 0,
gl.UNSIGNED_BYTE, u8array);
gl.texImage3D(gl.TEXTURE_3D, 0, gl.RGBA, 1, 1, 1, 0, 0,
gl.UNSIGNED_BYTE, u8array, 0);
}, "texImage3D");
test(() => {
gl.texSubImage3D(gl.TEXTURE_3D, 0, 0, 0, 0, 1, 1, 1, gl.RGBA,
gl.UNSIGNED_BYTE, u8array);
}, "texSubImage3D");
test(() => {
gl.uniformMatrix2x3fv(uniform, false, f32array);
}, "uniformMatrix2x3fv");
test(() => {
gl.uniformMatrix3x2fv(uniform, false, f32array);
}, "uniformMatrix3x2fv");
test(() => {
gl.uniformMatrix2x4fv(uniform, false, f32array);
}, "uniformMatrix2x4fv");
test(() => {
gl.uniformMatrix4x2fv(uniform, false, f32array);
}, "uniformMatrix4x2fv");
test(() => {
gl.uniformMatrix3x4fv(uniform, false, f32array);
}, "uniformMatrix3x4fv");
test(() => {
gl.uniformMatrix4x3fv(uniform, false, f32array);
}, "uniformMatrix4x3fv");
test(() => {
gl.vertexAttribI4iv(attribute, i32array);
}, "vertexAttribI4iv");
test(() => {
gl.vertexAttribI4uiv(attribute, u32array);
}, "vertexAttribI4uiv");
test(() => {
gl.clearBufferiv(gl.COLOR, 0, i32array);
}, "clearBufferiv");
test(() => {
gl.clearBufferuiv(gl.COLOR, 0, u32array);
}, "clearBufferuiv");
test(() => {
gl.clearBufferfv(gl.COLOR, 0, f32array);
}, "clearBufferfv");
}
}
}
done();
</script>
</body>
</html>