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:
@@ -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 */
|
||||||
|
@@ -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,
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
|
@@ -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;
|
||||||
|
@@ -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);
|
||||||
|
Reference in New Issue
Block a user