[PATCH v2 02/10] ddraw/tests: Guess output caps instead of coding them in test_rt_caps().
Paul Gofman
pgofman at codeweavers.com
Tue Mar 9 03:56:39 CST 2021
Signed-off-by: Paul Gofman <pgofman at codeweavers.com>
---
v2:
- completely replaces the previous variant, now the output caps are not coded.
The option for _P8 format in output caps check is due to AMD Evergreen results
while allows vidmem _P8 rendertarget which is not supported on most other harware.
The special case for software device and Z buffers is because we choose Z buffer
format from those available for the device and for software device the chosen
Z buffer format may be either supported by hardware device or not.
dlls/ddraw/tests/ddraw1.c | 79 ++++++++++-----------------
dlls/ddraw/tests/ddraw2.c | 78 ++++++++++-----------------
dlls/ddraw/tests/ddraw4.c | 108 +++++++++++--------------------------
dlls/ddraw/tests/ddraw7.c | 111 +++++++++++---------------------------
4 files changed, 116 insertions(+), 260 deletions(-)
diff --git a/dlls/ddraw/tests/ddraw1.c b/dlls/ddraw/tests/ddraw1.c
index 57bc622e48b..82081840320 100644
--- a/dlls/ddraw/tests/ddraw1.c
+++ b/dlls/ddraw/tests/ddraw1.c
@@ -4332,9 +4332,9 @@ static void test_rt_caps(const GUID *device_guid)
IDirectDrawPalette *palette;
IDirect3DDevice *device;
BOOL software_device;
- DWORD expected_caps;
IDirectDraw *ddraw;
DWORD z_depth = 0;
+ DDCAPS hal_caps;
unsigned int i;
ULONG refcount;
HWND window;
@@ -4350,7 +4350,6 @@ static void test_rt_caps(const GUID *device_guid)
{
const DDPIXELFORMAT *pf;
DWORD caps_in;
- DWORD caps_out[2];
HRESULT create_device_hr;
BOOL create_may_fail;
}
@@ -4359,144 +4358,120 @@ static void test_rt_caps(const GUID *device_guid)
{
NULL,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY,
- {DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM},
D3D_OK,
FALSE,
},
{
NULL,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE,
- {DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
- DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY},
D3D_OK,
FALSE,
},
{
NULL,
DDSCAPS_OFFSCREENPLAIN,
- {DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
- DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY},
DDERR_INVALIDCAPS,
FALSE,
},
{
NULL,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
- {DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE},
D3DERR_SURFACENOTINVIDMEM,
FALSE,
},
{
NULL,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY,
- {DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY},
DDERR_INVALIDCAPS,
FALSE,
},
{
NULL,
DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY,
- {DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM},
D3D_OK,
FALSE,
},
{
NULL,
DDSCAPS_3DDEVICE,
- {DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
- DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY},
D3D_OK,
FALSE,
},
{
NULL,
0,
- {DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM, DDSCAPS_SYSTEMMEMORY},
DDERR_INVALIDCAPS,
FALSE,
},
{
NULL,
DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
- {DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE},
D3DERR_SURFACENOTINVIDMEM,
FALSE,
},
{
NULL,
DDSCAPS_SYSTEMMEMORY,
- {DDSCAPS_SYSTEMMEMORY},
DDERR_INVALIDCAPS,
FALSE,
},
{
&p8_fmt,
0,
- {DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM},
DDERR_INVALIDCAPS,
FALSE,
},
{
&p8_fmt,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE,
- {~0u /* AMD r200 */, DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY},
DDERR_NOPALETTEATTACHED,
FALSE,
},
{
&p8_fmt,
DDSCAPS_OFFSCREENPLAIN,
- {DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
- DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY},
DDERR_INVALIDCAPS,
FALSE,
},
{
&p8_fmt,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
- {DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE},
DDERR_NOPALETTEATTACHED,
FALSE,
},
{
&p8_fmt,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY,
- {DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY},
DDERR_INVALIDCAPS,
FALSE,
},
{
NULL,
DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER,
- {DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER | DDSCAPS_LOCALVIDMEM},
DDERR_INVALIDCAPS,
TRUE /* AMD Evergreen */,
},
{
NULL,
DDSCAPS_3DDEVICE | DDSCAPS_ZBUFFER,
- {~0u /* AMD Evergreen */, DDSCAPS_3DDEVICE | DDSCAPS_ZBUFFER | DDSCAPS_SYSTEMMEMORY},
DDERR_INVALIDCAPS,
FALSE,
},
{
NULL,
DDSCAPS_ZBUFFER,
- {~0u /* AMD Evergreen */, DDSCAPS_ZBUFFER | DDSCAPS_SYSTEMMEMORY},
DDERR_INVALIDCAPS,
FALSE,
},
{
NULL,
DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE | DDSCAPS_ZBUFFER,
- {DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE | DDSCAPS_ZBUFFER},
DDERR_INVALIDCAPS,
TRUE /* Nvidia Kepler */,
},
{
NULL,
DDSCAPS_SYSTEMMEMORY | DDSCAPS_ZBUFFER,
- {DDSCAPS_SYSTEMMEMORY | DDSCAPS_ZBUFFER},
DDERR_INVALIDCAPS,
TRUE /* Nvidia Kepler */,
},
@@ -4522,38 +4497,45 @@ static void test_rt_caps(const GUID *device_guid)
hr = IDirectDraw_CreatePalette(ddraw, DDPCAPS_ALLOW256 | DDPCAPS_8BIT, palette_entries, &palette, NULL);
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
+ memset(&hal_caps, 0, sizeof(hal_caps));
+ hal_caps.dwSize = sizeof(hal_caps);
+ hr = IDirectDraw_GetCaps(ddraw, &hal_caps, NULL);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
+
for (i = 0; i < ARRAY_SIZE(test_data); ++i)
{
+ DWORD caps_in, expected_caps;
IDirectDrawSurface *surface;
DDSURFACEDESC surface_desc;
IDirect3DDevice *device;
+ HRESULT expected_hr;
+
+ caps_in = test_data[i].caps_in;
memset(&surface_desc, 0, sizeof(surface_desc));
surface_desc.dwSize = sizeof(surface_desc);
surface_desc.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;
- surface_desc.ddsCaps.dwCaps = test_data[i].caps_in;
+ surface_desc.ddsCaps.dwCaps = caps_in;
if (test_data[i].pf)
{
surface_desc.dwFlags |= DDSD_PIXELFORMAT;
surface_desc.ddpfPixelFormat = *test_data[i].pf;
}
- if (test_data[i].caps_in & DDSCAPS_ZBUFFER)
+ if (caps_in & DDSCAPS_ZBUFFER)
{
surface_desc.dwFlags |= DDSD_ZBUFFERBITDEPTH;
U2(surface_desc).dwZBufferBitDepth = z_depth;
}
surface_desc.dwWidth = 640;
surface_desc.dwHeight = 480;
+ if ((caps_in & DDSCAPS_VIDEOMEMORY) && !(hal_caps.ddsCaps.dwCaps & DDSCAPS_VIDEOMEMORY))
+ expected_hr = DDERR_NODIRECTDRAWHW;
+ else
+ expected_hr = DD_OK;
hr = IDirectDraw_CreateSurface(ddraw, &surface_desc, &surface, NULL);
- if (surface_desc.ddsCaps.dwCaps & DDSCAPS_VIDEOMEMORY && hr == DDERR_NODIRECTDRAWHW)
- {
- skip("No 3d hardware, skipping test %u, software_device %u.\n", i, software_device);
- continue;
- }
- ok(hr == DD_OK || broken(test_data[i].create_may_fail
+ ok(hr == expected_hr || broken(test_data[i].create_may_fail
|| (software_device && test_data[i].pf == &p8_fmt && hr == DDERR_INVALIDPIXELFORMAT)),
"Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
-
if (FAILED(hr))
continue;
@@ -4561,23 +4543,18 @@ static void test_rt_caps(const GUID *device_guid)
surface_desc.dwSize = sizeof(surface_desc);
hr = IDirectDrawSurface_GetSurfaceDesc(surface, &surface_desc);
ok(hr == DD_OK, "Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
- if (software_device)
- {
- expected_caps = test_data[i].caps_out[1]
- ? test_data[i].caps_out[1] : test_data[i].caps_out[0];
-
- todo_wine_if(test_data[i].caps_out[0] == ~0u && surface_desc.ddsCaps.dwCaps != expected_caps)
- ok(surface_desc.ddsCaps.dwCaps == expected_caps
- || surface_desc.ddsCaps.dwCaps == test_data[i].caps_out[0],
- "Got unexpected caps %#x, test %u, software_device %u.\n",
- surface_desc.ddsCaps.dwCaps, i, software_device);
- }
+
+ if ((caps_in & DDSCAPS_SYSTEMMEMORY) || !(hal_caps.ddsCaps.dwCaps & DDSCAPS_VIDEOMEMORY))
+ expected_caps = caps_in | DDSCAPS_SYSTEMMEMORY;
else
- {
- ok(test_data[i].caps_out[0] == ~0u || surface_desc.ddsCaps.dwCaps == test_data[i].caps_out[0],
- "Got unexpected caps %#x, expected %#x, test %u, software_device %u.\n",
- surface_desc.ddsCaps.dwCaps, test_data[i].caps_out[0], i, software_device);
- }
+ expected_caps = caps_in | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM;
+
+ ok(surface_desc.ddsCaps.dwCaps == expected_caps || (test_data[i].pf == &p8_fmt
+ && surface_desc.ddsCaps.dwCaps == (caps_in | DDSCAPS_SYSTEMMEMORY))
+ || (software_device && caps_in & DDSCAPS_ZBUFFER
+ && surface_desc.ddsCaps.dwCaps == (caps_in | DDSCAPS_SYSTEMMEMORY)),
+ "Got unexpected caps %#x, expected %#x, test %u, software_device %u.\n",
+ surface_desc.ddsCaps.dwCaps, expected_caps, i, software_device);
hr = IDirectDrawSurface_QueryInterface(surface, device_guid, (void **)&device);
todo_wine_if(software_device && test_data[i].create_device_hr == D3DERR_SURFACENOTINVIDMEM)
diff --git a/dlls/ddraw/tests/ddraw2.c b/dlls/ddraw/tests/ddraw2.c
index d2889aa05d7..2346992750c 100644
--- a/dlls/ddraw/tests/ddraw2.c
+++ b/dlls/ddraw/tests/ddraw2.c
@@ -4755,10 +4755,10 @@ static void test_rt_caps(const GUID *device_guid)
IDirectDrawPalette *palette;
IDirect3DDevice2 *device;
BOOL software_device;
- DWORD expected_caps;
IDirectDraw2 *ddraw;
DWORD z_depth = 0;
IDirect3D2 *d3d;
+ DDCAPS hal_caps;
unsigned int i;
ULONG refcount;
HWND window;
@@ -4774,7 +4774,6 @@ static void test_rt_caps(const GUID *device_guid)
{
const DDPIXELFORMAT *pf;
DWORD caps_in;
- DWORD caps_out[2];
HRESULT create_device_hr;
HRESULT set_rt_hr;
HRESULT alternative_set_rt_hr;
@@ -4785,7 +4784,6 @@ static void test_rt_caps(const GUID *device_guid)
{
NULL,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY,
- {DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM},
D3D_OK,
D3D_OK,
D3D_OK,
@@ -4794,8 +4792,6 @@ static void test_rt_caps(const GUID *device_guid)
{
NULL,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE,
- {DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
- DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY},
D3D_OK,
D3D_OK,
D3D_OK,
@@ -4804,8 +4800,6 @@ static void test_rt_caps(const GUID *device_guid)
{
NULL,
DDSCAPS_OFFSCREENPLAIN,
- {DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
- DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY},
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
@@ -4814,7 +4808,6 @@ static void test_rt_caps(const GUID *device_guid)
{
NULL,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
- {DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE},
D3DERR_SURFACENOTINVIDMEM,
D3D_OK,
D3D_OK,
@@ -4823,7 +4816,6 @@ static void test_rt_caps(const GUID *device_guid)
{
NULL,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY,
- {DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY},
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
@@ -4832,7 +4824,6 @@ static void test_rt_caps(const GUID *device_guid)
{
NULL,
DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY,
- {DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM},
D3D_OK,
D3D_OK,
D3D_OK,
@@ -4841,8 +4832,6 @@ static void test_rt_caps(const GUID *device_guid)
{
NULL,
DDSCAPS_3DDEVICE,
- {DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
- DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY},
D3D_OK,
D3D_OK,
D3D_OK,
@@ -4851,8 +4840,6 @@ static void test_rt_caps(const GUID *device_guid)
{
NULL,
0,
- {DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
- DDSCAPS_SYSTEMMEMORY},
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
@@ -4861,7 +4848,6 @@ static void test_rt_caps(const GUID *device_guid)
{
NULL,
DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
- {DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE},
D3DERR_SURFACENOTINVIDMEM,
D3D_OK,
D3D_OK,
@@ -4870,7 +4856,6 @@ static void test_rt_caps(const GUID *device_guid)
{
NULL,
DDSCAPS_SYSTEMMEMORY,
- {DDSCAPS_SYSTEMMEMORY},
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
@@ -4879,7 +4864,6 @@ static void test_rt_caps(const GUID *device_guid)
{
&p8_fmt,
0,
- {DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM},
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
@@ -4888,7 +4872,6 @@ static void test_rt_caps(const GUID *device_guid)
{
&p8_fmt,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE,
- {~0u /* AMD r200 */, DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY},
DDERR_NOPALETTEATTACHED,
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
@@ -4897,8 +4880,6 @@ static void test_rt_caps(const GUID *device_guid)
{
&p8_fmt,
DDSCAPS_OFFSCREENPLAIN,
- {DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
- DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY},
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
@@ -4907,7 +4888,6 @@ static void test_rt_caps(const GUID *device_guid)
{
&p8_fmt,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
- {DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE},
DDERR_NOPALETTEATTACHED,
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
@@ -4916,7 +4896,6 @@ static void test_rt_caps(const GUID *device_guid)
{
&p8_fmt,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY,
- {DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY},
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
@@ -4925,7 +4904,6 @@ static void test_rt_caps(const GUID *device_guid)
{
NULL,
DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER,
- {DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER | DDSCAPS_LOCALVIDMEM},
DDERR_INVALIDCAPS,
DDERR_INVALIDPIXELFORMAT,
DDERR_INVALIDCAPS,
@@ -4934,7 +4912,6 @@ static void test_rt_caps(const GUID *device_guid)
{
NULL,
DDSCAPS_3DDEVICE | DDSCAPS_ZBUFFER,
- {~0u /* AMD Evergreen */, DDSCAPS_3DDEVICE | DDSCAPS_ZBUFFER | DDSCAPS_SYSTEMMEMORY},
DDERR_INVALIDCAPS,
DDERR_INVALIDPIXELFORMAT,
DDERR_INVALIDCAPS,
@@ -4943,7 +4920,6 @@ static void test_rt_caps(const GUID *device_guid)
{
NULL,
DDSCAPS_ZBUFFER,
- {~0u /* AMD Evergreen */, DDSCAPS_ZBUFFER | DDSCAPS_SYSTEMMEMORY},
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
@@ -4952,7 +4928,6 @@ static void test_rt_caps(const GUID *device_guid)
{
NULL,
DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE | DDSCAPS_ZBUFFER,
- {DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE | DDSCAPS_ZBUFFER},
DDERR_INVALIDCAPS,
DDERR_INVALIDPIXELFORMAT,
DDERR_INVALIDPIXELFORMAT,
@@ -4961,7 +4936,6 @@ static void test_rt_caps(const GUID *device_guid)
{
NULL,
DDSCAPS_SYSTEMMEMORY | DDSCAPS_ZBUFFER,
- {DDSCAPS_SYSTEMMEMORY | DDSCAPS_ZBUFFER},
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
@@ -4995,35 +4969,43 @@ static void test_rt_caps(const GUID *device_guid)
hr = IDirectDraw2_CreatePalette(ddraw, DDPCAPS_ALLOW256 | DDPCAPS_8BIT, palette_entries, &palette, NULL);
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
+ memset(&hal_caps, 0, sizeof(hal_caps));
+ hal_caps.dwSize = sizeof(hal_caps);
+ hr = IDirectDraw2_GetCaps(ddraw, &hal_caps, NULL);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
+
for (i = 0; i < ARRAY_SIZE(test_data); ++i)
{
IDirectDrawSurface *surface, *rt, *expected_rt, *tmp;
+ DWORD caps_in, expected_caps;
DDSURFACEDESC surface_desc;
IDirect3DDevice2 *device;
+ HRESULT expected_hr;
+
+ caps_in = test_data[i].caps_in;
memset(&surface_desc, 0, sizeof(surface_desc));
surface_desc.dwSize = sizeof(surface_desc);
surface_desc.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;
- surface_desc.ddsCaps.dwCaps = test_data[i].caps_in;
+ surface_desc.ddsCaps.dwCaps = caps_in;
if (test_data[i].pf)
{
surface_desc.dwFlags |= DDSD_PIXELFORMAT;
surface_desc.ddpfPixelFormat = *test_data[i].pf;
}
- if (test_data[i].caps_in & DDSCAPS_ZBUFFER)
+ if (caps_in & DDSCAPS_ZBUFFER)
{
surface_desc.dwFlags |= DDSD_ZBUFFERBITDEPTH;
U2(surface_desc).dwZBufferBitDepth = z_depth;
}
surface_desc.dwWidth = 640;
surface_desc.dwHeight = 480;
+ if ((caps_in & DDSCAPS_VIDEOMEMORY) && !(hal_caps.ddsCaps.dwCaps & DDSCAPS_VIDEOMEMORY))
+ expected_hr = DDERR_NODIRECTDRAWHW;
+ else
+ expected_hr = DD_OK;
hr = IDirectDraw2_CreateSurface(ddraw, &surface_desc, &surface, NULL);
- if (surface_desc.ddsCaps.dwCaps & DDSCAPS_VIDEOMEMORY && hr == DDERR_NODIRECTDRAWHW)
- {
- skip("No 3d hardware, skipping test %u, software_device %u.\n", i, software_device);
- continue;
- }
- ok(hr == DD_OK || broken(test_data[i].create_may_fail
+ ok(hr == expected_hr || broken(test_data[i].create_may_fail
|| (software_device && test_data[i].pf == &p8_fmt && hr == DDERR_INVALIDPIXELFORMAT)),
"Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
if (FAILED(hr))
@@ -5032,24 +5014,18 @@ static void test_rt_caps(const GUID *device_guid)
memset(&surface_desc, 0, sizeof(surface_desc));
surface_desc.dwSize = sizeof(surface_desc);
hr = IDirectDrawSurface_GetSurfaceDesc(surface, &surface_desc);
- ok(hr == DD_OK, "Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
- if (software_device)
- {
- expected_caps = test_data[i].caps_out[software_device]
- ? test_data[i].caps_out[software_device] : test_data[i].caps_out[0];
- todo_wine_if(test_data[i].caps_out[0] == ~0u && surface_desc.ddsCaps.dwCaps != expected_caps)
- ok(surface_desc.ddsCaps.dwCaps == expected_caps
- || surface_desc.ddsCaps.dwCaps == test_data[i].caps_out[0],
- "Got unexpected caps %#x, test %u, software_device %u.\n",
- surface_desc.ddsCaps.dwCaps, i, software_device);
- }
+ if ((caps_in & DDSCAPS_SYSTEMMEMORY) || !(hal_caps.ddsCaps.dwCaps & DDSCAPS_VIDEOMEMORY))
+ expected_caps = caps_in | DDSCAPS_SYSTEMMEMORY;
else
- {
- ok(test_data[i].caps_out[0] == ~0u || surface_desc.ddsCaps.dwCaps == test_data[i].caps_out[0],
- "Got unexpected caps %#x, expected %#x, test %u, software_device %u.\n",
- surface_desc.ddsCaps.dwCaps, test_data[i].caps_out[0], i, software_device);
- }
+ expected_caps = caps_in | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM;
+
+ ok(surface_desc.ddsCaps.dwCaps == expected_caps || (test_data[i].pf == &p8_fmt
+ && surface_desc.ddsCaps.dwCaps == (caps_in | DDSCAPS_SYSTEMMEMORY))
+ || (software_device && caps_in & DDSCAPS_ZBUFFER
+ && surface_desc.ddsCaps.dwCaps == (caps_in | DDSCAPS_SYSTEMMEMORY)),
+ "Got unexpected caps %#x, expected %#x, test %u, software_device %u.\n",
+ surface_desc.ddsCaps.dwCaps, expected_caps, i, software_device);
hr = IDirect3D2_CreateDevice(d3d, device_guid, surface, &device);
diff --git a/dlls/ddraw/tests/ddraw4.c b/dlls/ddraw/tests/ddraw4.c
index 6e003fbfb7e..d0fba7a3a21 100644
--- a/dlls/ddraw/tests/ddraw4.c
+++ b/dlls/ddraw/tests/ddraw4.c
@@ -6365,10 +6365,10 @@ static void test_rt_caps(const GUID *device_guid)
PALETTEENTRY palette_entries[256];
IDirectDrawPalette *palette;
BOOL software_device;
- DWORD expected_caps;
IDirectDraw4 *ddraw;
DDPIXELFORMAT z_fmt;
IDirect3D3 *d3d;
+ DDCAPS hal_caps;
unsigned int i;
ULONG refcount;
HWND window;
@@ -6384,9 +6384,7 @@ static void test_rt_caps(const GUID *device_guid)
{
const DDPIXELFORMAT *pf;
DWORD caps_in;
- DWORD caps_out[2];
DWORD caps2_in;
- DWORD caps2_out;
HRESULT create_device_hr;
HRESULT set_rt_hr, alternative_set_rt_hr;
}
@@ -6395,8 +6393,6 @@ static void test_rt_caps(const GUID *device_guid)
{
NULL,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY,
- {DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM},
- 0,
0,
D3D_OK,
D3D_OK,
@@ -6405,9 +6401,6 @@ static void test_rt_caps(const GUID *device_guid)
{
NULL,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE,
- {DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
- DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY},
- 0,
0,
D3D_OK,
D3D_OK,
@@ -6416,9 +6409,6 @@ static void test_rt_caps(const GUID *device_guid)
{
NULL,
DDSCAPS_OFFSCREENPLAIN,
- {DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
- DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY},
- 0,
0,
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
@@ -6427,8 +6417,6 @@ static void test_rt_caps(const GUID *device_guid)
{
NULL,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
- {DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE},
- 0,
0,
D3DERR_SURFACENOTINVIDMEM,
D3D_OK,
@@ -6437,8 +6425,6 @@ static void test_rt_caps(const GUID *device_guid)
{
NULL,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY,
- {DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY},
- 0,
0,
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
@@ -6447,8 +6433,6 @@ static void test_rt_caps(const GUID *device_guid)
{
NULL,
DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY,
- {DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM},
- 0,
0,
D3D_OK,
D3D_OK,
@@ -6457,9 +6441,6 @@ static void test_rt_caps(const GUID *device_guid)
{
NULL,
DDSCAPS_3DDEVICE,
- {DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
- DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY},
- 0,
0,
D3D_OK,
D3D_OK,
@@ -6468,9 +6449,6 @@ static void test_rt_caps(const GUID *device_guid)
{
NULL,
0,
- {DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
- DDSCAPS_SYSTEMMEMORY},
- 0,
0,
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
@@ -6479,8 +6457,6 @@ static void test_rt_caps(const GUID *device_guid)
{
NULL,
DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
- {DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE},
- 0,
0,
D3DERR_SURFACENOTINVIDMEM,
D3D_OK,
@@ -6489,8 +6465,6 @@ static void test_rt_caps(const GUID *device_guid)
{
NULL,
DDSCAPS_SYSTEMMEMORY,
- {DDSCAPS_SYSTEMMEMORY},
- 0,
0,
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
@@ -6499,8 +6473,6 @@ static void test_rt_caps(const GUID *device_guid)
{
NULL,
DDSCAPS_TEXTURE | DDSCAPS_3DDEVICE,
- {DDSCAPS_TEXTURE | DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY},
- DDSCAPS2_TEXTUREMANAGE,
DDSCAPS2_TEXTUREMANAGE,
D3DERR_SURFACENOTINVIDMEM,
D3D_OK,
@@ -6509,8 +6481,6 @@ static void test_rt_caps(const GUID *device_guid)
{
NULL,
DDSCAPS_TEXTURE | DDSCAPS_3DDEVICE,
- {DDSCAPS_TEXTURE | DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY},
- DDSCAPS2_D3DTEXTUREMANAGE,
DDSCAPS2_D3DTEXTUREMANAGE,
D3DERR_SURFACENOTINVIDMEM,
D3D_OK,
@@ -6519,8 +6489,6 @@ static void test_rt_caps(const GUID *device_guid)
{
&p8_fmt,
0,
- {DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM},
- 0,
0,
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
@@ -6529,8 +6497,6 @@ static void test_rt_caps(const GUID *device_guid)
{
&p8_fmt,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE,
- {~0u /* AMD r200 */, DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY},
- 0,
0,
DDERR_NOPALETTEATTACHED,
DDERR_INVALIDCAPS,
@@ -6539,9 +6505,6 @@ static void test_rt_caps(const GUID *device_guid)
{
&p8_fmt,
DDSCAPS_OFFSCREENPLAIN,
- {DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
- DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY},
- 0,
0,
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
@@ -6550,8 +6513,6 @@ static void test_rt_caps(const GUID *device_guid)
{
&p8_fmt,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
- {DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE},
- 0,
0,
DDERR_NOPALETTEATTACHED,
DDERR_INVALIDCAPS,
@@ -6560,8 +6521,6 @@ static void test_rt_caps(const GUID *device_guid)
{
&p8_fmt,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY,
- {DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY},
- 0,
0,
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
@@ -6570,8 +6529,6 @@ static void test_rt_caps(const GUID *device_guid)
{
&z_fmt,
DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER,
- {DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER | DDSCAPS_LOCALVIDMEM},
- 0,
0,
DDERR_INVALIDCAPS,
DDERR_INVALIDPIXELFORMAT,
@@ -6580,9 +6537,6 @@ static void test_rt_caps(const GUID *device_guid)
{
&z_fmt,
DDSCAPS_3DDEVICE | DDSCAPS_ZBUFFER,
- {DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER | DDSCAPS_LOCALVIDMEM,
- DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_ZBUFFER},
- 0,
0,
DDERR_INVALIDCAPS,
DDERR_INVALIDPIXELFORMAT,
@@ -6591,9 +6545,6 @@ static void test_rt_caps(const GUID *device_guid)
{
&z_fmt,
DDSCAPS_ZBUFFER,
- {DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER | DDSCAPS_LOCALVIDMEM,
- DDSCAPS_SYSTEMMEMORY | DDSCAPS_ZBUFFER},
- 0,
0,
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
@@ -6602,8 +6553,6 @@ static void test_rt_caps(const GUID *device_guid)
{
&z_fmt,
DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE | DDSCAPS_ZBUFFER,
- {DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE | DDSCAPS_ZBUFFER},
- 0,
0,
DDERR_INVALIDCAPS,
DDERR_INVALIDPIXELFORMAT,
@@ -6612,8 +6561,6 @@ static void test_rt_caps(const GUID *device_guid)
{
&z_fmt,
DDSCAPS_SYSTEMMEMORY | DDSCAPS_ZBUFFER,
- {DDSCAPS_SYSTEMMEMORY | DDSCAPS_ZBUFFER},
- 0,
0,
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
@@ -6648,16 +6595,25 @@ static void test_rt_caps(const GUID *device_guid)
hr = IDirectDraw4_CreatePalette(ddraw, DDPCAPS_ALLOW256 | DDPCAPS_8BIT, palette_entries, &palette, NULL);
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
+ memset(&hal_caps, 0, sizeof(hal_caps));
+ hal_caps.dwSize = sizeof(hal_caps);
+ hr = IDirectDraw4_GetCaps(ddraw, &hal_caps, NULL);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
+
for (i = 0; i < ARRAY_SIZE(test_data); ++i)
{
IDirectDrawSurface4 *surface, *rt, *expected_rt, *tmp;
+ DWORD caps_in, expected_caps;
DDSURFACEDESC2 surface_desc;
IDirect3DDevice3 *device;
+ HRESULT expected_hr;
+
+ caps_in = test_data[i].caps_in;
memset(&surface_desc, 0, sizeof(surface_desc));
surface_desc.dwSize = sizeof(surface_desc);
surface_desc.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;
- surface_desc.ddsCaps.dwCaps = test_data[i].caps_in;
+ surface_desc.ddsCaps.dwCaps = caps_in;
surface_desc.ddsCaps.dwCaps2 = test_data[i].caps2_in;
if (test_data[i].pf)
{
@@ -6666,13 +6622,12 @@ static void test_rt_caps(const GUID *device_guid)
}
surface_desc.dwWidth = 640;
surface_desc.dwHeight = 480;
+ if ((caps_in & DDSCAPS_VIDEOMEMORY) && !(hal_caps.ddsCaps.dwCaps & DDSCAPS_VIDEOMEMORY))
+ expected_hr = DDERR_NODIRECTDRAWHW;
+ else
+ expected_hr = DD_OK;
hr = IDirectDraw4_CreateSurface(ddraw, &surface_desc, &surface, NULL);
- if (surface_desc.ddsCaps.dwCaps & DDSCAPS_VIDEOMEMORY && hr == DDERR_NODIRECTDRAWHW)
- {
- skip("No 3d hardware, skipping test %u, software_device %u.\n", i, software_device);
- continue;
- }
- ok(hr == DD_OK || (software_device && (surface_desc.ddsCaps.dwCaps & (DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER))
+ ok(hr == expected_hr || (software_device && (surface_desc.ddsCaps.dwCaps & (DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER))
== (DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER) && hr == DDERR_UNSUPPORTED)
|| broken(software_device && test_data[i].pf == &p8_fmt && hr == DDERR_INVALIDPIXELFORMAT),
"Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
@@ -6684,25 +6639,22 @@ static void test_rt_caps(const GUID *device_guid)
hr = IDirectDrawSurface4_GetSurfaceDesc(surface, &surface_desc);
ok(hr == DD_OK, "Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
- if (software_device)
- {
- expected_caps = test_data[i].caps_out[software_device]
- ? test_data[i].caps_out[software_device] : test_data[i].caps_out[0];
-
- ok(surface_desc.ddsCaps.dwCaps == expected_caps
- || surface_desc.ddsCaps.dwCaps == test_data[i].caps_out[0],
- "Got unexpected caps %#x, test %u, software_device %u.\n",
- surface_desc.ddsCaps.dwCaps, i, software_device);
- }
+ if ((caps_in & DDSCAPS_SYSTEMMEMORY) || (test_data[i].caps2_in & (DDSCAPS2_D3DTEXTUREMANAGE
+ | DDSCAPS2_TEXTUREMANAGE)) || !(hal_caps.ddsCaps.dwCaps & DDSCAPS_VIDEOMEMORY))
+ expected_caps = caps_in | DDSCAPS_SYSTEMMEMORY;
else
- {
- ok(test_data[i].caps_out[0] == ~0u || surface_desc.ddsCaps.dwCaps == test_data[i].caps_out[0],
- "Got unexpected caps %#x, expected %#x, test %u, software_device %u.\n",
- surface_desc.ddsCaps.dwCaps, test_data[i].caps_out[0], i, software_device);
- }
- ok(surface_desc.ddsCaps.dwCaps2 == test_data[i].caps2_out,
+ expected_caps = caps_in | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM;
+
+ ok(surface_desc.ddsCaps.dwCaps == expected_caps || (test_data[i].pf == &p8_fmt
+ && surface_desc.ddsCaps.dwCaps == (caps_in | DDSCAPS_SYSTEMMEMORY))
+ || (software_device && test_data[i].pf == &z_fmt
+ && surface_desc.ddsCaps.dwCaps == (caps_in | DDSCAPS_SYSTEMMEMORY)),
+ "Got unexpected caps %#x, expected %#x, test %u, software_device %u.\n",
+ surface_desc.ddsCaps.dwCaps, expected_caps, i, software_device);
+
+ ok(surface_desc.ddsCaps.dwCaps2 == test_data[i].caps2_in,
"Got unexpected caps2 %#x, expected %#x, test %u, software_device %u.\n",
- surface_desc.ddsCaps.dwCaps2, test_data[i].caps2_out, i, software_device);
+ surface_desc.ddsCaps.dwCaps2, test_data[i].caps2_in, i, software_device);
hr = IDirect3D3_CreateDevice(d3d, device_guid, surface, &device, NULL);
diff --git a/dlls/ddraw/tests/ddraw7.c b/dlls/ddraw/tests/ddraw7.c
index 559d13d035c..3b40210a214 100644
--- a/dlls/ddraw/tests/ddraw7.c
+++ b/dlls/ddraw/tests/ddraw7.c
@@ -6096,10 +6096,10 @@ static void test_rt_caps(const GUID *device_guid)
PALETTEENTRY palette_entries[256];
IDirectDrawPalette *palette;
BOOL software_device;
- DWORD expected_caps;
IDirectDraw7 *ddraw;
DDPIXELFORMAT z_fmt;
IDirect3D7 *d3d;
+ DDCAPS hal_caps;
unsigned int i;
ULONG refcount;
HWND window;
@@ -6115,9 +6115,7 @@ static void test_rt_caps(const GUID *device_guid)
{
const DDPIXELFORMAT *pf;
DWORD caps_in;
- DWORD caps_out[2];
DWORD caps2_in;
- DWORD caps2_out;
HRESULT create_device_hr;
HRESULT set_rt_hr, alternative_set_rt_hr;
}
@@ -6126,8 +6124,6 @@ static void test_rt_caps(const GUID *device_guid)
{
NULL,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY,
- {DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM},
- 0,
0,
D3D_OK,
D3D_OK,
@@ -6136,9 +6132,6 @@ static void test_rt_caps(const GUID *device_guid)
{
NULL,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE,
- {DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
- DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY},
- 0,
0,
D3D_OK,
D3D_OK,
@@ -6147,9 +6140,6 @@ static void test_rt_caps(const GUID *device_guid)
{
NULL,
DDSCAPS_OFFSCREENPLAIN,
- {DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
- DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY},
- 0,
0,
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
@@ -6158,8 +6148,6 @@ static void test_rt_caps(const GUID *device_guid)
{
NULL,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
- {DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE},
- 0,
0,
D3DERR_SURFACENOTINVIDMEM,
DDERR_INVALIDPARAMS,
@@ -6168,8 +6156,6 @@ static void test_rt_caps(const GUID *device_guid)
{
NULL,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY,
- {DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY},
- 0,
0,
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
@@ -6178,8 +6164,6 @@ static void test_rt_caps(const GUID *device_guid)
{
NULL,
DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY,
- {DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM},
- 0,
0,
D3D_OK,
D3D_OK,
@@ -6188,9 +6172,6 @@ static void test_rt_caps(const GUID *device_guid)
{
NULL,
DDSCAPS_3DDEVICE,
- {DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
- DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY},
- 0,
0,
D3D_OK,
D3D_OK,
@@ -6199,8 +6180,6 @@ static void test_rt_caps(const GUID *device_guid)
{
NULL,
0,
- {DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM, DDSCAPS_SYSTEMMEMORY},
- 0,
0,
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
@@ -6209,8 +6188,6 @@ static void test_rt_caps(const GUID *device_guid)
{
NULL,
DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
- {DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE},
- 0,
0,
D3DERR_SURFACENOTINVIDMEM,
DDERR_INVALIDPARAMS,
@@ -6219,8 +6196,6 @@ static void test_rt_caps(const GUID *device_guid)
{
NULL,
DDSCAPS_SYSTEMMEMORY,
- {DDSCAPS_SYSTEMMEMORY},
- 0,
0,
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
@@ -6229,8 +6204,6 @@ static void test_rt_caps(const GUID *device_guid)
{
NULL,
DDSCAPS_TEXTURE | DDSCAPS_3DDEVICE,
- {DDSCAPS_TEXTURE | DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY},
- DDSCAPS2_TEXTUREMANAGE,
DDSCAPS2_TEXTUREMANAGE,
D3DERR_SURFACENOTINVIDMEM,
DDERR_INVALIDPARAMS,
@@ -6239,8 +6212,6 @@ static void test_rt_caps(const GUID *device_guid)
{
NULL,
DDSCAPS_TEXTURE | DDSCAPS_3DDEVICE,
- {DDSCAPS_TEXTURE | DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY},
- DDSCAPS2_D3DTEXTUREMANAGE,
DDSCAPS2_D3DTEXTUREMANAGE,
D3DERR_SURFACENOTINVIDMEM,
DDERR_INVALIDPARAMS,
@@ -6249,8 +6220,6 @@ static void test_rt_caps(const GUID *device_guid)
{
&p8_fmt,
0,
- {DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM},
- 0,
0,
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
@@ -6259,8 +6228,6 @@ static void test_rt_caps(const GUID *device_guid)
{
&p8_fmt,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE,
- {~0u /* AMD r200 */, DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY},
- 0,
0,
DDERR_NOPALETTEATTACHED,
DDERR_INVALIDCAPS,
@@ -6269,9 +6236,6 @@ static void test_rt_caps(const GUID *device_guid)
{
&p8_fmt,
DDSCAPS_OFFSCREENPLAIN,
- {DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
- DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY},
- 0,
0,
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
@@ -6280,8 +6244,6 @@ static void test_rt_caps(const GUID *device_guid)
{
&p8_fmt,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
- {DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE},
- 0,
0,
DDERR_NOPALETTEATTACHED,
DDERR_INVALIDCAPS,
@@ -6290,8 +6252,6 @@ static void test_rt_caps(const GUID *device_guid)
{
&p8_fmt,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY,
- {DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY},
- 0,
0,
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
@@ -6300,8 +6260,6 @@ static void test_rt_caps(const GUID *device_guid)
{
&z_fmt,
DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER,
- {DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER | DDSCAPS_LOCALVIDMEM},
- 0,
0,
DDERR_INVALIDCAPS,
DDERR_INVALIDPIXELFORMAT,
@@ -6310,9 +6268,6 @@ static void test_rt_caps(const GUID *device_guid)
{
&z_fmt,
DDSCAPS_3DDEVICE | DDSCAPS_ZBUFFER,
- {DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER | DDSCAPS_LOCALVIDMEM,
- DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_ZBUFFER},
- 0,
0,
DDERR_INVALIDCAPS,
DDERR_INVALIDPIXELFORMAT,
@@ -6321,9 +6276,6 @@ static void test_rt_caps(const GUID *device_guid)
{
&z_fmt,
DDSCAPS_ZBUFFER,
- {DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER | DDSCAPS_LOCALVIDMEM,
- DDSCAPS_SYSTEMMEMORY | DDSCAPS_ZBUFFER},
- 0,
0,
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
@@ -6332,8 +6284,6 @@ static void test_rt_caps(const GUID *device_guid)
{
&z_fmt,
DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE | DDSCAPS_ZBUFFER,
- {DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE | DDSCAPS_ZBUFFER},
- 0,
0,
DDERR_INVALIDCAPS,
DDERR_INVALIDPARAMS,
@@ -6342,8 +6292,6 @@ static void test_rt_caps(const GUID *device_guid)
{
&z_fmt,
DDSCAPS_SYSTEMMEMORY | DDSCAPS_ZBUFFER,
- {DDSCAPS_SYSTEMMEMORY | DDSCAPS_ZBUFFER},
- 0,
0,
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
@@ -6378,16 +6326,25 @@ static void test_rt_caps(const GUID *device_guid)
hr = IDirectDraw7_CreatePalette(ddraw, DDPCAPS_ALLOW256 | DDPCAPS_8BIT, palette_entries, &palette, NULL);
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
+ memset(&hal_caps, 0, sizeof(hal_caps));
+ hal_caps.dwSize = sizeof(hal_caps);
+ hr = IDirectDraw7_GetCaps(ddraw, &hal_caps, NULL);
+ ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
+
for (i = 0; i < ARRAY_SIZE(test_data); ++i)
{
IDirectDrawSurface7 *surface, *rt, *expected_rt, *tmp;
DDSURFACEDESC2 surface_desc;
+ DWORD caps_in, expected_caps;
IDirect3DDevice7 *device;
+ HRESULT expected_hr;
+
+ caps_in = test_data[i].caps_in;
memset(&surface_desc, 0, sizeof(surface_desc));
surface_desc.dwSize = sizeof(surface_desc);
surface_desc.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;
- surface_desc.ddsCaps.dwCaps = test_data[i].caps_in;
+ surface_desc.ddsCaps.dwCaps = caps_in;
surface_desc.ddsCaps.dwCaps2 = test_data[i].caps2_in;
if (test_data[i].pf)
{
@@ -6396,13 +6353,12 @@ static void test_rt_caps(const GUID *device_guid)
}
surface_desc.dwWidth = 640;
surface_desc.dwHeight = 480;
+ if ((caps_in & DDSCAPS_VIDEOMEMORY) && !(hal_caps.ddsCaps.dwCaps & DDSCAPS_VIDEOMEMORY))
+ expected_hr = DDERR_NODIRECTDRAWHW;
+ else
+ expected_hr = DD_OK;
hr = IDirectDraw7_CreateSurface(ddraw, &surface_desc, &surface, NULL);
- if (surface_desc.ddsCaps.dwCaps & DDSCAPS_VIDEOMEMORY && hr == DDERR_NODIRECTDRAWHW)
- {
- skip("No 3d hardware, skipping test %u, software_device %u.\n", i, software_device);
- continue;
- }
- ok(hr == DD_OK || (software_device && (surface_desc.ddsCaps.dwCaps & (DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER))
+ ok(hr == expected_hr || (software_device && (surface_desc.ddsCaps.dwCaps & (DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER))
== (DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER) && hr == DDERR_UNSUPPORTED)
|| broken(software_device && test_data[i].pf == &p8_fmt && hr == DDERR_INVALIDPIXELFORMAT),
"Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
@@ -6414,27 +6370,22 @@ static void test_rt_caps(const GUID *device_guid)
hr = IDirectDrawSurface7_GetSurfaceDesc(surface, &surface_desc);
ok(hr == DD_OK, "Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
- if (software_device)
- {
- expected_caps = test_data[i].caps_out[software_device]
- ? test_data[i].caps_out[software_device] : test_data[i].caps_out[0];
-
- todo_wine_if(test_data[i].caps_out[software_device]
- && surface_desc.ddsCaps.dwCaps == test_data[i].caps_out[0])
- ok(surface_desc.ddsCaps.dwCaps == expected_caps
- || broken(surface_desc.ddsCaps.dwCaps == test_data[i].caps_out[0]),
- "Got unexpected caps %#x, test %u, software_device %u.\n",
- surface_desc.ddsCaps.dwCaps, i, software_device);
- }
+ if ((caps_in & DDSCAPS_SYSTEMMEMORY) || (test_data[i].caps2_in & (DDSCAPS2_D3DTEXTUREMANAGE
+ | DDSCAPS2_TEXTUREMANAGE)) || !(hal_caps.ddsCaps.dwCaps & DDSCAPS_VIDEOMEMORY))
+ expected_caps = caps_in | DDSCAPS_SYSTEMMEMORY;
else
- {
- ok(test_data[i].caps_out[0] == ~0u || surface_desc.ddsCaps.dwCaps == test_data[i].caps_out[0],
- "Got unexpected caps %#x, expected %#x, test %u, software_device %u.\n",
- surface_desc.ddsCaps.dwCaps, test_data[i].caps_out[0], i, software_device);
- }
- ok(surface_desc.ddsCaps.dwCaps2 == test_data[i].caps2_out,
+ expected_caps = caps_in | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM;
+
+ ok(surface_desc.ddsCaps.dwCaps == expected_caps || (test_data[i].pf == &p8_fmt
+ && surface_desc.ddsCaps.dwCaps == (caps_in | DDSCAPS_SYSTEMMEMORY))
+ || (software_device && test_data[i].pf == &z_fmt
+ && surface_desc.ddsCaps.dwCaps == (caps_in | DDSCAPS_SYSTEMMEMORY)),
+ "Got unexpected caps %#x, expected %#x, test %u, software_device %u.\n",
+ surface_desc.ddsCaps.dwCaps, expected_caps, i, software_device);
+
+ ok(surface_desc.ddsCaps.dwCaps2 == test_data[i].caps2_in,
"Got unexpected caps2 %#x, expected %#x, test %u, software_device %u.\n",
- surface_desc.ddsCaps.dwCaps2, test_data[i].caps2_out, i, software_device);
+ surface_desc.ddsCaps.dwCaps2, test_data[i].caps2_in, i, software_device);
hr = IDirect3D7_CreateDevice(d3d, device_guid, surface, &device);
todo_wine_if(software_device && test_data[i].create_device_hr == D3DERR_SURFACENOTINVIDMEM)
@@ -6492,7 +6443,7 @@ static void test_rt_caps(const GUID *device_guid)
hr = IDirect3DDevice7_SetRenderTarget(device, rt, 0);
ok(hr == test_data[i].set_rt_hr || (software_device && hr == DDERR_NOPALETTEATTACHED)
- || broken(hr == test_data[i].alternative_set_rt_hr),
+ || hr == test_data[i].alternative_set_rt_hr,
"Got unexpected hr %#x, test %u, software_device %u.\n",
hr, i, software_device);
if (SUCCEEDED(hr) || hr == DDERR_INVALIDPIXELFORMAT)
--
2.29.2
More information about the wine-devel
mailing list