[Mesa-dev] [PATCH] glsl: reject explicit location on atomic counter uniforms
Ilia Mirkin
imirkin at alum.mit.edu
Fri Feb 12 23:45:50 UTC 2016
On Fri, Feb 12, 2016 at 5:53 PM, Timothy Arceri <t_arceri at yahoo.com.au> 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.
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