aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2018-03-22 12:28:30 -0400
committerGitHub <noreply@github.com>2018-03-22 12:28:30 -0400
commit4aaac61a87f4e45e46d0591be73ce108e562c33f (patch)
treee8786e5026db056b14393adeb61e63011f619bf4
parent2de89377db63ec03ae3b1256486c4c32b33f5fce (diff)
parentee5bdbbd8b99b58eda19c117b1a06e4a90a61bb1 (diff)
downloadservo-4aaac61a87f4e45e46d0591be73ce108e562c33f.tar.gz
servo-4aaac61a87f4e45e46d0591be73ce108e562c33f.zip
Auto merge of #20317 - gootorov:webgl-getFramebufferAttachmentParameter, r=jdm
Implement WebGL getFrameBufferAttachmentParameter API <!-- Please describe your changes on the following line: --> Implementation of `getFramebufferAttachmentParameter` as in WebGL1 specification. Part of https://github.com/servo/servo/issues/10209. r? emilio or jdm. --- <!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: --> - [x] `./mach build -d` does not report any errors - [x] `./mach test-tidy` does not report any errors - [ ] These changes fix #__ (github issue number if applicable). <!-- Either: --> - [x] There are tests for these changes <!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.--> <!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. --> <!-- 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/20317) <!-- Reviewable:end -->
-rw-r--r--components/canvas/webgl_thread.rs14
-rw-r--r--components/canvas_traits/webgl.rs2
-rw-r--r--components/script/dom/webgl2renderingcontext.rs12
-rw-r--r--components/script/dom/webglframebuffer.rs25
-rw-r--r--components/script/dom/webglrenderingcontext.rs94
-rw-r--r--components/script/dom/webidls/WebGLRenderingContext.webidl4
-rw-r--r--tests/wpt/mozilla/meta/webgl/conformance-1.0.3/conformance/context/methods.html.ini9
-rw-r--r--tests/wpt/mozilla/meta/webgl/conformance-1.0.3/conformance/renderbuffers/framebuffer-test.html.ini6
-rw-r--r--tests/wpt/mozilla/meta/webgl/conformance-2.0.0/conformance2/context/methods-2.html.ini185
-rw-r--r--tests/wpt/mozilla/meta/webgl/conformance-2.0.0/conformance2/renderbuffers/framebuffer-test.html.ini97
10 files changed, 338 insertions, 110 deletions
diff --git a/components/canvas/webgl_thread.rs b/components/canvas/webgl_thread.rs
index e27d85c4395..785df7fd6c2 100644
--- a/components/canvas/webgl_thread.rs
+++ b/components/canvas/webgl_thread.rs
@@ -750,6 +750,8 @@ impl WebGLImpl {
Self::active_uniform(ctx.gl(), program_id, index, chan),
WebGLCommand::GetAttribLocation(program_id, name, chan) =>
Self::attrib_location(ctx.gl(), program_id, name, chan),
+ WebGLCommand::GetFramebufferAttachmentParameter(target, attachment, pname, chan) =>
+ Self::get_framebuffer_attachment_parameter(ctx.gl(), target, attachment, pname, chan),
WebGLCommand::GetVertexAttrib(index, pname, chan) =>
Self::vertex_attrib(ctx.gl(), index, pname, chan),
WebGLCommand::GetVertexAttribOffset(index, pname, chan) =>
@@ -1165,6 +1167,18 @@ impl WebGLImpl {
chan.send(gl.get_string(gl::EXTENSIONS)).unwrap();
}
+ // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.6
+ fn get_framebuffer_attachment_parameter(
+ gl: &gl::Gl,
+ target: u32,
+ attachment: u32,
+ pname: u32,
+ chan: WebGLSender<i32>
+ ) {
+ let parameter = gl.get_framebuffer_attachment_parameter_iv(target, attachment, pname);
+ chan.send(parameter).unwrap();
+ }
+
fn uniform_location(gl: &gl::Gl,
program_id: WebGLProgramId,
name: String,
diff --git a/components/canvas_traits/webgl.rs b/components/canvas_traits/webgl.rs
index 826003d2d92..540e48fb652 100644
--- a/components/canvas_traits/webgl.rs
+++ b/components/canvas_traits/webgl.rs
@@ -219,6 +219,7 @@ pub enum WebGLCommand {
GetVertexAttribOffset(u32, u32, WebGLSender<isize>),
GetShaderInfoLog(WebGLShaderId, WebGLSender<String>),
GetProgramInfoLog(WebGLProgramId, WebGLSender<String>),
+ GetFramebufferAttachmentParameter(u32, u32, u32, WebGLSender<i32>),
PolygonOffset(f32, f32),
RenderbufferStorage(u32, u32, i32, i32),
ReadPixels(i32, i32, i32, i32, u32, u32, WebGLSender<Vec<u8>>),
@@ -490,6 +491,7 @@ impl fmt::Debug for WebGLCommand {
GetProgramInfoLog(..) => "GetProgramInfoLog",
GetVertexAttrib(..) => "GetVertexAttrib",
GetVertexAttribOffset(..) => "GetVertexAttribOffset",
+ GetFramebufferAttachmentParameter(..) => "GetFramebufferAttachmentParameter",
PolygonOffset(..) => "PolygonOffset",
ReadPixels(..) => "ReadPixels",
RenderbufferStorage(..) => "RenderbufferStorage",
diff --git a/components/script/dom/webgl2renderingcontext.rs b/components/script/dom/webgl2renderingcontext.rs
index 2a25c450b08..2d1186c0dcc 100644
--- a/components/script/dom/webgl2renderingcontext.rs
+++ b/components/script/dom/webgl2renderingcontext.rs
@@ -142,6 +142,18 @@ impl WebGL2RenderingContextMethods for WebGL2RenderingContext {
self.base.GetExtension(cx, name)
}
+ #[allow(unsafe_code)]
+ /// https://www.khronos.org/registry/webgl/specs/latest/2.0/#3.7.4
+ unsafe fn GetFramebufferAttachmentParameter(
+ &self,
+ cx: *mut JSContext,
+ target: u32,
+ attachment: u32,
+ pname: u32
+ ) -> JSVal {
+ self.base.GetFramebufferAttachmentParameter(cx, target, attachment, pname)
+ }
+
/// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.3
fn ActiveTexture(&self, texture: u32) {
self.base.ActiveTexture(texture)
diff --git a/components/script/dom/webglframebuffer.rs b/components/script/dom/webglframebuffer.rs
index c9165609cdb..ccea1efec7b 100644
--- a/components/script/dom/webglframebuffer.rs
+++ b/components/script/dom/webglframebuffer.rs
@@ -25,6 +25,12 @@ enum WebGLFramebufferAttachment {
Texture { texture: Dom<WebGLTexture>, level: i32 },
}
+#[derive(Clone, JSTraceable, MallocSizeOf)]
+pub enum WebGLFramebufferAttachmentRoot {
+ Renderbuffer(DomRoot<WebGLRenderbuffer>),
+ Texture(DomRoot<WebGLTexture>),
+}
+
#[dom_struct]
pub struct WebGLFramebuffer {
webgl_object: WebGLObject,
@@ -213,6 +219,25 @@ impl WebGLFramebuffer {
Ok(())
}
+ pub fn attachment(&self, attachment: u32) -> Option<WebGLFramebufferAttachmentRoot> {
+ let binding = match attachment {
+ constants::COLOR_ATTACHMENT0 => &self.color,
+ constants::DEPTH_ATTACHMENT => &self.depth,
+ constants::STENCIL_ATTACHMENT => &self.stencil,
+ constants::DEPTH_STENCIL_ATTACHMENT => &self.depthstencil,
+ _ => return None,
+ };
+
+ binding.borrow().as_ref().map(|bin| {
+ match bin {
+ &WebGLFramebufferAttachment::Renderbuffer(ref rb) =>
+ WebGLFramebufferAttachmentRoot::Renderbuffer(DomRoot::from_ref(&rb)),
+ &WebGLFramebufferAttachment::Texture { ref texture, .. } =>
+ WebGLFramebufferAttachmentRoot::Texture(DomRoot::from_ref(&texture)),
+ }
+ })
+ }
+
pub fn texture2d(&self, attachment: u32, textarget: u32, texture: Option<&WebGLTexture>,
level: i32) -> WebGLResult<()> {
let binding = match attachment {
diff --git a/components/script/dom/webglrenderingcontext.rs b/components/script/dom/webglrenderingcontext.rs
index 64990da1504..ad572751607 100644
--- a/components/script/dom/webglrenderingcontext.rs
+++ b/components/script/dom/webglrenderingcontext.rs
@@ -10,6 +10,7 @@ use canvas_traits::webgl::DOMToTextureCommand;
use canvas_traits::webgl::WebGLError::*;
use canvas_traits::webgl::webgl_channel;
use dom::bindings::cell::DomRefCell;
+use dom::bindings::codegen::Bindings::WebGL2RenderingContextBinding::WebGL2RenderingContextConstants as WebGL2Constants;
use dom::bindings::codegen::Bindings::WebGLRenderingContextBinding::{self, WebGLContextAttributes};
use dom::bindings::codegen::Bindings::WebGLRenderingContextBinding::WebGLRenderingContextConstants as constants;
use dom::bindings::codegen::Bindings::WebGLRenderingContextBinding::WebGLRenderingContextMethods;
@@ -33,7 +34,7 @@ use dom::webgl_validations::types::{TexDataType, TexFormat, TexImageTarget};
use dom::webglactiveinfo::WebGLActiveInfo;
use dom::webglbuffer::WebGLBuffer;
use dom::webglcontextevent::WebGLContextEvent;
-use dom::webglframebuffer::WebGLFramebuffer;
+use dom::webglframebuffer::{WebGLFramebuffer, WebGLFramebufferAttachmentRoot};
use dom::webglprogram::WebGLProgram;
use dom::webglrenderbuffer::WebGLRenderbuffer;
use dom::webglshader::WebGLShader;
@@ -1554,6 +1555,10 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.6
fn BindFramebuffer(&self, target: u32, framebuffer: Option<&WebGLFramebuffer>) {
+ if target == WebGL2Constants::READ_FRAMEBUFFER {
+ return self.webgl_error(InvalidEnum);
+ }
+
if target != constants::FRAMEBUFFER {
return self.webgl_error(InvalidOperation);
}
@@ -2297,6 +2302,93 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
}
}
+ #[allow(unsafe_code)]
+ // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.6
+ unsafe fn GetFramebufferAttachmentParameter(
+ &self,
+ cx: *mut JSContext,
+ target: u32,
+ attachment: u32,
+ pname: u32
+ ) -> JSVal {
+ // Check if currently bound framebuffer is non-zero as per spec.
+ if self.bound_framebuffer.get().is_none() {
+ self.webgl_error(InvalidOperation);
+ return NullValue();
+ }
+
+ // Note: commented out stuff is for the WebGL2 standard.
+ let target_matches = match target {
+ // constants::READ_FRAMEBUFFER |
+ // constants::DRAW_FRAMEBUFFER => true,
+ constants::FRAMEBUFFER => true,
+ _ => false
+ };
+ let attachment_matches = match attachment {
+ // constants::MAX_COLOR_ATTACHMENTS ... gl::COLOR_ATTACHMENT0 |
+ // constants::BACK |
+ constants::COLOR_ATTACHMENT0 |
+ constants::DEPTH_STENCIL_ATTACHMENT |
+ constants::DEPTH_ATTACHMENT |
+ constants::STENCIL_ATTACHMENT => true,
+ _ => false,
+ };
+ let pname_matches = match pname {
+ // constants::FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE |
+ // constants::FRAMEBUFFER_ATTACHMENT_BLUE_SIZE |
+ // constants::FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING |
+ // constants::FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE |
+ // constants::FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE |
+ // constants::FRAMEBUFFER_ATTACHMENT_GREEN_SIZE |
+ // constants::FRAMEBUFFER_ATTACHMENT_RED_SIZE |
+ // constants::FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE |
+ // constants::FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER |
+ constants::FRAMEBUFFER_ATTACHMENT_OBJECT_NAME |
+ constants::FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE |
+ constants::FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE |
+ constants::FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL => true,
+ _ => false
+ };
+
+ if !target_matches || !attachment_matches || !pname_matches {
+ self.webgl_error(InvalidEnum);
+ return NullValue();
+ }
+
+ // From the GLES2 spec:
+ //
+ // If the value of FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE is NONE,
+ // then querying any other pname will generate INVALID_ENUM.
+ //
+ // otherwise, return `WebGLRenderbuffer` or `WebGLTexture` dom object
+ if pname == constants::FRAMEBUFFER_ATTACHMENT_OBJECT_NAME {
+ // if fb is None, an INVALID_OPERATION is returned
+ // at the beggining of the function, so `.unwrap()` will never panic
+ let fb = self.bound_framebuffer.get().unwrap();
+ if let Some(webgl_attachment) = fb.attachment(attachment) {
+ match webgl_attachment {
+ WebGLFramebufferAttachmentRoot::Renderbuffer(rb) => {
+ rooted!(in(cx) let mut rval = NullValue());
+ rb.to_jsval(cx, rval.handle_mut());
+ return rval.get();
+ },
+ WebGLFramebufferAttachmentRoot::Texture(texture) => {
+ rooted!(in(cx) let mut rval = NullValue());
+ texture.to_jsval(cx, rval.handle_mut());
+ return rval.get();
+ },
+ }
+ }
+ self.webgl_error(InvalidEnum);
+ return NullValue();
+ }
+
+ let (sender, receiver) = webgl_channel().unwrap();
+ self.send_command(WebGLCommand::GetFramebufferAttachmentParameter(target, attachment, pname, sender));
+
+ Int32Value(receiver.recv().unwrap())
+ }
+
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.9
fn GetProgramInfoLog(&self, program: Option<&WebGLProgram>) -> Option<DOMString> {
if let Some(program) = program {
diff --git a/components/script/dom/webidls/WebGLRenderingContext.webidl b/components/script/dom/webidls/WebGLRenderingContext.webidl
index 3f845126701..05e9212d974 100644
--- a/components/script/dom/webidls/WebGLRenderingContext.webidl
+++ b/components/script/dom/webidls/WebGLRenderingContext.webidl
@@ -589,8 +589,8 @@ interface WebGLRenderingContextBase
[WebGLHandlesContextLoss] GLenum getError();
- //any getFramebufferAttachmentParameter(GLenum target, GLenum attachment,
- // GLenum pname);
+ any getFramebufferAttachmentParameter(GLenum target, GLenum attachment,
+ GLenum pname);
any getProgramParameter(WebGLProgram? program, GLenum pname);
DOMString? getProgramInfoLog(WebGLProgram? program);
//any getRenderbufferParameter(GLenum target, GLenum pname);
diff --git a/tests/wpt/mozilla/meta/webgl/conformance-1.0.3/conformance/context/methods.html.ini b/tests/wpt/mozilla/meta/webgl/conformance-1.0.3/conformance/context/methods.html.ini
index e161e1d0cf8..0f3f17e39b3 100644
--- a/tests/wpt/mozilla/meta/webgl/conformance-1.0.3/conformance/context/methods.html.ini
+++ b/tests/wpt/mozilla/meta/webgl/conformance-1.0.3/conformance/context/methods.html.ini
@@ -3,15 +3,12 @@
[WebGL test #0: Property either does not exist or is not a function: getAttachedShaders]
expected: FAIL
- [WebGL test #1: Property either does not exist or is not a function: getFramebufferAttachmentParameter]
+ [WebGL test #1: Property either does not exist or is not a function: getRenderbufferParameter]
expected: FAIL
- [WebGL test #2: Property either does not exist or is not a function: getRenderbufferParameter]
+ [WebGL test #2: Property either does not exist or is not a function: getUniform]
expected: FAIL
- [WebGL test #3: Property either does not exist or is not a function: getUniform]
- expected: FAIL
-
- [WebGL test #4: Property either does not exist or is not a function: isContextLost]
+ [WebGL test #3: Property either does not exist or is not a function: isContextLost]
expected: FAIL
diff --git a/tests/wpt/mozilla/meta/webgl/conformance-1.0.3/conformance/renderbuffers/framebuffer-test.html.ini b/tests/wpt/mozilla/meta/webgl/conformance-1.0.3/conformance/renderbuffers/framebuffer-test.html.ini
deleted file mode 100644
index 6172d868b20..00000000000
--- a/tests/wpt/mozilla/meta/webgl/conformance-1.0.3/conformance/renderbuffers/framebuffer-test.html.ini
+++ /dev/null
@@ -1,6 +0,0 @@
-[framebuffer-test.html]
- type: testharness
- expected: ERROR
- [WebGL test #1: successfullyParsed should be true (of type boolean). Was undefined (of type undefined).]
- expected: FAIL
-
diff --git a/tests/wpt/mozilla/meta/webgl/conformance-2.0.0/conformance2/context/methods-2.html.ini b/tests/wpt/mozilla/meta/webgl/conformance-2.0.0/conformance2/context/methods-2.html.ini
index 05ed89bcd6e..fa30add16ed 100644
--- a/tests/wpt/mozilla/meta/webgl/conformance-2.0.0/conformance2/context/methods-2.html.ini
+++ b/tests/wpt/mozilla/meta/webgl/conformance-2.0.0/conformance2/context/methods-2.html.ini
@@ -2,279 +2,276 @@
[WebGL test #0: Property either does not exist or is not a function: getAttachedShaders]
expected: FAIL
- [WebGL test #1: Property either does not exist or is not a function: getFramebufferAttachmentParameter]
+ [WebGL test #1: Property either does not exist or is not a function: getRenderbufferParameter]
expected: FAIL
- [WebGL test #2: Property either does not exist or is not a function: getRenderbufferParameter]
+ [WebGL test #2: Property either does not exist or is not a function: getUniform]
expected: FAIL
- [WebGL test #3: Property either does not exist or is not a function: getUniform]
+ [WebGL test #3: Property either does not exist or is not a function: isContextLost]
expected: FAIL
- [WebGL test #4: Property either does not exist or is not a function: isContextLost]
+ [WebGL test #4: Property either does not exist or is not a function: getBufferSubData]
expected: FAIL
- [WebGL test #5: Property either does not exist or is not a function: getBufferSubData]
+ [WebGL test #5: Property either does not exist or is not a function: copyBufferSubData]
expected: FAIL
- [WebGL test #6: Property either does not exist or is not a function: copyBufferSubData]
+ [WebGL test #6: Property either does not exist or is not a function: blitFramebuffer]
expected: FAIL
- [WebGL test #7: Property either does not exist or is not a function: blitFramebuffer]
+ [WebGL test #7: Property either does not exist or is not a function: framebufferTextureLayer]
expected: FAIL
- [WebGL test #8: Property either does not exist or is not a function: framebufferTextureLayer]
+ [WebGL test #8: Property either does not exist or is not a function: getInternalformatParameter]
expected: FAIL
- [WebGL test #9: Property either does not exist or is not a function: getInternalformatParameter]
+ [WebGL test #9: Property either does not exist or is not a function: invalidateFramebuffer]
expected: FAIL
- [WebGL test #10: Property either does not exist or is not a function: invalidateFramebuffer]
+ [WebGL test #10: Property either does not exist or is not a function: invalidateSubFramebuffer]
expected: FAIL
- [WebGL test #11: Property either does not exist or is not a function: invalidateSubFramebuffer]
+ [WebGL test #11: Property either does not exist or is not a function: readBuffer]
expected: FAIL
- [WebGL test #12: Property either does not exist or is not a function: readBuffer]
+ [WebGL test #12: Property either does not exist or is not a function: renderbufferStorageMultisample]
expected: FAIL
- [WebGL test #13: Property either does not exist or is not a function: renderbufferStorageMultisample]
+ [WebGL test #13: Property either does not exist or is not a function: texImage3D]
expected: FAIL
- [WebGL test #14: Property either does not exist or is not a function: texImage3D]
+ [WebGL test #14: Property either does not exist or is not a function: texStorage2D]
expected: FAIL
- [WebGL test #15: Property either does not exist or is not a function: texStorage2D]
+ [WebGL test #15: Property either does not exist or is not a function: texStorage3D]
expected: FAIL
- [WebGL test #16: Property either does not exist or is not a function: texStorage3D]
+ [WebGL test #16: Property either does not exist or is not a function: texSubImage3D]
expected: FAIL
- [WebGL test #17: Property either does not exist or is not a function: texSubImage3D]
+ [WebGL test #17: Property either does not exist or is not a function: copyTexSubImage3D]
expected: FAIL
- [WebGL test #18: Property either does not exist or is not a function: copyTexSubImage3D]
+ [WebGL test #18: Property either does not exist or is not a function: compressedTexImage3D]
expected: FAIL
- [WebGL test #19: Property either does not exist or is not a function: compressedTexImage3D]
+ [WebGL test #19: Property either does not exist or is not a function: compressedTexSubImage3D]
expected: FAIL
- [WebGL test #20: Property either does not exist or is not a function: compressedTexSubImage3D]
+ [WebGL test #20: Property either does not exist or is not a function: getFragDataLocation]
expected: FAIL
- [WebGL test #21: Property either does not exist or is not a function: getFragDataLocation]
+ [WebGL test #21: Property either does not exist or is not a function: uniform1ui]
expected: FAIL
- [WebGL test #22: Property either does not exist or is not a function: uniform1ui]
+ [WebGL test #22: Property either does not exist or is not a function: uniform2ui]
expected: FAIL
- [WebGL test #23: Property either does not exist or is not a function: uniform2ui]
+ [WebGL test #23: Property either does not exist or is not a function: uniform3ui]
expected: FAIL
- [WebGL test #24: Property either does not exist or is not a function: uniform3ui]
+ [WebGL test #24: Property either does not exist or is not a function: uniform4ui]
expected: FAIL
- [WebGL test #25: Property either does not exist or is not a function: uniform4ui]
+ [WebGL test #25: Property either does not exist or is not a function: uniform1uiv]
expected: FAIL
- [WebGL test #26: Property either does not exist or is not a function: uniform1uiv]
+ [WebGL test #26: Property either does not exist or is not a function: uniform2uiv]
expected: FAIL
- [WebGL test #27: Property either does not exist or is not a function: uniform2uiv]
+ [WebGL test #27: Property either does not exist or is not a function: uniform3uiv]
expected: FAIL
- [WebGL test #28: Property either does not exist or is not a function: uniform3uiv]
+ [WebGL test #28: Property either does not exist or is not a function: uniform4uiv]
expected: FAIL
- [WebGL test #29: Property either does not exist or is not a function: uniform4uiv]
+ [WebGL test #29: Property either does not exist or is not a function: uniformMatrix2x3fv]
expected: FAIL
- [WebGL test #30: Property either does not exist or is not a function: uniformMatrix2x3fv]
+ [WebGL test #30: Property either does not exist or is not a function: uniformMatrix3x2fv]
expected: FAIL
- [WebGL test #31: Property either does not exist or is not a function: uniformMatrix3x2fv]
+ [WebGL test #31: Property either does not exist or is not a function: uniformMatrix2x4fv]
expected: FAIL
- [WebGL test #32: Property either does not exist or is not a function: uniformMatrix2x4fv]
+ [WebGL test #32: Property either does not exist or is not a function: uniformMatrix4x2fv]
expected: FAIL
- [WebGL test #33: Property either does not exist or is not a function: uniformMatrix4x2fv]
+ [WebGL test #33: Property either does not exist or is not a function: uniformMatrix3x4fv]
expected: FAIL
- [WebGL test #34: Property either does not exist or is not a function: uniformMatrix3x4fv]
+ [WebGL test #34: Property either does not exist or is not a function: uniformMatrix4x3fv]
expected: FAIL
- [WebGL test #35: Property either does not exist or is not a function: uniformMatrix4x3fv]
+ [WebGL test #35: Property either does not exist or is not a function: vertexAttribI4i]
expected: FAIL
- [WebGL test #36: Property either does not exist or is not a function: vertexAttribI4i]
+ [WebGL test #36: Property either does not exist or is not a function: vertexAttribI4iv]
expected: FAIL
- [WebGL test #37: Property either does not exist or is not a function: vertexAttribI4iv]
+ [WebGL test #37: Property either does not exist or is not a function: vertexAttribI4ui]
expected: FAIL
- [WebGL test #38: Property either does not exist or is not a function: vertexAttribI4ui]
+ [WebGL test #38: Property either does not exist or is not a function: vertexAttribI4uiv]
expected: FAIL
- [WebGL test #39: Property either does not exist or is not a function: vertexAttribI4uiv]
+ [WebGL test #39: Property either does not exist or is not a function: vertexAttribIPointer]
expected: FAIL
- [WebGL test #40: Property either does not exist or is not a function: vertexAttribIPointer]
+ [WebGL test #40: Property either does not exist or is not a function: vertexAttribDivisor]
expected: FAIL
- [WebGL test #41: Property either does not exist or is not a function: vertexAttribDivisor]
+ [WebGL test #41: Property either does not exist or is not a function: drawArraysInstanced]
expected: FAIL
- [WebGL test #42: Property either does not exist or is not a function: drawArraysInstanced]
+ [WebGL test #42: Property either does not exist or is not a function: drawElementsInstanced]
expected: FAIL
- [WebGL test #43: Property either does not exist or is not a function: drawElementsInstanced]
+ [WebGL test #43: Property either does not exist or is not a function: drawRangeElements]
expected: FAIL
- [WebGL test #44: Property either does not exist or is not a function: drawRangeElements]
+ [WebGL test #44: Property either does not exist or is not a function: drawBuffers]
expected: FAIL
- [WebGL test #45: Property either does not exist or is not a function: drawBuffers]
+ [WebGL test #45: Property either does not exist or is not a function: clearBufferiv]
expected: FAIL
- [WebGL test #46: Property either does not exist or is not a function: clearBufferiv]
+ [WebGL test #46: Property either does not exist or is not a function: clearBufferuiv]
expected: FAIL
- [WebGL test #47: Property either does not exist or is not a function: clearBufferuiv]
+ [WebGL test #47: Property either does not exist or is not a function: clearBufferfv]
expected: FAIL
- [WebGL test #48: Property either does not exist or is not a function: clearBufferfv]
+ [WebGL test #48: Property either does not exist or is not a function: clearBufferfi]
expected: FAIL
- [WebGL test #49: Property either does not exist or is not a function: clearBufferfi]
+ [WebGL test #49: Property either does not exist or is not a function: createQuery]
expected: FAIL
- [WebGL test #50: Property either does not exist or is not a function: createQuery]
+ [WebGL test #50: Property either does not exist or is not a function: deleteQuery]
expected: FAIL
- [WebGL test #51: Property either does not exist or is not a function: deleteQuery]
+ [WebGL test #51: Property either does not exist or is not a function: isQuery]
expected: FAIL
- [WebGL test #52: Property either does not exist or is not a function: isQuery]
+ [WebGL test #52: Property either does not exist or is not a function: beginQuery]
expected: FAIL
- [WebGL test #53: Property either does not exist or is not a function: beginQuery]
+ [WebGL test #53: Property either does not exist or is not a function: endQuery]
expected: FAIL
- [WebGL test #54: Property either does not exist or is not a function: endQuery]
+ [WebGL test #54: Property either does not exist or is not a function: getQuery]
expected: FAIL
- [WebGL test #55: Property either does not exist or is not a function: getQuery]
+ [WebGL test #55: Property either does not exist or is not a function: getQueryParameter]
expected: FAIL
- [WebGL test #56: Property either does not exist or is not a function: getQueryParameter]
+ [WebGL test #56: Property either does not exist or is not a function: createSampler]
expected: FAIL
- [WebGL test #57: Property either does not exist or is not a function: createSampler]
+ [WebGL test #57: Property either does not exist or is not a function: deleteSampler]
expected: FAIL
- [WebGL test #58: Property either does not exist or is not a function: deleteSampler]
+ [WebGL test #58: Property either does not exist or is not a function: isSampler]
expected: FAIL
- [WebGL test #59: Property either does not exist or is not a function: isSampler]
+ [WebGL test #59: Property either does not exist or is not a function: bindSampler]
expected: FAIL
- [WebGL test #60: Property either does not exist or is not a function: bindSampler]
+ [WebGL test #60: Property either does not exist or is not a function: samplerParameteri]
expected: FAIL
- [WebGL test #61: Property either does not exist or is not a function: samplerParameteri]
+ [WebGL test #61: Property either does not exist or is not a function: samplerParameterf]
expected: FAIL
- [WebGL test #62: Property either does not exist or is not a function: samplerParameterf]
+ [WebGL test #62: Property either does not exist or is not a function: getSamplerParameter]
expected: FAIL
- [WebGL test #63: Property either does not exist or is not a function: getSamplerParameter]
+ [WebGL test #63: Property either does not exist or is not a function: fenceSync]
expected: FAIL
- [WebGL test #64: Property either does not exist or is not a function: fenceSync]
+ [WebGL test #64: Property either does not exist or is not a function: isSync]
expected: FAIL
- [WebGL test #65: Property either does not exist or is not a function: isSync]
+ [WebGL test #65: Property either does not exist or is not a function: deleteSync]
expected: FAIL
- [WebGL test #66: Property either does not exist or is not a function: deleteSync]
+ [WebGL test #66: Property either does not exist or is not a function: clientWaitSync]
expected: FAIL
- [WebGL test #67: Property either does not exist or is not a function: clientWaitSync]
+ [WebGL test #67: Property either does not exist or is not a function: waitSync]
expected: FAIL
- [WebGL test #68: Property either does not exist or is not a function: waitSync]
+ [WebGL test #68: Property either does not exist or is not a function: getSyncParameter]
expected: FAIL
- [WebGL test #69: Property either does not exist or is not a function: getSyncParameter]
+ [WebGL test #69: Property either does not exist or is not a function: createTransformFeedback]
expected: FAIL
- [WebGL test #70: Property either does not exist or is not a function: createTransformFeedback]
+ [WebGL test #70: Property either does not exist or is not a function: deleteTransformFeedback]
expected: FAIL
- [WebGL test #71: Property either does not exist or is not a function: deleteTransformFeedback]
+ [WebGL test #71: Property either does not exist or is not a function: isTransformFeedback]
expected: FAIL
- [WebGL test #72: Property either does not exist or is not a function: isTransformFeedback]
+ [WebGL test #72: Property either does not exist or is not a function: bindTransformFeedback]
expected: FAIL
- [WebGL test #73: Property either does not exist or is not a function: bindTransformFeedback]
+ [WebGL test #73: Property either does not exist or is not a function: beginTransformFeedback]
expected: FAIL
- [WebGL test #74: Property either does not exist or is not a function: beginTransformFeedback]
+ [WebGL test #74: Property either does not exist or is not a function: endTransformFeedback]
expected: FAIL
- [WebGL test #75: Property either does not exist or is not a function: endTransformFeedback]
+ [WebGL test #75: Property either does not exist or is not a function: transformFeedbackVaryings]
expected: FAIL
- [WebGL test #76: Property either does not exist or is not a function: transformFeedbackVaryings]
+ [WebGL test #76: Property either does not exist or is not a function: getTransformFeedbackVarying]
expected: FAIL
- [WebGL test #77: Property either does not exist or is not a function: getTransformFeedbackVarying]
+ [WebGL test #77: Property either does not exist or is not a function: pauseTransformFeedback]
expected: FAIL
- [WebGL test #78: Property either does not exist or is not a function: pauseTransformFeedback]
+ [WebGL test #78: Property either does not exist or is not a function: resumeTransformFeedback]
expected: FAIL
- [WebGL test #79: Property either does not exist or is not a function: resumeTransformFeedback]
+ [WebGL test #79: Property either does not exist or is not a function: bindBufferBase]
expected: FAIL
- [WebGL test #80: Property either does not exist or is not a function: bindBufferBase]
+ [WebGL test #80: Property either does not exist or is not a function: bindBufferRange]
expected: FAIL
- [WebGL test #81: Property either does not exist or is not a function: bindBufferRange]
+ [WebGL test #81: Property either does not exist or is not a function: getIndexedParameter]
expected: FAIL
- [WebGL test #82: Property either does not exist or is not a function: getIndexedParameter]
+ [WebGL test #82: Property either does not exist or is not a function: getUniformIndices]
expected: FAIL
- [WebGL test #83: Property either does not exist or is not a function: getUniformIndices]
+ [WebGL test #83: Property either does not exist or is not a function: getActiveUniforms]
expected: FAIL
- [WebGL test #84: Property either does not exist or is not a function: getActiveUniforms]
+ [WebGL test #84: Property either does not exist or is not a function: getUniformBlockIndex]
expected: FAIL
- [WebGL test #85: Property either does not exist or is not a function: getUniformBlockIndex]
+ [WebGL test #85: Property either does not exist or is not a function: getActiveUniformBlockParameter]
expected: FAIL
- [WebGL test #86: Property either does not exist or is not a function: getActiveUniformBlockParameter]
+ [WebGL test #86: Property either does not exist or is not a function: getActiveUniformBlockName]
expected: FAIL
- [WebGL test #87: Property either does not exist or is not a function: getActiveUniformBlockName]
+ [WebGL test #87: Property either does not exist or is not a function: uniformBlockBinding]
expected: FAIL
- [WebGL test #88: Property either does not exist or is not a function: uniformBlockBinding]
+ [WebGL test #88: Property either does not exist or is not a function: createVertexArray]
expected: FAIL
- [WebGL test #89: Property either does not exist or is not a function: createVertexArray]
+ [WebGL test #89: Property either does not exist or is not a function: deleteVertexArray]
expected: FAIL
- [WebGL test #90: Property either does not exist or is not a function: deleteVertexArray]
+ [WebGL test #90: Property either does not exist or is not a function: isVertexArray]
expected: FAIL
- [WebGL test #91: Property either does not exist or is not a function: isVertexArray]
- expected: FAIL
-
- [WebGL test #92: Property either does not exist or is not a function: bindVertexArray]
+ [WebGL test #91: Property either does not exist or is not a function: bindVertexArray]
expected: FAIL
diff --git a/tests/wpt/mozilla/meta/webgl/conformance-2.0.0/conformance2/renderbuffers/framebuffer-test.html.ini b/tests/wpt/mozilla/meta/webgl/conformance-2.0.0/conformance2/renderbuffers/framebuffer-test.html.ini
index 324840c2eb5..3f29b3b4a77 100644
--- a/tests/wpt/mozilla/meta/webgl/conformance-2.0.0/conformance2/renderbuffers/framebuffer-test.html.ini
+++ b/tests/wpt/mozilla/meta/webgl/conformance-2.0.0/conformance2/renderbuffers/framebuffer-test.html.ini
@@ -1,5 +1,100 @@
[framebuffer-test.html]
- expected: ERROR
[WebGL test #1: successfullyParsed should be true (of type boolean). Was undefined (of type undefined).]
expected: FAIL
+ [WebGL test #1: getError expected: INVALID_ENUM. Was INVALID_OPERATION : getFramebufferAttachmentParameter(COLOR_ATTACHMENT0) on the default framebuffer.]
+ expected: FAIL
+
+ [WebGL test #2: getError expected: NO_ERROR. Was INVALID_OPERATION : getFramebufferAttachmentParameter(BACK) on the default framebuffer.]
+ expected: FAIL
+
+ [WebGL test #9: getError expected: NO_ERROR. Was INVALID_ENUM : getFramebufferAttachmentParameter(READ_FRAMEBUFFER).]
+ expected: FAIL
+
+ [WebGL test #10: checkFramebufferStatus(READ_FRAMEBUFFER) should succeed.]
+ expected: FAIL
+
+ [WebGL test #11: getError expected: NO_ERROR. Was INVALID_ENUM : checkFramebufferStatus(READ_FRAMEBUFFER).]
+ expected: FAIL
+
+ [WebGL test #12: getError expected: NO_ERROR. Was INVALID_ENUM : bindFramebuffer(READ_FRAMEBUFFER).]
+ expected: FAIL
+
+ [WebGL test #13: bindFramebuffer(READ_FRAMEBUFFER) should change READ_FRAMEBUFFER_BINDING.]
+ expected: FAIL
+
+ [WebGL test #15: getError expected: NO_ERROR. Was INVALID_ENUM : getFramebufferAttachmentParameter(FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE) with no attachment.]
+ expected: FAIL
+
+ [WebGL test #16: getError expected: NO_ERROR. Was INVALID_ENUM : framebufferTexImage2D(READ_FRAMEBUFFER).]
+ expected: FAIL
+
+ [WebGL test #17: getError expected: NO_ERROR. Was INVALID_ENUM : framebufferRenderbuffer(READ_FRAMEBUFFER).]
+ expected: FAIL
+
+ [WebGL test #18: getError expected: INVALID_OPERATION. Was INVALID_ENUM : getFramebufferAttachmentParameter(GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING) with no attachment.]
+ expected: FAIL
+
+ [WebGL test #21: getError expected: NO_ERROR. Was INVALID_VALUE : framebufferTexture2D with an appropriate mipmap level.]
+ expected: FAIL
+
+ [WebGL test #26: getError expected: NO_ERROR. Was INVALID_ENUM : attach a texture to read/draw framebuffer binding point.]
+ expected: FAIL
+
+ [WebGL test #27: getError expected: NO_ERROR. Was INVALID_OPERATION : getFramebufferAttachmentParameter(FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING) on read/draw framebuffer.]
+ expected: FAIL
+
+ [WebGL test #29: getError expected: NO_ERROR. Was INVALID_ENUM : detach a texture from read/draw framebuffer.]
+ expected: FAIL
+
+ [WebGL test #30: getError expected: NO_ERROR. Was INVALID_ENUM : attach a texture to read/draw framebuffer binding point.]
+ expected: FAIL
+
+ [WebGL test #31: getError expected: NO_ERROR. Was INVALID_OPERATION : getFramebufferAttachmentParameter(FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING) on read/draw framebuffer.]
+ expected: FAIL
+
+ [WebGL test #33: getError expected: NO_ERROR. Was INVALID_ENUM : detach a texture from read/draw framebuffer.]
+ expected: FAIL
+
+ [WebGL test #35: gl.getFramebufferAttachmentParameter(gl.DRAW_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.FRAMEBUFFER_ATTACHMENT_BLUE_SIZE) should be 0 (of type number). Was null (of type object).]
+ expected: FAIL
+
+ [WebGL test #36: getError expected: INVALID_OPERATION. Was INVALID_ENUM : getFramebufferAttachmentParameter(FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING) on read framebuffer with no attachment.]
+ expected: FAIL
+
+ [WebGL test #37: getError expected: NO_ERROR. Was INVALID_OPERATION : getFramebufferAttachmentParameter(FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING) on draw framebuffer.]
+ expected: FAIL
+
+ [WebGL test #38: getError expected: INVALID_OPERATION. Was INVALID_ENUM : getFramebufferAttachmentParameter(FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING) on draw framebuffer with no attachment.]
+ expected: FAIL
+
+ [WebGL test #39: getError expected: NO_ERROR. Was INVALID_ENUM : attaching a renderbuffer to a read/draw framebuffer.]
+ expected: FAIL
+
+ [WebGL test #40: getError expected: NO_ERROR. Was INVALID_OPERATION : getFramebufferAttachmentParameter(FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING) on read/draw framebuffer.]
+ expected: FAIL
+
+ [WebGL test #42: getError expected: NO_ERROR. Was INVALID_ENUM : detach a renderbuffer from a read/draw framebuffer.]
+ expected: FAIL
+
+ [WebGL test #43: getError expected: NO_ERROR. Was INVALID_ENUM : attaching a renderbuffer to a read/draw framebuffer.]
+ expected: FAIL
+
+ [WebGL test #44: getError expected: NO_ERROR. Was INVALID_OPERATION : getFramebufferAttachmentParameter(FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING) on read/draw framebuffer.]
+ expected: FAIL
+
+ [WebGL test #46: getError expected: NO_ERROR. Was INVALID_ENUM : detach a renderbuffer from a read/draw framebuffer.]
+ expected: FAIL
+
+ [WebGL test #49: getError expected: INVALID_OPERATION. Was INVALID_ENUM : getFramebufferAttachmentParameter(FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE) on read framebuffer without depth attachment.]
+ expected: FAIL
+
+ [WebGL test #52: getError expected: INVALID_OPERATION. Was INVALID_ENUM : getFramebufferAttachmentParameter(FRAMEBUFFER_ATTACHMENT_RED_SIZE) on read framebuffer with no attachment.]
+ expected: FAIL
+
+ [WebGL test #55: getError expected: NO_ERROR. Was INVALID_ENUM : bind read framebuffer to default (null) framebuffer.]
+ expected: FAIL
+
+ [WebGL test #56: getError expected: NO_ERROR. Was INVALID_OPERATION : bind draw framebuffer to default (null) framebuffer.]
+ expected: FAIL
+