[Mesa-dev] [PATCH 01/28] glsl: only add outward facing varyings to resourse list for SSO

Ian Romanick idr at freedesktop.org
Thu Jan 7 16:43:43 PST 2016


On 12/28/2015 09:00 PM, Timothy Arceri wrote:
> An SSO program can have multiple stages and we only want to add the externally
> facing varyings. The current code was adding both the packed inputs and outputs
> for the first and last stage of each program.

Using just SSO and ARB_program_interface_query, is this problem
externally visible?  If it is externally visible:

1. Is there a piglit test?

2. Should this fix be tagged for stable?

> ---
>  src/glsl/linker.cpp | 17 ++++++++++-------
>  1 file changed, 10 insertions(+), 7 deletions(-)
> 
> diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp
> index c7e6976..d11c404 100644
> --- a/src/glsl/linker.cpp
> +++ b/src/glsl/linker.cpp
> @@ -3433,7 +3433,7 @@ add_interface_variables(struct gl_shader_program *shProg,
>  }
>  
>  static bool
> -add_packed_varyings(struct gl_shader_program *shProg, int stage)
> +add_packed_varyings(struct gl_shader_program *shProg, int stage, GLenum type)
>  {
>     struct gl_shader *sh = shProg->_LinkedShaders[stage];
>     GLenum iface;
> @@ -3454,10 +3454,13 @@ add_packed_varyings(struct gl_shader_program *shProg, int stage)
>           default:
>              unreachable("unexpected type");
>           }
> -         if (!add_program_resource(shProg, iface, var,
> -                                   build_stageref(shProg, var->name,
> -                                                  var->data.mode)))
> -            return false;
> +
> +         if (type == iface) {
> +            if (!add_program_resource(shProg, iface, var,
> +                                      build_stageref(shProg, var->name,
> +                                                     var->data.mode)))
> +               return false;
> +         }
>        }
>     }
>     return true;
> @@ -3724,9 +3727,9 @@ build_program_resource_list(struct gl_shader_program *shProg)
>  
>     /* Program interface needs to expose varyings in case of SSO. */
>     if (shProg->SeparateShader) {
> -      if (!add_packed_varyings(shProg, input_stage))
> +      if (!add_packed_varyings(shProg, input_stage, GL_PROGRAM_INPUT))
>           return;
> -      if (!add_packed_varyings(shProg, output_stage))
> +      if (!add_packed_varyings(shProg, output_stage, GL_PROGRAM_OUTPUT))
>           return;
>     }
>  
g


More information about the mesa-dev mailing list