<div dir="ltr">Hi Timothy, Alejandro,<div><br></div><div>Thanks for the review comments! </div><div>I'd just like to mention that the same approach is already used in link_varyings.cpp file in function cross_validate_outputs_to_inputs(). Here is a code snippet: </div><div><div><br></div></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div><div>if (<b>input->data.used </b>&& !input->get_interface_type() &&</div></div><div><div>                !input->data.explicit_location && !prog->SeparateShader)</div></div><div><div>               linker_error(prog,</div></div><div><div>                            "%s shader input `%s' "</div></div><div><div>                            "has no matching output in the previous stage\n",</div></div><div><div>                            _mesa_shader_stage_to_string(consumer->Stage),</div></div><div><div>                            input->name);</div></div></blockquote><br>This code is used for the same purpose to validate input and output variables which is also done during linking stage. <div>So basically I just used the same check but for interface blocks.</div><div><br></div><div>This was implemented some time ago in the following patch:</div><div><br></div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div><div>commit 18004c338f6be8af2e36d2f54972c60136229aeb</div></div><div><div>Author: Samuel Iglesias Gonsalvez <<a href="mailto:siglesias@igalia.com">siglesias@igalia.com</a>></div></div><div><div>Date:   Fri Nov 28 11:23:20 2014 +0100</div></div><div><div><br></div></div><div><div>    glsl: fail when a shader's input var has not an equivalent out var in previous</div></div></blockquote><div><div><br></div></div><div><br></div><div>Suggest please does this mean that it is safe to use "used" field while linking ?</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Aug 21, 2018 at 12:00 PM, Alejandro Piñeiro <span dir="ltr"><<a href="mailto:apinheiro@igalia.com" target="_blank">apinheiro@igalia.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">On 21/08/18 03:02, Timothy Arceri wrote:<br>
> On 20/08/18 23:31, vadym.shovkoplias wrote:<br>
>>  From Section 4.3.4 (Inputs) of the GLSL 1.50 spec:<br>
>><br>
>>      "Only the input variables that are actually read need to be written<br>
>>       by the previous stage; it is allowed to have superfluous<br>
>>       declarations of input variables."<br>
>><br>
>> Fixes:<br>
>>      * interstage-multiple-shader-<wbr>objects.shader_test<br>
>><br>
>> Bugzilla: <a href="https://bugs.freedesktop.org/show_bug.cgi?id=101247" rel="noreferrer" target="_blank">https://bugs.freedesktop.org/<wbr>show_bug.cgi?id=101247</a><br>
>> Signed-off-by: Vadym Shovkoplias <<a href="mailto:vadym.shovkoplias@globallogic.com">vadym.shovkoplias@<wbr>globallogic.com</a>><br>
>> ---<br>
>>   src/compiler/glsl/link_<wbr>interface_blocks.cpp | 8 +++++++-<br>
>>   1 file changed, 7 insertions(+), 1 deletion(-)<br>
>><br>
>> diff --git a/src/compiler/glsl/link_<wbr>interface_blocks.cpp<br>
>> b/src/compiler/glsl/link_<wbr>interface_blocks.cpp<br>
>> index e5eca9460e..801fbcd5d9 100644<br>
>> --- a/src/compiler/glsl/link_<wbr>interface_blocks.cpp<br>
>> +++ b/src/compiler/glsl/link_<wbr>interface_blocks.cpp<br>
>> @@ -417,9 +417,15 @@ validate_interstage_inout_<wbr>blocks(struct<br>
>> gl_shader_program *prog,<br>
>>          * write to any of the pre-defined outputs (e.g. if the<br>
>> vertex shader<br>
>>          * does not write to gl_Position, etc), which is allowed and<br>
>> results in<br>
>>          * undefined behavior.<br>
>> +       *<br>
>> +       * From Section 4.3.4 (Inputs) of the GLSL 1.50 spec:<br>
>> +       *<br>
>> +       *    "Only the input variables that are actually read need to<br>
>> be written<br>
>> +       *     by the previous stage; it is allowed to have superfluous<br>
>> +       *     declarations of input variables."<br>
>>          */<br>
>>         if (producer_def == NULL &&<br>
>> -          !is_builtin_gl_in_block(var, consumer->Stage)) {<br>
>> +          !is_builtin_gl_in_block(var, consumer->Stage) &&<br>
>> var->data.used) {<br>
><br>
> This concerns me a little. As far as I remember 'used' was added to<br>
> make compiler warning better but it's not 100% reliable.<br>
<br>
</div></div>+1 on the concerns thing. In addition to be used mostly for warnings, we<br>
need to take into account his description comment at ir.h:<br>
<br>
     "<br>
       * This is only maintained in the ast_to_hir.cpp path, not in<br>
       * Mesa's fixed function or ARB program paths.<br>
     "<br>
<br>
So if we start to use this while linking, then we need to ensure that it<br>
is maintained outside the ast_to_hir pass (or at least, ensure that it<br>
is correct after that pass). And if we got that, then that comment<br>
became obsolete, and should be removed as part of the patch.<br>
<span class="im HOEnZb"><br>
><br>
>>            linker_error(prog, "Input block `%s' is not an output of "<br>
>>                         "the previous stage\n",<br>
>> var->get_interface_type()-><wbr>name);<br>
>>            return;<br>
>><br>
</span><div class="HOEnZb"><div class="h5">> ______________________________<wbr>_________________<br>
> mesa-dev mailing list<br>
> <a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
> <a href="https://lists.freedesktop.org/mailman/listinfo/mesa-dev" rel="noreferrer" target="_blank">https://lists.freedesktop.org/<wbr>mailman/listinfo/mesa-dev</a><br>
<br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><font size="-1"><br><span style="vertical-align:baseline;font-variant:normal;font-style:normal;font-size:12px;background-color:transparent;text-decoration:none;font-family:Arial;font-weight:bold">Vadym Shovkoplias | Senior Software Engineer</span><br><span style="vertical-align:baseline;font-variant:normal;font-style:normal;font-size:12px;background-color:transparent;text-decoration:none;font-family:Arial;font-weight:normal">GlobalLogic</span><br><span style="vertical-align:baseline;font-variant:normal;font-style:normal;font-size:12px;background-color:transparent;text-decoration:none;font-family:Arial;font-weight:normal"></span></font><font size="-1"><span style="vertical-align:baseline;font-variant:normal;font-style:normal;font-size:12px;background-color:transparent;text-decoration:none;font-family:Arial;font-weight:normal"><span><font color="#888888"><span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px">P </span><a style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px">+380.57.766.7667</a></font></span>  M +3.8050.931.7304  S vadym.shovkoplias</span><br><a href="http://www.globallogic.com/" target="_blank"><span style="font-size:12px;font-family:Arial;color:#1155cc;background-color:transparent;font-weight:normal;font-style:normal;font-variant:normal;text-decoration:underline;vertical-align:baseline">www.globallogic.com</span></a><span style="vertical-align:baseline;font-variant:normal;font-style:normal;font-size:12px;background-color:transparent;text-decoration:none;font-family:Arial;font-weight:normal"></span><br><a href="http://www.globallogic.com/" target="_blank"><span style="font-size:12px;font-family:Arial;color:#1155cc;background-color:transparent;font-weight:normal;font-style:normal;font-variant:normal;text-decoration:underline;vertical-align:baseline"></span></a><br><a href="http://www.globallogic.com/email_disclaimer.txt" target="_blank"><span style="font-size:11px;font-family:Arial;color:#1155cc;background-color:transparent;font-weight:normal;font-style:normal;font-variant:normal;text-decoration:underline;vertical-align:baseline">http://www.globallogic.com/email_disclaimer.txt</span></a><span style="vertical-align:baseline;font-variant:normal;font-style:normal;font-size:11px;background-color:transparent;text-decoration:none;font-family:Arial;font-weight:normal"></span></font></div></div></div></div></div></div></div>
</div>