[PATCH 4/4] d3d9: COM cleanup for the IDirect3DSwapChain9 iface.
Michael Stefaniuc
mstefani at redhat.de
Mon Apr 11 21:23:41 CDT 2011
---
dlls/d3d9/d3d9_private.h | 7 ++---
dlls/d3d9/device.c | 8 +++---
dlls/d3d9/swapchain.c | 61 ++++++++++++++++++++++++++++++----------------
3 files changed, 47 insertions(+), 29 deletions(-)
diff --git a/dlls/d3d9/d3d9_private.h b/dlls/d3d9/d3d9_private.h
index 4e854a3..afccd3f 100644
--- a/dlls/d3d9/d3d9_private.h
+++ b/dlls/d3d9/d3d9_private.h
@@ -213,18 +213,17 @@ HRESULT volume_init(IDirect3DVolume9Impl *volume, IDirect3DDevice9Impl *device,
*/
typedef struct IDirect3DSwapChain9Impl
{
- /* IUnknown fields */
- const IDirect3DSwapChain9Vtbl *lpVtbl;
+ IDirect3DSwapChain9 IDirect3DSwapChain9_iface;
LONG ref;
/* IDirect3DSwapChain9 fields */
IWineD3DSwapChain *wineD3DSwapChain;
/* Parent reference */
- LPDIRECT3DDEVICE9EX parentDevice;
+ IDirect3DDevice9Ex *parentDevice;
/* Flags an implicit swap chain */
- BOOL isImplicit;
+ BOOL isImplicit;
} IDirect3DSwapChain9Impl;
HRESULT swapchain_init(IDirect3DSwapChain9Impl *swapchain, IDirect3DDevice9Impl *device,
diff --git a/dlls/d3d9/device.c b/dlls/d3d9/device.c
index e88947d..e69374a 100644
--- a/dlls/d3d9/device.c
+++ b/dlls/d3d9/device.c
@@ -189,8 +189,8 @@ static ULONG WINAPI D3D9CB_DestroySwapChain(IWineD3DSwapChain *swapchain)
parent = IWineD3DSwapChain_GetParent(swapchain);
parent->isImplicit = FALSE;
- IDirect3DSwapChain9_AddRef((IDirect3DSwapChain9 *)parent);
- return IDirect3DSwapChain9_Release((IDirect3DSwapChain9 *)parent);
+ IDirect3DSwapChain9_AddRef(&parent->IDirect3DSwapChain9_iface);
+ return IDirect3DSwapChain9_Release(&parent->IDirect3DSwapChain9_iface);
}
/* IDirect3D IUnknown parts follow: */
@@ -485,7 +485,7 @@ static HRESULT WINAPI DECLSPEC_HOTPATCH IDirect3DDevice9Impl_CreateAdditionalSwa
}
TRACE("Created swapchain %p.\n", object);
- *swapchain = (IDirect3DSwapChain9 *)object;
+ *swapchain = &object->IDirect3DSwapChain9_iface;
return D3D_OK;
}
@@ -3208,7 +3208,7 @@ static HRESULT STDMETHODCALLTYPE device_parent_CreateSwapChain(IWineD3DDevicePar
*swapchain = d3d_swapchain->wineD3DSwapChain;
d3d_swapchain->isImplicit = TRUE;
/* Implicit swap chains are created with an refcount of 0 */
- IDirect3DSwapChain9_Release((IDirect3DSwapChain9 *)d3d_swapchain);
+ IDirect3DSwapChain9_Release(&d3d_swapchain->IDirect3DSwapChain9_iface);
/* Copy back the presentation parameters */
present_parameters->BackBufferWidth = local_parameters.BackBufferWidth;
diff --git a/dlls/d3d9/swapchain.c b/dlls/d3d9/swapchain.c
index df1cc77..11e3090 100644
--- a/dlls/d3d9/swapchain.c
+++ b/dlls/d3d9/swapchain.c
@@ -25,10 +25,15 @@
WINE_DEFAULT_DEBUG_CHANNEL(d3d9);
-/* IDirect3DSwapChain IUnknown parts follow: */
-static HRESULT WINAPI IDirect3DSwapChain9Impl_QueryInterface(LPDIRECT3DSWAPCHAIN9 iface, REFIID riid, LPVOID* ppobj)
+static inline IDirect3DSwapChain9Impl *impl_from_IDirect3DSwapChain9(IDirect3DSwapChain9 *iface)
{
- IDirect3DSwapChain9Impl *This = (IDirect3DSwapChain9Impl *)iface;
+ return CONTAINING_RECORD(iface, IDirect3DSwapChain9Impl, IDirect3DSwapChain9_iface);
+}
+
+static HRESULT WINAPI IDirect3DSwapChain9Impl_QueryInterface(IDirect3DSwapChain9 *iface,
+ REFIID riid, void **ppobj)
+{
+ IDirect3DSwapChain9Impl *This = impl_from_IDirect3DSwapChain9(iface);
TRACE("iface %p, riid %s, object %p.\n", iface, debugstr_guid(riid), ppobj);
@@ -44,8 +49,9 @@ static HRESULT WINAPI IDirect3DSwapChain9Impl_QueryInterface(LPDIRECT3DSWAPCHAIN
return E_NOINTERFACE;
}
-static ULONG WINAPI IDirect3DSwapChain9Impl_AddRef(LPDIRECT3DSWAPCHAIN9 iface) {
- IDirect3DSwapChain9Impl *This = (IDirect3DSwapChain9Impl *)iface;
+static ULONG WINAPI IDirect3DSwapChain9Impl_AddRef(IDirect3DSwapChain9 *iface)
+{
+ IDirect3DSwapChain9Impl *This = impl_from_IDirect3DSwapChain9(iface);
ULONG ref = InterlockedIncrement(&This->ref);
TRACE("%p increasing refcount to %u.\n", iface, ref);
@@ -66,8 +72,9 @@ static ULONG WINAPI IDirect3DSwapChain9Impl_AddRef(LPDIRECT3DSWAPCHAIN9 iface) {
return ref;
}
-static ULONG WINAPI IDirect3DSwapChain9Impl_Release(LPDIRECT3DSWAPCHAIN9 iface) {
- IDirect3DSwapChain9Impl *This = (IDirect3DSwapChain9Impl *)iface;
+static ULONG WINAPI IDirect3DSwapChain9Impl_Release(IDirect3DSwapChain9 *iface)
+{
+ IDirect3DSwapChain9Impl *This = impl_from_IDirect3DSwapChain9(iface);
ULONG ref = InterlockedDecrement(&This->ref);
TRACE("%p decreasing refcount to %u.\n", iface, ref);
@@ -88,8 +95,11 @@ static ULONG WINAPI IDirect3DSwapChain9Impl_Release(LPDIRECT3DSWAPCHAIN9 iface)
}
/* IDirect3DSwapChain9 parts follow: */
-static HRESULT WINAPI DECLSPEC_HOTPATCH IDirect3DSwapChain9Impl_Present(LPDIRECT3DSWAPCHAIN9 iface, CONST RECT* pSourceRect, CONST RECT* pDestRect, HWND hDestWindowOverride, CONST RGNDATA* pDirtyRegion, DWORD dwFlags) {
- IDirect3DSwapChain9Impl *This = (IDirect3DSwapChain9Impl *)iface;
+static HRESULT WINAPI DECLSPEC_HOTPATCH IDirect3DSwapChain9Impl_Present(IDirect3DSwapChain9 *iface,
+ const RECT *pSourceRect, const RECT *pDestRect, HWND hDestWindowOverride,
+ const RGNDATA *pDirtyRegion, DWORD dwFlags)
+{
+ IDirect3DSwapChain9Impl *This = impl_from_IDirect3DSwapChain9(iface);
HRESULT hr;
TRACE("iface %p, src_rect %p, dst_rect %p, dst_window_override %p, dirty_region %p, flags %#x.\n",
@@ -102,8 +112,10 @@ static HRESULT WINAPI DECLSPEC_HOTPATCH IDirect3DSwapChain9Impl_Present(LPDIRECT
return hr;
}
-static HRESULT WINAPI IDirect3DSwapChain9Impl_GetFrontBufferData(LPDIRECT3DSWAPCHAIN9 iface, IDirect3DSurface9* pDestSurface) {
- IDirect3DSwapChain9Impl *This = (IDirect3DSwapChain9Impl *)iface;
+static HRESULT WINAPI IDirect3DSwapChain9Impl_GetFrontBufferData(IDirect3DSwapChain9 *iface,
+ IDirect3DSurface9 *pDestSurface)
+{
+ IDirect3DSwapChain9Impl *This = impl_from_IDirect3DSwapChain9(iface);
HRESULT hr;
TRACE("iface %p, surface %p.\n", iface, pDestSurface);
@@ -118,7 +130,7 @@ static HRESULT WINAPI IDirect3DSwapChain9Impl_GetFrontBufferData(LPDIRECT3DSWAPC
static HRESULT WINAPI IDirect3DSwapChain9Impl_GetBackBuffer(IDirect3DSwapChain9 *iface,
UINT iBackBuffer, D3DBACKBUFFER_TYPE Type, IDirect3DSurface9 **ppBackBuffer)
{
- IDirect3DSwapChain9Impl *This = (IDirect3DSwapChain9Impl *)iface;
+ IDirect3DSwapChain9Impl *This = impl_from_IDirect3DSwapChain9(iface);
IWineD3DSurface *mySurface = NULL;
HRESULT hr;
@@ -140,8 +152,10 @@ static HRESULT WINAPI IDirect3DSwapChain9Impl_GetBackBuffer(IDirect3DSwapChain9
return hr;
}
-static HRESULT WINAPI IDirect3DSwapChain9Impl_GetRasterStatus(LPDIRECT3DSWAPCHAIN9 iface, D3DRASTER_STATUS* pRasterStatus) {
- IDirect3DSwapChain9Impl *This = (IDirect3DSwapChain9Impl *)iface;
+static HRESULT WINAPI IDirect3DSwapChain9Impl_GetRasterStatus(IDirect3DSwapChain9 *iface,
+ D3DRASTER_STATUS *pRasterStatus)
+{
+ IDirect3DSwapChain9Impl *This = impl_from_IDirect3DSwapChain9(iface);
HRESULT hr;
TRACE("iface %p, raster_status %p.\n", iface, pRasterStatus);
@@ -153,8 +167,10 @@ static HRESULT WINAPI IDirect3DSwapChain9Impl_GetRasterStatus(LPDIRECT3DSWAPCHAI
return hr;
}
-static HRESULT WINAPI IDirect3DSwapChain9Impl_GetDisplayMode(LPDIRECT3DSWAPCHAIN9 iface, D3DDISPLAYMODE* pMode) {
- IDirect3DSwapChain9Impl *This = (IDirect3DSwapChain9Impl *)iface;
+static HRESULT WINAPI IDirect3DSwapChain9Impl_GetDisplayMode(IDirect3DSwapChain9 *iface,
+ D3DDISPLAYMODE *pMode)
+{
+ IDirect3DSwapChain9Impl *This = impl_from_IDirect3DSwapChain9(iface);
HRESULT hr;
TRACE("iface %p, mode %p.\n", iface, pMode);
@@ -168,9 +184,10 @@ static HRESULT WINAPI IDirect3DSwapChain9Impl_GetDisplayMode(LPDIRECT3DSWAPCHAIN
return hr;
}
-static HRESULT WINAPI IDirect3DSwapChain9Impl_GetDevice(IDirect3DSwapChain9 *iface, IDirect3DDevice9 **device)
+static HRESULT WINAPI IDirect3DSwapChain9Impl_GetDevice(IDirect3DSwapChain9 *iface,
+ IDirect3DDevice9 **device)
{
- IDirect3DSwapChain9Impl *This = (IDirect3DSwapChain9Impl *)iface;
+ IDirect3DSwapChain9Impl *This = impl_from_IDirect3DSwapChain9(iface);
TRACE("iface %p, device %p.\n", iface, device);
@@ -182,8 +199,10 @@ static HRESULT WINAPI IDirect3DSwapChain9Impl_GetDevice(IDirect3DSwapChain9 *ifa
return D3D_OK;
}
-static HRESULT WINAPI IDirect3DSwapChain9Impl_GetPresentParameters(LPDIRECT3DSWAPCHAIN9 iface, D3DPRESENT_PARAMETERS* pPresentationParameters) {
- IDirect3DSwapChain9Impl *This = (IDirect3DSwapChain9Impl *)iface;
+static HRESULT WINAPI IDirect3DSwapChain9Impl_GetPresentParameters(IDirect3DSwapChain9 *iface,
+ D3DPRESENT_PARAMETERS *pPresentationParameters)
+{
+ IDirect3DSwapChain9Impl *This = impl_from_IDirect3DSwapChain9(iface);
WINED3DPRESENT_PARAMETERS winePresentParameters;
HRESULT hr;
@@ -243,7 +262,7 @@ HRESULT swapchain_init(IDirect3DSwapChain9Impl *swapchain, IDirect3DDevice9Impl
HRESULT hr;
swapchain->ref = 1;
- swapchain->lpVtbl = &Direct3DSwapChain9_Vtbl;
+ swapchain->IDirect3DSwapChain9_iface.lpVtbl = &Direct3DSwapChain9_Vtbl;
wined3d_parameters.BackBufferWidth = present_parameters->BackBufferWidth;
wined3d_parameters.BackBufferHeight = present_parameters->BackBufferHeight;
--
1.7.4.2
More information about the wine-patches
mailing list