mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-20 04:30:22 +01:00
glsl: always compute proper varying type, irrespective of varying packing
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@alum.mit.edu>
Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
Cc: "11.0 11.1" <mesa-stable@lists.freedesktop.org>
(cherry picked from commit dac2964f3e)
This commit is contained in:
parent
65dfe8ba5f
commit
e101a005b1
1 changed files with 5 additions and 8 deletions
|
|
@ -960,23 +960,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;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue