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

Nicolai Hähnle nhaehnle at gmail.com
Mon Feb 15 15:49:43 UTC 2016



On 12.02.2016 17:53, Timothy Arceri 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");
>     }
>
> ??

FWIW, I like Ilia's original message better because it gives the user 
more information about why exactly their layout qualifier is invalid. 
Helpful error messages are a good thing.

That said, I won't complain too loudly if making the code simpler or 
easier to follow ends up making the error messages slightly less helpful.

Cheers,
Nicolai

>
>> +
>> +      if (type->qualifier.flags.q.explicit_location) {
>> +         _mesa_glsl_error(&loc, state,
>> +                          "atomic counters cannot have an explicit
>> location");
>> +      }
>>      }
>>
>>      if (this->declarations.is_empty()) {
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>


More information about the mesa-dev mailing list