intel/nir: Pass devinfo and prog_data to brw_nir_lower_cs_intrinsics
We'll want to check for Alchemist and set various prog_data fields in the next patch, in order to enable some optimizations. Passing NULL for prog_data will remain valid and continue working as before. Reviewed-by: Ivan Briano <ivan.briano@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27167>
This commit is contained in:

committed by
Marge Bot

parent
f85ad92dae
commit
10ed4f1cab
@@ -2513,7 +2513,7 @@ crocus_compile_cs(struct crocus_context *ice,
|
|||||||
|
|
||||||
nir_shader *nir = nir_shader_clone(mem_ctx, ish->nir);
|
nir_shader *nir = nir_shader_clone(mem_ctx, ish->nir);
|
||||||
|
|
||||||
NIR_PASS_V(nir, brw_nir_lower_cs_intrinsics);
|
NIR_PASS_V(nir, brw_nir_lower_cs_intrinsics, devinfo, cs_prog_data);
|
||||||
|
|
||||||
crocus_setup_uniforms(devinfo, mem_ctx, nir, prog_data, &system_values,
|
crocus_setup_uniforms(devinfo, mem_ctx, nir, prog_data, &system_values,
|
||||||
&num_system_values, &num_cbufs);
|
&num_system_values, &num_cbufs);
|
||||||
|
@@ -2224,7 +2224,7 @@ iris_compile_cs(struct iris_screen *screen,
|
|||||||
nir_shader *nir = nir_shader_clone(mem_ctx, ish->nir);
|
nir_shader *nir = nir_shader_clone(mem_ctx, ish->nir);
|
||||||
const struct iris_cs_prog_key *const key = &shader->key.cs;
|
const struct iris_cs_prog_key *const key = &shader->key.cs;
|
||||||
|
|
||||||
NIR_PASS_V(nir, brw_nir_lower_cs_intrinsics);
|
NIR_PASS_V(nir, brw_nir_lower_cs_intrinsics, devinfo, cs_prog_data);
|
||||||
|
|
||||||
iris_setup_uniforms(devinfo, mem_ctx, nir, prog_data,
|
iris_setup_uniforms(devinfo, mem_ctx, nir, prog_data,
|
||||||
ish->kernel_input_size,
|
ish->kernel_input_size,
|
||||||
|
@@ -383,7 +383,8 @@ blorp_compile_cs(struct blorp_context *blorp, void *mem_ctx,
|
|||||||
cs_prog_data->base.nr_params = nr_params;
|
cs_prog_data->base.nr_params = nr_params;
|
||||||
cs_prog_data->base.param = rzalloc_array(NULL, uint32_t, nr_params);
|
cs_prog_data->base.param = rzalloc_array(NULL, uint32_t, nr_params);
|
||||||
|
|
||||||
NIR_PASS_V(nir, brw_nir_lower_cs_intrinsics);
|
NIR_PASS_V(nir, brw_nir_lower_cs_intrinsics, compiler->devinfo,
|
||||||
|
cs_prog_data);
|
||||||
NIR_PASS_V(nir, nir_shader_intrinsics_pass, lower_base_workgroup_id,
|
NIR_PASS_V(nir, nir_shader_intrinsics_pass, lower_base_workgroup_id,
|
||||||
nir_metadata_block_index | nir_metadata_dominance, NULL);
|
nir_metadata_block_index | nir_metadata_dominance, NULL);
|
||||||
|
|
||||||
|
@@ -426,7 +426,7 @@ brw_kernel_from_spirv(struct brw_compiler *compiler,
|
|||||||
|
|
||||||
NIR_PASS_V(nir, nir_lower_convert_alu_types, NULL);
|
NIR_PASS_V(nir, nir_lower_convert_alu_types, NULL);
|
||||||
|
|
||||||
NIR_PASS_V(nir, brw_nir_lower_cs_intrinsics);
|
NIR_PASS_V(nir, brw_nir_lower_cs_intrinsics, devinfo, NULL);
|
||||||
NIR_PASS_V(nir, lower_kernel_intrinsics);
|
NIR_PASS_V(nir, lower_kernel_intrinsics);
|
||||||
|
|
||||||
struct brw_cs_prog_key key = { };
|
struct brw_cs_prog_key key = { };
|
||||||
|
@@ -169,7 +169,9 @@ void
|
|||||||
brw_nir_link_shaders(const struct brw_compiler *compiler,
|
brw_nir_link_shaders(const struct brw_compiler *compiler,
|
||||||
nir_shader *producer, nir_shader *consumer);
|
nir_shader *producer, nir_shader *consumer);
|
||||||
|
|
||||||
bool brw_nir_lower_cs_intrinsics(nir_shader *nir);
|
bool brw_nir_lower_cs_intrinsics(nir_shader *nir,
|
||||||
|
const struct intel_device_info *devinfo,
|
||||||
|
struct brw_cs_prog_data *prog_data);
|
||||||
bool brw_nir_lower_alpha_to_coverage(nir_shader *shader,
|
bool brw_nir_lower_alpha_to_coverage(nir_shader *shader,
|
||||||
const struct brw_wm_prog_key *key,
|
const struct brw_wm_prog_key *key,
|
||||||
const struct brw_wm_prog_data *prog_data);
|
const struct brw_wm_prog_data *prog_data);
|
||||||
|
@@ -275,7 +275,9 @@ lower_cs_intrinsics_convert_impl(struct lower_intrinsics_state *state)
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
brw_nir_lower_cs_intrinsics(nir_shader *nir)
|
brw_nir_lower_cs_intrinsics(nir_shader *nir,
|
||||||
|
const struct intel_device_info *devinfo,
|
||||||
|
struct brw_cs_prog_data *prog_data)
|
||||||
{
|
{
|
||||||
assert(gl_shader_stage_uses_workgroup(nir->info.stage));
|
assert(gl_shader_stage_uses_workgroup(nir->info.stage));
|
||||||
|
|
||||||
|
@@ -525,7 +525,7 @@ brw_nir_create_raygen_trampoline(const struct brw_compiler *compiler,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
NIR_PASS_V(nir, brw_nir_lower_cs_intrinsics);
|
NIR_PASS_V(nir, brw_nir_lower_cs_intrinsics, devinfo, NULL);
|
||||||
|
|
||||||
const bool is_scalar = true;
|
const bool is_scalar = true;
|
||||||
brw_nir_optimize(nir, is_scalar, devinfo);
|
brw_nir_optimize(nir, is_scalar, devinfo);
|
||||||
|
@@ -228,19 +228,21 @@ compile_upload_spirv(struct anv_device *device,
|
|||||||
NIR_PASS_V(nir, nir_opt_constant_folding);
|
NIR_PASS_V(nir, nir_opt_constant_folding);
|
||||||
NIR_PASS_V(nir, nir_opt_dce);
|
NIR_PASS_V(nir, nir_opt_dce);
|
||||||
|
|
||||||
if (stage == MESA_SHADER_COMPUTE) {
|
|
||||||
NIR_PASS_V(nir, nir_shader_intrinsics_pass, lower_load_ubo_to_uniforms,
|
|
||||||
nir_metadata_block_index | nir_metadata_dominance,
|
|
||||||
NULL);
|
|
||||||
NIR_PASS_V(nir, brw_nir_lower_cs_intrinsics);
|
|
||||||
nir->num_uniforms = bind_map->push_data_size;
|
|
||||||
}
|
|
||||||
|
|
||||||
union brw_any_prog_key key;
|
union brw_any_prog_key key;
|
||||||
memset(&key, 0, sizeof(key));
|
memset(&key, 0, sizeof(key));
|
||||||
|
|
||||||
union brw_any_prog_data prog_data;
|
union brw_any_prog_data prog_data;
|
||||||
memset(&prog_data, 0, sizeof(prog_data));
|
memset(&prog_data, 0, sizeof(prog_data));
|
||||||
|
|
||||||
|
if (stage == MESA_SHADER_COMPUTE) {
|
||||||
|
NIR_PASS_V(nir, nir_shader_intrinsics_pass, lower_load_ubo_to_uniforms,
|
||||||
|
nir_metadata_block_index | nir_metadata_dominance,
|
||||||
|
NULL);
|
||||||
|
NIR_PASS_V(nir, brw_nir_lower_cs_intrinsics, device->info,
|
||||||
|
&prog_data.cs);
|
||||||
|
nir->num_uniforms = bind_map->push_data_size;
|
||||||
|
}
|
||||||
|
|
||||||
prog_data.base.nr_params = nir->num_uniforms / 4;
|
prog_data.base.nr_params = nir->num_uniforms / 4;
|
||||||
|
|
||||||
brw_nir_analyze_ubo_ranges(compiler, nir, prog_data.base.ubo_ranges);
|
brw_nir_analyze_ubo_ranges(compiler, nir, prog_data.base.ubo_ranges);
|
||||||
|
@@ -1167,8 +1167,10 @@ anv_pipeline_lower_nir(struct anv_pipeline *pipeline,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (gl_shader_stage_is_compute(nir->info.stage) ||
|
if (gl_shader_stage_is_compute(nir->info.stage) ||
|
||||||
gl_shader_stage_is_mesh(nir->info.stage))
|
gl_shader_stage_is_mesh(nir->info.stage)) {
|
||||||
NIR_PASS(_, nir, brw_nir_lower_cs_intrinsics);
|
NIR_PASS(_, nir, brw_nir_lower_cs_intrinsics, compiler->devinfo,
|
||||||
|
&stage->prog_data.cs);
|
||||||
|
}
|
||||||
|
|
||||||
stage->push_desc_info.used_set_buffer =
|
stage->push_desc_info.used_set_buffer =
|
||||||
anv_nir_loads_push_desc_buffer(nir, layout, &stage->bind_map);
|
anv_nir_loads_push_desc_buffer(nir, layout, &stage->bind_map);
|
||||||
|
@@ -639,8 +639,10 @@ anv_pipeline_lower_nir(struct anv_pipeline *pipeline,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gl_shader_stage_is_compute(nir->info.stage))
|
if (gl_shader_stage_is_compute(nir->info.stage)) {
|
||||||
NIR_PASS(_, nir, brw_nir_lower_cs_intrinsics);
|
NIR_PASS(_, nir, brw_nir_lower_cs_intrinsics, compiler->devinfo,
|
||||||
|
&stage->prog_data.cs);
|
||||||
|
}
|
||||||
|
|
||||||
stage->nir = nir;
|
stage->nir = nir;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user