[Mesa-dev] Shader Interface Matching
Tapani Pälli
tapani.palli at intel.com
Wed Dec 2 23:15:00 PST 2015
On 12/03/2015 09:03 AM, Timothy Arceri wrote:
> On Thu, 2015-12-03 at 08:46 +0200, Tapani Pälli wrote:
>>
>> On 12/03/2015 05:58 AM, Timothy Arceri wrote:
>>> Hi All,
>>>
>>> I recently pushed a couple of piglit tests [1] and [2] that test
>>> for
>>> matching of blocks and structs based on location rather than name
>>> when
>>> an explicit location is given.
>>>
>>> The test pass on Nvidia but fail in current Mesa.
>>>
>>> However I just came across this in section 7.4.1 (Shader Interface
>>> Matching) the OpenGL 4.5 spec:
>>>
>>> "- An output block is considered to match an input block in
>>> the subsequent shader if the two blocks have the same block
>>> name, and the members of the block match exactly in name,
>>> type, qualification, and declaration order.
>>> - An output variable is considered to match an input variable
>>> in the subsequentshader if:
>>> -- the two variables match in name, type, and qualification;
>>> or
>>> -- the two variables are declared with the same location and
>>> component layout qualifiers and match in type and
>>> qualification."
>>>
>>> But then later it says:
>>>
>>> "The inputs and outputs on an interface between programs need not
>>> match
>>> ex-actly when input and output location qualifiers (sections
>>> 4.4.1(“Input Layout Qual-ifiers”) and 4.4.2(“Output Layout
>>> Qualifiers”)
>>> of the OpenGL Shading LanguageSpecification) are used. When using
>>> location qualifiers, any input with an inputlocation qualifier will
>>> be
>>> well-defined as long as the other program writes to amatching
>>> output,
>>> as described above. The names of variables need not match when
>>> matching
>>> by location."
>>>
>>> So my question is why bother to inforce name matching on blocks
>>> when
>>> not using SSO? Should I folow the spec or do what Nvidia does?
>>
>> I was reading through these sections when looking at the tests. My
>> understanding is that Mesa is too strict currently since matching by
>> location is defined as above, this change came in 4.3 spec.
>
> Mesa also has a bigger problem in that it parses the location from
> structs and interface blocks but doesn't actually use it.
Right, I think it's there only for uniforms. Uniforms will get
sequential locations for structure items. Now I can't find test for this
but I remember writing the code for it.
>> I don't see
>> it being limited to SSO scope. How I understand is that this
>> paragraph
>> belongs to generic scope of "Shader Interface Matching" section.
>
> But doesn't the end of the first line "between programs" mean its only
> talking about SSO. At the top when it talks about names being required
> to match for blocks and block members it talks about the interface
> between shaders rather than programs.
True, I missed this bit. I guess it would be good to make a search in
Khronos bugzilla if there is any discussion about this topic. I don't
see much reason to require name to match if location, type and other
required qualifiers match but it does seem to be required :/
>>
>>
>>> Tim
>>>
>>>
>>> [1]
>>> http://cgit.freedesktop.org/piglit/commit/?id=f1e416b8e65ad95c6ce9e
>>> 04a80d83e7f9e1e9239
>>> [2]
>>> http://cgit.freedesktop.org/piglit/commit/?id=2b2bb62ce03ffa065e9b5
>>> 91cd
>>> 05e12c623ed4759
>>> _______________________________________________
>>> mesa-dev mailing list
>>> mesa-dev at lists.freedesktop.org
>>> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>>>
>> _______________________________________________
>> mesa-dev mailing list
>> mesa-dev at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list