Paul Gofman : ddraw: Restore full complex attachment chain in ddraw_surface7_Restore().
Alexandre Julliard
julliard at winehq.org
Tue Aug 16 16:01:00 CDT 2022
Module: wine
Branch: master
Commit: f48f5155eee169666ed36d324f90fd9884f63793
URL: https://gitlab.winehq.org/wine/wine/-/commit/f48f5155eee169666ed36d324f90fd9884f63793
Author: Paul Gofman <pgofman at codeweavers.com>
Date: Mon Aug 15 20:16:58 2022 -0500
ddraw: Restore full complex attachment chain in ddraw_surface7_Restore().
---
dlls/ddraw/surface.c | 12 ++++++++++--
dlls/ddraw/tests/ddraw1.c | 2 +-
dlls/ddraw/tests/ddraw2.c | 2 +-
dlls/ddraw/tests/ddraw4.c | 2 +-
dlls/ddraw/tests/ddraw7.c | 2 +-
5 files changed, 14 insertions(+), 6 deletions(-)
diff --git a/dlls/ddraw/surface.c b/dlls/ddraw/surface.c
index afba0d5ac4b..038539632e1 100644
--- a/dlls/ddraw/surface.c
+++ b/dlls/ddraw/surface.c
@@ -3787,6 +3787,7 @@ static HRESULT WINAPI ddraw_surface1_IsLost(IDirectDrawSurface *iface)
static HRESULT WINAPI ddraw_surface7_Restore(IDirectDrawSurface7 *iface)
{
struct ddraw_surface *surface = impl_from_IDirectDrawSurface7(iface);
+ struct ddraw_surface *attachment;
unsigned int i;
TRACE("iface %p.\n", iface);
@@ -3832,10 +3833,17 @@ static HRESULT WINAPI ddraw_surface7_Restore(IDirectDrawSurface7 *iface)
return DDERR_WRONGMODE;
surface->is_lost = FALSE;
+
for(i = 0; i < MAX_COMPLEX_ATTACHED; i++)
{
- if (surface->complex_array[i])
- surface->complex_array[i]->is_lost = FALSE;
+ attachment = surface->complex_array[i];
+ while (attachment)
+ {
+ attachment->is_lost = FALSE;
+ attachment = attachment->complex_array[0];
+ if (attachment == surface->complex_array[i])
+ break;
+ }
}
return DD_OK;
diff --git a/dlls/ddraw/tests/ddraw1.c b/dlls/ddraw/tests/ddraw1.c
index 8d5896e45a0..1629660aedc 100644
--- a/dlls/ddraw/tests/ddraw1.c
+++ b/dlls/ddraw/tests/ddraw1.c
@@ -8241,7 +8241,7 @@ static void test_lost_device(void)
ok(back_buffer2 != back_buffer, "Got the same surface.\n");
ok(back_buffer2 != surface, "Got the same surface.\n");
hr = IDirectDrawSurface_IsLost(back_buffer2);
- todo_wine ok(hr == DD_OK, "Got unexpected hr %#lx.\n", hr);
+ ok(hr == DD_OK, "Got unexpected hr %#lx.\n", hr);
IDirectDrawSurface_Release(back_buffer2);
if (ds)
diff --git a/dlls/ddraw/tests/ddraw2.c b/dlls/ddraw/tests/ddraw2.c
index 22cd59ec9b0..0aea1587156 100644
--- a/dlls/ddraw/tests/ddraw2.c
+++ b/dlls/ddraw/tests/ddraw2.c
@@ -9236,7 +9236,7 @@ static void test_lost_device(void)
ok(back_buffer2 != back_buffer, "Got the same surface.\n");
ok(back_buffer2 != surface, "Got the same surface.\n");
hr = IDirectDrawSurface_IsLost(back_buffer2);
- todo_wine ok(hr == DD_OK, "Got unexpected hr %#lx.\n", hr);
+ ok(hr == DD_OK, "Got unexpected hr %#lx.\n", hr);
IDirectDrawSurface_Release(back_buffer2);
if (ds)
diff --git a/dlls/ddraw/tests/ddraw4.c b/dlls/ddraw/tests/ddraw4.c
index c1bd91dec88..ab37adc000a 100644
--- a/dlls/ddraw/tests/ddraw4.c
+++ b/dlls/ddraw/tests/ddraw4.c
@@ -10655,7 +10655,7 @@ static void test_lost_device(void)
ok(back_buffer2 != back_buffer, "Got the same surface.\n");
ok(back_buffer2 != surface, "Got the same surface.\n");
hr = IDirectDrawSurface4_IsLost(back_buffer2);
- todo_wine ok(hr == DD_OK, "Got unexpected hr %#lx.\n", hr);
+ ok(hr == DD_OK, "Got unexpected hr %#lx.\n", hr);
IDirectDrawSurface4_Release(back_buffer2);
if (ds)
diff --git a/dlls/ddraw/tests/ddraw7.c b/dlls/ddraw/tests/ddraw7.c
index 8ea566cee4c..c72ea64c17d 100644
--- a/dlls/ddraw/tests/ddraw7.c
+++ b/dlls/ddraw/tests/ddraw7.c
@@ -10405,7 +10405,7 @@ static void test_lost_device(void)
ok(back_buffer2 != back_buffer, "Got the same surface.\n");
ok(back_buffer2 != surface, "Got the same surface.\n");
hr = IDirectDrawSurface7_IsLost(back_buffer2);
- todo_wine ok(hr == DD_OK, "Got unexpected hr %#lx.\n", hr);
+ ok(hr == DD_OK, "Got unexpected hr %#lx.\n", hr);
IDirectDrawSurface7_Release(back_buffer2);
if (ds)
More information about the wine-cvs
mailing list