diff options
author | Karol Herbst <kherbst@redhat.com> | 2018-10-23 14:06:16 +0200 |
---|---|---|
committer | Karol Herbst <kherbst@redhat.com> | 2019-01-19 20:01:42 +0100 |
commit | acdad245850f5d89f52ff9d4fc8ddd5c0cfc78dd (patch) | |
tree | ca825e91f232fb98fedd188e8fcacae59680c72f /src | |
parent | 36a76b7192707edce540a7db8809df00e8643514 (diff) |
nir/spirv: handle SpvStorageClassCrossWorkgroup
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>
Diffstat (limited to 'src')
-rw-r--r-- | src/compiler/nir/nir.c | 4 | ||||
-rw-r--r-- | src/compiler/nir/nir.h | 1 | ||||
-rw-r--r-- | src/compiler/nir/nir_print.c | 2 | ||||
-rw-r--r-- | src/compiler/spirv/vtn_private.h | 1 | ||||
-rw-r--r-- | src/compiler/spirv/vtn_variables.c | 4 |
5 files changed, 12 insertions, 0 deletions
diff --git a/src/compiler/nir/nir.c b/src/compiler/nir/nir.c index 446e256ecdd..8ca81093515 100644 --- a/src/compiler/nir/nir.c +++ b/src/compiler/nir/nir.c @@ -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; diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h index 6fc4a831b52..3e360432051 100644 --- a/src/compiler/nir/nir.h +++ b/src/compiler/nir/nir.h @@ -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; diff --git a/src/compiler/nir/nir_print.c b/src/compiler/nir/nir_print.c index ab976af1c43..1bec3876143 100644 --- a/src/compiler/nir/nir_print.c +++ b/src/compiler/nir/nir_print.c @@ -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: diff --git a/src/compiler/spirv/vtn_private.h b/src/compiler/spirv/vtn_private.h index 09ae8b7145c..a2b3dee7517 100644 --- a/src/compiler/spirv/vtn_private.h +++ b/src/compiler/spirv/vtn_private.h @@ -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, }; diff --git a/src/compiler/spirv/vtn_variables.c b/src/compiler/spirv/vtn_variables.c index d0c73f7530e..ced02fd6f7e 100644 --- a/src/compiler/spirv/vtn_variables.c +++ b/src/compiler/spirv/vtn_variables.c @@ -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; } |