mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 00:38:48 +02:00
radv/rt: only run move_rt_instructions() for CPS shaders
move_rt_instructions() only makes sense for CPS recursive shaders, where later rt_trace_ray calls can overwrite the current shader's RT system values. Running it on the function-call path can hoist load_hit_attrib_amd above merged intersection writes, which corrupts any-hit hitAttributeEXT. Move the pass into the existing CPS-only non-intersection branch before nir_lower_shader_calls(). Fixes:c5d796c902("radv/rt: Use function call structure in NIR lowering") Closes: #15074 Reviewed-by: Konstantin Seurer <konstantin.seurer@gmail.com> (cherry picked from commit5a7f4c62d8) Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/40752>
This commit is contained in:
parent
bb0c3b12b9
commit
5d8b53beea
2 changed files with 6 additions and 6 deletions
|
|
@ -3804,7 +3804,7 @@
|
|||
"description": "radv/rt: only run move_rt_instructions() for CPS shaders",
|
||||
"nominated": true,
|
||||
"nomination_type": 2,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"main_sha": null,
|
||||
"because_sha": "c5d796c902cef0518505bf79b0cdf0c88f1c1d16",
|
||||
"notes": null
|
||||
|
|
|
|||
|
|
@ -409,16 +409,16 @@ radv_rt_nir_to_asm(struct radv_device *device, struct vk_pipeline_cache *cache,
|
|||
stage->info.inline_push_constant_mask = stage->args.ac.inline_push_const_mask;
|
||||
stage->info.type = radv_is_traversal_shader(stage->nir) ? RADV_SHADER_TYPE_RT_TRAVERSAL : RADV_SHADER_TYPE_DEFAULT;
|
||||
|
||||
/* Move ray tracing system values to the top that are set by rt_trace_ray
|
||||
* to prevent them from being overwritten by other rt_trace_ray calls.
|
||||
*/
|
||||
NIR_PASS(_, stage->nir, move_rt_instructions);
|
||||
|
||||
uint32_t num_resume_shaders = 0;
|
||||
nir_shader **resume_shaders = NULL;
|
||||
void *mem_ctx = ralloc_context(NULL);
|
||||
|
||||
if (stage->stage != MESA_SHADER_INTERSECTION && mode == RADV_RT_LOWERING_MODE_CPS) {
|
||||
/* Move ray tracing system values to the top that are set by rt_trace_ray
|
||||
* to prevent them from being overwritten by other rt_trace_ray calls.
|
||||
*/
|
||||
NIR_PASS(_, stage->nir, move_rt_instructions);
|
||||
|
||||
nir_builder b = nir_builder_at(nir_after_impl(nir_shader_get_entrypoint(stage->nir)));
|
||||
nir_rt_return_amd(&b);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue