4 Replies Latest reply on Jul 12, 2017 2:15 AM by dwitczak

    Segfault in GLSL linker

    sdanisch

      Hi,

      I have the following GLSL program, which passes all tests by the GLSLang validator:

      test.frag · GitHub

      test.geom · GitHub

      test.vert · GitHub

      It segfaults when linking it (when calling `glLinkProgram`)!

       

      AMD Radeon FirePro W9100

      amdgpu pro 17.10

      Ubuntu 16.04 LTS

       

      All my other shader work just fine, so it shouldn't be a general problem with my setup!

       

      I'd appreciate quick feedback. A segfault in a valid program with a pro driver is not very nice!

      Btw, this isn't my first segfault, the last ones were not actual valid programs, but an error would still have been much nicer!

       

      Let me know if this is the wrong forum, it was kind of hard to find an official bug report site!

       

      Best,

      Simon

        • Re: Segfault in GLSL linker
          dwitczak

          Thanks for the feedback and apologies for the delay in my response. I'm patching this through to the compiler team. Will get back as soon as I hear back.    

            • Re: Segfault in GLSL linker
              dwitczak

              I can confirm this is a compiler-side issue. We're working on getting it resolved.

                • Re: Segfault in GLSL linker
                  dwitczak

                  OK, so as it turns out, this is actually a shader issue. Here's the feed-back I got from the team:

                   

                  >>

                  in Vert2Geom geom_in[];

                  void emit_vertex2(Vert2Geom[2] geom_in, Canvas canvas, Uniforms uniforms, vec2 position, vec2 uv, int index)

                  {

                  }

                  void main()

                  {

                       emit_vertex2(geom_in, canvas, uniforms, p0 + thickness_aa0 * n0, vec2(0, -uv0), 1);
                  emit_vertex2(geom_in, canvas, uniforms, p0 - thickness_aa0 * n0, vec2(0, uv0), 1);
                  emit_vertex2(geom_in, canvas, uniforms, p1 + thickness_aa1 * n0, vec2(l, -uv1), 2);
                  emit_vertex2(geom_in, canvas, uniforms, p1 - thickness_aa1 * n0, vec2(l, uv1), 2);

                  }

                  the parameter geom_in has no array size, which is not allowed. According to glsl spec(chapter 4.1.9):  The size of any array must be declared before passing it as an argument to a function. Violation of any of these rules result in compile-time errors.

                  <<

                   

                  The compiler-side issue I mentioned in my previous response is that we should be returning a compilation error for this case but we don't. We're going to improve this in one of the upcoming driver

                  releases.