Hello Ričardas! Ričardas Barkauskas wrote: > My first try for COM cleanup. Please donėt be too harsh :) > If this is too large for one patch, please suggest how to split it. > > This is not automatic clean up so I don't really expect it to be good on > first try. Heh! I have attached the raw diff generated by my coccinelle script. Looking at the interdiff between the two patches it looks like you caught everything. And the BADBADBAD() (*) from the generated patch are replaced with unsafe_impl_from_IDirectDrawSurface3(), very good.
If you want to do more COM cleanup I can give you the raw generated patches to save you some time. bye michael P.S.: (*) My script validates that impl_from_IFace() is called only from methods of that IFace. All other impl_from_IFace() calls are replaced with BADBADBAD().
diff -u -p a/dlls/ddraw/ddraw_private.h b/dlls/ddraw/ddraw_private.h --- a/dlls/ddraw/ddraw_private.h 2011-05-24 21:52:30.191863832 +0200 +++ b/dlls/ddraw/ddraw_private.h 2011-05-24 22:04:40.459493227 +0200 @@ -279,7 +279,7 @@ struct IDirect3DDeviceImpl { /* IUnknown */ const IDirect3DDevice7Vtbl *lpVtbl; - const IDirect3DDevice3Vtbl *IDirect3DDevice3_vtbl; + IDirect3DDevice3 IDirect3DDevice3_iface; const IDirect3DDevice2Vtbl *IDirect3DDevice2_vtbl; const IDirect3DDeviceVtbl *IDirect3DDevice_vtbl; LONG ref; @@ -336,9 +336,9 @@ static inline IDirect3DDeviceImpl *devic return (IDirect3DDeviceImpl *)((char*)iface - FIELD_OFFSET(IDirect3DDeviceImpl, IDirect3DDevice2_vtbl)); } -static inline IDirect3DDeviceImpl *device_from_device3(IDirect3DDevice3 *iface) +static inline IDirect3DDeviceImpl *impl_from_IDirect3DDevice3(IDirect3DDevice3 *iface) { - return (IDirect3DDeviceImpl *)((char*)iface - FIELD_OFFSET(IDirect3DDeviceImpl, IDirect3DDevice3_vtbl)); + return CONTAINING_RECORD(iface, IDirect3DDeviceImpl, IDirect3DDevice3_iface); } /* Structures */ diff -u -p a/dlls/ddraw/ddraw.c b/dlls/ddraw/ddraw.c --- a/dlls/ddraw/ddraw.c 2011-05-24 20:51:49.671810005 +0200 +++ b/dlls/ddraw/ddraw.c 2011-05-24 22:04:40.569494647 +0200 @@ -4763,7 +4763,7 @@ static HRESULT WINAPI d3d3_CreateDevice( hr = d3d7_CreateDevice(&This->IDirect3D7_iface, riid, (IDirectDrawSurface7 *)surface, (IDirect3DDevice7 **)device); - if (*device) *device = (IDirect3DDevice3 *)&((IDirect3DDeviceImpl *)*device)->IDirect3DDevice3_vtbl; + if (*device) *device = (IDirect3DDevice3 *)&(BADBADBAD(*device))->IDirect3DDevice3_vtbl; return hr; } diff -u -p a/dlls/ddraw/device.c b/dlls/ddraw/device.c --- a/dlls/ddraw/device.c 2011-05-24 20:51:58.111927504 +0200 +++ b/dlls/ddraw/device.c 2011-05-24 22:04:42.142848293 +0200 @@ -171,7 +171,7 @@ IDirect3DDeviceImpl_7_QueryInterface(IDi TRACE("(%p) Returning IDirect3DDevice2 interface at %p\n", This, *obj); } else if ( IsEqualGUID( &IID_IDirect3DDevice3 , refiid ) ) { - *obj = &This->IDirect3DDevice3_vtbl; + *obj = &This->IDirect3DDevice3_iface; TRACE("(%p) Returning IDirect3DDevice3 interface at %p\n", This, *obj); } else if ( IsEqualGUID( &IID_IDirect3DDevice7 , refiid ) ) { @@ -196,7 +196,7 @@ static HRESULT WINAPI IDirect3DDeviceImp { TRACE("iface %p, riid %s, object %p.\n", iface, debugstr_guid(riid), obj); - return IDirect3DDevice7_QueryInterface((IDirect3DDevice7 *)device_from_device3(iface), riid, obj); + return IDirect3DDevice7_QueryInterface((IDirect3DDevice7 *)impl_from_IDirect3DDevice3(iface), riid, obj); } static HRESULT WINAPI IDirect3DDeviceImpl_2_QueryInterface(IDirect3DDevice2 *iface, REFIID riid, @@ -242,7 +242,7 @@ static ULONG WINAPI IDirect3DDeviceImpl_ { TRACE("iface %p.\n", iface); - return IDirect3DDevice7_AddRef((IDirect3DDevice7 *)device_from_device3(iface)); + return IDirect3DDevice7_AddRef((IDirect3DDevice7 *)impl_from_IDirect3DDevice3(iface)); } static ULONG WINAPI IDirect3DDeviceImpl_2_AddRef(IDirect3DDevice2 *iface) @@ -378,7 +378,7 @@ static ULONG WINAPI IDirect3DDeviceImpl_ { TRACE("iface %p.\n", iface); - return IDirect3DDevice7_Release((IDirect3DDevice7 *)device_from_device3(iface)); + return IDirect3DDevice7_Release((IDirect3DDevice7 *)impl_from_IDirect3DDevice3(iface)); } static ULONG WINAPI IDirect3DDeviceImpl_2_Release(IDirect3DDevice2 *iface) @@ -497,7 +497,7 @@ IDirect3DDeviceImpl_3_GetCaps(IDirect3DD D3DDEVICEDESC *HWDesc, D3DDEVICEDESC *HelDesc) { - IDirect3DDeviceImpl *This = device_from_device3(iface); + IDirect3DDeviceImpl *This = impl_from_IDirect3DDevice3(iface); D3DDEVICEDESC7 newDesc; HRESULT hr; @@ -515,7 +515,7 @@ static HRESULT WINAPI IDirect3DDeviceImp { IDirect3DDeviceImpl *This = device_from_device2(iface); TRACE("iface %p, hw_desc %p, hel_desc %p.\n", iface, D3DHWDevDesc, D3DHELDevDesc); - return IDirect3DDevice3_GetCaps((IDirect3DDevice3 *)&This->IDirect3DDevice3_vtbl, D3DHWDevDesc, D3DHELDevDesc); + return IDirect3DDevice3_GetCaps(&This->IDirect3DDevice3_iface, D3DHWDevDesc, D3DHELDevDesc); } static HRESULT WINAPI IDirect3DDeviceImpl_1_GetCaps(IDirect3DDevice *iface, @@ -523,7 +523,7 @@ static HRESULT WINAPI IDirect3DDeviceImp { IDirect3DDeviceImpl *This = device_from_device1(iface); TRACE("iface %p, hw_desc %p, hel_desc %p.\n", iface, D3DHWDevDesc, D3DHELDevDesc); - return IDirect3DDevice3_GetCaps((IDirect3DDevice3 *)&This->IDirect3DDevice3_vtbl, D3DHWDevDesc, D3DHELDevDesc); + return IDirect3DDevice3_GetCaps(&This->IDirect3DDevice3_iface, D3DHWDevDesc, D3DHELDevDesc); } /***************************************************************************** @@ -621,7 +621,7 @@ static HRESULT WINAPI IDirect3DDeviceImp TRACE("iface %p, stats %p.\n", iface, Stats); - return IDirect3DDevice3_GetStats((IDirect3DDevice3 *)&This->IDirect3DDevice3_vtbl, Stats); + return IDirect3DDevice3_GetStats(&This->IDirect3DDevice3_iface, Stats); } static HRESULT WINAPI IDirect3DDeviceImpl_1_GetStats(IDirect3DDevice *iface, D3DSTATS *Stats) @@ -630,7 +630,7 @@ static HRESULT WINAPI IDirect3DDeviceImp TRACE("iface %p, stats %p.\n", iface, Stats); - return IDirect3DDevice3_GetStats((IDirect3DDevice3 *)&This->IDirect3DDevice3_vtbl, Stats); + return IDirect3DDevice3_GetStats(&This->IDirect3DDevice3_iface, Stats); } /***************************************************************************** @@ -752,7 +752,7 @@ static HRESULT WINAPI IDirect3DDeviceImpl_3_AddViewport(IDirect3DDevice3 *iface, IDirect3DViewport3 *Viewport) { - IDirect3DDeviceImpl *This = device_from_device3(iface); + IDirect3DDeviceImpl *This = impl_from_IDirect3DDevice3(iface); IDirect3DViewportImpl *vp = (IDirect3DViewportImpl *)Viewport; TRACE("iface %p, viewport %p.\n", iface, Viewport); @@ -778,7 +778,7 @@ static HRESULT WINAPI IDirect3DDeviceImp TRACE("iface %p, viewport %p.\n", iface, Direct3DViewport2); - return IDirect3DDevice3_AddViewport((IDirect3DDevice3 *)&This->IDirect3DDevice3_vtbl, (IDirect3DViewport3 *)vp); + return IDirect3DDevice3_AddViewport(&This->IDirect3DDevice3_iface, (IDirect3DViewport3 *)vp); } static HRESULT WINAPI IDirect3DDeviceImpl_1_AddViewport(IDirect3DDevice *iface, @@ -789,7 +789,7 @@ static HRESULT WINAPI IDirect3DDeviceImp TRACE("iface %p, viewport %p.\n", iface, Direct3DViewport); - return IDirect3DDevice3_AddViewport((IDirect3DDevice3 *)&This->IDirect3DDevice3_vtbl, (IDirect3DViewport3 *)vp); + return IDirect3DDevice3_AddViewport(&This->IDirect3DDevice3_iface, (IDirect3DViewport3 *)vp); } /***************************************************************************** @@ -810,7 +810,7 @@ static HRESULT WINAPI IDirect3DDeviceImp *****************************************************************************/ static HRESULT WINAPI IDirect3DDeviceImpl_3_DeleteViewport(IDirect3DDevice3 *iface, IDirect3DViewport3 *viewport) { - IDirect3DDeviceImpl *device = device_from_device3(iface); + IDirect3DDeviceImpl *device = impl_from_IDirect3DDevice3(iface); IDirect3DViewportImpl *vp = (IDirect3DViewportImpl *)viewport; TRACE("iface %p, viewport %p.\n", iface, viewport); @@ -839,7 +839,7 @@ static HRESULT WINAPI IDirect3DDeviceImp TRACE("iface %p, viewport %p.\n", iface, Direct3DViewport2); - return IDirect3DDevice3_DeleteViewport((IDirect3DDevice3 *)&This->IDirect3DDevice3_vtbl, (IDirect3DViewport3 *)vp); + return IDirect3DDevice3_DeleteViewport(&This->IDirect3DDevice3_iface, (IDirect3DViewport3 *)vp); } static HRESULT WINAPI IDirect3DDeviceImpl_1_DeleteViewport(IDirect3DDevice *iface, @@ -850,7 +850,7 @@ static HRESULT WINAPI IDirect3DDeviceImp TRACE("iface %p, viewport %p.\n", iface, Direct3DViewport); - return IDirect3DDevice3_DeleteViewport((IDirect3DDevice3 *)&This->IDirect3DDevice3_vtbl, (IDirect3DViewport3 *)vp); + return IDirect3DDevice3_DeleteViewport(&This->IDirect3DDevice3_iface, (IDirect3DViewport3 *)vp); } /***************************************************************************** @@ -877,7 +877,7 @@ IDirect3DDeviceImpl_3_NextViewport(IDire IDirect3DViewport3 **lplpDirect3DViewport3, DWORD Flags) { - IDirect3DDeviceImpl *This = device_from_device3(iface); + IDirect3DDeviceImpl *This = impl_from_IDirect3DDevice3(iface); IDirect3DViewportImpl *vp = (IDirect3DViewportImpl *)Viewport3; struct list *entry; @@ -933,7 +933,7 @@ static HRESULT WINAPI IDirect3DDeviceImp TRACE("iface %p, viewport %p, next %p, flags %#x.\n", iface, Viewport2, lplpDirect3DViewport2, Flags); - hr = IDirect3DDevice3_NextViewport((IDirect3DDevice3 *)&This->IDirect3DDevice3_vtbl, + hr = IDirect3DDevice3_NextViewport(&This->IDirect3DDevice3_iface, (IDirect3DViewport3 *)vp, &res, Flags); *lplpDirect3DViewport2 = (IDirect3DViewport2 *)res; return hr; @@ -950,7 +950,7 @@ static HRESULT WINAPI IDirect3DDeviceImp TRACE("iface %p, viewport %p, next %p, flags %#x.\n", iface, Viewport, lplpDirect3DViewport, Flags); - hr = IDirect3DDevice3_NextViewport((IDirect3DDevice3 *)&This->IDirect3DDevice3_vtbl, + hr = IDirect3DDevice3_NextViewport(&This->IDirect3DDevice3_iface, (IDirect3DViewport3 *)vp, &res, Flags); *lplpDirect3DViewport = (IDirect3DViewport *)res; return hr; @@ -1169,7 +1169,7 @@ IDirect3DDeviceImpl_7_EnumTextureFormats static HRESULT WINAPI IDirect3DDeviceImpl_3_EnumTextureFormats(IDirect3DDevice3 *iface, LPD3DENUMPIXELFORMATSCALLBACK Callback, void *Arg) { - IDirect3DDeviceImpl *This = device_from_device3(iface); + IDirect3DDeviceImpl *This = impl_from_IDirect3DDevice3(iface); TRACE("iface %p, callback %p, context %p.\n", iface, Callback, Arg); @@ -1519,7 +1519,7 @@ static HRESULT WINAPI IDirect3DDeviceImp { TRACE("iface %p.\n", iface); - return IDirect3DDevice7_BeginScene((IDirect3DDevice7 *)device_from_device3(iface)); + return IDirect3DDevice7_BeginScene((IDirect3DDevice7 *)impl_from_IDirect3DDevice3(iface)); } static HRESULT WINAPI IDirect3DDeviceImpl_2_BeginScene(IDirect3DDevice2 *iface) @@ -1588,7 +1588,7 @@ static HRESULT WINAPI DECLSPEC_HOTPATCH { TRACE("iface %p.\n", iface); - return IDirect3DDevice7_EndScene((IDirect3DDevice7 *)device_from_device3(iface)); + return IDirect3DDevice7_EndScene((IDirect3DDevice7 *)impl_from_IDirect3DDevice3(iface)); } static HRESULT WINAPI DECLSPEC_HOTPATCH IDirect3DDeviceImpl_2_EndScene(IDirect3DDevice2 *iface) @@ -1640,7 +1640,7 @@ IDirect3DDeviceImpl_7_GetDirect3D(IDirec static HRESULT WINAPI IDirect3DDeviceImpl_3_GetDirect3D(IDirect3DDevice3 *iface, IDirect3D3 **Direct3D3) { - IDirect3DDeviceImpl *This = device_from_device3(iface); + IDirect3DDeviceImpl *This = impl_from_IDirect3DDevice3(iface); TRACE("iface %p, d3d %p.\n", iface, Direct3D3); @@ -1705,7 +1705,7 @@ static HRESULT WINAPI IDirect3DDeviceImpl_3_SetCurrentViewport(IDirect3DDevice3 *iface, IDirect3DViewport3 *Direct3DViewport3) { - IDirect3DDeviceImpl *This = device_from_device3(iface); + IDirect3DDeviceImpl *This = impl_from_IDirect3DDevice3(iface); IDirect3DViewportImpl *vp = (IDirect3DViewportImpl *)Direct3DViewport3; TRACE("iface %p, viewport %p.\n", iface, Direct3DViewport3); @@ -1752,7 +1752,7 @@ static HRESULT WINAPI IDirect3DDeviceImp TRACE("iface %p, viewport %p.\n", iface, Direct3DViewport2); - return IDirect3DDevice3_SetCurrentViewport((IDirect3DDevice3 *)&This->IDirect3DDevice3_vtbl, + return IDirect3DDevice3_SetCurrentViewport(&This->IDirect3DDevice3_iface, (IDirect3DViewport3 *)vp); } @@ -1775,7 +1775,7 @@ static HRESULT WINAPI IDirect3DDeviceImpl_3_GetCurrentViewport(IDirect3DDevice3 *iface, IDirect3DViewport3 **Direct3DViewport3) { - IDirect3DDeviceImpl *This = device_from_device3(iface); + IDirect3DDeviceImpl *This = impl_from_IDirect3DDevice3(iface); TRACE("iface %p, viewport %p.\n", iface, Direct3DViewport3); @@ -1802,7 +1802,7 @@ static HRESULT WINAPI IDirect3DDeviceImp TRACE("iface %p, viewport %p.\n", iface, Direct3DViewport2); - hr = IDirect3DDevice3_GetCurrentViewport((IDirect3DDevice3 *)&This->IDirect3DDevice3_vtbl, + hr = IDirect3DDevice3_GetCurrentViewport(&This->IDirect3DDevice3_iface, (IDirect3DViewport3 **)Direct3DViewport2); if(hr != D3D_OK) return hr; return D3D_OK; @@ -1888,7 +1888,7 @@ IDirect3DDeviceImpl_7_SetRenderTarget_FP static HRESULT WINAPI IDirect3DDeviceImpl_3_SetRenderTarget(IDirect3DDevice3 *iface, IDirectDrawSurface4 *NewRenderTarget, DWORD Flags) { - IDirect3DDeviceImpl *This = device_from_device3(iface); + IDirect3DDeviceImpl *This = impl_from_IDirect3DDevice3(iface); IDirectDrawSurfaceImpl *Target = (IDirectDrawSurfaceImpl *)NewRenderTarget; TRACE("iface %p, target %p, flags %#x.\n", iface, NewRenderTarget, Flags); @@ -1946,7 +1946,7 @@ IDirect3DDeviceImpl_7_GetRenderTarget(ID static HRESULT WINAPI IDirect3DDeviceImpl_3_GetRenderTarget(IDirect3DDevice3 *iface, IDirectDrawSurface4 **RenderTarget) { - IDirect3DDeviceImpl *This = device_from_device3(iface); + IDirect3DDeviceImpl *This = impl_from_IDirect3DDevice3(iface); HRESULT hr; TRACE("iface %p, target %p.\n", iface, RenderTarget); @@ -1995,7 +1995,7 @@ IDirect3DDeviceImpl_3_Begin(IDirect3DDev DWORD VertexTypeDesc, DWORD Flags) { - IDirect3DDeviceImpl *This = device_from_device3(iface); + IDirect3DDeviceImpl *This = impl_from_IDirect3DDevice3(iface); TRACE("iface %p, primitive_type %#x, FVF %#x, flags %#x.\n", iface, PrimitiveType, VertexTypeDesc, Flags); @@ -2030,7 +2030,7 @@ static HRESULT WINAPI IDirect3DDeviceImp return DDERR_INVALIDPARAMS; /* Should never happen */ }; - return IDirect3DDevice3_Begin((IDirect3DDevice3 *)&This->IDirect3DDevice3_vtbl, d3dpt, FVF, dwFlags); + return IDirect3DDevice3_Begin(&This->IDirect3DDevice3_iface, d3dpt, FVF, dwFlags); } /***************************************************************************** @@ -2087,7 +2087,7 @@ static HRESULT WINAPI IDirect3DDeviceImp return DDERR_INVALIDPARAMS; /* Should never happen */ }; - return IDirect3DDevice3_BeginIndexed((IDirect3DDevice3 *)&This->IDirect3DDevice3_vtbl, + return IDirect3DDevice3_BeginIndexed(&This->IDirect3DDevice3_iface, d3dptPrimitiveType, FVF, lpvVertices, dwNumVertices, dwFlags); } @@ -2112,7 +2112,7 @@ static HRESULT WINAPI IDirect3DDeviceImpl_3_Vertex(IDirect3DDevice3 *iface, void *Vertex) { - IDirect3DDeviceImpl *This = device_from_device3(iface); + IDirect3DDeviceImpl *This = impl_from_IDirect3DDevice3(iface); TRACE("iface %p, vertex %p.\n", iface, Vertex); @@ -2145,7 +2145,7 @@ static HRESULT WINAPI IDirect3DDeviceImp TRACE("iface %p, vertex %p.\n", iface, lpVertexType); - return IDirect3DDevice3_Vertex((IDirect3DDevice3 *)&This->IDirect3DDevice3_vtbl, lpVertexType); + return IDirect3DDevice3_Vertex(&This->IDirect3DDevice3_iface, lpVertexType); } /***************************************************************************** @@ -2176,7 +2176,7 @@ static HRESULT WINAPI IDirect3DDeviceImp TRACE("iface %p, index %#x.\n", iface, wVertexIndex); - return IDirect3DDevice3_Index((IDirect3DDevice3 *)&This->IDirect3DDevice3_vtbl, wVertexIndex); + return IDirect3DDevice3_Index(&This->IDirect3DDevice3_iface, wVertexIndex); } /***************************************************************************** @@ -2201,7 +2201,7 @@ static HRESULT WINAPI IDirect3DDeviceImpl_3_End(IDirect3DDevice3 *iface, DWORD Flags) { - IDirect3DDeviceImpl *This = device_from_device3(iface); + IDirect3DDeviceImpl *This = impl_from_IDirect3DDevice3(iface); TRACE("iface %p, flags %#x.\n", iface, Flags); @@ -2215,7 +2215,7 @@ static HRESULT WINAPI IDirect3DDeviceImp TRACE("iface %p, flags %#x.\n", iface, dwFlags); - return IDirect3DDevice3_End((IDirect3DDevice3 *)&This->IDirect3DDevice3_vtbl, dwFlags); + return IDirect3DDevice3_End(&This->IDirect3DDevice3_iface, dwFlags); } /***************************************************************************** @@ -2413,7 +2413,7 @@ IDirect3DDeviceImpl_3_GetRenderState(IDi D3DRENDERSTATETYPE dwRenderStateType, DWORD *lpdwRenderState) { - IDirect3DDeviceImpl *This = device_from_device3(iface); + IDirect3DDeviceImpl *This = impl_from_IDirect3DDevice3(iface); HRESULT hr; TRACE("iface %p, state %#x, value %p.\n", iface, dwRenderStateType, lpdwRenderState); @@ -2530,7 +2530,7 @@ static HRESULT WINAPI IDirect3DDeviceImp TRACE("iface %p, state %#x, value %p.\n", iface, dwRenderStateType, lpdwRenderState); - return IDirect3DDevice3_GetRenderState((IDirect3DDevice3 *)&This->IDirect3DDevice3_vtbl, + return IDirect3DDevice3_GetRenderState(&This->IDirect3DDevice3_iface, dwRenderStateType, lpdwRenderState); } @@ -2753,7 +2753,7 @@ IDirect3DDeviceImpl_3_SetRenderState(IDi unless some broken game will be found that cares. */ HRESULT hr; - IDirect3DDeviceImpl *This = device_from_device3(iface); + IDirect3DDeviceImpl *This = impl_from_IDirect3DDevice3(iface); TRACE("iface %p, state %#x, value %#x.\n", iface, RenderStateType, Value); @@ -2911,7 +2911,7 @@ static HRESULT WINAPI IDirect3DDeviceImp TRACE("iface %p, state %#x, value %#x.\n", iface, RenderStateType, Value); - return IDirect3DDevice3_SetRenderState((IDirect3DDevice3 *)&This->IDirect3DDevice3_vtbl, RenderStateType, Value); + return IDirect3DDevice3_SetRenderState(&This->IDirect3DDevice3_iface, RenderStateType, Value); } /***************************************************************************** @@ -2937,7 +2937,7 @@ IDirect3DDeviceImpl_3_SetLightState(IDir D3DLIGHTSTATETYPE LightStateType, DWORD Value) { - IDirect3DDeviceImpl *This = device_from_device3(iface); + IDirect3DDeviceImpl *This = impl_from_IDirect3DDevice3(iface); HRESULT hr; TRACE("iface %p, state %#x, value %#x.\n", iface, LightStateType, Value); @@ -3026,7 +3026,7 @@ static HRESULT WINAPI IDirect3DDeviceImp TRACE("iface %p, state %#x, value %#x.\n", iface, LightStateType, Value); - return IDirect3DDevice3_SetLightState((IDirect3DDevice3 *)&This->IDirect3DDevice3_vtbl, LightStateType, Value); + return IDirect3DDevice3_SetLightState(&This->IDirect3DDevice3_iface, LightStateType, Value); } /***************************************************************************** @@ -3052,7 +3052,7 @@ IDirect3DDeviceImpl_3_GetLightState(IDir D3DLIGHTSTATETYPE LightStateType, DWORD *Value) { - IDirect3DDeviceImpl *This = device_from_device3(iface); + IDirect3DDeviceImpl *This = impl_from_IDirect3DDevice3(iface); HRESULT hr; TRACE("iface %p, state %#x, value %p.\n", iface, LightStateType, Value); @@ -3120,7 +3120,7 @@ static HRESULT WINAPI IDirect3DDeviceImp TRACE("iface %p, state %#x, value %p.\n", iface, LightStateType, Value); - return IDirect3DDevice3_GetLightState((IDirect3DDevice3 *)&This->IDirect3DDevice3_vtbl, LightStateType, Value); + return IDirect3DDevice3_GetLightState(&This->IDirect3DDevice3_iface, LightStateType, Value); } /***************************************************************************** @@ -3200,7 +3200,7 @@ IDirect3DDeviceImpl_7_SetTransform_FPUPr static HRESULT WINAPI IDirect3DDeviceImpl_3_SetTransform(IDirect3DDevice3 *iface, D3DTRANSFORMSTATETYPE TransformStateType, D3DMATRIX *D3DMatrix) { - IDirect3DDeviceImpl *This = device_from_device3(iface); + IDirect3DDeviceImpl *This = impl_from_IDirect3DDevice3(iface); TRACE("iface %p, state %#x, matrix %p.\n", iface, TransformStateType, D3DMatrix); @@ -3290,7 +3290,7 @@ IDirect3DDeviceImpl_7_GetTransform_FPUPr static HRESULT WINAPI IDirect3DDeviceImpl_3_GetTransform(IDirect3DDevice3 *iface, D3DTRANSFORMSTATETYPE TransformStateType, D3DMATRIX *D3DMatrix) { - IDirect3DDeviceImpl *This = device_from_device3(iface); + IDirect3DDeviceImpl *This = impl_from_IDirect3DDevice3(iface); TRACE("iface %p, state %#x, matrix %p.\n", iface, TransformStateType, D3DMatrix); @@ -3379,7 +3379,7 @@ IDirect3DDeviceImpl_7_MultiplyTransform_ static HRESULT WINAPI IDirect3DDeviceImpl_3_MultiplyTransform(IDirect3DDevice3 *iface, D3DTRANSFORMSTATETYPE TransformStateType, D3DMATRIX *D3DMatrix) { - IDirect3DDeviceImpl *This = device_from_device3(iface); + IDirect3DDeviceImpl *This = impl_from_IDirect3DDevice3(iface); TRACE("iface %p, state %#x, matrix %p.\n", iface, TransformStateType, D3DMatrix); @@ -3490,7 +3490,7 @@ static HRESULT WINAPI IDirect3DDeviceImp TRACE("iface %p, primitive_type %#x, FVF %#x, vertices %p, vertex_count %u, flags %#x.\n", iface, PrimitiveType, VertexType, Vertices, VertexCount, Flags); - return IDirect3DDevice7_DrawPrimitive((IDirect3DDevice7 *)device_from_device3(iface), + return IDirect3DDevice7_DrawPrimitive((IDirect3DDevice7 *)impl_from_IDirect3DDevice3(iface), PrimitiveType, VertexType, Vertices, VertexCount, Flags); } @@ -3614,7 +3614,7 @@ static HRESULT WINAPI IDirect3DDeviceImp TRACE("iface %p, primitive_type %#x, FVF %#x, vertices %p, vertex_count %u, indices %p, index_count %u, flags %#x.\n", iface, PrimitiveType, VertexType, Vertices, VertexCount, Indices, IndexCount, Flags); - return IDirect3DDevice7_DrawIndexedPrimitive((IDirect3DDevice7 *)device_from_device3(iface), + return IDirect3DDevice7_DrawIndexedPrimitive((IDirect3DDevice7 *)impl_from_IDirect3DDevice3(iface), PrimitiveType, VertexType, Vertices, VertexCount, Indices, IndexCount, Flags); } @@ -3675,7 +3675,7 @@ static HRESULT WINAPI IDirect3DDeviceImp { TRACE("iface %p, clip_status %p.\n", iface, ClipStatus); - return IDirect3DDevice7_SetClipStatus((IDirect3DDevice7 *)device_from_device3(iface), ClipStatus); + return IDirect3DDevice7_SetClipStatus((IDirect3DDevice7 *)impl_from_IDirect3DDevice3(iface), ClipStatus); } static HRESULT WINAPI IDirect3DDeviceImpl_2_SetClipStatus(IDirect3DDevice2 *iface, @@ -3714,7 +3714,7 @@ static HRESULT WINAPI IDirect3DDeviceImp { TRACE("iface %p, clip_status %p.\n", iface, ClipStatus); - return IDirect3DDevice7_GetClipStatus((IDirect3DDevice7 *)device_from_device3(iface), ClipStatus); + return IDirect3DDevice7_GetClipStatus((IDirect3DDevice7 *)impl_from_IDirect3DDevice3(iface), ClipStatus); } static HRESULT WINAPI IDirect3DDeviceImpl_2_GetClipStatus(IDirect3DDevice2 *iface, @@ -3862,7 +3862,7 @@ static HRESULT WINAPI IDirect3DDeviceImp TRACE("iface %p, primitive_type %#x, FVF %#x, strided_data %p, vertex_count %u, flags %#x.\n", iface, PrimitiveType, VertexType, D3DDrawPrimStrideData, VertexCount, Flags); - return IDirect3DDevice7_DrawPrimitiveStrided((IDirect3DDevice7 *)device_from_device3(iface), + return IDirect3DDevice7_DrawPrimitiveStrided((IDirect3DDevice7 *)impl_from_IDirect3DDevice3(iface), PrimitiveType, VertexType, D3DDrawPrimStrideData, VertexCount, Flags); } @@ -4007,7 +4007,7 @@ static HRESULT WINAPI IDirect3DDeviceImp TRACE("iface %p, primitive_type %#x, FVF %#x, strided_data %p, vertex_count %u, indices %p, index_count %u, flags %#x.\n", iface, PrimitiveType, VertexType, D3DDrawPrimStrideData, VertexCount, Indices, IndexCount, Flags); - return IDirect3DDevice7_DrawIndexedPrimitiveStrided((IDirect3DDevice7 *)device_from_device3(iface), + return IDirect3DDevice7_DrawIndexedPrimitiveStrided((IDirect3DDevice7 *)impl_from_IDirect3DDevice3(iface), PrimitiveType, VertexType, D3DDrawPrimStrideData, VertexCount, Indices, IndexCount, Flags); } @@ -4117,7 +4117,7 @@ static HRESULT WINAPI IDirect3DDeviceImp TRACE("iface %p, primitive_type %#x, vb %p, start_vertex %u, vertex_count %u, flags %#x.\n", iface, PrimitiveType, D3DVertexBuf, StartVertex, NumVertices, Flags); - return IDirect3DDevice7_DrawPrimitiveVB((IDirect3DDevice7 *)device_from_device3(iface), + return IDirect3DDevice7_DrawPrimitiveVB((IDirect3DDevice7 *)impl_from_IDirect3DDevice3(iface), PrimitiveType, (IDirect3DVertexBuffer7 *)vb, StartVertex, NumVertices, Flags); } @@ -4279,7 +4279,7 @@ static HRESULT WINAPI IDirect3DDeviceImp TRACE("iface %p, primitive_type %#x, vb %p, indices %p, index_count %u, flags %#x.\n", iface, PrimitiveType, D3DVertexBuf, Indices, IndexCount, Flags); - return IDirect3DDevice7_DrawIndexedPrimitiveVB((IDirect3DDevice7 *)device_from_device3(iface), + return IDirect3DDevice7_DrawIndexedPrimitiveVB((IDirect3DDevice7 *)impl_from_IDirect3DDevice3(iface), PrimitiveType, (IDirect3DVertexBuffer7 *)VB, 0, IndexCount, Indices, IndexCount, Flags); } @@ -4400,7 +4400,7 @@ static HRESULT WINAPI IDirect3DDeviceImp TRACE("iface %p, centers %p, radii %p, sphere_count %u, flags %#x, return_values %p.\n", iface, Centers, Radii, NumSpheres, Flags, ReturnValues); - return IDirect3DDevice7_ComputeSphereVisibility((IDirect3DDevice7 *)device_from_device3(iface), + return IDirect3DDevice7_ComputeSphereVisibility((IDirect3DDevice7 *)impl_from_IDirect3DDevice3(iface), Centers, Radii, NumSpheres, Flags, ReturnValues); } @@ -4486,7 +4486,7 @@ static HRESULT WINAPI IDirect3DDeviceImp TRACE("iface %p, stage %u, texture %p.\n", iface, Stage, Texture2); - ret = IDirect3DDevice7_GetTexture((IDirect3DDevice7 *)device_from_device3(iface), Stage, &ret_val); + ret = IDirect3DDevice7_GetTexture((IDirect3DDevice7 *)impl_from_IDirect3DDevice3(iface), Stage, &ret_val); *Texture2 = ret_val ? (IDirect3DTexture2 *)&((IDirectDrawSurfaceImpl *)ret_val)->IDirect3DTexture2_vtbl : NULL; @@ -4558,7 +4558,7 @@ IDirect3DDeviceImpl_3_SetTexture(IDirect DWORD Stage, IDirect3DTexture2 *Texture2) { - IDirect3DDeviceImpl *This = device_from_device3(iface); + IDirect3DDeviceImpl *This = impl_from_IDirect3DDevice3(iface); IDirectDrawSurfaceImpl *tex = Texture2 ? surface_from_texture2(Texture2) : NULL; DWORD texmapblend; HRESULT hr; @@ -4773,7 +4773,7 @@ static HRESULT WINAPI IDirect3DDeviceImp TRACE("iface %p, stage %u, state %#x, value %p.\n", iface, Stage, TexStageStateType, State); - return IDirect3DDevice7_GetTextureStageState((IDirect3DDevice7 *)device_from_device3(iface), + return IDirect3DDevice7_GetTextureStageState((IDirect3DDevice7 *)impl_from_IDirect3DDevice3(iface), Stage, TexStageStateType, State); } @@ -4907,7 +4907,7 @@ static HRESULT WINAPI IDirect3DDeviceImp TRACE("iface %p, stage %u, state %#x, value %#x.\n", iface, Stage, TexStageStateType, State); - return IDirect3DDevice7_SetTextureStageState((IDirect3DDevice7 *)device_from_device3(iface), + return IDirect3DDevice7_SetTextureStageState((IDirect3DDevice7 *)impl_from_IDirect3DDevice3(iface), Stage, TexStageStateType, State); } @@ -4969,7 +4969,7 @@ static HRESULT WINAPI IDirect3DDeviceImp { TRACE("iface %p, pass_count %p.\n", iface, Passes); - return IDirect3DDevice7_ValidateDevice((IDirect3DDevice7 *)device_from_device3(iface), Passes); + return IDirect3DDevice7_ValidateDevice((IDirect3DDevice7 *)impl_from_IDirect3DDevice3(iface), Passes); } /***************************************************************************** @@ -6765,7 +6765,7 @@ HRESULT d3d_device_init(IDirect3DDeviceI else device->lpVtbl = &d3d_device7_fpu_setup_vtbl; - device->IDirect3DDevice3_vtbl = &d3d_device3_vtbl; + device->IDirect3DDevice3_iface.lpVtbl = &d3d_device3_vtbl; device->IDirect3DDevice2_vtbl = &d3d_device2_vtbl; device->IDirect3DDevice_vtbl = &d3d_device1_vtbl; device->ref = 1; diff -u -p a/dlls/ddraw/material.c b/dlls/ddraw/material.c --- a/dlls/ddraw/material.c 2011-05-24 20:51:49.675143385 +0200 +++ b/dlls/ddraw/material.c 2011-05-24 22:04:43.749535695 +0200 @@ -301,7 +301,7 @@ IDirect3DMaterialImpl_GetHandle(IDirect3 D3DMATERIALHANDLE *lpHandle) { IDirect3DMaterialImpl *This = (IDirect3DMaterialImpl *)iface; - IDirect3DDeviceImpl *device = device_from_device3(lpDirect3DDevice3); + IDirect3DDeviceImpl *device = BADBADBAD(lpDirect3DDevice3); TRACE("iface %p, device %p, handle %p.\n", iface, lpDirect3DDevice3, lpHandle); @@ -332,7 +332,7 @@ static HRESULT WINAPI IDirect3DMaterialI TRACE("iface %p, device %p, handle %p.\n", iface, lpDirect3DDevice2, lpHandle); return IDirect3DMaterial3_GetHandle((IDirect3DMaterial3 *)material_from_material2(iface), lpDirect3DDevice2 ? - (IDirect3DDevice3 *)&device_from_device2(lpDirect3DDevice2)->IDirect3DDevice3_vtbl : NULL, lpHandle); + &device_from_device2(lpDirect3DDevice2)->IDirect3DDevice3_iface : NULL, lpHandle); } static HRESULT WINAPI IDirect3DMaterialImpl_1_GetHandle(IDirect3DMaterial *iface, @@ -341,7 +341,7 @@ static HRESULT WINAPI IDirect3DMaterialI TRACE("iface %p, device %p, handle %p.\n", iface, lpDirect3DDevice, lpHandle); return IDirect3DMaterial3_GetHandle((IDirect3DMaterial3 *)material_from_material1(iface), lpDirect3DDevice ? - (IDirect3DDevice3 *)&device_from_device1(lpDirect3DDevice)->IDirect3DDevice3_vtbl : NULL, lpHandle); + &device_from_device1(lpDirect3DDevice)->IDirect3DDevice3_iface : NULL, lpHandle); } static HRESULT WINAPI IDirect3DMaterialImpl_2_QueryInterface(LPDIRECT3DMATERIAL2 iface, REFIID riid, diff -u -p a/dlls/ddraw/vertexbuffer.c b/dlls/ddraw/vertexbuffer.c --- a/dlls/ddraw/vertexbuffer.c 2011-05-24 20:51:49.675143385 +0200 +++ b/dlls/ddraw/vertexbuffer.c 2011-05-24 22:04:43.826203351 +0200 @@ -348,7 +348,7 @@ static HRESULT WINAPI IDirect3DVertexBuf DWORD SrcIndex, IDirect3DDevice3 *D3DDevice, DWORD Flags) { IDirect3DVertexBufferImpl *Src = SrcBuffer ? vb_from_vb1(SrcBuffer) : NULL; - IDirect3DDeviceImpl *D3D = D3DDevice ? device_from_device3(D3DDevice) : NULL; + IDirect3DDeviceImpl *D3D = D3DDevice ? BADBADBAD(D3DDevice) : NULL; TRACE("iface %p, vertex_op %#x, dst_idx %u, count %u, src_buffer %p, src_idx %u, device %p, flags %#x.\n", iface, VertexOp, DestIndex, Count, SrcBuffer, SrcIndex, D3DDevice, Flags); @@ -446,7 +446,7 @@ IDirect3DVertexBufferImpl_Optimize(IDire static HRESULT WINAPI IDirect3DVertexBufferImpl_1_Optimize(IDirect3DVertexBuffer *iface, IDirect3DDevice3 *D3DDevice, DWORD Flags) { - IDirect3DDeviceImpl *D3D = D3DDevice ? device_from_device3(D3DDevice) : NULL; + IDirect3DDeviceImpl *D3D = D3DDevice ? BADBADBAD(D3DDevice) : NULL; TRACE("iface %p, device %p, flags %#x.\n", iface, D3DDevice, Flags);