mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-22 17:50:12 +01:00
intel/rt: Update BVH instance leaf load for Xe3+
Signed-off-by: Sagar Ghuge <sagar.ghuge@intel.com> Reviewed-by: Kevin Chuang <kaiwenjon23@gmail.com> Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/33047>
This commit is contained in:
parent
5cd0f4ba2f
commit
36433e932b
3 changed files with 31 additions and 16 deletions
|
|
@ -403,21 +403,24 @@ lower_ray_query_intrinsic(nir_builder *b,
|
|||
|
||||
case nir_ray_query_value_intersection_instance_custom_index: {
|
||||
struct brw_nir_rt_bvh_instance_leaf_defs leaf;
|
||||
brw_nir_rt_load_bvh_instance_leaf(b, &leaf, hit_in.inst_leaf_ptr);
|
||||
brw_nir_rt_load_bvh_instance_leaf(b, &leaf, hit_in.inst_leaf_ptr,
|
||||
state->devinfo);
|
||||
sysval = leaf.instance_id;
|
||||
break;
|
||||
}
|
||||
|
||||
case nir_ray_query_value_intersection_instance_id: {
|
||||
struct brw_nir_rt_bvh_instance_leaf_defs leaf;
|
||||
brw_nir_rt_load_bvh_instance_leaf(b, &leaf, hit_in.inst_leaf_ptr);
|
||||
brw_nir_rt_load_bvh_instance_leaf(b, &leaf, hit_in.inst_leaf_ptr,
|
||||
state->devinfo);
|
||||
sysval = leaf.instance_index;
|
||||
break;
|
||||
}
|
||||
|
||||
case nir_ray_query_value_intersection_instance_sbt_index: {
|
||||
struct brw_nir_rt_bvh_instance_leaf_defs leaf;
|
||||
brw_nir_rt_load_bvh_instance_leaf(b, &leaf, hit_in.inst_leaf_ptr);
|
||||
brw_nir_rt_load_bvh_instance_leaf(b, &leaf, hit_in.inst_leaf_ptr,
|
||||
state->devinfo);
|
||||
sysval = leaf.contribution_to_hit_group_index;
|
||||
break;
|
||||
}
|
||||
|
|
@ -453,14 +456,16 @@ lower_ray_query_intrinsic(nir_builder *b,
|
|||
|
||||
case nir_ray_query_value_intersection_object_to_world: {
|
||||
struct brw_nir_rt_bvh_instance_leaf_defs leaf;
|
||||
brw_nir_rt_load_bvh_instance_leaf(b, &leaf, hit_in.inst_leaf_ptr);
|
||||
brw_nir_rt_load_bvh_instance_leaf(b, &leaf, hit_in.inst_leaf_ptr,
|
||||
state->devinfo);
|
||||
sysval = leaf.object_to_world[nir_intrinsic_column(intrin)];
|
||||
break;
|
||||
}
|
||||
|
||||
case nir_ray_query_value_intersection_world_to_object: {
|
||||
struct brw_nir_rt_bvh_instance_leaf_defs leaf;
|
||||
brw_nir_rt_load_bvh_instance_leaf(b, &leaf, hit_in.inst_leaf_ptr);
|
||||
brw_nir_rt_load_bvh_instance_leaf(b, &leaf, hit_in.inst_leaf_ptr,
|
||||
state->devinfo);
|
||||
sysval = leaf.world_to_object[nir_intrinsic_column(intrin)];
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -190,7 +190,8 @@ lower_rt_intrinsics_impl(nir_function_impl *impl,
|
|||
case nir_intrinsic_load_ray_object_origin:
|
||||
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);
|
||||
brw_nir_rt_load_bvh_instance_leaf(b, &leaf, hit_in.inst_leaf_ptr,
|
||||
devinfo);
|
||||
|
||||
sysval = nir_build_vec3_mat_mult_col_major(
|
||||
b, world_ray_in.orig, leaf.world_to_object, true);
|
||||
|
|
@ -202,7 +203,8 @@ lower_rt_intrinsics_impl(nir_function_impl *impl,
|
|||
case nir_intrinsic_load_ray_object_direction:
|
||||
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);
|
||||
brw_nir_rt_load_bvh_instance_leaf(b, &leaf, hit_in.inst_leaf_ptr,
|
||||
devinfo);
|
||||
|
||||
sysval = nir_build_vec3_mat_mult_col_major(
|
||||
b, world_ray_in.dir, leaf.world_to_object, false);
|
||||
|
|
@ -231,21 +233,21 @@ lower_rt_intrinsics_impl(nir_function_impl *impl,
|
|||
|
||||
case nir_intrinsic_load_instance_id: {
|
||||
struct brw_nir_rt_bvh_instance_leaf_defs leaf;
|
||||
brw_nir_rt_load_bvh_instance_leaf(b, &leaf, hit_in.inst_leaf_ptr);
|
||||
brw_nir_rt_load_bvh_instance_leaf(b, &leaf, hit_in.inst_leaf_ptr, devinfo);
|
||||
sysval = leaf.instance_index;
|
||||
break;
|
||||
}
|
||||
|
||||
case nir_intrinsic_load_ray_object_to_world: {
|
||||
struct brw_nir_rt_bvh_instance_leaf_defs leaf;
|
||||
brw_nir_rt_load_bvh_instance_leaf(b, &leaf, hit_in.inst_leaf_ptr);
|
||||
brw_nir_rt_load_bvh_instance_leaf(b, &leaf, hit_in.inst_leaf_ptr, devinfo);
|
||||
sysval = leaf.object_to_world[nir_intrinsic_column(intrin)];
|
||||
break;
|
||||
}
|
||||
|
||||
case nir_intrinsic_load_ray_world_to_object: {
|
||||
struct brw_nir_rt_bvh_instance_leaf_defs leaf;
|
||||
brw_nir_rt_load_bvh_instance_leaf(b, &leaf, hit_in.inst_leaf_ptr);
|
||||
brw_nir_rt_load_bvh_instance_leaf(b, &leaf, hit_in.inst_leaf_ptr, devinfo);
|
||||
sysval = leaf.world_to_object[nir_intrinsic_column(intrin)];
|
||||
break;
|
||||
}
|
||||
|
|
@ -286,7 +288,7 @@ lower_rt_intrinsics_impl(nir_function_impl *impl,
|
|||
|
||||
case nir_intrinsic_load_ray_instance_custom_index: {
|
||||
struct brw_nir_rt_bvh_instance_leaf_defs leaf;
|
||||
brw_nir_rt_load_bvh_instance_leaf(b, &leaf, hit_in.inst_leaf_ptr);
|
||||
brw_nir_rt_load_bvh_instance_leaf(b, &leaf, hit_in.inst_leaf_ptr, devinfo);
|
||||
sysval = leaf.instance_id;
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1068,14 +1068,22 @@ struct brw_nir_rt_bvh_instance_leaf_defs {
|
|||
static inline void
|
||||
brw_nir_rt_load_bvh_instance_leaf(nir_builder *b,
|
||||
struct brw_nir_rt_bvh_instance_leaf_defs *defs,
|
||||
nir_def *leaf_addr)
|
||||
nir_def *leaf_addr,
|
||||
const struct intel_device_info *devinfo)
|
||||
{
|
||||
nir_def *leaf_desc = brw_nir_rt_load(b, leaf_addr, 4, 2, 32);
|
||||
|
||||
defs->shader_index =
|
||||
nir_iand_imm(b, nir_channel(b, leaf_desc, 0), (1 << 24) - 1);
|
||||
defs->contribution_to_hit_group_index =
|
||||
nir_iand_imm(b, nir_channel(b, leaf_desc, 1), (1 << 24) - 1);
|
||||
if (devinfo->ver >= 30) {
|
||||
/* Not used for Xe3+, just putting 0 for consistency */
|
||||
defs->shader_index = nir_imm_int(b, 0);
|
||||
defs->contribution_to_hit_group_index =
|
||||
nir_iand_imm(b, nir_channel(b, leaf_desc, 0), (1 << 24) - 1);
|
||||
} else {
|
||||
defs->shader_index =
|
||||
nir_iand_imm(b, nir_channel(b, leaf_desc, 0), (1 << 24) - 1);
|
||||
defs->contribution_to_hit_group_index =
|
||||
nir_iand_imm(b, nir_channel(b, leaf_desc, 1), (1 << 24) - 1);
|
||||
}
|
||||
|
||||
defs->world_to_object[0] =
|
||||
brw_nir_rt_load(b, nir_iadd_imm(b, leaf_addr, 16), 4, 3, 32);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue