Module: vkd3d Branch: master Commit: 9ce53b74df1b6417a9e1dd9bdbf5f422a9172dee URL: https://source.winehq.org/git/vkd3d.git/?a=commit;h=9ce53b74df1b6417a9e1dd9b...
Author: Józef Kucia jkucia@codeweavers.com Date: Thu Jul 19 14:47:42 2018 +0200
libs/vkd3d: Return S_FALSE from D3D12CreateDevice() when device is NULL.
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
---
libs/vkd3d/vkd3d_main.c | 8 +++++++- tests/d3d12.c | 3 +++ 2 files changed, 10 insertions(+), 1 deletion(-)
diff --git a/libs/vkd3d/vkd3d_main.c b/libs/vkd3d/vkd3d_main.c index 97d642a..0e2d422 100644 --- a/libs/vkd3d/vkd3d_main.c +++ b/libs/vkd3d/vkd3d_main.c @@ -28,7 +28,7 @@ HRESULT vkd3d_create_device(const struct vkd3d_device_create_info *create_info,
TRACE("create_info %p, iid %s, device %p.\n", create_info, debugstr_guid(iid), device);
- if (!create_info || !device) + if (!create_info) return E_INVALIDARG; if (create_info->type != VKD3D_STRUCTURE_TYPE_DEVICE_CREATE_INFO) { @@ -76,6 +76,12 @@ HRESULT vkd3d_create_device(const struct vkd3d_device_create_info *create_info, if (FAILED(hr)) return hr;
+ if (!device) + { + ID3D12Device_Release(&object->ID3D12Device_iface); + return S_FALSE; + } + return return_interface((IUnknown *)&object->ID3D12Device_iface, &IID_ID3D12Device, iid, device); } diff --git a/tests/d3d12.c b/tests/d3d12.c index 6128a40..e2337c4 100644 --- a/tests/d3d12.c +++ b/tests/d3d12.c @@ -1080,6 +1080,9 @@ static void test_create_device(void) ok(hr == S_OK, "Failed to create device, hr %#x.\n", hr); ID3D12Device_Release(device);
+ hr = D3D12CreateDevice(NULL, D3D_FEATURE_LEVEL_11_0, &IID_ID3D12Device, NULL); + ok(hr == S_FALSE, "Got unexpected hr %#x.\n", hr); + hr = D3D12CreateDevice(NULL, D3D_FEATURE_LEVEL_9_1, &IID_ID3D12Device, (void **)&device); ok(hr == E_INVALIDARG, "Got unexpected hr %#x.\n", hr); hr = D3D12CreateDevice(NULL, D3D_FEATURE_LEVEL_9_2, &IID_ID3D12Device, (void **)&device);