[Mesa-dev] [PATCH] glsl: reject explicit location on atomic counter uniforms

Timothy Arceri t_arceri at yahoo.com.au
Sat Feb 13 01:52:15 UTC 2016


On Fri, 2016-02-12 at 18:45 -0500, Ilia Mirkin wrote:
> On Fri, Feb 12, 2016 at 5:53 PM, Timothy Arceri <t_arceri at yahoo.com.a
> u> wrote:
> > On Thu, 2016-02-11 at 20:10 -0500, Ilia Mirkin wrote:
> > > This fixes
> > > 
> > > dEQP-GLES31.functional.uniform_location.negative.atomic_fragment
> > > dEQP-GLES31.functional.uniform_location.negative.atomic_vertex
> > > 
> > > Both of which have lines like
> > > 
> > > layout(location = 3, binding = 0, offset = 0) uniform atomic_uint
> > > uni0;
> > > 
> > > The ARB_explicit_uniform_location spec makes a very tangential
> > > mention
> > > regarding atomic counters, but location isn't something that
> > > makes
> > > sense
> > > with them.
> > > 
> > > Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>
> > > ---
> > > 
> > > Had no clue where to stick this check... this seemed like as good
> > > a
> > > place as any.
> > > 
> > >  src/compiler/glsl/ast_to_hir.cpp | 5 +++++
> > >  1 file changed, 5 insertions(+)
> > > 
> > > diff --git a/src/compiler/glsl/ast_to_hir.cpp
> > > b/src/compiler/glsl/ast_to_hir.cpp
> > > index dbeb5c0..9fce06b 100644
> > > --- a/src/compiler/glsl/ast_to_hir.cpp
> > > +++ b/src/compiler/glsl/ast_to_hir.cpp
> > > @@ -4179,6 +4179,11 @@ ast_declarator_list::hir(exec_list
> > > *instructions,
> > >              state->atomic_counter_offsets[qual_binding] =
> > > qual_offset;
> > >           }
> > >        }
> > 
> > Maybe we should just make this:
> >    else {
> >       _mesa_glsl_error(&loc, state, "invalid atomic counter layout
> > qualifier");
> >    }
> 
> Nope, that doesn't work. In this case
> 
> layout(location = 3, binding = 0, offset = 0)
> 
> it goes into the if () case above, as these are all merged by the
> time
> it goes into hir. Also, it's legal to just have binding, in which
> case
> it'd go into the else, which we don't want either.
> 
> This has to be a standalone condition if I do it here.

Right. I corrected myself on IRC. IMO it should be done something like
this.

   /* Valid atomic layout qualifiers */
   ast_type_qualifier atomic_layout_mask;
   atomic_layout_mask.flags.i = 0;
   atomic_layout_mask.flags.q.explicit_binding = 1;
   atomic_layout_mask.flags.q.explicit_offset = 1;
   atomic_layout_mask.flags.q.unifrom = 1 ; ???

   if ((qual->flags.i & ~atomic_layout_mask.flags.i) != 0)
      _mesa_glsl_error(&loc, state, "invalid atomic counter layout
qualifier");
   
As I don't see why we should be treating location as a special case.


> 
> An alternative, as mentioned on IRC, is to stick it into
> apply_explicit_location in the if (uniform) check. Or maybe somewhere
> else entirely.



> 
>   -ilia


More information about the mesa-dev mailing list