On 21 January 2016 11:30:21 pm AEDT, Timothy Arceri <t_arc...@yahoo.com.au> wrote: > > >On 21 January 2016 11:17:06 pm AEDT, Ilia Mirkin <imir...@alum.mit.edu> >wrote: >>Normally there's a producer and consumer, and the producer var gets >>picked. In both the vertex->gs and tes->gs cases, that's the >un-arrayed >>version. >> >>In the SSO case, however, there is no producer. So we picked the >>arrayed >>GS variable, and as a result, used more slots than we should. More >>critically, these slots would also no longer line up with the >>producer's >>calculation. To fix this, we need to fix up the type of the variable >>based on stage no matter what. >> >>Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=93650 >>Signed-off-by: Ilia Mirkin <imir...@alum.mit.edu> > >Makes sense. > >Reviewed-by: Timothy Arceri <timothy.arc...@collabora.com> > >
Are you planning on sending a piglit test for this too? >>--- >> src/glsl/link_varyings.cpp | 13 +++++-------- >> 1 file changed, 5 insertions(+), 8 deletions(-) >> >>diff --git a/src/glsl/link_varyings.cpp b/src/glsl/link_varyings.cpp >>index 09f80d0..264b69c 100644 >>--- a/src/glsl/link_varyings.cpp >>+++ b/src/glsl/link_varyings.cpp >>@@ -1001,23 +1001,20 @@ varying_matches::record(ir_variable >>*producer_var, ir_variable *consumer_var) >> >> const ir_variable *const var = (producer_var != NULL) >> ? producer_var : consumer_var; >>+ const gl_shader_stage stage = (producer_var != NULL) >>+ ? producer_stage : consumer_stage; >>+ const glsl_type *type = get_varying_type(var, stage); >> >> this->matches[this->num_matches].packing_class >> = this->compute_packing_class(var); >> this->matches[this->num_matches].packing_order >> = this->compute_packing_order(var); >> if (this->disable_varying_packing) { >>- unsigned slots; >>- gl_shader_stage stage = >>- (producer_var != NULL) ? producer_stage : consumer_stage; >>- >>- const glsl_type *type = get_varying_type(var, stage); >>- >>- slots = type->count_attribute_slots(false); >>+ unsigned slots = type->count_attribute_slots(false); >> this->matches[this->num_matches].num_components = slots * 4; >> } else { >> this->matches[this->num_matches].num_components >>- = var->type->component_slots(); >>+ = type->component_slots(); >> } >> this->matches[this->num_matches].producer_var = producer_var; >> this->matches[this->num_matches].consumer_var = consumer_var; >>-- >>2.4.10 >> >>_______________________________________________ >>mesa-dev mailing list >>mesa-dev@lists.freedesktop.org >>http://lists.freedesktop.org/mailman/listinfo/mesa-dev > >-- >Sent from my Android device with K-9 Mail. Please excuse my brevity. >_______________________________________________ >mesa-dev mailing list >mesa-dev@lists.freedesktop.org >http://lists.freedesktop.org/mailman/listinfo/mesa-dev -- Sent from my Android device with K-9 Mail. Please excuse my brevity. _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev