nir_foreach_instr_safe(instr, block) {
if (instr->type == nir_instr_type_call) {
clear_unused_for_modes(&unused_writes, nir_var_shader_out |
- nir_var_global |
- nir_var_local |
- nir_var_shader_storage |
- nir_var_shared);
+ nir_var_shader_temp |
+ nir_var_function_temp |
+ nir_var_mem_ssbo |
+ nir_var_mem_shared |
+ nir_var_mem_global);
continue;
}
nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr);
switch (intrin->intrinsic) {
- case nir_intrinsic_barrier:
+ case nir_intrinsic_control_barrier:
case nir_intrinsic_memory_barrier: {
clear_unused_for_modes(&unused_writes, nir_var_shader_out |
- nir_var_shader_storage |
- nir_var_shared);
+ nir_var_mem_ssbo |
+ nir_var_mem_shared |
+ nir_var_mem_global);
+ break;
+ }
+
+ case nir_intrinsic_memory_barrier_buffer:
+ clear_unused_for_modes(&unused_writes, nir_var_mem_ssbo |
+ nir_var_mem_global);
+ break;
+
+ case nir_intrinsic_memory_barrier_shared:
+ clear_unused_for_modes(&unused_writes, nir_var_mem_shared);
+ break;
+
+ case nir_intrinsic_memory_barrier_tcs_patch:
+ clear_unused_for_modes(&unused_writes, nir_var_shader_out);
+ break;
+
+ case nir_intrinsic_scoped_memory_barrier: {
+ if (nir_intrinsic_memory_semantics(intrin) & NIR_MEMORY_RELEASE) {
+ clear_unused_for_modes(&unused_writes,
+ nir_intrinsic_memory_modes(intrin));
+ }
break;
}