[Mesa-dev] [PATCH 4/8] glsl: Add new builtins required by GL_ARB_sample_shading

Anuj Phogat anuj.phogat at gmail.com
Thu Oct 17 22:23:28 CEST 2013


On Wed, Oct 16, 2013 at 11:25 PM, Kenneth Graunke <kenneth at whitecape.org> wrote:
> On 10/16/2013 03:49 PM, Ian Romanick wrote:
> [snip]
>> You are completely correct here.  We should check what other vendors do.
>>  I think 5 tests will tell us everything we need to know (then we'll
>> probably submit some spec bugs).  I don't have any non-Intel hardware
>> that supports either extension, so I can't actually try any of these.
>
> Thanks for the tests, Ian!
>
> I ran them on my Radeon HD 6870 with Catalyst 13.10 by doing:
I ran these tests on NVIDIA GTX 650 OpenGL 4.3 drivers (319.17)

> $ PIGLIT_PLATFORM=glx glslparsertest --check-link 1.frag pass
>
>> 1. Does this compile, link, and run:
>>
>> #version 130
>> #extension GL_ARB_sample_shading: require
>>
>> out vec4 color;
>>
>> void main() {
>>     color = vec4(gl_SampleMask.length());
>>     gl_SampleMask[0] = ~0;
>> }
>
> Successfully compiled and linked fragment shader 1.frag: (no compiler output)
>
NVIDIA:
Successfully compiled and linked fragment shader 1.frag: (no compiler output)
Mesa:
Successfully compiled and linked fragment shader 1.frag: (no compiler output)
>> 2. Does this compile and link:
>>
>> #version 130
>> #extension GL_ARB_sample_shading: require
>>
>> out vec4 color;
>>
>> void main() {
>>     color = vec4(1);
>>     gl_SampleMask[0] = ~0;
>>     gl_SampleMask[1] = ~0;
>> }
>
> Failed to compile fragment shader 2.frag:
> Fragment shader failed to compile with the following errors:
> ERROR: 0:9: error(#147) "[" array index out of range: '1'
> ERROR: error(#273) 1 compilation errors.  No code generated
>
NVIDIA:
Failed to link: Fragment info
-------------
0(9) : warning C1068: array index out of bounds
0(9) : warning C1068: array index out of bounds
0(9) : warning C1068: array index out of bounds
0(9) : warning C1068: array index out of bounds
0(9) : warning C1068: array index out of bounds
0(9) : error C1068: array index out of bounds

Failed to link fragment shader 2.frag: 0(9) : warning C1068: array
index out of bounds
0(9) : warning C1068: array index out of bounds
(compiler prints shader source here)

Mesa:
Failed to compile fragment shader 2.frag: 0:9(17): error: array index
must be < 1
>> 3. Does this compile and link:
>>
>> #version 130
>> #extension GL_ARB_sample_shading: require
>> #extension GL_ARB_gpu_shader5: require
>>
>> out vec4 color;
>>
>> void main() {
>>     color = vec4(1);
>>     gl_SampleMask = gl_SampleMaskIn;
>> }
>
> Successfully compiled and linked fragment shader 3.frag: (no compiler output)
>
NVIDIA:
Successfully compiled and linked fragment shader 3.frag: (no compiler output)
Mesa:
Failed to compile fragment shader 3.frag: 0:3(12): error: extension
`GL_ARB_gpu_shader5' unsupported in fragment shader
>> 4. Does this compile and link:
>>
>> #version 130
>> #extension GL_ARB_sample_shading: require
>>
>> out vec4 color;
>> in int gl_SampleMask[1];
>>
>> void main() {
>>     color = vec4(1);
>>     gl_SampleMask[0] = ~0;
>> }
>
> Successfully compiled and linked fragment shader 4.frag:
> WARNING: 0:5: warning(#375) Redeclaration of  built-in name: gl_SampleMask
> WARNING: 0:9: warning(#398) l-value required: assign "gl_SampleMask" (can't modify an input)
>
> Presumably you meant "out int gl_SampleMask[1];" instead.  With that change,
>
> Successfully compiled and linked fragment shader 4b.frag:
> WARNING: 0:5: warning(#375) Redeclaration of  built-in name: gl_SampleMask
>
With  "out int gl_SampleMask[1];" change:
NVIDIA:
Successfully compiled and linked fragment shader 4.frag: (no compiler output)
Mesa:
mesa: Failed to compile fragment shader 4.frag: 0:0(0): error:
`gl_SampleMask' redeclared
>> 5. Does this compile and link:
>>
>> #version 130
>> #extension GL_ARB_sample_shading: require
>>
>> out vec4 color;
>> in int gl_SampleMask[2];
>>
>> void main() {
>>     color = vec4(1);
>>     gl_SampleMask[0] = ~0;
>>     gl_SampleMask[1] = ~0;
>> }
>
> Successfully compiled and linked fragment shader 5.frag:
> WARNING: 0:5: warning(#375) Redeclaration of  built-in name: gl_SampleMask
> WARNING: 0:9: warning(#398) l-value required: assign "gl_SampleMask" (can't modify an input)
> WARNING: 0:10: warning(#398) l-value required: assign "gl_SampleMask" (can't modify an input)
>
> Again changing "in" to "out":
>
> Successfully compiled and linked fragment shader 5b.frag:
> WARNING: 0:5: warning(#375) Redeclaration of  built-in name: gl_SampleMask
>
NVIDIA:
Failed to link: Fragment info
-------------
0(5) : error C5102: output semantic attribute "SAMPLEMASK" has too big
of a numeric index (1)
Failed to link fragment shader 5.frag:

Mesa:
mesa: Failed to compile fragment shader 5.frag: 0:0(0): error:
`gl_SampleMask' redeclared
0:10(17): error: array index must be < 1

So, AMD and NVIDIA gives similar output for above test cases except
for 5.frag. They
both seem to use fixed length builtin array: gl_SampleMask[1]. Both
allow redeclaring
builtin variables. Mesa doesn't seem to allow any redeclaration of
builtin variables.

> I haven't actually tried drawing with the shaders.
>
> --Ken


More information about the mesa-dev mailing list