[PATCH 2/2] ddraw: Use unsafe_impl_from_IDirect3DExecuteBuffer for an app provided iface
Michael Stefaniuc
mstefani at redhat.de
Fri Jul 8 05:28:27 CDT 2011
---
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);
+}
--
1.7.4.4
More information about the wine-patches
mailing list