intel/compiler: Handle TerminateOnFirstHit in ray query execution
Some checks are pending
macOS-CI / macOS-CI (dri) (push) Waiting to run
macOS-CI / macOS-CI (xlib) (push) Waiting to run

Once commited and have AABB or triangle intersection found, terminate
the traversal if TerminateOnFirstHit ray flag is present.

Signed-off-by: Sagar Ghuge <sagar.ghuge@intel.com>
Reviewed-by: Ivan Briano <ivan.briano@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/40773>
This commit is contained in:
Sagar Ghuge 2026-04-02 17:34:08 -07:00
parent c4cecd9d19
commit f0ae58df12

View file

@ -211,6 +211,24 @@ spill_query(nir_builder *b,
}
static void
handle_terminate_on_first_hit(nir_builder *b, nir_def *stack_addr,
struct lowering_state *state)
{
struct brw_nir_rt_mem_ray_defs world_ray_in = {};
brw_nir_rt_load_mem_ray_from_addr(b, &world_ray_in, stack_addr,
BRW_RT_BVH_LEVEL_WORLD,
state->devinfo);
nir_def *terminate =
nir_test_mask(b, nir_u2u32(b, world_ray_in.ray_flags),
BRW_RT_RAY_FLAG_TERMINATE_ON_FIRST_HIT);
nir_push_if(b, terminate);
{
brw_nir_rt_query_mark_done(b, stack_addr);
}
nir_pop_if(b, NULL);
}
static void
lower_ray_query_intrinsic(nir_builder *b,
nir_intrinsic_instr *intrin,
@ -337,6 +355,7 @@ lower_ray_query_intrinsic(nir_builder *b,
NULL, NULL,
nir_imm_int(b, GEN_RT_TRACE_RAY_COMMIT),
nir_imm_int(b, BRW_RT_BVH_LEVEL_OBJECT));
handle_terminate_on_first_hit(b, stack_addr, state);
break;
}
@ -346,6 +365,7 @@ lower_ray_query_intrinsic(nir_builder *b,
NULL, NULL,
nir_imm_int(b, GEN_RT_TRACE_RAY_COMMIT),
nir_imm_int(b, BRW_RT_BVH_LEVEL_OBJECT));
handle_terminate_on_first_hit(b, stack_addr, state);
break;
}