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>
This commit is contained in:
@@ -152,6 +152,10 @@ nir_shader_add_variable(nir_shader *shader, nir_variable *var)
|
|||||||
exec_list_push_tail(&shader->shared, &var->node);
|
exec_list_push_tail(&shader->shared, &var->node);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case nir_var_mem_global:
|
||||||
|
assert(!"nir_shader_add_variable cannot be used for global memory");
|
||||||
|
break;
|
||||||
|
|
||||||
case nir_var_system_value:
|
case nir_var_system_value:
|
||||||
exec_list_push_tail(&shader->system_values, &var->node);
|
exec_list_push_tail(&shader->system_values, &var->node);
|
||||||
break;
|
break;
|
||||||
|
@@ -104,6 +104,7 @@ typedef enum {
|
|||||||
nir_var_system_value = (1 << 6),
|
nir_var_system_value = (1 << 6),
|
||||||
nir_var_mem_ssbo = (1 << 7),
|
nir_var_mem_ssbo = (1 << 7),
|
||||||
nir_var_mem_shared = (1 << 8),
|
nir_var_mem_shared = (1 << 8),
|
||||||
|
nir_var_mem_global = (1 << 9),
|
||||||
nir_var_all = ~0,
|
nir_var_all = ~0,
|
||||||
} nir_variable_mode;
|
} nir_variable_mode;
|
||||||
|
|
||||||
|
@@ -421,6 +421,8 @@ get_variable_mode_str(nir_variable_mode mode, bool want_local_global_mode)
|
|||||||
return "ssbo";
|
return "ssbo";
|
||||||
case nir_var_mem_shared:
|
case nir_var_mem_shared:
|
||||||
return "shared";
|
return "shared";
|
||||||
|
case nir_var_mem_global:
|
||||||
|
return "global";
|
||||||
case nir_var_shader_temp:
|
case nir_var_shader_temp:
|
||||||
return want_local_global_mode ? "shader_temp" : "";
|
return want_local_global_mode ? "shader_temp" : "";
|
||||||
case nir_var_function_temp:
|
case nir_var_function_temp:
|
||||||
|
@@ -419,6 +419,7 @@ enum vtn_variable_mode {
|
|||||||
vtn_variable_mode_ssbo,
|
vtn_variable_mode_ssbo,
|
||||||
vtn_variable_mode_push_constant,
|
vtn_variable_mode_push_constant,
|
||||||
vtn_variable_mode_workgroup,
|
vtn_variable_mode_workgroup,
|
||||||
|
vtn_variable_mode_cross_workgroup,
|
||||||
vtn_variable_mode_input,
|
vtn_variable_mode_input,
|
||||||
vtn_variable_mode_output,
|
vtn_variable_mode_output,
|
||||||
};
|
};
|
||||||
|
@@ -1709,6 +1709,9 @@ vtn_storage_class_to_mode(struct vtn_builder *b,
|
|||||||
nir_mode = nir_var_uniform;
|
nir_mode = nir_var_uniform;
|
||||||
break;
|
break;
|
||||||
case SpvStorageClassCrossWorkgroup:
|
case SpvStorageClassCrossWorkgroup:
|
||||||
|
mode = vtn_variable_mode_cross_workgroup;
|
||||||
|
nir_mode = nir_var_mem_global;
|
||||||
|
break;
|
||||||
case SpvStorageClassGeneric:
|
case SpvStorageClassGeneric:
|
||||||
default:
|
default:
|
||||||
vtn_fail("Unhandled variable storage class");
|
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_ubo:
|
||||||
case vtn_variable_mode_ssbo:
|
case vtn_variable_mode_ssbo:
|
||||||
case vtn_variable_mode_push_constant:
|
case vtn_variable_mode_push_constant:
|
||||||
|
case vtn_variable_mode_cross_workgroup:
|
||||||
/* These don't need actual variables. */
|
/* These don't need actual variables. */
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user