Module: wine Branch: master Commit: 74e3f516bc331205474835811d3984b9c53b0f35 URL: http://source.winehq.org/git/wine.git/?a=commit;h=74e3f516bc331205474835811d...
Author: Henri Verbeet hverbeet@codeweavers.com Date: Wed Dec 4 09:49:34 2013 +0100
ddraw: Attach the first surface in the swap chain to the last one.
---
dlls/ddraw/surface.c | 19 ++++++++++++------- dlls/ddraw/tests/ddraw1.c | 7 +++---- dlls/ddraw/tests/ddraw2.c | 7 +++---- dlls/ddraw/tests/ddraw4.c | 7 +++---- dlls/ddraw/tests/ddraw7.c | 7 +++---- 5 files changed, 24 insertions(+), 23 deletions(-)
diff --git a/dlls/ddraw/surface.c b/dlls/ddraw/surface.c index 8d35d1e..477ef4f 100644 --- a/dlls/ddraw/surface.c +++ b/dlls/ddraw/surface.c @@ -469,7 +469,8 @@ static void ddraw_surface_cleanup(struct ddraw_surface *surface)
surf = surface->complex_array[i]; surface->complex_array[i] = NULL; - ddraw_surface_cleanup(surf); + if (!surf->is_complex_root) + ddraw_surface_cleanup(surf); }
if (surface->device1) @@ -4724,19 +4725,22 @@ static HRESULT WINAPI ddraw_surface7_SetPalette(IDirectDrawSurface7 *iface, IDir DDSCAPS2 caps2 = { DDSCAPS_FLIP, 0, 0, 0 };
surf = This; - while(1) + for (;;) { IDirectDrawSurface7 *attach; - HRESULT hr; - hr = ddraw_surface7_GetAttachedSurface(&surf->IDirectDrawSurface7_iface, &caps2, &attach); - if(hr != DD_OK) + + if (FAILED(hr = ddraw_surface7_GetAttachedSurface(&surf->IDirectDrawSurface7_iface, &caps2, &attach))) + break; + + surf = impl_from_IDirectDrawSurface7(attach); + if (surf == This) { + ddraw_surface7_Release(attach); break; }
- TRACE("Setting palette on %p\n", attach); + TRACE("Setting palette on %p.\n", attach); ddraw_surface7_SetPalette(attach, Pal); - surf = impl_from_IDirectDrawSurface7(attach); ddraw_surface7_Release(attach); } } @@ -6002,6 +6006,7 @@ HRESULT ddraw_surface_create(struct ddraw *ddraw, const DDSURFACEDESC2 *surface_ *attach = last; attach = &last->complex_array[0]; } + *attach = root; }
if (surface_desc->ddsCaps.dwCaps & DDSCAPS_PRIMARYSURFACE) diff --git a/dlls/ddraw/tests/ddraw1.c b/dlls/ddraw/tests/ddraw1.c index 64f8f37..c8d60fe 100644 --- a/dlls/ddraw/tests/ddraw1.c +++ b/dlls/ddraw/tests/ddraw1.c @@ -3605,10 +3605,9 @@ static void test_flip(void) "Got unexpected caps %#x.\n", surface_desc.ddsCaps.dwCaps);
hr = IDirectDrawSurface_GetAttachedSurface(backbuffer3, &caps, &surface); - todo_wine ok(SUCCEEDED(hr), "Failed to get attached surface, hr %#x.\n", hr); - todo_wine ok(surface == primary, "Got unexpected surface %p, expected %p.\n", surface, primary); - if (surface) - IDirectDrawSurface_Release(surface); + ok(SUCCEEDED(hr), "Failed to get attached surface, hr %#x.\n", hr); + ok(surface == primary, "Got unexpected surface %p, expected %p.\n", surface, primary); + IDirectDrawSurface_Release(surface);
memset(&surface_desc, 0, sizeof(surface_desc)); surface_desc.dwSize = sizeof(surface_desc); diff --git a/dlls/ddraw/tests/ddraw2.c b/dlls/ddraw/tests/ddraw2.c index 77a1419..34559cc 100644 --- a/dlls/ddraw/tests/ddraw2.c +++ b/dlls/ddraw/tests/ddraw2.c @@ -4286,10 +4286,9 @@ static void test_flip(void) "Got unexpected caps %#x.\n", surface_desc.ddsCaps.dwCaps);
hr = IDirectDrawSurface_GetAttachedSurface(backbuffer3, &caps, &surface); - todo_wine ok(SUCCEEDED(hr), "Failed to get attached surface, hr %#x.\n", hr); - todo_wine ok(surface == primary, "Got unexpected surface %p, expected %p.\n", surface, primary); - if (surface) - IDirectDrawSurface_Release(surface); + ok(SUCCEEDED(hr), "Failed to get attached surface, hr %#x.\n", hr); + ok(surface == primary, "Got unexpected surface %p, expected %p.\n", surface, primary); + IDirectDrawSurface_Release(surface);
memset(&surface_desc, 0, sizeof(surface_desc)); surface_desc.dwSize = sizeof(surface_desc); diff --git a/dlls/ddraw/tests/ddraw4.c b/dlls/ddraw/tests/ddraw4.c index 994bfb3..865dc0f 100644 --- a/dlls/ddraw/tests/ddraw4.c +++ b/dlls/ddraw/tests/ddraw4.c @@ -4890,10 +4890,9 @@ static void test_flip(void) "Got unexpected caps %#x.\n", surface_desc.ddsCaps.dwCaps);
hr = IDirectDrawSurface4_GetAttachedSurface(backbuffer3, &caps, &surface); - todo_wine ok(SUCCEEDED(hr), "Failed to get attached surface, hr %#x.\n", hr); - todo_wine ok(surface == primary, "Got unexpected surface %p, expected %p.\n", surface, primary); - if (surface) - IDirectDrawSurface4_Release(surface); + ok(SUCCEEDED(hr), "Failed to get attached surface, hr %#x.\n", hr); + ok(surface == primary, "Got unexpected surface %p, expected %p.\n", surface, primary); + IDirectDrawSurface4_Release(surface);
memset(&surface_desc, 0, sizeof(surface_desc)); surface_desc.dwSize = sizeof(surface_desc); diff --git a/dlls/ddraw/tests/ddraw7.c b/dlls/ddraw/tests/ddraw7.c index 2ea98cb..050d303 100644 --- a/dlls/ddraw/tests/ddraw7.c +++ b/dlls/ddraw/tests/ddraw7.c @@ -4777,10 +4777,9 @@ static void test_flip(void) "Got unexpected caps %#x.\n", surface_desc.ddsCaps.dwCaps);
hr = IDirectDrawSurface7_GetAttachedSurface(backbuffer3, &caps, &surface); - todo_wine ok(SUCCEEDED(hr), "Failed to get attached surface, hr %#x.\n", hr); - todo_wine ok(surface == primary, "Got unexpected surface %p, expected %p.\n", surface, primary); - if (surface) - IDirectDrawSurface7_Release(surface); + ok(SUCCEEDED(hr), "Failed to get attached surface, hr %#x.\n", hr); + ok(surface == primary, "Got unexpected surface %p, expected %p.\n", surface, primary); + IDirectDrawSurface7_Release(surface);
memset(&surface_desc, 0, sizeof(surface_desc)); surface_desc.dwSize = sizeof(surface_desc);