From ea8f115b8cb30513d077e42884d062d6d10ccee4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20Cobos=20=C3=81lvarez?= Date: Sat, 17 Sep 2016 13:40:18 -0700 Subject: [PATCH 1/5] webgl: A few fixes regarding the nullability of WebGL parameters. --- components/script/dom/bindings/conversions.rs | 2 + .../script/dom/webglrenderingcontext.rs | 148 ++++++++++-------- .../dom/webidls/WebGLRenderingContext.webidl | 29 ++-- 3 files changed, 102 insertions(+), 77 deletions(-) diff --git a/components/script/dom/bindings/conversions.rs b/components/script/dom/bindings/conversions.rs index 55c3c41f460..0b050a4fc64 100644 --- a/components/script/dom/bindings/conversions.rs +++ b/components/script/dom/bindings/conversions.rs @@ -535,6 +535,8 @@ unsafe impl ArrayBufferViewContents for f64 { /// Returns a mutable slice of the Array Buffer View data, viewed as T, without checking the real /// type of it. pub unsafe fn array_buffer_view_data<'a, T: ArrayBufferViewContents>(abv: *mut JSObject) -> Option<&'a mut [T]> { + assert!(!abv.is_null()); + let mut byte_length = 0; let mut ptr = ptr::null_mut(); let mut is_shared = false; diff --git a/components/script/dom/webglrenderingcontext.rs b/components/script/dom/webglrenderingcontext.rs index 312357fd3d2..0b285ba21be 100644 --- a/components/script/dom/webglrenderingcontext.rs +++ b/components/script/dom/webglrenderingcontext.rs @@ -390,12 +390,12 @@ impl WebGLRenderingContext { // TODO(emilio): Move this logic to a validator. #[allow(unsafe_code)] - fn validate_tex_image_2d_data(&self, + unsafe fn validate_tex_image_2d_data(&self, width: u32, height: u32, format: TexFormat, data_type: TexDataType, - data: Option<*mut JSObject>) + data: *mut JSObject) -> Result { let element_size = data_type.element_size(); let components_per_element = data_type.components_per_element(); @@ -407,17 +407,17 @@ impl WebGLRenderingContext { // if it is UNSIGNED_SHORT_5_6_5, UNSIGNED_SHORT_4_4_4_4, // or UNSIGNED_SHORT_5_5_5_1, a Uint16Array must be supplied. // If the types do not match, an INVALID_OPERATION error is generated. - let received_size = if let Some(data) = data { - if unsafe { array_buffer_view_data_checked::(data).is_some() } { + let received_size = if data.is_null() { + element_size + } else { + if array_buffer_view_data_checked::(data).is_some() { 2 - } else if unsafe { array_buffer_view_data_checked::(data).is_some() } { + } else if array_buffer_view_data_checked::(data).is_some() { 1 } else { self.webgl_error(InvalidOperation); return Err(()); } - } else { - element_size }; if received_size != element_size { @@ -571,7 +571,6 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { receiver.recv().unwrap() } - #[allow(unsafe_code)] // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.5 fn GetBufferParameter(&self, _cx: *mut JSContext, target: u32, parameter: u32) -> JSVal { let (sender, receiver) = ipc::channel().unwrap(); @@ -845,7 +844,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { #[allow(unsafe_code)] // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.5 - fn BufferData(&self, _cx: *mut JSContext, target: u32, data: Option<*mut JSObject>, usage: u32) { + fn BufferData(&self, _cx: *mut JSContext, target: u32, data: *mut JSObject, usage: u32) { let bound_buffer = match target { constants::ARRAY_BUFFER => self.bound_buffer_array.get(), constants::ELEMENT_ARRAY_BUFFER => self.bound_buffer_element_array.get(), @@ -864,40 +863,37 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { _ => return self.webgl_error(InvalidEnum), } - let data = match data { - Some(data) => data, - None => return self.webgl_error(InvalidValue), - }; - if let Some(data_vec) = array_buffer_view_to_vec::(data) { handle_potential_webgl_error!(self, bound_buffer.buffer_data(target, &data_vec, usage)); } else { - // NB: array_buffer_view_to_vec should never fail when - // we have WebIDL support for Float32Array etc. + // NB: array_buffer_view_to_vec should never fail when we have + // WebIDL support for Float32Array etc. self.webgl_error(InvalidValue); } } #[allow(unsafe_code)] // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.5 - fn BufferSubData(&self, _cx: *mut JSContext, target: u32, offset: i64, data: Option<*mut JSObject>) { + fn BufferSubData(&self, _cx: *mut JSContext, target: u32, offset: i64, data: *mut JSObject) { let bound_buffer = match target { constants::ARRAY_BUFFER => self.bound_buffer_array.get(), constants::ELEMENT_ARRAY_BUFFER => self.bound_buffer_element_array.get(), _ => return self.webgl_error(InvalidEnum), }; + let bound_buffer = match bound_buffer { Some(bound_buffer) => bound_buffer, None => return self.webgl_error(InvalidOperation), }; - let data = match data { - Some(data) => data, - None => return self.webgl_error(InvalidValue), - }; + + if data.is_null() { + return self.webgl_error(InvalidValue); + } if offset < 0 { return self.webgl_error(InvalidValue); } + if let Some(data_vec) = array_buffer_view_to_vec::(data) { if (offset as usize) + data_vec.len() > bound_buffer.capacity() { return self.webgl_error(InvalidValue); @@ -906,6 +902,8 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { .send(CanvasMsg::WebGL(WebGLCommand::BufferSubData(target, offset as isize, data_vec))) .unwrap() } else { + // NB: array_buffer_view_to_vec should never fail when we have + // WebIDL support for Float32Array etc. self.webgl_error(InvalidValue); } } @@ -1653,6 +1651,10 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.12 fn ReadPixels(&self, _cx: *mut JSContext, x: i32, y: i32, width: i32, height: i32, format: u32, pixel_type: u32, pixels: *mut JSObject) { + if pixels.is_null() { + return self.webgl_error(InvalidValue); + } + let mut data = match unsafe { array_buffer_view_data::(pixels) } { Some(data) => data, None => return self.webgl_error(InvalidValue), @@ -1819,11 +1821,14 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { } // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10 + #[allow(unsafe_code)] fn Uniform1iv(&self, _cx: *mut JSContext, uniform: Option<&WebGLUniformLocation>, - data: Option<*mut JSObject>) { - let data_vec = data.and_then(|d| array_buffer_view_to_vec::(d)); + data: *mut JSObject) { + assert!(!data.is_null()); + let data_vec = unsafe { array_buffer_view_to_vec::(data) }; + if self.validate_uniform_parameters(uniform, UniformSetterType::Int, data_vec.as_ref().map(Vec::as_slice)) { self.ipc_renderer .send(CanvasMsg::WebGL(WebGLCommand::Uniform1iv(uniform.unwrap().id(), data_vec.unwrap()))) @@ -1832,11 +1837,14 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { } // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10 + #[allow(unsafe_code)] fn Uniform1fv(&self, _cx: *mut JSContext, uniform: Option<&WebGLUniformLocation>, - data: Option<*mut JSObject>) { - let data_vec = data.and_then(|d| array_buffer_view_to_vec::(d)); + data: *mut JSObject) { + assert!(!data.is_null()); + let data_vec = unsafe { array_buffer_view_to_vec::(data) }; + if self.validate_uniform_parameters(uniform, UniformSetterType::Float, data_vec.as_ref().map(Vec::as_slice)) { self.ipc_renderer .send(CanvasMsg::WebGL(WebGLCommand::Uniform1fv(uniform.unwrap().id(), data_vec.unwrap()))) @@ -1856,11 +1864,13 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { } // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10 + #[allow(unsafe_code)] fn Uniform2fv(&self, _cx: *mut JSContext, uniform: Option<&WebGLUniformLocation>, - data: Option<*mut JSObject>) { - let data_vec = data.and_then(|d| array_buffer_view_to_vec::(d)); + data: *mut JSObject) { + assert!(!data.is_null()); + let data_vec = unsafe { array_buffer_view_to_vec::(data) }; if self.validate_uniform_parameters(uniform, UniformSetterType::FloatVec2, data_vec.as_ref().map(Vec::as_slice)) { @@ -1884,11 +1894,14 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { } // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10 + #[allow(unsafe_code)] fn Uniform2iv(&self, _cx: *mut JSContext, uniform: Option<&WebGLUniformLocation>, - data: Option<*mut JSObject>) { - let data_vec = data.and_then(|d| array_buffer_view_to_vec::(d)); + data: *mut JSObject) { + assert!(!data.is_null()); + let data_vec = unsafe { array_buffer_view_to_vec::(data) }; + if self.validate_uniform_parameters(uniform, UniformSetterType::IntVec2, data_vec.as_ref().map(Vec::as_slice)) { @@ -1912,11 +1925,14 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { } // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10 + #[allow(unsafe_code)] fn Uniform3fv(&self, _cx: *mut JSContext, uniform: Option<&WebGLUniformLocation>, - data: Option<*mut JSObject>) { - let data_vec = data.and_then(|d| array_buffer_view_to_vec::(d)); + data: *mut JSObject) { + assert!(!data.is_null()); + let data_vec = unsafe { array_buffer_view_to_vec::(data) }; + if self.validate_uniform_parameters(uniform, UniformSetterType::FloatVec3, data_vec.as_ref().map(Vec::as_slice)) { @@ -1940,11 +1956,14 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { } // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10 + #[allow(unsafe_code)] fn Uniform3iv(&self, _cx: *mut JSContext, uniform: Option<&WebGLUniformLocation>, - data: Option<*mut JSObject>) { - let data_vec = data.and_then(|d| array_buffer_view_to_vec::(d)); + data: *mut JSObject) { + assert!(!data.is_null()); + let data_vec = unsafe { array_buffer_view_to_vec::(data) }; + if self.validate_uniform_parameters(uniform, UniformSetterType::IntVec3, data_vec.as_ref().map(Vec::as_slice)) { @@ -1969,11 +1988,14 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10 + #[allow(unsafe_code)] fn Uniform4iv(&self, _cx: *mut JSContext, uniform: Option<&WebGLUniformLocation>, - data: Option<*mut JSObject>) { - let data_vec = data.and_then(|d| array_buffer_view_to_vec::(d)); + data: *mut JSObject) { + assert!(!data.is_null()); + let data_vec = unsafe { array_buffer_view_to_vec::(data) }; + if self.validate_uniform_parameters(uniform, UniformSetterType::IntVec4, data_vec.as_ref().map(Vec::as_slice)) { @@ -1997,11 +2019,14 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { } // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10 + #[allow(unsafe_code)] fn Uniform4fv(&self, _cx: *mut JSContext, uniform: Option<&WebGLUniformLocation>, - data: Option<*mut JSObject>) { - let data_vec = data.and_then(|d| array_buffer_view_to_vec::(d)); + data: *mut JSObject) { + assert!(!data.is_null()); + let data_vec = unsafe { array_buffer_view_to_vec::(data) }; + if self.validate_uniform_parameters(uniform, UniformSetterType::FloatVec4, data_vec.as_ref().map(Vec::as_slice)) { @@ -2069,7 +2094,6 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { self.vertex_attrib(indx, x, y, z, 1f32) } - #[allow(unsafe_code)] // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10 fn VertexAttrib3fv(&self, _cx: *mut JSContext, indx: u32, data: *mut JSObject) { if let Some(data_vec) = array_buffer_view_to_vec_checked::(data) { @@ -2152,6 +2176,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { } // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.8 + #[allow(unsafe_code)] fn TexImage2D(&self, _cx: *mut JSContext, target: u32, @@ -2162,7 +2187,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { border: i32, format: u32, data_type: u32, - data: Option<*mut JSObject>) { + data: *mut JSObject) { let validator = TexImage2DValidator::new(self, target, level, internal_format, width, height, border, format, data_type); @@ -2181,22 +2206,21 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { Err(_) => return, // NB: The validator sets the correct error for us. }; - let expected_byte_length = match self.validate_tex_image_2d_data(width, - height, - format, - data_type, - data) { - Ok(byte_length) => byte_length, - Err(_) => return, - }; + let expected_byte_length = + match unsafe { self.validate_tex_image_2d_data(width, height, + format, data_type, + data) } { + Ok(byte_length) => byte_length, + Err(_) => return, + }; // If data is null, a buffer of sufficient size // initialized to 0 is passed. - let buff = if let Some(data) = data { + let buff = if data.is_null() { + vec![0u8; expected_byte_length as usize] + } else { array_buffer_view_to_vec::(data) .expect("Can't reach here without being an ArrayBufferView!") - } else { - vec![0u8; expected_byte_length as usize] }; if buff.len() != expected_byte_length as usize { @@ -2246,6 +2270,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { } // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.8 + #[allow(unsafe_code)] fn TexSubImage2D(&self, _cx: *mut JSContext, target: u32, @@ -2256,7 +2281,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { height: i32, format: u32, data_type: u32, - data: Option<*mut JSObject>) { + data: *mut JSObject) { let validator = TexImage2DValidator::new(self, target, level, format, width, height, 0, format, data_type); @@ -2274,22 +2299,21 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { Err(_) => return, // NB: The validator sets the correct error for us. }; - let expected_byte_length = match self.validate_tex_image_2d_data(width, - height, - format, - data_type, - data) { - Ok(byte_length) => byte_length, - Err(()) => return, - }; + let expected_byte_length = + match unsafe { self.validate_tex_image_2d_data(width, height, + format, data_type, + data) } { + Ok(byte_length) => byte_length, + Err(()) => return, + }; // If data is null, a buffer of sufficient size // initialized to 0 is passed. - let buff = if let Some(data) = data { + let buff = if data.is_null() { + vec![0u8; expected_byte_length as usize] + } else { array_buffer_view_to_vec::(data) .expect("Can't reach here without being an ArrayBufferView!") - } else { - vec![0u8; expected_byte_length as usize] }; if expected_byte_length != 0 && diff --git a/components/script/dom/webidls/WebGLRenderingContext.webidl b/components/script/dom/webidls/WebGLRenderingContext.webidl index 19e5f029168..dcc7a1a8bea 100644 --- a/components/script/dom/webidls/WebGLRenderingContext.webidl +++ b/components/script/dom/webidls/WebGLRenderingContext.webidl @@ -492,11 +492,11 @@ interface WebGLRenderingContextBase //void bufferData(GLenum target, GLsizeiptr size, GLenum usage); // FIXME(dmarcos) The function below is the original function in the webIdl: // void bufferData(GLenum target, BufferDataSource? data, GLenum usage); - // The Code generator doesn't handle BufferDataSource so we're using 'optional object' + // The Code generator doesn't handle BufferDataSource so we're using 'object?' // in the meantime - void bufferData(GLenum target, optional object data, GLenum usage); + void bufferData(GLenum target, object? data, GLenum usage); //void bufferSubData(GLenum target, GLintptr offset, BufferDataSource? data); - void bufferSubData(GLenum target, GLintptr offset, optional object data); + void bufferSubData(GLenum target, GLintptr offset, object? data); //[WebGLHandlesContextLoss] GLenum checkFramebufferStatus(GLenum target); void clear(GLbitfield mask); @@ -639,7 +639,7 @@ interface WebGLRenderingContextBase // FIXME: SM interface arguments void texImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, - GLenum type, optional object data); + GLenum type, object? data); void texImage2D(GLenum target, GLint level, GLenum internalformat, GLenum format, GLenum type, TexImageSource? source); // May throw DOMException @@ -648,47 +648,46 @@ interface WebGLRenderingContextBase void texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, - GLenum format, GLenum type, optional object data); + GLenum format, GLenum type, object? data); void texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLenum format, GLenum type, TexImageSource? source); // May throw DOMException void uniform1f(WebGLUniformLocation? location, GLfloat x); //void uniform1fv(WebGLUniformLocation? location, Float32Array v); //void uniform1fv(WebGLUniformLocation? location, sequence v); - void uniform1fv(WebGLUniformLocation? location, optional object v); + void uniform1fv(WebGLUniformLocation? location, object v); void uniform1i(WebGLUniformLocation? location, GLint x); //void uniform1iv(WebGLUniformLocation? location, Int32Array v); //void uniform1iv(WebGLUniformLocation? location, sequence v); - void uniform1iv(WebGLUniformLocation? location, optional object v); + void uniform1iv(WebGLUniformLocation? location, object v); void uniform2f(WebGLUniformLocation? location, GLfloat x, GLfloat y); //void uniform2fv(WebGLUniformLocation? location, Float32Array v); //void uniform2fv(WebGLUniformLocation? location, sequence v); - void uniform2fv(WebGLUniformLocation? location, optional object v); + void uniform2fv(WebGLUniformLocation? location, object v); //void uniform2i(WebGLUniformLocation? location, GLint x, GLint y); void uniform2i(WebGLUniformLocation? location, GLint x, GLint y); //void uniform2iv(WebGLUniformLocation? location, Int32Array v); //void uniform2iv(WebGLUniformLocation? location, sequence v); - void uniform2iv(WebGLUniformLocation? location, optional object v); + void uniform2iv(WebGLUniformLocation? location, object v); void uniform3f(WebGLUniformLocation? location, GLfloat x, GLfloat y, GLfloat z); - void uniform3fv(WebGLUniformLocation? location, optional object v); + void uniform3fv(WebGLUniformLocation? location, object v); //void uniform3fv(WebGLUniformLocation? location, Float32Array v); //void uniform3fv(WebGLUniformLocation? location, sequence v); void uniform3i(WebGLUniformLocation? location, GLint x, GLint y, GLint z); //void uniform3iv(WebGLUniformLocation? location, Int32Array v); //void uniform3iv(WebGLUniformLocation? location, sequence v); - void uniform3iv(WebGLUniformLocation? location, optional object v); + void uniform3iv(WebGLUniformLocation? location, object v); void uniform4f(WebGLUniformLocation? location, GLfloat x, GLfloat y, GLfloat z, GLfloat w); // FIXME(dmarcos) The function below is the original function in the webIdl: //void uniform4fv(WebGLUniformLocation? location, Float32Array v); - // The Code genearator doesn't handle BufferDataSource so we're using 'optional object' - // in the meantime - void uniform4fv(WebGLUniformLocation? location, optional object v); + // The Code genearator doesn't handle typed arrays, so we use object instead. + void uniform4fv(WebGLUniformLocation? location, object v); //void uniform4fv(WebGLUniformLocation? location, sequence v); void uniform4i(WebGLUniformLocation? location, GLint x, GLint y, GLint z, GLint w); //void uniform4iv(WebGLUniformLocation? location, Int32Array v); //void uniform4iv(WebGLUniformLocation? location, sequence v); // See FIXME above - void uniform4iv(WebGLUniformLocation? location, optional object v); + void uniform4iv(WebGLUniformLocation? location, object v); //void uniformMatrix2fv(WebGLUniformLocation? location, GLboolean transpose, // Float32Array value); From 602246a14ccf3027232d642eaa30ed97dab48c2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20Cobos=20=C3=81lvarez?= Date: Sat, 17 Sep 2016 13:59:42 -0700 Subject: [PATCH 2/5] script: Mark as unsafe multiple array_buffer_view_to_xxx functions that take a raw JSObject pointer. --- components/script/dom/bindings/conversions.rs | 40 ++++++++++--------- .../script/dom/webglrenderingcontext.rs | 32 ++++++++++----- 2 files changed, 44 insertions(+), 28 deletions(-) diff --git a/components/script/dom/bindings/conversions.rs b/components/script/dom/bindings/conversions.rs index 0b050a4fc64..e87feadf9e0 100644 --- a/components/script/dom/bindings/conversions.rs +++ b/components/script/dom/bindings/conversions.rs @@ -532,9 +532,11 @@ unsafe impl ArrayBufferViewContents for f64 { } } -/// Returns a mutable slice of the Array Buffer View data, viewed as T, without checking the real -/// type of it. -pub unsafe fn array_buffer_view_data<'a, T: ArrayBufferViewContents>(abv: *mut JSObject) -> Option<&'a mut [T]> { +/// Returns a mutable slice of the Array Buffer View data, viewed as T, without +/// checking the real type of it. +pub unsafe fn array_buffer_view_data<'a, T>(abv: *mut JSObject) -> Option<&'a mut [T]> + where T: ArrayBufferViewContents +{ assert!(!abv.is_null()); let mut byte_length = 0; @@ -548,17 +550,19 @@ pub unsafe fn array_buffer_view_data<'a, T: ArrayBufferViewContents>(abv: *mut J Some(slice::from_raw_parts_mut(ptr as *mut T, byte_length as usize / mem::size_of::())) } -/// Returns a copy of the ArrayBufferView data, viewed as T, without checking the real type of it. -pub fn array_buffer_view_to_vec(abv: *mut JSObject) -> Option> { - unsafe { - array_buffer_view_data(abv).map(|data| data.to_vec()) - } +/// Returns a copy of the ArrayBufferView data, viewed as T, without checking +/// the real type of it. +pub unsafe fn array_buffer_view_to_vec(abv: *mut JSObject) -> Option> + where T: ArrayBufferViewContents +{ + array_buffer_view_data(abv).map(|data| data.to_vec()) } -/// Returns a mutable slice of the Array Buffer View data, viewed as T, checking that the real type -/// of it is ty. -pub unsafe fn array_buffer_view_data_checked<'a, T: ArrayBufferViewContents>(abv: *mut JSObject) - -> Option<&'a mut [T]> { +/// Returns a mutable slice of the Array Buffer View data, viewed as T, checking +/// that the real type of it is ty. +pub unsafe fn array_buffer_view_data_checked<'a, T>(abv: *mut JSObject) -> Option<&'a mut [T]> + where T: ArrayBufferViewContents +{ array_buffer_view_data::(abv).and_then(|data| { if T::is_type_compatible(JS_GetArrayBufferViewType(abv)) { Some(data) @@ -568,12 +572,12 @@ pub unsafe fn array_buffer_view_data_checked<'a, T: ArrayBufferViewContents>(abv }) } -/// Returns a copy of the ArrayBufferView data, viewed as T, checking that the real type -/// of it is ty. -pub fn array_buffer_view_to_vec_checked(abv: *mut JSObject) -> Option> { - unsafe { - array_buffer_view_data_checked(abv).map(|data| data.to_vec()) - } +/// Returns a copy of the ArrayBufferView data, viewed as T, checking that the +/// real type of it is ty. +pub unsafe fn array_buffer_view_to_vec_checked(abv: *mut JSObject) -> Option> + where T: ArrayBufferViewContents +{ + array_buffer_view_data_checked(abv).map(|data| data.to_vec()) } /// Returns whether `value` is an array-like object. diff --git a/components/script/dom/webglrenderingcontext.rs b/components/script/dom/webglrenderingcontext.rs index 0b285ba21be..644066b6710 100644 --- a/components/script/dom/webglrenderingcontext.rs +++ b/components/script/dom/webglrenderingcontext.rs @@ -863,7 +863,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { _ => return self.webgl_error(InvalidEnum), } - if let Some(data_vec) = array_buffer_view_to_vec::(data) { + if let Some(data_vec) = unsafe { array_buffer_view_to_vec::(data) } { handle_potential_webgl_error!(self, bound_buffer.buffer_data(target, &data_vec, usage)); } else { // NB: array_buffer_view_to_vec should never fail when we have @@ -894,7 +894,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { return self.webgl_error(InvalidValue); } - if let Some(data_vec) = array_buffer_view_to_vec::(data) { + if let Some(data_vec) = unsafe { array_buffer_view_to_vec::(data) } { if (offset as usize) + data_vec.len() > bound_buffer.capacity() { return self.webgl_error(InvalidValue); } @@ -2061,8 +2061,10 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { } // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10 + #[allow(unsafe_code)] fn VertexAttrib1fv(&self, _cx: *mut JSContext, indx: u32, data: *mut JSObject) { - if let Some(data_vec) = array_buffer_view_to_vec_checked::(data) { + assert!(!data.is_null()); + if let Some(data_vec) = unsafe { array_buffer_view_to_vec_checked::(data) } { if data_vec.len() < 1 { return self.webgl_error(InvalidOperation); } @@ -2078,8 +2080,10 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { } // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10 + #[allow(unsafe_code)] fn VertexAttrib2fv(&self, _cx: *mut JSContext, indx: u32, data: *mut JSObject) { - if let Some(data_vec) = array_buffer_view_to_vec_checked::(data) { + assert!(!data.is_null()); + if let Some(data_vec) = unsafe { array_buffer_view_to_vec_checked::(data) } { if data_vec.len() < 2 { return self.webgl_error(InvalidOperation); } @@ -2095,8 +2099,10 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { } // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10 + #[allow(unsafe_code)] fn VertexAttrib3fv(&self, _cx: *mut JSContext, indx: u32, data: *mut JSObject) { - if let Some(data_vec) = array_buffer_view_to_vec_checked::(data) { + assert!(!data.is_null()); + if let Some(data_vec) = unsafe { array_buffer_view_to_vec_checked::(data) } { if data_vec.len() < 3 { return self.webgl_error(InvalidOperation); } @@ -2112,8 +2118,10 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { } // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10 + #[allow(unsafe_code)] fn VertexAttrib4fv(&self, _cx: *mut JSContext, indx: u32, data: *mut JSObject) { - if let Some(data_vec) = array_buffer_view_to_vec_checked::(data) { + assert!(!data.is_null()); + if let Some(data_vec) = unsafe { array_buffer_view_to_vec_checked::(data) } { if data_vec.len() < 4 { return self.webgl_error(InvalidOperation); } @@ -2219,8 +2227,10 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { let buff = if data.is_null() { vec![0u8; expected_byte_length as usize] } else { - array_buffer_view_to_vec::(data) - .expect("Can't reach here without being an ArrayBufferView!") + unsafe { + array_buffer_view_to_vec::(data) + .expect("Can't reach here without being an ArrayBufferView!") + } }; if buff.len() != expected_byte_length as usize { @@ -2312,8 +2322,10 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { let buff = if data.is_null() { vec![0u8; expected_byte_length as usize] } else { - array_buffer_view_to_vec::(data) - .expect("Can't reach here without being an ArrayBufferView!") + unsafe { + array_buffer_view_to_vec::(data) + .expect("Can't reach here without being an ArrayBufferView!") + } }; if expected_byte_length != 0 && From f985a73caeef534c3eacf1cbc8c7337064b6f005 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20Cobos=20=C3=81lvarez?= Date: Sat, 17 Sep 2016 15:59:16 -0700 Subject: [PATCH 3/5] webgl: Handle both sequences and typed arrays, managing the type error ourselves. This is a step with multiple intentions: * Be correct. * Unlock tests that are blocking @anholt. * Ease the transition to typed arrays once the changes by @Ms2ger start rolling in, since I expect the amount of test expectations to update to be non-trivial. --- .../script/dom/webglrenderingcontext.rs | 401 ++++++++++-------- .../dom/webidls/WebGLRenderingContext.webidl | 30 +- 2 files changed, 259 insertions(+), 172 deletions(-) diff --git a/components/script/dom/webglrenderingcontext.rs b/components/script/dom/webglrenderingcontext.rs index 644066b6710..ae971503864 100644 --- a/components/script/dom/webglrenderingcontext.rs +++ b/components/script/dom/webglrenderingcontext.rs @@ -8,8 +8,10 @@ use dom::bindings::codegen::Bindings::WebGLRenderingContextBinding::{self, WebGL use dom::bindings::codegen::Bindings::WebGLRenderingContextBinding::WebGLRenderingContextConstants as constants; use dom::bindings::codegen::Bindings::WebGLRenderingContextBinding::WebGLRenderingContextMethods; use dom::bindings::codegen::UnionTypes::ImageDataOrHTMLImageElementOrHTMLCanvasElementOrHTMLVideoElement; -use dom::bindings::conversions::{ToJSValConvertible, array_buffer_view_data, array_buffer_view_data_checked}; -use dom::bindings::conversions::{array_buffer_view_to_vec, array_buffer_view_to_vec_checked}; +use dom::bindings::conversions::{ArrayBufferViewContents, ConversionResult, FromJSValConvertible, ToJSValConvertible}; +use dom::bindings::conversions::{array_buffer_view_data, array_buffer_view_data_checked, array_buffer_view_to_vec}; +use dom::bindings::conversions::array_buffer_view_to_vec_checked; +use dom::bindings::error::{Error, Fallible}; use dom::bindings::inheritance::Castable; use dom::bindings::js::{JS, LayoutJS, MutNullableHeap, Root}; use dom::bindings::reflector::{Reflectable, Reflector, reflect_dom_object}; @@ -34,6 +36,7 @@ use dom::webgltexture::{TexParameterValue, WebGLTexture}; use dom::webgluniformlocation::WebGLUniformLocation; use euclid::size::Size2D; use ipc_channel::ipc::{self, IpcSender}; +use js::conversions::ConversionBehavior; use js::jsapi::{JSContext, JSObject, JS_GetArrayBufferViewType, Type}; use js::jsval::{BooleanValue, DoubleValue, Int32Value, JSVal, NullValue, UndefinedValue}; use net_traits::image::base::PixelFormat; @@ -288,7 +291,7 @@ impl WebGLRenderingContext { fn validate_uniform_parameters(&self, uniform: Option<&WebGLUniformLocation>, uniform_type: UniformSetterType, - data: Option<&[T]>) -> bool { + data: &[T]) -> bool { let uniform = match uniform { Some(uniform) => uniform, None => return false, @@ -303,14 +306,6 @@ impl WebGLRenderingContext { }, }; - let data = match data { - Some(data) => data, - None => { - self.webgl_error(InvalidOperation); - return false; - }, - }; - // TODO(emilio): Get more complex uniform info from ANGLE, and use it to // properly validate that the uniform setter type is compatible with the // uniform type, and that the uniform size matches. @@ -391,12 +386,12 @@ impl WebGLRenderingContext { // TODO(emilio): Move this logic to a validator. #[allow(unsafe_code)] unsafe fn validate_tex_image_2d_data(&self, - width: u32, - height: u32, - format: TexFormat, - data_type: TexDataType, - data: *mut JSObject) - -> Result { + width: u32, + height: u32, + format: TexFormat, + data_type: TexDataType, + data: *mut JSObject) + -> Result { let element_size = data_type.element_size(); let components_per_element = data_type.components_per_element(); let components = format.components(); @@ -531,6 +526,45 @@ impl Drop for WebGLRenderingContext { } } +// FIXME: After [1] lands and the relevant Servo and codegen PR too, we should +// convert all our raw JSObject pointers to proper types. +// +// [1]: https://github.com/servo/rust-mozjs/pull/304 +#[allow(unsafe_code)] +unsafe fn typed_array_or_sequence_to_vec(cx: *mut JSContext, + sequence_or_abv: *mut JSObject, + config: ::Config) -> Result, Error> + where T: ArrayBufferViewContents + FromJSValConvertible, + ::Config: Clone, +{ + assert!(!sequence_or_abv.is_null()); + if let Some(v) = array_buffer_view_to_vec_checked::(sequence_or_abv) { + return Ok(v); + } + + rooted!(in(cx) let mut val = UndefinedValue()); + sequence_or_abv.to_jsval(cx, val.handle_mut()); + + match Vec::::from_jsval(cx, val.handle(), config) { + Ok(ConversionResult::Success(v)) => Ok(v), + Ok(ConversionResult::Failure(error)) => Err(Error::Type(error.into_owned())), + // FIXME: What to do here? Generated code only aborts the execution of + // the script. + Err(err) => panic!("unexpected conversion error: {:?}", err), + } +} + +#[allow(unsafe_code)] +unsafe fn fallible_array_buffer_view_to_vec(abv: *mut JSObject) -> Result, Error> + where T: ArrayBufferViewContents +{ + assert!(!abv.is_null()); + match array_buffer_view_to_vec::(abv) { + Some(v) => Ok(v), + None => Err(Error::Type("Not an ArrayBufferView".to_owned())), + } +} + impl WebGLRenderingContextMethods for WebGLRenderingContext { // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.1 fn Canvas(&self) -> Root { @@ -844,85 +878,92 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { #[allow(unsafe_code)] // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.5 - fn BufferData(&self, _cx: *mut JSContext, target: u32, data: *mut JSObject, usage: u32) { + fn BufferData(&self, _cx: *mut JSContext, target: u32, data: *mut JSObject, usage: u32) -> Fallible<()> { + if data.is_null() { + return Ok(self.webgl_error(InvalidValue)); + } + + let data_vec = try!(unsafe { fallible_array_buffer_view_to_vec::(data) }); + let bound_buffer = match target { constants::ARRAY_BUFFER => self.bound_buffer_array.get(), constants::ELEMENT_ARRAY_BUFFER => self.bound_buffer_element_array.get(), - _ => return self.webgl_error(InvalidEnum), + _ => return Ok(self.webgl_error(InvalidEnum)), }; let bound_buffer = match bound_buffer { Some(bound_buffer) => bound_buffer, - None => return self.webgl_error(InvalidValue), + None => return Ok(self.webgl_error(InvalidValue)), }; match usage { constants::STREAM_DRAW | constants::STATIC_DRAW | constants::DYNAMIC_DRAW => (), - _ => return self.webgl_error(InvalidEnum), + _ => return Ok(self.webgl_error(InvalidEnum)), } - if let Some(data_vec) = unsafe { array_buffer_view_to_vec::(data) } { - handle_potential_webgl_error!(self, bound_buffer.buffer_data(target, &data_vec, usage)); - } else { - // NB: array_buffer_view_to_vec should never fail when we have - // WebIDL support for Float32Array etc. - self.webgl_error(InvalidValue); - } + handle_potential_webgl_error!(self, bound_buffer.buffer_data(target, &data_vec, usage)); + + Ok(()) } #[allow(unsafe_code)] // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.5 - fn BufferSubData(&self, _cx: *mut JSContext, target: u32, offset: i64, data: *mut JSObject) { + fn BufferSubData(&self, _cx: *mut JSContext, target: u32, offset: i64, data: *mut JSObject) -> Fallible<()> { + if data.is_null() { + return Ok(self.webgl_error(InvalidValue)); + } + + let data_vec = try!(unsafe { fallible_array_buffer_view_to_vec::(data) }); + let bound_buffer = match target { constants::ARRAY_BUFFER => self.bound_buffer_array.get(), constants::ELEMENT_ARRAY_BUFFER => self.bound_buffer_element_array.get(), - _ => return self.webgl_error(InvalidEnum), + _ => return Ok(self.webgl_error(InvalidEnum)), }; let bound_buffer = match bound_buffer { Some(bound_buffer) => bound_buffer, - None => return self.webgl_error(InvalidOperation), + None => return Ok(self.webgl_error(InvalidOperation)), }; - if data.is_null() { - return self.webgl_error(InvalidValue); - } - if offset < 0 { - return self.webgl_error(InvalidValue); + return Ok(self.webgl_error(InvalidValue)); } - if let Some(data_vec) = unsafe { array_buffer_view_to_vec::(data) } { - if (offset as usize) + data_vec.len() > bound_buffer.capacity() { - return self.webgl_error(InvalidValue); - } - self.ipc_renderer - .send(CanvasMsg::WebGL(WebGLCommand::BufferSubData(target, offset as isize, data_vec))) - .unwrap() - } else { - // NB: array_buffer_view_to_vec should never fail when we have - // WebIDL support for Float32Array etc. - self.webgl_error(InvalidValue); + if (offset as usize) + data_vec.len() > bound_buffer.capacity() { + return Ok(self.webgl_error(InvalidValue)); } + self.ipc_renderer + .send(CanvasMsg::WebGL(WebGLCommand::BufferSubData(target, offset as isize, data_vec))) + .unwrap(); + + Ok(()) } + #[allow(unsafe_code)] // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.8 fn CompressedTexImage2D(&self, _cx: *mut JSContext, _target: u32, _level: i32, _internal_format: u32, - _width: i32, _height: i32, _border: i32, _pixels: *mut JSObject) { + _width: i32, _height: i32, _border: i32, pixels: *mut JSObject) -> Fallible<()> { + let _data = try!(unsafe { fallible_array_buffer_view_to_vec::(pixels) }); // FIXME: No compressed texture format is currently supported, so error out as per // https://www.khronos.org/registry/webgl/specs/latest/1.0/#COMPRESSED_TEXTURE_SUPPORT - self.webgl_error(InvalidEnum) + self.webgl_error(InvalidEnum); + Ok(()) } + #[allow(unsafe_code)] // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.8 fn CompressedTexSubImage2D(&self, _cx: *mut JSContext, _target: u32, _level: i32, _xoffset: i32, _yoffset: i32, _width: i32, _height: i32, - _format: u32, _pixels: *mut JSObject) { + _format: u32, pixels: *mut JSObject) -> Fallible<()> { + let _data = try!(unsafe { fallible_array_buffer_view_to_vec::(pixels) }); // FIXME: No compressed texture format is currently supported, so error out as per // https://www.khronos.org/registry/webgl/specs/latest/1.0/#COMPRESSED_TEXTURE_SUPPORT - self.webgl_error(InvalidEnum) + self.webgl_error(InvalidEnum); + + Ok(()) } // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.8 @@ -1650,23 +1691,23 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { #[allow(unsafe_code)] // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.12 fn ReadPixels(&self, _cx: *mut JSContext, x: i32, y: i32, width: i32, height: i32, - format: u32, pixel_type: u32, pixels: *mut JSObject) { + format: u32, pixel_type: u32, pixels: *mut JSObject) -> Fallible<()> { if pixels.is_null() { - return self.webgl_error(InvalidValue); + return Ok(self.webgl_error(InvalidValue)); } let mut data = match unsafe { array_buffer_view_data::(pixels) } { Some(data) => data, - None => return self.webgl_error(InvalidValue), + None => return Err(Error::Type("Not an ArrayBufferView".to_owned())), }; if !self.validate_framebuffer_complete() { - return; + return Ok(()); } match unsafe { JS_GetArrayBufferViewType(pixels) } { Type::Uint8 => (), - _ => return self.webgl_error(InvalidOperation) + _ => return Ok(self.webgl_error(InvalidOperation)), } let (sender, receiver) = ipc::channel().unwrap(); @@ -1677,12 +1718,14 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { let result = receiver.recv().unwrap(); if result.len() > data.len() { - return self.webgl_error(InvalidOperation) + return Ok(self.webgl_error(InvalidOperation)); } for i in 0..result.len() { data[i] = result[i] } + + Ok(()) } // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.3 @@ -1802,7 +1845,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { fn Uniform1f(&self, uniform: Option<&WebGLUniformLocation>, val: f32) { - if self.validate_uniform_parameters(uniform, UniformSetterType::Float, Some(&[val])) { + if self.validate_uniform_parameters(uniform, UniformSetterType::Float, &[val]) { self.ipc_renderer .send(CanvasMsg::WebGL(WebGLCommand::Uniform1f(uniform.unwrap().id(), val))) .unwrap() @@ -1813,7 +1856,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { fn Uniform1i(&self, uniform: Option<&WebGLUniformLocation>, val: i32) { - if self.validate_uniform_parameters(uniform, UniformSetterType::Int, Some(&[val])) { + if self.validate_uniform_parameters(uniform, UniformSetterType::Int, &[val]) { self.ipc_renderer .send(CanvasMsg::WebGL(WebGLCommand::Uniform1i(uniform.unwrap().id(), val))) .unwrap() @@ -1823,40 +1866,44 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10 #[allow(unsafe_code)] fn Uniform1iv(&self, - _cx: *mut JSContext, + cx: *mut JSContext, uniform: Option<&WebGLUniformLocation>, - data: *mut JSObject) { + data: *mut JSObject) -> Fallible<()> { assert!(!data.is_null()); - let data_vec = unsafe { array_buffer_view_to_vec::(data) }; + let data_vec = try!(unsafe { typed_array_or_sequence_to_vec::(cx, data, ConversionBehavior::Default) }); - if self.validate_uniform_parameters(uniform, UniformSetterType::Int, data_vec.as_ref().map(Vec::as_slice)) { + if self.validate_uniform_parameters(uniform, UniformSetterType::Int, &data_vec) { self.ipc_renderer - .send(CanvasMsg::WebGL(WebGLCommand::Uniform1iv(uniform.unwrap().id(), data_vec.unwrap()))) + .send(CanvasMsg::WebGL(WebGLCommand::Uniform1iv(uniform.unwrap().id(), data_vec))) .unwrap() } + + Ok(()) } // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10 #[allow(unsafe_code)] fn Uniform1fv(&self, - _cx: *mut JSContext, + cx: *mut JSContext, uniform: Option<&WebGLUniformLocation>, - data: *mut JSObject) { + data: *mut JSObject) -> Fallible<()> { assert!(!data.is_null()); - let data_vec = unsafe { array_buffer_view_to_vec::(data) }; + let data_vec = try!(unsafe { typed_array_or_sequence_to_vec::(cx, data, ()) }); - if self.validate_uniform_parameters(uniform, UniformSetterType::Float, data_vec.as_ref().map(Vec::as_slice)) { + if self.validate_uniform_parameters(uniform, UniformSetterType::Float, &data_vec) { self.ipc_renderer - .send(CanvasMsg::WebGL(WebGLCommand::Uniform1fv(uniform.unwrap().id(), data_vec.unwrap()))) + .send(CanvasMsg::WebGL(WebGLCommand::Uniform1fv(uniform.unwrap().id(), data_vec))) .unwrap() } + + Ok(()) } // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10 fn Uniform2f(&self, uniform: Option<&WebGLUniformLocation>, x: f32, y: f32) { - if self.validate_uniform_parameters(uniform, UniformSetterType::FloatVec2, Some(&[x, y])) { + if self.validate_uniform_parameters(uniform, UniformSetterType::FloatVec2, &[x, y]) { self.ipc_renderer .send(CanvasMsg::WebGL(WebGLCommand::Uniform2f(uniform.unwrap().id(), x, y))) .unwrap() @@ -1866,18 +1913,21 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10 #[allow(unsafe_code)] fn Uniform2fv(&self, - _cx: *mut JSContext, + cx: *mut JSContext, uniform: Option<&WebGLUniformLocation>, - data: *mut JSObject) { + data: *mut JSObject) -> Fallible<()> { assert!(!data.is_null()); - let data_vec = unsafe { array_buffer_view_to_vec::(data) }; + let data_vec = try!(unsafe { typed_array_or_sequence_to_vec::(cx, data, ()) }); + if self.validate_uniform_parameters(uniform, UniformSetterType::FloatVec2, - data_vec.as_ref().map(Vec::as_slice)) { + &data_vec) { self.ipc_renderer - .send(CanvasMsg::WebGL(WebGLCommand::Uniform2fv(uniform.unwrap().id(), data_vec.unwrap()))) + .send(CanvasMsg::WebGL(WebGLCommand::Uniform2fv(uniform.unwrap().id(), data_vec))) .unwrap() } + + Ok(()) } // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10 @@ -1886,7 +1936,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { x: i32, y: i32) { if self.validate_uniform_parameters(uniform, UniformSetterType::IntVec2, - Some(&[x, y])) { + &[x, y]) { self.ipc_renderer .send(CanvasMsg::WebGL(WebGLCommand::Uniform2i(uniform.unwrap().id(), x, y))) .unwrap() @@ -1896,19 +1946,21 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10 #[allow(unsafe_code)] fn Uniform2iv(&self, - _cx: *mut JSContext, + cx: *mut JSContext, uniform: Option<&WebGLUniformLocation>, - data: *mut JSObject) { + data: *mut JSObject) -> Fallible<()> { assert!(!data.is_null()); - let data_vec = unsafe { array_buffer_view_to_vec::(data) }; + let data_vec = try!(unsafe { typed_array_or_sequence_to_vec::(cx, data, ConversionBehavior::Default) }); if self.validate_uniform_parameters(uniform, UniformSetterType::IntVec2, - data_vec.as_ref().map(Vec::as_slice)) { + &data_vec) { self.ipc_renderer - .send(CanvasMsg::WebGL(WebGLCommand::Uniform2iv(uniform.unwrap().id(), data_vec.unwrap()))) + .send(CanvasMsg::WebGL(WebGLCommand::Uniform2iv(uniform.unwrap().id(), data_vec))) .unwrap() } + + Ok(()) } // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10 @@ -1917,7 +1969,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { x: f32, y: f32, z: f32) { if self.validate_uniform_parameters(uniform, UniformSetterType::FloatVec3, - Some(&[x, y, z])) { + &[x, y, z]) { self.ipc_renderer .send(CanvasMsg::WebGL(WebGLCommand::Uniform3f(uniform.unwrap().id(), x, y, z))) .unwrap() @@ -1927,19 +1979,21 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10 #[allow(unsafe_code)] fn Uniform3fv(&self, - _cx: *mut JSContext, + cx: *mut JSContext, uniform: Option<&WebGLUniformLocation>, - data: *mut JSObject) { + data: *mut JSObject) -> Fallible<()> { assert!(!data.is_null()); - let data_vec = unsafe { array_buffer_view_to_vec::(data) }; + let data_vec = try!(unsafe { typed_array_or_sequence_to_vec::(cx, data, ()) }); if self.validate_uniform_parameters(uniform, UniformSetterType::FloatVec3, - data_vec.as_ref().map(Vec::as_slice)) { + &data_vec) { self.ipc_renderer - .send(CanvasMsg::WebGL(WebGLCommand::Uniform3fv(uniform.unwrap().id(), data_vec.unwrap()))) + .send(CanvasMsg::WebGL(WebGLCommand::Uniform3fv(uniform.unwrap().id(), data_vec))) .unwrap() } + + Ok(()) } // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10 @@ -1948,7 +2002,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { x: i32, y: i32, z: i32) { if self.validate_uniform_parameters(uniform, UniformSetterType::IntVec3, - Some(&[x, y, z])) { + &[x, y, z]) { self.ipc_renderer .send(CanvasMsg::WebGL(WebGLCommand::Uniform3i(uniform.unwrap().id(), x, y, z))) .unwrap() @@ -1958,19 +2012,21 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10 #[allow(unsafe_code)] fn Uniform3iv(&self, - _cx: *mut JSContext, + cx: *mut JSContext, uniform: Option<&WebGLUniformLocation>, - data: *mut JSObject) { + data: *mut JSObject) -> Fallible<()> { assert!(!data.is_null()); - let data_vec = unsafe { array_buffer_view_to_vec::(data) }; + let data_vec = try!(unsafe { typed_array_or_sequence_to_vec::(cx, data, ConversionBehavior::Default) }); if self.validate_uniform_parameters(uniform, UniformSetterType::IntVec3, - data_vec.as_ref().map(Vec::as_slice)) { + &data_vec) { self.ipc_renderer - .send(CanvasMsg::WebGL(WebGLCommand::Uniform3iv(uniform.unwrap().id(), data_vec.unwrap()))) + .send(CanvasMsg::WebGL(WebGLCommand::Uniform3iv(uniform.unwrap().id(), data_vec))) .unwrap() } + + Ok(()) } // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10 @@ -1979,7 +2035,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { x: i32, y: i32, z: i32, w: i32) { if self.validate_uniform_parameters(uniform, UniformSetterType::IntVec4, - Some(&[x, y, z, w])) { + &[x, y, z, w]) { self.ipc_renderer .send(CanvasMsg::WebGL(WebGLCommand::Uniform4i(uniform.unwrap().id(), x, y, z, w))) .unwrap() @@ -1990,19 +2046,21 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10 #[allow(unsafe_code)] fn Uniform4iv(&self, - _cx: *mut JSContext, + cx: *mut JSContext, uniform: Option<&WebGLUniformLocation>, - data: *mut JSObject) { + data: *mut JSObject) -> Fallible<()> { assert!(!data.is_null()); - let data_vec = unsafe { array_buffer_view_to_vec::(data) }; + let data_vec = try!(unsafe { typed_array_or_sequence_to_vec::(cx, data, ConversionBehavior::Default) }); if self.validate_uniform_parameters(uniform, UniformSetterType::IntVec4, - data_vec.as_ref().map(Vec::as_slice)) { + &data_vec) { self.ipc_renderer - .send(CanvasMsg::WebGL(WebGLCommand::Uniform4iv(uniform.unwrap().id(), data_vec.unwrap()))) + .send(CanvasMsg::WebGL(WebGLCommand::Uniform4iv(uniform.unwrap().id(), data_vec))) .unwrap() } + + Ok(()) } // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10 @@ -2011,7 +2069,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { x: f32, y: f32, z: f32, w: f32) { if self.validate_uniform_parameters(uniform, UniformSetterType::FloatVec4, - Some(&[x, y, z, w])) { + &[x, y, z, w]) { self.ipc_renderer .send(CanvasMsg::WebGL(WebGLCommand::Uniform4f(uniform.unwrap().id(), x, y, z, w))) .unwrap() @@ -2021,19 +2079,21 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10 #[allow(unsafe_code)] fn Uniform4fv(&self, - _cx: *mut JSContext, + cx: *mut JSContext, uniform: Option<&WebGLUniformLocation>, - data: *mut JSObject) { + data: *mut JSObject) -> Fallible<()> { assert!(!data.is_null()); - let data_vec = unsafe { array_buffer_view_to_vec::(data) }; + let data_vec = try!(unsafe { typed_array_or_sequence_to_vec::(cx, data, ()) }); if self.validate_uniform_parameters(uniform, UniformSetterType::FloatVec4, - data_vec.as_ref().map(Vec::as_slice)) { + &data_vec) { self.ipc_renderer - .send(CanvasMsg::WebGL(WebGLCommand::Uniform4fv(uniform.unwrap().id(), data_vec.unwrap()))) + .send(CanvasMsg::WebGL(WebGLCommand::Uniform4fv(uniform.unwrap().id(), data_vec))) .unwrap() } + + Ok(()) } // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.9 @@ -2062,16 +2122,14 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10 #[allow(unsafe_code)] - fn VertexAttrib1fv(&self, _cx: *mut JSContext, indx: u32, data: *mut JSObject) { + fn VertexAttrib1fv(&self, cx: *mut JSContext, indx: u32, data: *mut JSObject) -> Fallible<()> { assert!(!data.is_null()); - if let Some(data_vec) = unsafe { array_buffer_view_to_vec_checked::(data) } { - if data_vec.len() < 1 { - return self.webgl_error(InvalidOperation); - } - self.vertex_attrib(indx, data_vec[0], 0f32, 0f32, 1f32) - } else { - self.webgl_error(InvalidValue); + let data_vec = try!(unsafe { typed_array_or_sequence_to_vec::(cx, data, ()) }); + if data_vec.len() < 1 { + return Ok(self.webgl_error(InvalidOperation)); } + self.vertex_attrib(indx, data_vec[0], 0f32, 0f32, 1f32); + Ok(()) } // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10 @@ -2081,16 +2139,14 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10 #[allow(unsafe_code)] - fn VertexAttrib2fv(&self, _cx: *mut JSContext, indx: u32, data: *mut JSObject) { + fn VertexAttrib2fv(&self, cx: *mut JSContext, indx: u32, data: *mut JSObject) -> Fallible<()> { assert!(!data.is_null()); - if let Some(data_vec) = unsafe { array_buffer_view_to_vec_checked::(data) } { - if data_vec.len() < 2 { - return self.webgl_error(InvalidOperation); - } - self.vertex_attrib(indx, data_vec[0], data_vec[1], 0f32, 1f32) - } else { - self.webgl_error(InvalidValue); + let data_vec = try!(unsafe { typed_array_or_sequence_to_vec::(cx, data, ()) }); + if data_vec.len() < 2 { + return Ok(self.webgl_error(InvalidOperation)); } + self.vertex_attrib(indx, data_vec[0], data_vec[1], 0f32, 1f32); + Ok(()) } // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10 @@ -2100,16 +2156,14 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10 #[allow(unsafe_code)] - fn VertexAttrib3fv(&self, _cx: *mut JSContext, indx: u32, data: *mut JSObject) { + fn VertexAttrib3fv(&self, cx: *mut JSContext, indx: u32, data: *mut JSObject) -> Fallible<()> { assert!(!data.is_null()); - if let Some(data_vec) = unsafe { array_buffer_view_to_vec_checked::(data) } { - if data_vec.len() < 3 { - return self.webgl_error(InvalidOperation); - } - self.vertex_attrib(indx, data_vec[0], data_vec[1], data_vec[2], 1f32) - } else { - self.webgl_error(InvalidValue); + let data_vec = try!(unsafe { typed_array_or_sequence_to_vec::(cx, data, ()) }); + if data_vec.len() < 3 { + return Ok(self.webgl_error(InvalidOperation)); } + self.vertex_attrib(indx, data_vec[0], data_vec[1], data_vec[2], 1f32); + Ok(()) } // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10 @@ -2119,16 +2173,15 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10 #[allow(unsafe_code)] - fn VertexAttrib4fv(&self, _cx: *mut JSContext, indx: u32, data: *mut JSObject) { + fn VertexAttrib4fv(&self, cx: *mut JSContext, indx: u32, data: *mut JSObject) -> Fallible<()> { assert!(!data.is_null()); - if let Some(data_vec) = unsafe { array_buffer_view_to_vec_checked::(data) } { - if data_vec.len() < 4 { - return self.webgl_error(InvalidOperation); - } - self.vertex_attrib(indx, data_vec[0], data_vec[1], data_vec[2], data_vec[3]) - } else { - self.webgl_error(InvalidValue); + let data_vec = try!(unsafe { typed_array_or_sequence_to_vec::(cx, data, ()) }); + if data_vec.len() < 4 { + return Ok(self.webgl_error(InvalidOperation)); } + + self.vertex_attrib(indx, data_vec[0], data_vec[1], data_vec[2], data_vec[3]); + Ok(()) } // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10 @@ -2195,7 +2248,13 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { border: i32, format: u32, data_type: u32, - data: *mut JSObject) { + data_ptr: *mut JSObject) -> Fallible<()> { + let data = if data_ptr.is_null() { + None + } else { + Some(try!(unsafe { fallible_array_buffer_view_to_vec::(data_ptr) })) + }; + let validator = TexImage2DValidator::new(self, target, level, internal_format, width, height, border, format, data_type); @@ -2211,34 +2270,32 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { data_type, } = match validator.validate() { Ok(result) => result, - Err(_) => return, // NB: The validator sets the correct error for us. + Err(_) => return Ok(()), // NB: The validator sets the correct error for us. }; let expected_byte_length = match unsafe { self.validate_tex_image_2d_data(width, height, format, data_type, - data) } { + data_ptr) } { Ok(byte_length) => byte_length, - Err(_) => return, + Err(()) => return Ok(()), }; // If data is null, a buffer of sufficient size // initialized to 0 is passed. - let buff = if data.is_null() { - vec![0u8; expected_byte_length as usize] - } else { - unsafe { - array_buffer_view_to_vec::(data) - .expect("Can't reach here without being an ArrayBufferView!") - } + let buff = match data { + None => vec![0u8; expected_byte_length as usize], + Some(data) => data, }; if buff.len() != expected_byte_length as usize { - return self.webgl_error(InvalidOperation); + return Ok(self.webgl_error(InvalidOperation)); } self.tex_image_2d(texture, target, data_type, format, - level, width, height, border, buff) + level, width, height, border, buff); + + Ok(()) } // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.8 @@ -2248,14 +2305,13 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { internal_format: u32, format: u32, data_type: u32, - source: Option) { + source: Option) -> Fallible<()> { // Get pixels from image source let (pixels, size) = match self.get_image_pixels(source) { Ok((pixels, size)) => (pixels, size), - Err(_) => return, + Err(_) => return Ok(()), }; - let validator = TexImage2DValidator::new(self, target, level, internal_format, size.width, size.height, @@ -2272,11 +2328,12 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { data_type, } = match validator.validate() { Ok(result) => result, - Err(_) => return, // NB: The validator sets the correct error for us. + Err(_) => return Ok(()), // NB: The validator sets the correct error for us. }; self.tex_image_2d(texture, target, data_type, format, level, width, height, border, pixels); + Ok(()) } // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.8 @@ -2291,7 +2348,14 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { height: i32, format: u32, data_type: u32, - data: *mut JSObject) { + data_ptr: *mut JSObject) -> Fallible<()> { + let data = if data_ptr.is_null() { + None + } else { + Some(try!(unsafe { fallible_array_buffer_view_to_vec::(data_ptr) })) + }; + + let validator = TexImage2DValidator::new(self, target, level, format, width, height, 0, format, data_type); @@ -2306,35 +2370,32 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { .. } = match validator.validate() { Ok(result) => result, - Err(_) => return, // NB: The validator sets the correct error for us. + Err(_) => return Ok(()), // NB: The validator sets the correct error for us. }; let expected_byte_length = match unsafe { self.validate_tex_image_2d_data(width, height, format, data_type, - data) } { + data_ptr) } { Ok(byte_length) => byte_length, - Err(()) => return, + Err(()) => return Ok(()), }; // If data is null, a buffer of sufficient size // initialized to 0 is passed. - let buff = if data.is_null() { - vec![0u8; expected_byte_length as usize] - } else { - unsafe { - array_buffer_view_to_vec::(data) - .expect("Can't reach here without being an ArrayBufferView!") - } + let buff = match data { + None => vec![0u8; expected_byte_length as usize], + Some(data) => data, }; if expected_byte_length != 0 && buff.len() != expected_byte_length as usize { - return self.webgl_error(InvalidOperation); + return Ok(self.webgl_error(InvalidOperation)); } self.tex_sub_image_2d(texture, target, level, xoffset, yoffset, width, height, format, data_type, buff); + Ok(()) } // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.8 @@ -2345,10 +2406,11 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { yoffset: i32, format: u32, data_type: u32, - source: Option) { + source: Option) + -> Fallible<()> { let (pixels, size) = match self.get_image_pixels(source) { Ok((pixels, size)) => (pixels, size), - Err(_) => return, + Err(_) => return Ok(()), }; let validator = TexImage2DValidator::new(self, target, level, format, @@ -2365,11 +2427,12 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { .. } = match validator.validate() { Ok(result) => result, - Err(_) => return, // NB: The validator sets the correct error for us. + Err(_) => return Ok(()), // NB: The validator sets the correct error for us. }; self.tex_sub_image_2d(texture, target, level, xoffset, yoffset, width, height, format, data_type, pixels); + Ok(()) } // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.8 diff --git a/components/script/dom/webidls/WebGLRenderingContext.webidl b/components/script/dom/webidls/WebGLRenderingContext.webidl index dcc7a1a8bea..86aca7e5a32 100644 --- a/components/script/dom/webidls/WebGLRenderingContext.webidl +++ b/components/script/dom/webidls/WebGLRenderingContext.webidl @@ -493,9 +493,12 @@ interface WebGLRenderingContextBase // FIXME(dmarcos) The function below is the original function in the webIdl: // void bufferData(GLenum target, BufferDataSource? data, GLenum usage); // The Code generator doesn't handle BufferDataSource so we're using 'object?' - // in the meantime + // in the meantime, and marking the function as [Throws], so we can handle + // the type error from inside. + [Throws] void bufferData(GLenum target, object? data, GLenum usage); //void bufferSubData(GLenum target, GLintptr offset, BufferDataSource? data); + [Throws] void bufferSubData(GLenum target, GLintptr offset, object? data); //[WebGLHandlesContextLoss] GLenum checkFramebufferStatus(GLenum target); @@ -507,10 +510,12 @@ interface WebGLRenderingContextBase void compileShader(WebGLShader? shader); // FIXME(simartin) The Code generator doesn't handle ArrayBufferView so we're - // using 'object' in the meantime + // using 'object' in the meantime, and marking the function as Throws to + // handle the type error from inside. // void compressedTexImage2D(GLenum target, GLint level, GLenum internalformat, // GLsizei width, GLsizei height, GLint border, // ArrayBufferView data); + [Throws] void compressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, object data); @@ -518,6 +523,7 @@ interface WebGLRenderingContextBase // GLint xoffset, GLint yoffset, // GLsizei width, GLsizei height, GLenum format, // ArrayBufferView data); + [Throws] void compressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, @@ -616,6 +622,7 @@ interface WebGLRenderingContextBase //void readPixels(GLint x, GLint y, GLsizei width, GLsizei height, // GLenum format, GLenum type, ArrayBufferView? pixels); + [Throws] void readPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, object? pixels); @@ -637,56 +644,69 @@ interface WebGLRenderingContextBase // GLsizei width, GLsizei height, GLint border, GLenum format, // GLenum type, ArrayBufferView? pixels); // FIXME: SM interface arguments + [Throws] void texImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, object? data); + [Throws] void texImage2D(GLenum target, GLint level, GLenum internalformat, GLenum format, GLenum type, TexImageSource? source); // May throw DOMException void texParameterf(GLenum target, GLenum pname, GLfloat param); void texParameteri(GLenum target, GLenum pname, GLint param); + [Throws] void texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, object? data); + [Throws] void texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLenum format, GLenum type, TexImageSource? source); // May throw DOMException void uniform1f(WebGLUniformLocation? location, GLfloat x); //void uniform1fv(WebGLUniformLocation? location, Float32Array v); //void uniform1fv(WebGLUniformLocation? location, sequence v); + [Throws] void uniform1fv(WebGLUniformLocation? location, object v); void uniform1i(WebGLUniformLocation? location, GLint x); //void uniform1iv(WebGLUniformLocation? location, Int32Array v); //void uniform1iv(WebGLUniformLocation? location, sequence v); + [Throws] void uniform1iv(WebGLUniformLocation? location, object v); void uniform2f(WebGLUniformLocation? location, GLfloat x, GLfloat y); //void uniform2fv(WebGLUniformLocation? location, Float32Array v); //void uniform2fv(WebGLUniformLocation? location, sequence v); + [Throws] void uniform2fv(WebGLUniformLocation? location, object v); //void uniform2i(WebGLUniformLocation? location, GLint x, GLint y); void uniform2i(WebGLUniformLocation? location, GLint x, GLint y); //void uniform2iv(WebGLUniformLocation? location, Int32Array v); //void uniform2iv(WebGLUniformLocation? location, sequence v); + [Throws] void uniform2iv(WebGLUniformLocation? location, object v); void uniform3f(WebGLUniformLocation? location, GLfloat x, GLfloat y, GLfloat z); + [Throws] void uniform3fv(WebGLUniformLocation? location, object v); //void uniform3fv(WebGLUniformLocation? location, Float32Array v); //void uniform3fv(WebGLUniformLocation? location, sequence v); void uniform3i(WebGLUniformLocation? location, GLint x, GLint y, GLint z); //void uniform3iv(WebGLUniformLocation? location, Int32Array v); //void uniform3iv(WebGLUniformLocation? location, sequence v); + [Throws] void uniform3iv(WebGLUniformLocation? location, object v); void uniform4f(WebGLUniformLocation? location, GLfloat x, GLfloat y, GLfloat z, GLfloat w); // FIXME(dmarcos) The function below is the original function in the webIdl: //void uniform4fv(WebGLUniformLocation? location, Float32Array v); - // The Code genearator doesn't handle typed arrays, so we use object instead. + // The Code genearator doesn't handle typed arrays, so we use object + // instead, and handle the type error ourselves. + [Throws] void uniform4fv(WebGLUniformLocation? location, object v); //void uniform4fv(WebGLUniformLocation? location, sequence v); void uniform4i(WebGLUniformLocation? location, GLint x, GLint y, GLint z, GLint w); //void uniform4iv(WebGLUniformLocation? location, Int32Array v); //void uniform4iv(WebGLUniformLocation? location, sequence v); // See FIXME above + [Throws] void uniform4iv(WebGLUniformLocation? location, object v); //void uniformMatrix2fv(WebGLUniformLocation? location, GLboolean transpose, @@ -709,18 +729,22 @@ interface WebGLRenderingContextBase // The code generator doesn't handle Float32Array so we're using 'object' void vertexAttrib1f(GLuint indx, GLfloat x); //void vertexAttrib1fv(GLuint indx, Float32Array values); + [Throws] void vertexAttrib1fv(GLuint indx, object values); //void vertexAttrib1fv(GLuint indx, sequence values); void vertexAttrib2f(GLuint indx, GLfloat x, GLfloat y); //void vertexAttrib2fv(GLuint indx, Float32Array values); + [Throws] void vertexAttrib2fv(GLuint indx, object values); //void vertexAttrib2fv(GLuint indx, sequence values); void vertexAttrib3f(GLuint indx, GLfloat x, GLfloat y, GLfloat z); //void vertexAttrib3fv(GLuint indx, Float32Array values); + [Throws] void vertexAttrib3fv(GLuint indx, object values); //void vertexAttrib3fv(GLuint indx, sequence values); void vertexAttrib4f(GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w); //void vertexAttrib4fv(GLuint indx, Float32Array values); + [Throws] void vertexAttrib4fv(GLuint indx, object values); //void vertexAttrib4fv(GLuint indx, sequence values); void vertexAttribPointer(GLuint indx, GLint size, GLenum type, From 7a559ad4429bd166cacca20c198d01b34f976813 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20Cobos=20=C3=81lvarez?= Date: Sat, 17 Sep 2016 23:42:33 -0700 Subject: [PATCH 4/5] webgl: Update test expectations. --- .../buffers/buffer-data-array-buffer.html.ini | 3 + .../more/functions/texImage2DBadArgs.html.ini | 5 - .../more/functions/uniformf.html.ini | 5 - .../more/functions/uniformfArrayLen1.html.ini | 5 - .../more/functions/uniformfBadArgs.html.ini | 1 + .../more/functions/uniformi.html.ini | 5 - .../more/functions/uniformiBadArgs.html.ini | 1 + .../more/functions/vertexAttrib.html.ini | 5 - .../functions/vertexAttribBadArgs.html.ini | 5 - .../conformance/state/gl-geterror.html.ini | 1 - ...b-image-2d-with-array-buffer-view.html.ini | 2242 ++++++++++++++++- .../tex-image-with-invalid-data.html.ini | 1 - .../textures/tex-input-validation.html.ini | 3 + .../textures/tex-sub-image-2d.html.ini | 1 - .../textures/texture-clear.html.ini | 1 - .../texture-draw-with-2d-and-cube.html.ini | 1 - .../textures/texture-formats-test.html.ini | 16 +- .../textures/texture-mips.html.ini | 1 - .../textures/texture-size-limit.html.ini | 179 +- .../texture-sub-image-cube-maps.html.ini | 6 + .../texture-upload-cube-maps.html.ini | 1 - .../wpt/mozilla/meta/mozilla/svg/svg.html.ini | 4 +- 22 files changed, 2450 insertions(+), 42 deletions(-) delete mode 100644 tests/wpt/metadata/webgl/conformance-1.0.3/conformance/more/functions/texImage2DBadArgs.html.ini delete mode 100644 tests/wpt/metadata/webgl/conformance-1.0.3/conformance/more/functions/uniformf.html.ini delete mode 100644 tests/wpt/metadata/webgl/conformance-1.0.3/conformance/more/functions/uniformfArrayLen1.html.ini delete mode 100644 tests/wpt/metadata/webgl/conformance-1.0.3/conformance/more/functions/uniformi.html.ini delete mode 100644 tests/wpt/metadata/webgl/conformance-1.0.3/conformance/more/functions/vertexAttrib.html.ini delete mode 100644 tests/wpt/metadata/webgl/conformance-1.0.3/conformance/more/functions/vertexAttribBadArgs.html.ini diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/buffers/buffer-data-array-buffer.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/buffers/buffer-data-array-buffer.html.ini index 237584e7c2f..23dff413dde 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/buffers/buffer-data-array-buffer.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/buffers/buffer-data-array-buffer.html.ini @@ -7,3 +7,6 @@ [WebGL test #5: successfullyParsed should be true (of type boolean). Was undefined (of type undefined).] expected: FAIL + [WebGL test #3: successfullyParsed should be true (of type boolean). Was undefined (of type undefined).] + expected: FAIL + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/more/functions/texImage2DBadArgs.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/more/functions/texImage2DBadArgs.html.ini deleted file mode 100644 index a8b00bf634d..00000000000 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/more/functions/texImage2DBadArgs.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[texImage2DBadArgs.html] - type: testharness - [WebGL test #0: testTexImage2D] - expected: FAIL - diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/more/functions/uniformf.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/more/functions/uniformf.html.ini deleted file mode 100644 index 56bc34862b2..00000000000 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/more/functions/uniformf.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[uniformf.html] - type: testharness - [WebGL test #0: testUniformf] - expected: FAIL - diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/more/functions/uniformfArrayLen1.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/more/functions/uniformfArrayLen1.html.ini deleted file mode 100644 index 05555eebf0c..00000000000 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/more/functions/uniformfArrayLen1.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[uniformfArrayLen1.html] - type: testharness - [WebGL test #0: testUniformArray] - expected: FAIL - diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/more/functions/uniformfBadArgs.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/more/functions/uniformfBadArgs.html.ini index b56a62a5dd5..0a2ca6a8c1c 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/more/functions/uniformfBadArgs.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/more/functions/uniformfBadArgs.html.ini @@ -1,5 +1,6 @@ [uniformfBadArgs.html] type: testharness + expected: CRASH [WebGL test #0: testUniformf] expected: FAIL diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/more/functions/uniformi.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/more/functions/uniformi.html.ini deleted file mode 100644 index 1f29c68d589..00000000000 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/more/functions/uniformi.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[uniformi.html] - type: testharness - [WebGL test #0: testUniformf] - expected: FAIL - diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/more/functions/uniformiBadArgs.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/more/functions/uniformiBadArgs.html.ini index 8441464d87b..3b6cf9cd8bf 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/more/functions/uniformiBadArgs.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/more/functions/uniformiBadArgs.html.ini @@ -1,5 +1,6 @@ [uniformiBadArgs.html] type: testharness + expected: CRASH [WebGL test #0: testUniformf] expected: FAIL diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/more/functions/vertexAttrib.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/more/functions/vertexAttrib.html.ini deleted file mode 100644 index 628d8ab4a58..00000000000 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/more/functions/vertexAttrib.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[vertexAttrib.html] - type: testharness - [WebGL test #0: testVertexAttrib] - expected: FAIL - diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/more/functions/vertexAttribBadArgs.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/more/functions/vertexAttribBadArgs.html.ini deleted file mode 100644 index 70592208ddf..00000000000 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/more/functions/vertexAttribBadArgs.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[vertexAttribBadArgs.html] - type: testharness - [WebGL test #0: testVertexAttrib] - expected: FAIL - diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/state/gl-geterror.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/state/gl-geterror.html.ini index 3d065d16f52..ae007ebc2dd 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/state/gl-geterror.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/state/gl-geterror.html.ini @@ -1,6 +1,5 @@ [gl-geterror.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/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-array-buffer-view.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-array-buffer-view.html.ini index c36dffd3838..cdf8edb080e 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-array-buffer-view.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-array-buffer-view.html.ini @@ -1,6 +1,5 @@ [tex-image-and-sub-image-2d-with-array-buffer-view.html] type: testharness - expected: ERROR [WebGL test #0: at (0, 0) expected: 0,255,0,255 was 255,0,0,255] expected: FAIL @@ -94,3 +93,2244 @@ [WebGL test #48: successfullyParsed should be true. Was false.] expected: FAIL + [WebGL test #48: at (0, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #49: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #50: at (0, 0) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #51: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #52: at (8, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #53: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #54: at (0, 0) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #55: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #56: at (8, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #57: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #58: at (8, 8) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #59: at (8, 12) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #72: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #73: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #74: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #75: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #76: at (8, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #77: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #78: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #79: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #80: at (8, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #81: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #82: at (8, 8) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #83: at (8, 12) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #85: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #87: at (0, 4) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #89: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #91: at (0, 4) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #93: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #95: at (8, 12) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #96: at (0, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #97: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #98: at (0, 0) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #99: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #100: at (8, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #101: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #102: at (0, 0) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #103: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #104: at (8, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #105: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #106: at (8, 8) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #107: at (8, 12) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #120: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #121: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #122: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #123: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #124: at (8, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #125: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #126: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #127: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #128: at (8, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #129: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #130: at (8, 8) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #131: at (8, 12) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #133: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #135: at (0, 4) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #137: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #139: at (0, 4) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #141: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #143: at (8, 12) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #144: at (0, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #145: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #146: at (0, 0) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #147: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #148: at (8, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #149: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #150: at (0, 0) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #151: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #152: at (8, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #153: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #154: at (8, 8) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #155: at (8, 12) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #168: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #169: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #170: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #171: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #172: at (8, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #173: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #174: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #175: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #176: at (8, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #177: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #178: at (8, 8) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #179: at (8, 12) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #181: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #183: at (0, 4) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #185: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #187: at (0, 4) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #189: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #191: at (8, 12) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #192: at (0, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #193: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #194: at (0, 0) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #195: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #196: at (8, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #197: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #198: at (0, 0) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #199: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #200: at (8, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #201: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #202: at (8, 8) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #203: at (8, 12) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #216: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #217: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #218: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #219: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #220: at (8, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #221: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #222: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #223: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #224: at (8, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #225: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #226: at (8, 8) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #227: at (8, 12) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #229: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #231: at (0, 4) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #233: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #235: at (0, 4) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #237: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #239: at (8, 12) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #240: at (0, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #241: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #242: at (0, 0) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #243: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #244: at (8, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #245: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #246: at (0, 0) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #247: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #248: at (8, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #249: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #250: at (8, 8) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #251: at (8, 12) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #264: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #265: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #266: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #267: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #268: at (8, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #269: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #270: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #271: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #272: at (8, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #273: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #274: at (8, 8) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #275: at (8, 12) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #277: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #279: at (0, 4) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #281: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #283: at (0, 4) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #285: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #287: at (8, 12) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #288: GL error after texImage2D] + expected: FAIL + + [WebGL test #289: at (0, 0) expected: 0,255,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #290: at (0, 8) expected: 255,0,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #291: at (0, 0) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #292: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #293: at (8, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #294: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #295: at (0, 0) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #296: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #297: at (8, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #298: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #299: at (8, 8) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #300: at (8, 12) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #301: GL error after texImage2D] + expected: FAIL + + [WebGL test #302: at (0, 0) expected: 255,0,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #303: at (0, 8) expected: 0,255,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #314: GL error after texImage2D] + expected: FAIL + + [WebGL test #316: at (0, 8) expected: 255,0,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #317: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #318: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #319: at (8, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #320: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #321: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #322: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #323: at (8, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #324: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #325: at (8, 8) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #326: at (8, 12) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #327: GL error after texImage2D] + expected: FAIL + + [WebGL test #328: at (0, 0) expected: 255,0,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #331: at (0, 4) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #333: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #335: at (0, 4) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #337: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #339: at (8, 12) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #340: GL error after texSubImage2D] + expected: FAIL + + [WebGL test #341: at (0, 0) expected: 0,255,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #342: at (0, 8) expected: 255,0,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #343: at (0, 0) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #344: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #345: at (8, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #346: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #347: at (0, 0) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #348: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #349: at (8, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #350: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #351: at (8, 8) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #352: at (8, 12) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #353: GL error after texSubImage2D] + expected: FAIL + + [WebGL test #354: at (0, 0) expected: 255,0,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #355: at (0, 8) expected: 0,255,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #366: GL error after texSubImage2D] + expected: FAIL + + [WebGL test #368: at (0, 8) expected: 255,0,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #369: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #370: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #371: at (8, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #372: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #373: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #374: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #375: at (8, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #376: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #377: at (8, 8) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #378: at (8, 12) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #379: GL error after texSubImage2D] + expected: FAIL + + [WebGL test #380: at (0, 0) expected: 255,0,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #381: at (6, 13) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #383: at (0, 4) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #385: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #387: at (0, 4) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #389: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #391: at (8, 12) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #392: at (0, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #393: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #394: at (0, 0) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #395: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #396: at (8, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #397: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #398: at (0, 0) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #399: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #400: at (8, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #401: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #402: at (8, 8) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #403: at (8, 12) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #416: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #417: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #418: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #419: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #420: at (8, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #421: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #422: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #423: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #424: at (8, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #425: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #426: at (8, 8) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #427: at (8, 12) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #429: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #431: at (0, 4) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #433: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #435: at (0, 4) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #437: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #439: at (8, 12) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #440: at (0, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #441: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #442: at (0, 0) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #443: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #444: at (8, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #445: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #446: at (0, 0) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #447: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #448: at (8, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #449: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #450: at (8, 8) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #451: at (8, 12) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #464: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #465: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #466: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #467: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #468: at (8, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #469: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #470: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #471: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #472: at (8, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #473: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #474: at (8, 8) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #475: at (8, 12) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #477: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #479: at (0, 4) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #481: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #483: at (0, 4) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #485: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #487: at (8, 12) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #488: at (0, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #489: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #490: at (0, 0) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #491: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #492: at (8, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #493: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #494: at (0, 0) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #495: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #496: at (8, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #497: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #498: at (8, 8) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #499: at (8, 12) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #512: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #513: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #514: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #515: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #516: at (8, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #517: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #518: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #519: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #520: at (8, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #521: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #522: at (8, 8) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #523: at (8, 12) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #525: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #527: at (0, 4) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #529: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #531: at (0, 4) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #533: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #535: at (8, 12) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #536: at (0, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #537: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #538: at (0, 0) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #539: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #540: at (8, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #541: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #542: at (0, 0) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #543: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #544: at (8, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #545: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #546: at (8, 8) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #547: at (8, 12) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #560: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #561: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #562: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #563: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #564: at (8, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #565: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #566: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #567: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #568: at (8, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #569: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #570: at (8, 8) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #571: at (8, 12) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #573: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #575: at (0, 4) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #577: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #579: at (0, 4) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #581: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #583: at (8, 12) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #584: GL error after texImage2D] + expected: FAIL + + [WebGL test #585: at (0, 0) expected: 0,255,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #586: at (0, 8) expected: 255,0,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #587: at (0, 0) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #588: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #589: at (8, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #590: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #591: at (0, 0) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #592: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #593: at (8, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #594: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #595: at (8, 8) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #596: at (8, 12) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #597: GL error after texImage2D] + expected: FAIL + + [WebGL test #598: at (0, 0) expected: 255,0,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #599: at (0, 8) expected: 0,255,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #610: GL error after texImage2D] + expected: FAIL + + [WebGL test #612: at (0, 8) expected: 255,0,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #613: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #614: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #615: at (8, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #616: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #617: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #618: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #619: at (8, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #620: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #621: at (8, 8) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #622: at (8, 12) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #623: GL error after texImage2D] + expected: FAIL + + [WebGL test #624: at (0, 0) expected: 255,0,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #627: at (0, 4) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #629: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #631: at (0, 4) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #633: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #635: at (8, 12) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #636: GL error after texSubImage2D] + expected: FAIL + + [WebGL test #637: at (0, 0) expected: 0,255,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #638: at (0, 8) expected: 255,0,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #639: at (0, 0) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #640: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #641: at (8, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #642: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #643: at (0, 0) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #644: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #645: at (8, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #646: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #647: at (8, 8) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #648: at (8, 12) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #649: GL error after texSubImage2D] + expected: FAIL + + [WebGL test #650: at (0, 0) expected: 255,0,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #651: at (0, 8) expected: 0,255,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #662: GL error after texSubImage2D] + expected: FAIL + + [WebGL test #664: at (0, 8) expected: 255,0,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #665: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #666: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #667: at (8, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #668: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #669: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #670: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #671: at (8, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #672: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #673: at (8, 8) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #674: at (8, 12) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #675: GL error after texSubImage2D] + expected: FAIL + + [WebGL test #676: at (0, 0) expected: 255,0,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #677: at (6, 13) expected: 0,0,0,255 was 255,231,0,255] + expected: FAIL + + [WebGL test #679: at (0, 4) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #681: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #683: at (0, 4) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #685: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #687: at (8, 12) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #688: GL error after texImage2D] + expected: FAIL + + [WebGL test #689: at (0, 0) expected: 0,255,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #690: at (0, 8) expected: 255,0,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #691: at (0, 0) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #692: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #693: at (8, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #694: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #695: at (0, 0) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #696: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #697: at (8, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #698: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #699: at (8, 8) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #700: at (8, 12) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #701: GL error after texImage2D] + expected: FAIL + + [WebGL test #702: at (0, 0) expected: 255,0,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #703: at (0, 8) expected: 0,255,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #714: GL error after texImage2D] + expected: FAIL + + [WebGL test #716: at (0, 8) expected: 255,0,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #717: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #718: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #719: at (8, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #720: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #721: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #722: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #723: at (8, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #724: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #725: at (8, 8) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #726: at (8, 12) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #727: GL error after texImage2D] + expected: FAIL + + [WebGL test #728: at (0, 0) expected: 255,0,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #731: at (0, 4) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #733: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #735: at (0, 4) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #737: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #739: at (8, 12) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #740: GL error after texSubImage2D] + expected: FAIL + + [WebGL test #741: at (0, 0) expected: 0,255,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #742: at (0, 8) expected: 255,0,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #743: at (0, 0) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #744: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #745: at (8, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #746: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #747: at (0, 0) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #748: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #749: at (8, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #750: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #751: at (8, 8) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #752: at (8, 12) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #753: GL error after texSubImage2D] + expected: FAIL + + [WebGL test #754: at (0, 0) expected: 255,0,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #755: at (0, 8) expected: 0,255,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #766: GL error after texSubImage2D] + expected: FAIL + + [WebGL test #768: at (0, 8) expected: 255,0,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #769: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #770: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #771: at (8, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #772: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #773: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #774: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #775: at (8, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #776: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #777: at (8, 8) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #778: at (8, 12) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #779: GL error after texSubImage2D] + expected: FAIL + + [WebGL test #780: at (0, 0) expected: 255,0,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #781: at (0, 10) expected: 0,0,0,255 was 255,231,0,255] + expected: FAIL + + [WebGL test #783: at (0, 4) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #785: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #787: at (0, 4) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #789: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #791: at (8, 12) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #792: at (0, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #793: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #794: at (0, 0) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #795: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #796: at (8, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #797: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #798: at (0, 0) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #799: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #800: at (8, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #801: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #802: at (8, 8) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #803: at (8, 12) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #816: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #817: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #818: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #819: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #820: at (8, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #821: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #822: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #823: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #824: at (8, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #825: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #826: at (8, 8) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #827: at (8, 12) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #829: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #831: at (0, 4) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #833: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #835: at (0, 4) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #837: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #839: at (8, 12) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #840: at (0, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #841: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #842: at (0, 0) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #843: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #844: at (8, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #845: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #846: at (0, 0) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #847: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #848: at (8, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #849: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #850: at (8, 8) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #851: at (8, 12) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #864: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #865: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #866: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #867: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #868: at (8, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #869: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #870: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #871: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #872: at (8, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #873: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #874: at (8, 8) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #875: at (8, 12) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #877: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #879: at (0, 4) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #881: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #883: at (0, 4) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #885: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #887: at (8, 12) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #888: at (0, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #889: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #890: at (0, 0) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #891: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #892: at (8, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #893: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #894: at (0, 0) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #895: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #896: at (8, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #897: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #898: at (8, 8) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #899: at (8, 12) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #912: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #913: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #914: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #915: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #916: at (8, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #917: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #918: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #919: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #920: at (8, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #921: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #922: at (8, 8) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #923: at (8, 12) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #925: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #927: at (0, 4) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #929: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #931: at (0, 4) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #933: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #935: at (8, 12) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #936: at (0, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #937: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #938: at (0, 0) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #939: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #940: at (8, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #941: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #942: at (0, 0) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #943: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #944: at (8, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #945: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #946: at (8, 8) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #947: at (8, 12) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #960: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #961: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #962: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #963: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #964: at (8, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #965: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #966: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #967: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #968: at (8, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #969: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #970: at (8, 8) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #971: at (8, 12) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #973: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #975: at (0, 4) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #977: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #979: at (0, 4) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #981: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #983: at (8, 12) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #984: GL error after texImage2D] + expected: FAIL + + [WebGL test #985: at (0, 0) expected: 0,255,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #986: at (0, 8) expected: 255,0,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #987: at (0, 0) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #988: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #989: at (8, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #990: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #991: at (0, 0) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #992: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #993: at (8, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #994: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #995: at (8, 8) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #996: at (8, 12) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #997: GL error after texImage2D] + expected: FAIL + + [WebGL test #998: at (0, 0) expected: 255,0,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #999: at (0, 8) expected: 0,255,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #1010: GL error after texImage2D] + expected: FAIL + + [WebGL test #1012: at (0, 8) expected: 255,0,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #1013: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #1014: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #1015: at (8, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #1016: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #1017: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #1018: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #1019: at (8, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #1020: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #1021: at (8, 8) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #1022: at (8, 12) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #1023: GL error after texImage2D] + expected: FAIL + + [WebGL test #1024: at (0, 0) expected: 255,0,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #1027: at (0, 4) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #1029: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #1031: at (0, 4) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #1033: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #1035: at (8, 12) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #1036: GL error after texSubImage2D] + expected: FAIL + + [WebGL test #1037: at (0, 0) expected: 0,255,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #1038: at (0, 8) expected: 255,0,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #1039: at (0, 0) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #1040: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #1041: at (8, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #1042: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #1043: at (0, 0) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #1044: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #1045: at (8, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #1046: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #1047: at (8, 8) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #1048: at (8, 12) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #1049: GL error after texSubImage2D] + expected: FAIL + + [WebGL test #1050: at (0, 0) expected: 255,0,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #1051: at (0, 8) expected: 0,255,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #1062: GL error after texSubImage2D] + expected: FAIL + + [WebGL test #1064: at (0, 8) expected: 255,0,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #1065: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #1066: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #1067: at (8, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #1068: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #1069: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #1070: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #1071: at (8, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #1072: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #1073: at (8, 8) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #1074: at (8, 12) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #1075: GL error after texSubImage2D] + expected: FAIL + + [WebGL test #1076: at (0, 0) expected: 255,0,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #1077: at (6, 13) expected: 0,0,0,255 was 255,255,0,255] + expected: FAIL + + [WebGL test #1079: at (0, 4) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #1081: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #1083: at (0, 4) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #1085: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #1087: at (8, 12) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #1088: GL error after texImage2D] + expected: FAIL + + [WebGL test #1089: at (0, 0) expected: 0,255,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #1090: at (0, 8) expected: 255,0,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #1091: at (0, 0) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #1092: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #1093: at (8, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #1094: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #1095: at (0, 0) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #1096: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #1097: at (8, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #1098: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #1099: at (8, 8) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #1100: at (8, 12) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #1101: GL error after texImage2D] + expected: FAIL + + [WebGL test #1102: at (0, 0) expected: 255,0,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #1103: at (0, 8) expected: 0,255,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #1114: GL error after texImage2D] + expected: FAIL + + [WebGL test #1116: at (0, 8) expected: 255,0,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #1117: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #1118: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #1119: at (8, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #1120: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #1121: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #1122: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #1123: at (8, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #1124: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #1125: at (8, 8) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #1126: at (8, 12) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #1127: GL error after texImage2D] + expected: FAIL + + [WebGL test #1128: at (0, 0) expected: 255,0,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #1131: at (0, 4) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #1133: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #1135: at (0, 4) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #1137: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #1139: at (8, 12) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #1140: GL error after texSubImage2D] + expected: FAIL + + [WebGL test #1141: at (0, 0) expected: 0,255,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #1142: at (0, 8) expected: 255,0,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #1143: at (0, 0) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #1144: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #1145: at (8, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #1146: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #1147: at (0, 0) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #1148: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #1149: at (8, 0) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #1150: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #1151: at (8, 8) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #1152: at (8, 12) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #1153: GL error after texSubImage2D] + expected: FAIL + + [WebGL test #1154: at (0, 0) expected: 255,0,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #1155: at (0, 8) expected: 0,255,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #1166: GL error after texSubImage2D] + expected: FAIL + + [WebGL test #1168: at (0, 8) expected: 255,0,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #1169: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #1170: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #1171: at (8, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #1172: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #1173: at (0, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #1174: at (0, 4) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #1175: at (8, 0) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #1176: at (0, 8) expected: 255,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #1177: at (8, 8) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #1178: at (8, 12) expected: 255,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #1179: GL error after texSubImage2D] + expected: FAIL + + [WebGL test #1180: at (0, 0) expected: 255,0,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #1181: at (0, 10) expected: 0,0,0,255 was 255,255,0,255] + expected: FAIL + + [WebGL test #1183: at (0, 4) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #1185: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #1187: at (0, 4) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #1189: at (0, 8) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #1191: at (8, 12) expected: 0,0,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #677: at (6, 13) expected: 0,0,0,255 was 255,230,0,255] + expected: FAIL + + [WebGL test #781: at (0, 10) expected: 0,0,0,255 was 255,230,0,255] + expected: FAIL + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-with-invalid-data.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-with-invalid-data.html.ini index 045d0a5c870..55a6e8d9dfb 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-with-invalid-data.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-with-invalid-data.html.ini @@ -1,6 +1,5 @@ [tex-image-with-invalid-data.html] type: testharness - expected: ERROR [WebGL test #1: getError expected: INVALID_OPERATION. Was NO_ERROR : ] expected: FAIL diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-input-validation.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-input-validation.html.ini index b01468ceb4c..e64f0eb91b0 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-input-validation.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-input-validation.html.ini @@ -4,3 +4,6 @@ [WebGL test #3: successfullyParsed should be true (of type boolean). Was undefined (of type undefined).] expected: FAIL + [WebGL test #20: successfullyParsed should be true (of type boolean). Was undefined (of type undefined).] + expected: FAIL + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-sub-image-2d.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-sub-image-2d.html.ini index f3d05dbb3ce..2dc6b40d3d9 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-sub-image-2d.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-sub-image-2d.html.ini @@ -1,6 +1,5 @@ [tex-sub-image-2d.html] type: testharness - expected: ERROR [WebGL test #0: successfullyParsed should be true (of type boolean). Was undefined (of type undefined).] expected: FAIL diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-clear.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-clear.html.ini index fa2842af295..a50d408fbca 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-clear.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-clear.html.ini @@ -1,6 +1,5 @@ [texture-clear.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/metadata/webgl/conformance-1.0.3/conformance/textures/texture-draw-with-2d-and-cube.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-draw-with-2d-and-cube.html.ini index c0cb1817206..4171cd99060 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-draw-with-2d-and-cube.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-draw-with-2d-and-cube.html.ini @@ -1,6 +1,5 @@ [texture-draw-with-2d-and-cube.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/metadata/webgl/conformance-1.0.3/conformance/textures/texture-formats-test.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-formats-test.html.ini index d222aae0c5d..8214e58b968 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-formats-test.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-formats-test.html.ini @@ -1,6 +1,5 @@ [texture-formats-test.html] type: testharness - expected: ERROR [WebGL test #1: successfullyParsed should be true (of type boolean). Was undefined (of type undefined).] expected: FAIL @@ -10,3 +9,18 @@ [WebGL test #1: context does not exist] expected: FAIL + [WebGL test #77: getError expected: NO_ERROR. Was INVALID_OPERATION : gl.texImage2D with format: RGBA, type: UNSIGNED_SHORT_4_4_4_4 should generate NO_ERROR] + expected: FAIL + + [WebGL test #78: at (0, 0) expected: 0,0,255,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #79: getError expected: NO_ERROR. Was INVALID_OPERATION : gl.texImage2D with format: RGB, type: UNSIGNED_SHORT_5_6_5 should generate NO_ERROR] + expected: FAIL + + [WebGL test #81: getError expected: NO_ERROR. Was INVALID_OPERATION : gl.texImage2D with format: RGBA, type: UNSIGNED_SHORT_5_5_5_1 should generate NO_ERROR] + expected: FAIL + + [WebGL test #82: at (0, 0) expected: 0,0,255,255 was 0,255,0,255] + expected: FAIL + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-mips.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-mips.html.ini index b0b37cc4237..f5b63a2a77d 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-mips.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-mips.html.ini @@ -1,6 +1,5 @@ [texture-mips.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/metadata/webgl/conformance-1.0.3/conformance/textures/texture-size-limit.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-size-limit.html.ini index da1ba4d40af..aa2e124ff9a 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-size-limit.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-size-limit.html.ini @@ -1,6 +1,183 @@ [texture-size-limit.html] type: testharness - expected: ERROR + expected: CRASH [WebGL test #0: Unable to fetch WebGL rendering context for Canvas] expected: FAIL + [WebGL test #2: getError expected: INVALID_VALUE. Was NO_ERROR : width or height out of bounds for specified level: should generate INVALID_VALUE: level is 14, size is 4x4.] + expected: FAIL + + [WebGL test #3: getError expected: NO_ERROR. Was INVALID_OPERATION : there should be no error for level: 14 1x1] + expected: FAIL + + [WebGL test #4: getError expected: NO_ERROR. Was INVALID_OPERATION : there should be no error for level: 14 1x1] + expected: FAIL + + [WebGL test #5: getError expected: INVALID_VALUE. Was NO_ERROR : should generate INVALID_VALUE for level: 14 2x1] + expected: FAIL + + [WebGL test #6: getError expected: INVALID_VALUE. Was NO_ERROR : should generate INVALID_VALUE for level: 14 1x2] + expected: FAIL + + [WebGL test #7: getError expected: NO_ERROR. Was INVALID_OPERATION : there should be no error for level: 13 2x1] + expected: FAIL + + [WebGL test #8: getError expected: NO_ERROR. Was INVALID_OPERATION : there should be no error for level: 13 1x2] + expected: FAIL + + [WebGL test #9: getError expected: INVALID_VALUE. Was NO_ERROR : should generate INVALID_VALUE for level: 13 4x1] + expected: FAIL + + [WebGL test #10: getError expected: INVALID_VALUE. Was NO_ERROR : should generate INVALID_VALUE for level: 13 1x4] + expected: FAIL + + [WebGL test #11: getError expected: NO_ERROR. Was INVALID_OPERATION : there should be no error for level: 12 4x1] + expected: FAIL + + [WebGL test #12: getError expected: NO_ERROR. Was INVALID_OPERATION : there should be no error for level: 12 1x4] + expected: FAIL + + [WebGL test #13: getError expected: INVALID_VALUE. Was NO_ERROR : should generate INVALID_VALUE for level: 12 8x1] + expected: FAIL + + [WebGL test #14: getError expected: INVALID_VALUE. Was NO_ERROR : should generate INVALID_VALUE for level: 12 1x8] + expected: FAIL + + [WebGL test #15: getError expected: NO_ERROR. Was INVALID_OPERATION : there should be no error for level: 11 8x1] + expected: FAIL + + [WebGL test #16: getError expected: NO_ERROR. Was INVALID_OPERATION : there should be no error for level: 11 1x8] + expected: FAIL + + [WebGL test #17: getError expected: INVALID_VALUE. Was NO_ERROR : should generate INVALID_VALUE for level: 11 16x1] + expected: FAIL + + [WebGL test #18: getError expected: INVALID_VALUE. Was NO_ERROR : should generate INVALID_VALUE for level: 11 1x16] + expected: FAIL + + [WebGL test #19: getError expected: NO_ERROR. Was INVALID_OPERATION : there should be no error for level: 10 16x1] + expected: FAIL + + [WebGL test #20: getError expected: NO_ERROR. Was INVALID_OPERATION : there should be no error for level: 10 1x16] + expected: FAIL + + [WebGL test #21: getError expected: INVALID_VALUE. Was NO_ERROR : should generate INVALID_VALUE for level: 10 32x1] + expected: FAIL + + [WebGL test #22: getError expected: INVALID_VALUE. Was NO_ERROR : should generate INVALID_VALUE for level: 10 1x32] + expected: FAIL + + [WebGL test #23: getError expected: NO_ERROR. Was INVALID_OPERATION : there should be no error for level: 9 32x1] + expected: FAIL + + [WebGL test #24: getError expected: NO_ERROR. Was INVALID_OPERATION : there should be no error for level: 9 1x32] + expected: FAIL + + [WebGL test #25: getError expected: INVALID_VALUE. Was NO_ERROR : should generate INVALID_VALUE for level: 9 64x1] + expected: FAIL + + [WebGL test #26: getError expected: INVALID_VALUE. Was NO_ERROR : should generate INVALID_VALUE for level: 9 1x64] + expected: FAIL + + [WebGL test #27: getError expected: NO_ERROR. Was INVALID_OPERATION : there should be no error for level: 8 64x1] + expected: FAIL + + [WebGL test #28: getError expected: NO_ERROR. Was INVALID_OPERATION : there should be no error for level: 8 1x64] + expected: FAIL + + [WebGL test #29: getError expected: INVALID_VALUE. Was NO_ERROR : should generate INVALID_VALUE for level: 8 128x1] + expected: FAIL + + [WebGL test #30: getError expected: INVALID_VALUE. Was NO_ERROR : should generate INVALID_VALUE for level: 8 1x128] + expected: FAIL + + [WebGL test #31: getError expected: NO_ERROR. Was INVALID_OPERATION : there should be no error for level: 7 128x1] + expected: FAIL + + [WebGL test #32: getError expected: NO_ERROR. Was INVALID_OPERATION : there should be no error for level: 7 1x128] + expected: FAIL + + [WebGL test #33: getError expected: INVALID_VALUE. Was NO_ERROR : should generate INVALID_VALUE for level: 7 256x1] + expected: FAIL + + [WebGL test #34: getError expected: INVALID_VALUE. Was NO_ERROR : should generate INVALID_VALUE for level: 7 1x256] + expected: FAIL + + [WebGL test #35: getError expected: NO_ERROR. Was INVALID_OPERATION : there should be no error for level: 6 256x1] + expected: FAIL + + [WebGL test #36: getError expected: NO_ERROR. Was INVALID_OPERATION : there should be no error for level: 6 1x256] + expected: FAIL + + [WebGL test #37: getError expected: INVALID_VALUE. Was NO_ERROR : should generate INVALID_VALUE for level: 6 512x1] + expected: FAIL + + [WebGL test #38: getError expected: INVALID_VALUE. Was NO_ERROR : should generate INVALID_VALUE for level: 6 1x512] + expected: FAIL + + [WebGL test #39: getError expected: NO_ERROR. Was INVALID_OPERATION : there should be no error for level: 5 512x1] + expected: FAIL + + [WebGL test #40: getError expected: NO_ERROR. Was INVALID_OPERATION : there should be no error for level: 5 1x512] + expected: FAIL + + [WebGL test #41: getError expected: INVALID_VALUE. Was NO_ERROR : should generate INVALID_VALUE for level: 5 1024x1] + expected: FAIL + + [WebGL test #42: getError expected: INVALID_VALUE. Was NO_ERROR : should generate INVALID_VALUE for level: 5 1x1024] + expected: FAIL + + [WebGL test #43: getError expected: NO_ERROR. Was INVALID_OPERATION : there should be no error for level: 4 1024x1] + expected: FAIL + + [WebGL test #44: getError expected: NO_ERROR. Was INVALID_OPERATION : there should be no error for level: 4 1x1024] + expected: FAIL + + [WebGL test #45: getError expected: INVALID_VALUE. Was NO_ERROR : should generate INVALID_VALUE for level: 4 2048x1] + expected: FAIL + + [WebGL test #46: getError expected: INVALID_VALUE. Was NO_ERROR : should generate INVALID_VALUE for level: 4 1x2048] + expected: FAIL + + [WebGL test #47: getError expected: NO_ERROR. Was INVALID_OPERATION : there should be no error for level: 3 2048x1] + expected: FAIL + + [WebGL test #48: getError expected: NO_ERROR. Was INVALID_OPERATION : there should be no error for level: 3 1x2048] + expected: FAIL + + [WebGL test #49: getError expected: INVALID_VALUE. Was NO_ERROR : should generate INVALID_VALUE for level: 3 4096x1] + expected: FAIL + + [WebGL test #50: getError expected: INVALID_VALUE. Was NO_ERROR : should generate INVALID_VALUE for level: 3 1x4096] + expected: FAIL + + [WebGL test #51: getError expected: NO_ERROR. Was INVALID_OPERATION : there should be no error for level: 2 4096x1] + expected: FAIL + + [WebGL test #52: getError expected: NO_ERROR. Was INVALID_OPERATION : there should be no error for level: 2 1x4096] + expected: FAIL + + [WebGL test #53: getError expected: INVALID_VALUE. Was NO_ERROR : should generate INVALID_VALUE for level: 2 8192x1] + expected: FAIL + + [WebGL test #54: getError expected: INVALID_VALUE. Was NO_ERROR : should generate INVALID_VALUE for level: 2 1x8192] + expected: FAIL + + [WebGL test #55: getError expected: NO_ERROR. Was INVALID_OPERATION : there should be no error for level: 1 8192x1] + expected: FAIL + + [WebGL test #56: getError expected: NO_ERROR. Was INVALID_OPERATION : there should be no error for level: 1 1x8192] + expected: FAIL + + [WebGL test #57: getError expected: INVALID_VALUE. Was NO_ERROR : should generate INVALID_VALUE for level: 1 16384x1] + expected: FAIL + + [WebGL test #58: getError expected: INVALID_VALUE. Was NO_ERROR : should generate INVALID_VALUE for level: 1 1x16384] + expected: FAIL + + [WebGL test #59: getError expected: NO_ERROR. Was INVALID_OPERATION : there should be no error for level: 0 16384x1] + expected: FAIL + + [WebGL test #60: getError expected: NO_ERROR. Was INVALID_OPERATION : there should be no error for level: 0 1x16384] + expected: FAIL + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-sub-image-cube-maps.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-sub-image-cube-maps.html.ini index b057d4a7cda..356359e97ae 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-sub-image-cube-maps.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-sub-image-cube-maps.html.ini @@ -4,3 +4,9 @@ [WebGL test #0: successfullyParsed should be true (of type boolean). Was undefined (of type undefined).] expected: FAIL + [WebGL test #0: unexpected gl error: INVALID_VALUE] + expected: FAIL + + [WebGL test #1: successfullyParsed should be true (of type boolean). Was undefined (of type undefined).] + expected: FAIL + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-upload-cube-maps.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-upload-cube-maps.html.ini index b5a105a6a9b..99291ec52ff 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-upload-cube-maps.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-upload-cube-maps.html.ini @@ -1,6 +1,5 @@ [texture-upload-cube-maps.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/mozilla/svg/svg.html.ini b/tests/wpt/mozilla/meta/mozilla/svg/svg.html.ini index baf8742fd8f..2f440fde23f 100644 --- a/tests/wpt/mozilla/meta/mozilla/svg/svg.html.ini +++ b/tests/wpt/mozilla/meta/mozilla/svg/svg.html.ini @@ -1,3 +1,3 @@ [svg.html] - type: reftest - prefs: [dom.svg.enabled:true] + type: reftest + prefs: [dom.svg.enabled:true] From d7e2b40484dd401663f81a9c2cb0e5cc5acfa9ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20Cobos=20=C3=81lvarez?= Date: Sun, 18 Sep 2016 00:41:41 -0700 Subject: [PATCH 5/5] webgl: Honor ArrayBuffer or ArrayBufferView in bufferData and bufferSubData. --- components/script/dom/bindings/conversions.rs | 25 ++++++++++++++++++- .../script/dom/webglrenderingcontext.rs | 20 ++++++++++++--- 2 files changed, 40 insertions(+), 5 deletions(-) diff --git a/components/script/dom/bindings/conversions.rs b/components/script/dom/bindings/conversions.rs index e87feadf9e0..db723ad141c 100644 --- a/components/script/dom/bindings/conversions.rs +++ b/components/script/dom/bindings/conversions.rs @@ -48,7 +48,7 @@ use js::glue::{RUST_JSID_IS_INT, RUST_JSID_TO_INT}; use js::glue::{RUST_JSID_IS_STRING, RUST_JSID_TO_STRING, UnwrapObject}; use js::jsapi::{HandleId, HandleObject, HandleValue, JSClass, JSContext}; use js::jsapi::{JSObject, JSString, JS_GetArrayBufferViewType, JS_GetClass}; -use js::jsapi::{JS_GetLatin1StringCharsAndLength, JS_GetObjectAsArrayBufferView}; +use js::jsapi::{JS_GetLatin1StringCharsAndLength, JS_GetObjectAsArrayBuffer, JS_GetObjectAsArrayBufferView}; use js::jsapi::{JS_GetReservedSlot, JS_GetTwoByteStringCharsAndLength, ToWindowProxyIfWindow}; use js::jsapi::{JS_IsArrayObject, JS_NewStringCopyN, JS_StringHasLatin1Chars}; use js::jsapi::{JS_WrapValue, MutableHandleValue, Type, IsObjectInContextCompartment}; @@ -580,6 +580,29 @@ pub unsafe fn array_buffer_view_to_vec_checked(abv: *mut JSObject) -> Option< array_buffer_view_data_checked(abv).map(|data| data.to_vec()) } +/// Similar API as the array_buffer_view_xxx functions, but for ArrayBuffer +/// objects. +pub unsafe fn array_buffer_data<'a, T>(ab: *mut JSObject) -> Option<&'a mut [T]> + where T: ArrayBufferViewContents +{ + assert!(!ab.is_null()); + + let mut byte_length = 0; + let mut ptr = ptr::null_mut(); + let ret = JS_GetObjectAsArrayBuffer(ab, &mut byte_length, &mut ptr); + if ret.is_null() { + return None; + } + Some(slice::from_raw_parts_mut(ptr as *mut T, byte_length as usize / mem::size_of::())) +} + +/// Similar API to array_buffer_view_to_vec, but for ArrayBuffer objects. +pub unsafe fn array_buffer_to_vec(ab: *mut JSObject) -> Option> + where T: ArrayBufferViewContents +{ + array_buffer_data(ab).map(|data| data.to_vec()) +} + /// Returns whether `value` is an array-like object. /// Note: Currently only Arrays are supported. /// TODO: Expand this to support sequences and other array-like objects diff --git a/components/script/dom/webglrenderingcontext.rs b/components/script/dom/webglrenderingcontext.rs index ae971503864..90e622be6c2 100644 --- a/components/script/dom/webglrenderingcontext.rs +++ b/components/script/dom/webglrenderingcontext.rs @@ -9,8 +9,8 @@ use dom::bindings::codegen::Bindings::WebGLRenderingContextBinding::WebGLRenderi use dom::bindings::codegen::Bindings::WebGLRenderingContextBinding::WebGLRenderingContextMethods; use dom::bindings::codegen::UnionTypes::ImageDataOrHTMLImageElementOrHTMLCanvasElementOrHTMLVideoElement; use dom::bindings::conversions::{ArrayBufferViewContents, ConversionResult, FromJSValConvertible, ToJSValConvertible}; -use dom::bindings::conversions::{array_buffer_view_data, array_buffer_view_data_checked, array_buffer_view_to_vec}; -use dom::bindings::conversions::array_buffer_view_to_vec_checked; +use dom::bindings::conversions::{array_buffer_to_vec, array_buffer_view_data, array_buffer_view_data_checked}; +use dom::bindings::conversions::{array_buffer_view_to_vec, array_buffer_view_to_vec_checked}; use dom::bindings::error::{Error, Fallible}; use dom::bindings::inheritance::Castable; use dom::bindings::js::{JS, LayoutJS, MutNullableHeap, Root}; @@ -883,7 +883,13 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { return Ok(self.webgl_error(InvalidValue)); } - let data_vec = try!(unsafe { fallible_array_buffer_view_to_vec::(data) }); + let data_vec = unsafe { + match array_buffer_to_vec::(data) { + Some(data) => data, + // Not an ArrayBuffer object, maybe an ArrayBufferView? + None => try!(fallible_array_buffer_view_to_vec::(data)), + } + }; let bound_buffer = match target { constants::ARRAY_BUFFER => self.bound_buffer_array.get(), @@ -915,7 +921,13 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { return Ok(self.webgl_error(InvalidValue)); } - let data_vec = try!(unsafe { fallible_array_buffer_view_to_vec::(data) }); + let data_vec = unsafe { + match array_buffer_to_vec::(data) { + Some(data) => data, + // Not an ArrayBuffer object, maybe an ArrayBufferView? + None => try!(fallible_array_buffer_view_to_vec::(data)), + } + }; let bound_buffer = match target { constants::ARRAY_BUFFER => self.bound_buffer_array.get(),