Module: wine Branch: master Commit: db46a1a1b926cb70e9cf2e444781b84c74880a4e URL: https://source.winehq.org/git/wine.git/?a=commit;h=db46a1a1b926cb70e9cf2e444...
Author: Józef Kucia jkucia@codeweavers.com Date: Thu May 31 12:04:39 2018 +0200
dxgi/tests: Add option to use selected adapter.
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
---
dlls/dxgi/tests/device.c | 69 +++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 65 insertions(+), 4 deletions(-)
diff --git a/dlls/dxgi/tests/device.c b/dlls/dxgi/tests/device.c index b8dda1c..8ad4935 100644 --- a/dlls/dxgi/tests/device.c +++ b/dlls/dxgi/tests/device.c @@ -390,15 +390,63 @@ static void compute_expected_swapchain_fullscreen_state_after_fullscreen_change_ } }
-static IDXGIDevice *create_device(UINT flags) +static BOOL use_warp_adapter; +static unsigned int use_adapter_idx; + +static IDXGIAdapter *create_adapter(void) +{ + IDXGIFactory4 *factory4; + IDXGIFactory *factory; + IDXGIAdapter *adapter; + HRESULT hr; + + if (!use_warp_adapter && !use_adapter_idx) + return NULL; + + if (FAILED(hr = CreateDXGIFactory(&IID_IDXGIFactory, (void **)&factory))) + { + trace("Failed to create IDXGIFactory, hr %#x.\n", hr); + return NULL; + } + + adapter = NULL; + if (use_warp_adapter) + { + if (SUCCEEDED(hr = IDXGIFactory_QueryInterface(factory, &IID_IDXGIFactory4, (void **)&factory4))) + { + hr = IDXGIFactory4_EnumWarpAdapter(factory4, &IID_IDXGIAdapter, (void **)&adapter); + IDXGIFactory4_Release(factory4); + } + else + { + trace("Failed to get IDXGIFactory4, hr %#x.\n", hr); + } + } + else + { + hr = IDXGIFactory_EnumAdapters(factory, use_adapter_idx, &adapter); + } + IDXGIFactory_Release(factory); + if (FAILED(hr)) + trace("Failed to get adapter, hr %#x.\n", hr); + return adapter; +} + +static IDXGIDevice *create_device(unsigned int flags) { IDXGIDevice *dxgi_device; ID3D10Device1 *device; + IDXGIAdapter *adapter; HRESULT hr;
- if (SUCCEEDED(D3D10CreateDevice1(NULL, D3D10_DRIVER_TYPE_HARDWARE, NULL, - flags, D3D10_FEATURE_LEVEL_10_0, D3D10_1_SDK_VERSION, &device))) + adapter = create_adapter(); + hr = D3D10CreateDevice1(adapter, D3D10_DRIVER_TYPE_HARDWARE, NULL, + flags, D3D10_FEATURE_LEVEL_10_0, D3D10_1_SDK_VERSION, &device); + if (adapter) + IDXGIAdapter_Release(adapter); + if (SUCCEEDED(hr)) goto success; + if (SUCCEEDED(D3D10CreateDevice1(NULL, D3D10_DRIVER_TYPE_WARP, NULL, flags, D3D10_FEATURE_LEVEL_10_0, D3D10_1_SDK_VERSION, &device))) goto success; @@ -3766,13 +3814,26 @@ static void test_object_wrapping(void)
START_TEST(device) { - HMODULE dxgi_module = GetModuleHandleA("dxgi.dll"); + unsigned int argc, i; + HMODULE dxgi_module; + char **argv; + + dxgi_module = GetModuleHandleA("dxgi.dll"); pCreateDXGIFactory1 = (void *)GetProcAddress(dxgi_module, "CreateDXGIFactory1"); pCreateDXGIFactory2 = (void *)GetProcAddress(dxgi_module, "CreateDXGIFactory2");
registry_mode.dmSize = sizeof(registry_mode); ok(EnumDisplaySettingsW(NULL, ENUM_REGISTRY_SETTINGS, ®istry_mode), "Failed to get display mode.\n");
+ argc = winetest_get_mainargs(&argv); + for (i = 2; i < argc; ++i) + { + if (!strcmp(argv[i], "--warp")) + use_warp_adapter = TRUE; + else if (!strcmp(argv[i], "--adapter") && i + 1 < argc) + use_adapter_idx = atoi(argv[++i]); + } + test_adapter_desc(); test_adapter_luid(); test_check_interface_support();