mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 09:18:04 +02:00
glsl: Create a field to store fractional varying locations.
Currently, the location of each varying is recorded in ir_variable as a multiple of the size of a vec4. In order to pack varyings, we need to be able to record, e.g. that a vec2 is stored in the second half of a varying slot rather than the first half. This patch introduces a field ir_variable::location_frac, which represents the offset within a vec4 where a varying's value is stored. Varyings that are not subject to packing will always have a location_frac value of zero. Reviewed-by: Eric Anholt <eric@anholt.net> Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
This commit is contained in:
parent
3c9c17db4a
commit
3e81c666db
3 changed files with 14 additions and 2 deletions
|
|
@ -1492,6 +1492,7 @@ ir_variable::ir_variable(const struct glsl_type *type, const char *name,
|
|||
this->explicit_location = false;
|
||||
this->has_initializer = false;
|
||||
this->location = -1;
|
||||
this->location_frac = 0;
|
||||
this->uniform_block = -1;
|
||||
this->warn_extension = NULL;
|
||||
this->constant_value = NULL;
|
||||
|
|
|
|||
|
|
@ -445,6 +445,15 @@ public:
|
|||
*/
|
||||
unsigned is_unmatched_generic_inout:1;
|
||||
|
||||
/**
|
||||
* If non-zero, then this variable may be packed along with other variables
|
||||
* into a single varying slot, so this offset should be applied when
|
||||
* accessing components. For example, an offset of 1 means that the x
|
||||
* component of this variable is actually stored in component y of the
|
||||
* location specified by \c location.
|
||||
*/
|
||||
unsigned location_frac:2;
|
||||
|
||||
/**
|
||||
* \brief Layout qualifier for gl_FragDepth.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -226,10 +226,12 @@ link_invalidate_variable_locations(gl_shader *sh, int input_base,
|
|||
if ((var->location >= base) && !var->explicit_location)
|
||||
var->location = -1;
|
||||
|
||||
if ((var->location == -1) && !var->explicit_location)
|
||||
if ((var->location == -1) && !var->explicit_location) {
|
||||
var->is_unmatched_generic_inout = 1;
|
||||
else
|
||||
var->location_frac = 0;
|
||||
} else {
|
||||
var->is_unmatched_generic_inout = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue