[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Public WebGL] Two shader validator issues.



I believe the majority of current WebGL implementations currently just throw shaders, etc directly at the underlying graphics driver which exposes all sorts of inconsistencies between different driver versions, gpus, and platforms.  Dealing with these problems is an ongoing problem but i believe that all implementations will eventually have their own much stricter shader validators.

The hope is that stricter validation (and subsequent shader rewriting by the webgl impl) will make it difficult to write shaders that will work on some, but not all platforms.

--Oliver

On Jul 30, 2010, at 6:16 AM, steve@sjbaker.org wrote:

> I've been putting some of my more complex GLSL shaders through the new
> checking gizmo in yesterday's Firefox nightly build and I'm seeing some
> inconsistancies between the Linux 64 bit version and the Windows XP 32 bit
> version (those are the only two I've tried).
> 
> Two shader constructs are accepted by Linux but not by Windows:
> 
>   #ifdef GL_ES
>   precision highp float;
>   #endif
>   ...
>   vec3   A ;
>   vec3   B ;
>   float  C ;
>   float  D ;
>   ...
>   A = ( C > D ) ? 0.0 : B ;
> 
> ...the compiler under Windows complains about that last line:
> 
>   ERROR: 0:50: ':' : wrong operand types no operation ':' exists
>   that takes a left-hand operand of type 'const mediump float'
>   and a right operand of type '3-component vector of float'
>   (or there is no acceptable conversion)
>   ERROR: 1 compilation errors. No code generated.
> 
> I could understand if maybe the new 'no automatic conversions' thing were
> refusing to widen '0.0' to 'vec3(0.0,0.0,0.0)' - but the problem doesn't
> seem to be that - it looks like it's widening it into a 'mediump' instead
> of to the 'highp' that my 'precision' statement demands...which would be a
> bug.
> 
> The second problem is that (in a fragment shader), I say:
> 
>   #ifdef GL_ES
>   precision highp float;
>   #endif
>   ...
>   varying vec2 texCoord ;
>   ...
>   texCoord.x += 0.1 ;
> 
> ...and under Windows, I get:
> 
>  ERROR: 0:77: 'assign' : l-value required "texCoord" (can't modify
>  a varying)
>  ERROR: 1 compilation errors. No code generated.
> 
> ...this machine has OpenGL installed on it - but I wonder if the 'no
> assignment to varying' restriction comes from some HLSL/Cg restriction in
> the underlying implementation?
> 
> In both cases, the shader code compiles and runs just fine under regular
> C++/OpenGL 3.x and under the Linux FireFox (with or without the validator)
> - and it also works OK under Windows if the webgl.shader_validator
> variable is set to false.
> 
> The Windows XP machine has a fancy high end nVidia GPU - and the various
> Linux boxes I've run it on have everything from a 6800 up to a really
> recent nVidia GPU.
> 
> I know the validator is working under Linux because it caught a couple of:
> 
>   float X ;
>   X = 6 ;
> 
> ...kinds of thing, and it stopped complaining when I changed '6' to '6.0'.
> 
> Obviously, neither of these things are serious problems for me - it's
> mostly just annoying that I can't develop under Linux and expect my shader
> code to "just work" under Windows.
> 
>  -- Steve
> 
> 
> -----------------------------------------------------------
> You are currently subscribed to public_webgl@khronos.org.
> To unsubscribe, send an email to majordomo@khronos.org with
> the following command in the body of your email:
> 


-----------------------------------------------------------
You are currently subscribed to public_webgl@khronos.org.
To unsubscribe, send an email to majordomo@khronos.org with
the following command in the body of your email: