mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2024-11-21 16:46:41 -08:00
vkd3d: Free descriptor range information on error paths in d3d12_root_signature_info_from_desc(). (Valgrind)
Fixes memory leaks in test_create_root_signature().
This commit is contained in:
parent
32dc7ff43b
commit
80e607e3e7
Notes:
Henri Verbeet
2024-08-26 11:30:24 +02:00
Approved-by: Henri Verbeet (@hverbeet) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1011
@ -538,7 +538,7 @@ static HRESULT d3d12_root_signature_info_from_desc(struct d3d12_root_signature_i
|
|||||||
case D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE:
|
case D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE:
|
||||||
if (FAILED(hr = d3d12_root_signature_info_count_descriptors(info,
|
if (FAILED(hr = d3d12_root_signature_info_count_descriptors(info,
|
||||||
p, use_array)))
|
p, use_array)))
|
||||||
return hr;
|
goto done;
|
||||||
++info->cost;
|
++info->cost;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -550,7 +550,7 @@ static HRESULT d3d12_root_signature_info_from_desc(struct d3d12_root_signature_i
|
|||||||
if (FAILED(hr = d3d12_root_signature_info_add_range(info,
|
if (FAILED(hr = d3d12_root_signature_info_add_range(info,
|
||||||
VKD3D_SHADER_DESCRIPTOR_TYPE_CBV, p->ShaderVisibility,
|
VKD3D_SHADER_DESCRIPTOR_TYPE_CBV, p->ShaderVisibility,
|
||||||
p->u.Descriptor.RegisterSpace, p->u.Descriptor.ShaderRegister, 1)))
|
p->u.Descriptor.RegisterSpace, p->u.Descriptor.ShaderRegister, 1)))
|
||||||
return hr;
|
goto done;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case D3D12_ROOT_PARAMETER_TYPE_SRV:
|
case D3D12_ROOT_PARAMETER_TYPE_SRV:
|
||||||
@ -561,7 +561,7 @@ static HRESULT d3d12_root_signature_info_from_desc(struct d3d12_root_signature_i
|
|||||||
if (FAILED(hr = d3d12_root_signature_info_add_range(info,
|
if (FAILED(hr = d3d12_root_signature_info_add_range(info,
|
||||||
VKD3D_SHADER_DESCRIPTOR_TYPE_SRV, p->ShaderVisibility,
|
VKD3D_SHADER_DESCRIPTOR_TYPE_SRV, p->ShaderVisibility,
|
||||||
p->u.Descriptor.RegisterSpace, p->u.Descriptor.ShaderRegister, 1)))
|
p->u.Descriptor.RegisterSpace, p->u.Descriptor.ShaderRegister, 1)))
|
||||||
return hr;
|
goto done;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case D3D12_ROOT_PARAMETER_TYPE_UAV:
|
case D3D12_ROOT_PARAMETER_TYPE_UAV:
|
||||||
@ -572,7 +572,7 @@ static HRESULT d3d12_root_signature_info_from_desc(struct d3d12_root_signature_i
|
|||||||
if (FAILED(hr = d3d12_root_signature_info_add_range(info,
|
if (FAILED(hr = d3d12_root_signature_info_add_range(info,
|
||||||
VKD3D_SHADER_DESCRIPTOR_TYPE_UAV, p->ShaderVisibility,
|
VKD3D_SHADER_DESCRIPTOR_TYPE_UAV, p->ShaderVisibility,
|
||||||
p->u.Descriptor.RegisterSpace, p->u.Descriptor.ShaderRegister, 1)))
|
p->u.Descriptor.RegisterSpace, p->u.Descriptor.ShaderRegister, 1)))
|
||||||
return hr;
|
goto done;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS:
|
case D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS:
|
||||||
@ -581,12 +581,13 @@ static HRESULT d3d12_root_signature_info_from_desc(struct d3d12_root_signature_i
|
|||||||
if (FAILED(hr = d3d12_root_signature_info_add_range(info,
|
if (FAILED(hr = d3d12_root_signature_info_add_range(info,
|
||||||
VKD3D_SHADER_DESCRIPTOR_TYPE_CBV, p->ShaderVisibility,
|
VKD3D_SHADER_DESCRIPTOR_TYPE_CBV, p->ShaderVisibility,
|
||||||
p->u.Constants.RegisterSpace, p->u.Constants.ShaderRegister, 1)))
|
p->u.Constants.RegisterSpace, p->u.Constants.ShaderRegister, 1)))
|
||||||
return hr;
|
goto done;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
FIXME("Unhandled type %#x for parameter %u.\n", p->ParameterType, i);
|
FIXME("Unhandled type %#x for parameter %u.\n", p->ParameterType, i);
|
||||||
return E_NOTIMPL;
|
hr = E_NOTIMPL;
|
||||||
|
goto done;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -600,7 +601,7 @@ static HRESULT d3d12_root_signature_info_from_desc(struct d3d12_root_signature_i
|
|||||||
if (FAILED(hr = d3d12_root_signature_info_add_range(info,
|
if (FAILED(hr = d3d12_root_signature_info_add_range(info,
|
||||||
VKD3D_SHADER_DESCRIPTOR_TYPE_SAMPLER, s->ShaderVisibility,
|
VKD3D_SHADER_DESCRIPTOR_TYPE_SAMPLER, s->ShaderVisibility,
|
||||||
s->RegisterSpace, s->ShaderRegister, 1)))
|
s->RegisterSpace, s->ShaderRegister, 1)))
|
||||||
return hr;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
qsort(info->ranges, info->range_count, sizeof(*info->ranges),
|
qsort(info->ranges, info->range_count, sizeof(*info->ranges),
|
||||||
@ -609,15 +610,17 @@ static HRESULT d3d12_root_signature_info_from_desc(struct d3d12_root_signature_i
|
|||||||
for (i = D3D12_SHADER_VISIBILITY_VERTEX; i <= D3D12_SHADER_VISIBILITY_MESH; ++i)
|
for (i = D3D12_SHADER_VISIBILITY_VERTEX; i <= D3D12_SHADER_VISIBILITY_MESH; ++i)
|
||||||
{
|
{
|
||||||
if (FAILED(hr = d3d12_root_signature_info_range_validate(info->ranges, info->range_count, i)))
|
if (FAILED(hr = d3d12_root_signature_info_range_validate(info->ranges, info->range_count, i)))
|
||||||
return hr;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hr = S_OK;
|
||||||
|
done:
|
||||||
vkd3d_free(info->ranges);
|
vkd3d_free(info->ranges);
|
||||||
info->ranges = NULL;
|
info->ranges = NULL;
|
||||||
info->range_count = 0;
|
info->range_count = 0;
|
||||||
info->range_capacity = 0;
|
info->range_capacity = 0;
|
||||||
|
|
||||||
return S_OK;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT d3d12_root_signature_init_push_constants(struct d3d12_root_signature *root_signature,
|
static HRESULT d3d12_root_signature_init_push_constants(struct d3d12_root_signature *root_signature,
|
||||||
|
Loading…
Reference in New Issue
Block a user