uint8_t comps;
uint8_t interp_type;
uint8_t interp_loc;
+ bool is_32bit;
};
/* Packing arrays and dual slot varyings is difficult so to avoid complex
comps[location + i].interp_type =
get_interp_type(var, type, default_to_smooth_interp);
comps[location + i].interp_loc = get_interp_loc(var);
+ comps[location + i].is_32bit = glsl_type_is_32bit(type);
}
}
}
nir_variable *var;
uint8_t interp_type;
uint8_t interp_loc;
+ bool is_32bit;
bool is_patch;
bool initialised;
};
vc_info->interp_type =
get_interp_type(in_var, type, default_to_smooth_interp);
vc_info->interp_loc = get_interp_loc(in_var);
+ vc_info->is_32bit = glsl_type_is_32bit(type);
vc_info->is_patch = in_var->data.patch;
}
}
continue;
}
+ /* We can only pack varyings with matching types, and the current
+ * algorithm only supports packing 32-bit.
+ */
+ if (!assigned_comps[tmp_cursor].is_32bit) {
+ tmp_comp = 0;
+ continue;
+ }
+
while (tmp_comp < 4 &&
(assigned_comps[tmp_cursor].comps & (1 << tmp_comp))) {
tmp_comp++;
assigned_comps[tmp_cursor].comps |= (1 << tmp_comp);
assigned_comps[tmp_cursor].interp_type = info->interp_type;
assigned_comps[tmp_cursor].interp_loc = info->interp_loc;
+ assigned_comps[tmp_cursor].is_32bit = info->is_32bit;
/* Assign remap location */
remap[location][info->var->data.location_frac].component = tmp_comp++;