[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