nir/lower_io: Add a mode parameter to addr_format_is_*

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>
diff --git a/src/compiler/nir/nir_lower_io.c b/src/compiler/nir/nir_lower_io.c
index a16a70c..c7e0eb0 100644
--- a/src/compiler/nir/nir_lower_io.c
+++ b/src/compiler/nir/nir_lower_io.c
@@ -935,7 +935,8 @@
 
 /** Returns true if the given address format resolves to a global address */
 static bool
-addr_format_is_global(nir_address_format addr_format)
+addr_format_is_global(nir_address_format addr_format,
+                      nir_variable_mode mode)
 {
    return addr_format == nir_address_format_32bit_global ||
           addr_format == nir_address_format_64bit_global ||
@@ -943,7 +944,8 @@
 }
 
 static bool
-addr_format_is_offset(nir_address_format addr_format)
+addr_format_is_offset(nir_address_format addr_format,
+                      nir_variable_mode mode)
 {
    return addr_format == nir_address_format_32bit_offset ||
           addr_format == nir_address_format_32bit_offset_as_64bit;
@@ -1109,30 +1111,30 @@
       op = nir_intrinsic_load_ubo;
       break;
    case nir_var_mem_ssbo:
-      if (addr_format_is_global(addr_format))
+      if (addr_format_is_global(addr_format, mode))
          op = nir_intrinsic_load_global;
       else
          op = nir_intrinsic_load_ssbo;
       break;
    case nir_var_mem_global:
-      assert(addr_format_is_global(addr_format));
+      assert(addr_format_is_global(addr_format, mode));
       op = nir_intrinsic_load_global;
       break;
    case nir_var_uniform:
-      assert(addr_format_is_offset(addr_format));
+      assert(addr_format_is_offset(addr_format, mode));
       assert(b->shader->info.stage == MESA_SHADER_KERNEL);
       op = nir_intrinsic_load_kernel_input;
       break;
    case nir_var_mem_shared:
-      assert(addr_format_is_offset(addr_format));
+      assert(addr_format_is_offset(addr_format, mode));
       op = nir_intrinsic_load_shared;
       break;
    case nir_var_shader_temp:
    case nir_var_function_temp:
-      if (addr_format_is_offset(addr_format)) {
+      if (addr_format_is_offset(addr_format, mode)) {
          op = nir_intrinsic_load_scratch;
       } else {
-         assert(addr_format_is_global(addr_format));
+         assert(addr_format_is_global(addr_format, mode));
          op = nir_intrinsic_load_global;
       }
       break;
@@ -1141,10 +1143,10 @@
       op = nir_intrinsic_load_push_constant;
       break;
    case nir_var_mem_constant:
-      if (addr_format_is_offset(addr_format)) {
+      if (addr_format_is_offset(addr_format, mode)) {
          op = nir_intrinsic_load_constant;
       } else {
-         assert(addr_format_is_global(addr_format));
+         assert(addr_format_is_global(addr_format, mode));
          op = nir_intrinsic_load_global_constant;
       }
       break;
@@ -1154,9 +1156,9 @@
 
    nir_intrinsic_instr *load = nir_intrinsic_instr_create(b->shader, op);
 
-   if (addr_format_is_global(addr_format)) {
+   if (addr_format_is_global(addr_format, mode)) {
       load->src[0] = nir_src_for_ssa(addr_to_global(b, addr, addr_format));
-   } else if (addr_format_is_offset(addr_format)) {
+   } else if (addr_format_is_offset(addr_format, mode)) {
       assert(addr->num_components == 1);
       load->src[0] = nir_src_for_ssa(addr_to_offset(b, addr, addr_format));
    } else {
@@ -1250,25 +1252,25 @@
    nir_intrinsic_op op;
    switch (mode) {
    case nir_var_mem_ssbo:
-      if (addr_format_is_global(addr_format))
+      if (addr_format_is_global(addr_format, mode))
          op = nir_intrinsic_store_global;
       else
          op = nir_intrinsic_store_ssbo;
       break;
    case nir_var_mem_global:
-      assert(addr_format_is_global(addr_format));
+      assert(addr_format_is_global(addr_format, mode));
       op = nir_intrinsic_store_global;
       break;
    case nir_var_mem_shared:
-      assert(addr_format_is_offset(addr_format));
+      assert(addr_format_is_offset(addr_format, mode));
       op = nir_intrinsic_store_shared;
       break;
    case nir_var_shader_temp:
    case nir_var_function_temp:
-      if (addr_format_is_offset(addr_format)) {
+      if (addr_format_is_offset(addr_format, mode)) {
          op = nir_intrinsic_store_scratch;
       } else {
-         assert(addr_format_is_global(addr_format));
+         assert(addr_format_is_global(addr_format, mode));
          op = nir_intrinsic_store_global;
       }
       break;
@@ -1294,9 +1296,9 @@
    }
 
    store->src[0] = nir_src_for_ssa(value);
-   if (addr_format_is_global(addr_format)) {
+   if (addr_format_is_global(addr_format, mode)) {
       store->src[1] = nir_src_for_ssa(addr_to_global(b, addr, addr_format));
-   } else if (addr_format_is_offset(addr_format)) {
+   } else if (addr_format_is_offset(addr_format, mode)) {
       assert(addr->num_components == 1);
       store->src[1] = nir_src_for_ssa(addr_to_offset(b, addr, addr_format));
    } else {
@@ -1340,17 +1342,17 @@
    nir_intrinsic_op op;
    switch (mode) {
    case nir_var_mem_ssbo:
-      if (addr_format_is_global(addr_format))
+      if (addr_format_is_global(addr_format, mode))
          op = global_atomic_for_deref(intrin->intrinsic);
       else
          op = ssbo_atomic_for_deref(intrin->intrinsic);
       break;
    case nir_var_mem_global:
-      assert(addr_format_is_global(addr_format));
+      assert(addr_format_is_global(addr_format, mode));
       op = global_atomic_for_deref(intrin->intrinsic);
       break;
    case nir_var_mem_shared:
-      assert(addr_format_is_offset(addr_format));
+      assert(addr_format_is_offset(addr_format, mode));
       op = shared_atomic_for_deref(intrin->intrinsic);
       break;
    default:
@@ -1360,9 +1362,9 @@
    nir_intrinsic_instr *atomic = nir_intrinsic_instr_create(b->shader, op);
 
    unsigned src = 0;
-   if (addr_format_is_global(addr_format)) {
+   if (addr_format_is_global(addr_format, mode)) {
       atomic->src[src++] = nir_src_for_ssa(addr_to_global(b, addr, addr_format));
-   } else if (addr_format_is_offset(addr_format)) {
+   } else if (addr_format_is_offset(addr_format, mode)) {
       assert(addr->num_components == 1);
       atomic->src[src++] = nir_src_for_ssa(addr_to_offset(b, addr, addr_format));
    } else {