From d2e665230ac30da62015dcae69e06501e7fe3c94 Mon Sep 17 00:00:00 2001 From: Henri Verbeet Date: Tue, 12 Apr 2011 18:28:39 +0200 Subject: [PATCH] wined3d: Get rid of the swapchain destroy callback. --- dlls/d3d8/device.c | 11 ++--------- dlls/d3d9/device.c | 11 ++--------- dlls/ddraw/ddraw.c | 22 +++++++--------------- dlls/ddraw/ddraw_private.h | 3 --- dlls/ddraw/surface.c | 8 +++++--- dlls/dxgi/swapchain.c | 9 +-------- dlls/wined3d/device.c | 10 +++++----- include/wine/wined3d.idl | 3 --- 8 files changed, 22 insertions(+), 55 deletions(-) diff --git a/dlls/d3d8/device.c b/dlls/d3d8/device.c index 54ee3f2ae22..1aea8ea7a9f 100644 --- a/dlls/d3d8/device.c +++ b/dlls/d3d8/device.c @@ -254,13 +254,6 @@ static void *d3d8_get_object(struct d3d8_handle_table *t, DWORD handle, enum d3d return entry->object; } -static ULONG WINAPI D3D8CB_DestroySwapChain(IWineD3DSwapChain *swapchain) -{ - TRACE("swapchain %p.\n", swapchain); - - return IWineD3DSwapChain_Release(swapchain); -} - static inline IDirect3DDevice8Impl *impl_from_IDirect3DDevice8(IDirect3DDevice8 *iface) { return CONTAINING_RECORD(iface, IDirect3DDevice8Impl, IDirect3DDevice8_iface); @@ -327,7 +320,7 @@ static ULONG WINAPI IDirect3DDevice8Impl_Release(IDirect3DDevice8 *iface) } HeapFree(GetProcessHeap(), 0, This->decls); - IWineD3DDevice_Uninit3D(This->WineD3DDevice, D3D8CB_DestroySwapChain); + IWineD3DDevice_Uninit3D(This->WineD3DDevice); IWineD3DDevice_ReleaseFocusWindow(This->WineD3DDevice); IWineD3DDevice_Release(This->WineD3DDevice); HeapFree(GetProcessHeap(), 0, This->handle_table.entries); @@ -3104,7 +3097,7 @@ HRESULT device_init(IDirect3DDevice8Impl *device, struct wined3d *wined3d, UINT err: wined3d_mutex_lock(); - IWineD3DDevice_Uninit3D(device->WineD3DDevice, D3D8CB_DestroySwapChain); + IWineD3DDevice_Uninit3D(device->WineD3DDevice); IWineD3DDevice_ReleaseFocusWindow(device->WineD3DDevice); IWineD3DDevice_Release(device->WineD3DDevice); wined3d_mutex_unlock(); diff --git a/dlls/d3d9/device.c b/dlls/d3d9/device.c index c4691d8593e..c3215d41dac 100644 --- a/dlls/d3d9/device.c +++ b/dlls/d3d9/device.c @@ -181,13 +181,6 @@ static UINT vertex_count_from_primitive_count(D3DPRIMITIVETYPE primitive_type, U } } -static ULONG WINAPI D3D9CB_DestroySwapChain(IWineD3DSwapChain *swapchain) -{ - TRACE("swapchain %p.\n", swapchain); - - return IWineD3DSwapChain_Release(swapchain); -} - /* IDirect3D IUnknown parts follow: */ static HRESULT WINAPI IDirect3DDevice9Impl_QueryInterface(LPDIRECT3DDEVICE9EX iface, REFIID riid, LPVOID* ppobj) { IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface; @@ -266,7 +259,7 @@ static ULONG WINAPI DECLSPEC_HOTPATCH IDirect3DDevice9Impl_Release(LPDIRECT3DDEV } HeapFree(GetProcessHeap(), 0, This->convertedDecls); - IWineD3DDevice_Uninit3D(This->WineD3DDevice, D3D9CB_DestroySwapChain); + IWineD3DDevice_Uninit3D(This->WineD3DDevice); IWineD3DDevice_ReleaseFocusWindow(This->WineD3DDevice); IWineD3DDevice_Release(This->WineD3DDevice); wined3d_mutex_unlock(); @@ -3377,7 +3370,7 @@ HRESULT device_init(IDirect3DDevice9Impl *device, struct wined3d *wined3d, UINT { ERR("Failed to allocate FVF vertex declaration map memory.\n"); wined3d_mutex_lock(); - IWineD3DDevice_Uninit3D(device->WineD3DDevice, D3D9CB_DestroySwapChain); + IWineD3DDevice_Uninit3D(device->WineD3DDevice); IWineD3DDevice_ReleaseFocusWindow(device->WineD3DDevice); IWineD3DDevice_Release(device->WineD3DDevice); wined3d_mutex_unlock(); diff --git a/dlls/ddraw/ddraw.c b/dlls/ddraw/ddraw.c index d056dcf39c3..5d8abeec347 100644 --- a/dlls/ddraw/ddraw.c +++ b/dlls/ddraw/ddraw.c @@ -2562,13 +2562,12 @@ HRESULT WINAPI ddraw_recreate_surfaces_cb(IDirectDrawSurface7 *surf, DDSURFACEDE /* If there's a swapchain, it owns the wined3d surfaces. So Destroy * the swapchain */ - if(swapchain) { + if (swapchain) + { /* The backbuffers have the swapchain set as well, but the primary - * owns it and destroys it - */ - if(surfImpl->surface_desc.ddsCaps.dwCaps & DDSCAPS_PRIMARYSURFACE) { - IWineD3DDevice_UninitGDI(This->wineD3DDevice, D3D7CB_DestroySwapChain); - } + * owns it and destroys it. */ + if (surfImpl->surface_desc.ddsCaps.dwCaps & DDSCAPS_PRIMARYSURFACE) + IWineD3DDevice_UninitGDI(This->wineD3DDevice); surfImpl->isRenderTarget = FALSE; } else { if(IWineD3DSurface_Release(wineD3DSurface) == 0) @@ -2603,7 +2602,7 @@ static HRESULT ddraw_recreate_surfaces(IDirectDrawImpl *This) /* Should happen almost never */ FIXME("(%p) Switching to non-opengl surfaces with d3d started. Is this a bug?\n", This); /* Shutdown d3d */ - IWineD3DDevice_Uninit3D(This->wineD3DDevice, D3D7CB_DestroySwapChain); + IWineD3DDevice_Uninit3D(This->wineD3DDevice); } /* Contrary: D3D starting is handled by the caller, because it knows the render target */ @@ -2614,13 +2613,6 @@ static HRESULT ddraw_recreate_surfaces(IDirectDrawImpl *This) ddraw_recreate_surfaces_cb); } -ULONG WINAPI D3D7CB_DestroySwapChain(IWineD3DSwapChain *swapchain) -{ - TRACE("swapchain %p.\n", swapchain); - - return IWineD3DSwapChain_Release(swapchain); -} - /***************************************************************************** * ddraw_create_surface * @@ -2898,7 +2890,7 @@ static HRESULT ddraw_attach_d3d_device(IDirectDrawImpl *ddraw, IDirectDrawSurfac { ERR("Error allocating an array for the converted vertex decls.\n"); ddraw->declArraySize = 0; - hr = IWineD3DDevice_Uninit3D(ddraw->wineD3DDevice, D3D7CB_DestroySwapChain); + hr = IWineD3DDevice_Uninit3D(ddraw->wineD3DDevice); return E_OUTOFMEMORY; } diff --git a/dlls/ddraw/ddraw_private.h b/dlls/ddraw/ddraw_private.h index aa6b2d57d35..b16e6962a55 100644 --- a/dlls/ddraw/ddraw_private.h +++ b/dlls/ddraw/ddraw_private.h @@ -51,9 +51,6 @@ typedef struct IDirect3DMaterialImpl IDirect3DMaterialImpl; typedef struct IDirect3DExecuteBufferImpl IDirect3DExecuteBufferImpl; typedef struct IDirect3DVertexBufferImpl IDirect3DVertexBufferImpl; -/* Callbacks for implicit object destruction */ -extern ULONG WINAPI D3D7CB_DestroySwapChain(IWineD3DSwapChain *pSwapChain) DECLSPEC_HIDDEN; - /* Global critical section */ extern CRITICAL_SECTION ddraw_cs DECLSPEC_HIDDEN; diff --git a/dlls/ddraw/surface.c b/dlls/ddraw/surface.c index be32ce9bd63..b9cedc1dd0f 100644 --- a/dlls/ddraw/surface.c +++ b/dlls/ddraw/surface.c @@ -372,7 +372,7 @@ static ULONG WINAPI ddraw_surface7_Release(IDirectDrawSurface7 *iface) HeapFree(GetProcessHeap(), 0, ddraw->decls); ddraw->numConvertedDecls = 0; - if (FAILED(IWineD3DDevice_Uninit3D(ddraw->wineD3DDevice, D3D7CB_DestroySwapChain))) + if (FAILED(IWineD3DDevice_Uninit3D(ddraw->wineD3DDevice))) { /* Not good */ ERR("(%p) Failed to uninit 3D\n", This); @@ -392,8 +392,10 @@ static ULONG WINAPI ddraw_surface7_Release(IDirectDrawSurface7 *iface) This->wineD3DSwapChain = NULL; /* Uninit3D releases the swapchain */ ddraw->d3d_initialized = FALSE; ddraw->d3d_target = NULL; - } else { - IWineD3DDevice_UninitGDI(ddraw->wineD3DDevice, D3D7CB_DestroySwapChain); + } + else + { + IWineD3DDevice_UninitGDI(ddraw->wineD3DDevice); This->wineD3DSwapChain = NULL; } diff --git a/dlls/dxgi/swapchain.c b/dlls/dxgi/swapchain.c index 4a58ed2a207..1956f9db4ad 100644 --- a/dlls/dxgi/swapchain.c +++ b/dlls/dxgi/swapchain.c @@ -59,13 +59,6 @@ static ULONG STDMETHODCALLTYPE dxgi_swapchain_AddRef(IDXGISwapChain *iface) return refcount; } -static ULONG STDMETHODCALLTYPE destroy_swapchain(IWineD3DSwapChain *swapchain) -{ - TRACE("swapchain %p\n", swapchain); - - return IWineD3DSwapChain_Release(swapchain); -} - static ULONG STDMETHODCALLTYPE dxgi_swapchain_Release(IDXGISwapChain *iface) { struct dxgi_swapchain *This = (struct dxgi_swapchain *)iface; @@ -87,7 +80,7 @@ static ULONG STDMETHODCALLTYPE dxgi_swapchain_Release(IDXGISwapChain *iface) } else { - hr = IWineD3DDevice_Uninit3D(wined3d_device, destroy_swapchain); + hr = IWineD3DDevice_Uninit3D(wined3d_device); IWineD3DDevice_Release(wined3d_device); if (FAILED(hr)) { diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c index 7b4ad8a6e54..7a35f258503 100644 --- a/dlls/wined3d/device.c +++ b/dlls/wined3d/device.c @@ -2126,8 +2126,7 @@ static HRESULT WINAPI device_unload_resource(struct wined3d_resource *resource, return S_OK; } -static HRESULT WINAPI IWineD3DDeviceImpl_Uninit3D(IWineD3DDevice *iface, - D3DCB_DESTROYSWAPCHAINFN D3DCB_DestroySwapChain) +static HRESULT WINAPI IWineD3DDeviceImpl_Uninit3D(IWineD3DDevice *iface) { IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *) iface; const struct wined3d_gl_info *gl_info; @@ -2266,7 +2265,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_Uninit3D(IWineD3DDevice *iface, for (i = 0; i < This->swapchain_count; ++i) { TRACE("Releasing the implicit swapchain %u.\n", i); - if (D3DCB_DestroySwapChain((IWineD3DSwapChain *)This->swapchains[i]) > 0) + if (IWineD3DSwapChain_Release((IWineD3DSwapChain *)This->swapchains[i])) { FIXME("(%p) Something's still holding the implicit swapchain\n", This); } @@ -2290,14 +2289,15 @@ static HRESULT WINAPI IWineD3DDeviceImpl_Uninit3D(IWineD3DDevice *iface, return WINED3D_OK; } -static HRESULT WINAPI IWineD3DDeviceImpl_UninitGDI(IWineD3DDevice *iface, D3DCB_DESTROYSWAPCHAINFN D3DCB_DestroySwapChain) { +static HRESULT WINAPI IWineD3DDeviceImpl_UninitGDI(IWineD3DDevice *iface) +{ IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *) iface; unsigned int i; for (i = 0; i < This->swapchain_count; ++i) { TRACE("Releasing the implicit swapchain %u.\n", i); - if (D3DCB_DestroySwapChain((IWineD3DSwapChain *)This->swapchains[i]) > 0) + if (IWineD3DSwapChain_Release((IWineD3DSwapChain *)This->swapchains[i])) { FIXME("(%p) Something's still holding the implicit swapchain\n", This); } diff --git a/include/wine/wined3d.idl b/include/wine/wined3d.idl index de83f47072f..3e375a15c1a 100644 --- a/include/wine/wined3d.idl +++ b/include/wine/wined3d.idl @@ -2162,7 +2162,6 @@ interface IWineD3DDeviceParent : IUnknown [out] IWineD3DSwapChain **swapchain ); } -typedef ULONG (__stdcall *D3DCB_DESTROYSWAPCHAINFN)(IWineD3DSwapChain *pSwapChain); typedef HRESULT (__stdcall *D3DCB_ENUMRESOURCES)(struct wined3d_resource *resource, void *pData); [ @@ -2531,10 +2530,8 @@ interface IWineD3DDevice : IUnknown [in] WINED3DPRESENT_PARAMETERS *present_parameters ); HRESULT Uninit3D( - [in] D3DCB_DESTROYSWAPCHAINFN destroy_swapchain_callback ); HRESULT UninitGDI( - [in] D3DCB_DESTROYSWAPCHAINFN destroy_swapchain_callback ); void SetMultithreaded( );