Auto merge of #20699 - simartin:issue_20593, r=nox

Issue #20593: Implement proper checks in WebGLRenderingContext's getFramebufferAttachmentParameter().

Add missing input checks.

---
- [X] `./mach build -d` does not report any errors
- [X] `./mach build-geckolib` does not report any errors
- [X] `./mach test-tidy` does not report any errors
- [X] These changes fix #20593
- [X] There are tests for these changes

<!-- 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/20699)
<!-- Reviewable:end -->
This commit is contained in:
bors-servo 2018-06-18 12:01:39 -04:00 committed by GitHub
commit 1f562af418
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 154 additions and 1 deletions

View file

@ -39282,6 +39282,12 @@
{}
]
],
"mozilla/webgl/getFramebufferAttachmentParameter.html": [
[
"/_mozilla/mozilla/webgl/getFramebufferAttachmentParameter.html",
{}
]
],
"mozilla/webgl/get_supported_extensions.html": [
[
"/_mozilla/mozilla/webgl/get_supported_extensions.html",
@ -70951,6 +70957,10 @@
"a163189d8674be83c9e8c9055da31a1c5ed46be5",
"support"
],
"mozilla/webgl/getFramebufferAttachmentParameter.html": [
"71a8c1829f703ff43a30d1b3fb9b99e59d3db973",
"testharness"
],
"mozilla/webgl/get_supported_extensions.html": [
"719c7c4cb91f3c1b2bbc4cbe35285fc63ce6263f",
"testharness"

View file

@ -0,0 +1,114 @@
<!doctype html>
<meta charset="utf-8">
<title>getFramebufferAttachmentParameter input type check (issue #20593)</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
test(function() {
var gl = document.createElement("canvas").getContext("webgl");
// Error if no buffer is bound
gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER,
gl.COLOR_ATTACHMENT0,
gl.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE);
assert_equals(gl.INVALID_OPERATION, gl.getError());
// Bind a framebuffer
var framebuffer = gl.createFramebuffer();
gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);
// 'target' parameter checks
gl.getFramebufferAttachmentParameter(gl.READ_FRAMEBUFFER,
gl.COLOR_ATTACHMENT0,
gl.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE);
assert_equals(gl.INVALID_ENUM, gl.getError());
gl.getFramebufferAttachmentParameter(gl.DRAW_FRAMEBUFFER,
gl.COLOR_ATTACHMENT0,
gl.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE);
assert_equals(gl.INVALID_ENUM, gl.getError());
gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER,
gl.COLOR_ATTACHMENT0,
gl.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE);
assert_equals(gl.NO_ERROR, gl.getError());
// 'attachment' parameter checks
gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER,
gl.DEPTH_STENCIL_ATTACHMENT,
gl.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE);
assert_equals(gl.NO_ERROR, gl.getError());
gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER,
gl.COLOR_ATTACHMENT0,
gl.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE);
assert_equals(gl.NO_ERROR, gl.getError());
gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER,
gl.DEPTH_ATTACHMENT,
gl.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE);
assert_equals(gl.NO_ERROR, gl.getError());
gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER,
gl.STENCIL_ATTACHMENT,
gl.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE);
assert_equals(gl.NO_ERROR, gl.getError());
// 'pname' parameter checks: invalid values
gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER,
gl.STENCIL_ATTACHMENT,
gl.FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE);
assert_equals(gl.INVALID_ENUM, gl.getError());
gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER,
gl.STENCIL_ATTACHMENT,
gl.FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE);
assert_equals(gl.INVALID_ENUM, gl.getError());
// 'pname' parameter checks: no attached object at the named attachment point
gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER,
gl.STENCIL_ATTACHMENT,
gl.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME);
assert_equals(gl.INVALID_ENUM, gl.getError());
gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER,
gl.STENCIL_ATTACHMENT,
gl.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE);
assert_equals(gl.NO_ERROR, gl.getError());
// 'pname' parameter checks: the attached object at the named attachment point is GL_RENDERBUFFER
var renderbuffer = gl.createRenderbuffer();
gl.bindRenderbuffer(gl.RENDERBUFFER, renderbuffer);
gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.RENDERBUFFER, renderbuffer);
gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER,
gl.COLOR_ATTACHMENT0,
gl.FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL);
assert_equals(gl.INVALID_ENUM, gl.getError());
gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER,
gl.COLOR_ATTACHMENT0,
gl.FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE);
assert_equals(gl.INVALID_ENUM, gl.getError());
gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER,
gl.COLOR_ATTACHMENT0,
gl.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE);
assert_equals(gl.NO_ERROR, gl.getError());
gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER,
gl.COLOR_ATTACHMENT0,
gl.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME);
assert_equals(gl.NO_ERROR, gl.getError());
// 'pname' parameter checks: the attached object at the named attachment point is GL_TEXTURE
var texture = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, texture);
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0);
gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER,
gl.COLOR_ATTACHMENT0,
gl.FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL);
assert_equals(gl.NO_ERROR, gl.getError());
gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER,
gl.COLOR_ATTACHMENT0,
gl.FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE);
assert_equals(gl.NO_ERROR, gl.getError());
gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER,
gl.COLOR_ATTACHMENT0,
gl.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE);
assert_equals(gl.NO_ERROR, gl.getError());
gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER,
gl.COLOR_ATTACHMENT0,
gl.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME);
assert_equals(gl.NO_ERROR, gl.getError());
});
</script>