[PATCH vkd3d 4/6] tests: Add option to select adapter.

Józef Kucia joseph.kucia at gmail.com
Wed Oct 24 06:16:27 CDT 2018


From: Józef Kucia <jkucia at codeweavers.com>

Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
---
 tests/d3d12.c | 51 +++++++++++++++++++++++++++++++++++++--------------
 1 file changed, 37 insertions(+), 14 deletions(-)

diff --git a/tests/d3d12.c b/tests/d3d12.c
index 15cd28241da7..f5104a5e1cd7 100644
--- a/tests/d3d12.c
+++ b/tests/d3d12.c
@@ -826,47 +826,68 @@ static void check_sub_resource_vec4_(unsigned int line, ID3D12Resource *texture,
             got.x, got.y, got.z, got.w, expected->x, expected->y, expected->z, expected->w, x, y);
 }
 
+static bool use_warp_device;
+static unsigned int use_adapter_idx;
+
 #ifdef _WIN32
-static IUnknown *create_warp_adapter(void)
+static IUnknown *create_warp_adapter(IDXGIFactory4 *factory)
 {
-    IDXGIFactory4 *factory;
     IUnknown *adapter;
     HRESULT hr;
 
-    hr = CreateDXGIFactory1(&IID_IDXGIFactory4, (void **)&factory);
-    ok(SUCCEEDED(hr), "Failed to create IDXGIFactory4, hr %#x.\n", hr);
-
     adapter = NULL;
     hr = IDXGIFactory4_EnumWarpAdapter(factory, &IID_IUnknown, (void **)&adapter);
-    IDXGIFactory4_Release(factory);
     if (FAILED(hr))
         trace("Failed to get WARP adapter, hr %#x.\n", hr);
     return adapter;
 }
+
+static IUnknown *create_adapter(void)
+{
+    IUnknown *adapter = NULL;
+    IDXGIFactory4 *factory;
+    HRESULT hr;
+
+    hr = CreateDXGIFactory1(&IID_IDXGIFactory4, (void **)&factory);
+    ok(hr == S_OK, "Failed to create IDXGIFactory4, hr %#x.\n", hr);
+
+    if (use_warp_device && !(adapter = create_warp_adapter(factory)))
+    {
+        IDXGIFactory4_Release(factory);
+        return adapter;
+    }
+
+    if (use_adapter_idx)
+        hr = IDXGIFactory4_EnumAdapters(factory, use_adapter_idx, (IDXGIAdapter **)&adapter);
+    IDXGIFactory4_Release(factory);
+    if (FAILED(hr))
+        trace("Failed to get adapter, hr %#x.\n", hr);
+    return adapter;
+}
 #else
-static IUnknown *create_warp_adapter(void)
+static IUnknown *create_adapter(void)
 {
     return NULL;
 }
 #endif
 
-static bool use_warp_device;
-
 static ID3D12Device *create_device(void)
 {
     IUnknown *adapter = NULL;
     ID3D12Device *device;
+    HRESULT hr;
 
-    if (use_warp_device && !(adapter = create_warp_adapter()))
+    if ((use_warp_device || use_adapter_idx) && !(adapter = create_adapter()))
     {
-        trace("Failed to create WARP device.\n");
+        trace("Failed to create adapter.\n");
         return NULL;
     }
 
-    if (FAILED(D3D12CreateDevice(adapter, D3D_FEATURE_LEVEL_11_0, &IID_ID3D12Device, (void **)&device)))
-        return NULL;
+    hr = D3D12CreateDevice(adapter, D3D_FEATURE_LEVEL_11_0, &IID_ID3D12Device, (void **)&device);
+    if (adapter)
+        IUnknown_Release(adapter);
 
-    return device;
+    return SUCCEEDED(hr) ? device : NULL;
 }
 
 static bool broken_on_warp(bool condition)
@@ -20596,6 +20617,8 @@ START_TEST(d3d12)
             enable_debug_layer = true;
         else if (!strcmp(argv[i], "--warp"))
             use_warp_device = true;
+        else if (!strcmp(argv[i], "--adapter") && i + 1 < argc)
+            use_adapter_idx = atoi(argv[++i]);
     }
 
     if (enable_debug_layer && SUCCEEDED(D3D12GetDebugInterface(&IID_ID3D12Debug, (void **)&debug)))
-- 
2.18.1




More information about the wine-devel mailing list