[Mesa-dev] [Bug 96358] SSO: wrong interface validation between GS and VS (regresion due to latest gles 3.1)

bugzilla-daemon at freedesktop.org bugzilla-daemon at freedesktop.org
Fri Jun 3 19:28:54 UTC 2016


https://bugs.freedesktop.org/show_bug.cgi?id=96358

            Bug ID: 96358
           Summary: SSO: wrong interface validation between GS and VS
                    (regresion due to latest gles 3.1)
           Product: Mesa
           Version: git
          Hardware: Other
                OS: All
            Status: NEW
          Severity: normal
          Priority: medium
         Component: Mesa core
          Assignee: mesa-dev at lists.freedesktop.org
          Reporter: gregory.hainaut at gmail.com
        QA Contact: mesa-dev at lists.freedesktop.org

Hello,

My program generates pipeline invalidation error but it used to be fine. It is
related to bd3f15cffdbbec6d1ea5b7db2fcddaf8b7ae4524.

Here the Vertex Shader output

out SHADER
{
    vec4 t_float;
    vec4 t_int;
    vec4 c;
    flat vec4 fc;
} VSout;

Here the Geometry Shader input. Please notice the array.

in SHADER
{
    vec4 t_float;
    vec4 t_int;
    vec4 c;
    flat vec4 fc;
} GSin[];

In src/mesa/main/shader_query.cpp in validate_io function:

The error detected is this one:

      /* Section 7.4.1 (Shader Interface Matching) of the OpenGL ES 3.1 spec
       * says:
       *
       *    - An output variable is considered to match an input variable in
       *      the subsequent shader if:
       *
       *      - the two variables match in name, type, and qualification; or
       *
       *      - the two variables are declared with the same location
       *        qualifier and match in type and qualification.
       */
      if (producer_var == NULL) {
         valid = false;
         goto out;
      }


Here the consumer_var info
(gdb) p *consumer_var
$17 = {
  type = 0x8acc940, 
  interface_type = 0x8b39b50, 
  outermost_struct_type = 0x0, 
  name = 0x8ae8e68 "SHADER[2].c", 
  location = -1, 
  component = 0, 
  index = 0, 
  patch = 0, 
  mode = 4, 
  interpolation = 2, 
  explicit_location = 0, 
  precision = 0
}

And the first output
gdb) p *outputs[0 
$24 = {
  type = 0xf4b9f4f0 <glsl_type::_vec4_type>, 
  interface_type = 0x8b382e8, 
  outermost_struct_type = 0x0, 
  name = 0x8b27b80 "SHADER.c", 
  location = -1, 
  component = 0, 
  index = 0, 
  patch = 0, 
  mode = 5, 
  interpolation = 0, 
  explicit_location = 0, 
  precision = 0
}

As you can the name of the GS interface got an extra "[2]" likely the size of
the array. So the previous strcmp isn't possible
<<<<
  if (!var->explicit_location &&
                strcmp(consumer_var->name, var->name) == 0) {
>>>>

Good luck :)

-- 
You are receiving this mail because:
You are the QA Contact for the bug.
You are the assignee for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20160603/f96ae73c/attachment.html>


More information about the mesa-dev mailing list