blob: 3a60589fbe6bff6166ce9c97313e228d4b1fe2ca [file] [edit]
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="resources/webgl_test_files/resources/js-test-style.css"/>
<script src="resources/webgl_test_files/js/js-test-pre.js"></script>
<script src="resources/webgl_test_files/js/webgl-test-utils.js"></script>
</head>
<body onload="test()">
<div id="description"></div>
<div id="console"></div>
<script>
"use strict";
description("Test that texSubImage does not crash on with EXT_norm16_texture.");
var wtu = WebGLTestUtils;
var gl = document.createElement('canvas').getContext('webgl2');
var subcases = [];
var formats = [ "RED", "RG", "RGB", "RGBA" ];
var internalFormats = [ "R16_EXT", "RG16_EXT", "RGB16_EXT", "RGBA16_EXT" ];
var signedInternalFormats = [ "R16_SNORM_EXT", "RG16_SNORM_EXT", "RGB16_SNORM_EXT", "RGBA16_SNORM_EXT" ];
for (let f of ["2d", "3d"]) {
for (let c of [0, 1, 2, 3])
{
let dataInt = new Int16Array(Array((c + 1)* 10).fill(1000));
let dataUint = new Uint16Array(Array((c + 1)* 10).fill(1000));
subcases.push({
func: f,
internalFormat: internalFormats[c],
format: formats[c],
type: "UNSIGNED_SHORT",
error: "NO_ERROR",
data: dataUint
});
subcases.push({
func: f,
internalFormat: signedInternalFormats[c],
format: formats[c],
type: "SHORT",
error: "NO_ERROR",
data: dataInt
});
subcases.push({
func: f,
internalFormat: internalFormats[c],
format: formats[c],
type: "SHORT",
error: "INVALID_OPERATION",
data: dataInt
});
subcases.push({
func: f,
internalFormat: signedInternalFormats[c],
format: formats[c],
type: "UNSIGNED_SHORT",
error: "INVALID_OPERATION",
data: dataUint
});
}
}
function runTest(subcase)
{
debug(`Test: ${subcase.func} ${subcase.internalFormat} ${subcase.format} ${subcase.type}`);
if (gl) {
const ext = gl.getExtension("EXT_texture_norm16");
if (ext) {
const tex = gl.createTexture();
if (subcase.func == "3d") {
gl.bindTexture(gl.TEXTURE_3D, tex);
gl.texImage3D(gl.TEXTURE_3D, 0, ext[subcase.internalFormat], 10, 1, 1, 0, gl[subcase.format], gl[subcase.type], subcase.data);
} else if (subcase.func == "2d") {
gl.bindTexture(gl.TEXTURE_2D, tex);
gl.texImage2D(gl.TEXTURE_2D, 0, ext[subcase.internalFormat], 10, 1, 0, gl[subcase.format], gl[subcase.type], subcase.data);
}
wtu.glErrorShouldBe(gl, gl[subcase.error]);
if (subcase.func == "3d")
gl.texSubImage3D(gl.TEXTURE_3D, 0, 0, 0, 0, 10, 1, 1, gl[subcase.format], gl[subcase.type], subcase.data);
else if (subcase.func == "2d")
gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, 10, 1, gl[subcase.format], gl[subcase.type], subcase.data);
wtu.glErrorShouldBe(gl, gl[subcase.error]);
}
}
testPassed(`Test: ${subcase.internalFormat} ${subcase.format} ${subcase.type} did not crash.`);
}
function test()
{
for (let subcase of subcases)
runTest(subcase);
finishTest();
}
</script>
</body>
</html>