summaryrefslogtreecommitdiffstats
path: root/dom/canvas/test/webgl-conf/checkout/js/tests/compressed-tex-image.js
diff options
context:
space:
mode:
Diffstat (limited to 'dom/canvas/test/webgl-conf/checkout/js/tests/compressed-tex-image.js')
-rw-r--r--dom/canvas/test/webgl-conf/checkout/js/tests/compressed-tex-image.js138
1 files changed, 138 insertions, 0 deletions
diff --git a/dom/canvas/test/webgl-conf/checkout/js/tests/compressed-tex-image.js b/dom/canvas/test/webgl-conf/checkout/js/tests/compressed-tex-image.js
new file mode 100644
index 0000000000..7886181f4c
--- /dev/null
+++ b/dom/canvas/test/webgl-conf/checkout/js/tests/compressed-tex-image.js
@@ -0,0 +1,138 @@
+"use strict";
+description("This test ensures WebGL implementations correctly implement querying for compressed textures when extensions are disabled.");
+
+debug("");
+
+const wtu = WebGLTestUtils;
+const gl = wtu.create3DContext(null, undefined, contextVersion);
+
+const COMPRESSED_RGB_PVRTC_4BPPV1_IMG = 0x8C00;
+const COMPRESSED_RGBA_PVRTC_4BPPV1_IMG = 0x8C02;
+
+let formats = null;
+let ext;
+
+if (!gl) {
+ testFailed("context does not exist");
+} else {
+ testPassed("context exists");
+
+ var tex = gl.createTexture();
+ gl.bindTexture(gl.TEXTURE_2D, tex);
+ wtu.shouldGenerateGLError(gl, [gl.INVALID_ENUM, gl.INVALID_OPERATION],
+ "gl.compressedTexSubImage2D(gl.TEXTURE_2D, 0, 0, 0, 10, 10, COMPRESSED_RGB_PVRTC_4BPPV1_IMG, new Uint8Array(8));");
+
+ wtu.shouldGenerateGLError(gl, gl.INVALID_ENUM, "gl.compressedTexImage2D(gl.TEXTURE_2D, 0, COMPRESSED_RGB_PVRTC_4BPPV1_IMG, 8, 8, 0, new Uint8Array(8))");
+ wtu.shouldGenerateGLError(gl, gl.INVALID_ENUM, "gl.compressedTexImage2D(gl.TEXTURE_2D, 0, COMPRESSED_RGBA_PVRTC_4BPPV1_IMG, 8, 8, 0, new Uint8Array(8))");
+
+ wtu.shouldGenerateGLError(gl, gl.NO_ERROR, "formats = gl.getParameter(gl.COMPRESSED_TEXTURE_FORMATS)");
+ shouldBeNonNull("formats");
+ shouldBe("formats.length", "0");
+
+ wtu.shouldGenerateGLError(gl, gl.NO_ERROR, "gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 4, 4, 0, gl.RGBA, gl.UNSIGNED_BYTE, new Uint8Array(4*4*4));");
+ wtu.shouldGenerateGLError(gl, gl.INVALID_ENUM,
+ "gl.compressedTexSubImage2D(gl.TEXTURE_2D, 0, 0, 0, 4, 4, COMPRESSED_RGB_PVRTC_4BPPV1_IMG, new Uint8Array(8));");
+
+ // Check too-many and too-few args.
+
+ wtu.shouldThrow(gl, false, "too many args", function() {
+ gl.compressedTexImage2D(gl.TEXTURE_2D, 0, COMPRESSED_RGB_PVRTC_4BPPV1_IMG, 4, 4, 0, new Uint8Array(8), null);
+ });
+ wtu.shouldThrow(gl, TypeError, "too few args", function() {
+ gl.compressedTexImage2D(gl.TEXTURE_2D, 0, COMPRESSED_RGB_PVRTC_4BPPV1_IMG, 4, 4, 0);
+ });
+
+ wtu.shouldThrow(gl, false, "too many args", function() {
+ gl.compressedTexSubImage2D(gl.TEXTURE_2D, 0, 0, 0, 4, 4, COMPRESSED_RGB_PVRTC_4BPPV1_IMG, new Uint8Array(8), null);
+ });
+ wtu.shouldThrow(gl, TypeError, "too few args", function() {
+ gl.compressedTexSubImage2D(gl.TEXTURE_2D, 0, 0, 0, 4, 4, COMPRESSED_RGB_PVRTC_4BPPV1_IMG);
+ });
+
+ // -
+
+ let pbo;
+ // WebGL 2.0 specific
+ if (gl.PIXEL_UNPACK_BUFFER) {
+ pbo = gl.createBuffer();
+ }
+
+ gl.bindTexture(gl.TEXTURE_2D, tex);
+
+ function validateExt(extName, enumName, blockSize, blockByteSize, expectedSubImageError) {
+ debug('\n---------------------------');
+ debug('\n' + extName);
+ ext = gl.getExtension(extName);
+ if (!ext) {
+ testPassed(`Optional ext ${extName} MAY be unsupported.`);
+ return;
+ }
+ testPassed(`Optional ext ${extName} is supported.`);
+
+ const data = new Uint8Array(blockByteSize);
+
+ const views = [
+ data,
+ new Uint8ClampedArray(data.buffer),
+ new Int8Array(data.buffer),
+ new Uint16Array(data.buffer),
+ new Int16Array(data.buffer),
+ new Uint32Array(data.buffer),
+ new Int32Array(data.buffer),
+ new Float32Array(data.buffer),
+ new DataView(data.buffer),
+ ];
+ if (window.SharedArrayBuffer) {
+ const sharedBuffer = new SharedArrayBuffer(blockByteSize);
+ views.push(
+ new Uint8Array(sharedBuffer),
+ new Uint8ClampedArray(sharedBuffer),
+ new DataView(sharedBuffer)
+ );
+ }
+
+ for (const view of views) {
+ window.g_view = view;
+ debug(`\nfrom ${view.constructor.name} of ${view.buffer.constructor.name}`);
+ wtu.shouldGenerateGLError(gl, gl.NO_ERROR,
+ `gl.compressedTexImage2D(gl.TEXTURE_2D, 0, ext.${enumName}, ${blockSize},${blockSize}, 0, g_view)`);
+
+ wtu.shouldGenerateGLError(gl, expectedSubImageError,
+ `gl.compressedTexSubImage2D(gl.TEXTURE_2D, 0, 0,0, ${blockSize},${blockSize}, ext.${enumName}, g_view)`);
+ }
+
+ if (pbo) {
+ debug('\nfrom PBO');
+ gl.bindBuffer(gl.PIXEL_UNPACK_BUFFER, pbo);
+ wtu.shouldGenerateGLError(gl, gl.NO_ERROR,
+ `gl.bufferData(gl.PIXEL_UNPACK_BUFFER, ${blockByteSize}*2, gl.STATIC_DRAW)`);
+
+ wtu.shouldGenerateGLError(gl, gl.NO_ERROR,
+ `gl.compressedTexImage2D(gl.TEXTURE_2D, 0, ext.${enumName}, ${blockSize},${blockSize}, 0, ${blockByteSize}, 0)`);
+ wtu.shouldGenerateGLError(gl, gl.NO_ERROR,
+ `gl.compressedTexImage2D(gl.TEXTURE_2D, 0, ext.${enumName}, ${blockSize},${blockSize}, 0, ${blockByteSize}, 1)`);
+ wtu.shouldGenerateGLError(gl, gl.NO_ERROR,
+ `gl.compressedTexImage2D(gl.TEXTURE_2D, 0, ext.${enumName}, ${blockSize},${blockSize}, 0, ${blockByteSize}, ${blockByteSize})`);
+ wtu.shouldGenerateGLError(gl, gl.INVALID_OPERATION,
+ `gl.compressedTexImage2D(gl.TEXTURE_2D, 0, ext.${enumName}, ${blockSize},${blockSize}, 0, ${blockByteSize}, ${blockByteSize+1})`);
+
+ wtu.shouldGenerateGLError(gl, expectedSubImageError,
+ `gl.compressedTexSubImage2D(gl.TEXTURE_2D, 0, 0,0, ${blockSize},${blockSize}, ext.${enumName}, ${blockByteSize}, 0)`);
+ wtu.shouldGenerateGLError(gl, expectedSubImageError,
+ `gl.compressedTexSubImage2D(gl.TEXTURE_2D, 0, 0,0, ${blockSize},${blockSize}, ext.${enumName}, ${blockByteSize}, 1)`);
+ wtu.shouldGenerateGLError(gl, expectedSubImageError,
+ `gl.compressedTexSubImage2D(gl.TEXTURE_2D, 0, 0,0, ${blockSize},${blockSize}, ext.${enumName}, ${blockByteSize}, ${blockByteSize})`);
+ wtu.shouldGenerateGLError(gl, gl.INVALID_OPERATION,
+ `gl.compressedTexSubImage2D(gl.TEXTURE_2D, 0, 0,0, ${blockSize},${blockSize}, ext.${enumName}, ${blockByteSize}, ${blockByteSize+1})`);
+
+ gl.bindBuffer(gl.PIXEL_UNPACK_BUFFER, null);
+ }
+ }
+
+ validateExt('WEBGL_compressed_texture_s3tc', 'COMPRESSED_RGBA_S3TC_DXT5_EXT', 4, 16, gl.NO_ERROR);
+ validateExt('WEBGL_compressed_texture_etc1', 'COMPRESSED_RGB_ETC1_WEBGL', 4, 8, gl.INVALID_OPERATION);
+ validateExt('WEBGL_compressed_texture_etc', 'COMPRESSED_RGBA8_ETC2_EAC', 4, 16, gl.NO_ERROR);
+ validateExt('WEBGL_compressed_texture_astc', 'COMPRESSED_RGBA_ASTC_4x4_KHR', 4, 16, gl.NO_ERROR);
+}
+
+var successfullyParsed = true;