From faa269c42a6ef957acb2802153eca80a69146968 Mon Sep 17 00:00:00 2001 From: Michael Stefaniuc Date: Fri, 8 Jul 2011 12:28:27 +0200 Subject: [PATCH] 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 755ac2a00b9..7bce353da2f 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 f8dfaa83d9b..dbe1af68dbb 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 5f738bb15f6..379862a6f90 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); +} -- 2.11.4.GIT