mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-01-28 13:05:02 -08:00
libs/vkd3d: Implement creating root signature from bytecode.
This commit is contained in:
parent
6b9c3b8971
commit
5b5cffcf84
@ -1273,14 +1273,7 @@ static HRESULT STDMETHODCALLTYPE d3d12_device_CreateRootSignature(ID3D12Device *
|
|||||||
if (node_mask && node_mask != 1)
|
if (node_mask && node_mask != 1)
|
||||||
FIXME("Ignoring node mask 0x%08x.\n", node_mask);
|
FIXME("Ignoring node mask 0x%08x.\n", node_mask);
|
||||||
|
|
||||||
if (bytecode_length != ~(SIZE_T)0)
|
if (FAILED(hr = d3d12_root_signature_create(device, bytecode, bytecode_length, &object)))
|
||||||
{
|
|
||||||
FIXME("Root signature byte code not supported.\n");
|
|
||||||
return E_NOTIMPL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (FAILED(hr = d3d12_root_signature_create(device,
|
|
||||||
(const D3D12_ROOT_SIGNATURE_DESC *)bytecode, &object)))
|
|
||||||
return hr;
|
return hr;
|
||||||
|
|
||||||
return return_interface((IUnknown *)&object->ID3D12RootSignature_iface,
|
return return_interface((IUnknown *)&object->ID3D12RootSignature_iface,
|
||||||
|
@ -1001,15 +1001,33 @@ fail:
|
|||||||
}
|
}
|
||||||
|
|
||||||
HRESULT d3d12_root_signature_create(struct d3d12_device *device,
|
HRESULT d3d12_root_signature_create(struct d3d12_device *device,
|
||||||
const D3D12_ROOT_SIGNATURE_DESC *desc, struct d3d12_root_signature **root_signature)
|
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;
|
||||||
struct d3d12_root_signature *object;
|
struct d3d12_root_signature *object;
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
|
|
||||||
if (!(object = vkd3d_malloc(sizeof(*object))))
|
if (bytecode_length == ~(SIZE_T)0)
|
||||||
return E_OUTOFMEMORY;
|
{
|
||||||
|
root_signature_desc = *(const D3D12_ROOT_SIGNATURE_DESC *)bytecode;
|
||||||
|
}
|
||||||
|
else if (FAILED(hr = vkd3d_shader_parse_root_signature(&dxbc, &root_signature_desc)))
|
||||||
|
{
|
||||||
|
WARN("Failed to parse root signature, hr %#x.\n", hr);
|
||||||
|
return hr;
|
||||||
|
}
|
||||||
|
|
||||||
if (FAILED(hr = d3d12_root_signature_init(object, device, desc)))
|
if (!(object = vkd3d_malloc(sizeof(*object))))
|
||||||
|
{
|
||||||
|
vkd3d_shader_free_root_signature(&root_signature_desc);
|
||||||
|
return E_OUTOFMEMORY;
|
||||||
|
}
|
||||||
|
|
||||||
|
hr = d3d12_root_signature_init(object, device, &root_signature_desc);
|
||||||
|
if (bytecode_length != ~(SIZE_T)0)
|
||||||
|
vkd3d_shader_free_root_signature(&root_signature_desc);
|
||||||
|
if (FAILED(hr))
|
||||||
{
|
{
|
||||||
vkd3d_free(object);
|
vkd3d_free(object);
|
||||||
return hr;
|
return hr;
|
||||||
|
@ -394,8 +394,8 @@ struct d3d12_root_signature
|
|||||||
struct d3d12_device *device;
|
struct d3d12_device *device;
|
||||||
};
|
};
|
||||||
|
|
||||||
HRESULT d3d12_root_signature_create(struct d3d12_device *device,
|
HRESULT d3d12_root_signature_create(struct d3d12_device *device, const void *bytecode,
|
||||||
const D3D12_ROOT_SIGNATURE_DESC *desc, struct d3d12_root_signature **root_signature) DECLSPEC_HIDDEN;
|
size_t bytecode_length, struct d3d12_root_signature **root_signature) DECLSPEC_HIDDEN;
|
||||||
struct d3d12_root_signature *unsafe_impl_from_ID3D12RootSignature(ID3D12RootSignature *iface) DECLSPEC_HIDDEN;
|
struct d3d12_root_signature *unsafe_impl_from_ID3D12RootSignature(ID3D12RootSignature *iface) DECLSPEC_HIDDEN;
|
||||||
|
|
||||||
struct d3d12_graphics_pipeline_state
|
struct d3d12_graphics_pipeline_state
|
||||||
|
Loading…
x
Reference in New Issue
Block a user