Backed out changeset b462e7b742d8 (bug 1908261) for causing multiple reftest failures...
[gecko.git] / dom / canvas / test / webgl-conf / checkout / conformance / extensions / ext-texture-compression-bptc.html
blob5b6c10f044adb7cf3598efeefc5711ade27e99ba
1 <!--
2 Copyright (c) 2019 The Khronos Group Inc.
3 Use of this source code is governed by an MIT-style license that can be
4 found in the LICENSE.txt file.
5 -->
7 <!DOCTYPE html>
8 <html>
9 <head>
10 <meta charset="utf-8">
11 <title>WebGL EXT_texture_compression_bptc Conformance Tests</title>
12 <LINK rel="stylesheet" href="../../resources/js-test-style.css"/>
13 <script src="../../js/js-test-pre.js"></script>
14 <script src="../../js/webgl-test-utils.js"></script>
15 <script src="../../js/tests/compressed-texture-utils.js"></script>
16 </head>
17 <body>
18 <div id="description"></div>
19 <div id="console"></div>
20 <script>
21 "use strict";
22 description("This test verifies the functionality of the EXT_texture_compression_bptc extension, if it is available.");
24 debug("");
26 var validFormats = {
27 COMPRESSED_RGBA_BPTC_UNORM_EXT: 0x8E8C,
28 COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT: 0x8E8D,
29 COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT: 0x8E8E,
30 COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT: 0x8E8F
33 function expectedByteLength(width, height, format) {
34 return Math.ceil(width / 4) * Math.ceil(height / 4) * 16;
37 function getBlockDimensions(format) {
38 return {width: 4, height: 4};
41 var wtu = WebGLTestUtils;
42 var ctu = CompressedTextureUtils;
43 var contextVersion = wtu.getDefault3DContextVersion();
44 var gl = wtu.create3DContext();
45 var ext;
47 var formats = null;
49 function runTestExtension() {
50 // Test that enum values are listed correctly in supported formats and in the extension object.
51 ctu.testCompressedFormatsListed(gl, validFormats);
52 ctu.testCorrectEnumValuesInExt(ext, validFormats);
53 // Test that texture upload buffer size is validated correctly.
54 ctu.testFormatRestrictionsOnBufferSize(gl, validFormats, expectedByteLength, getBlockDimensions);
55 // Test TexSubImage validation on dimensions
56 // CompressedTexSubImage* will result in an
57 // INVALID_OPERATION error only if one of the following conditions occurs:
58 // * <width> is not a multiple of four, and <width> plus <xoffset> is not
59 // equal to TEXTURE_WIDTH;
60 // * <height> is not a multiple of four, and <height> plus <yoffset> is
61 // not equal to TEXTURE_HEIGHT; or
62 // * <xoffset> or <yoffset> is not a multiple of four.
63 ctu.testTexSubImageDimensions(gl, ext, validFormats, expectedByteLength, getBlockDimensions,
64 16, 16, [
65 { xoffset: 0, yoffset: 0, width: 4, height: 3,
66 expectation: gl.INVALID_OPERATION, message: "height is not a multiple of 4" },
67 { xoffset: 0, yoffset: 0, width: 3, height: 4,
68 expectation: gl.INVALID_OPERATION, message: "width is not a multiple of 4" },
69 { xoffset: 1, yoffset: 0, width: 4, height: 4,
70 expectation: gl.INVALID_OPERATION, message: "xoffset is not a multiple of 4" },
71 { xoffset: 0, yoffset: 1, width: 4, height: 4,
72 expectation: gl.INVALID_OPERATION, message: "yoffset is not a multiple of 4" },
73 { xoffset: 12, yoffset: 12, width: 4, height: 4,
74 expectation: gl.NO_ERROR, message: "is valid" },
75 ]);
77 // Test TexImage validation on level dimensions combinations.
78 // When level equals 0, width and height must be a multiple of 4.
79 // When level is larger than 0, this constraint doesn't apply.
81 let npotExpectation, npotMessage;
82 if (contextVersion >= 2) {
83 npotExpectation = gl.NO_ERROR;
84 npotMessage = "valid";
85 } else {
86 npotExpectation = gl.INVALID_VALUE;
87 npotMessage = "invalid";
90 ctu.testTexImageLevelDimensions(gl, ext, validFormats, expectedByteLength, getBlockDimensions,
92 { level: 0, width: 4, height: 3,
93 expectation: gl.INVALID_OPERATION, message: "level is 0, height is not a multiple of 4" },
94 { level: 0, width: 3, height: 4,
95 expectation: gl.INVALID_OPERATION, message: "level is 0, width is not a multiple of 4" },
96 { level: 0, width: 2, height: 2,
97 expectation: gl.INVALID_OPERATION, message: "level is 0, width is not a multiple of 4" },
98 { level: 0, width: 4, height: 4,
99 expectation: gl.NO_ERROR, message: "is valid" },
100 { level: 1, width: 1, height: 1,
101 expectation: gl.INVALID_OPERATION, message: "implied base mip 2x2 is invalid" },
102 { level: 1, width: 1, height: 2,
103 expectation: gl.INVALID_OPERATION, message: "implied base mip 2x4 is invalid" },
104 { level: 1, width: 2, height: 1,
105 expectation: gl.INVALID_OPERATION, message: "implied base mip 4x2 is invalid" },
106 { level: 1, width: 2, height: 2,
107 expectation: gl.NO_ERROR, message: "implied base mip 4x4 is valid" },
108 { level: 2, width: 1, height: 3,
109 expectation: npotExpectation, message: "implied base mip 4x12 is " + npotMessage },
112 // Test that BPTC enums are not accepted by texImage2D
114 var tex = gl.createTexture();
115 gl.bindTexture(gl.TEXTURE_2D, tex);
117 gl.texImage2D(gl.TEXTURE_2D, 0, ext.COMPRESSED_RGBA_BPTC_UNORM_EXT, 4, 4, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);
118 wtu.glErrorShouldBe(gl, [gl.INVALID_VALUE, gl.INVALID_OPERATION], "COMPRESSED_RGBA_BPTC_UNORM_EXT fails with texImage2D");
120 gl.texImage2D(gl.TEXTURE_2D, 0, ext.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT, 4, 4, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);
121 wtu.glErrorShouldBe(gl, [gl.INVALID_VALUE, gl.INVALID_OPERATION], "COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT fails with texImage2D");
123 if (contextVersion >= 2) {
124 gl.texImage2D(gl.TEXTURE_2D, 0, ext.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT, 4, 4, 0, gl.RGB, gl.FLOAT, null);
125 wtu.glErrorShouldBe(gl, [gl.INVALID_VALUE, gl.INVALID_OPERATION], "COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT fails with texImage2D");
127 gl.texImage2D(gl.TEXTURE_2D, 0, ext.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT, 4, 4, 0, gl.RGB, gl.FLOAT, null);
128 wtu.glErrorShouldBe(gl, [gl.INVALID_VALUE, gl.INVALID_OPERATION], "COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT fails with texImage2D");
131 gl.deleteTexture(tex);
135 function runTest() {
136 if (!gl) {
137 testFailed("context does not exist");
138 } else {
139 testPassed("context exists");
141 ctu.testCompressedFormatsUnavailableWhenExtensionDisabled(gl, validFormats, expectedByteLength, 4);
143 ext = gl.getExtension("EXT_texture_compression_bptc");
145 wtu.runExtensionSupportedTest(gl, "EXT_texture_compression_bptc", ext !== null);
147 if (ext !== null) {
148 runTestExtension();
153 runTest();
155 var successfullyParsed = true;
156 </script>
157 <script src="../../js/js-test-post.js"></script>
158 </body>
159 </html>