<html>
    <head>
      <base href="https://bugs.freedesktop.org/">
    </head>
    <body>
      <p>
        <div>
            <b><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - [radeonsi/Navi] The Bard's Tale IV causes a GPU hang"
   href="https://bugs.freedesktop.org/show_bug.cgi?id=111591#c16">Comment # 16</a>
              on <a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - [radeonsi/Navi] The Bard's Tale IV causes a GPU hang"
   href="https://bugs.freedesktop.org/show_bug.cgi?id=111591">bug 111591</a>
              from <span class="vcard"><a class="email" href="mailto:vgglvyww36@khasekhemwy.net" title="vggl <vgglvyww36@khasekhemwy.net>"> <span class="fn">vggl</span></a>
</span></b>
        <pre>
"The games shaders use GLSL 4.30 which mean interpolation qualifiers must match
across shader interfaces otherwise it is a link-time error. In GLSL 4.40 this
restriction was relaxed."

I believe that relaxation came in version 4.30, not 4.40.

The 4.30 spec here:
<a href="https://www.khronos.org/registry/OpenGL/specs/gl/GLSLangSpec.4.30.pdf">https://www.khronos.org/registry/OpenGL/specs/gl/GLSLangSpec.4.30.pdf</a>

>From the "4.3.4 Input Variables" section:

"The fragment shader inputs form an interface with the last active shader in
the vertex processing pipeline. For this interface, the last active shader
stage output variables and fragment shader input variables of the same name
must match in type and qualification, with a few exceptions: The storage
qualifiers must, of course, differ (one is in and one is out). Also,
interpolation qualification (e.g., flat) and auxiliary qualification (e.g.
centroid) may differ. These mismatches are allowed between any pair of stages.
When interpolation or auxiliary qualifiers do not match, those provided in the
fragment shader supersede those provided in previous stages. If any such
qualifiers are completely missing in the fragment shaders, then the default is
used, rather than any qualifiers that may have been declared in previous
stages. That is, what matters is what is declared in the fragment shaders, not
what is declared in shaders in previous stages."

That language is identical between 4.30 and 4.40. It sounds like it explicitly
allows interpolation qualifiers to differ.  However the 4.20 spec language in
that section was quite different and did require an interpolation qualifier
match.

Also, from
<a href="https://www.khronos.org/opengl/wiki/Shader_Compilation#Interface_matching">https://www.khronos.org/opengl/wiki/Shader_Compilation#Interface_matching</a>:

"If GLSL 4.30 or later is available, then the interpolation qualifiers
(including centroid and sample) do not need to match."</pre>
        </div>
      </p>


      <hr>
      <span>You are receiving this mail because:</span>

      <ul>
          <li>You are the assignee for the bug.</li>
      </ul>
    </body>
</html>