[Mesa-dev] [PATCH] glsl: always compute proper varying type, irrespective of varying packing

Timothy Arceri t_arceri at yahoo.com.au
Thu Jan 21 04:37:00 PST 2016



On 21 January 2016 11:30:21 pm AEDT, Timothy Arceri <t_arceri at yahoo.com.au> wrote:
>
>
>On 21 January 2016 11:17:06 pm AEDT, Ilia Mirkin <imirkin at 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 <imirkin at alum.mit.edu>
>
>Makes sense.
>
>Reviewed-by: Timothy Arceri <timothy.arceri at 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 at 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 at lists.freedesktop.org
>http://lists.freedesktop.org/mailman/listinfo/mesa-dev

-- 
Sent from my Android device with K-9 Mail. Please excuse my brevity.


More information about the mesa-dev mailing list