radv: Handle NULL miss shaders
authorFriedrich Vock <friedrich.vock@gmx.de>
Sun, 11 Dec 2022 21:49:18 +0000 (22:49 +0100)
committerEric Engestrom <eric@engestrom.ch>
Wed, 14 Dec 2022 20:47:02 +0000 (20:47 +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>
(cherry picked from commit 568fa71ef8d825b735fdbf6747ada3d7cfe95eff)

.pick_status.json
src/amd/vulkan/radv_pipeline_rt.c

index ac33add..6d37745 100644 (file)
         "description": "radv: Handle NULL miss shaders",
         "nominated": true,
         "nomination_type": 1,
-        "resolution": 0,
+        "resolution": 1,
         "main_sha": null,
         "because_sha": "85580faa4b0b654600a137e337211ce3efff43fb"
     },
index f114af5..44fb143 100644 (file)
@@ -719,6 +719,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, 0);
+
+               /* 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: