Conor McCarthy : dxgi/tests: Mark as todo the containing output test if a secondary monitor will cause failure.

Alexandre Julliard julliard at winehq.org
Mon Oct 21 15:28:38 CDT 2019


Module: wine
Branch: master
Commit: 890428abdca8ef027b81cf805ad740158079117d
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=890428abdca8ef027b81cf805ad740158079117d

Author: Conor McCarthy <cmccarthy at codeweavers.com>
Date:   Tue Oct  8 14:13:49 2019 +1000

dxgi/tests: Mark as todo the containing output test if a secondary monitor will cause failure.

Prevents test failure and crash until multi-monitor support is improved.

Signed-off-by: Conor McCarthy <cmccarthy at codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/dxgi/tests/dxgi.c | 23 ++++++++++++++++++++++-
 1 file changed, 22 insertions(+), 1 deletion(-)

diff --git a/dlls/dxgi/tests/dxgi.c b/dlls/dxgi/tests/dxgi.c
index 0f256d4ce2..7a1baa828f 100644
--- a/dlls/dxgi/tests/dxgi.c
+++ b/dlls/dxgi/tests/dxgi.c
@@ -1935,6 +1935,22 @@ done:
     DestroyWindow(creation_desc.OutputWindow);
 }
 
+static HMONITOR get_primary_if_right_side_secondary(const DXGI_OUTPUT_DESC *output_desc)
+{
+    HMONITOR primary, secondary;
+    MONITORINFO mi;
+    POINT pt = {0, 0};
+
+    primary = MonitorFromPoint(pt, MONITOR_DEFAULTTONULL);
+    pt.x = output_desc->DesktopCoordinates.right;
+    secondary = MonitorFromPoint(pt, MONITOR_DEFAULTTONULL);
+    mi.cbSize = sizeof(mi);
+    if (secondary && secondary != primary
+            && GetMonitorInfoW(primary, &mi) && (mi.dwFlags & MONITORINFOF_PRIMARY))
+        return primary;
+    return NULL;
+}
+
 static void test_get_containing_output(void)
 {
     unsigned int output_count, output_idx;
@@ -1949,6 +1965,7 @@ static void test_get_containing_output(void)
     IDXGIDevice *device;
     unsigned int i, j;
     HMONITOR monitor;
+    HMONITOR primary;
     ULONG refcount;
     HRESULT hr;
     BOOL ret;
@@ -2031,6 +2048,8 @@ static void test_get_containing_output(void)
             wine_dbgstr_rect(&output_desc.DesktopCoordinates),
             wine_dbgstr_rect(&monitor_info.rcMonitor));
 
+    primary = get_primary_if_right_side_secondary(&output_desc);
+
     output_idx = 0;
     while ((hr = IDXGIAdapter_EnumOutputs(adapter, output_idx, &output)) != DXGI_ERROR_NOT_FOUND)
     {
@@ -2113,9 +2132,11 @@ static void test_get_containing_output(void)
             ok(ret, "Failed to get monitor info.\n");
 
             hr = IDXGISwapChain_GetContainingOutput(swapchain, &output);
+            /* Hack to prevent test failures with secondary on the right until multi-monitor support is improved. */
+            todo_wine_if(primary && monitor != primary)
             ok(hr == S_OK || broken(hr == DXGI_ERROR_UNSUPPORTED),
                     "Failed to get containing output, hr %#x.\n", hr);
-            if (hr == DXGI_ERROR_UNSUPPORTED)
+            if (hr != S_OK)
                 continue;
             ok(!!output, "Got unexpected containing output %p.\n", output);
             hr = IDXGIOutput_GetDesc(output, &output_desc);




More information about the wine-cvs mailing list