diff --git a/.pick_status.json b/.pick_status.json index e70c60553e0..e2b5d88c836 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -202,7 +202,7 @@ "description": "nir: Fix shader calls with nir_opt_dead_write_vars.", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "master_sha": null, "because_sha": "5a2889327970ce2e7f342c357efb50fa25c2a5e4" }, diff --git a/src/compiler/nir/nir_opt_dead_write_vars.c b/src/compiler/nir/nir_opt_dead_write_vars.c index dc9414e05e2..aaa87667e13 100644 --- a/src/compiler/nir/nir_opt_dead_write_vars.c +++ b/src/compiler/nir/nir_opt_dead_write_vars.c @@ -169,6 +169,20 @@ remove_dead_write_vars_local(void *mem_ctx, nir_shader *shader, nir_block *block break; } + case nir_intrinsic_execute_callable: { + /* Mark payload as it can be used by the callee */ + nir_deref_instr *src = nir_src_as_deref(intrin->src[1]); + clear_unused_for_read(&unused_writes, src); + break; + } + + case nir_intrinsic_trace_ray: { + /* Mark payload as it can be used by the callees */ + nir_deref_instr *src = nir_src_as_deref(intrin->src[10]); + clear_unused_for_read(&unused_writes, src); + break; + } + case nir_intrinsic_load_deref: { nir_deref_instr *src = nir_src_as_deref(intrin->src[0]); if (nir_deref_mode_must_be(src, nir_var_read_only_modes))