From 76f23f7d78b7d92f7a9c18ec873ac57e7b548dfa Mon Sep 17 00:00:00 2001 From: Anthony Ramine Date: Mon, 30 Jul 2018 15:57:31 +0200 Subject: [PATCH] Simplify gl.getShaderParameter() (fixes #20562) The expectation change is due to the shader now using its DOM-side compile status. It is actually a bug for the shader to think it actually compiled successfully, but at least it does so consistently now. --- components/canvas/webgl_thread.rs | 14 ------------- components/canvas_traits/webgl.rs | 14 ------------- .../script/dom/webglrenderingcontext.rs | 20 ++++++++----------- components/script/dom/webglshader.rs | 4 ++++ .../misc/shaders-with-invariance.html.ini | 2 +- 5 files changed, 13 insertions(+), 41 deletions(-) diff --git a/components/canvas/webgl_thread.rs b/components/canvas/webgl_thread.rs index 294afbcf226..c311868e923 100644 --- a/components/canvas/webgl_thread.rs +++ b/components/canvas/webgl_thread.rs @@ -932,20 +932,6 @@ impl WebGLImpl { } sender.send(value[0]).unwrap() } - WebGLCommand::GetShaderParameterBool(shader, param, ref sender) => { - let mut value = [0]; - unsafe { - ctx.gl().get_shader_iv(shader.get(), param as u32, &mut value); - } - sender.send(value[0] != 0).unwrap() - } - WebGLCommand::GetShaderParameterInt(shader, param, ref sender) => { - let mut value = [0]; - unsafe { - ctx.gl().get_shader_iv(shader.get(), param as u32, &mut value); - } - sender.send(value[0]).unwrap() - } WebGLCommand::GetCurrentVertexAttrib(index, ref sender) => { let mut value = [0.; 4]; unsafe { diff --git a/components/canvas_traits/webgl.rs b/components/canvas_traits/webgl.rs index 0b88fcfec99..007f381354d 100644 --- a/components/canvas_traits/webgl.rs +++ b/components/canvas_traits/webgl.rs @@ -273,8 +273,6 @@ pub enum WebGLCommand { GetParameterFloat4(ParameterFloat4, WebGLSender<[f32; 4]>), GetProgramValidateStatus(WebGLProgramId, WebGLSender), GetProgramActiveUniforms(WebGLProgramId, WebGLSender), - GetShaderParameterBool(WebGLShaderId, ShaderParameterBool, WebGLSender), - GetShaderParameterInt(WebGLShaderId, ShaderParameterInt, WebGLSender), GetCurrentVertexAttrib(u32, WebGLSender<[f32; 4]>), GetTexParameterFloat(u32, TexParameterFloat, WebGLSender), GetTexParameterInt(u32, TexParameterInt, WebGLSender), @@ -583,18 +581,6 @@ parameters! { } } -parameters! { - ShaderParameter { - Bool(ShaderParameterBool { - DeleteStatus = gl::DELETE_STATUS, - CompileStatus = gl::COMPILE_STATUS, - }), - Int(ShaderParameterInt { - ShaderType = gl::SHADER_TYPE, - }), - } -} - parameters! { TexParameter { Float(TexParameterFloat { diff --git a/components/script/dom/webglrenderingcontext.rs b/components/script/dom/webglrenderingcontext.rs index f5f4674793d..336c60d2dc0 100644 --- a/components/script/dom/webglrenderingcontext.rs +++ b/components/script/dom/webglrenderingcontext.rs @@ -5,8 +5,7 @@ use byteorder::{NativeEndian, ReadBytesExt, WriteBytesExt}; use canvas_traits::canvas::{byte_swap, multiply_u8_pixel}; use canvas_traits::webgl::{ActiveAttribInfo, DOMToTextureCommand, Parameter}; -use canvas_traits::webgl::{ShaderParameter, TexParameter, WebGLCommand}; -use canvas_traits::webgl::{WebGLContextShareMode, WebGLError}; +use canvas_traits::webgl::{TexParameter, WebGLCommand, WebGLContextShareMode, WebGLError}; use canvas_traits::webgl::{WebGLFramebufferBindingRequest, WebGLMsg, WebGLMsgSender}; use canvas_traits::webgl::{WebGLProgramId, WebGLResult, WebGLSLVersion, WebGLSender}; use canvas_traits::webgl::{WebGLVersion, WebVRCommand, webgl_channel}; @@ -2737,16 +2736,13 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { self.webgl_error(InvalidValue); return NullValue(); } - match handle_potential_webgl_error!(self, ShaderParameter::from_u32(param), return NullValue()) { - ShaderParameter::Bool(param) => { - let (sender, receiver) = webgl_channel().unwrap(); - self.send_command(WebGLCommand::GetShaderParameterBool(shader.id(), param, sender)); - BooleanValue(receiver.recv().unwrap()) - } - ShaderParameter::Int(param) => { - let (sender, receiver) = webgl_channel().unwrap(); - self.send_command(WebGLCommand::GetShaderParameterInt(shader.id(), param, sender)); - Int32Value(receiver.recv().unwrap()) + match param { + constants::DELETE_STATUS => BooleanValue(shader.is_marked_for_deletion()), + constants::COMPILE_STATUS => BooleanValue(shader.successfully_compiled()), + constants::SHADER_TYPE => UInt32Value(shader.gl_type()), + _ => { + self.webgl_error(InvalidEnum); + NullValue() } } } diff --git a/components/script/dom/webglshader.rs b/components/script/dom/webglshader.rs index 558d43c220c..c3ca74fde1f 100644 --- a/components/script/dom/webglshader.rs +++ b/components/script/dom/webglshader.rs @@ -192,6 +192,10 @@ impl WebGLShader { } } + pub fn is_marked_for_deletion(&self) -> bool { + self.marked_for_deletion.get() + } + pub fn is_deleted(&self) -> bool { self.marked_for_deletion.get() && !self.is_attached() } diff --git a/tests/wpt/mozilla/meta/webgl/conformance-1.0.3/conformance/glsl/misc/shaders-with-invariance.html.ini b/tests/wpt/mozilla/meta/webgl/conformance-1.0.3/conformance/glsl/misc/shaders-with-invariance.html.ini index fbb8495547f..81c5672ab91 100644 --- a/tests/wpt/mozilla/meta/webgl/conformance-1.0.3/conformance/glsl/misc/shaders-with-invariance.html.ini +++ b/tests/wpt/mozilla/meta/webgl/conformance-1.0.3/conformance/glsl/misc/shaders-with-invariance.html.ini @@ -13,7 +13,7 @@ [WebGL test #2: [unexpected fragment shader compile status\] (expected: true) vertex shader with variant varying and fragment shader with invariant (global setting) varying must fail] expected: FAIL - [WebGL test #9: [unexpected fragment shader compile status\] (expected: true) vertex shader with invariant varying and fragment shader with invariant (global setting) varying must succeed] + [WebGL test #9: [unexpected link status\] vertex shader with invariant varying and fragment shader with invariant (global setting) varying must succeed] expected: FAIL [WebGL test #11: [unexpected link status\] vertex shader with variant gl_Position and fragment shader with invariant gl_FragCoord must fail]