diff --git a/components/canvas/webgl_thread.rs b/components/canvas/webgl_thread.rs index 56cf0abf8ea..bfb6c7ab5cb 100644 --- a/components/canvas/webgl_thread.rs +++ b/components/canvas/webgl_thread.rs @@ -758,6 +758,8 @@ impl WebGLImpl { Self::buffer_parameter(ctx.gl(), target, param_id, chan), WebGLCommand::GetParameter(param_id, chan) => Self::parameter(ctx.gl(), param_id, chan), + WebGLCommand::GetTexParameter(target, pname, chan) => + Self::get_tex_parameter(ctx.gl(), target, pname, chan), WebGLCommand::GetProgramParameter(program_id, param_id, chan) => Self::program_parameter(ctx.gl(), program_id, param_id, chan), WebGLCommand::GetShaderParameter(shader_id, param_id, chan) => @@ -1061,6 +1063,27 @@ impl WebGLImpl { chan.send(result).unwrap(); } + fn get_tex_parameter(gl: &gl::Gl, + target: u32, + pname: u32, + chan: WebGLSender> ) { + let result = match pname { + gl::TEXTURE_MAG_FILTER | + gl::TEXTURE_MIN_FILTER | + gl::TEXTURE_WRAP_S | + gl::TEXTURE_WRAP_T => { + let parameter = gl.get_tex_parameter_iv(target, pname); + if parameter == 0 { + Ok(WebGLParameter::Invalid) + } else { + Ok(WebGLParameter::Int(parameter)) + } + } + _ => Err(WebGLError::InvalidEnum) + }; + chan.send(result).unwrap(); + } + fn finish(gl: &gl::Gl, chan: WebGLSender<()>) { gl.finish(); chan.send(()).unwrap(); diff --git a/components/canvas_traits/webgl.rs b/components/canvas_traits/webgl.rs index 84a8fe49006..70aeb40ab06 100644 --- a/components/canvas_traits/webgl.rs +++ b/components/canvas_traits/webgl.rs @@ -207,6 +207,7 @@ pub enum WebGLCommand { GetBufferParameter(u32, u32, WebGLSender>), GetExtensions(WebGLSender), GetParameter(u32, WebGLSender>), + GetTexParameter(u32, u32, WebGLSender>), GetProgramParameter(WebGLProgramId, u32, WebGLSender>), GetShaderParameter(WebGLShaderId, u32, WebGLSender>), GetShaderPrecisionFormat(u32, u32, WebGLSender>), @@ -477,6 +478,7 @@ impl fmt::Debug for WebGLCommand { GetBufferParameter(..) => "GetBufferParameter", GetExtensions(..) => "GetExtensions", GetParameter(..) => "GetParameter", + GetTexParameter(..) => "GetTexParameter", GetProgramParameter(..) => "GetProgramParameter", GetShaderParameter(..) => "GetShaderParameter", GetShaderPrecisionFormat(..) => "GetShaderPrecisionFormat", diff --git a/components/script/dom/webgl2renderingcontext.rs b/components/script/dom/webgl2renderingcontext.rs index 9bf016f9631..2a25c450b08 100644 --- a/components/script/dom/webgl2renderingcontext.rs +++ b/components/script/dom/webgl2renderingcontext.rs @@ -115,6 +115,12 @@ impl WebGL2RenderingContextMethods for WebGL2RenderingContext { self.base.GetParameter(cx, parameter) } + #[allow(unsafe_code)] + /// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.8 + unsafe fn GetTexParameter(&self, cx: *mut JSContext, target: u32, pname: u32) -> JSVal { + self.base.GetTexParameter(cx, target, pname) + } + /// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.3 fn GetError(&self) -> u32 { self.base.GetError() diff --git a/components/script/dom/webglrenderingcontext.rs b/components/script/dom/webglrenderingcontext.rs index 61f05a923e8..fa1015582cf 100644 --- a/components/script/dom/webglrenderingcontext.rs +++ b/components/script/dom/webglrenderingcontext.rs @@ -1336,6 +1336,37 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { } } + #[allow(unsafe_code)] + // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.8 + unsafe fn GetTexParameter(&self, _cx: *mut JSContext, target: u32, pname: u32) -> JSVal { + let texture = match target { + constants::TEXTURE_2D | + constants::TEXTURE_CUBE_MAP => self.bound_texture(target), + _ => { + self.webgl_error(InvalidEnum); + return NullValue(); + } + }; + if texture.is_some() { + let (sender, receiver) = webgl_channel().unwrap(); + self.send_command(WebGLCommand::GetTexParameter(target, pname, sender)); + match handle_potential_webgl_error!(self, receiver.recv().unwrap(), WebGLParameter::Invalid) { + WebGLParameter::Int(val) => Int32Value(val), + WebGLParameter::Bool(_) => panic!("Texture parameter should not be bool"), + WebGLParameter::Float(_) => panic!("Texture parameter should not be float"), + WebGLParameter::FloatArray(_) => panic!("Texture parameter should not be float array"), + WebGLParameter::String(_) => panic!("Texture parameter should not be string"), + WebGLParameter::Invalid => { + self.webgl_error(InvalidEnum); + NullValue() + } + } + } else { + self.webgl_error(InvalidOperation); + NullValue() + } + } + // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.3 fn GetError(&self) -> u32 { let error_code = if let Some(error) = self.last_error.get() { diff --git a/components/script/dom/webidls/WebGLRenderingContext.webidl b/components/script/dom/webidls/WebGLRenderingContext.webidl index ec729d1b5fb..3f845126701 100644 --- a/components/script/dom/webidls/WebGLRenderingContext.webidl +++ b/components/script/dom/webidls/WebGLRenderingContext.webidl @@ -600,7 +600,7 @@ interface WebGLRenderingContextBase DOMString? getShaderSource(WebGLShader? shader); - //any getTexParameter(GLenum target, GLenum pname); + any getTexParameter(GLenum target, GLenum pname); //any getUniform(WebGLProgram? program, WebGLUniformLocation? location); 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 2c663c9ceb3..e161e1d0cf8 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 @@ -9,12 +9,9 @@ [WebGL test #2: Property either does not exist or is not a function: getRenderbufferParameter] expected: FAIL - [WebGL test #3: Property either does not exist or is not a function: getTexParameter] + [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: getUniform] - expected: FAIL - - [WebGL test #5: Property either does not exist or is not a function: isContextLost] + [WebGL test #4: 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/extensions/ext-texture-filter-anisotropic.html.ini b/tests/wpt/mozilla/meta/webgl/conformance-1.0.3/conformance/extensions/ext-texture-filter-anisotropic.html.ini deleted file mode 100644 index 6ed8091d6af..00000000000 --- a/tests/wpt/mozilla/meta/webgl/conformance-1.0.3/conformance/extensions/ext-texture-filter-anisotropic.html.ini +++ /dev/null @@ -1,6 +0,0 @@ -[ext-texture-filter-anisotropic.html] - type: testharness - expected: ERROR - [WebGL test #2: successfullyParsed should be true (of type boolean). Was undefined (of type undefined).] - expected: FAIL - diff --git a/tests/wpt/mozilla/meta/webgl/conformance-1.0.3/conformance/state/gl-enum-tests.html.ini b/tests/wpt/mozilla/meta/webgl/conformance-1.0.3/conformance/state/gl-enum-tests.html.ini deleted file mode 100644 index 81f872f61c3..00000000000 --- a/tests/wpt/mozilla/meta/webgl/conformance-1.0.3/conformance/state/gl-enum-tests.html.ini +++ /dev/null @@ -1,12 +0,0 @@ -[gl-enum-tests.html] - type: testharness - expected: ERROR - [WebGL test #18: successfullyParsed should be true (of type boolean). Was undefined (of type undefined).] - expected: FAIL - - [WebGL test #0: Unable to fetch WebGL rendering context for Canvas] - expected: FAIL - - [WebGL test #1: context does not exist] - expected: FAIL - diff --git a/tests/wpt/mozilla/meta/webgl/conformance-1.0.3/conformance/textures/gl-get-tex-parameter.html.ini b/tests/wpt/mozilla/meta/webgl/conformance-1.0.3/conformance/textures/gl-get-tex-parameter.html.ini deleted file mode 100644 index fbe61008ba4..00000000000 --- a/tests/wpt/mozilla/meta/webgl/conformance-1.0.3/conformance/textures/gl-get-tex-parameter.html.ini +++ /dev/null @@ -1,146 +0,0 @@ -[gl-get-tex-parameter.html] - type: testharness - [WebGL test #1: gl.getTexParameter(gl["TEXTURE_2D"\], gl["TEXTURE_WRAP_S"\]) should be 10497. Threw exception TypeError: gl.getTexParameter is not a function] - expected: FAIL - - [WebGL test #2: gl.getTexParameter(gl["TEXTURE_2D"\], gl["TEXTURE_WRAP_S"\]) should be 10497. Threw exception TypeError: gl.getTexParameter is not a function] - expected: FAIL - - [WebGL test #3: gl.getTexParameter(gl["TEXTURE_CUBE_MAP"\], gl["TEXTURE_WRAP_S"\]) should be 10497. Threw exception TypeError: gl.getTexParameter is not a function] - expected: FAIL - - [WebGL test #4: gl.getTexParameter(gl["TEXTURE_CUBE_MAP"\], gl["TEXTURE_WRAP_S"\]) should be 10497. Threw exception TypeError: gl.getTexParameter is not a function] - expected: FAIL - - [WebGL test #5: gl.getTexParameter(gl["TEXTURE_2D"\], gl["TEXTURE_WRAP_T"\]) should be 10497. Threw exception TypeError: gl.getTexParameter is not a function] - expected: FAIL - - [WebGL test #6: gl.getTexParameter(gl["TEXTURE_2D"\], gl["TEXTURE_WRAP_T"\]) should be 10497. Threw exception TypeError: gl.getTexParameter is not a function] - expected: FAIL - - [WebGL test #7: gl.getTexParameter(gl["TEXTURE_CUBE_MAP"\], gl["TEXTURE_WRAP_T"\]) should be 10497. Threw exception TypeError: gl.getTexParameter is not a function] - expected: FAIL - - [WebGL test #8: gl.getTexParameter(gl["TEXTURE_CUBE_MAP"\], gl["TEXTURE_WRAP_T"\]) should be 10497. Threw exception TypeError: gl.getTexParameter is not a function] - expected: FAIL - - [WebGL test #9: gl.getTexParameter(gl["TEXTURE_2D"\], gl["TEXTURE_MAG_FILTER"\]) should be 9729. Threw exception TypeError: gl.getTexParameter is not a function] - expected: FAIL - - [WebGL test #10: gl.getTexParameter(gl["TEXTURE_2D"\], gl["TEXTURE_MAG_FILTER"\]) should be 9729. Threw exception TypeError: gl.getTexParameter is not a function] - expected: FAIL - - [WebGL test #11: gl.getTexParameter(gl["TEXTURE_CUBE_MAP"\], gl["TEXTURE_MAG_FILTER"\]) should be 9729. Threw exception TypeError: gl.getTexParameter is not a function] - expected: FAIL - - [WebGL test #12: gl.getTexParameter(gl["TEXTURE_CUBE_MAP"\], gl["TEXTURE_MAG_FILTER"\]) should be 9729. Threw exception TypeError: gl.getTexParameter is not a function] - expected: FAIL - - [WebGL test #13: gl.getTexParameter(gl["TEXTURE_2D"\], gl["TEXTURE_MIN_FILTER"\]) should be 9986. Threw exception TypeError: gl.getTexParameter is not a function] - expected: FAIL - - [WebGL test #14: gl.getTexParameter(gl["TEXTURE_2D"\], gl["TEXTURE_MIN_FILTER"\]) should be 9986. Threw exception TypeError: gl.getTexParameter is not a function] - expected: FAIL - - [WebGL test #15: gl.getTexParameter(gl["TEXTURE_CUBE_MAP"\], gl["TEXTURE_MIN_FILTER"\]) should be 9986. Threw exception TypeError: gl.getTexParameter is not a function] - expected: FAIL - - [WebGL test #16: gl.getTexParameter(gl["TEXTURE_CUBE_MAP"\], gl["TEXTURE_MIN_FILTER"\]) should be 9986. Threw exception TypeError: gl.getTexParameter is not a function] - expected: FAIL - - [WebGL test #17: gl.getTexParameter(gl["TEXTURE_2D"\], gl["TEXTURE_WRAP_S"\]) should be 33071. Threw exception TypeError: gl.getTexParameter is not a function] - expected: FAIL - - [WebGL test #18: gl.getTexParameter(gl["TEXTURE_2D"\], gl["TEXTURE_WRAP_S"\]) should be 33071. Threw exception TypeError: gl.getTexParameter is not a function] - expected: FAIL - - [WebGL test #19: gl.getTexParameter(gl["TEXTURE_CUBE_MAP"\], gl["TEXTURE_WRAP_S"\]) should be 33071. Threw exception TypeError: gl.getTexParameter is not a function] - expected: FAIL - - [WebGL test #20: gl.getTexParameter(gl["TEXTURE_CUBE_MAP"\], gl["TEXTURE_WRAP_S"\]) should be 33071. Threw exception TypeError: gl.getTexParameter is not a function] - expected: FAIL - - [WebGL test #21: gl.getTexParameter(gl["TEXTURE_2D"\], gl["TEXTURE_WRAP_T"\]) should be 33071. Threw exception TypeError: gl.getTexParameter is not a function] - expected: FAIL - - [WebGL test #22: gl.getTexParameter(gl["TEXTURE_2D"\], gl["TEXTURE_WRAP_T"\]) should be 33071. Threw exception TypeError: gl.getTexParameter is not a function] - expected: FAIL - - [WebGL test #23: gl.getTexParameter(gl["TEXTURE_CUBE_MAP"\], gl["TEXTURE_WRAP_T"\]) should be 33071. Threw exception TypeError: gl.getTexParameter is not a function] - expected: FAIL - - [WebGL test #24: gl.getTexParameter(gl["TEXTURE_CUBE_MAP"\], gl["TEXTURE_WRAP_T"\]) should be 33071. Threw exception TypeError: gl.getTexParameter is not a function] - expected: FAIL - - [WebGL test #25: gl.getTexParameter(gl["TEXTURE_2D"\], gl["TEXTURE_MAG_FILTER"\]) should be 9728. Threw exception TypeError: gl.getTexParameter is not a function] - expected: FAIL - - [WebGL test #26: gl.getTexParameter(gl["TEXTURE_2D"\], gl["TEXTURE_MAG_FILTER"\]) should be 9728. Threw exception TypeError: gl.getTexParameter is not a function] - expected: FAIL - - [WebGL test #27: gl.getTexParameter(gl["TEXTURE_CUBE_MAP"\], gl["TEXTURE_MAG_FILTER"\]) should be 9728. Threw exception TypeError: gl.getTexParameter is not a function] - expected: FAIL - - [WebGL test #28: gl.getTexParameter(gl["TEXTURE_CUBE_MAP"\], gl["TEXTURE_MAG_FILTER"\]) should be 9728. Threw exception TypeError: gl.getTexParameter is not a function] - expected: FAIL - - [WebGL test #29: gl.getTexParameter(gl["TEXTURE_2D"\], gl["TEXTURE_MIN_FILTER"\]) should be 9987. Threw exception TypeError: gl.getTexParameter is not a function] - expected: FAIL - - [WebGL test #30: gl.getTexParameter(gl["TEXTURE_2D"\], gl["TEXTURE_MIN_FILTER"\]) should be 9987. Threw exception TypeError: gl.getTexParameter is not a function] - expected: FAIL - - [WebGL test #31: gl.getTexParameter(gl["TEXTURE_CUBE_MAP"\], gl["TEXTURE_MIN_FILTER"\]) should be 9987. Threw exception TypeError: gl.getTexParameter is not a function] - expected: FAIL - - [WebGL test #32: gl.getTexParameter(gl["TEXTURE_CUBE_MAP"\], gl["TEXTURE_MIN_FILTER"\]) should be 9987. Threw exception TypeError: gl.getTexParameter is not a function] - expected: FAIL - - [WebGL test #33: gl.getTexParameter(gl["TEXTURE_2D"\], gl["TEXTURE_WRAP_S"\]) should be 33071. Threw exception TypeError: gl.getTexParameter is not a function] - expected: FAIL - - [WebGL test #34: gl.getTexParameter(gl["TEXTURE_2D"\], gl["TEXTURE_WRAP_S"\]) should be 10497. Threw exception TypeError: gl.getTexParameter is not a function] - expected: FAIL - - [WebGL test #35: gl.getTexParameter(gl["TEXTURE_CUBE_MAP"\], gl["TEXTURE_WRAP_S"\]) should be 33071. Threw exception TypeError: gl.getTexParameter is not a function] - expected: FAIL - - [WebGL test #36: gl.getTexParameter(gl["TEXTURE_CUBE_MAP"\], gl["TEXTURE_WRAP_S"\]) should be 10497. Threw exception TypeError: gl.getTexParameter is not a function] - expected: FAIL - - [WebGL test #37: gl.getTexParameter(gl["TEXTURE_2D"\], gl["TEXTURE_WRAP_T"\]) should be 33071. Threw exception TypeError: gl.getTexParameter is not a function] - expected: FAIL - - [WebGL test #38: gl.getTexParameter(gl["TEXTURE_2D"\], gl["TEXTURE_WRAP_T"\]) should be 10497. Threw exception TypeError: gl.getTexParameter is not a function] - expected: FAIL - - [WebGL test #39: gl.getTexParameter(gl["TEXTURE_CUBE_MAP"\], gl["TEXTURE_WRAP_T"\]) should be 33071. Threw exception TypeError: gl.getTexParameter is not a function] - expected: FAIL - - [WebGL test #40: gl.getTexParameter(gl["TEXTURE_CUBE_MAP"\], gl["TEXTURE_WRAP_T"\]) should be 10497. Threw exception TypeError: gl.getTexParameter is not a function] - expected: FAIL - - [WebGL test #41: gl.getTexParameter(gl["TEXTURE_2D"\], gl["TEXTURE_MAG_FILTER"\]) should be 9728. Threw exception TypeError: gl.getTexParameter is not a function] - expected: FAIL - - [WebGL test #42: gl.getTexParameter(gl["TEXTURE_2D"\], gl["TEXTURE_MAG_FILTER"\]) should be 9729. Threw exception TypeError: gl.getTexParameter is not a function] - expected: FAIL - - [WebGL test #43: gl.getTexParameter(gl["TEXTURE_CUBE_MAP"\], gl["TEXTURE_MAG_FILTER"\]) should be 9728. Threw exception TypeError: gl.getTexParameter is not a function] - expected: FAIL - - [WebGL test #44: gl.getTexParameter(gl["TEXTURE_CUBE_MAP"\], gl["TEXTURE_MAG_FILTER"\]) should be 9729. Threw exception TypeError: gl.getTexParameter is not a function] - expected: FAIL - - [WebGL test #45: gl.getTexParameter(gl["TEXTURE_2D"\], gl["TEXTURE_MIN_FILTER"\]) should be 9987. Threw exception TypeError: gl.getTexParameter is not a function] - expected: FAIL - - [WebGL test #46: gl.getTexParameter(gl["TEXTURE_2D"\], gl["TEXTURE_MIN_FILTER"\]) should be 9728. Threw exception TypeError: gl.getTexParameter is not a function] - expected: FAIL - - [WebGL test #47: gl.getTexParameter(gl["TEXTURE_CUBE_MAP"\], gl["TEXTURE_MIN_FILTER"\]) should be 9987. Threw exception TypeError: gl.getTexParameter is not a function] - expected: FAIL - - [WebGL test #48: gl.getTexParameter(gl["TEXTURE_CUBE_MAP"\], gl["TEXTURE_MIN_FILTER"\]) should be 9728. Threw exception TypeError: gl.getTexParameter is not a function] - expected: FAIL - diff --git a/tests/wpt/mozilla/meta/webgl/conformance-1.0.3/conformance/textures/tex-input-validation.html.ini b/tests/wpt/mozilla/meta/webgl/conformance-1.0.3/conformance/textures/tex-input-validation.html.ini index e64f0eb91b0..fce3bfa64ff 100644 --- a/tests/wpt/mozilla/meta/webgl/conformance-1.0.3/conformance/textures/tex-input-validation.html.ini +++ b/tests/wpt/mozilla/meta/webgl/conformance-1.0.3/conformance/textures/tex-input-validation.html.ini @@ -1,6 +1,6 @@ [tex-input-validation.html] type: testharness - expected: ERROR + expected: CRASH [WebGL test #3: 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 2d56d4c0ff9..05ed89bcd6e 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 @@ -8,276 +8,273 @@ [WebGL test #2: Property either does not exist or is not a function: getRenderbufferParameter] expected: FAIL - [WebGL test #3: Property either does not exist or is not a function: getTexParameter] + [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: getUniform] + [WebGL test #4: Property either does not exist or is not a function: isContextLost] expected: FAIL - [WebGL test #5: Property either does not exist or is not a function: isContextLost] + [WebGL test #5: Property either does not exist or is not a function: getBufferSubData] expected: FAIL - [WebGL test #6: Property either does not exist or is not a function: getBufferSubData] + [WebGL test #6: Property either does not exist or is not a function: copyBufferSubData] expected: FAIL - [WebGL test #7: Property either does not exist or is not a function: copyBufferSubData] + [WebGL test #7: Property either does not exist or is not a function: blitFramebuffer] expected: FAIL - [WebGL test #8: Property either does not exist or is not a function: blitFramebuffer] + [WebGL test #8: Property either does not exist or is not a function: framebufferTextureLayer] expected: FAIL - [WebGL test #9: Property either does not exist or is not a function: framebufferTextureLayer] + [WebGL test #9: Property either does not exist or is not a function: getInternalformatParameter] expected: FAIL - [WebGL test #10: Property either does not exist or is not a function: getInternalformatParameter] + [WebGL test #10: Property either does not exist or is not a function: invalidateFramebuffer] expected: FAIL - [WebGL test #11: Property either does not exist or is not a function: invalidateFramebuffer] + [WebGL test #11: Property either does not exist or is not a function: invalidateSubFramebuffer] expected: FAIL - [WebGL test #12: Property either does not exist or is not a function: invalidateSubFramebuffer] + [WebGL test #12: Property either does not exist or is not a function: readBuffer] expected: FAIL - [WebGL test #13: Property either does not exist or is not a function: readBuffer] + [WebGL test #13: Property either does not exist or is not a function: renderbufferStorageMultisample] expected: FAIL - [WebGL test #14: Property either does not exist or is not a function: renderbufferStorageMultisample] + [WebGL test #14: Property either does not exist or is not a function: texImage3D] expected: FAIL - [WebGL test #15: Property either does not exist or is not a function: texImage3D] + [WebGL test #15: Property either does not exist or is not a function: texStorage2D] expected: FAIL - [WebGL test #16: Property either does not exist or is not a function: texStorage2D] + [WebGL test #16: Property either does not exist or is not a function: texStorage3D] expected: FAIL - [WebGL test #17: Property either does not exist or is not a function: texStorage3D] + [WebGL test #17: Property either does not exist or is not a function: texSubImage3D] expected: FAIL - [WebGL test #18: Property either does not exist or is not a function: texSubImage3D] + [WebGL test #18: Property either does not exist or is not a function: copyTexSubImage3D] expected: FAIL - [WebGL test #19: Property either does not exist or is not a function: copyTexSubImage3D] + [WebGL test #19: Property either does not exist or is not a function: compressedTexImage3D] expected: FAIL - [WebGL test #20: Property either does not exist or is not a function: compressedTexImage3D] + [WebGL test #20: Property either does not exist or is not a function: compressedTexSubImage3D] expected: FAIL - [WebGL test #21: Property either does not exist or is not a function: compressedTexSubImage3D] + [WebGL test #21: Property either does not exist or is not a function: getFragDataLocation] expected: FAIL - [WebGL test #22: Property either does not exist or is not a function: getFragDataLocation] + [WebGL test #22: Property either does not exist or is not a function: uniform1ui] expected: FAIL - [WebGL test #23: Property either does not exist or is not a function: uniform1ui] + [WebGL test #23: Property either does not exist or is not a function: uniform2ui] expected: FAIL - [WebGL test #24: Property either does not exist or is not a function: uniform2ui] + [WebGL test #24: Property either does not exist or is not a function: uniform3ui] expected: FAIL - [WebGL test #25: Property either does not exist or is not a function: uniform3ui] + [WebGL test #25: Property either does not exist or is not a function: uniform4ui] expected: FAIL - [WebGL test #26: Property either does not exist or is not a function: uniform4ui] + [WebGL test #26: Property either does not exist or is not a function: uniform1uiv] expected: FAIL - [WebGL test #27: Property either does not exist or is not a function: uniform1uiv] + [WebGL test #27: Property either does not exist or is not a function: uniform2uiv] expected: FAIL - [WebGL test #28: Property either does not exist or is not a function: uniform2uiv] + [WebGL test #28: Property either does not exist or is not a function: uniform3uiv] expected: FAIL - [WebGL test #29: Property either does not exist or is not a function: uniform3uiv] + [WebGL test #29: Property either does not exist or is not a function: uniform4uiv] expected: FAIL - [WebGL test #30: Property either does not exist or is not a function: uniform4uiv] + [WebGL test #30: Property either does not exist or is not a function: uniformMatrix2x3fv] expected: FAIL - [WebGL test #31: Property either does not exist or is not a function: uniformMatrix2x3fv] + [WebGL test #31: Property either does not exist or is not a function: uniformMatrix3x2fv] expected: FAIL - [WebGL test #32: Property either does not exist or is not a function: uniformMatrix3x2fv] + [WebGL test #32: Property either does not exist or is not a function: uniformMatrix2x4fv] expected: FAIL - [WebGL test #33: Property either does not exist or is not a function: uniformMatrix2x4fv] + [WebGL test #33: Property either does not exist or is not a function: uniformMatrix4x2fv] expected: FAIL - [WebGL test #34: Property either does not exist or is not a function: uniformMatrix4x2fv] + [WebGL test #34: Property either does not exist or is not a function: uniformMatrix3x4fv] expected: FAIL - [WebGL test #35: Property either does not exist or is not a function: uniformMatrix3x4fv] + [WebGL test #35: Property either does not exist or is not a function: uniformMatrix4x3fv] expected: FAIL - [WebGL test #36: Property either does not exist or is not a function: uniformMatrix4x3fv] + [WebGL test #36: Property either does not exist or is not a function: vertexAttribI4i] expected: FAIL - [WebGL test #37: Property either does not exist or is not a function: vertexAttribI4i] + [WebGL test #37: Property either does not exist or is not a function: vertexAttribI4iv] expected: FAIL - [WebGL test #38: Property either does not exist or is not a function: vertexAttribI4iv] + [WebGL test #38: Property either does not exist or is not a function: vertexAttribI4ui] expected: FAIL - [WebGL test #39: Property either does not exist or is not a function: vertexAttribI4ui] + [WebGL test #39: Property either does not exist or is not a function: vertexAttribI4uiv] expected: FAIL - [WebGL test #40: Property either does not exist or is not a function: vertexAttribI4uiv] + [WebGL test #40: Property either does not exist or is not a function: vertexAttribIPointer] expected: FAIL - [WebGL test #41: Property either does not exist or is not a function: vertexAttribIPointer] + [WebGL test #41: Property either does not exist or is not a function: vertexAttribDivisor] expected: FAIL - [WebGL test #42: Property either does not exist or is not a function: vertexAttribDivisor] + [WebGL test #42: Property either does not exist or is not a function: drawArraysInstanced] expected: FAIL - [WebGL test #43: Property either does not exist or is not a function: drawArraysInstanced] + [WebGL test #43: Property either does not exist or is not a function: drawElementsInstanced] expected: FAIL - [WebGL test #44: Property either does not exist or is not a function: drawElementsInstanced] + [WebGL test #44: Property either does not exist or is not a function: drawRangeElements] expected: FAIL - [WebGL test #45: Property either does not exist or is not a function: drawRangeElements] + [WebGL test #45: Property either does not exist or is not a function: drawBuffers] expected: FAIL - [WebGL test #46: Property either does not exist or is not a function: drawBuffers] + [WebGL test #46: Property either does not exist or is not a function: clearBufferiv] expected: FAIL - [WebGL test #47: Property either does not exist or is not a function: clearBufferiv] + [WebGL test #47: Property either does not exist or is not a function: clearBufferuiv] expected: FAIL - [WebGL test #48: Property either does not exist or is not a function: clearBufferuiv] + [WebGL test #48: Property either does not exist or is not a function: clearBufferfv] expected: FAIL - [WebGL test #49: Property either does not exist or is not a function: clearBufferfv] + [WebGL test #49: Property either does not exist or is not a function: clearBufferfi] expected: FAIL - [WebGL test #50: Property either does not exist or is not a function: clearBufferfi] + [WebGL test #50: Property either does not exist or is not a function: createQuery] expected: FAIL - [WebGL test #51: Property either does not exist or is not a function: createQuery] + [WebGL test #51: Property either does not exist or is not a function: deleteQuery] expected: FAIL - [WebGL test #52: Property either does not exist or is not a function: deleteQuery] + [WebGL test #52: Property either does not exist or is not a function: isQuery] expected: FAIL - [WebGL test #53: Property either does not exist or is not a function: isQuery] + [WebGL test #53: Property either does not exist or is not a function: beginQuery] expected: FAIL - [WebGL test #54: Property either does not exist or is not a function: beginQuery] + [WebGL test #54: Property either does not exist or is not a function: endQuery] expected: FAIL - [WebGL test #55: Property either does not exist or is not a function: endQuery] + [WebGL test #55: Property either does not exist or is not a function: getQuery] expected: FAIL - [WebGL test #56: Property either does not exist or is not a function: getQuery] + [WebGL test #56: Property either does not exist or is not a function: getQueryParameter] expected: FAIL - [WebGL test #57: Property either does not exist or is not a function: getQueryParameter] + [WebGL test #57: Property either does not exist or is not a function: createSampler] expected: FAIL - [WebGL test #58: Property either does not exist or is not a function: createSampler] + [WebGL test #58: Property either does not exist or is not a function: deleteSampler] expected: FAIL - [WebGL test #59: Property either does not exist or is not a function: deleteSampler] + [WebGL test #59: Property either does not exist or is not a function: isSampler] expected: FAIL - [WebGL test #60: Property either does not exist or is not a function: isSampler] + [WebGL test #60: Property either does not exist or is not a function: bindSampler] expected: FAIL - [WebGL test #61: Property either does not exist or is not a function: bindSampler] + [WebGL test #61: Property either does not exist or is not a function: samplerParameteri] expected: FAIL - [WebGL test #62: Property either does not exist or is not a function: samplerParameteri] + [WebGL test #62: Property either does not exist or is not a function: samplerParameterf] expected: FAIL - [WebGL test #63: Property either does not exist or is not a function: samplerParameterf] + [WebGL test #63: Property either does not exist or is not a function: getSamplerParameter] expected: FAIL - [WebGL test #64: Property either does not exist or is not a function: getSamplerParameter] + [WebGL test #64: Property either does not exist or is not a function: fenceSync] expected: FAIL - [WebGL test #65: Property either does not exist or is not a function: fenceSync] + [WebGL test #65: Property either does not exist or is not a function: isSync] expected: FAIL - [WebGL test #66: Property either does not exist or is not a function: isSync] + [WebGL test #66: Property either does not exist or is not a function: deleteSync] expected: FAIL - [WebGL test #67: Property either does not exist or is not a function: deleteSync] + [WebGL test #67: Property either does not exist or is not a function: clientWaitSync] expected: FAIL - [WebGL test #68: Property either does not exist or is not a function: clientWaitSync] + [WebGL test #68: Property either does not exist or is not a function: waitSync] expected: FAIL - [WebGL test #69: Property either does not exist or is not a function: waitSync] + [WebGL test #69: Property either does not exist or is not a function: getSyncParameter] expected: FAIL - [WebGL test #70: Property either does not exist or is not a function: getSyncParameter] + [WebGL test #70: Property either does not exist or is not a function: createTransformFeedback] expected: FAIL - [WebGL test #71: Property either does not exist or is not a function: createTransformFeedback] + [WebGL test #71: Property either does not exist or is not a function: deleteTransformFeedback] expected: FAIL - [WebGL test #72: Property either does not exist or is not a function: deleteTransformFeedback] + [WebGL test #72: Property either does not exist or is not a function: isTransformFeedback] expected: FAIL - [WebGL test #73: Property either does not exist or is not a function: isTransformFeedback] + [WebGL test #73: Property either does not exist or is not a function: bindTransformFeedback] expected: FAIL - [WebGL test #74: Property either does not exist or is not a function: bindTransformFeedback] + [WebGL test #74: Property either does not exist or is not a function: beginTransformFeedback] expected: FAIL - [WebGL test #75: Property either does not exist or is not a function: beginTransformFeedback] + [WebGL test #75: Property either does not exist or is not a function: endTransformFeedback] expected: FAIL - [WebGL test #76: Property either does not exist or is not a function: endTransformFeedback] + [WebGL test #76: Property either does not exist or is not a function: transformFeedbackVaryings] expected: FAIL - [WebGL test #77: Property either does not exist or is not a function: transformFeedbackVaryings] + [WebGL test #77: Property either does not exist or is not a function: getTransformFeedbackVarying] expected: FAIL - [WebGL test #78: Property either does not exist or is not a function: getTransformFeedbackVarying] + [WebGL test #78: Property either does not exist or is not a function: pauseTransformFeedback] expected: FAIL - [WebGL test #79: Property either does not exist or is not a function: pauseTransformFeedback] + [WebGL test #79: Property either does not exist or is not a function: resumeTransformFeedback] expected: FAIL - [WebGL test #80: Property either does not exist or is not a function: resumeTransformFeedback] + [WebGL test #80: Property either does not exist or is not a function: bindBufferBase] expected: FAIL - [WebGL test #81: Property either does not exist or is not a function: bindBufferBase] + [WebGL test #81: Property either does not exist or is not a function: bindBufferRange] expected: FAIL - [WebGL test #82: Property either does not exist or is not a function: bindBufferRange] + [WebGL test #82: Property either does not exist or is not a function: getIndexedParameter] expected: FAIL - [WebGL test #83: Property either does not exist or is not a function: getIndexedParameter] + [WebGL test #83: Property either does not exist or is not a function: getUniformIndices] expected: FAIL - [WebGL test #84: Property either does not exist or is not a function: getUniformIndices] + [WebGL test #84: Property either does not exist or is not a function: getActiveUniforms] expected: FAIL - [WebGL test #85: Property either does not exist or is not a function: getActiveUniforms] + [WebGL test #85: Property either does not exist or is not a function: getUniformBlockIndex] expected: FAIL - [WebGL test #86: Property either does not exist or is not a function: getUniformBlockIndex] + [WebGL test #86: Property either does not exist or is not a function: getActiveUniformBlockParameter] expected: FAIL - [WebGL test #87: Property either does not exist or is not a function: getActiveUniformBlockParameter] + [WebGL test #87: Property either does not exist or is not a function: getActiveUniformBlockName] expected: FAIL - [WebGL test #88: Property either does not exist or is not a function: getActiveUniformBlockName] + [WebGL test #88: Property either does not exist or is not a function: uniformBlockBinding] expected: FAIL - [WebGL test #89: Property either does not exist or is not a function: uniformBlockBinding] + [WebGL test #89: Property either does not exist or is not a function: createVertexArray] expected: FAIL - [WebGL test #90: Property either does not exist or is not a function: createVertexArray] + [WebGL test #90: Property either does not exist or is not a function: deleteVertexArray] expected: FAIL - [WebGL test #91: Property either does not exist or is not a function: deleteVertexArray] + [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: isVertexArray] - expected: FAIL - - [WebGL test #93: Property either does not exist or is not a function: bindVertexArray] + [WebGL test #92: Property either does not exist or is not a function: bindVertexArray] expected: FAIL