[Mesa-dev] [PATCH] glsl: disallow mixed varying types within a location

Ilia Mirkin imirkin at alum.mit.edu
Wed Sep 6 01:59:58 UTC 2017


On Tue, Sep 5, 2017 at 9:54 PM, Timothy Arceri <tarceri at itsqueeze.com> wrote:
>
> On 06/09/17 11:23, Ilia Mirkin wrote:
>>
>> The enhanced layouts spec has all kinds of restrictions about what can
>> and cannot be mixed in a location. Integer/float(/presumably double)
>> can't occupy a single location, interpolation has to be the same, as
>> well as auxiliary storage (including patch!).
>>
>> The implication of this is ... don't specify explicit locations/components
>> if you want better packing, since the auto-packer doesn't care at all
>> about most of these restrictions. Sad.
>
>
> There are still use cases such as SSO, tessellation shaders and varyings
> used by interpolateAt (although we just enable the enhanced layout packing
> rules by default for those anyway) were we cannot use the auto-packer.
>
> As far as the patch goes this should really be in link_varyings.cpp rather
> than linker.cpp, also there is already related validation code in
> cross_validate_outputs_to_inputs() any reason for not just modifying the
> code there?

This applies to whole shader stages. So e.g. in SSO, you still
validate the inputs and the outputs. Similarly, you do this for vertex
shader inputs.

Ideally it'd be done earlier on, but we need to wait for the interface
types to go away, or else it'd be a disaster.

Most of link_varyings is concerned with inter-stage logic. It could be
moved there, of course, just didn't really seem to belong.


More information about the mesa-dev mailing list