Auto merge of #21143 - servo:webgl, r=jdm

Make some WebGL tests have a long timeout (fixes #20883)

<!-- Reviewable:start -->
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/21143)
<!-- Reviewable:end -->
This commit is contained in:
bors-servo 2018-07-09 10:46:49 -04:00 committed by GitHub
commit 52ccdba05f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
42 changed files with 260 additions and 168 deletions

View file

@ -30429,6 +30429,11 @@
{}
]
],
"webgl/tools/timeout.patch": [
[
{}
]
],
"webgl/tools/unit.patch": [
[
{}
@ -39429,7 +39434,9 @@
"webgl/conformance-1.0.3/conformance/attribs/gl-vertex-attrib-zero-issues.html": [
[
"/_mozilla/webgl/conformance-1.0.3/conformance/attribs/gl-vertex-attrib-zero-issues.html",
{}
{
"timeout": "long"
}
]
],
"webgl/conformance-1.0.3/conformance/attribs/gl-vertex-attrib.html": [
@ -39573,7 +39580,9 @@
"webgl/conformance-1.0.3/conformance/canvas/rapid-resizing.html": [
[
"/_mozilla/webgl/conformance-1.0.3/conformance/canvas/rapid-resizing.html",
{}
{
"timeout": "long"
}
]
],
"webgl/conformance-1.0.3/conformance/canvas/texture-bindings-unaffected-on-resize.html": [
@ -43425,7 +43434,9 @@
"webgl/conformance-1.0.3/conformance/uniforms/out-of-bounds-uniform-array-access.html": [
[
"/_mozilla/webgl/conformance-1.0.3/conformance/uniforms/out-of-bounds-uniform-array-access.html",
{}
{
"timeout": "long"
}
]
],
"webgl/conformance-1.0.3/conformance/uniforms/uniform-default-values.html": [
@ -71210,7 +71221,7 @@
"testharness"
],
"webgl/conformance-1.0.3/conformance/attribs/gl-vertex-attrib-zero-issues.html": [
"2db1eb69271fd2cdf1f23ed1aefe7ee04a409614",
"bb00d5648733c8b523093bba59a58eeda15c2dc9",
"testharness"
],
"webgl/conformance-1.0.3/conformance/attribs/gl-vertex-attrib.html": [
@ -71314,7 +71325,7 @@
"testharness"
],
"webgl/conformance-1.0.3/conformance/canvas/rapid-resizing.html": [
"14e68235cfa7ed8d396e33bfea2b337308f300c0",
"14ade92783494631f0aa38c7b65ef27afa5d4a5a",
"testharness"
],
"webgl/conformance-1.0.3/conformance/canvas/texture-bindings-unaffected-on-resize.html": [
@ -71346,15 +71357,15 @@
"testharness"
],
"webgl/conformance-1.0.3/conformance/context/context-creation-and-destruction.html": [
"5353020ebad3058be7c46d31205eb98afa4f40e4",
"6e329116409fae60838c3d4e63f84999b06cf1b5",
"testharness"
],
"webgl/conformance-1.0.3/conformance/context/context-creation.html": [
"08a7054a6bee4901dcb6636cf376c452e9004184",
"2a6ebdcb04a602ae7b73a7a0385533f72c89c212",
"testharness"
],
"webgl/conformance-1.0.3/conformance/context/context-eviction-with-garbage-collection.html": [
"63c2768e01d84a6344d08efa79bac5fdf9d545a7",
"9eac94ca3bc359985efc1ac0e7e7c37ec2599278",
"testharness"
],
"webgl/conformance-1.0.3/conformance/context/context-hidden-alpha.html": [
@ -72910,7 +72921,7 @@
"testharness"
],
"webgl/conformance-1.0.3/conformance/more/functions/texSubImage2DBadArgs.html": [
"925cff1fe7e1a27f9a1d809a06cb0b3b0fd2e409",
"d8f835e310803c6f2c83a010cf325973a870877e",
"testharness"
],
"webgl/conformance-1.0.3/conformance/more/functions/texSubImage2DHTML.html": [
@ -73046,7 +73057,7 @@
"support"
],
"webgl/conformance-1.0.3/conformance/ogles/GL/acos/acos_001_to_006.html": [
"b4a53ad041367ac7a16a050098532b01fcd135dc",
"85555ba68d88a743a41b691e864f5e2305c03bc3",
"testharness"
],
"webgl/conformance-1.0.3/conformance/ogles/GL/acos/acos_float_frag_xvary.frag": [
@ -73214,7 +73225,7 @@
"support"
],
"webgl/conformance-1.0.3/conformance/ogles/GL/asin/asin_001_to_006.html": [
"402a2259934781e8866ec3555282e2257a9963cb",
"5ddd8eac037ae86a0f82aaebcd05f1702b4598ce",
"testharness"
],
"webgl/conformance-1.0.3/conformance/ogles/GL/asin/asin_float_frag_xvary.frag": [
@ -76378,7 +76389,7 @@
"support"
],
"webgl/conformance-1.0.3/conformance/ogles/GL/log2/log2_001_to_008.html": [
"4e72ddeef5f237b63fcdd8c49ee3c61dc16ae529",
"cadfc9c0ab49a1de7ee8ef91c49c20da40b405b4",
"testharness"
],
"webgl/conformance-1.0.3/conformance/ogles/GL/log2/log2_009_to_012.html": [
@ -80266,7 +80277,7 @@
"testharness"
],
"webgl/conformance-1.0.3/conformance/textures/tex-input-validation.html": [
"1b579c2798c69585cf8959c09fdc5845aa92526e",
"5c6cf39bcf8c2a5e71e894c7453de7359095b2b1",
"testharness"
],
"webgl/conformance-1.0.3/conformance/textures/tex-sub-image-2d-bad-args.html": [
@ -80338,7 +80349,7 @@
"testharness"
],
"webgl/conformance-1.0.3/conformance/textures/texture-size-limit.html": [
"df9d9db523e8fc9e672b9478d4ed7539b0afb8bb",
"e58263e358ab36319fb894e0a5cdfaf635a800d0",
"testharness"
],
"webgl/conformance-1.0.3/conformance/textures/texture-size.html": [
@ -80426,7 +80437,7 @@
"testharness"
],
"webgl/conformance-1.0.3/conformance/uniforms/out-of-bounds-uniform-array-access.html": [
"5471a14283e0a23cfab7f504529aec8bee5ee4c3",
"e6687ab849c63a7db2b855d5f0b4c4583132613f",
"testharness"
],
"webgl/conformance-1.0.3/conformance/uniforms/uniform-default-values.html": [
@ -80470,7 +80481,7 @@
"support"
],
"webgl/conformance-1.0.3/resources/js-test-pre.js": [
"c908f204f89f448526ad40357f7169cf5803e67d",
"e477a3121fd6086aa97343e395e8d8622c01d844",
"support"
],
"webgl/conformance-1.0.3/resources/js-test-style.css": [
@ -80486,7 +80497,7 @@
"support"
],
"webgl/conformance-1.0.3/resources/webgl-test-harness.js": [
"1cb2adb8fb53fa658bbb73ef61c08bcb587b2c0a",
"98e8e7e62030796bf34285f5bcbac3bd8b77ddb3",
"support"
],
"webgl/conformance-1.0.3/test-guidelines.md": [
@ -82470,7 +82481,7 @@
"testharness"
],
"webgl/conformance-2.0.0/conformance/more/functions/texSubImage2DBadArgs.html": [
"e0b233b82376bae960bc435ea2f390a3c892fb78",
"880919800fd7b68bfe97bcd8148fde5e41c1af5f",
"testharness"
],
"webgl/conformance-2.0.0/conformance/more/functions/texSubImage2DHTML.html": [
@ -89858,7 +89869,7 @@
"testharness"
],
"webgl/conformance-2.0.0/conformance/textures/misc/texture-size-limit.html": [
"e2ddd9863e70ef2c74ba38007235d6f5332c3690",
"188327cf75f77ba75096e17a32e6182bd8d7966c",
"testharness"
],
"webgl/conformance-2.0.0/conformance/textures/misc/texture-size.html": [
@ -90078,7 +90089,7 @@
"testharness"
],
"webgl/conformance-2.0.0/conformance2/buffers/buffer-type-restrictions.html": [
"0220d823c0e8190475b7f704e9f81b0f02c5fd01",
"5fc1eeb29286971424220ecd122e9b2b605ff06d",
"testharness"
],
"webgl/conformance-2.0.0/conformance2/buffers/get-buffer-sub-data.html": [
@ -93218,7 +93229,7 @@
"testharness"
],
"webgl/conformance-2.0.0/conformance2/textures/misc/copy-texture-image-luma-format.html": [
"e95ff06a4d3f1a77011a7c306dd4e0afd38a1552",
"b6f306193a82e55a53dc436949d76776632960b9",
"testharness"
],
"webgl/conformance-2.0.0/conformance2/textures/misc/copy-texture-image-webgl-specific.html": [
@ -98622,7 +98633,7 @@
"support"
],
"webgl/conformance-2.0.0/js/js-test-pre.js": [
"440f5f81367b9a376423601ab45960a5319b1b0b",
"8f199ed7f5cea4fa0750de009149ac48a27d5a10",
"support"
],
"webgl/conformance-2.0.0/js/pnglib.js": [
@ -98682,7 +98693,7 @@
"support"
],
"webgl/conformance-2.0.0/js/tests/tex-image-and-sub-image-2d-with-image-bitmap-from-blob.js": [
"8505a329d65a627cfab08dcef9e384f499bd2fd7",
"699897b0a2ceea03ec7bc113fd9350e26805dd70",
"support"
],
"webgl/conformance-2.0.0/js/tests/tex-image-and-sub-image-2d-with-image-bitmap-from-canvas.js": [
@ -98734,7 +98745,7 @@
"support"
],
"webgl/conformance-2.0.0/js/tests/tex-image-and-sub-image-3d-with-image-bitmap-from-blob.js": [
"34685e9545ac0f9fbb9665b9788b52a6ea656544",
"3691acb33bda464b05c21e6c0aea18d83a32ee7e",
"support"
],
"webgl/conformance-2.0.0/js/tests/tex-image-and-sub-image-3d-with-image-bitmap-from-canvas.js": [
@ -98786,7 +98797,7 @@
"support"
],
"webgl/conformance-2.0.0/js/tests/tex-input-validation.js": [
"89befe095ced5482aa9788e1a4362cbc2771c462",
"d8b584d6ccc1d76239f412eca8360007c4a016c7",
"support"
],
"webgl/conformance-2.0.0/js/tests/typed-array-test-cases.js": [
@ -98798,7 +98809,7 @@
"support"
],
"webgl/conformance-2.0.0/js/webgl-test-harness.js": [
"fd8879f1c8300d3ab3a3d9c15e49aa2b5fe25aca",
"c2c0b7c5660f9309682091150ef7e64e171a823d",
"support"
],
"webgl/conformance-2.0.0/js/webgl-test-utils.js": [
@ -99086,7 +99097,7 @@
"testharness"
],
"webgl/tools/import-conformance-tests.py": [
"d3823f6646375ab6c48b77de8fb1c798d4132e3d",
"73e9fad27290f3f10246390fca47bfeb64bc86ec",
"support"
],
"webgl/tools/js-test-pre.patch": [
@ -99097,6 +99108,10 @@
"d1fc86aa99334ca252f0e9fdd48f5d85255f24a3",
"support"
],
"webgl/tools/timeout.patch": [
"88da623430c6ab2c3738433604a5077a24a7a7a0",
"support"
],
"webgl/tools/unit.patch": [
"1d3713862875b47ae9c07462e6962eb21e40e404",
"support"

View file

@ -1,3 +0,0 @@
[gl-vertex-attrib-zero-issues.html]
type: testharness
expected: TIMEOUT

View file

@ -1,4 +1,3 @@
[drawingbuffer-static-canvas-test.html]
type: testharness
expected: CRASH

View file

@ -1,4 +1,3 @@
[drawingbuffer-test.html]
type: testharness
expected: CRASH

View file

@ -1,5 +0,0 @@
[rapid-resizing.html]
expected: TIMEOUT
[Overall test]
expected: NOTRUN

View file

@ -1,5 +0,0 @@
[context-creation-and-destruction.html]
expected: TIMEOUT
[Overall test]
expected: NOTRUN

View file

@ -1,5 +0,0 @@
[context-creation.html]
expected: TIMEOUT
[Overall test]
expected: NOTRUN

View file

@ -1,2 +0,0 @@
[context-eviction-with-garbage-collection.html]
expected: TIMEOUT

View file

@ -1,5 +0,0 @@
[acos_001_to_006.html]
expected: TIMEOUT
[Overall test]
expected: NOTRUN

View file

@ -1,5 +0,0 @@
[asin_001_to_006.html]
expected: TIMEOUT
[Overall test]
expected: NOTRUN

View file

@ -1,5 +0,0 @@
[log_001_to_008.html]
expected: TIMEOUT
[Overall test]
expected: NOTRUN

View file

@ -1,5 +0,0 @@
[log2_001_to_008.html]
expected: TIMEOUT
[Overall test]
expected: NOTRUN

View file

@ -1,9 +1,6 @@
[tex-image-and-sub-image-2d-with-svg-image.html]
type: testharness
expected: TIMEOUT
[WebGL test #0: at (4, 4) expected: 0,255,0 was 0,0,0]
expected: FAIL
[Overall test]
expected: NOTRUN

View file

@ -1,9 +1,6 @@
[tex-image-and-sub-image-2d-with-video-rgba5551.html]
type: testharness
expected: TIMEOUT
[WebGL test #0: Unable to fetch WebGL rendering context for Canvas]
expected: FAIL
[Overall test]
expected: NOTRUN

View file

@ -1,9 +1,6 @@
[tex-image-and-sub-image-2d-with-video.html]
type: testharness
expected: TIMEOUT
[WebGL test #0: Unable to fetch WebGL rendering context for Canvas]
expected: FAIL
[Overall test]
expected: NOTRUN

View file

@ -1,5 +1,4 @@
[tex-input-validation.html]
type: testharness
[WebGL test #34: getError expected: INVALID_OPERATION. Was NO_ERROR : colorBufferFormat: RGB565 internalFormat: RGBA target: TEXTURE_2D border: 0]
expected: FAIL

View file

@ -1,6 +0,0 @@
[out-of-bounds-uniform-array-access.html]
type: testharness
expected: TIMEOUT
[Overall test]
expected: NOTRUN

View file

@ -29,6 +29,7 @@
<html>
<head>
<meta charset="utf-8">
<meta name="timeout" content="long">
<title>WebGL Enable Vertex Attrib Zero Test</title>
<link rel="stylesheet" href="../../resources/js-test-style.css"/>
<script src=/resources/testharness.js></script>

View file

@ -29,6 +29,7 @@
<html>
<head>
<meta charset="utf-8">
<meta name="timeout" content="long">
<title>WebGL Rapid Resizing Test</title>
<link rel="stylesheet" href="../../resources/js-test-style.css"/>
<script src=/resources/testharness.js></script>

View file

@ -29,6 +29,7 @@
<html>
<head>
<meta charset="utf-8">
<meta name="timeout" value="content">
<title>Test that contexts are freed and garbage collected reasonably</title>
<link rel="stylesheet" href="../../resources/js-test-style.css"/>
<script src=/resources/testharness.js></script>

View file

@ -29,6 +29,7 @@
<html>
<head>
<meta charset="utf-8">
<meta name="timeout" value="content">
<title>Test that you can create large numbers of WebGL contexts.</title>
<link rel="stylesheet" href="../../resources/js-test-style.css"/>
<script src=/resources/testharness.js></script>

View file

@ -29,6 +29,7 @@
<html>
<head>
<meta charset="utf-8">
<meta name="timeout" value="content">
<title>Test that context eviction and garbage collection do not interfere with each other</title>
<link rel="stylesheet" href="../../resources/js-test-style.css"/>
<script src=/resources/testharness.js></script>

View file

@ -84,10 +84,10 @@ Tests.testTexImage2D = function(gl) {
assertGLError(gl, gl.INVALID_VALUE, "negative y", function(){
gl.texSubImage2D(gl.TEXTURE_2D, 0,1,-1,1,1,gl.RGBA,gl.UNSIGNED_BYTE, new Uint8Array([0,0,0,0]));
});
assertGLError(gl, gl.INVALID_ENUM, "bad format", function(){
assertGLErrorIn(gl, [gl.INVALID_OPERATION, gl.INVALID_ENUM], "bad format", function(){
gl.texSubImage2D(gl.TEXTURE_2D, 0, 0,0, 1,1,gl.FLOAT,gl.UNSIGNED_BYTE, new Uint8Array([0,0,0,0]));
});
assertGLError(gl, gl.INVALID_ENUM, "bad type", function(){
assertGLErrorIn(gl, [gl.INVALID_OPERATION, gl.INVALID_ENUM], "bad type", function(){
gl.texSubImage2D(gl.TEXTURE_2D, 0, 0,0, 1,1,gl.RGBA,gl.TEXTURE_2D, new Uint8Array([0,0,0,0]));
});
assertGLError(gl, gl.INVALID_OPERATION, "not enough data", function(){

View file

@ -28,6 +28,7 @@
<html>
<head>
<meta charset="utf-8">
<meta name="timeout" value="content">
<title>WebGL GLSL conformance test: acos_001_to_006.html</title>
<link rel="stylesheet" href="../../../../resources/js-test-style.css" />
<link rel="stylesheet" href="../../../resources/ogles-tests.css" />

View file

@ -28,6 +28,7 @@
<html>
<head>
<meta charset="utf-8">
<meta name="timeout" value="content">
<title>WebGL GLSL conformance test: asin_001_to_006.html</title>
<link rel="stylesheet" href="../../../../resources/js-test-style.css" />
<link rel="stylesheet" href="../../../resources/ogles-tests.css" />

View file

@ -28,6 +28,7 @@
<html>
<head>
<meta charset="utf-8">
<meta name="timeout" value="content">
<title>WebGL GLSL conformance test: log2_001_to_008.html</title>
<link rel="stylesheet" href="../../../../resources/js-test-style.css" />
<link rel="stylesheet" href="../../../resources/ogles-tests.css" />

View file

@ -245,11 +245,11 @@ testCases =
[ {target: gl.TEXTURE_2D,
format: 0x1903, // GL_RED
type: gl.UNSIGNED_BYTE,
expectedError: gl.INVALID_ENUM},
expectedError: [gl.INVALID_ENUM, gl.INVALID_OPERATION] },
{target: gl.TEXTURE_2D,
format: gl.RGBA,
type: gl.BYTE,
expectedError: gl.INVALID_ENUM},
expectedError: [gl.INVALID_ENUM, gl.INVALID_OPERATION] },
{target: gl.TEXTURE_2D,
format: gl.RGBA,
type: gl.UNSIGNED_BYTE,

View file

@ -73,13 +73,11 @@ var targets = [
{ target: gl.TEXTURE_2D,
maxSize: gl.getParameter(gl.MAX_TEXTURE_SIZE),
maxLevel: 1000,
tex: gl.createTexture(),
targets: [gl.TEXTURE_2D]
},
{ target: gl.TEXTURE_CUBE_MAP,
maxSize: gl.getParameter(gl.MAX_CUBE_MAP_TEXTURE_SIZE),
maxLevel: 5,
tex: gl.createTexture(),
targets: [
gl.TEXTURE_CUBE_MAP_POSITIVE_X,
gl.TEXTURE_CUBE_MAP_NEGATIVE_X,
@ -95,13 +93,15 @@ gl.pixelStorei(gl.UNPACK_ALIGNMENT, 1);
var trg = 0;
var tt = 0;
var tex = null;
runNextTest();
function runNextTest() {
var t = targets[trg];
if (tt == 0) {
var tex = t.tex;
gl.deleteTexture(tex);
tex = gl.createTexture();
gl.bindTexture(t.target, tex);
debug("");
@ -127,43 +127,60 @@ function runNextTest() {
function testFormatType(t, test) {
debug("");
debug("testing: " + wtu.glEnumToString(gl, test.format) + ", " + wtu.glEnumToString(gl, test.type));
for (var j = 0; j < t.targets.length; ++j) {
var target = t.targets[j];
debug("");
debug(wtu.glEnumToString(gl, target));
var numLevels = numLevelsFromSize(t.maxSize);
var numTestLevels = Math.min(numLevels, t.maxLevel);
// out of bounds tests
for (var i = 0; i < numLevels; i++) {
// width and height out of bounds
var size = t.maxSize >> i;
gl.texImage2D(target, i, test.format, size + 1, size + 1, 0, test.format, test.type, null);
wtu.glErrorShouldBe(gl, gl.INVALID_VALUE, "width or height out of bounds: should generate INVALID_VALUE: level is " + i + ", size is "
+ (size + 1) + "x" + (size + 1));
}
// level out of bounds
gl.texImage2D(target, numLevels, test.format, 1, 1, 0, test.format, test.type, null);
wtu.glErrorShouldBe(gl, gl.INVALID_VALUE, "level out of bounds: should generate INVALID_VALUE: level is: "
+ numLevels + ", size is 1x1.");
// width and height out of bounds
gl.texImage2D(target, 0, test.format, t.maxSize + 1, t.maxSize + 1, 0, test.format, test.type, null);
wtu.glErrorShouldBe(gl, gl.INVALID_VALUE, "width or height out of bounds: should generate INVALID_VALUE: level is 0, size is "
+ (t.maxSize + 1) + "x" + (t.maxSize + 1));
// width and height out of bounds for specified level
gl.texImage2D(target, (numLevels - 1), test.format, 4, 4, 0, test.format, test.type, null);
wtu.glErrorShouldBe(gl, gl.INVALID_VALUE, "width or height out of bounds for specified level: should generate INVALID_VALUE: level is "
+ (numLevels - 1) + ", size is 4x4.");
// Probe to discover the max non-OOM level.
// For instance, on some drivers (at least Intel+Mesa) we can create
// a maxLevel L8 texture, but only a maxLevel-1 RGB8 texture.
var maxLevelsForFormat = numLevels;
while (true) {
gl.texImage2D(target, maxLevelsForFormat-1, test.format, 1, 1, 0, test.format, test.type, null);
var err = gl.getError();
if (err == gl.OUT_OF_MEMORY) {
debug("Probe failed for level=" + (maxLevelsForFormat-1) + ", reducing...");
maxLevelsForFormat -= 1;
if (!maxLevelsForFormat) {
testFailed("Failed to allocate any levels for format " + test.format);
return;
}
continue;
}
if (err) {
testFailed("Should not hit non-OOM errors during max level probing.");
return;
}
break;
}
var numTestLevels = Math.min(maxLevelsForFormat, t.maxLevel);
for (var l = 0; l < numTestLevels; ++l) {
// Do bottom levels first;
var size = 1 << l;
var level = numLevels - l - 1;
var level = maxLevelsForFormat - l - 1;
var otherDimension = t.target == gl.TEXTURE_2D ? 1 : size;
var badSize = size * 2;
var badOtherDimension = t.target == gl.TEXTURE_2D ? 1 : badSize;
var pixels = new test.dataType(badSize * badOtherDimension * test.size);
gl.texImage2D(target, level, test.format, size, otherDimension, 0, test.format, test.type, pixels);
gl.texImage2D(target, level, test.format, size, otherDimension, 0, test.format, test.type, null);
wtu.glErrorShouldBe(gl, gl.NO_ERROR, "there should be no error for level: " + level + " " + size + "x" + otherDimension);
gl.texImage2D(target, level, test.format, otherDimension, size, 0, test.format, test.type, pixels);
if (otherDimension != size) {
gl.texImage2D(target, level, test.format, otherDimension, size, 0, test.format, test.type, null);
wtu.glErrorShouldBe(gl, gl.NO_ERROR, "there should be no error for level: " + level + " " + otherDimension + "x" + size);
gl.texImage2D(target, level, test.format, badSize, badOtherDimension, 0, test.format, test.type, pixels);
wtu.glErrorShouldBe(gl, gl.INVALID_VALUE, "should generate INVALID_VALUE for level: " + level + " " + badSize + "x" + badOtherDimension);
gl.texImage2D(target, level, test.format, badOtherDimension, badSize, 0, test.format, test.type, pixels);
wtu.glErrorShouldBe(gl, gl.INVALID_VALUE, "should generate INVALID_VALUE for level: " + level + " " + badOtherDimension + "x" + badSize);
}
}
}
}

View file

@ -29,6 +29,7 @@
<html>
<head>
<meta charset="utf-8">
<meta name="timeout" content="long">
<title>WebGL out of bounds uniform array access.</title>
<link rel="stylesheet" href="../../resources/js-test-style.css"/>
<script src=/resources/testharness.js></script>

View file

@ -49,11 +49,6 @@
window.console.log = function() { };
window.console.error = function() { };
window.internals.settings.setWebGLErrorsToConsoleEnabled(false);
// RAF doesn't work in LayoutTests. Disable it so the tests will
// use setTimeout instead.
window.requestAnimationFrame = undefined;
window.webkitRequestAnimationFrame = undefined;
}
/* -- end platform specific code --*/

View file

@ -616,7 +616,7 @@ TestHarness.prototype.reportResults = function(url, success, msg, skipped) {
url = FilterURL(url);
var test = this.getTest(url);
this.clearTimeout(test);
log(success ? "PASS" : "FAIL", msg);
log((success ? "PASS" : "FAIL") + ": " + msg);
this.reportFunc(TestHarness.reportType.TEST_RESULT, url, msg, success, skipped);
// For each result we get, reset the timeout
this.setTimeout(test);

View file

@ -90,10 +90,10 @@ Tests.testTexImage2D = function(gl) {
assertGLError(gl, gl.INVALID_VALUE, "negative y", function(){
gl.texSubImage2D(gl.TEXTURE_2D, 0,1,-1,1,1,gl.RGBA,gl.UNSIGNED_BYTE, new Uint8Array([0,0,0,0]));
});
assertGLError(gl, gl.INVALID_ENUM, "bad format", function(){
assertGLErrorIn(gl, [gl.INVALID_OPERATION, gl.INVALID_ENUM], "bad format", function(){
gl.texSubImage2D(gl.TEXTURE_2D, 0, 0,0, 1,1,gl.FLOAT,gl.UNSIGNED_BYTE, new Uint8Array([0,0,0,0]));
});
assertGLError(gl, gl.INVALID_ENUM, "bad type", function(){
assertGLErrorIn(gl, [gl.INVALID_OPERATION, gl.INVALID_ENUM], "bad type", function(){
gl.texSubImage2D(gl.TEXTURE_2D, 0, 0,0, 1,1,gl.RGBA,gl.TEXTURE_2D, new Uint8Array([0,0,0,0]));
});
assertGLError(gl, gl.INVALID_OPERATION, "not enough data", function(){

View file

@ -73,13 +73,11 @@ var targets = [
{ target: gl.TEXTURE_2D,
maxSize: gl.getParameter(gl.MAX_TEXTURE_SIZE),
maxLevel: 1000,
tex: gl.createTexture(),
targets: [gl.TEXTURE_2D]
},
{ target: gl.TEXTURE_CUBE_MAP,
maxSize: gl.getParameter(gl.MAX_CUBE_MAP_TEXTURE_SIZE),
maxLevel: 5,
tex: gl.createTexture(),
targets: [
gl.TEXTURE_CUBE_MAP_POSITIVE_X,
gl.TEXTURE_CUBE_MAP_NEGATIVE_X,
@ -95,13 +93,15 @@ gl.pixelStorei(gl.UNPACK_ALIGNMENT, 1);
var trg = 0;
var tt = 0;
var tex = null;
runNextTest();
function runNextTest() {
var t = targets[trg];
if (tt == 0) {
var tex = t.tex;
gl.deleteTexture(tex);
tex = gl.createTexture();
gl.bindTexture(t.target, tex);
debug("");
@ -127,43 +127,60 @@ function runNextTest() {
function testFormatType(t, test) {
debug("");
debug("testing: " + wtu.glEnumToString(gl, test.format) + ", " + wtu.glEnumToString(gl, test.type));
for (var j = 0; j < t.targets.length; ++j) {
var target = t.targets[j];
debug("");
debug(wtu.glEnumToString(gl, target));
var numLevels = numLevelsFromSize(t.maxSize);
var numTestLevels = Math.min(numLevels, t.maxLevel);
// out of bounds tests
for (var i = 0; i < numLevels; i++) {
// width and height out of bounds
var size = t.maxSize >> i;
gl.texImage2D(target, i, test.format, size + 1, size + 1, 0, test.format, test.type, null);
wtu.glErrorShouldBe(gl, gl.INVALID_VALUE, "width or height out of bounds: should generate INVALID_VALUE: level is " + i + ", size is "
+ (size + 1) + "x" + (size + 1));
}
// level out of bounds
gl.texImage2D(target, numLevels, test.format, 1, 1, 0, test.format, test.type, null);
wtu.glErrorShouldBe(gl, gl.INVALID_VALUE, "level out of bounds: should generate INVALID_VALUE: level is: "
+ numLevels + ", size is 1x1.");
// width and height out of bounds
gl.texImage2D(target, 0, test.format, t.maxSize + 1, t.maxSize + 1, 0, test.format, test.type, null);
wtu.glErrorShouldBe(gl, gl.INVALID_VALUE, "width or height out of bounds: should generate INVALID_VALUE: level is 0, size is "
+ (t.maxSize + 1) + "x" + (t.maxSize + 1));
// width and height out of bounds for specified level
gl.texImage2D(target, (numLevels - 1), test.format, 4, 4, 0, test.format, test.type, null);
wtu.glErrorShouldBe(gl, gl.INVALID_VALUE, "width or height out of bounds for specified level: should generate INVALID_VALUE: level is "
+ (numLevels - 1) + ", size is 4x4.");
// Probe to discover the max non-OOM level.
// For instance, on some drivers (at least Intel+Mesa) we can create
// a maxLevel L8 texture, but only a maxLevel-1 RGB8 texture.
var maxLevelsForFormat = numLevels;
while (true) {
gl.texImage2D(target, maxLevelsForFormat-1, test.format, 1, 1, 0, test.format, test.type, null);
var err = gl.getError();
if (err == gl.OUT_OF_MEMORY) {
debug("Probe failed for level=" + (maxLevelsForFormat-1) + ", reducing...");
maxLevelsForFormat -= 1;
if (!maxLevelsForFormat) {
testFailed("Failed to allocate any levels for format " + test.format);
return;
}
continue;
}
if (err) {
testFailed("Should not hit non-OOM errors during max level probing.");
return;
}
break;
}
var numTestLevels = Math.min(maxLevelsForFormat, t.maxLevel);
for (var l = 0; l < numTestLevels; ++l) {
// Do bottom levels first;
var size = 1 << l;
var level = numLevels - l - 1;
var level = maxLevelsForFormat - l - 1;
var otherDimension = t.target == gl.TEXTURE_2D ? 1 : size;
var badSize = size * 2;
var badOtherDimension = t.target == gl.TEXTURE_2D ? 1 : badSize;
var pixels = new test.dataType(badSize * badOtherDimension * test.size);
gl.texImage2D(target, level, test.format, size, otherDimension, 0, test.format, test.type, pixels);
gl.texImage2D(target, level, test.format, size, otherDimension, 0, test.format, test.type, null);
wtu.glErrorShouldBe(gl, gl.NO_ERROR, "there should be no error for level: " + level + " " + size + "x" + otherDimension);
gl.texImage2D(target, level, test.format, otherDimension, size, 0, test.format, test.type, pixels);
if (otherDimension != size) {
gl.texImage2D(target, level, test.format, otherDimension, size, 0, test.format, test.type, null);
wtu.glErrorShouldBe(gl, gl.NO_ERROR, "there should be no error for level: " + level + " " + otherDimension + "x" + size);
gl.texImage2D(target, level, test.format, badSize, badOtherDimension, 0, test.format, test.type, pixels);
wtu.glErrorShouldBe(gl, gl.INVALID_VALUE, "should generate INVALID_VALUE for level: " + level + " " + badSize + "x" + badOtherDimension);
gl.texImage2D(target, level, test.format, badOtherDimension, badSize, 0, test.format, test.type, pixels);
wtu.glErrorShouldBe(gl, gl.INVALID_VALUE, "should generate INVALID_VALUE for level: " + level + " " + badOtherDimension + "x" + badSize);
}
}
}
}

View file

@ -90,16 +90,6 @@ var testBindingFn = function(firstBindFn, secondBindFn, firstTarget, secondTarge
wtu.glErrorShouldBe(gl, gl.NO_ERROR, messagePrefix + "WORK");
else
wtu.glErrorShouldBe(gl, gl.INVALID_OPERATION, messagePrefix + "FAIL");
if ((firstTarget == gl.TRANSFORM_FEEDBACK_BUFFER && secondTarget != gl.TRANSFORM_FEEDBACK_BUFFER) ||
(firstTarget != gl.TRANSFORM_FEEDBACK_BUFFER && secondTarget == gl.TRANSFORM_FEEDBACK_BUFFER)) {
bind(firstBindFn, firstTarget, buffer);
bind(secondBindFn, secondTarget, buffer);
var message = "Binding buffer first with " + firstBindFn + " to gl." + firstTargetStr
+ " and simultaneously binding buffer with " + secondBindFn + " to gl." + secondTargetStr + " should FAIL";
wtu.glErrorShouldBe(gl, gl.INVALID_OPERATION, message);
}
}
var testBinding = function(firstTarget, secondTarget) {

View file

@ -123,7 +123,7 @@ function copytexsubimage3D_luma_format() {
gl.copyTexSubImage3D(gl.TEXTURE_3D, 0, 0, 0, layer, 0, 0,width, height);
gl.bindFramebuffer(gl.FRAMEBUFFER, null);
var program = wtu.setupProgram(gl, ["vshader", "fshader_luminance_alpha"]);
var program = wtu.setupProgram(gl, ["vshader", "fshader_luminance_alpha"], ["a_position", "a_coord"]);
wtu.setupUnitQuad(gl, 0, 1);
wtu.drawUnitQuad(gl);

View file

@ -49,11 +49,6 @@
window.console.log = function() { };
window.console.error = function() { };
window.internals.settings.setWebGLErrorsToConsoleEnabled(false);
// RAF doesn't work in LayoutTests. Disable it so the tests will
// use setTimeout instead.
window.requestAnimationFrame = undefined;
window.webkitRequestAnimationFrame = undefined;
}
/* -- end platform specific code --*/

View file

@ -51,14 +51,14 @@ function generateTest(internalFormat, pixelFormat, pixelType, prologue, resource
var xhr = new XMLHttpRequest();
xhr.open("GET", resourcePath + "red-green-semi-transparent.png");
xhr.responseType = 'blob';
xhr.send();
xhr.onload = function() {
var blob = xhr.response;
runImageBitmapTest(blob, 0.5, internalFormat, pixelFormat, pixelType, gl, tiu, wtu, false)
.then(() => {
finishTest();
});
}
};
xhr.send();
}
return init;

View file

@ -51,14 +51,14 @@ function generateTest(internalFormat, pixelFormat, pixelType, prologue, resource
var xhr = new XMLHttpRequest();
xhr.open("GET", resourcePath + "red-green-semi-transparent.png");
xhr.responseType = 'blob';
xhr.send();
xhr.onload = function() {
var blob = xhr.response;
runImageBitmapTest(blob, 0.5, internalFormat, pixelFormat, pixelType, gl, tiu, wtu, true)
.then(() => {
finishTest();
});
}
};
xhr.send();
}
return init;

View file

@ -358,11 +358,11 @@ if (contextVersion < 2) {
{ target: gl.TEXTURE_2D,
format: 0x1903, // GL_RED
type: gl.UNSIGNED_BYTE,
expectedError: gl.INVALID_ENUM },
expectedError: [gl.INVALID_ENUM, gl.INVALID_OPERATION] },
{ target: gl.TEXTURE_2D,
format: gl.RGBA,
type: gl.BYTE,
expectedError: gl.INVALID_ENUM }
expectedError: [gl.INVALID_ENUM, gl.INVALID_OPERATION] }
]);
} else {
testCases = testCases.concat([

View file

@ -613,7 +613,7 @@ TestHarness.prototype.reportResults = function(url, success, msg, skipped) {
url = FilterURL(url);
var test = this.getTest(url);
this.clearTimeout(test);
log(success ? "PASS" : "FAIL", msg);
log((success ? "PASS" : "FAIL") + ": " + msg);
this.reportFunc(TestHarness.reportType.TEST_RESULT, url, msg, success, skipped);
// For each result we get, reset the timeout
this.setTimeout(test);

View file

@ -12,7 +12,8 @@ KHRONOS_REPO_URL = "https://github.com/KhronosGroup/WebGL.git"
# Patches for conformance tests 1.0.x
PATCHES_1X = [
("js-test-pre.patch", "resources/js-test-pre.js"),
("unit.patch", "conformance/more/unit.js")
("unit.patch", "conformance/more/unit.js"),
("timeout.patch", None)
]
# Patches for conformance tests 2.0.x
PATCHES_2X = [
@ -134,7 +135,10 @@ def update_conformance(version, destination, existing_repo, patches_dir):
for patch, file_name in patches:
try:
patch = os.path.join(patches_dir, patch)
subprocess.check_call(["patch", "-d", destination, file_name, patch])
if file_name is None:
subprocess.check_call(["patch", "-d", destination, "-p", "1"], stdin=open(patch))
else:
subprocess.check_call(["patch", "-x", "3", "-d", destination, file_name, patch])
except subprocess.CalledProcessError:
print("Automatic patch failed for {}".format(file_name))
print("Please review the WPT integration and update {} accordingly".format(os.path.basename(patch)))

View file

@ -0,0 +1,108 @@
diff --git i/conformance/attribs/gl-vertex-attrib-zero-issues.html w/conformance/attribs/gl-vertex-attrib-zero-issues.html
index de45ce308c..11a83ac00a 100644
--- i/conformance/attribs/gl-vertex-attrib-zero-issues.html
+++ w/conformance/attribs/gl-vertex-attrib-zero-issues.html
@@ -29,6 +29,7 @@
<html>
<head>
<meta charset="utf-8">
+<meta name="timeout" content="long">
<title>WebGL Enable Vertex Attrib Zero Test</title>
<link rel="stylesheet" href="../../resources/js-test-style.css"/>
<script src=/resources/testharness.js></script>
diff --git i/conformance/canvas/rapid-resizing.html w/conformance/canvas/rapid-resizing.html
index 1faa737222..89f9e1e3c2 100644
--- i/conformance/canvas/rapid-resizing.html
+++ w/conformance/canvas/rapid-resizing.html
@@ -29,6 +29,7 @@
<html>
<head>
<meta charset="utf-8">
+<meta name="timeout" content="long">
<title>WebGL Rapid Resizing Test</title>
<link rel="stylesheet" href="../../resources/js-test-style.css"/>
<script src=/resources/testharness.js></script>
diff --git i/conformance/context/context-creation-and-destruction.html w/conformance/context/context-creation-and-destruction.html
index a02dd2d14c..47099e57bd 100644
--- i/conformance/context/context-creation-and-destruction.html
+++ w/conformance/context/context-creation-and-destruction.html
@@ -29,6 +29,7 @@
<html>
<head>
<meta charset="utf-8">
+<meta name="timeout" value="content">
<title>Test that contexts are freed and garbage collected reasonably</title>
<link rel="stylesheet" href="../../resources/js-test-style.css"/>
<script src=/resources/testharness.js></script>
diff --git i/conformance/context/context-creation.html w/conformance/context/context-creation.html
index 04b138daf4..703bcfa8dc 100644
--- i/conformance/context/context-creation.html
+++ w/conformance/context/context-creation.html
@@ -29,6 +29,7 @@
<html>
<head>
<meta charset="utf-8">
+<meta name="timeout" value="content">
<title>Test that you can create large numbers of WebGL contexts.</title>
<link rel="stylesheet" href="../../resources/js-test-style.css"/>
<script src=/resources/testharness.js></script>
diff --git i/conformance/context/context-eviction-with-garbage-collection.html w/conformance/context/context-eviction-with-garbage-collection.html
index 3989c7679a..b52e3a9e9f 100644
--- i/conformance/context/context-eviction-with-garbage-collection.html
+++ w/conformance/context/context-eviction-with-garbage-collection.html
@@ -29,6 +29,7 @@
<html>
<head>
<meta charset="utf-8">
+<meta name="timeout" value="content">
<title>Test that context eviction and garbage collection do not interfere with each other</title>
<link rel="stylesheet" href="../../resources/js-test-style.css"/>
<script src=/resources/testharness.js></script>
diff --git i/conformance/ogles/GL/acos/acos_001_to_006.html w/conformance/ogles/GL/acos/acos_001_to_006.html
index 99de4e0a79..71c8990638 100644
--- i/conformance/ogles/GL/acos/acos_001_to_006.html
+++ w/conformance/ogles/GL/acos/acos_001_to_006.html
@@ -28,6 +28,7 @@
<html>
<head>
<meta charset="utf-8">
+<meta name="timeout" value="content">
<title>WebGL GLSL conformance test: acos_001_to_006.html</title>
<link rel="stylesheet" href="../../../../resources/js-test-style.css" />
<link rel="stylesheet" href="../../../resources/ogles-tests.css" />
diff --git i/conformance/ogles/GL/asin/asin_001_to_006.html w/conformance/ogles/GL/asin/asin_001_to_006.html
index 5af87433aa..79afd9f430 100644
--- i/conformance/ogles/GL/asin/asin_001_to_006.html
+++ w/conformance/ogles/GL/asin/asin_001_to_006.html
@@ -28,6 +28,7 @@
<html>
<head>
<meta charset="utf-8">
+<meta name="timeout" value="content">
<title>WebGL GLSL conformance test: asin_001_to_006.html</title>
<link rel="stylesheet" href="../../../../resources/js-test-style.css" />
<link rel="stylesheet" href="../../../resources/ogles-tests.css" />
diff --git i/conformance/ogles/GL/log2/log2_001_to_008.html w/conformance/ogles/GL/log2/log2_001_to_008.html
index 5552a4f82e..539cb33214 100644
--- i/conformance/ogles/GL/log2/log2_001_to_008.html
+++ w/conformance/ogles/GL/log2/log2_001_to_008.html
@@ -28,6 +28,7 @@
<html>
<head>
<meta charset="utf-8">
+<meta name="timeout" value="content">
<title>WebGL GLSL conformance test: log2_001_to_008.html</title>
<link rel="stylesheet" href="../../../../resources/js-test-style.css" />
<link rel="stylesheet" href="../../../resources/ogles-tests.css" />
diff --git i/conformance/uniforms/out-of-bounds-uniform-array-access.html w/conformance/uniforms/out-of-bounds-uniform-array-access.html
index 2758b320ff..4d85c3a53a 100644
--- i/conformance/uniforms/out-of-bounds-uniform-array-access.html
+++ w/conformance/uniforms/out-of-bounds-uniform-array-access.html
@@ -29,6 +29,7 @@
<html>
<head>
<meta charset="utf-8">
+<meta name="timeout" content="long">
<title>WebGL out of bounds uniform array access.</title>
<link rel="stylesheet" href="../../resources/js-test-style.css"/>
<script src=/resources/testharness.js></script>