[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