Ian Romanick <i...@freedesktop.org> writes:

> On 09/17/2013 03:51 PM, Paul Berry wrote:
>> On 15 September 2013 00:10, Francisco Jerez <curroje...@riseup.net
>> <mailto:curroje...@riseup.net>> wrote:
>>[...]
>> 
>> GLSL 4.20 clarifies that atomic counter offsets must be unique and
>> non-overlapping (see GLSL 4.20 4.4.4.1 "Atomic Counter Layout
>> Qualifiers").  So I tihnk we need a stronger check than this. 
>> Specifically, declarations like the following should be disallowed:
>> 
>> layout(binding=0, offset=16) atomic_uint foo[4]; // Uses offsets 16, 20,
>> 24, 28
>> layout(binding=0, offset=20) atomic_uint bar; // Error: overlaps foo.
>
> I also think this check belongs in the linker.  I don't see a lot of
> value in doing it twice, and we have to verify atomics declared in other
> compilation units.
>
I can move that check back to the linker, you're right that it would
probably be more convenient for us to do so.  The spec isn't very clear
on whether this should be a compile or a link-time error, actually I
implemented this in the linker first but in doubt it seemed desirable to
be able to catch this sort of errors as early as possible, and the spec
mentions explicitly that using atomic buffer bindings over the
implementation's maximum should cause a compile-time error.

>>
>>     +         if (field_type->atomic_size()) {
>>     +            YYLTYPE loc = decl_list->get_location();
>>     +            _mesa_glsl_error(&loc, state, "atomic counter in
>>     structure or "
>>     +                             "uniform block");
>>     +         }
>>     +
>> 
>> Are you sure this is not allowed?  I can't find any spec text to back
>> this up.  All I found was this text from ARB_shader_atomic_counters:
>
> Yeah, this is definitely wrong.  See the text I quoted in reply to patch
> 8.[...]
>
Please read my answer to Paul's post.  It's not clear how atomic
counters declared within a structure would get their binding points and
offsets assigned: binding and offset qualifiers are disallowed within
structs, and using a single layout() qualifier for the whole uniform
struct declaration isn't satisfactory either.  I think we should
disallow them for now, the spec is just too inconsistent...

Thanks.

Attachment: pgpG5adU2FAAS.pgp
Description: PGP signature

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to