[Mesa-dev] [PATCH v2 4/6] glsl/linker: don't fail non static used inputs without matching outputs
Andres Gomez
agomez at igalia.com
Tue Mar 19 14:32:18 UTC 2019
On Sat, 2019-02-16 at 10:25 +1100, Timothy Arceri wrote:
> If the updated piglit tests pass on the Nvidia blob as per my reply to
> those patches and this patch passes on the new and old piglit tests.
> Then this patch is:
As commented in the piglit thread, the nVIDIA blob has many other
problems with those tests but those changes (in the piglit test) are
only improving the situation.
With i965, the new and old piglit tests still show the same behavior:
they all pass but for the problem discussed here:
https://lists.freedesktop.org/archives/piglit/2019-February/025686.html
Hence, I'll understand I can land this with your Rb.
>
> Reviewed-by: Timothy Arceri <tarceri at itsqueeze.com>
>
> Thanks for fixing this!
>
> On 7/2/19 2:58 am, Andres Gomez wrote:
> > If there is no Static Use of an input variable, the linker shouldn't
> > fail whenever there is no defined matching output variable in the
> > previous stage.
> >
> > From page 47 (page 51 of the PDF) of the GLSL 4.60 v.5 spec:
> >
> > " Only the input variables that are statically read need to be
> > written by the previous stage; it is allowed to have superfluous
> > declarations of input variables."
> >
> > Now, we complete this exception whenever the input variable has an
> > explicit location. Previously, 18004c338f6 ("glsl: fail when a
> > shader's input var has not an equivalent out var in previous") took
> > care of the cases in which the input variable didn't have an explicit
> > location.
> >
> > v2: do the location based interface matching check regardless on
> > whehter it is a separable program or not (Ilia).
> >
> > Cc: Timothy Arceri <tarceri at itsqueeze.com>
> > Cc: Iago Toral Quiroga <itoral at igalia.com>
> > Cc: Samuel Iglesias Gonsálvez <siglesias at igalia.com>
> > Cc: Tapani Pälli <tapani.palli at intel.com>
> > Cc: Ian Romanick <ian.d.romanick at intel.com>
> > Cc: Ilia Mirkin <imirkin at alum.mit.edu>
> > Signed-off-by: Andres Gomez <agomez at igalia.com>
> > ---
> > src/compiler/glsl/link_varyings.cpp | 16 ++++++++++++++--
> > 1 file changed, 14 insertions(+), 2 deletions(-)
> >
> > diff --git a/src/compiler/glsl/link_varyings.cpp b/src/compiler/glsl/link_varyings.cpp
> > index e5f7d3e322a..36908d95263 100644
> > --- a/src/compiler/glsl/link_varyings.cpp
> > +++ b/src/compiler/glsl/link_varyings.cpp
> > @@ -808,8 +808,20 @@ cross_validate_outputs_to_inputs(struct gl_context *ctx,
> >
> > output = output_explicit_locations[idx][input->data.location_frac].var;
> >
> > - if (output == NULL ||
> > - input->data.location != output->data.location) {
> > + if (output == NULL) {
> > + /* A linker failure should only happen when there is no
> > + * output declaration and there is Static Use of the
> > + * declared input.
> > + */
> > + if (input->data.used) {
> > + linker_error(prog,
> > + "%s shader input `%s' with explicit location "
> > + "has no matching output\n",
> > + _mesa_shader_stage_to_string(consumer->Stage),
> > + input->name);
> > + break;
> > + }
> > + } else if (input->data.location != output->data.location) {
> > linker_error(prog,
> > "%s shader input `%s' with explicit location "
> > "has no matching output\n",
> >
--
Br,
Andres
More information about the mesa-dev
mailing list