Module: wine
Branch: master
Commit: 23cfa8a2106a97ab591066ed0ebc89a4370ecb5e
URL: https://gitlab.winehq.org/wine/wine/-/commit/23cfa8a2106a97ab591066ed0ebc89…
Author: Stefan Dösinger <stefan(a)codeweavers.com>
Date: Sat Mar 25 17:37:50 2023 +0300
ddraw/tests: Native 64 bit ddraw has a video memory leak.
---
dlls/ddraw/tests/ddraw7.c | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)
diff --git a/dlls/ddraw/tests/ddraw7.c b/dlls/ddraw/tests/ddraw7.c
index d875afcfa16..06e7f1cefac 100644
--- a/dlls/ddraw/tests/ddraw7.c
+++ b/dlls/ddraw/tests/ddraw7.c
@@ -9034,12 +9034,18 @@ static void test_create_surface_pitch(void)
hr = IDirectDraw7_CreateSurface(ddraw, &surface_desc, &primary, NULL);
ok(SUCCEEDED(hr), "Failed to create a primary surface, hr %#lx.\n", hr);
- hr = IDirectDraw7_GetAvailableVidMem(ddraw, &vidmem_caps, &vidmem_total, &vidmem_free);
- ok(SUCCEEDED(hr) || hr == DDERR_NODIRECTDRAWHW,
- "Failed to get available video memory, hr %#lx.\n", hr);
-
for (i = 0; i < ARRAY_SIZE(test_data); ++i)
{
+ /* 64 bit ddraw can leak video memory when trying to create a DDSCAPS_TEXTURE surface.
+ * Surface creation fails, but video memory is consumed anyway. Update the free vidmem
+ * every iteration.
+ *
+ * This E_NOINTERFACE texture creation failure does not happen in earlier versions of
+ * the API, so we get to release the surface and avoid the vidmem leak. */
+ hr = IDirectDraw7_GetAvailableVidMem(ddraw, &vidmem_caps, &vidmem_total, &vidmem_free);
+ ok(SUCCEEDED(hr) || hr == DDERR_NODIRECTDRAWHW,
+ "Failed to get available video memory, hr %#lx.\n", hr);
+
memset(&surface_desc, 0, sizeof(surface_desc));
surface_desc.dwSize = sizeof(surface_desc);
surface_desc.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT | DDSD_PIXELFORMAT | test_data[i].flags_in;