nir: fix nir_shader_clone() and nir_sweep()
These were broken in e1af20f18a when the info field in nir_shader was
turned into a pointer.
Clone was copying the pointer rather than the data and nir_sweep was
cleaning up shader_info rather than claiming it.
Reviewed-by: Eric Anholt <eric@anholt.net>
This commit is contained in:
@@ -710,7 +710,7 @@ nir_shader_clone(void *mem_ctx, const nir_shader *s)
|
||||
clone_reg_list(&state, &ns->registers, &s->registers);
|
||||
ns->reg_alloc = s->reg_alloc;
|
||||
|
||||
ns->info = s->info;
|
||||
*ns->info = *s->info;
|
||||
ns->info->name = ralloc_strdup(ns, ns->info->name);
|
||||
if (ns->info->label)
|
||||
ns->info->label = ralloc_strdup(ns, ns->info->label);
|
||||
|
||||
@@ -150,9 +150,17 @@ nir_sweep(nir_shader *nir)
|
||||
{
|
||||
void *rubbish = ralloc_context(NULL);
|
||||
|
||||
/* The shader may not own shader_info so check first */
|
||||
bool steal_info = false;
|
||||
if (nir == ralloc_parent(nir->info))
|
||||
steal_info = true;
|
||||
|
||||
/* First, move ownership of all the memory to a temporary context; assume dead. */
|
||||
ralloc_adopt(rubbish, nir);
|
||||
|
||||
if (steal_info)
|
||||
ralloc_steal(nir, nir->info);
|
||||
|
||||
ralloc_steal(nir, (char *)nir->info->name);
|
||||
if (nir->info->label)
|
||||
ralloc_steal(nir, (char *)nir->info->label);
|
||||
|
||||
Reference in New Issue
Block a user