ddraw: Attach the first surface in the swap chain to the last one.
This commit is contained in:
parent
ab8d59c29d
commit
74e3f516bc
|
@ -469,7 +469,8 @@ static void ddraw_surface_cleanup(struct ddraw_surface *surface)
|
||||||
|
|
||||||
surf = surface->complex_array[i];
|
surf = surface->complex_array[i];
|
||||||
surface->complex_array[i] = NULL;
|
surface->complex_array[i] = NULL;
|
||||||
ddraw_surface_cleanup(surf);
|
if (!surf->is_complex_root)
|
||||||
|
ddraw_surface_cleanup(surf);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (surface->device1)
|
if (surface->device1)
|
||||||
|
@ -4724,19 +4725,22 @@ static HRESULT WINAPI ddraw_surface7_SetPalette(IDirectDrawSurface7 *iface, IDir
|
||||||
DDSCAPS2 caps2 = { DDSCAPS_FLIP, 0, 0, 0 };
|
DDSCAPS2 caps2 = { DDSCAPS_FLIP, 0, 0, 0 };
|
||||||
|
|
||||||
surf = This;
|
surf = This;
|
||||||
while(1)
|
for (;;)
|
||||||
{
|
{
|
||||||
IDirectDrawSurface7 *attach;
|
IDirectDrawSurface7 *attach;
|
||||||
HRESULT hr;
|
|
||||||
hr = ddraw_surface7_GetAttachedSurface(&surf->IDirectDrawSurface7_iface, &caps2, &attach);
|
if (FAILED(hr = ddraw_surface7_GetAttachedSurface(&surf->IDirectDrawSurface7_iface, &caps2, &attach)))
|
||||||
if(hr != DD_OK)
|
break;
|
||||||
|
|
||||||
|
surf = impl_from_IDirectDrawSurface7(attach);
|
||||||
|
if (surf == This)
|
||||||
{
|
{
|
||||||
|
ddraw_surface7_Release(attach);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
TRACE("Setting palette on %p\n", attach);
|
TRACE("Setting palette on %p.\n", attach);
|
||||||
ddraw_surface7_SetPalette(attach, Pal);
|
ddraw_surface7_SetPalette(attach, Pal);
|
||||||
surf = impl_from_IDirectDrawSurface7(attach);
|
|
||||||
ddraw_surface7_Release(attach);
|
ddraw_surface7_Release(attach);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6002,6 +6006,7 @@ HRESULT ddraw_surface_create(struct ddraw *ddraw, const DDSURFACEDESC2 *surface_
|
||||||
*attach = last;
|
*attach = last;
|
||||||
attach = &last->complex_array[0];
|
attach = &last->complex_array[0];
|
||||||
}
|
}
|
||||||
|
*attach = root;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (surface_desc->ddsCaps.dwCaps & DDSCAPS_PRIMARYSURFACE)
|
if (surface_desc->ddsCaps.dwCaps & DDSCAPS_PRIMARYSURFACE)
|
||||||
|
|
|
@ -3605,10 +3605,9 @@ static void test_flip(void)
|
||||||
"Got unexpected caps %#x.\n", surface_desc.ddsCaps.dwCaps);
|
"Got unexpected caps %#x.\n", surface_desc.ddsCaps.dwCaps);
|
||||||
|
|
||||||
hr = IDirectDrawSurface_GetAttachedSurface(backbuffer3, &caps, &surface);
|
hr = IDirectDrawSurface_GetAttachedSurface(backbuffer3, &caps, &surface);
|
||||||
todo_wine ok(SUCCEEDED(hr), "Failed to get attached surface, hr %#x.\n", hr);
|
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);
|
ok(surface == primary, "Got unexpected surface %p, expected %p.\n", surface, primary);
|
||||||
if (surface)
|
IDirectDrawSurface_Release(surface);
|
||||||
IDirectDrawSurface_Release(surface);
|
|
||||||
|
|
||||||
memset(&surface_desc, 0, sizeof(surface_desc));
|
memset(&surface_desc, 0, sizeof(surface_desc));
|
||||||
surface_desc.dwSize = sizeof(surface_desc);
|
surface_desc.dwSize = sizeof(surface_desc);
|
||||||
|
|
|
@ -4286,10 +4286,9 @@ static void test_flip(void)
|
||||||
"Got unexpected caps %#x.\n", surface_desc.ddsCaps.dwCaps);
|
"Got unexpected caps %#x.\n", surface_desc.ddsCaps.dwCaps);
|
||||||
|
|
||||||
hr = IDirectDrawSurface_GetAttachedSurface(backbuffer3, &caps, &surface);
|
hr = IDirectDrawSurface_GetAttachedSurface(backbuffer3, &caps, &surface);
|
||||||
todo_wine ok(SUCCEEDED(hr), "Failed to get attached surface, hr %#x.\n", hr);
|
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);
|
ok(surface == primary, "Got unexpected surface %p, expected %p.\n", surface, primary);
|
||||||
if (surface)
|
IDirectDrawSurface_Release(surface);
|
||||||
IDirectDrawSurface_Release(surface);
|
|
||||||
|
|
||||||
memset(&surface_desc, 0, sizeof(surface_desc));
|
memset(&surface_desc, 0, sizeof(surface_desc));
|
||||||
surface_desc.dwSize = sizeof(surface_desc);
|
surface_desc.dwSize = sizeof(surface_desc);
|
||||||
|
|
|
@ -4890,10 +4890,9 @@ static void test_flip(void)
|
||||||
"Got unexpected caps %#x.\n", surface_desc.ddsCaps.dwCaps);
|
"Got unexpected caps %#x.\n", surface_desc.ddsCaps.dwCaps);
|
||||||
|
|
||||||
hr = IDirectDrawSurface4_GetAttachedSurface(backbuffer3, &caps, &surface);
|
hr = IDirectDrawSurface4_GetAttachedSurface(backbuffer3, &caps, &surface);
|
||||||
todo_wine ok(SUCCEEDED(hr), "Failed to get attached surface, hr %#x.\n", hr);
|
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);
|
ok(surface == primary, "Got unexpected surface %p, expected %p.\n", surface, primary);
|
||||||
if (surface)
|
IDirectDrawSurface4_Release(surface);
|
||||||
IDirectDrawSurface4_Release(surface);
|
|
||||||
|
|
||||||
memset(&surface_desc, 0, sizeof(surface_desc));
|
memset(&surface_desc, 0, sizeof(surface_desc));
|
||||||
surface_desc.dwSize = sizeof(surface_desc);
|
surface_desc.dwSize = sizeof(surface_desc);
|
||||||
|
|
|
@ -4777,10 +4777,9 @@ static void test_flip(void)
|
||||||
"Got unexpected caps %#x.\n", surface_desc.ddsCaps.dwCaps);
|
"Got unexpected caps %#x.\n", surface_desc.ddsCaps.dwCaps);
|
||||||
|
|
||||||
hr = IDirectDrawSurface7_GetAttachedSurface(backbuffer3, &caps, &surface);
|
hr = IDirectDrawSurface7_GetAttachedSurface(backbuffer3, &caps, &surface);
|
||||||
todo_wine ok(SUCCEEDED(hr), "Failed to get attached surface, hr %#x.\n", hr);
|
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);
|
ok(surface == primary, "Got unexpected surface %p, expected %p.\n", surface, primary);
|
||||||
if (surface)
|
IDirectDrawSurface7_Release(surface);
|
||||||
IDirectDrawSurface7_Release(surface);
|
|
||||||
|
|
||||||
memset(&surface_desc, 0, sizeof(surface_desc));
|
memset(&surface_desc, 0, sizeof(surface_desc));
|
||||||
surface_desc.dwSize = sizeof(surface_desc);
|
surface_desc.dwSize = sizeof(surface_desc);
|
||||||
|
|
Loading…
Reference in New Issue