nir: Use deref intrinsics to set writes_memory when gathering info
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4815>
This commit is contained in:

committed by
Marge Bot

parent
d50069ab08
commit
d89c28d314
@@ -279,6 +279,20 @@ try_mask_partial_io(nir_shader *shader, nir_variable *var,
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
update_memory_written_for_deref(nir_shader *shader, nir_deref_instr *deref)
|
||||||
|
{
|
||||||
|
switch (deref->mode) {
|
||||||
|
case nir_var_mem_ssbo:
|
||||||
|
case nir_var_mem_global:
|
||||||
|
shader->info.writes_memory = true;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
/* Nothing to do. */
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gather_intrinsic_info(nir_intrinsic_instr *instr, nir_shader *shader,
|
gather_intrinsic_info(nir_intrinsic_instr *instr, nir_shader *shader,
|
||||||
void *dead_ctx)
|
void *dead_ctx)
|
||||||
@@ -326,6 +340,8 @@ gather_intrinsic_info(nir_intrinsic_instr *instr, nir_shader *shader,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (instr->intrinsic == nir_intrinsic_store_deref)
|
||||||
|
update_memory_written_for_deref(shader, deref);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -471,6 +487,19 @@ gather_intrinsic_info(nir_intrinsic_instr *instr, nir_shader *shader,
|
|||||||
shader->info.writes_memory = true;
|
shader->info.writes_memory = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case nir_intrinsic_deref_atomic_add:
|
||||||
|
case nir_intrinsic_deref_atomic_imin:
|
||||||
|
case nir_intrinsic_deref_atomic_umin:
|
||||||
|
case nir_intrinsic_deref_atomic_imax:
|
||||||
|
case nir_intrinsic_deref_atomic_umax:
|
||||||
|
case nir_intrinsic_deref_atomic_and:
|
||||||
|
case nir_intrinsic_deref_atomic_or:
|
||||||
|
case nir_intrinsic_deref_atomic_xor:
|
||||||
|
case nir_intrinsic_deref_atomic_exchange:
|
||||||
|
case nir_intrinsic_deref_atomic_comp_swap:
|
||||||
|
update_memory_written_for_deref(shader, nir_src_as_deref(instr->src[0]));
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user