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:
parent
d10a9faa46
commit
f28a82bf57
|
@ -3026,38 +3026,105 @@ static void test_private_data(void)
|
||||||
ok(!refcount, "Test object has %u references left.\n", refcount);
|
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;
|
DXGI_SWAP_CHAIN_DESC swapchain_desc;
|
||||||
D3D10_TEXTURE2D_DESC texture_desc;
|
DXGI_SWAP_EFFECT swap_effect;
|
||||||
DXGI_SURFACE_DESC surface_desc;
|
|
||||||
IDXGISwapChain *swapchain;
|
IDXGISwapChain *swapchain;
|
||||||
|
ID3D12Resource *resource;
|
||||||
ID3D10Texture2D *texture;
|
ID3D10Texture2D *texture;
|
||||||
|
HRESULT hr, expected_hr;
|
||||||
IDXGISurface *surface;
|
IDXGISurface *surface;
|
||||||
IDXGIAdapter *adapter;
|
|
||||||
IDXGIFactory *factory;
|
IDXGIFactory *factory;
|
||||||
IDXGIDevice *device;
|
|
||||||
RECT client_rect, r;
|
RECT client_rect, r;
|
||||||
ULONG refcount;
|
ULONG refcount;
|
||||||
HWND window;
|
HWND window;
|
||||||
HRESULT hr;
|
|
||||||
BOOL ret;
|
BOOL ret;
|
||||||
|
|
||||||
if (!(device = create_device(0)))
|
get_factory(device, is_d3d12, &factory);
|
||||||
{
|
|
||||||
skip("Failed to create device, skipping tests.\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
window = CreateWindowA("static", "dxgi_test", WS_OVERLAPPEDWINDOW | WS_VISIBLE,
|
window = CreateWindowA("static", "dxgi_test", WS_OVERLAPPEDWINDOW | WS_VISIBLE,
|
||||||
0, 0, 640, 480, NULL, NULL, NULL, NULL);
|
0, 0, 640, 480, NULL, NULL, NULL, NULL);
|
||||||
ret = GetClientRect(window, &client_rect);
|
ret = GetClientRect(window, &client_rect);
|
||||||
ok(ret, "Failed to get client rect.\n");
|
ok(ret, "Failed to get client rect.\n");
|
||||||
|
|
||||||
hr = IDXGIDevice_GetAdapter(device, &adapter);
|
swap_effect = is_d3d12 ? DXGI_SWAP_EFFECT_FLIP_DISCARD : DXGI_SWAP_EFFECT_DISCARD;
|
||||||
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);
|
|
||||||
|
|
||||||
swapchain_desc.BufferDesc.Width = 640;
|
swapchain_desc.BufferDesc.Width = 640;
|
||||||
swapchain_desc.BufferDesc.Height = 480;
|
swapchain_desc.BufferDesc.Height = 480;
|
||||||
|
@ -3069,19 +3136,25 @@ static void test_swapchain_resize(void)
|
||||||
swapchain_desc.SampleDesc.Count = 1;
|
swapchain_desc.SampleDesc.Count = 1;
|
||||||
swapchain_desc.SampleDesc.Quality = 0;
|
swapchain_desc.SampleDesc.Quality = 0;
|
||||||
swapchain_desc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
|
swapchain_desc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
|
||||||
swapchain_desc.BufferCount = 1;
|
swapchain_desc.BufferCount = 2;
|
||||||
swapchain_desc.OutputWindow = window;
|
swapchain_desc.OutputWindow = window;
|
||||||
swapchain_desc.Windowed = TRUE;
|
swapchain_desc.Windowed = TRUE;
|
||||||
swapchain_desc.SwapEffect = DXGI_SWAP_EFFECT_DISCARD;
|
swapchain_desc.SwapEffect = swap_effect;
|
||||||
swapchain_desc.Flags = 0;
|
swapchain_desc.Flags = 0;
|
||||||
|
|
||||||
hr = IDXGIFactory_CreateSwapChain(factory, (IUnknown *)device, &swapchain_desc, &swapchain);
|
hr = IDXGIFactory_CreateSwapChain(factory, device, &swapchain_desc, &swapchain);
|
||||||
ok(SUCCEEDED(hr), "Failed to create swapchain, hr %#x.\n", hr);
|
ok(hr == S_OK, "Failed to create swapchain, hr %#x.\n", hr);
|
||||||
IDXGIFactory_Release(factory);
|
|
||||||
hr = IDXGISwapChain_GetBuffer(swapchain, 0, &IID_IDXGISurface, (void **)&surface);
|
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);
|
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);
|
ret = GetClientRect(window, &r);
|
||||||
ok(ret, "Failed to get client rect.\n");
|
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);
|
"Got unexpected SampleDesc.Quality %u.\n", swapchain_desc.SampleDesc.Quality);
|
||||||
ok(swapchain_desc.BufferUsage == DXGI_USAGE_RENDER_TARGET_OUTPUT,
|
ok(swapchain_desc.BufferUsage == DXGI_USAGE_RENDER_TARGET_OUTPUT,
|
||||||
"Got unexpected BufferUsage %#x.\n", swapchain_desc.BufferUsage);
|
"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);
|
"Got unexpected BufferCount %u.\n", swapchain_desc.BufferCount);
|
||||||
ok(swapchain_desc.OutputWindow == window,
|
ok(swapchain_desc.OutputWindow == window,
|
||||||
"Got unexpected OutputWindow %p, expected %p.\n", swapchain_desc.OutputWindow, window);
|
"Got unexpected OutputWindow %p, expected %p.\n", swapchain_desc.OutputWindow, window);
|
||||||
ok(swapchain_desc.Windowed,
|
ok(swapchain_desc.Windowed,
|
||||||
"Got unexpected Windowed %#x.\n", 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);
|
"Got unexpected SwapEffect %#x.\n", swapchain_desc.SwapEffect);
|
||||||
ok(!swapchain_desc.Flags,
|
ok(!swapchain_desc.Flags,
|
||||||
"Got unexpected Flags %#x.\n", swapchain_desc.Flags);
|
"Got unexpected Flags %#x.\n", swapchain_desc.Flags);
|
||||||
|
|
||||||
hr = IDXGISurface_GetDesc(surface, &surface_desc);
|
if (surface)
|
||||||
ok(SUCCEEDED(hr), "Failed to get surface desc, hr %#x.\n", hr);
|
check_surface_desc(surface, &swapchain_desc);
|
||||||
ok(surface_desc.Width == 640, "Got unexpected Width %u.\n", surface_desc.Width);
|
if (texture)
|
||||||
ok(surface_desc.Height == 480, "Got unexpected Height %u.\n", surface_desc.Height);
|
check_texture_desc(texture, &swapchain_desc);
|
||||||
ok(surface_desc.Format == DXGI_FORMAT_R8G8B8A8_UNORM, "Got unexpected Format %#x.\n", surface_desc.Format);
|
if (resource)
|
||||||
ok(surface_desc.SampleDesc.Count == 1, "Got unexpected SampleDesc.Count %u.\n", surface_desc.SampleDesc.Count);
|
check_resource_desc(resource, &swapchain_desc);
|
||||||
ok(!surface_desc.SampleDesc.Quality, "Got unexpected SampleDesc.Quality %u.\n", surface_desc.SampleDesc.Quality);
|
|
||||||
|
|
||||||
ID3D10Texture2D_GetDesc(texture, &texture_desc);
|
hr = IDXGISwapChain_ResizeBuffers(swapchain, 2, 320, 240, DXGI_FORMAT_B8G8R8A8_UNORM, 0);
|
||||||
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);
|
|
||||||
ok(hr == DXGI_ERROR_INVALID_CALL, "Got unexpected hr %#x.\n", hr);
|
ok(hr == DXGI_ERROR_INVALID_CALL, "Got unexpected hr %#x.\n", hr);
|
||||||
|
|
||||||
ret = GetClientRect(window, &r);
|
ret = GetClientRect(window, &r);
|
||||||
|
@ -3178,46 +3237,46 @@ static void test_swapchain_resize(void)
|
||||||
"Got unexpected SampleDesc.Quality %u.\n", swapchain_desc.SampleDesc.Quality);
|
"Got unexpected SampleDesc.Quality %u.\n", swapchain_desc.SampleDesc.Quality);
|
||||||
ok(swapchain_desc.BufferUsage == DXGI_USAGE_RENDER_TARGET_OUTPUT,
|
ok(swapchain_desc.BufferUsage == DXGI_USAGE_RENDER_TARGET_OUTPUT,
|
||||||
"Got unexpected BufferUsage %#x.\n", swapchain_desc.BufferUsage);
|
"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);
|
"Got unexpected BufferCount %u.\n", swapchain_desc.BufferCount);
|
||||||
ok(swapchain_desc.OutputWindow == window,
|
ok(swapchain_desc.OutputWindow == window,
|
||||||
"Got unexpected OutputWindow %p, expected %p.\n", swapchain_desc.OutputWindow, window);
|
"Got unexpected OutputWindow %p, expected %p.\n", swapchain_desc.OutputWindow, window);
|
||||||
ok(swapchain_desc.Windowed,
|
ok(swapchain_desc.Windowed,
|
||||||
"Got unexpected Windowed %#x.\n", 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);
|
"Got unexpected SwapEffect %#x.\n", swapchain_desc.SwapEffect);
|
||||||
ok(!swapchain_desc.Flags,
|
ok(!swapchain_desc.Flags,
|
||||||
"Got unexpected Flags %#x.\n", swapchain_desc.Flags);
|
"Got unexpected Flags %#x.\n", swapchain_desc.Flags);
|
||||||
|
|
||||||
hr = IDXGISurface_GetDesc(surface, &surface_desc);
|
if (surface)
|
||||||
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);
|
check_surface_desc(surface, &swapchain_desc);
|
||||||
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);
|
|
||||||
|
|
||||||
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);
|
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);
|
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, 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);
|
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);
|
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);
|
ret = GetClientRect(window, &r);
|
||||||
ok(ret, "Failed to get client rect.\n");
|
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,
|
ok(swapchain_desc.BufferDesc.RefreshRate.Denominator == 1,
|
||||||
"Got unexpected BufferDesc.RefreshRate.Denominator %u.\n",
|
"Got unexpected BufferDesc.RefreshRate.Denominator %u.\n",
|
||||||
swapchain_desc.BufferDesc.RefreshRate.Denominator);
|
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);
|
"Got unexpected BufferDesc.Format %#x.\n", swapchain_desc.BufferDesc.Format);
|
||||||
ok(swapchain_desc.BufferDesc.ScanlineOrdering == DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED,
|
ok(swapchain_desc.BufferDesc.ScanlineOrdering == DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED,
|
||||||
"Got unexpected BufferDesc.ScanlineOrdering %#x.\n", swapchain_desc.BufferDesc.ScanlineOrdering);
|
"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);
|
"Got unexpected SampleDesc.Quality %u.\n", swapchain_desc.SampleDesc.Quality);
|
||||||
ok(swapchain_desc.BufferUsage == DXGI_USAGE_RENDER_TARGET_OUTPUT,
|
ok(swapchain_desc.BufferUsage == DXGI_USAGE_RENDER_TARGET_OUTPUT,
|
||||||
"Got unexpected BufferUsage %#x.\n", swapchain_desc.BufferUsage);
|
"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);
|
"Got unexpected BufferCount %u.\n", swapchain_desc.BufferCount);
|
||||||
ok(swapchain_desc.OutputWindow == window,
|
ok(swapchain_desc.OutputWindow == window,
|
||||||
"Got unexpected OutputWindow %p, expected %p.\n", swapchain_desc.OutputWindow, window);
|
"Got unexpected OutputWindow %p, expected %p.\n", swapchain_desc.OutputWindow, window);
|
||||||
ok(swapchain_desc.Windowed,
|
ok(swapchain_desc.Windowed,
|
||||||
"Got unexpected Windowed %#x.\n", 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);
|
"Got unexpected SwapEffect %#x.\n", swapchain_desc.SwapEffect);
|
||||||
ok(!swapchain_desc.Flags,
|
ok(!swapchain_desc.Flags,
|
||||||
"Got unexpected Flags %#x.\n", swapchain_desc.Flags);
|
"Got unexpected Flags %#x.\n", swapchain_desc.Flags);
|
||||||
|
|
||||||
hr = IDXGISurface_GetDesc(surface, &surface_desc);
|
if (surface)
|
||||||
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);
|
check_surface_desc(surface, &swapchain_desc);
|
||||||
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);
|
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);
|
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));
|
memset(&swapchain_desc, 0, sizeof(swapchain_desc));
|
||||||
hr = IDXGISwapChain_GetDesc(swapchain, &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,
|
ok(swapchain_desc.BufferDesc.RefreshRate.Denominator == 1,
|
||||||
"Got unexpected BufferDesc.RefreshRate.Denominator %u.\n",
|
"Got unexpected BufferDesc.RefreshRate.Denominator %u.\n",
|
||||||
swapchain_desc.BufferDesc.RefreshRate.Denominator);
|
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);
|
"Got unexpected BufferDesc.Format %#x.\n", swapchain_desc.BufferDesc.Format);
|
||||||
ok(swapchain_desc.BufferDesc.ScanlineOrdering == DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED,
|
ok(swapchain_desc.BufferDesc.ScanlineOrdering == DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED,
|
||||||
"Got unexpected BufferDesc.ScanlineOrdering %#x.\n", swapchain_desc.BufferDesc.ScanlineOrdering);
|
"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);
|
"Got unexpected SampleDesc.Quality %u.\n", swapchain_desc.SampleDesc.Quality);
|
||||||
ok(swapchain_desc.BufferUsage == DXGI_USAGE_RENDER_TARGET_OUTPUT,
|
ok(swapchain_desc.BufferUsage == DXGI_USAGE_RENDER_TARGET_OUTPUT,
|
||||||
"Got unexpected BufferUsage %#x.\n", swapchain_desc.BufferUsage);
|
"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);
|
"Got unexpected BufferCount %u.\n", swapchain_desc.BufferCount);
|
||||||
ok(swapchain_desc.OutputWindow == window,
|
ok(swapchain_desc.OutputWindow == window,
|
||||||
"Got unexpected OutputWindow %p, expected %p.\n", swapchain_desc.OutputWindow, window);
|
"Got unexpected OutputWindow %p, expected %p.\n", swapchain_desc.OutputWindow, window);
|
||||||
ok(swapchain_desc.Windowed,
|
ok(swapchain_desc.Windowed,
|
||||||
"Got unexpected Windowed %#x.\n", 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);
|
"Got unexpected SwapEffect %#x.\n", swapchain_desc.SwapEffect);
|
||||||
ok(!swapchain_desc.Flags,
|
ok(!swapchain_desc.Flags,
|
||||||
"Got unexpected Flags %#x.\n", swapchain_desc.Flags);
|
"Got unexpected Flags %#x.\n", swapchain_desc.Flags);
|
||||||
|
|
||||||
IDXGISwapChain_Release(swapchain);
|
IDXGISwapChain_Release(swapchain);
|
||||||
refcount = IDXGIDevice_Release(device);
|
|
||||||
ok(!refcount, "Device has %u references left.\n", refcount);
|
|
||||||
DestroyWindow(window);
|
DestroyWindow(window);
|
||||||
|
refcount = IDXGIFactory_Release(factory);
|
||||||
|
ok(refcount == !is_d3d12, "Got unexpected refcount %u.\n", refcount);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_swapchain_parameters(void)
|
static void test_swapchain_parameters(void)
|
||||||
|
@ -4143,7 +4194,6 @@ START_TEST(dxgi)
|
||||||
queue_test(test_get_containing_output);
|
queue_test(test_get_containing_output);
|
||||||
queue_test(test_create_factory);
|
queue_test(test_create_factory);
|
||||||
queue_test(test_private_data);
|
queue_test(test_private_data);
|
||||||
queue_test(test_swapchain_resize);
|
|
||||||
queue_test(test_swapchain_present);
|
queue_test(test_swapchain_present);
|
||||||
queue_test(test_maximum_frame_latency);
|
queue_test(test_maximum_frame_latency);
|
||||||
queue_test(test_output_desc);
|
queue_test(test_output_desc);
|
||||||
|
@ -4158,6 +4208,7 @@ START_TEST(dxgi)
|
||||||
test_resize_target();
|
test_resize_target();
|
||||||
test_inexact_modes();
|
test_inexact_modes();
|
||||||
test_swapchain_parameters();
|
test_swapchain_parameters();
|
||||||
|
run_on_d3d10(test_swapchain_resize);
|
||||||
run_on_d3d10(test_swapchain_backbuffer_index);
|
run_on_d3d10(test_swapchain_backbuffer_index);
|
||||||
|
|
||||||
if (!(d3d12_module = LoadLibraryA("d3d12.dll")))
|
if (!(d3d12_module = LoadLibraryA("d3d12.dll")))
|
||||||
|
@ -4175,6 +4226,7 @@ START_TEST(dxgi)
|
||||||
ID3D12Debug_Release(debug);
|
ID3D12Debug_Release(debug);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
run_on_d3d12(test_swapchain_resize);
|
||||||
run_on_d3d12(test_swapchain_backbuffer_index);
|
run_on_d3d12(test_swapchain_backbuffer_index);
|
||||||
|
|
||||||
FreeLibrary(d3d12_module);
|
FreeLibrary(d3d12_module);
|
||||||
|
|
Loading…
Reference in New Issue