This patch is still unreviewed. Sam
On Tue, 2016-01-19 at 07:20 +0100, Samuel Iglesias Gonsálvez wrote: > Commit 781d278 did not restrict consumer_stage only to separate > shader > objects, which is when we don't know if the consumer stage would be a > fragment shader added later. In normal programs, when > consumer_stage == -1, it is because they are not consumed. > > Fixes 4 piglit regressions added by commit 781d278 in radeonsi: > > arb_gpu_shader_fp64-double-gettransformfeedbackvarying > arb_gpu_shader_fp64-tf-interleaved > arb_gpu_shader_fp64-tf-interleaved-aligned > arb_gpu_shader_fp64-tf-separate > > v2: > - Simplify condition expression (Timothy). > > Signed-off-by: Samuel Iglesias Gonsálvez <sigles...@igalia.com> > Tested-by: Michel Dänzer <michel.daen...@amd.com> > --- > src/glsl/link_varyings.cpp | 15 +++++++++------ > 1 file changed, 9 insertions(+), 6 deletions(-) > > diff --git a/src/glsl/link_varyings.cpp b/src/glsl/link_varyings.cpp > index 09f80d0..a27589d 100644 > --- a/src/glsl/link_varyings.cpp > +++ b/src/glsl/link_varyings.cpp > @@ -824,7 +824,8 @@ public: > gl_shader_stage producer_stage, > gl_shader_stage consumer_stage); > ~varying_matches(); > - void record(ir_variable *producer_var, ir_variable > *consumer_var); > + void record(ir_variable *producer_var, ir_variable *consumer_var, > + bool separate_shader); > unsigned assign_locations(struct gl_shader_program *prog, > uint64_t reserved_slots, bool > separate_shader); > void store_locations() const; > @@ -952,7 +953,8 @@ varying_matches::~varying_matches() > * rendering. > */ > void > -varying_matches::record(ir_variable *producer_var, ir_variable > *consumer_var) > +varying_matches::record(ir_variable *producer_var, ir_variable > *consumer_var, > + bool separate_shader) > { > assert(producer_var != NULL || consumer_var != NULL); > > @@ -968,7 +970,8 @@ varying_matches::record(ir_variable > *producer_var, ir_variable *consumer_var) > } > > if ((consumer_var == NULL && producer_var->type- > >contains_integer()) || > - (consumer_stage != -1 && consumer_stage != > MESA_SHADER_FRAGMENT)) { > + (consumer_stage != MESA_SHADER_FRAGMENT && > + (!separate_shader || consumer_stage != -1))) { > /* Since this varying is not being consumed by the fragment > shader, its > * interpolation type varying cannot possibly affect > rendering. > * Also, this variable is non-flat and is (or contains) an > integer. > @@ -1667,7 +1670,7 @@ assign_varying_locations(struct gl_context > *ctx, > */ > if (input_var || (prog->SeparateShader && consumer == NULL) > || > producer->Type == GL_TESS_CONTROL_SHADER) { > - matches.record(output_var, input_var); > + matches.record(output_var, input_var, prog- > >SeparateShader); > } > > /* Only stream 0 outputs can be consumed in the next stage > */ > @@ -1692,7 +1695,7 @@ assign_varying_locations(struct gl_context > *ctx, > (input_var->data.mode != ir_var_shader_in)) > continue; > > - matches.record(NULL, input_var); > + matches.record(NULL, input_var, prog->SeparateShader); > } > } > > @@ -1711,7 +1714,7 @@ assign_varying_locations(struct gl_context > *ctx, > } > > if (matched_candidate->toplevel_var- > >data.is_unmatched_generic_inout) > - matches.record(matched_candidate->toplevel_var, NULL); > + matches.record(matched_candidate->toplevel_var, NULL, prog- > >SeparateShader); > } > > const uint64_t reserved_slots = _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev