nir: Add support for generic pointers

The way they're handled is that deref->modes is treated as a bitfield of
possible modes.  Variables are required to have a specific mode and
derefs with deref_type_var are as well.

Reviewed-by: Jesse Natalie <jenatali@microsoft.com>
Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6332>
This commit is contained in:
Jason Ekstrand
2020-08-15 00:28:55 -05:00
committed by Marge Bot
parent 9d377c01d0
commit d6415b5d2b
3 changed files with 28 additions and 7 deletions

View File

@@ -723,9 +723,14 @@ print_deref_instr(nir_deref_instr *instr, print_state *state)
print_deref_link(instr, false, state);
fprintf(fp, " (%s %s) ",
get_variable_mode_str(instr->modes, true),
glsl_get_type_name(instr->type));
fprintf(fp, " (");
unsigned modes = instr->modes;
while (modes) {
int m = u_bit_scan(&modes);
fprintf(fp, "%s%s", get_variable_mode_str(1 << m, true),
modes ? "|" : "");
}
fprintf(fp, " %s) ", glsl_get_type_name(instr->type));
if (instr->deref_type != nir_deref_type_var &&
instr->deref_type != nir_deref_type_cast) {