[Mesa-dev] Mesa (master): glsl: add support for system values and GL_ARB_draw_instanced

Brian Paul brianp at vmware.com
Mon Jan 17 15:20:55 PST 2011


On 01/17/2011 03:38 PM, Ian Romanick wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> On 01/15/2011 09:25 AM, Brian Paul wrote:
>
>> diff --git a/src/glsl/ir_variable.cpp b/src/glsl/ir_variable.cpp
>> index 6b9b294..4d10540 100644
>> --- a/src/glsl/ir_variable.cpp
>> +++ b/src/glsl/ir_variable.cpp
>> @@ -30,6 +30,11 @@ static void generate_ARB_draw_buffers_variables(exec_list *,
>>   						struct _mesa_glsl_parse_state *,
>>   						bool, _mesa_glsl_parser_targets);
>>
>> +static void
>> +generate_ARB_draw_instanced_variables(exec_list *,
>> +                                      struct _mesa_glsl_parse_state *,
>> +                                      bool, _mesa_glsl_parser_targets);
>> +
>>   static ir_variable *
>>   add_variable(const char *name, enum ir_variable_mode mode, int slot,
>>   	     const glsl_type *type, exec_list *instructions,
>> @@ -41,6 +46,7 @@ add_variable(const char *name, enum ir_variable_mode mode, int slot,
>>      case ir_var_auto:
>>      case ir_var_in:
>>      case ir_var_uniform:
>> +   case ir_var_system_value:
>>         var->read_only = true;
>>         break;
>>      case ir_var_inout:
>> @@ -324,8 +330,13 @@ initialize_vs_variables(exec_list *instructions,
>>         generate_130_vs_variables(instructions, state);
>>         break;
>>      }
>> +
>> +   if (state->ARB_draw_instanced_enable)
>> +      generate_ARB_draw_instanced_variables(instructions, state, false,
>> +                                            vertex_shader);
>
> Have you verified this against other implementations?  The
> GL_ARB_draw_instanced spec say:
>
>     "If EXT_gpu_shader4 or OpenGL 3.0 is not supported, all references to
>     gl_InstanceIDARB are deleted.  Note that if EXT_gpu_shader4 is
>     available, the gl_InstanceIDARB and gl_InstanceID values are the
>     same."

Hmmm, I missed that.


> Is gl_InstanceIDARB available in 1.10 or 1.20 vertex shaders on other
> implementations?

With NVIDIA I found that gl_InstanceID is available (but not 
gl_InstanceIDARB) if I declare "#extension GL_ARB_draw_instanced: 
enable".  And that's without #version 130.  I was thinking that the 
lack of gl_InstanceIDARB was a bug on their part.


> This bit of weirdness in the spec is part of the reason I hadn't already
> implemented this extension.  It's not 100% clear to me why this
> dependency exists.  My only guess is that GLSL 1.20 and earlier allow
> integer variables to be stored in floats, and that's kind of weird for
> the instance ID.

That's probably it.

Unless there's strong objection I'd like to keep the code in there. 
Maybe just add a state->language_version >= 130 check?

-Brian


More information about the mesa-dev mailing list