Mesa (main): radv: Refactor lower_rt_derefs
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Wed Jun 29 00:57:29 UTC 2022
Module: Mesa
Branch: main
Commit: 098b5804a0923df29eae8e11e11f510f8b8c10ac
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=098b5804a0923df29eae8e11e11f510f8b8c10ac
Author: Konstantin Seurer <konstantin.seurer at gmail.com>
Date: Mon Jun 20 20:27:31 2022 +0200
radv: Refactor lower_rt_derefs
Signed-off-by: Konstantin Seurer <konstantin.seurer at gmail.com>
Reviewed-by: Daniel Schürmann <daniel at schuermann.dev>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17123>
---
src/amd/vulkan/radv_pipeline_rt.c | 61 +++++++++++++++++----------------------
1 file changed, 27 insertions(+), 34 deletions(-)
diff --git a/src/amd/vulkan/radv_pipeline_rt.c b/src/amd/vulkan/radv_pipeline_rt.c
index 8994a7350c8..a61a073f607 100644
--- a/src/amd/vulkan/radv_pipeline_rt.c
+++ b/src/amd/vulkan/radv_pipeline_rt.c
@@ -774,47 +774,40 @@ lower_rt_derefs(nir_shader *shader)
nir_foreach_block (block, impl) {
nir_foreach_instr_safe (instr, block) {
- switch (instr->type) {
- case nir_instr_type_deref: {
- if (instr->type != nir_instr_type_deref)
- continue;
-
- nir_deref_instr *deref = nir_instr_as_deref(instr);
- if (nir_deref_mode_is(deref, nir_var_shader_call_data)) {
- deref->modes = nir_var_function_temp;
- if (deref->deref_type == nir_deref_type_var) {
- b.cursor = nir_before_instr(&deref->instr);
- nir_deref_instr *cast = nir_build_deref_cast(
- &b, arg_offset, nir_var_function_temp, deref->var->type, 0);
- nir_ssa_def_rewrite_uses(&deref->dest.ssa, &cast->dest.ssa);
- nir_instr_remove(&deref->instr);
- }
- progress = true;
- } else if (nir_deref_mode_is(deref, nir_var_ray_hit_attrib)) {
- deref->modes = nir_var_function_temp;
- if (deref->deref_type == nir_deref_type_var) {
- b.cursor = nir_before_instr(&deref->instr);
- nir_deref_instr *cast =
- nir_build_deref_cast(&b, nir_imm_int(&b, RADV_HIT_ATTRIB_OFFSET),
- nir_var_function_temp, deref->type, 0);
- nir_ssa_def_rewrite_uses(&deref->dest.ssa, &cast->dest.ssa);
- nir_instr_remove(&deref->instr);
- }
- progress = true;
- }
- break;
+ if (instr->type != nir_instr_type_deref)
+ continue;
+
+ nir_deref_instr *deref = nir_instr_as_deref(instr);
+ b.cursor = nir_before_instr(&deref->instr);
+
+ nir_deref_instr *replacement = NULL;
+ if (nir_deref_mode_is(deref, nir_var_shader_call_data)) {
+ deref->modes = nir_var_function_temp;
+ progress = true;
+
+ if (deref->deref_type == nir_deref_type_var)
+ replacement =
+ nir_build_deref_cast(&b, arg_offset, nir_var_function_temp, deref->var->type, 0);
+ } else if (nir_deref_mode_is(deref, nir_var_ray_hit_attrib)) {
+ deref->modes = nir_var_function_temp;
+ progress = true;
+
+ if (deref->deref_type == nir_deref_type_var)
+ replacement = nir_build_deref_cast(&b, nir_imm_int(&b, RADV_HIT_ATTRIB_OFFSET),
+ nir_var_function_temp, deref->type, 0);
}
- default:
- break;
+
+ if (replacement != NULL) {
+ nir_ssa_def_rewrite_uses(&deref->dest.ssa, &replacement->dest.ssa);
+ nir_instr_remove(&deref->instr);
}
}
}
- if (progress) {
+ if (progress)
nir_metadata_preserve(impl, nir_metadata_block_index | nir_metadata_dominance);
- } else {
+ else
nir_metadata_preserve(impl, nir_metadata_all);
- }
return progress;
}
More information about the mesa-commit
mailing list