nir: Fix shader calls with nir_opt_dead_write_vars.
authorBas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Wed, 31 Mar 2021 00:41:15 +0000 (02:41 +0200)
committerMarge Bot <eric+marge@anholt.net>
Thu, 8 Apr 2021 11:10:52 +0000 (11:10 +0000)
Fixes: 5a288932797 ("spirv,nir: Add ray-tracing intrinsics")
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10096>

src/compiler/nir/nir_opt_dead_write_vars.c

index dc9414e..aaa8766 100644 (file)
@@ -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))