[Mesa-dev] [PATCH 12/20] linker: Track uniform locations to new tracking structures

Ian Romanick idr at freedesktop.org
Mon Oct 31 12:15:25 PDT 2011


On 10/28/2011 01:52 PM, Eric Anholt wrote:
> On Fri, 28 Oct 2011 10:42:39 -0700, "Ian Romanick"<idr at freedesktop.org>  wrote:
>> From: Ian Romanick<ian.d.romanick at intel.com>
>>
>> This is just the infrastructure and the code.  It's not used yet.
>>
>> Signed-off-by: Ian Romanick<ian.d.romanick at intel.com>
>> ---
>>   src/glsl/link_uniforms.cpp |   95 ++++++++++++++++++++++++++++++++++++++++++++
>>   src/glsl/linker.h          |    3 +
>>   2 files changed, 98 insertions(+), 0 deletions(-)
>>
>> diff --git a/src/glsl/link_uniforms.cpp b/src/glsl/link_uniforms.cpp
>> index 54af326..a87e69f 100644
>> --- a/src/glsl/link_uniforms.cpp
>> +++ b/src/glsl/link_uniforms.cpp
>> +   /* First pass: Count the uniform resources used by the user-defined
>> +    * uniforms.  While this happens, each active uniform will have an index
>> +    * assined to it.
>
> "assigned"
>
>> +    * Note: this is *NOT* the index that is returned to the application by
>> +    * glGetUnfiormLocation.
>
> "Uniform"
>
>> +    */
>> +   count_uniform_usage usage(prog->UniformHash);
>> +   for (unsigned i = 0; i<  MESA_SHADER_TYPES; i++) {
>> +      if (prog->_LinkedShaders[i] == NULL)
>> +	 continue;
>> +
>> +      foreach_list(node, prog->_LinkedShaders[i]->ir) {
>> +	 ir_variable *const var = ((ir_instruction *) node)->as_variable();
>> +
>> +	 if ((var == NULL) || (var->mode != ir_var_uniform))
>> +	    continue;
>> +
>> +	 /* FINISHME: Update code to process built-in uniforms!
>> +	  */
>> +	 if (strncmp("gl_", var->name, 3) == 0)
>> +	    continue;
>> +
>> +	 usage.process(var);
>> +      }
>> +   }
>> +
>> +   const unsigned num_user_uniforms = usage.num_active_uniforms;
>> +   const unsigned num_data_slots = usage.num_values;
>> +
>> +   /* On the outside chance that there were no uniforms, bail out.
>> +    */
>> +   if (num_user_uniforms == 0)
>> +      return;
>
> No need to set NumUserUniformStorage?

Clearing the old uniform state at the top of function sets 
NumUserUniformStorage to 0 and UniformStorage to NULL, so it should be good.


More information about the mesa-dev mailing list