nir_lower_mem_access_bit_sizes: Move options into a struct

Reviewed-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/23173>
This commit is contained in:
Jesse Natalie
2023-06-12 14:26:24 -07:00
committed by Marge Bot
parent 4217353e2d
commit 082eba6165
5 changed files with 37 additions and 43 deletions

View File

@@ -2379,12 +2379,13 @@ agx_compile_shader_nir(nir_shader *nir, struct agx_shader_key *key,
out->tag_write_disable = true; out->tag_write_disable = true;
/* Late sysval lowering creates large loads. Load lowering creates unpacks */ /* Late sysval lowering creates large loads. Load lowering creates unpacks */
NIR_PASS_V(nir, nir_lower_mem_access_bit_sizes, nir_lower_mem_access_bit_sizes_options lower_mem_access_options = {
nir_var_mem_ssbo | nir_var_mem_constant | .modes = nir_var_mem_ssbo | nir_var_mem_constant |
nir_var_mem_task_payload | nir_var_shader_temp | nir_var_mem_task_payload | nir_var_shader_temp |
nir_var_function_temp | nir_var_mem_global | nir_var_function_temp | nir_var_mem_global | nir_var_mem_shared,
nir_var_mem_shared, .callback = mem_access_size_align_cb,
mem_access_size_align_cb, NULL); };
NIR_PASS_V(nir, nir_lower_mem_access_bit_sizes, &lower_mem_access_options);
NIR_PASS_V(nir, nir_lower_pack); NIR_PASS_V(nir, nir_lower_pack);
/* Late blend lowering creates vectors */ /* Late blend lowering creates vectors */

View File

@@ -5112,10 +5112,14 @@ typedef nir_mem_access_size_align
bool offset_is_const, bool offset_is_const,
const void *cb_data); const void *cb_data);
typedef struct {
nir_lower_mem_access_bit_sizes_cb callback;
nir_variable_mode modes;
void *cb_data;
} nir_lower_mem_access_bit_sizes_options;
bool nir_lower_mem_access_bit_sizes(nir_shader *shader, bool nir_lower_mem_access_bit_sizes(nir_shader *shader,
nir_variable_mode modes, const nir_lower_mem_access_bit_sizes_options *options);
nir_lower_mem_access_bit_sizes_cb cb,
const void *cb_data);
typedef bool (*nir_should_vectorize_mem_func)(unsigned align_mul, typedef bool (*nir_should_vectorize_mem_func)(unsigned align_mul,
unsigned align_offset, unsigned align_offset,

View File

@@ -317,12 +317,6 @@ lower_mem_store(nir_builder *b, nir_intrinsic_instr *intrin,
return true; return true;
} }
struct lower_mem_access_state {
nir_variable_mode modes;
nir_lower_mem_access_bit_sizes_cb cb;
const void *cb_data;
};
static nir_variable_mode static nir_variable_mode
intrin_to_variable_mode(nir_intrinsic_op intrin) intrin_to_variable_mode(nir_intrinsic_op intrin)
{ {
@@ -361,7 +355,7 @@ intrin_to_variable_mode(nir_intrinsic_op intrin)
static bool static bool
lower_mem_access_instr(nir_builder *b, nir_instr *instr, void *_data) lower_mem_access_instr(nir_builder *b, nir_instr *instr, void *_data)
{ {
struct lower_mem_access_state *state = _data; const nir_lower_mem_access_bit_sizes_options *state = _data;
if (instr->type != nir_instr_type_intrinsic) if (instr->type != nir_instr_type_intrinsic)
return false; return false;
@@ -380,14 +374,14 @@ lower_mem_access_instr(nir_builder *b, nir_instr *instr, void *_data)
case nir_intrinsic_load_shared: case nir_intrinsic_load_shared:
case nir_intrinsic_load_scratch: case nir_intrinsic_load_scratch:
case nir_intrinsic_load_task_payload: case nir_intrinsic_load_task_payload:
return lower_mem_load(b, intrin, state->cb, state->cb_data); return lower_mem_load(b, intrin, state->callback, state->cb_data);
case nir_intrinsic_store_global: case nir_intrinsic_store_global:
case nir_intrinsic_store_ssbo: case nir_intrinsic_store_ssbo:
case nir_intrinsic_store_shared: case nir_intrinsic_store_shared:
case nir_intrinsic_store_scratch: case nir_intrinsic_store_scratch:
case nir_intrinsic_store_task_payload: case nir_intrinsic_store_task_payload:
return lower_mem_store(b, intrin, state->cb, state->cb_data); return lower_mem_store(b, intrin, state->callback, state->cb_data);
default: default:
return false; return false;
@@ -396,18 +390,10 @@ lower_mem_access_instr(nir_builder *b, nir_instr *instr, void *_data)
bool bool
nir_lower_mem_access_bit_sizes(nir_shader *shader, nir_lower_mem_access_bit_sizes(nir_shader *shader,
nir_variable_mode modes, const nir_lower_mem_access_bit_sizes_options *options)
nir_lower_mem_access_bit_sizes_cb cb,
const void *cb_data)
{ {
struct lower_mem_access_state state = {
.modes = modes,
.cb = cb,
.cb_data = cb_data
};
return nir_shader_instructions_pass(shader, lower_mem_access_instr, return nir_shader_instructions_pass(shader, lower_mem_access_instr,
nir_metadata_block_index | nir_metadata_block_index |
nir_metadata_dominance, nir_metadata_dominance,
(void *)&state); (void *)options);
} }

View File

@@ -1495,15 +1495,17 @@ brw_vectorize_lower_mem_access(nir_shader *nir,
} }
} }
OPT(nir_lower_mem_access_bit_sizes, nir_lower_mem_access_bit_sizes_options mem_access_options = {
nir_var_mem_ssbo | .modes = nir_var_mem_ssbo |
nir_var_mem_constant | nir_var_mem_constant |
nir_var_mem_task_payload | nir_var_mem_task_payload |
nir_var_shader_temp | nir_var_shader_temp |
nir_var_function_temp | nir_var_function_temp |
nir_var_mem_global | nir_var_mem_global |
nir_var_mem_shared, nir_var_mem_shared,
get_mem_access_size_align, NULL); .callback = get_mem_access_size_align,
};
OPT(nir_lower_mem_access_bit_sizes, &mem_access_options);
while (progress) { while (progress) {
progress = false; progress = false;

View File

@@ -4726,12 +4726,13 @@ bifrost_preprocess_nir(nir_shader *nir, unsigned gpu_id)
NIR_PASS_V(nir, pan_nir_lower_store_component); NIR_PASS_V(nir, pan_nir_lower_store_component);
} }
NIR_PASS_V(nir, nir_lower_mem_access_bit_sizes, nir_lower_mem_access_bit_sizes_options mem_size_options = {
nir_var_mem_ubo | nir_var_mem_ssbo | nir_var_mem_constant | .modes = nir_var_mem_ubo | nir_var_mem_ssbo | nir_var_mem_constant |
nir_var_mem_task_payload | nir_var_shader_temp | nir_var_mem_task_payload | nir_var_shader_temp |
nir_var_function_temp | nir_var_mem_global | nir_var_function_temp | nir_var_mem_global | nir_var_mem_shared,
nir_var_mem_shared, .callback = mem_access_size_align_cb,
mem_access_size_align_cb, NULL); };
NIR_PASS_V(nir, nir_lower_mem_access_bit_sizes, &mem_size_options);
NIR_PASS_V(nir, nir_lower_ssbo); NIR_PASS_V(nir, nir_lower_ssbo);
NIR_PASS_V(nir, pan_lower_sample_pos); NIR_PASS_V(nir, pan_lower_sample_pos);