Commit bb52c598 authored by Paul Gofman's avatar Paul Gofman Committed by Alexandre Julliard

d3dx9: Factor out free_parameter_data() function.

parent 1bd3cc24
...@@ -502,37 +502,8 @@ static void free_sampler(struct d3dx_sampler *sampler) ...@@ -502,37 +502,8 @@ static void free_sampler(struct d3dx_sampler *sampler)
HeapFree(GetProcessHeap(), 0, sampler->states); HeapFree(GetProcessHeap(), 0, sampler->states);
} }
static void free_parameter(struct d3dx_parameter *param, BOOL element, BOOL child) static void free_parameter_data(struct d3dx_parameter *param, BOOL child)
{ {
unsigned int i;
TRACE("Free parameter %p, name %s, type %s, child %s\n", param, param->name,
debug_d3dxparameter_type(param->type), child ? "yes" : "no");
if (param->param_eval)
{
d3dx_free_param_eval(param->param_eval);
param->param_eval = NULL;
}
if (param->annotations)
{
for (i = 0; i < param->annotation_count; ++i)
free_parameter(&param->annotations[i], FALSE, FALSE);
HeapFree(GetProcessHeap(), 0, param->annotations);
param->annotations = NULL;
}
if (param->members)
{
unsigned int count = param->element_count ? param->element_count : param->member_count;
for (i = 0; i < count; ++i)
free_parameter(&param->members[i], param->element_count != 0, TRUE);
HeapFree(GetProcessHeap(), 0, param->members);
param->members = NULL;
}
if (param->class == D3DXPC_OBJECT && !param->element_count) if (param->class == D3DXPC_OBJECT && !param->element_count)
{ {
switch (param->type) switch (param->type)
...@@ -564,12 +535,38 @@ static void free_parameter(struct d3dx_parameter *param, BOOL element, BOOL chil ...@@ -564,12 +535,38 @@ static void free_parameter(struct d3dx_parameter *param, BOOL element, BOOL chil
break; break;
} }
} }
if (!child) if (!child)
{
HeapFree(GetProcessHeap(), 0, param->data); HeapFree(GetProcessHeap(), 0, param->data);
}
static void free_parameter(struct d3dx_parameter *param, BOOL element, BOOL child)
{
unsigned int i;
TRACE("Free parameter %p, name %s, type %s, element %#x, child %#x.\n", param, param->name,
debug_d3dxparameter_type(param->type), element, child);
if (param->param_eval)
d3dx_free_param_eval(param->param_eval);
if (param->annotations)
{
for (i = 0; i < param->annotation_count; ++i)
free_parameter(&param->annotations[i], FALSE, FALSE);
HeapFree(GetProcessHeap(), 0, param->annotations);
} }
if (param->members)
{
unsigned int count = param->element_count ? param->element_count : param->member_count;
for (i = 0; i < count; ++i)
free_parameter(&param->members[i], param->element_count != 0, TRUE);
HeapFree(GetProcessHeap(), 0, param->members);
}
free_parameter_data(param, child);
/* only the parent has to release name and semantic */ /* only the parent has to release name and semantic */
if (!element) if (!element)
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment