[Mesa-dev] [PATCH] mesa: fix program resource queries for atomic counter buffers

Lofstedt, Marta marta.lofstedt at intel.com
Fri Oct 30 04:09:18 PDT 2015


> -----Original Message-----
> From: Palli, Tapani
> Sent: Friday, October 30, 2015 11:43 AM
> To: Lofstedt, Marta; mesa-dev at lists.freedesktop.org
> Cc: currojerez at riseup.net
> Subject: Re: [PATCH] mesa: fix program resource queries for atomic counter
> buffers
> 
> 
> 
> On 10/30/2015 12:36 PM, Lofstedt, Marta wrote:
> >
> >> -----Original Message-----
> >> From: Palli, Tapani
> >> Sent: Friday, October 30, 2015 11:03 AM
> >> To: mesa-dev at lists.freedesktop.org
> >> Cc: Lofstedt, Marta; currojerez at riseup.net; Palli, Tapani
> >> Subject: [PATCH] mesa: fix program resource queries for atomic
> >> counter buffers
> >>
> >> gl_active_atomic_buffer contains index to UniformStorage, we need to
> >> calculate resource index for that gl_uniform_storage.
> >>
> >> Fixes following CTS tests:
> >>     ES31-CTS.program_interface_query.atomic-counters
> >>     ES31-CTS.program_interface_query.atomic-counters-one-buffer
> >>
> >> No Piglit regressions.
> >>
> >> Signed-off-by: Tapani Pälli <tapani.palli at intel.com>
> >> ---
> >>   src/mesa/main/shader_query.cpp | 28
> ++++++++++++++++++++++++++--
> >>   1 file changed, 26 insertions(+), 2 deletions(-)
> >>
> >> diff --git a/src/mesa/main/shader_query.cpp
> >> b/src/mesa/main/shader_query.cpp index 59ec3d7..6e0251a 100644
> >> --- a/src/mesa/main/shader_query.cpp
> >> +++ b/src/mesa/main/shader_query.cpp
> >> @@ -668,6 +668,20 @@ _mesa_program_resource_index(struct
> >> gl_shader_program *shProg,
> >>      }
> >>   }
> >>
> >> +/**
> >> + * Find a program resource that points to given data.
> >> + */
> >> +static struct gl_program_resource*
> >> +program_resource_find_data(struct gl_shader_program *shProg, void
> >> +*data) {
> >> +   struct gl_program_resource *res = shProg->ProgramResourceList;
> >> +   for (unsigned i = 0; i < shProg->NumProgramResourceList; i++, res++) {
> >> +      if (res->Data == data)
> >> +         return res;
> >> +   }
> >> +   return NULL;
> >> +}
> >> +
> >>   /* Find a program resource with specific index in given interface.
> >>    */
> >>   struct gl_program_resource *
> >> @@ -1065,8 +1079,18 @@ get_buffer_property(struct
> gl_shader_program
> >> *shProg,
> >>            *val = RESOURCE_ATC(res)->NumUniforms;
> >>            return 1;
> >>         case GL_ACTIVE_VARIABLES:
> >> -         for (unsigned i = 0; i < RESOURCE_ATC(res)->NumUniforms; i++)
> >> -            *val++ = RESOURCE_ATC(res)->Uniforms[i];
> >> +         for (unsigned i = 0; i < RESOURCE_ATC(res)->NumUniforms; i++) {
> >> +            /* Active atomic buffer contains index to UniformStorage. Find
> >> +             * out gl_program_resource via data pointer and then calculate
> >> +             * index of that uniform.
> >> +             */
> >> +            unsigned idx = RESOURCE_ATC(res)->Uniforms[i];
> >> +            struct gl_program_resource *uni =
> >> +               program_resource_find_data(shProg,
> >> +                                          &shProg->UniformStorage[idx]);
> >> +            assert(uni);
> >> +            *val++ = _mesa_program_resource_index(shProg, uni);
> >> +         }
> >
> > The parts GL_SHADER_STORAGE_BLOCK looks very similar to the
> GL_UNIFORM_BLOCK above. Should this code duplication, be avoided?
> 
> You mean parts above not related to this patch? You are welcome to try
> :) I had originally different looking version:
> 
> http://lists.freedesktop.org/archives/mesa-dev/2015-March/079310.html
> 
> I don't have strong preference though.
> 
if you'd set an Glenum programInterface to GL_UNIFORM or GL_BUFFER_VARIABLE to send to _mesa_program_resource_find_name, you would not have had to write the same thing twice :)
Then the GL_NUM_ACTIVE_VARIABLES and the GL_ACTIVE_VARIABLES cases are also very similar...
Never mind,  I don't have any strong opinions either...

Reviewed-by: Marta Lofstedt <marta.lofstedt at intel.com>

> 
> >>            return RESOURCE_ATC(res)->NumUniforms;
> >>         }
> >>      }
> >> --
> >> 2.4.3
> >
> 
> 
> // Tapani


More information about the mesa-dev mailing list