intel/rt: Add return instructions at the end of ray-tracing shaders
Each callable ray-tracing shader shader stage has to perform a return operation at the end. In the case of raygen shaders, it retires the bindless thread because the raygen shader is always the root of the call tree. In the case of any-hit shaders, the default action is accep the hit. For callable, miss, and closest-hit shaders, it does a return operation. The assumption is that the calling shader has placed a BINDLESS_SHADER_RECORD address for the return in the first QWord of the callee's scratch space. The return operation simply loads this value and calls a btd_spawn intrinsic to jump to it. Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7356>
This commit is contained in:

committed by
Marge Bot

parent
49778a7253
commit
ca88cd8e5a
@@ -111,6 +111,7 @@ void
|
||||
brw_nir_lower_raygen(nir_shader *nir)
|
||||
{
|
||||
assert(nir->info.stage == MESA_SHADER_RAYGEN);
|
||||
NIR_PASS_V(nir, brw_nir_lower_shader_returns);
|
||||
lower_rt_scratch(nir);
|
||||
}
|
||||
|
||||
@@ -118,6 +119,7 @@ void
|
||||
brw_nir_lower_any_hit(nir_shader *nir, const struct gen_device_info *devinfo)
|
||||
{
|
||||
assert(nir->info.stage == MESA_SHADER_ANY_HIT);
|
||||
NIR_PASS_V(nir, brw_nir_lower_shader_returns);
|
||||
lower_rt_scratch(nir);
|
||||
}
|
||||
|
||||
@@ -125,6 +127,7 @@ void
|
||||
brw_nir_lower_closest_hit(nir_shader *nir)
|
||||
{
|
||||
assert(nir->info.stage == MESA_SHADER_CLOSEST_HIT);
|
||||
NIR_PASS_V(nir, brw_nir_lower_shader_returns);
|
||||
lower_rt_scratch(nir);
|
||||
}
|
||||
|
||||
@@ -132,6 +135,7 @@ void
|
||||
brw_nir_lower_miss(nir_shader *nir)
|
||||
{
|
||||
assert(nir->info.stage == MESA_SHADER_MISS);
|
||||
NIR_PASS_V(nir, brw_nir_lower_shader_returns);
|
||||
lower_rt_scratch(nir);
|
||||
}
|
||||
|
||||
@@ -139,6 +143,7 @@ void
|
||||
brw_nir_lower_callable(nir_shader *nir)
|
||||
{
|
||||
assert(nir->info.stage == MESA_SHADER_CALLABLE);
|
||||
NIR_PASS_V(nir, brw_nir_lower_shader_returns);
|
||||
lower_rt_scratch(nir);
|
||||
}
|
||||
|
||||
@@ -149,5 +154,6 @@ brw_nir_lower_combined_intersection_any_hit(nir_shader *intersection,
|
||||
{
|
||||
assert(intersection->info.stage == MESA_SHADER_INTERSECTION);
|
||||
assert(any_hit == NULL || any_hit->info.stage == MESA_SHADER_ANY_HIT);
|
||||
NIR_PASS_V(intersection, brw_nir_lower_shader_returns);
|
||||
lower_rt_scratch(intersection);
|
||||
}
|
||||
|
Reference in New Issue
Block a user