diff --git a/.pick_status.json b/.pick_status.json index b3a42f6421a..57341ee4016 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -4,7 +4,7 @@ "description": "radv/rt: Fix frontface culling with emulated RT", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null, "notes": null diff --git a/src/amd/vulkan/nir/radv_nir_rt_common.c b/src/amd/vulkan/nir/radv_nir_rt_common.c index f0fccf049f3..9c681b7e103 100644 --- a/src/amd/vulkan/nir/radv_nir_rt_common.c +++ b/src/amd/vulkan/nir/radv_nir_rt_common.c @@ -269,11 +269,13 @@ intersect_ray_amd_software_tri(struct radv_device *device, nir_builder *b, nir_d nir_push_if(b, det_cond_front); { - t = nir_f2f32(b, nir_fdiv(b, t, det)); - v = nir_f2f32(b, nir_fdiv(b, v, det)); - w = nir_f2f32(b, nir_fdiv(b, w, det)); + nir_def *det_abs = nir_fabs(b, det); - nir_def *indices[4] = {t, nir_imm_float(b, 1.0), v, w}; + t = nir_f2f32(b, nir_fdiv(b, t, det_abs)); + v = nir_f2f32(b, nir_fdiv(b, v, det_abs)); + w = nir_f2f32(b, nir_fdiv(b, w, det_abs)); + + nir_def *indices[4] = {t, nir_f2f32(b, nir_fsign(b, det)), v, w}; nir_store_var(b, result, nir_vec(b, indices, 4), 0xf); } nir_pop_if(b, NULL);