[PATCH 7/8] dxgi/tests: Add test for creating swapchains with multisampling.

Józef Kucia jkucia at codeweavers.com
Thu May 31 05:04:38 CDT 2018


Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
---
 dlls/dxgi/tests/device.c | 57 +++++++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 52 insertions(+), 5 deletions(-)

diff --git a/dlls/dxgi/tests/device.c b/dlls/dxgi/tests/device.c
index a395a6963aa0..b8dda1c94a06 100644
--- a/dlls/dxgi/tests/device.c
+++ b/dlls/dxgi/tests/device.c
@@ -70,6 +70,22 @@ static HRESULT check_interface_(unsigned int line, void *iface, REFIID iid,
     return hr;
 }
 
+static unsigned int check_multisample_quality_levels(IDXGIDevice *dxgi_device,
+        DXGI_FORMAT format, unsigned int sample_count)
+{
+    ID3D10Device *device;
+    unsigned int levels;
+    HRESULT hr;
+
+    hr = IDXGIDevice_QueryInterface(dxgi_device, &IID_ID3D10Device, (void **)&device);
+    ok(hr == S_OK, "Failed to query ID3D10Device, hr %#x.\n", hr);
+    hr = ID3D10Device_CheckMultisampleQualityLevels(device, format, sample_count, &levels);
+    ok(hr == S_OK, "Failed to check multisample quality levels, hr %#x.\n", hr);
+    ID3D10Device_Release(device);
+
+    return levels;
+}
+
 #define MODE_DESC_IGNORE_RESOLUTION        0x00000001u
 #define MODE_DESC_IGNORE_REFRESH_RATE      0x00000002u
 #define MODE_DESC_IGNORE_FORMAT            0x00000004u
@@ -3213,13 +3229,13 @@ static void test_swapchain_parameters(void)
             0, 0, 640, 480, 0, 0, 0, 0);
 
     hr = IDXGIDevice_QueryInterface(device, &IID_IUnknown, (void **)&obj);
-    ok(SUCCEEDED(hr), "IDXGIDevice does not implement IUnknown.\n");
+    ok(hr == S_OK, "IDXGIDevice does not implement IUnknown.\n");
 
     hr = IDXGIDevice_GetAdapter(device, &adapter);
-    ok(SUCCEEDED(hr), "GetAdapter failed, hr %#x.\n", hr);
-
+    ok(hr == S_OK, "Failed to get adapter, hr %#x.\n", hr);
     hr = IDXGIAdapter_GetParent(adapter, &IID_IDXGIFactory, (void **)&factory);
-    ok(SUCCEEDED(hr), "GetParent failed, hr %#x.\n", hr);
+    ok(hr == S_OK, "Failed to get parent, hr %#x.\n", hr);
+    IDXGIAdapter_Release(adapter);
 
     for (i = 0; i < ARRAY_SIZE(tests); ++i)
     {
@@ -3372,8 +3388,39 @@ static void test_swapchain_parameters(void)
         IDXGISwapChain_Release(swapchain);
     }
 
+    /* multisampling */
+    memset(&desc, 0, sizeof(desc));
+    desc.BufferDesc.Width = registry_mode.dmPelsWidth;
+    desc.BufferDesc.Height = registry_mode.dmPelsHeight;
+    desc.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
+    desc.SampleDesc.Count = 4;
+    desc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
+    desc.BufferCount = 4;
+    desc.OutputWindow = window;
+    desc.Windowed = TRUE;
+    desc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL;
+    hr = IDXGIFactory_CreateSwapChain(factory, obj, &desc, &swapchain);
+    ok(hr == DXGI_ERROR_INVALID_CALL, "Got unexpected hr %#x.\n", hr);
+    desc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_DISCARD;
+    hr = IDXGIFactory_CreateSwapChain(factory, obj, &desc, &swapchain);
+    ok(hr == DXGI_ERROR_INVALID_CALL, "Got unexpected hr %#x.\n", hr);
+    if (check_multisample_quality_levels(device, desc.BufferDesc.Format, desc.SampleDesc.Count))
+    {
+        desc.SwapEffect = DXGI_SWAP_EFFECT_DISCARD;
+        hr = IDXGIFactory_CreateSwapChain(factory, obj, &desc, &swapchain);
+        ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
+        IDXGISwapChain_Release(swapchain);
+        desc.SwapEffect = DXGI_SWAP_EFFECT_SEQUENTIAL;
+        hr = IDXGIFactory_CreateSwapChain(factory, obj, &desc, &swapchain);
+        ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
+        IDXGISwapChain_Release(swapchain);
+    }
+    else
+    {
+        skip("Multisampling not supported for DXGI_FORMAT_R8G8B8A8_UNORM.\n");
+    }
+
     IDXGIFactory_Release(factory);
-    IDXGIAdapter_Release(adapter);
     IUnknown_Release(obj);
     refcount = IDXGIDevice_Release(device);
     ok(!refcount, "Device has %u references left.\n", refcount);
-- 
2.16.1




More information about the wine-devel mailing list