Module: wine Branch: master Commit: faa269c42a6ef957acb2802153eca80a69146968 URL: http://source.winehq.org/git/wine.git/?a=commit;h=faa269c42a6ef957acb2802153...
Author: Michael Stefaniuc mstefani@redhat.de Date: Fri Jul 8 12:28:27 2011 +0200
ddraw: Use unsafe_impl_from_IDirect3DExecuteBuffer for an app provided iface.
---
dlls/ddraw/ddraw_private.h | 1 + dlls/ddraw/device.c | 13 +++++-------- dlls/ddraw/executebuffer.c | 9 +++++++++ 3 files changed, 15 insertions(+), 8 deletions(-)
diff --git a/dlls/ddraw/ddraw_private.h b/dlls/ddraw/ddraw_private.h index 755ac2a..7bce353 100644 --- a/dlls/ddraw/ddraw_private.h +++ b/dlls/ddraw/ddraw_private.h @@ -508,6 +508,7 @@ struct IDirect3DExecuteBufferImpl
HRESULT d3d_execute_buffer_init(IDirect3DExecuteBufferImpl *execute_buffer, IDirect3DDeviceImpl *device, D3DEXECUTEBUFFERDESC *desc) DECLSPEC_HIDDEN; +IDirect3DExecuteBufferImpl *unsafe_impl_from_IDirect3DExecuteBuffer(IDirect3DExecuteBuffer *iface) DECLSPEC_HIDDEN;
/* The execute function */ HRESULT d3d_execute_buffer_execute(IDirect3DExecuteBufferImpl *execute_buffer, diff --git a/dlls/ddraw/device.c b/dlls/ddraw/device.c index f8dfaa8..dbe1af6 100644 --- a/dlls/ddraw/device.c +++ b/dlls/ddraw/device.c @@ -707,25 +707,22 @@ IDirect3DDeviceImpl_1_CreateExecuteBuffer(IDirect3DDevice *iface, * D3D_OK on success * *****************************************************************************/ -static HRESULT WINAPI -IDirect3DDeviceImpl_1_Execute(IDirect3DDevice *iface, - IDirect3DExecuteBuffer *ExecuteBuffer, - IDirect3DViewport *Viewport, - DWORD Flags) +static HRESULT WINAPI IDirect3DDeviceImpl_1_Execute(IDirect3DDevice *iface, + IDirect3DExecuteBuffer *ExecuteBuffer, IDirect3DViewport *Viewport, DWORD Flags) { IDirect3DDeviceImpl *This = device_from_device1(iface); - IDirect3DExecuteBufferImpl *Direct3DExecuteBufferImpl = (IDirect3DExecuteBufferImpl *)ExecuteBuffer; + IDirect3DExecuteBufferImpl *buffer = unsafe_impl_from_IDirect3DExecuteBuffer(ExecuteBuffer); IDirect3DViewportImpl *Direct3DViewportImpl = (IDirect3DViewportImpl *)Viewport; HRESULT hr;
TRACE("iface %p, buffer %p, viewport %p, flags %#x.\n", iface, ExecuteBuffer, Viewport, Flags);
- if(!Direct3DExecuteBufferImpl) + if(!buffer) return DDERR_INVALIDPARAMS;
/* Execute... */ EnterCriticalSection(&ddraw_cs); - hr = d3d_execute_buffer_execute(Direct3DExecuteBufferImpl, This, Direct3DViewportImpl); + hr = d3d_execute_buffer_execute(buffer, This, Direct3DViewportImpl); LeaveCriticalSection(&ddraw_cs);
return hr; diff --git a/dlls/ddraw/executebuffer.c b/dlls/ddraw/executebuffer.c index 5f738bb..379862a 100644 --- a/dlls/ddraw/executebuffer.c +++ b/dlls/ddraw/executebuffer.c @@ -870,3 +870,12 @@ HRESULT d3d_execute_buffer_init(IDirect3DExecuteBufferImpl *execute_buffer,
return D3D_OK; } + +IDirect3DExecuteBufferImpl *unsafe_impl_from_IDirect3DExecuteBuffer(IDirect3DExecuteBuffer *iface) +{ + if (!iface) + return NULL; + assert(iface->lpVtbl == &d3d_execute_buffer_vtbl); + + return impl_from_IDirect3DExecuteBuffer(iface); +}