[PATCH 5/6] dxgi/tests: Run test_swapchain_resize() on D3D12.

Józef Kucia jkucia at codeweavers.com
Wed Aug 29 05:53:38 CDT 2018


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

diff --git a/dlls/dxgi/tests/dxgi.c b/dlls/dxgi/tests/dxgi.c
index 56065456eb0d..376c1ecd6fdf 100644
--- a/dlls/dxgi/tests/dxgi.c
+++ b/dlls/dxgi/tests/dxgi.c
@@ -3026,38 +3026,105 @@ static void test_private_data(void)
     ok(!refcount, "Test object has %u references left.\n", refcount);
 }
 
-static void test_swapchain_resize(void)
+#define check_surface_desc(a, b) check_surface_desc_(__LINE__, a, b)
+static void check_surface_desc_(unsigned int line, IDXGISurface *surface,
+        const DXGI_SWAP_CHAIN_DESC *swapchain_desc)
+{
+    DXGI_SURFACE_DESC surface_desc;
+    HRESULT hr;
+
+    hr = IDXGISurface_GetDesc(surface, &surface_desc);
+    ok_(__FILE__, line)(hr == S_OK, "Failed to get surface desc, hr %#x.\n", hr);
+    ok_(__FILE__, line)(surface_desc.Width == swapchain_desc->BufferDesc.Width,
+            "Got Width %u, expected %u.\n", surface_desc.Width, swapchain_desc->BufferDesc.Width);
+    ok_(__FILE__, line)(surface_desc.Height == swapchain_desc->BufferDesc.Height,
+            "Got Height %u, expected %u.\n", surface_desc.Height, swapchain_desc->BufferDesc.Height);
+    ok_(__FILE__, line)(surface_desc.Format == swapchain_desc->BufferDesc.Format,
+            "Got Format %#x, expected %#x.\n", surface_desc.Format, swapchain_desc->BufferDesc.Format);
+    ok_(__FILE__, line)(surface_desc.SampleDesc.Count == 1,
+            "Got unexpected SampleDesc.Count %u.\n", surface_desc.SampleDesc.Count);
+    ok_(__FILE__, line)(!surface_desc.SampleDesc.Quality,
+            "Got unexpected SampleDesc.Quality %u.\n", surface_desc.SampleDesc.Quality);
+}
+
+#define check_texture_desc(a, b) check_texture_desc_(__LINE__, a, b)
+static void check_texture_desc_(unsigned int line, ID3D10Texture2D *texture,
+        const DXGI_SWAP_CHAIN_DESC *swapchain_desc)
 {
-    DXGI_SWAP_CHAIN_DESC swapchain_desc;
     D3D10_TEXTURE2D_DESC texture_desc;
-    DXGI_SURFACE_DESC surface_desc;
+
+    ID3D10Texture2D_GetDesc(texture, &texture_desc);
+    ok_(__FILE__, line)(texture_desc.Width == swapchain_desc->BufferDesc.Width,
+            "Got Width %u, expected %u.\n", texture_desc.Width, swapchain_desc->BufferDesc.Width);
+    ok_(__FILE__, line)(texture_desc.Height == swapchain_desc->BufferDesc.Height,
+            "Got Height %u, expected %u.\n", texture_desc.Height, swapchain_desc->BufferDesc.Height);
+    ok_(__FILE__, line)(texture_desc.MipLevels == 1, "Got unexpected MipLevels %u.\n", texture_desc.MipLevels);
+    ok_(__FILE__, line)(texture_desc.ArraySize == 1, "Got unexpected ArraySize %u.\n", texture_desc.ArraySize);
+    ok_(__FILE__, line)(texture_desc.Format == swapchain_desc->BufferDesc.Format,
+            "Got Format %#x, expected %#x.\n", texture_desc.Format, swapchain_desc->BufferDesc.Format);
+    ok_(__FILE__, line)(texture_desc.SampleDesc.Count == 1,
+            "Got unexpected SampleDesc.Count %u.\n", texture_desc.SampleDesc.Count);
+    ok_(__FILE__, line)(!texture_desc.SampleDesc.Quality,
+            "Got unexpected SampleDesc.Quality %u.\n", texture_desc.SampleDesc.Quality);
+    ok_(__FILE__, line)(texture_desc.Usage == D3D10_USAGE_DEFAULT,
+            "Got unexpected Usage %#x.\n", texture_desc.Usage);
+    ok_(__FILE__, line)(texture_desc.BindFlags == D3D10_BIND_RENDER_TARGET,
+            "Got unexpected BindFlags %#x.\n", texture_desc.BindFlags);
+    ok_(__FILE__, line)(!texture_desc.CPUAccessFlags,
+            "Got unexpected CPUAccessFlags %#x.\n", texture_desc.CPUAccessFlags);
+    ok_(__FILE__, line)(!texture_desc.MiscFlags, "Got unexpected MiscFlags %#x.\n", texture_desc.MiscFlags);
+}
+
+#define check_resource_desc(a, b) check_resource_desc_(__LINE__, a, b)
+static void check_resource_desc_(unsigned int line, ID3D12Resource *resource,
+        const DXGI_SWAP_CHAIN_DESC *swapchain_desc)
+{
+    D3D12_RESOURCE_DESC resource_desc;
+
+    resource_desc = ID3D12Resource_GetDesc(resource);
+    ok_(__FILE__, line)(resource_desc.Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE2D,
+            "Got unexpected Dimension %#x.\n", resource_desc.Dimension);
+    ok_(__FILE__, line)(resource_desc.Width == swapchain_desc->BufferDesc.Width, "Got Width %s, expected %u.\n",
+            wine_dbgstr_longlong(resource_desc.Width), swapchain_desc->BufferDesc.Width);
+    ok_(__FILE__, line)(resource_desc.Height == swapchain_desc->BufferDesc.Height,
+            "Got Height %u, expected %u.\n", resource_desc.Height, swapchain_desc->BufferDesc.Height);
+    ok_(__FILE__, line)(resource_desc.DepthOrArraySize == 1,
+            "Got unexpected DepthOrArraySize %u.\n", resource_desc.DepthOrArraySize);
+    ok_(__FILE__, line)(resource_desc.MipLevels == 1,
+            "Got unexpected MipLevels %u.\n", resource_desc.MipLevels);
+    ok_(__FILE__, line)(resource_desc.Format == swapchain_desc->BufferDesc.Format,
+            "Got Format %#x, expected %#x.\n", resource_desc.Format, swapchain_desc->BufferDesc.Format);
+    ok_(__FILE__, line)(resource_desc.SampleDesc.Count == 1,
+            "Got unexpected SampleDesc.Count %u.\n", resource_desc.SampleDesc.Count);
+    ok_(__FILE__, line)(!resource_desc.SampleDesc.Quality,
+            "Got unexpected SampleDesc.Quality %u.\n", resource_desc.SampleDesc.Quality);
+    ok_(__FILE__, line)(resource_desc.Layout == D3D12_TEXTURE_LAYOUT_UNKNOWN,
+            "Got unexpected Layout %#x.\n", resource_desc.Layout);
+}
+
+static void test_swapchain_resize(IUnknown *device, BOOL is_d3d12)
+{
+    DXGI_SWAP_CHAIN_DESC swapchain_desc;
+    DXGI_SWAP_EFFECT swap_effect;
     IDXGISwapChain *swapchain;
+    ID3D12Resource *resource;
     ID3D10Texture2D *texture;
+    HRESULT hr, expected_hr;
     IDXGISurface *surface;
-    IDXGIAdapter *adapter;
     IDXGIFactory *factory;
-    IDXGIDevice *device;
     RECT client_rect, r;
     ULONG refcount;
     HWND window;
-    HRESULT hr;
     BOOL ret;
 
-    if (!(device = create_device(0)))
-    {
-        skip("Failed to create device, skipping tests.\n");
-        return;
-    }
+    get_factory(device, is_d3d12, &factory);
+
     window = CreateWindowA("static", "dxgi_test", WS_OVERLAPPEDWINDOW | WS_VISIBLE,
             0, 0, 640, 480, NULL, NULL, NULL, NULL);
     ret = GetClientRect(window, &client_rect);
     ok(ret, "Failed to get client rect.\n");
 
-    hr = IDXGIDevice_GetAdapter(device, &adapter);
-    ok(SUCCEEDED(hr), "Failed to get adapter, hr %#x.\n", hr);
-    hr = IDXGIAdapter_GetParent(adapter, &IID_IDXGIFactory, (void **)&factory);
-    ok(SUCCEEDED(hr), "Failed to get factory, hr %#x.\n", hr);
-    IDXGIAdapter_Release(adapter);
+    swap_effect = is_d3d12 ? DXGI_SWAP_EFFECT_FLIP_DISCARD : DXGI_SWAP_EFFECT_DISCARD;
 
     swapchain_desc.BufferDesc.Width = 640;
     swapchain_desc.BufferDesc.Height = 480;
@@ -3069,19 +3136,25 @@ static void test_swapchain_resize(void)
     swapchain_desc.SampleDesc.Count = 1;
     swapchain_desc.SampleDesc.Quality = 0;
     swapchain_desc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
-    swapchain_desc.BufferCount = 1;
+    swapchain_desc.BufferCount = 2;
     swapchain_desc.OutputWindow = window;
     swapchain_desc.Windowed = TRUE;
-    swapchain_desc.SwapEffect = DXGI_SWAP_EFFECT_DISCARD;
+    swapchain_desc.SwapEffect = swap_effect;
     swapchain_desc.Flags = 0;
 
-    hr = IDXGIFactory_CreateSwapChain(factory, (IUnknown *)device, &swapchain_desc, &swapchain);
-    ok(SUCCEEDED(hr), "Failed to create swapchain, hr %#x.\n", hr);
-    IDXGIFactory_Release(factory);
+    hr = IDXGIFactory_CreateSwapChain(factory, device, &swapchain_desc, &swapchain);
+    ok(hr == S_OK, "Failed to create swapchain, hr %#x.\n", hr);
     hr = IDXGISwapChain_GetBuffer(swapchain, 0, &IID_IDXGISurface, (void **)&surface);
-    ok(SUCCEEDED(hr), "Failed to get buffer, hr %#x.\n", hr);
+    expected_hr = is_d3d12 ? E_NOINTERFACE : S_OK;
+    ok(hr == expected_hr, "Got hr %#x, expected %#x.\n", hr, expected_hr);
+    ok(!surface || hr == S_OK, "Got unexpected pointer %p.\n", surface);
     hr = IDXGISwapChain_GetBuffer(swapchain, 0, &IID_ID3D10Texture2D, (void **)&texture);
-    ok(SUCCEEDED(hr), "Failed to get buffer, hr %#x.\n", hr);
+    ok(hr == expected_hr, "Got hr %#x, expected %#x.\n", hr, expected_hr);
+    ok(!texture || hr == S_OK, "Got unexpected pointer %p.\n", texture);
+    expected_hr = is_d3d12 ? S_OK : E_NOINTERFACE;
+    hr = IDXGISwapChain_GetBuffer(swapchain, 0, &IID_ID3D12Resource, (void **)&resource);
+    ok(hr == expected_hr, "Got hr %#x, expected %#x.\n", hr, expected_hr);
+    ok(!resource || hr == S_OK, "Got unexpected pointer %p.\n", resource);
 
     ret = GetClientRect(window, &r);
     ok(ret, "Failed to get client rect.\n");
@@ -3113,39 +3186,25 @@ static void test_swapchain_resize(void)
             "Got unexpected SampleDesc.Quality %u.\n", swapchain_desc.SampleDesc.Quality);
     ok(swapchain_desc.BufferUsage == DXGI_USAGE_RENDER_TARGET_OUTPUT,
             "Got unexpected BufferUsage %#x.\n", swapchain_desc.BufferUsage);
