nir_alu_instr *nir_alu_instr_clone(nir_shader *s, const nir_alu_instr *orig);
nir_shader *nir_shader_clone(void *mem_ctx, const nir_shader *s);
+nir_function *nir_function_clone(nir_shader *ns, const nir_function *fxn);
nir_function_impl *nir_function_impl_clone(nir_shader *shader,
const nir_function_impl *fi);
nir_constant *nir_constant_clone(const nir_constant *c, nir_variable *var);
return nfi;
}
-static nir_function *
-clone_function(clone_state *state, const nir_function *fxn, nir_shader *ns)
+nir_function *
+nir_function_clone(nir_shader *ns, const nir_function *fxn)
{
- assert(ns == state->ns);
nir_function *nfxn = nir_function_create(ns, fxn->name);
-
- /* Needed for call instructions */
- add_remap(state, nfxn, fxn);
-
nfxn->num_params = fxn->num_params;
if (fxn->num_params) {
- nfxn->params = ralloc_array(state->ns, nir_parameter, fxn->num_params);
+ nfxn->params = ralloc_array(ns, nir_parameter, fxn->num_params);
memcpy(nfxn->params, fxn->params, sizeof(nir_parameter) * fxn->num_params);
}
nfxn->is_entrypoint = fxn->is_entrypoint;
* function and those will get processed as we clone the function_impls.
* We stop here and do function_impls as a second pass.
*/
+ return nfxn;
+}
+
+static nir_function *
+clone_function(clone_state *state, const nir_function *fxn, nir_shader *ns)
+{
+ assert(ns == state->ns);
+ nir_function *nfxn = nir_function_clone(ns, fxn);
+ /* Needed for call instructions */
+ add_remap(state, nfxn, fxn);
return nfxn;
}