libs/vkd3d-shader: Remove dependency on D3D12 headers.

We would like to allow building libvkd3d-shader as a standalone library
without our Direct3D translation layers.

In the long term, it should be possible to build and use libvkd3d-shader
without Win32 data types, Vulkan headers and libs.

Signed-off-by: Józef Kucia <jkucia@codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Józef Kucia
2018-02-15 15:43:51 +01:00
committed by Alexandre Julliard
parent 4c35737940
commit fddf86e6ea
5 changed files with 325 additions and 139 deletions

View File

@@ -1006,11 +1006,15 @@ HRESULT d3d12_root_signature_create(struct d3d12_device *device,
const void *bytecode, size_t bytecode_length, struct d3d12_root_signature **root_signature)
{
const struct vkd3d_shader_code dxbc = {bytecode, bytecode_length};
D3D12_ROOT_SIGNATURE_DESC root_signature_desc;
union
{
D3D12_ROOT_SIGNATURE_DESC d3d12;
struct vkd3d_root_signature_desc vkd3d;
} root_signature_desc;
struct d3d12_root_signature *object;
HRESULT hr;
if (FAILED(hr = vkd3d_shader_parse_root_signature(&dxbc, &root_signature_desc)))
if (FAILED(hr = vkd3d_shader_parse_root_signature(&dxbc, &root_signature_desc.vkd3d)))
{
WARN("Failed to parse root signature, hr %#x.\n", hr);
return hr;
@@ -1018,12 +1022,12 @@ HRESULT d3d12_root_signature_create(struct d3d12_device *device,
if (!(object = vkd3d_malloc(sizeof(*object))))
{
vkd3d_shader_free_root_signature(&root_signature_desc);
vkd3d_shader_free_root_signature(&root_signature_desc.vkd3d);
return E_OUTOFMEMORY;
}
hr = d3d12_root_signature_init(object, device, &root_signature_desc);
vkd3d_shader_free_root_signature(&root_signature_desc);
hr = d3d12_root_signature_init(object, device, &root_signature_desc.d3d12);
vkd3d_shader_free_root_signature(&root_signature_desc.vkd3d);
if (FAILED(hr))
{
vkd3d_free(object);

View File

@@ -79,7 +79,11 @@ struct d3d12_root_signature_deserializer
ID3D12RootSignatureDeserializer ID3D12RootSignatureDeserializer_iface;
LONG refcount;
D3D12_ROOT_SIGNATURE_DESC desc;
union
{
D3D12_ROOT_SIGNATURE_DESC d3d12;
struct vkd3d_root_signature_desc vkd3d;
} desc;
};
static struct d3d12_root_signature_deserializer *impl_from_ID3D12RootSignatureDeserializer(
@@ -128,7 +132,7 @@ static ULONG STDMETHODCALLTYPE d3d12_root_signature_deserializer_Release(ID3D12R
if (!refcount)
{
vkd3d_shader_free_root_signature(&deserializer->desc);
vkd3d_shader_free_root_signature(&deserializer->desc.vkd3d);
vkd3d_free(deserializer);
}
@@ -142,7 +146,7 @@ static const D3D12_ROOT_SIGNATURE_DESC * STDMETHODCALLTYPE d3d12_root_signature_
TRACE("iface %p.\n", iface);
return &deserializer->desc;
return &deserializer->desc.d3d12;
}
static const struct ID3D12RootSignatureDeserializerVtbl d3d12_root_signature_deserializer_vtbl =
@@ -163,7 +167,7 @@ static HRESULT d3d12_root_signature_deserializer_init(struct d3d12_root_signatur
deserializer->ID3D12RootSignatureDeserializer_iface.lpVtbl = &d3d12_root_signature_deserializer_vtbl;
deserializer->refcount = 1;
if (FAILED(hr = vkd3d_shader_parse_root_signature(dxbc, &deserializer->desc)))
if (FAILED(hr = vkd3d_shader_parse_root_signature(dxbc, &deserializer->desc.vkd3d)))
{
WARN("Failed to parse root signature, hr %#x.\n", hr);
return hr;
@@ -331,7 +335,8 @@ HRESULT vkd3d_serialize_root_signature(const D3D12_ROOT_SIGNATURE_DESC *root_sig
*error_blob = NULL;
}
if (FAILED(hr = vkd3d_shader_serialize_root_signature(root_signature_desc,
if (FAILED(hr = vkd3d_shader_serialize_root_signature(
(const struct vkd3d_root_signature_desc *)root_signature_desc,
(enum vkd3d_root_signature_version)version, &dxbc)))
{
WARN("Failed to serialize root signature, hr %#x.\n", hr);