From: Rémi Bernon rbernon@codeweavers.com
Some games specifically ignore the last adapter from the adapter list, as it's always WARP on Windows. This makes them fail to detect GPUs correctly on Wine, as they drop one of the reported adapters.
Signed-off-by: Rémi Bernon rbernon@codeweavers.com Signed-off-by: Zhiyi Zhang zzhang@codeweavers.com --- v2: Minor changes, mostly style.
dlls/dxgi/tests/dxgi.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+)
diff --git a/dlls/dxgi/tests/dxgi.c b/dlls/dxgi/tests/dxgi.c index ce1aee5ee3b..f69ef425aac 100644 --- a/dlls/dxgi/tests/dxgi.c +++ b/dlls/dxgi/tests/dxgi.c @@ -5326,9 +5326,12 @@ static void test_multi_adapter(void) unsigned int output_count = 0, expected_output_count = 0; unsigned int adapter_index, output_index, device_index; DXGI_OUTPUT_DESC old_output_desc, output_desc; + DXGI_ADAPTER_DESC1 adapter_desc1; + DXGI_ADAPTER_DESC adapter_desc; DISPLAY_DEVICEW display_device; MONITORINFO monitor_info; DEVMODEW old_mode, mode; + IDXGIAdapter1 *adapter1; IDXGIFactory *factory; IDXGIAdapter *adapter; IDXGIOutput *output; @@ -5530,6 +5533,40 @@ static void test_multi_adapter(void) IDXGIAdapter_Release(adapter); }
+ /* Win8+ always have a WARP adapter present at the end */ + todo_wine ok(adapter_index >= 2, "Unexpected adapter count %u.\n", adapter_index); + + hr = IDXGIFactory_EnumAdapters(factory, adapter_index - 1, &adapter); + ok(SUCCEEDED(hr), "Failed to get the last adapter %u, hr %#x.\n", adapter_index - 1, hr); + hr = IDXGIAdapter_GetDesc(adapter, &adapter_desc); + ok(SUCCEEDED(hr), "GetDesc failed, hr %#x.\n", hr); + todo_wine ok(!lstrcmpW(adapter_desc.Description, L"Microsoft Basic Render Driver"), + "Unexpected name for the last adapter %s.\n", wine_dbgstr_w(adapter_desc.Description)); + todo_wine ok(adapter_desc.VendorId == 0x1414, "Expected VendorId 0x1414, got %#x.\n", + adapter_desc.VendorId); + todo_wine ok(adapter_desc.DeviceId == 0x008c, "Expected DeviceId 0x008c, got %#x.\n", + adapter_desc.DeviceId); + ok(adapter_desc.SubSysId == 0x0000, "Expected SubSysId 0x0000, got %#x.\n", + adapter_desc.SubSysId); + ok(adapter_desc.Revision == 0x0000, "Expected Revision 0x0000, got %#x.\n", + adapter_desc.Revision); + todo_wine ok(adapter_desc.DedicatedVideoMemory == 0, + "Expected DedicatedVideoMemory 0, got %#lx.\n", adapter_desc.DedicatedVideoMemory); + ok(adapter_desc.DedicatedSystemMemory == 0, "Expected DedicatedSystemMemory 0, got %#lx.\n", + adapter_desc.DedicatedSystemMemory); + + hr = IDXGIAdapter_QueryInterface(adapter, &IID_IDXGIAdapter1, (void **)&adapter1); + ok(SUCCEEDED(hr) || broken(hr == E_NOINTERFACE), "Got unexpected hr %#x.\n", hr); + if (SUCCEEDED(hr)) + { + hr = IDXGIAdapter1_GetDesc1(adapter1, &adapter_desc1); + ok(SUCCEEDED(hr), "GetDesc1 failed, hr %#x.\n", hr); + todo_wine ok(adapter_desc1.Flags == DXGI_ADAPTER_FLAG_SOFTWARE, + "Expected flags DXGI_ADAPTER_FLAG_SOFTWARE, got %#x.\n", adapter_desc1.Flags); + IDXGIAdapter1_Release(adapter1); + } + + IDXGIAdapter_Release(adapter); IDXGIFactory_Release(factory);
expected_output_count = GetSystemMetrics(SM_CMONITORS);
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=79527
Your paranoid android.
=== w2008s64 (32 bit report) ===
dxgi: dxgi.c:5607: Test failed: Got unexpected message 0x1a, hwnd 000700F4, wparam 0x18, lparam 0x7e518.
On Wed, 30 Sep 2020 at 12:59, Zhiyi Zhang zzhang@codeweavers.com wrote:
@@ -5530,6 +5533,40 @@ static void test_multi_adapter(void) IDXGIAdapter_Release(adapter); }
- /* Win8+ always have a WARP adapter present at the end */
- todo_wine ok(adapter_index >= 2, "Unexpected adapter count %u.\n", adapter_index);
As predicted, this fails here on Windows 7.
On 9/30/20 1:47 PM, Henri Verbeet wrote:
On Wed, 30 Sep 2020 at 12:59, Zhiyi Zhang zzhang@codeweavers.com wrote:
@@ -5530,6 +5533,40 @@ static void test_multi_adapter(void) IDXGIAdapter_Release(adapter); }
- /* Win8+ always have a WARP adapter present at the end */
- todo_wine ok(adapter_index >= 2, "Unexpected adapter count %u.\n", adapter_index);
As predicted, this fails here on Windows 7.
I guess a broken/win_skip would be appropriate?.