radv: Handle NULL miss shaders
authorFriedrich Vock <friedrich.vock@gmx.de>
Sun, 11 Dec 2022 21:49:18 +0000 (22:49 +0100)
committerMarge Bot <emma+marge@anholt.net>
Mon, 12 Dec 2022 18:52:59 +0000 (18:52 +0000)
Fixes reflections in DOOM Eternal.

Fixes: 85580faa ("radv: Add ray traversal loop.")
Closes: #6210
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20270>

src/amd/vulkan/radv_rt_shader.c

index 62b9c70..5976715 100644 (file)
@@ -618,6 +618,11 @@ lower_rt_instructions(nir_shader *shader, struct rt_variables *vars, unsigned ca
                nir_store_var(&b_shader, vars->hit_kind, undef, 0x1);
                nir_ssa_def *miss_index = nir_load_var(&b_shader, vars->miss_index);
                load_sbt_entry(&b_shader, vars, miss_index, SBT_MISS, SBT_GENERAL_IDX);
+
+               /* In case of a NULL miss shader, do nothing and just return. */
+               nir_push_if(&b_shader, nir_ieq_imm(&b_shader, nir_load_var(&b_shader, vars->idx), 0));
+               insert_rt_return(&b_shader, vars);
+               nir_pop_if(&b_shader, NULL);
                break;
             }
             default: