Commit 17e04ba4 authored by Józef Kucia's avatar Józef Kucia Committed by Alexandre Julliard

d3d9: Validate adapter format in CheckDeviceFormat().

parent 27ededcb
...@@ -254,6 +254,12 @@ static HRESULT WINAPI d3d9_CheckDeviceFormat(IDirect3D9Ex *iface, UINT adapter, ...@@ -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", 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); 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); usage = usage & (WINED3DUSAGE_MASK | WINED3DUSAGE_QUERY_MASK);
switch (resource_type) switch (resource_type)
{ {
......
...@@ -11638,6 +11638,7 @@ static void test_check_device_format(void) ...@@ -11638,6 +11638,7 @@ static void test_check_device_format(void)
D3DFORMAT adapter_format, format; D3DFORMAT adapter_format, format;
BOOL render_target_supported; BOOL render_target_supported;
D3DDEVTYPE device_type;
unsigned int i, j; unsigned int i, j;
IDirect3D9 *d3d; IDirect3D9 *d3d;
HRESULT hr; HRESULT hr;
...@@ -11660,6 +11661,22 @@ static void test_check_device_format(void) ...@@ -11660,6 +11661,22 @@ static void test_check_device_format(void)
ok(FAILED(hr), "Got unexpected hr %#x.\n", hr); 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, hr = IDirect3D9_CheckDeviceFormat(d3d, D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, D3DFMT_X8R8G8B8,
0, D3DRTYPE_VERTEXBUFFER, D3DFMT_VERTEXDATA); 0, D3DRTYPE_VERTEXBUFFER, D3DFMT_VERTEXDATA);
todo_wine ok(hr == D3DERR_INVALIDCALL, "Got unexpected hr %#x.\n", hr); todo_wine ok(hr == D3DERR_INVALIDCALL, "Got unexpected hr %#x.\n", hr);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment