nir_address_format global_addr_format;
nir_address_format temp_addr_format;
+ /* Whether UniformConstant memory should be treated as normal global memory.
+ * This is usefull for CL 2.0 implementations with fine grain system SVM
+ * support.
+ */
+ bool constant_as_global;
+
struct {
void (*func)(void *private_data,
enum nir_spirv_debug_level level,
case SpvStorageClassFunction:
case SpvStorageClassWorkgroup:
case SpvStorageClassCrossWorkgroup:
+ case SpvStorageClassUniformConstant:
val->type->stride = align(glsl_get_cl_size(val->type->deref->type),
glsl_get_cl_alignment(val->type->deref->type));
break;
nir_mode = nir_var_mem_global;
break;
case SpvStorageClassUniformConstant:
- mode = vtn_variable_mode_uniform;
- nir_mode = nir_var_uniform;
+ if (b->shader->info.stage == MESA_SHADER_KERNEL) {
+ if (b->options->constant_as_global) {
+ mode = vtn_variable_mode_cross_workgroup;
+ nir_mode = nir_var_mem_global;
+ } else {
+ mode = vtn_variable_mode_ubo;
+ nir_mode = nir_var_mem_ubo;
+ }
+ } else {
+ mode = vtn_variable_mode_uniform;
+ nir_mode = nir_var_uniform;
+ }
break;
case SpvStorageClassPushConstant:
mode = vtn_variable_mode_push_constant;