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@lists.freedesktop.org
          Reporter: gregory.hain...@gmail.com
        QA Contact: mesa-dev@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.
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to