From 9b366243ed882f5b705bc99e641bca7b3015a23b Mon Sep 17 00:00:00 2001 From: Lionel Landwerlin Date: Mon, 14 Jun 2021 22:25:38 +0300 Subject: [PATCH] intel/fs: load more fields from BVH instance leafs v2: Fixup mask (Caio) Drop old comment (Caio) Signed-off-by: Lionel Landwerlin Reviewed-by: Caio Oliveira Part-of: --- src/intel/compiler/brw_nir_rt_builder.h | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/intel/compiler/brw_nir_rt_builder.h b/src/intel/compiler/brw_nir_rt_builder.h index a220e0d5672..f002f13ab2e 100644 --- a/src/intel/compiler/brw_nir_rt_builder.h +++ b/src/intel/compiler/brw_nir_rt_builder.h @@ -283,6 +283,7 @@ struct brw_nir_rt_mem_hit_defs { nir_ssa_def *t; nir_ssa_def *tri_bary; /**< Only valid for triangle geometry */ nir_ssa_def *aabb_hit_kind; /**< Only valid for AABB geometry */ + nir_ssa_def *valid; nir_ssa_def *leaf_type; nir_ssa_def *prim_leaf_index; nir_ssa_def *front_face; @@ -302,6 +303,8 @@ brw_nir_rt_load_mem_hit(nir_builder *b, defs->aabb_hit_kind = nir_channel(b, data, 1); defs->tri_bary = nir_channels(b, data, 0x6); nir_ssa_def *bitfield = nir_channel(b, data, 3); + defs->valid = + nir_ubitfield_extract(b, bitfield, nir_imm_int(b, 16), nir_imm_int(b, 1)); defs->leaf_type = nir_ubitfield_extract(b, bitfield, nir_imm_int(b, 17), nir_imm_int(b, 3)); defs->prim_leaf_index = @@ -472,6 +475,8 @@ brw_nir_rt_load_mem_ray(nir_builder *b, } struct brw_nir_rt_bvh_instance_leaf_defs { + nir_ssa_def *shader_index; + nir_ssa_def *contribution_to_hit_group_index; nir_ssa_def *world_to_object[4]; nir_ssa_def *instance_id; nir_ssa_def *instance_index; @@ -483,10 +488,12 @@ brw_nir_rt_load_bvh_instance_leaf(nir_builder *b, struct brw_nir_rt_bvh_instance_leaf_defs *defs, nir_ssa_def *leaf_addr) { - /* We don't care about the first 16B of the leaf for now. One day, we may - * add code to decode it but none of that data is directly required for - * implementing any ray-tracing built-ins. - */ + defs->shader_index = + nir_iand_imm(b, nir_load_global(b, leaf_addr, 4, 1, 32), (1 << 24) - 1); + defs->contribution_to_hit_group_index = + nir_iand_imm(b, + nir_load_global(b, nir_iadd_imm(b, leaf_addr, 4), 4, 1, 32), + (1 << 24) - 1); defs->world_to_object[0] = nir_load_global(b, nir_iadd_imm(b, leaf_addr, 16), 4, 3, 32);