dxgi/tests: Run test_swapchain_resize() on D3D12.

Signed-off-by: Józef Kucia <jkucia@codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Józef Kucia 2018-08-29 12:53:38 +02:00 committed by Alexandre Julliard
parent d10a9faa46
commit f28a82bf57
1 changed files with 159 additions and 107 deletions

View File

@ -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)
{
D3D10_TEXTURE2D_DESC texture_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;
D3D10_TEXTURE2D_DESC texture_desc;
DXGI_SURFACE_DESC surface_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);