radeonsi: treat nir_intrinsic_load_constant as a VMEM operation

This is used by variable indexing of constant arrays, to build
code like this:

   s_add_u32 s6, s6, const_data@rel32@lo+4
   s_addc_u32 s7, s7, const_data@rel32@hi+12
   [...]
   global_load_dword v4, v4, s[6:7

Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/5118
Fixes: 8288882965 ("radeonsi: set MEM_ORDERED optimally")
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13550>
This commit is contained in:
Pierre-Eric Pelloux-Prayer 2021-10-27 14:44:54 +02:00
parent af8fa2644e
commit dc56301f78

View file

@ -245,6 +245,9 @@ static void scan_instruction(const struct nir_shader *nir, struct si_shader_info
if (!nir_src_is_const(intr->src[1]))
info->uses_vmem_return_type_other = true;
break;
case nir_intrinsic_load_constant:
info->uses_vmem_return_type_other = true;
break;
case nir_intrinsic_load_barycentric_at_sample: /* This loads sample positions. */
case nir_intrinsic_load_tess_level_outer: /* TES input read from memory */