From: Zhiyi Zhang Subject: [PATCH 2/8] dxgi/tests: Fix some test failures in test_find_closest_matching_mode(). Message-Id: Date: Mon, 6 Apr 2020 19:53:11 +0800 DXGI_MODE_SCALING_CENTERED and DXGI_MODE_SCALING_STRETCHED modes may be supported by drivers. When these flags are specified, IDXGIOutput_FindClosestMatchingMode() will try to find a mode matching the scaling field first, which may not be the same as the original mode. So make sure such a mode exists before finding them. Signed-off-by: Zhiyi Zhang --- Fix test failures like in https://test.winehq.org/data/7096ab45444d7b7cbb926b5a51af0cbc46960ed3/win10_newtb-w1064v1809-2scr-32/dxgi:dxgi.html dlls/dxgi/tests/dxgi.c | 42 +++++++++++++++++++++++++----------------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/dlls/dxgi/tests/dxgi.c b/dlls/dxgi/tests/dxgi.c index eb22b0d212b..e2d9907d0ea 100644 --- a/dlls/dxgi/tests/dxgi.c +++ b/dlls/dxgi/tests/dxgi.c @@ -1298,8 +1298,14 @@ static void test_output(void) static void test_find_closest_matching_mode(void) { + static const DXGI_MODE_SCALING scaling_tests[] = + { + DXGI_MODE_SCALING_UNSPECIFIED, + DXGI_MODE_SCALING_CENTERED, + DXGI_MODE_SCALING_STRETCHED + }; DXGI_MODE_DESC *modes, mode, matching_mode; - unsigned int i, mode_count; + unsigned int i, j, mode_count; IDXGIAdapter *adapter; IDXGIDevice *device; IDXGIOutput *output; @@ -1451,23 +1457,25 @@ static void test_find_closest_matching_mode(void) ok(hr == S_OK, "Got unexpected hr %#x.\n", hr); check_mode_desc(&matching_mode, &modes[0], MODE_DESC_CHECK_RESOLUTION & MODE_DESC_CHECK_FORMAT); - memset(&mode, 0, sizeof(mode)); - mode.Width = modes[0].Width; - mode.Height = modes[0].Height; - mode.Format = modes[0].Format; - mode.Scaling = DXGI_MODE_SCALING_CENTERED; - hr = IDXGIOutput_FindClosestMatchingMode(output, &mode, &matching_mode, NULL); - ok(hr == S_OK, "Got unexpected hr %#x.\n", hr); - check_mode_desc(&matching_mode, &modes[0], MODE_DESC_CHECK_RESOLUTION & MODE_DESC_CHECK_FORMAT); + for (i = 0; i < ARRAY_SIZE(scaling_tests); ++i) + { + for (j = 0; j < mode_count; ++j) + { + if (modes[j].Scaling != scaling_tests[i]) + continue; - memset(&mode, 0, sizeof(mode)); - mode.Width = modes[0].Width; - mode.Height = modes[0].Height; - mode.Format = modes[0].Format; - mode.Scaling = DXGI_MODE_SCALING_STRETCHED; - hr = IDXGIOutput_FindClosestMatchingMode(output, &mode, &matching_mode, NULL); - ok(hr == S_OK, "Got unexpected hr %#x.\n", hr); - check_mode_desc(&matching_mode, &modes[0], MODE_DESC_CHECK_RESOLUTION & MODE_DESC_CHECK_FORMAT); + memset(&mode, 0, sizeof(mode)); + mode.Width = modes[j].Width; + mode.Height = modes[j].Height; + mode.Format = modes[j].Format; + mode.Scaling = modes[j].Scaling; + hr = IDXGIOutput_FindClosestMatchingMode(output, &mode, &matching_mode, NULL); + ok(hr == S_OK, "Test %u: Got unexpected hr %#x.\n", i, hr); + check_mode_desc(&matching_mode, &modes[j], + MODE_DESC_IGNORE_REFRESH_RATE | MODE_DESC_IGNORE_SCANLINE_ORDERING); + break; + } + } heap_free(modes); -- 2.20.1