[PATCH 2/8] dxgi/tests: Fix some test failures in test_find_closest_matching_mode().
Zhiyi Zhang
zzhang at codeweavers.com
Mon Apr 6 06:53:11 CDT 2020
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 <zzhang at codeweavers.com>
---
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
More information about the wine-devel
mailing list