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> (cherry picked from commitf843bec7de
)
This commit is contained in:

committed by
Dylan Baker

parent
6094dba1da
commit
a13dc0cd0e
@@ -1066,7 +1066,7 @@
|
||||
"description": "intel/nir/rt: spill/fill the entire ray query data",
|
||||
"nominated": true,
|
||||
"nomination_type": 1,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"main_sha": null,
|
||||
"because_sha": "c78be5da300ae386a12b91a22efb064335e2043a"
|
||||
},
|
||||
|
@@ -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