[Mesa-dev] [PATCH] glsl/linker: Allow unused in blocks which are not declated on previous stage

Timothy Arceri tarceri at itsqueeze.com
Tue Aug 21 01:02:24 UTC 2018


On 20/08/18 23:31, vadym.shovkoplias wrote:
>  From Section 4.3.4 (Inputs) of the GLSL 1.50 spec:
> 
>      "Only the input variables that are actually read need to be written
>       by the previous stage; it is allowed to have superfluous
>       declarations of input variables."
> 
> Fixes:
>      * interstage-multiple-shader-objects.shader_test
> 
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=101247
> Signed-off-by: Vadym Shovkoplias <vadym.shovkoplias at globallogic.com>
> ---
>   src/compiler/glsl/link_interface_blocks.cpp | 8 +++++++-
>   1 file changed, 7 insertions(+), 1 deletion(-)
> 
> diff --git a/src/compiler/glsl/link_interface_blocks.cpp b/src/compiler/glsl/link_interface_blocks.cpp
> index e5eca9460e..801fbcd5d9 100644
> --- a/src/compiler/glsl/link_interface_blocks.cpp
> +++ b/src/compiler/glsl/link_interface_blocks.cpp
> @@ -417,9 +417,15 @@ validate_interstage_inout_blocks(struct gl_shader_program *prog,
>          * write to any of the pre-defined outputs (e.g. if the vertex shader
>          * does not write to gl_Position, etc), which is allowed and results in
>          * undefined behavior.
> +       *
> +       * From Section 4.3.4 (Inputs) of the GLSL 1.50 spec:
> +       *
> +       *    "Only the input variables that are actually read need to be written
> +       *     by the previous stage; it is allowed to have superfluous
> +       *     declarations of input variables."
>          */
>         if (producer_def == NULL &&
> -          !is_builtin_gl_in_block(var, consumer->Stage)) {
> +          !is_builtin_gl_in_block(var, consumer->Stage) && var->data.used) {

This concerns me a little. As far as I remember 'used' was added to make 
compiler warning better but it's not 100% reliable.

>            linker_error(prog, "Input block `%s' is not an output of "
>                         "the previous stage\n", var->get_interface_type()->name);
>            return;
> 


More information about the mesa-dev mailing list