Skip to content

Commit

Permalink
Simplify gl.getShaderParameter() (fixes #20562)
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
nox committed Jul 31, 2018
1 parent a0fc4c9 commit 76f23f7
Show file tree
Hide file tree
Showing 5 changed files with 13 additions and 41 deletions.
14 changes: 0 additions & 14 deletions components/canvas/webgl_thread.rs
Expand Up @@ -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 {
Expand Down
14 changes: 0 additions & 14 deletions components/canvas_traits/webgl.rs
Expand Up @@ -273,8 +273,6 @@ pub enum WebGLCommand {
GetParameterFloat4(ParameterFloat4, WebGLSender<[f32; 4]>),
GetProgramValidateStatus(WebGLProgramId, WebGLSender<bool>),
GetProgramActiveUniforms(WebGLProgramId, WebGLSender<i32>),
GetShaderParameterBool(WebGLShaderId, ShaderParameterBool, WebGLSender<bool>),
GetShaderParameterInt(WebGLShaderId, ShaderParameterInt, WebGLSender<i32>),
GetCurrentVertexAttrib(u32, WebGLSender<[f32; 4]>),
GetTexParameterFloat(u32, TexParameterFloat, WebGLSender<f32>),
GetTexParameterInt(u32, TexParameterInt, WebGLSender<i32>),
Expand Down Expand Up @@ -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 {
Expand Down
20 changes: 8 additions & 12 deletions components/script/dom/webglrenderingcontext.rs
Expand Up @@ -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};
Expand Down Expand Up @@ -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()
}
}
}
Expand Down
4 changes: 4 additions & 0 deletions components/script/dom/webglshader.rs
Expand Up @@ -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()
}
Expand Down
Expand Up @@ -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]
Expand Down

0 comments on commit 76f23f7

Please sign in to comment.