intel/nir/rt: spill/fill the entire ray query data
We need the traversal stack to saved/restored along with mem hits.
Total spill/fill is 256bytes.
We can potentially optimize this but we have to be very careful about
what state the query is in.
Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Fixes: c78be5da30
("intel/fs: lower ray query intrinsics")
Reviewed-by: Ivan Briano <ivan.briano@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17396>
This commit is contained in:

committed by
Marge Bot

parent
a88f725eea
commit
f843bec7de
@@ -200,20 +200,8 @@ fill_query(nir_builder *b,
|
||||
nir_ssa_def *shadow_stack_addr,
|
||||
nir_ssa_def *ctrl)
|
||||
{
|
||||
brw_nir_memcpy_global(b,
|
||||
brw_nir_rt_mem_hit_addr_from_addr(b, hw_stack_addr, false), 16,
|
||||
brw_nir_rt_mem_hit_addr_from_addr(b, shadow_stack_addr, false), 16,
|
||||
BRW_RT_SIZEOF_HIT_INFO);
|
||||
brw_nir_memcpy_global(b,
|
||||
brw_nir_rt_mem_hit_addr_from_addr(b, hw_stack_addr, true), 16,
|
||||
brw_nir_rt_mem_hit_addr_from_addr(b, shadow_stack_addr, true), 16,
|
||||
BRW_RT_SIZEOF_HIT_INFO);
|
||||
brw_nir_memcpy_global(b,
|
||||
brw_nir_rt_mem_ray_addr(b, hw_stack_addr,
|
||||
BRW_RT_BVH_LEVEL_WORLD), 16,
|
||||
brw_nir_rt_mem_ray_addr(b, shadow_stack_addr,
|
||||
BRW_RT_BVH_LEVEL_WORLD), 16,
|
||||
BRW_RT_SIZEOF_RAY);
|
||||
brw_nir_memcpy_global(b, hw_stack_addr, 64, shadow_stack_addr, 64,
|
||||
BRW_RT_SIZEOF_RAY_QUERY);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -221,24 +209,8 @@ spill_query(nir_builder *b,
|
||||
nir_ssa_def *hw_stack_addr,
|
||||
nir_ssa_def *shadow_stack_addr)
|
||||
{
|
||||
struct brw_nir_rt_mem_hit_defs committed_hit = {};
|
||||
brw_nir_rt_load_mem_hit_from_addr(b, &committed_hit, hw_stack_addr, true);
|
||||
|
||||
/* Always copy the potential hit back */
|
||||
brw_nir_memcpy_global(b,
|
||||
brw_nir_rt_mem_hit_addr_from_addr(b, shadow_stack_addr, false), 16,
|
||||
brw_nir_rt_mem_hit_addr_from_addr(b, hw_stack_addr, false), 16,
|
||||
BRW_RT_SIZEOF_HIT_INFO);
|
||||
|
||||
/* Also copy the committed hit back if it is valid */
|
||||
nir_push_if(b, committed_hit.valid);
|
||||
{
|
||||
brw_nir_memcpy_global(b,
|
||||
brw_nir_rt_mem_hit_addr_from_addr(b, shadow_stack_addr, true), 16,
|
||||
brw_nir_rt_mem_hit_addr_from_addr(b, hw_stack_addr, true), 16,
|
||||
BRW_RT_SIZEOF_HIT_INFO);
|
||||
}
|
||||
nir_pop_if(b, NULL);
|
||||
brw_nir_memcpy_global(b, shadow_stack_addr, 64, hw_stack_addr, 64,
|
||||
BRW_RT_SIZEOF_RAY_QUERY);
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user