-    ok(swapchain_desc.BufferCount == 1,
+    ok(swapchain_desc.BufferCount == 2,
             "Got unexpected BufferCount %u.\n", swapchain_desc.BufferCount);
     ok(swapchain_desc.OutputWindow == window,
             "Got unexpected OutputWindow %p, expected %p.\n", swapchain_desc.OutputWindow, window);
     ok(swapchain_desc.Windowed,
             "Got unexpected Windowed %#x.\n", swapchain_desc.Windowed);
-    ok(swapchain_desc.SwapEffect == DXGI_SWAP_EFFECT_DISCARD,
+    ok(swapchain_desc.SwapEffect == swap_effect,
             "Got unexpected SwapEffect %#x.\n", swapchain_desc.SwapEffect);
     ok(!swapchain_desc.Flags,
             "Got unexpected Flags %#x.\n", swapchain_desc.Flags);
 
-    hr = IDXGISurface_GetDesc(surface, &surface_desc);
-    ok(SUCCEEDED(hr), "Failed to get surface desc, hr %#x.\n", hr);
-    ok(surface_desc.Width == 640, "Got unexpected Width %u.\n", surface_desc.Width);
-    ok(surface_desc.Height == 480, "Got unexpected Height %u.\n", surface_desc.Height);
-    ok(surface_desc.Format == DXGI_FORMAT_R8G8B8A8_UNORM, "Got unexpected Format %#x.\n", surface_desc.Format);
-    ok(surface_desc.SampleDesc.Count == 1, "Got unexpected SampleDesc.Count %u.\n", surface_desc.SampleDesc.Count);
-    ok(!surface_desc.SampleDesc.Quality, "Got unexpected SampleDesc.Quality %u.\n", surface_desc.SampleDesc.Quality);
+    if (surface)
+        check_surface_desc(surface, &swapchain_desc);
+    if (texture)
+        check_texture_desc(texture, &swapchain_desc);
+    if (resource)
+        check_resource_desc(resource, &swapchain_desc);
 
-    ID3D10Texture2D_GetDesc(texture, &texture_desc);
-    ok(texture_desc.Width == 640, "Got unexpected Width %u.\n", texture_desc.Width);
-    ok(texture_desc.Height == 480, "Got unexpected Height %u.\n", texture_desc.Height);
-    ok(texture_desc.MipLevels == 1, "Got unexpected MipLevels %u.\n", texture_desc.MipLevels);
-    ok(texture_desc.ArraySize == 1, "Got unexpected ArraySize %u.\n", texture_desc.ArraySize);
-    ok(texture_desc.Format == DXGI_FORMAT_R8G8B8A8_UNORM, "Got unexpected Format %#x.\n", texture_desc.Format);
-    ok(texture_desc.SampleDesc.Count == 1, "Got unexpected SampleDesc.Count %u.\n", texture_desc.SampleDesc.Count);
-    ok(!texture_desc.SampleDesc.Quality, "Got unexpected SampleDesc.Quality %u.\n", texture_desc.SampleDesc.Quality);
-    ok(texture_desc.Usage == D3D10_USAGE_DEFAULT, "Got unexpected Usage %#x.\n", texture_desc.Usage);
-    ok(texture_desc.BindFlags == D3D10_BIND_RENDER_TARGET, "Got unexpected BindFlags %#x.\n", texture_desc.BindFlags);
-    ok(!texture_desc.CPUAccessFlags, "Got unexpected CPUAccessFlags %#x.\n", texture_desc.CPUAccessFlags);
-    ok(!texture_desc.MiscFlags, "Got unexpected MiscFlags %#x.\n", texture_desc.MiscFlags);
-
-    hr = IDXGISwapChain_ResizeBuffers(swapchain, 1, 320, 240, DXGI_FORMAT_R8G8B8A8_UNORM_SRGB, 0);
+    hr = IDXGISwapChain_ResizeBuffers(swapchain, 2, 320, 240, DXGI_FORMAT_B8G8R8A8_UNORM, 0);
     ok(hr == DXGI_ERROR_INVALID_CALL, "Got unexpected hr %#x.\n", hr);
 
     ret = GetClientRect(window, &r);
@@ -3178,46 +3237,46 @@ static void test_swapchain_resize(void)
             "Got unexpected SampleDesc.Quality %u.\n", swapchain_desc.SampleDesc.Quality);
     ok(swapchain_desc.BufferUsage == DXGI_USAGE_RENDER_TARGET_OUTPUT,
             "Got unexpected BufferUsage %#x.\n", swapchain_desc.BufferUsage);
-    ok(swapchain_desc.BufferCount == 1,
+    ok(swapchain_desc.BufferCount == 2,
             "Got unexpected BufferCount %u.\n", swapchain_desc.BufferCount);
     ok(swapchain_desc.OutputWindow == window,
             "Got unexpected OutputWindow %p, expected %p.\n", swapchain_desc.OutputWindow, window);
     ok(swapchain_desc.Windowed,
             "Got unexpected Windowed %#x.\n", swapchain_desc.Windowed);
-    ok(swapchain_desc.SwapEffect == DXGI_SWAP_EFFECT_DISCARD,
+    ok(swapchain_desc.SwapEffect == swap_effect,
             "Got unexpected SwapEffect %#x.\n", swapchain_desc.SwapEffect);
     ok(!swapchain_desc.Flags,
             "Got unexpected Flags %#x.\n", swapchain_desc.Flags);
 
-    hr = IDXGISurface_GetDesc(surface, &surface_desc);
-    ok(SUCCEEDED(hr), "Failed to get surface desc, hr %#x.\n", hr);
-    ok(surface_desc.Width == 640, "Got unexpected Width %u.\n", surface_desc.Width);
-    ok(surface_desc.Height == 480, "Got unexpected Height %u.\n", surface_desc.Height);
-    ok(surface_desc.Format == DXGI_FORMAT_R8G8B8A8_UNORM, "Got unexpected Format %#x.\n", surface_desc.Format);
-    ok(surface_desc.SampleDesc.Count == 1, "Got unexpected SampleDesc.Count %u.\n", surface_desc.SampleDesc.Count);
-    ok(!surface_desc.SampleDesc.Quality, "Got unexpected SampleDesc.Quality %u.\n", surface_desc.SampleDesc.Quality);
+    if (surface)
+    {
+        check_surface_desc(surface, &swapchain_desc);
+        IDXGISurface_Release(surface);
+    }
+    if (texture)
+    {
+        check_texture_desc(texture, &swapchain_desc);
+        ID3D10Texture2D_Release(texture);
+    }
+    if (resource)
+    {
+        check_resource_desc(resource, &swapchain_desc);
+        ID3D12Resource_Release(resource);
+    }
 
-    ID3D10Texture2D_GetDesc(texture, &texture_desc);
-    ok(texture_desc.Width == 640, "Got unexpected Width %u.\n", texture_desc.Width);
-    ok(texture_desc.Height == 480, "Got unexpected Height %u.\n", texture_desc.Height);
-    ok(texture_desc.MipLevels == 1, "Got unexpected MipLevels %u.\n", texture_desc.MipLevels);
-    ok(texture_desc.ArraySize == 1, "Got unexpected ArraySize %u.\n", texture_desc.ArraySize);
-    ok(texture_desc.Format == DXGI_FORMAT_R8G8B8A8_UNORM, "Got unexpected Format %#x.\n", texture_desc.Format);
-    ok(texture_desc.SampleDesc.Count == 1, "Got unexpected SampleDesc.Count %u.\n", texture_desc.SampleDesc.Count);
-    ok(!texture_desc.SampleDesc.Quality, "Got unexpected SampleDesc.Quality %u.\n", texture_desc.SampleDesc.Quality);
-    ok(texture_desc.Usage == D3D10_USAGE_DEFAULT, "Got unexpected Usage %#x.\n", texture_desc.Usage);
-    ok(texture_desc.BindFlags == D3D10_BIND_RENDER_TARGET, "Got unexpected BindFlags %#x.\n", texture_desc.BindFlags);
-    ok(!texture_desc.CPUAccessFlags, "Got unexpected CPUAccessFlags %#x.\n", texture_desc.CPUAccessFlags);
-    ok(!texture_desc.MiscFlags, "Got unexpected MiscFlags %#x.\n", texture_desc.MiscFlags);
-
-    ID3D10Texture2D_Release(texture);
-    IDXGISurface_Release(surface);
-    hr = IDXGISwapChain_ResizeBuffers(swapchain, 1, 320, 240, DXGI_FORMAT_R8G8B8A8_UNORM_SRGB, 0);
-    ok(SUCCEEDED(hr), "Failed to resize buffers, hr %#x.\n", hr);
+    hr = IDXGISwapChain_ResizeBuffers(swapchain, 2, 320, 240, DXGI_FORMAT_B8G8R8A8_UNORM, 0);
+    ok(hr == S_OK, "Failed to resize buffers, hr %#x.\n", hr);
     hr = IDXGISwapChain_GetBuffer(swapchain, 0, &IID_IDXGISurface, (void **)&surface);
-    ok(SUCCEEDED(hr), "Failed to get buffer, hr %#x.\n", hr);
+    expected_hr = is_d3d12 ? E_NOINTERFACE : S_OK;
+    ok(hr == expected_hr, "Got hr %#x, expected %#x.\n", hr, expected_hr);
+    ok(!surface || hr == S_OK, "Got unexpected pointer %p.\n", surface);
     hr = IDXGISwapChain_GetBuffer(swapchain, 0, &IID_ID3D10Texture2D, (void **)&texture);
-    ok(SUCCEEDED(hr), "Failed to get buffer, hr %#x.\n", hr);
+    ok(hr == expected_hr, "Got hr %#x, expected %#x.\n", hr, expected_hr);
+    ok(!texture || hr == S_OK, "Got unexpected pointer %p.\n", texture);
+    expected_hr = is_d3d12 ? S_OK : E_NOINTERFACE;
+    hr = IDXGISwapChain_GetBuffer(swapchain, 0, &IID_ID3D12Resource, (void **)&resource);
+    ok(hr == expected_hr, "Got hr %#x, expected %#x.\n", hr, expected_hr);
+    ok(!resource || hr == S_OK, "Got unexpected pointer %p.\n", resource);
 
     ret = GetClientRect(window, &r);
     ok(ret, "Failed to get client rect.\n");
@@ -3237,7 +3296,7 @@ static void test_swapchain_resize(void)
     ok(swapchain_desc.BufferDesc.RefreshRate.Denominator == 1,
             "Got unexpected BufferDesc.RefreshRate.Denominator %u.\n",
             swapchain_desc.BufferDesc.RefreshRate.Denominator);
-    ok(swapchain_desc.BufferDesc.Format == DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
+    ok(swapchain_desc.BufferDesc.Format == DXGI_FORMAT_B8G8R8A8_UNORM,
             "Got unexpected BufferDesc.Format %#x.\n", swapchain_desc.BufferDesc.Format);
     ok(swapchain_desc.BufferDesc.ScanlineOrdering == DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED,
             "Got unexpected BufferDesc.ScanlineOrdering %#x.\n", swapchain_desc.BufferDesc.ScanlineOrdering);
@@ -3249,43 +3308,35 @@ static void test_swapchain_resize(void)
             "Got unexpected SampleDesc.Quality %u.\n", swapchain_desc.SampleDesc.Quality);
     ok(swapchain_desc.BufferUsage == DXGI_USAGE_RENDER_TARGET_OUTPUT,
             "Got unexpected BufferUsage %#x.\n", swapchain_desc.BufferUsage);
-    ok(swapchain_desc.BufferCount == 1,
+    ok(swapchain_desc.BufferCount == 2,
             "Got unexpected BufferCount %u.\n", swapchain_desc.BufferCount);
     ok(swapchain_desc.OutputWindow == window,
             "Got unexpected OutputWindow %p, expected %p.\n", swapchain_desc.OutputWindow, window);
     ok(swapchain_desc.Windowed,
             "Got unexpected Windowed %#x.\n", swapchain_desc.Windowed);
-    ok(swapchain_desc.SwapEffect == DXGI_SWAP_EFFECT_DISCARD,
+    ok(swapchain_desc.SwapEffect == swap_effect,
             "Got unexpected SwapEffect %#x.\n", swapchain_desc.SwapEffect);
     ok(!swapchain_desc.Flags,
             "Got unexpected Flags %#x.\n", swapchain_desc.Flags);
 
-    hr = IDXGISurface_GetDesc(surface, &surface_desc);
-    ok(SUCCEEDED(hr), "Failed to get surface desc, hr %#x.\n", hr);
-    ok(surface_desc.Width == 320, "Got unexpected Width %u.\n", surface_desc.Width);
-    ok(surface_desc.Height == 240, "Got unexpected Height %u.\n", surface_desc.Height);
-    ok(surface_desc.Format == DXGI_FORMAT_R8G8B8A8_UNORM_SRGB, "Got unexpected Format %#x.\n", surface_desc.Format);
-    ok(surface_desc.SampleDesc.Count == 1, "Got unexpected SampleDesc.Count %u.\n", surface_desc.SampleDesc.Count);
-    ok(!surface_desc.SampleDesc.Quality, "Got unexpected SampleDesc.Quality %u.\n", surface_desc.SampleDesc.Quality);
-
-    ID3D10Texture2D_GetDesc(texture, &texture_desc);
-    ok(texture_desc.Width == 320, "Got unexpected Width %u.\n", texture_desc.Width);
-    ok(texture_desc.Height == 240, "Got unexpected Height %u.\n", texture_desc.Height);
-    ok(texture_desc.MipLevels == 1, "Got unexpected MipLevels %u.\n", texture_desc.MipLevels);
-    ok(texture_desc.ArraySize == 1, "Got unexpected ArraySize %u.\n", texture_desc.ArraySize);
-    ok(texture_desc.Format == DXGI_FORMAT_R8G8B8A8_UNORM_SRGB, "Got unexpected Format %#x.\n", texture_desc.Format);
-    ok(texture_desc.SampleDesc.Count == 1, "Got unexpected SampleDesc.Count %u.\n", texture_desc.SampleDesc.Count);
-    ok(!texture_desc.SampleDesc.Quality, "Got unexpected SampleDesc.Quality %u.\n", texture_desc.SampleDesc.Quality);
-    ok(texture_desc.Usage == D3D10_USAGE_DEFAULT, "Got unexpected Usage %#x.\n", texture_desc.Usage);
-    ok(texture_desc.BindFlags == D3D10_BIND_RENDER_TARGET, "Got unexpected BindFlags %#x.\n", texture_desc.BindFlags);
-    ok(!texture_desc.CPUAccessFlags, "Got unexpected CPUAccessFlags %#x.\n", texture_desc.CPUAccessFlags);
-    ok(!texture_desc.MiscFlags, "Got unexpected MiscFlags %#x.\n", texture_desc.MiscFlags);
-
-    ID3D10Texture2D_Release(texture);
-    IDXGISurface_Release(surface);
+    if (surface)
+    {
+        check_surface_desc(surface, &swapchain_desc);
+        IDXGISurface_Release(surface);
+    }
+    if (texture)
+    {
+        check_texture_desc(texture, &swapchain_desc);
+        ID3D10Texture2D_Release(texture);
+    }
+    if (resource)
+    {
+        check_resource_desc(resource, &swapchain_desc);
+        ID3D12Resource_Release(resource);
+    }
 
     hr = IDXGISwapChain_ResizeBuffers(swapchain, 0, 0, 0, DXGI_FORMAT_UNKNOWN, 0);
-    ok(SUCCEEDED(hr), "Failed to resize buffers, hr %#x.\n", hr);
+    ok(hr == S_OK, "Failed to resize buffers, hr %#x.\n", hr);
 
     memset(&swapchain_desc, 0, sizeof(swapchain_desc));
     hr = IDXGISwapChain_GetDesc(swapchain, &swapchain_desc);
@@ -3302,7 +3353,7 @@ static void test_swapchain_resize(void)
     ok(swapchain_desc.BufferDesc.RefreshRate.Denominator == 1,
             "Got unexpected BufferDesc.RefreshRate.Denominator %u.\n",
             swapchain_desc.BufferDesc.RefreshRate.Denominator);
-    ok(swapchain_desc.BufferDesc.Format == DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
+    ok(swapchain_desc.BufferDesc.Format == DXGI_FORMAT_B8G8R8A8_UNORM,
             "Got unexpected BufferDesc.Format %#x.\n", swapchain_desc.BufferDesc.Format);
     ok(swapchain_desc.BufferDesc.ScanlineOrdering == DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED,
             "Got unexpected BufferDesc.ScanlineOrdering %#x.\n", swapchain_desc.BufferDesc.ScanlineOrdering);
@@ -3314,21 +3365,21 @@ static void test_swapchain_resize(void)
             "Got unexpected SampleDesc.Quality %u.\n", swapchain_desc.SampleDesc.Quality);
     ok(swapchain_desc.BufferUsage == DXGI_USAGE_RENDER_TARGET_OUTPUT,
             "Got unexpected BufferUsage %#x.\n", swapchain_desc.BufferUsage);
-    ok(swapchain_desc.BufferCount == 1,
+    ok(swapchain_desc.BufferCount == 2,
             "Got unexpected BufferCount %u.\n", swapchain_desc.BufferCount);
     ok(swapchain_desc.OutputWindow == window,
             "Got unexpected OutputWindow %p, expected %p.\n", swapchain_desc.OutputWindow, window);
     ok(swapchain_desc.Windowed,
             "Got unexpected Windowed %#x.\n", swapchain_desc.Windowed);
-    ok(swapchain_desc.SwapEffect == DXGI_SWAP_EFFECT_DISCARD,
+    ok(swapchain_desc.SwapEffect == swap_effect,
             "Got unexpected SwapEffect %#x.\n", swapchain_desc.SwapEffect);
     ok(!swapchain_desc.Flags,
             "Got unexpected Flags %#x.\n", swapchain_desc.Flags);
 
     IDXGISwapChain_Release(swapchain);
-    refcount = IDXGIDevice_Release(device);
-    ok(!refcount, "Device has %u references left.\n", refcount);
     DestroyWindow(window);
+    refcount = IDXGIFactory_Release(factory);
+    ok(refcount == !is_d3d12, "Got unexpected refcount %u.\n", refcount);
 }
 
 static void test_swapchain_parameters(void)
@@ -4143,7 +4194,6 @@ START_TEST(dxgi)
     queue_test(test_get_containing_output);
     queue_test(test_create_factory);
     queue_test(test_private_data);
-    queue_test(test_swapchain_resize);
     queue_test(test_swapchain_present);
     queue_test(test_maximum_frame_latency);
     queue_test(test_output_desc);
@@ -4158,6 +4208,7 @@ START_TEST(dxgi)
     test_resize_target();
     test_inexact_modes();
     test_swapchain_parameters();
+    run_on_d3d10(test_swapchain_resize);
     run_on_d3d10(test_swapchain_backbuffer_index);
 
     if (!(d3d12_module = LoadLibraryA("d3d12.dll")))
@@ -4175,6 +4226,7 @@ START_TEST(dxgi)
         ID3D12Debug_Release(debug);
     }
 
+    run_on_d3d12(test_swapchain_resize);
     run_on_d3d12(test_swapchain_backbuffer_index);
 
     FreeLibrary(d3d12_module);
-- 
2.16.4




More information about the wine-devel mailing list