[Mesa-dev] [PATCH 1/6] main: fix ACTIVE_UNIFORM_BLOCKS value

Samuel Iglesias Gonsálvez siglesias at igalia.com
Mon Sep 28 03:46:52 PDT 2015



On 28/09/15 12:39, Samuel Iglesias Gonsálvez wrote:
> 
> 
> On 27/09/15 23:15, Timothy Arceri wrote:
>> On Fri, 2015-09-25 at 10:24 +0200, Samuel Iglesias Gonsalvez wrote:
>>> NumUniformBlocks also counts shader storage blocks.
>>> NumUniformBlocks variable will be renamed in a later patch to avoid
>>> misunderstandings.
>>>
>>> Signed-off-by: Samuel Iglesias Gonsalvez <siglesias at igalia.com>
>>> ---
>>>  src/mesa/main/shaderapi.c | 9 +++++++--
>>>  1 file changed, 7 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c
>>> index edc23bc..7866a20 100644
>>> --- a/src/mesa/main/shaderapi.c
>>> +++ b/src/mesa/main/shaderapi.c
>>> @@ -725,12 +725,17 @@ get_programiv(struct gl_context *ctx, GLuint
>>> program, GLenum pname,
>>>        *params = max_len;
>>>        return;
>>>     }
>>> -   case GL_ACTIVE_UNIFORM_BLOCKS:
>>> +   case GL_ACTIVE_UNIFORM_BLOCKS: {
>>> +      unsigned i;
>>> +
>>>        if (!has_ubo)
>>>           break;
>>>  
>>> -      *params = shProg->NumUniformBlocks;
>>> +      for (i = 0, *params = 0; i < shProg->NumProgramResourceList;
>>> i++)
>>> +         if (shProg->ProgramResourceList[i].Type ==
>>> GL_UNIFORM_BLOCK)
>>> +            (*params)++;
>>>        return;
>>> +   }
>>
>> Rather than loop through the entire resource list you could just
>> looping over the uniform block list right?
>>
>>    for (unsigned i = 0; i < shProg->NumUniformBlocks; i++) {
>>       if (!shProg->UniformBlocks[i].IsShaderStorage) {
>>          (*params)++;;
>>       }
>>    }
>>
> 
> Yeah, that works too. I will change it. Do you give R-b to this change?

Mmm, looking at the OpenGL 4.3 spec, 7.6 Uniform Variables:

"Active uniform blocks are those that contain active uniforms after a
program has been compiled and linked."

And active uniform blocks have been gathered in ProgramResourceList[].
So I prefer my original patch even when we loop through the entire
resource list.

What do you think?

Sam

> 
> Sam
> 
>>>     case GL_PROGRAM_BINARY_RETRIEVABLE_HINT:
>>>        /* This enum isn't part of the OES extension for OpenGL ES
>>> 2.0.  It is
>>>         * only available with desktop OpenGL 3.0+ with the
>>


More information about the mesa-dev mailing list