[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