[Mesa-dev] [PATCH 1/2] mesa: fix uniforms calculation in glGetProgramiv

Tapani Pälli tapani.palli at intel.com
Fri Oct 30 21:52:01 PDT 2015


On 10/30/2015 05:57 PM, Ilia Mirkin wrote:
> On Fri, Oct 30, 2015 at 8:30 AM, Tapani Pälli <tapani.palli at intel.com> wrote:
>> Since introduction of SSBO, UniformStorage contains not just uniforms
>> but also buffer variables, this needs to be taken in to account when
>> calculating active uniforms with GL_ACTIVE_UNIFORMS and
>> GL_ACTIVE_UNIFORM_MAX_LENGTH.
>>
>> No Piglit regressions.
>>
>> Signed-off-by: Tapani Pälli <tapani.palli at intel.com>
>> ---
>>   src/mesa/main/shaderapi.c | 14 ++++++++++++--
>>   1 file changed, 12 insertions(+), 2 deletions(-)
>>
>> diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c
>> index 765602e..ac40891 100644
>> --- a/src/mesa/main/shaderapi.c
>> +++ b/src/mesa/main/shaderapi.c
>> @@ -630,9 +630,16 @@ get_programiv(struct gl_context *ctx, GLuint program, GLenum pname,
>>      case GL_ACTIVE_ATTRIBUTE_MAX_LENGTH:
>>         *params = _mesa_longest_attribute_name_length(shProg);
>>         return;
>> -   case GL_ACTIVE_UNIFORMS:
>> -      *params = shProg->NumUniformStorage - shProg->NumHiddenUniforms;
>> +   case GL_ACTIVE_UNIFORMS: {
>> +      unsigned i;
>> +      const unsigned num_uniforms =
>> +         shProg->NumUniformStorage - shProg->NumHiddenUniforms;
> Are the hidden uniforms guaranteed to be at the end of that list? If
> not, the subtraction needs to happen at the end. Also didn't I see

Good point, I don't think that's guaranteed. I'll need to to move the 
subtraction part or perhaps easier just skip hidden ones in the loop.

> some patches making dedicated lists for UBOs and SSBOs?

UBO and SSBO index spaces were separated but they both still utilize 
gl_uniform_storage for their contents, uniforms and buffer variables.

>> +      for (*params = 0, i = 0; i < num_uniforms; i++) {
>> +         if (!shProg->UniformStorage[i].is_shader_storage)
>> +            (*params)++;
>> +      }
>>         return;
>> +   }
>>      case GL_ACTIVE_UNIFORM_MAX_LENGTH: {
>>         unsigned i;
>>         GLint max_len = 0;
>> @@ -640,6 +647,9 @@ get_programiv(struct gl_context *ctx, GLuint program, GLenum pname,
>>            shProg->NumUniformStorage - shProg->NumHiddenUniforms;
>>
>>         for (i = 0; i < num_uniforms; i++) {
>> +         if (shProg->UniformStorage[i].is_shader_storage)
>> +            continue;
>> +
>>           /* Add one for the terminating NUL character for a non-array, and
>>            * 4 for the "[0]" and the NUL for an array.
>>            */
>> --
>> 2.4.3
>>
>> _______________________________________________
>> mesa-dev mailing list
>> mesa-dev at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/mesa-dev



More information about the mesa-dev mailing list