summaryrefslogtreecommitdiffstats
path: root/dom/canvas/test/webgl-mochitest/test_tex_large_uploads.html
diff options
context:
space:
mode:
Diffstat (limited to 'dom/canvas/test/webgl-mochitest/test_tex_large_uploads.html')
-rw-r--r--dom/canvas/test/webgl-mochitest/test_tex_large_uploads.html94
1 files changed, 94 insertions, 0 deletions
diff --git a/dom/canvas/test/webgl-mochitest/test_tex_large_uploads.html b/dom/canvas/test/webgl-mochitest/test_tex_large_uploads.html
new file mode 100644
index 0000000000..c2fd554843
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/test_tex_large_uploads.html
@@ -0,0 +1,94 @@
+<!DOCTYPE HTML>
+<html>
+ <head>
+ <meta charset='UTF-8'>
+ <script src='/tests/SimpleTest/SimpleTest.js'></script>
+ <link rel='stylesheet' href='/tests/SimpleTest/test.css'>
+ </head>
+ <body>
+ <img id='e_blank_15000x10000' src='blank_15000x10000.png'>
+ <script>
+
+function shouldBe(testStr, refStr) {
+ ok(testStr == refStr, 'Expected "' + refStr + '", was "' + testStr + '".');
+}
+
+function getErrorStr(gl, err) {
+ if (!err) return "NO_ERROR";
+ for (const k in gl) {
+ const v = gl[k];
+ if (v == err) {
+ return k;
+ }
+ }
+ return `<${err}>`;
+}
+
+function glErrorShouldBe(gl, expected, opt_info) {
+ if (opt_info) {
+ opt_info = opt_info + ': '
+ } else {
+ opt_info = '';
+ }
+
+ if (!expected.length) {
+ expected = [expected];
+ }
+ expected = expected.map(x => getErrorStr(gl, x));
+ let was = gl.getError();
+ was = getErrorStr(gl, was);
+ ok(expected.includes(was),
+ `${opt_info}Expected gl.getError() in [${expected}], was ${was}.`);
+}
+SimpleTest.waitForExplicitFinish();
+(async () => {
+ const gl = document.createElement('canvas').getContext('webgl2');
+ window.gl = gl;
+ if (!gl) {
+ todo(false, 'No webgl2, skipping...');
+ return;
+ }
+ const tex = gl.createTexture();
+ gl.bindTexture(gl.TEXTURE_2D, tex);
+
+ const TESTS = [
+ //{w: 16000, h: 8000}, // TODO: This asserts.
+ //{w: 8000, h: 16000}, // TODO: This asserts.
+ {w: 8000, h: 4000},
+ {w: 4000, h: 8000},
+ {w: 4000, h: 4000},
+ ];
+ const src = document.createElement('canvas').getContext('webgl',
+ {antialias:false, depth:false});
+ const maxTexSize = gl.getParameter(gl.MAX_TEXTURE_SIZE);
+ for (const t of TESTS) {
+ ok(true, 'canvas: ' + JSON.stringify(t));
+ if (t.w > maxTexSize || t.h > maxTexSize) {
+ ok(true, `Larger than MAX_TEXTURE_SIZE of ${maxTexSize}`);
+ continue;
+ }
+ src.canvas.width = t.w;
+ src.canvas.height = t.h;
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA8, gl.RGBA, gl.UNSIGNED_BYTE,
+ src.canvas);
+
+ glErrorShouldBe(gl, [0, gl.OUT_OF_MEMORY], `after texImage(${JSON.stringify(t)})`);
+
+ src.canvas.width = src.canvas.height = 1;
+ }
+
+ if (15000 > maxTexSize) {
+ ok(true, `e_blank_15000x10000 larger than MAX_TEXTURE_SIZE of ${maxTexSize}, skipping.`);
+ } else {
+ await e_blank_15000x10000.decode(); // Otherwise it will not have loaded yet.
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA8, gl.RGBA, gl.UNSIGNED_BYTE,
+ e_blank_15000x10000);
+ glErrorShouldBe(gl, [0, gl.OUT_OF_MEMORY], `after texImage(e_blank_15000x10000)`);
+ ok(!gl.isContextLost(), '!gl.isContextLost()');
+ }
+
+ SimpleTest.finish();
+})();
+ </script>
+ </body>
+</html>