diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h index e732efaaa7a..9666d232579 100644 --- a/src/compiler/nir/nir.h +++ b/src/compiler/nir/nir.h @@ -141,6 +141,10 @@ typedef enum { nir_var_read_only_modes = nir_var_shader_in | nir_var_uniform | nir_var_system_value | nir_var_mem_constant | nir_var_mem_ubo, + /** Modes where vector derefs can be indexed as arrays */ + nir_var_vec_indexable_modes = nir_var_mem_ubo | nir_var_mem_ssbo | + nir_var_mem_shared | nir_var_mem_global | + nir_var_mem_push_const, nir_num_variable_modes = 14, nir_var_all = (1 << nir_num_variable_modes) - 1, } nir_variable_mode; diff --git a/src/compiler/nir/nir_validate.c b/src/compiler/nir/nir_validate.c index fe50e291c70..e8bf1b6c2ce 100644 --- a/src/compiler/nir/nir_validate.c +++ b/src/compiler/nir/nir_validate.c @@ -471,9 +471,7 @@ validate_deref_instr(nir_deref_instr *instr, validate_state *state) case nir_deref_type_array: case nir_deref_type_array_wildcard: - if (instr->modes & (nir_var_mem_ubo | nir_var_mem_ssbo | - nir_var_mem_shared | nir_var_mem_global | - nir_var_mem_push_const)) { + if (instr->modes & nir_var_vec_indexable_modes) { /* Shared variables and UBO/SSBOs have a bit more relaxed rules * because we need to be able to handle array derefs on vectors. * Fortunately, nir_lower_io handles these just fine.