nir/spirv: handle SpvStorageClassCrossWorkgroup
authorKarol Herbst <kherbst@redhat.com>
Tue, 23 Oct 2018 12:06:16 +0000 (14:06 +0200)
committerKarol Herbst <kherbst@redhat.com>
Sat, 19 Jan 2019 19:01:42 +0000 (20:01 +0100)
v2: rename nir_var_global to nir_var_mem_global

Signed-off-by: Karol Herbst <kherbst@redhat.com>
Acked-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Eric Anholt <eric@anholt.net>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
src/compiler/nir/nir.c
src/compiler/nir/nir.h
src/compiler/nir/nir_print.c
src/compiler/spirv/vtn_private.h
src/compiler/spirv/vtn_variables.c

index 446e256ecddca27c7db256bbe58bae286e7510af..8ca810935158641ff1aca991f0bdacff34b1b29b 100644 (file)
@@ -152,6 +152,10 @@ nir_shader_add_variable(nir_shader *shader, nir_variable *var)
       exec_list_push_tail(&shader->shared, &var->node);
       break;
 
+   case nir_var_mem_global:
+      assert(!"nir_shader_add_variable cannot be used for global memory");
+      break;
+
    case nir_var_system_value:
       exec_list_push_tail(&shader->system_values, &var->node);
       break;
index 6fc4a831b5204178350adc9e1e03bc70d3919679..3e36043205142cca214353f28ce5f615e89cd57d 100644 (file)
@@ -104,6 +104,7 @@ typedef enum {
    nir_var_system_value    = (1 << 6),
    nir_var_mem_ssbo        = (1 << 7),
    nir_var_mem_shared      = (1 << 8),
+   nir_var_mem_global      = (1 << 9),
    nir_var_all             = ~0,
 } nir_variable_mode;
 
index ab976af1c4337762caa10569d8cd3e3eeb731f6b..1bec38761433a6080675930ca164e1c4240a77ba 100644 (file)
@@ -421,6 +421,8 @@ get_variable_mode_str(nir_variable_mode mode, bool want_local_global_mode)
       return "ssbo";
    case nir_var_mem_shared:
       return "shared";
+   case nir_var_mem_global:
+      return "global";
    case nir_var_shader_temp:
       return want_local_global_mode ? "shader_temp" : "";
    case nir_var_function_temp:
index 09ae8b7145c21e9c46d924c02cfadb9396b76d2c..a2b3dee7517cc52f31b86430fbcbd23371691e9c 100644 (file)
@@ -419,6 +419,7 @@ enum vtn_variable_mode {
    vtn_variable_mode_ssbo,
    vtn_variable_mode_push_constant,
    vtn_variable_mode_workgroup,
+   vtn_variable_mode_cross_workgroup,
    vtn_variable_mode_input,
    vtn_variable_mode_output,
 };
index d0c73f7530e047f7be2c7f69316a125cd83bfbe0..ced02fd6f7ea918bd20a92b347e0d0377fa3dd89 100644 (file)
@@ -1709,6 +1709,9 @@ vtn_storage_class_to_mode(struct vtn_builder *b,
       nir_mode = nir_var_uniform;
       break;
    case SpvStorageClassCrossWorkgroup:
+      mode = vtn_variable_mode_cross_workgroup;
+      nir_mode = nir_var_mem_global;
+      break;
    case SpvStorageClassGeneric:
    default:
       vtn_fail("Unhandled variable storage class");
@@ -2059,6 +2062,7 @@ vtn_create_variable(struct vtn_builder *b, struct vtn_value *val,
    case vtn_variable_mode_ubo:
    case vtn_variable_mode_ssbo:
    case vtn_variable_mode_push_constant:
+   case vtn_variable_mode_cross_workgroup:
       /* These don't need actual variables. */
       break;
    }