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

Anuj Phogat anuj.phogat at gmail.com
Tue Jan 5 15:16:40 PST 2016


On Mon, Dec 28, 2015 at 9:00 PM, Timothy Arceri
<timothy.arceri at collabora.com> 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.
> ---
>  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;
>     }
>
> --
> 2.4.3
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reviewed-by: Anuj Phogat <anuj.phogat at gmail.com>


More information about the mesa-dev mailing list