d3d9: Validate adapter format in CheckDeviceFormat().

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>
oldstable
Józef Kucia 2018-04-17 14:26:53 +02:00 committed by Alexandre Julliard
parent 27ededcb31
commit 17e04ba439
2 changed files with 23 additions and 0 deletions

View File

@ -254,6 +254,12 @@ static HRESULT WINAPI d3d9_CheckDeviceFormat(IDirect3D9Ex *iface, UINT adapter,
TRACE("iface %p, adapter %u, device_type %#x, adapter_format %#x, usage %#x, resource_type %#x, format %#x.\n",
iface, adapter, device_type, adapter_format, usage, resource_type, format);
if (!adapter_format)
{
WARN("Invalid adapter format.\n");
return D3DERR_INVALIDCALL;
}
usage = usage & (WINED3DUSAGE_MASK | WINED3DUSAGE_QUERY_MASK);
switch (resource_type)
{

View File

@ -11638,6 +11638,7 @@ static void test_check_device_format(void)
D3DFORMAT adapter_format, format;
BOOL render_target_supported;
D3DDEVTYPE device_type;
unsigned int i, j;
IDirect3D9 *d3d;
HRESULT hr;
@ -11660,6 +11661,22 @@ static void test_check_device_format(void)
ok(FAILED(hr), "Got unexpected hr %#x.\n", hr);
}
for (device_type = D3DDEVTYPE_HAL; device_type < D3DDEVTYPE_NULLREF; ++device_type)
{
hr = IDirect3D9_CheckDeviceFormat(d3d, 0, device_type, D3DFMT_UNKNOWN,
0, D3DRTYPE_SURFACE, D3DFMT_A8R8G8B8);
ok(hr == D3DERR_INVALIDCALL, "Got unexpected hr %#x, device type %#x.\n", hr, device_type);
hr = IDirect3D9_CheckDeviceFormat(d3d, 0, device_type, D3DFMT_UNKNOWN,
0, D3DRTYPE_TEXTURE, D3DFMT_A8R8G8B8);
ok(hr == D3DERR_INVALIDCALL, "Got unexpected hr %#x, device type %#x.\n", hr, device_type);
hr = IDirect3D9_CheckDeviceFormat(d3d, 0, device_type, D3DFMT_UNKNOWN,
0, D3DRTYPE_SURFACE, D3DFMT_X8R8G8B8);
ok(hr == D3DERR_INVALIDCALL, "Got unexpected hr %#x, device type %#x.\n", hr, device_type);
hr = IDirect3D9_CheckDeviceFormat(d3d, 0, device_type, D3DFMT_UNKNOWN,
0, D3DRTYPE_TEXTURE, D3DFMT_X8R8G8B8);
ok(hr == D3DERR_INVALIDCALL, "Got unexpected hr %#x, device type %#x.\n", hr, device_type);
}
hr = IDirect3D9_CheckDeviceFormat(d3d, D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, D3DFMT_X8R8G8B8,
0, D3DRTYPE_VERTEXBUFFER, D3DFMT_VERTEXDATA);
todo_wine ok(hr == D3DERR_INVALIDCALL, "Got unexpected hr %#x.\n", hr);