[Mesa-dev] [PATCH 2/2] glsl: add fragdata arrays to program resource list
Pohjolainen, Topi
topi.pohjolainen at intel.com
Tue Oct 27 05:20:08 PDT 2015
On Tue, Oct 27, 2015 at 01:18:42PM +0200, Tapani P?lli wrote:
> This makes sure that user is still able to query properties about
> variables that have gotten removed by opt_dead_builtin_varyings pass.
>
> Fixes following OpenGL ES 3.1 test:
> ES31-CTS.program_interface_query.output-layout
>
> No Piglit regressions.
>
> Signed-off-by: Tapani Pälli <tapani.palli at intel.com>
> ---
> src/glsl/linker.cpp | 29 +++++++++++++++++++++++++++++
> 1 file changed, 29 insertions(+)
>
> diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp
> index cfd8f81..e9660fc 100644
> --- a/src/glsl/linker.cpp
> +++ b/src/glsl/linker.cpp
> @@ -3386,6 +3386,12 @@ add_interface_variables(struct gl_shader_program *shProg,
> if (strncmp(var->name, "packed:", 7) == 0)
> continue;
>
> + /* Skip fragdata arrays, these are handled separately
> + * by add_fragdata_arrays.
> + */
> + if (strncmp(var->name, "gl_out_FragData", 15) == 0)
> + continue;
> +
> if (!add_program_resource(shProg, programInterface, var,
> build_stageref(shProg, var->name,
> var->data.mode) | mask))
> @@ -3425,6 +3431,26 @@ add_packed_varyings(struct gl_shader_program *shProg, int stage)
> return true;
> }
>
> +static bool
> +add_fragdata_arrays(struct gl_shader_program *shProg)
> +{
> + struct gl_shader *sh = shProg->_LinkedShaders[MESA_SHADER_FRAGMENT];
> +
> + if (!sh || !sh->fragdata_arrays)
> + return true;
> +
> + foreach_in_list(ir_instruction, node, sh->fragdata_arrays) {
> + ir_variable *var = node->as_variable();
> + if (var) {
> + assert(var->data.mode == ir_var_shader_out);
> + if (!add_program_resource(shProg, GL_PROGRAM_OUTPUT, var,
> + (1 << MESA_SHADER_FRAGMENT)))
You can drop the extra ().
More information about the mesa-dev
mailing list