From c54942215ed616f8b07208735c2f1a522e05147d Mon Sep 17 00:00:00 2001 From: Sagar Ghuge Date: Mon, 18 Aug 2025 19:08:35 -0700 Subject: [PATCH] brw/rt: fix ray_object_(direction|origin) for closest-hit shaders We were returning world BVH level for origin/direction, this commit fixes by retuning correct object BVH level origin/direction. Fixes: aaff19135644 ("brw/rt: fix ray_object_(direction|origin) for closest-hit shaders") Signed-off-by: Sagar Ghuge Reviewed-by: Lionel Landwerlin Part-of: (cherry picked from commit 89fbcc8c3413016a23720d82ffb82d47d819912c) --- .pick_status.json | 2 +- .../compiler/brw_nir_lower_ray_queries.c | 21 +++++++++++++++++-- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index 9d1b4bc1822..4dc81c2702a 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -1264,7 +1264,7 @@ "description": "brw/rt: fix ray_object_(direction|origin) for closest-hit shaders", "nominated": true, "nomination_type": 2, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "aaff19135644049cde3bd3ddd649b48f96111fa4", "notes": null diff --git a/src/intel/compiler/brw_nir_lower_ray_queries.c b/src/intel/compiler/brw_nir_lower_ray_queries.c index a45100d59b9..2922f2fae30 100644 --- a/src/intel/compiler/brw_nir_lower_ray_queries.c +++ b/src/intel/compiler/brw_nir_lower_ray_queries.c @@ -235,6 +235,7 @@ lower_ray_query_intrinsic(nir_builder *b, brw_nir_rt_sync_stack_addr(b, state->globals.base_mem_addr, state->globals.num_dss_rt_stacks); nir_def *stack_addr = shadow_stack_addr ? shadow_stack_addr : hw_stack_addr; + gl_shader_stage stage = b->shader->info.stage; switch (intrin->intrinsic) { case nir_intrinsic_rq_initialize: { @@ -447,11 +448,27 @@ lower_ray_query_intrinsic(nir_builder *b, break; case nir_ray_query_value_intersection_object_ray_direction: - sysval = world_ray_in.dir; + if (stage == MESA_SHADER_CLOSEST_HIT) { + struct brw_nir_rt_bvh_instance_leaf_defs leaf; + brw_nir_rt_load_bvh_instance_leaf(b, &leaf, hit_in.inst_leaf_ptr, + state->devinfo); + sysval = brw_nir_build_vec3_mat_mult_col_major( + b, world_ray_in.dir, leaf.world_to_object, false); + } else { + sysval = object_ray_in.dir; + } break; case nir_ray_query_value_intersection_object_ray_origin: - sysval = world_ray_in.orig; + if (stage == MESA_SHADER_CLOSEST_HIT) { + struct brw_nir_rt_bvh_instance_leaf_defs leaf; + brw_nir_rt_load_bvh_instance_leaf(b, &leaf, hit_in.inst_leaf_ptr, + state->devinfo); + sysval = brw_nir_build_vec3_mat_mult_col_major( + b, world_ray_in.orig, leaf.world_to_object, true); + } else { + sysval = object_ray_in.orig; + } break; case nir_ray_query_value_intersection_object_to_world: {