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 commit f843bec7de)
This commit is contained in:
Lionel Landwerlin
2022-07-19 21:47:45 +03:00
committed by Dylan Baker
parent 6094dba1da
commit a13dc0cd0e
2 changed files with 5 additions and 33 deletions

View File

@@ -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"
},

View File

@@ -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);
}