push 07a2b33f792746135ccf34a3b3e1dfb2a3c1e823
[wine/hacks.git] / dlls / dxgi / tests / device.c
blob7f22bb4bcd5e43bcefd64399367d8596596305d9
1 /*
2 * Copyright 2008 Henri Verbeet for CodeWeavers
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19 #define COBJMACROS
20 #include "initguid.h"
21 #include "d3d10.h"
22 #include "wine/test.h"
24 HRESULT WINAPI DXGID3D10CreateDevice(HMODULE d3d10core, IDXGIFactory *factory,
25 IDXGIAdapter *adapter, UINT flags, DWORD arg5, void **device);
27 static IDXGIDevice *create_device(HMODULE d3d10core)
29 IDXGIDevice *dxgi_device = NULL;
30 IDXGIFactory *factory = NULL;
31 IDXGIAdapter *adapter = NULL;
32 IUnknown *device = NULL;
33 HRESULT hr;
35 hr = CreateDXGIFactory(&IID_IDXGIFactory, (void *)&factory);
36 ok(SUCCEEDED(hr), "CreateDXGIFactory failed, hr %#x\n", hr);
37 if (FAILED(hr)) goto cleanup;
39 hr = IDXGIFactory_EnumAdapters(factory, 0, &adapter);
40 ok(SUCCEEDED(hr), "EnumAdapters failed, hr %#x\n", hr);
41 if (FAILED(hr)) goto cleanup;
43 hr = DXGID3D10CreateDevice(d3d10core, factory, adapter, 0, 0, (void **)&device);
44 if (FAILED(hr))
46 HMODULE d3d10ref;
48 trace("Failed to create a HW device, trying REF\n");
49 IDXGIAdapter_Release(adapter);
50 adapter = NULL;
52 d3d10ref = LoadLibraryA("d3d10ref.dll");
53 if (!d3d10ref)
55 trace("d3d10ref.dll not available, unable to create a REF device\n");
56 goto cleanup;
59 hr = IDXGIFactory_CreateSoftwareAdapter(factory, d3d10ref, &adapter);
60 FreeLibrary(d3d10ref);
61 ok(SUCCEEDED(hr), "CreateSoftwareAdapter failed, hr %#x\n", hr);
62 if (FAILED(hr)) goto cleanup;
64 hr = DXGID3D10CreateDevice(d3d10core, factory, adapter, 0, 0, (void **)&device);
65 ok(SUCCEEDED(hr), "Failed to create a REF device, hr %#x\n", hr);
66 if (FAILED(hr)) goto cleanup;
69 hr = IUnknown_QueryInterface(device, &IID_IDXGIDevice, (void **)&dxgi_device);
70 ok(SUCCEEDED(hr), "Created device does not implement IDXGIDevice\n");
71 IUnknown_Release(device);
73 cleanup:
74 if (adapter) IDXGIAdapter_Release(adapter);
75 if (factory) IDXGIFactory_Release(factory);
77 return dxgi_device;
80 static void test_device_interfaces(IDXGIDevice *device)
82 IUnknown *obj;
83 HRESULT hr;
85 if (SUCCEEDED(hr = IDXGIDevice_QueryInterface(device, &IID_IUnknown, (void **)&obj)))
86 IUnknown_Release(obj);
87 ok(SUCCEEDED(hr), "IDXGIDevice does not implement IUnknown\n");
89 if (SUCCEEDED(hr = IDXGIDevice_QueryInterface(device, &IID_IDXGIObject, (void **)&obj)))
90 IUnknown_Release(obj);
91 ok(SUCCEEDED(hr), "IDXGIDevice does not implement IDXGIObject\n");
93 if (SUCCEEDED(hr = IDXGIDevice_QueryInterface(device, &IID_IDXGIDevice, (void **)&obj)))
94 IUnknown_Release(obj);
95 ok(SUCCEEDED(hr), "IDXGIDevice does not implement IDXGIDevice\n");
97 if (SUCCEEDED(hr = IDXGIDevice_QueryInterface(device, &IID_ID3D10Device, (void **)&obj)))
98 IUnknown_Release(obj);
99 ok(SUCCEEDED(hr), "IDXGIDevice does not implement ID3D10Device\n");
102 START_TEST(device)
104 HMODULE d3d10core = LoadLibraryA("d3d10core.dll");
105 IDXGIDevice *device;
106 ULONG refcount;
108 if (!d3d10core)
110 win_skip("d3d10core.dll not available, skipping tests\n");
111 return;
114 device = create_device(d3d10core);
115 if (!device)
117 skip("Failed to create device, skipping tests\n");
118 FreeLibrary(d3d10core);
119 return;
122 test_device_interfaces(device);
124 refcount = IDXGIDevice_Release(device);
125 ok(!refcount, "Device has %u references left\n", refcount);
126 FreeLibrary(d3d10core);