diff --git a/.pick_status.json b/.pick_status.json index 412afe037ea..b21921cc46c 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -2002,7 +2002,7 @@ "description": "radv/rt: Enable exact on software intersection functions", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null }, diff --git a/src/amd/vulkan/radv_rt_common.c b/src/amd/vulkan/radv_rt_common.c index 82785a30010..456577cfaa7 100644 --- a/src/amd/vulkan/radv_rt_common.c +++ b/src/amd/vulkan/radv_rt_common.c @@ -95,6 +95,9 @@ intersect_ray_amd_software_box(struct radv_device *device, nir_builder *b, nir_s const struct glsl_type *vec4_type = glsl_vector_type(GLSL_TYPE_FLOAT, 4); const struct glsl_type *uvec4_type = glsl_vector_type(GLSL_TYPE_UINT, 4); + bool old_exact = b->exact; + b->exact = true; + nir_ssa_def *node_addr = build_node_to_addr(device, b, bvh_node, false); /* vec4 distances = vec4(INF, INF, INF, INF); */ @@ -186,6 +189,7 @@ intersect_ray_amd_software_box(struct radv_device *device, nir_builder *b, nir_s nir_sort_hit_pair(b, distances, child_indices, 1, 3); nir_sort_hit_pair(b, distances, child_indices, 1, 2); + b->exact = old_exact; return nir_load_var(b, child_indices); } @@ -196,6 +200,9 @@ intersect_ray_amd_software_tri(struct radv_device *device, nir_builder *b, nir_s { const struct glsl_type *vec4_type = glsl_vector_type(GLSL_TYPE_FLOAT, 4); + bool old_exact = b->exact; + b->exact = true; + nir_ssa_def *node_addr = build_node_to_addr(device, b, bvh_node, false); const uint32_t coord_offsets[3] = { @@ -351,6 +358,7 @@ intersect_ray_amd_software_tri(struct radv_device *device, nir_builder *b, nir_s } nir_pop_if(b, NULL); + b->exact = old_exact; return nir_load_var(b, result); }