Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
0e8b28f
Update invalid enums test for oes-draw-buffers-indexed (#3075)
shrekshao May 18, 2020
cd886c7
Increase timeout for cross-origin image loading tests. (#3077)
kenrussell May 20, 2020
1735e89
PVRTC tests call non-existent helper function (#3079)
grorg May 22, 2020
c3a226a
Fix nonexistent drawQuad reference in top-of-tree PVRTC conformance t…
kenrussell May 22, 2020
cf28da2
Update oes-draw-buffers-indexed.html with non-indexed call test (#3078)
shrekshao May 22, 2020
cbee3f8
Fix WEBGL_video_texture demo typo (#3081)
shaoboyan May 26, 2020
17595e0
Test uploading an image with a srcset with empty data. (#3087)
kenrussell May 29, 2020
ab67991
EXT_shader_framebuffer_fetch proposal v1 (#3074)
raytranuk May 30, 2020
e641e0d
Check that Create+Delete+BeginQuery fails. (#3082)
kdashg May 30, 2020
71ab241
Fix comments in draw-with-changing-start-vertex-bug.html. (#3091)
kdashg Jun 2, 2020
fd4489e
Add tests to verify toDataURL images are the correct orientation for …
nkronlage Jun 2, 2020
38b2ecd
Update revision date in EXT_shader_framebuffer_fetch proposal. (#3088)
kenrussell Jun 2, 2020
616a46a
Temporarily disable requestVideoFrameCallback for some tests. (#3092)
kenrussell Jun 3, 2020
1b5de6a
Re-enable requestVideoFrameCallback for image_bitmap_from_video tests…
kenrussell Jun 5, 2020
d0fcf3d
Choose which cross-origin URL to use up front. (#3095)
kenrussell Jun 9, 2020
7b3041c
Check that framebufferTexture requires bindTexture. (#3083)
kdashg Jun 17, 2020
5780750
framebufferTexture2D(F, C_A0, T_2D, null, 1000) is not an error. (#3084)
kdashg Jun 17, 2020
d7298d1
readBuffer of out of range color attachment should cause INVALID_OPER…
jdarpinian Jun 24, 2020
c47c41c
Add DYNAMIC_DRAW bufferUsage to multi draw and base vertex base insta…
shrekshao Jun 24, 2020
ed02195
Removed isEnablediOES entry point (#3106)
lexaknyazev Jun 26, 2020
d0b4024
Clarify texImage2D for RGTC and BPTC (#3105)
lexaknyazev Jun 26, 2020
d5b0de4
Update MultiDraw and MultiDrawBaseVertexBaseInstance extension (#3108)
shrekshao Jun 29, 2020
b9f9f56
Use ResizeObserver's device-pixel-content-box when available for high…
kenrussell Jun 29, 2020
b696239
Test JPEG with linear gamma in image_bitmap_from_blob tests. (#3100)
kenrussell Jun 30, 2020
02aaeea
Added switch statement tests for default and literal values (#3060)
samsinsane Jun 30, 2020
4b789bc
EXT_clip_cull_distance: allow for an implementation to return 0 for t…
krogovin Jul 1, 2020
c33c36a
Clarified WebGL-specific dimensions restriction (#3111)
lexaknyazev Jul 7, 2020
9aea204
Update bptc and rgtc tests with level and dimension test (#3112)
shrekshao Jul 8, 2020
f6930e9
add rendering test to shader precisions format test
greggman Apr 26, 2020
dcfc102
Fix WEBGL_multi_draw_instanced_base_vertex_base_instance argument typ…
shrekshao Jul 15, 2020
16b6599
Add WebGL 2.0 test of pixelStorei with PACK_SKIP_PIXELS > 0. (#3118)
kenrussell Jul 17, 2020
a503e42
Fix WEBGL_compressed_texture_etc1 section of compressed-tex-image tes…
sugoi1 Jul 20, 2020
3610875
Default to WebGL 2 conformance tests instead of WebGL 1. (#3121)
jdarpinian Jul 24, 2020
803227b
Use more inclusive terms in lint script. (#3123)
kenrussell Jul 24, 2020
07a7dcc
Fix object-deletion-behaviour-2 to create WebGL 2.0 context. (#3125)
kenrussell Jul 27, 2020
444d2fa
Loosen readBuffer error condition in readbuffer.html. (#3126)
kenrussell Jul 27, 2020
3f6b053
Fix integer-cubemap-specification-order-bug.html in 2.0.0 snapshot. (…
kenrussell Jul 27, 2020
c12e598
Shader source character set and preprocess validation test (#3124)
shrekshao Jul 27, 2020
40a563c
Remove invalid RGB10_A2 tests from 2.0.0 conformance snapshot. (#3129)
kenrussell Jul 27, 2020
8f4230c
Fix 2.0.0 snapshot of glsl-conformance-test runner. (#3130)
kenrussell Jul 27, 2020
758855e
Add null-object-behaviour-2 test for WebGL 2 objects.
jdarpinian Jul 24, 2020
9e8d682
mark as --min-version 2.0.1
jdarpinian Jul 28, 2020
c1d5cef
Use pure gl.shaderSource test for invalid shader test on character se…
shrekshao Jul 28, 2020
497c6c8
Increase tolerance to 3 in clear-srgb-color-buffer.html . (#3132)
kenrussell Jul 28, 2020
0813e9a
Fix function signatures in multi-draw extensions. (#3131)
kenrussell Aug 1, 2020
6bb52ca
Promote WEBGL_multi_draw to community approved (#3113)
shrekshao Aug 1, 2020
272eb8d
Skip some ImageBitmap from ImageData tests w/o ImageBitmapOptions. (#…
kenrussell Aug 4, 2020
321e29e
Test WebGL 2's new vertex attribute types (#3135)
jdarpinian Aug 6, 2020
5d33e2f
Specialize EXT_texture_norm16 to WebGL 2.0. (#3136)
kenrussell Aug 11, 2020
1ed3cff
Support WebKit's MiniBrowser in webglHarnessCollectGarbage(). (#3137)
kenrussell Aug 11, 2020
cb02b86
Promote EXT_texture_norm16 to community approved (#3138)
shrekshao Aug 19, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -271,7 +271,7 @@
wtu.glErrorShouldBe(gl, gl.NO_ERROR, "uploading compressed texture");
gl.generateMipmap(gl.TEXTURE_2D);
wtu.glErrorShouldBe(gl, gl.INVALID_OPERATION, "trying to generate mipmaps from compressed texture");
wtu.drawQuad(gl);
wtu.clearAndDrawUnitQuad(gl);
compareRect(width, height, test.channels, width, height, uncompressedData, data, format);

gl.compressedTexImage2D(gl.TEXTURE_2D, 0, format, width, height, 1, data);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,7 @@
wtu.glErrorShouldBe(gl, gl.NO_ERROR, "uploading compressed texture");
gl.generateMipmap(gl.TEXTURE_2D);
wtu.glErrorShouldBe(gl, gl.INVALID_OPERATION, "trying to generate mipmaps from compressed texture");
wtu.drawQuad(gl);
wtu.clearAndDrawUnitQuad(gl);
compareRect(width, height, test.channels, width, height, uncompressedData, data, format, undefined, "NEAREST");
// Test again with linear filtering.
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,8 @@
description("Tests deletion behavior for WebGL2 buffer, sampler, vertexArray and transformFeedback objects.");

var wtu = WebGLTestUtils;
var gl = wtu.create3DContext();
var gl = wtu.create3DContext(undefined, undefined, 2);
var shouldGenerateGLError = wtu.shouldGenerateGLError;
var contextVersion = wtu.getDefault3DContextVersion();

debug("");
debug("buffer deletion");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -99,8 +99,8 @@

var maxColorAttachments = gl.getParameter(gl.MAX_COLOR_ATTACHMENTS);
gl.readBuffer(gl.COLOR_ATTACHMENT0 + maxColorAttachments);
wtu.glErrorShouldBe(gl, gl.INVALID_ENUM,
"calling readBuffer with GL_COLOR_ATTACHMENTi that exceeds MAX_COLOR_ATTACHMENT on fbo should generate INVALID_ENUM.");
wtu.glErrorShouldBe(gl, [gl.INVALID_ENUM, gl.INVALID_OPERATION],
"calling readBuffer with GL_COLOR_ATTACHMENTi that exceeds MAX_COLOR_ATTACHMENT on fbo should generate INVALID_ENUM or INVALID_OPERATION.");
gl.readBuffer(gl.COLOR_ATTACHMENT1);
wtu.glErrorShouldBe(gl, gl.NO_ERROR,
"calling readBuffer with GL_COLOR_ATTACHMENT1 on the fbo should succeed.");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,9 @@
}

var color_ref = wtu.linearToSRGB(color);
wtu.checkCanvasRect(gl, 0, 0, size, size, color_ref);
var tolerance = 3;
var msg = "";
wtu.checkCanvasRect(gl, 0, 0, size, size, color_ref, msg, tolerance);
}

gl.bindTexture(gl.TEXTURE_2D, null);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@
gl.texImage2D(face + gl.TEXTURE_CUBE_MAP_POSITIVE_X, level, gl.RG8I, levelSize, levelSize, 0, gl.RG_INTEGER, gl.BYTE, new Int8Array(backingBuffer));
});

gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_MIN_FILTER, gl.NEAREST_MIPMAP_LINEAR);
gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_MIN_FILTER, gl.NEAREST_MIPMAP_NEAREST);
gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,9 @@
var doTexImage = function(domElement) {
var tex = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, tex);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGB10_A2, gl.RGBA, gl.UNSIGNED_INT_2_10_10_10_REV, domElement);
wtu.glErrorShouldBe(gl, [gl.INVALID_VALUE, gl.INVALID_ENUM, gl.INVALID_OPERATION], "TexImage2D taking RGB10_A2/RGBA/UNSIGNED_INT_2_10_10_10_REV should fail");
// The following test was invalidated in https://github.com/KhronosGroup/WebGL/pull/2386 .
// gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGB10_A2, gl.RGBA, gl.UNSIGNED_INT_2_10_10_10_REV, domElement);
// wtu.glErrorShouldBe(gl, [gl.INVALID_VALUE, gl.INVALID_ENUM, gl.INVALID_OPERATION], "TexImage2D taking RGB10_A2/RGBA/UNSIGNED_INT_2_10_10_10_REV should fail");
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RG8, gl.RG, gl.FLOAT, domElement);
wtu.glErrorShouldBe(gl, gl.INVALID_OPERATION, "TexImage2D taking RG8/RG/FLOAT should fail");
gl.deleteTexture(tex);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,8 +61,9 @@
gl.bindTexture(gl.TEXTURE_2D, tex);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGB10_A2, 16, 16, 0, gl.RGBA, gl.UNSIGNED_INT_2_10_10_10_REV, null);
wtu.glErrorShouldBe(gl, gl.NO_ERROR, "Teximage2D taking a null array buffer should succeed");
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGB10_A2, gl.RGBA, gl.UNSIGNED_INT_2_10_10_10_REV, c);
wtu.glErrorShouldBe(gl, gl.INVALID_VALUE, "TexImage2D taking RGB10_A2 internalformat and a canvas source should fail");
// The following test was invalidated in https://github.com/KhronosGroup/WebGL/pull/2386 .
// gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGB10_A2, gl.RGBA, gl.UNSIGNED_INT_2_10_10_10_REV, c);
// wtu.glErrorShouldBe(gl, gl.INVALID_VALUE, "TexImage2D taking RGB10_A2 internalformat and a canvas source should fail");
gl.deleteTexture(tex);

var successfullyParsed = true;
Expand Down
28 changes: 15 additions & 13 deletions conformance-suites/2.0.0/js/glsl-conformance-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -270,8 +270,12 @@ function runOneTest(gl, info) {
if (info.uniforms !== undefined) {
for (var i = 0; i < info.uniforms.length; ++i) {
var uniformLocation = gl.getUniformLocation(program, info.uniforms[i].name);
gl[info.uniforms[i].functionName](uniformLocation, info.uniforms[i].value);
debug(info.uniforms[i].name + ' set to ' + info.uniforms[i].value);
if (uniformLocation !== null) {
gl[info.uniforms[i].functionName](uniformLocation, info.uniforms[i].value);
debug(info.uniforms[i].name + ' set to ' + info.uniforms[i].value);
} else {
debug('uniform ' + info.uniforms[i].name + ' had null location and was not set');
}
}
}

Expand All @@ -288,7 +292,11 @@ function runOneTest(gl, info) {
if (info.renderTolerance !== undefined) {
tolerance = info.renderTolerance;
}
wtu.checkCanvas(gl, [0, 255, 0, 255], "should be green", tolerance);
if (info.renderColor !== undefined) {
wtu.checkCanvas(gl, info.renderColor, "should be expected color " + info.renderColor, tolerance);
} else {
wtu.checkCanvas(gl, [0, 255, 0, 255], "should be green", tolerance);
}
}

function runTests(shaderInfos, opt_contextVersion) {
Expand All @@ -303,17 +311,11 @@ function runTests(shaderInfos, opt_contextVersion) {
return;
}

var testIndex = 0;
var runNextTest = function() {
if (testIndex == shaderInfos.length) {
finishTest();
return;
}

runOneTest(gl, shaderInfos[testIndex++]);
setTimeout(runNextTest, 1);
for (var i = 0; i < shaderInfos.length; i++) {
runOneTest(gl, shaderInfos[i]);
}
runNextTest();

finishTest();
};

function getSource(elem) {
Expand Down
8 changes: 8 additions & 0 deletions conformance-suites/2.0.0/js/js-test-pre.js
Original file line number Diff line number Diff line change
Expand Up @@ -708,6 +708,14 @@ function webglHarnessCollectGarbage() {
return;
}

// WebKit's MiniBrowser with the following environment variables set:
// export JSC_useDollarVM=1
// export __XPC_JSC_useDollarVM=1
if (window.$vm) {
window.$vm.gc();
return;
}

function gcRec(n) {
if (n < 1)
return {};
Expand Down
26 changes: 13 additions & 13 deletions conformance-suites/2.0.0/py/lint/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ WebGL/sdk/tests working directory like this:
You can use the lint tool to check submitted pull request and fix the errors reported by the tool.
Reviewers will not merge branches with tests that have lint errors, so you must either
[fix all lint errors](#fixing-lint-errors) or update
[white-list test files] (#updating-the-whitelist) to suppress the errors.
[allow-list test files] (#updating-the-allowlist) to suppress the errors.

## Usage of lint tool

Expand All @@ -46,7 +46,7 @@ WebGL/sdk/tests:</br>
You must fix any errors the lint tool reports, unless an error is for
something essential to a certain test or that for some other exceptional
reason shouldn't prevent the test from being merged. In those cases you can
update [white-list test files](#updating-the-whiteslist) to suppress the errors.
update [allow-list test files](#updating-the-allowlist) to suppress the errors.
Otherwise, use the details in this section to fix all errors reported.

* **CR AT EOL**: Test-file line ends with CR (U+000D) character; **fix**:
Expand All @@ -65,32 +65,32 @@ Otherwise, use the details in this section to fix all errors reported.
* **FILENAME WHITESPACE**: Test file name contains white space; **fix**:
remove white space from test file name.

## Updating the whitelist
## Updating the allowlist

Normally you must [fix all lint errors](#fixing-lint-errors). But in the
unusual case of error reports for things essential to certain tests or that
for other exceptional reasons shouldn't prevent a merge of a test, you can
update and commit the `lint.whitelist` file in the WebGL/sdk/tests/py/lint/
update and commit the `lint.allowlist` file in the WebGL/sdk/tests/py/lint/
directory to suppress errors the lint tool would report for a test file.

To add a test file or directory to the whitelist, use the following format:
To add a test file or directory to the allowlist, use the following format:

```
ERROR TYPE:file/name/pattern
```

For example, to whitelist the file `example/file.html` such that all
For example, to allowlist the file `example/file.html` such that all
`TRAILING WHITESPACE` errors the lint tool would report for it are
suppressed, add the following line to the `lint.whitelist` file.
suppressed, add the following line to the `lint.allowlist` file.

```
TRAILING WHITESPACE:example/file.html
```

To whitelist an entire directory rather than just one file, use the `*`
wildcard. For example, to whitelist the `example` directory such that all
To allowlist an entire directory rather than just one file, use the `*`
wildcard. For example, to allowlist the `example` directory such that all
`TRAILING WHITESPACE` errors the lint tool would report for any files in it
are suppressed, add the following line to the `lint.whitelist` file.
are suppressed, add the following line to the `lint.allowlist` file.

```
TRAILING WHITESPACE:example/*
Expand All @@ -100,15 +100,15 @@ If needed, you can also use the `*` wildcard to express other filename
patterns or directory-name patterns (just as you would when, e.g.,
executing shell commands from the command line).

Finally, to whitelist just one line in a file, use the following format:
Finally, to allowlist just one line in a file, use the following format:

```
ERROR TYPE:file/name/pattern:line_number
```

For example, to whitelist just line 128 of the file `example/file.html`
For example, to allowlist just line 128 of the file `example/file.html`
such that any `TRAILING WHITESPACE` error the lint tool would report for
that line is suppressed, add the following to the `lint.whitelist` file.
that line is suppressed, add the following to the `lint.allowlist` file.

```
TRAILING WHITESPACE:example/file.html:128
Expand Down
32 changes: 16 additions & 16 deletions conformance-suites/2.0.0/py/lint/lint.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ def check_permission(path):
return []


def parse_whitelist_file(filename):
def parse_allowlist_file(filename):
data = defaultdict(lambda:defaultdict(set))

with open(filename) as f:
Expand All @@ -80,29 +80,29 @@ def parse_whitelist_file(filename):
data[file_match][error_type].add(line_number)

def inner(path, errors):
whitelisted = [False for item in xrange(len(errors))]
allowlisted = [False for item in xrange(len(errors))]

for file_match, whitelist_errors in data.iteritems():
for file_match, allowlist_errors in data.iteritems():
if fnmatch.fnmatch(path, file_match):
for i, (error_type, msg, line) in enumerate(errors):
if "*" in whitelist_errors:
whitelisted[i] = True
elif error_type in whitelist_errors:
allowed_lines = whitelist_errors[error_type]
if "*" in allowlist_errors:
allowlisted[i] = True
elif error_type in allowlist_errors:
allowed_lines = allowlist_errors[error_type]
if None in allowed_lines or line in allowed_lines:
whitelisted[i] = True
allowlisted[i] = True

return [item for i, item in enumerate(errors) if not whitelisted[i]]
return [item for i, item in enumerate(errors) if not allowlisted[i]]
return inner


_whitelist_fn = None
def whitelist_errors(path, errors):
global _whitelist_fn
_allowlist_fn = None
def allowlist_errors(path, errors):
global _allowlist_fn

if _whitelist_fn is None:
_whitelist_fn = parse_whitelist_file(os.path.join(lint_root, "lint.whitelist"))
return _whitelist_fn(path, errors)
if _allowlist_fn is None:
_allowlist_fn = parse_allowlist_file(os.path.join(lint_root, "lint.allowlist"))
return _allowlist_fn(path, errors)


class Regexp(object):
Expand Down Expand Up @@ -189,7 +189,7 @@ def main():
repo_root = repo_root.replace("WebGL/sdk/tests", options.repo)

def run_lint(path, fn, *args):
errors = whitelist_errors(path, fn(path, *args))
errors = allowlist_errors(path, fn(path, *args))
output_errors(errors)
for error_type, error, line in errors:
error_count[error_type] += 1
Expand Down
8 changes: 8 additions & 0 deletions extensions/EXT_clip_cull_distance/extension.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

<contributors>
<contributor>Members of the WebGL working group</contributor>
<contributor>Kevin Rogovin (kevinrogovin[at]invisionapp.com</contributor>
</contributors>

<number>43</number>
Expand All @@ -18,6 +19,10 @@
<overview>
<mirrors href="https://www.khronos.org/registry/gles/extensions/EXT/EXT_clip_cull_distance.txt"
name="EXT_clip_cull_distance">
<addendum>
<p>WebGL implementations can return 0 for the maximum number cull planes
(MAX_CULL_DISTANCES_EXT) supported.</p>
</addendum>
</mirrors>

<features>
Expand Down Expand Up @@ -78,5 +83,8 @@
<revision date="2019/09/25">
<change>Promoted to Draft.</change>
</revision>
<revision date="2020/07/01">
<change>Added addendum that allows for the number of cull planes to be 0.</change>
</revision>
</history>
</draft>
33 changes: 33 additions & 0 deletions extensions/EXT_texture_compression_bptc/extension.xml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,12 @@
<a href="https://www.khronos.org/registry/OpenGL/extensions/EXT/EXT_sRGB.txt">EXT_sRGB</a> OpenGL ES
extension.
</p>
<p>
Unlike the OpenGL ES extension, this WebGL extension does not extend <code>texImage2D</code> entry point.
</p>
<p>
For compatibility reasons, the width and the height of the top level mip map are required to be a multiple of 4.
</p>
<features>
<feature>
Compression format <code>COMPRESSED_RGBA_BPTC_UNORM_EXT</code>,
Expand All @@ -50,6 +56,22 @@
</code></blockquote>
<p>If it is not, an <code>INVALID_VALUE</code> error is generated.</p>
</feature>
<feature>
<p>The following format-specific restrictions must be enforced:</p>
<dl>
<dt>COMPRESSED_RGBA_BPTC_UNORM_EXT</dt>
<dt>COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT</dt>
<dt>COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT</dt>
<dt>COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT</dt>
<dd>
<p>When <code>level</code> equals zero <code>width</code> and <code>height</code>
must be a multiple of 4.</p>
<p>
If they are not an <code>INVALID_OPERATION</code> error is generated.
</p>
</dd>
</dl>
</feature>
</features>
</overview>
<idl xml:space="preserve">
Expand Down Expand Up @@ -93,6 +115,11 @@ interface EXT_texture_compression_bptc {
ceil(width / 4) * ceil(height / 4) * 16
</code></blockquote>
</error>
<error enum="INVALID_OPERATION">
The error <code>INVALID_OPERATION</code> is generated by <code>compressedTexImage2D</code> and
<code>compressedTexSubImage2D</code> if the <code>level</code> parameter is
<code>0</code> and the <code>width</code> or <code>height</code> is not a multiple of 4.
</error>
</errors>

<history>
Expand All @@ -109,5 +136,11 @@ interface EXT_texture_compression_bptc {
<revision date="2018/11/05">
<change>Moved to Community Approved status.</change>
</revision>
<revision date="2020/06/25">
<change>Clarified <code>texImage2D</code> entry point.</change>
</revision>
<revision date="2020/07/07">
<change>Clarified WebGL-specific dimensions restriction.</change>
</revision>
</history>
</extension>
Loading