ddraw/device.c: Fixed Thunk_IDirect3DDeviceImpl_1_AddViewport

Christoph Bumiller e0425955 at stud3.tuwien.ac.at
Mon Nov 27 04:23:54 CST 2006


This is my first "patch" - I was trying an old game with wine 
(Starfleet Academy), which crashed when using D3D, and I got the 
following trace messages:

trace:ddraw_thunk:Thunk_IDirect3DDeviceImpl_1_AddViewport 
(0x1b440c)->(0x1f44f0) thunking to IDirect3DDevice3 interface.
trace:ddraw_thunk:Thunk_IDirect3DDeviceImpl_2_GetStats 
(0x1b4408)->(0x1f44f0) thunking to IDirect3DDevice3 interface.
fixme:d3d7:IDirect3DDeviceImpl_3_GetStats (0x1b4408)->(0x1f44f0): Stub!

This looks like Thunk_IDirect3DDeviceImpl_1_AddViewport called the 
GetStats thunk
which called GetStats with the viewport as argument, where it set some 
fields to
0, which resulted in a segfault in IDirect3DViewportImpl_SetBackground 
because IDirect3DViewportImpl->ddraw was NULL.

My change fixes this ... but I'm not sure if this is the correct 
solution, someone please verify.

-------------- next part --------------
>From 152e3d59c9e0aa402e00dd754c7ad8206c28774f Mon Sep 17 00:00:00 2001
From: Christoph Bumiller <chr at ECHELON.(none)>
Date: Mon, 27 Nov 2006 10:57:16 +0100
Subject: Fixed mistake in Thunk_IDirect3DDeviceImpl_1_AddViewport, should use
ICOM_THIS_FROM(..., IDirect3DDevice, ...), not IDirect3DDevice2.
---
 dlls/ddraw/device.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/dlls/ddraw/device.c b/dlls/ddraw/device.c
index 11435cf..f3f4830 100644
--- a/dlls/ddraw/device.c
+++ b/dlls/ddraw/device.c
@@ -808,7 +808,7 @@ static HRESULT WINAPI
 Thunk_IDirect3DDeviceImpl_1_AddViewport(IDirect3DDevice *iface,
                                         IDirect3DViewport *Direct3DViewport)
 {
-    ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice2, iface);
+    ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice, iface);
     IDirect3DViewportImpl *vp = ICOM_OBJECT(IDirect3DViewportImpl, IDirect3DViewport3, Direct3DViewport);
     TRACE_(ddraw_thunk)("(%p)->(%p) thunking to IDirect3DDevice3 interface.\n", This, vp);
     return IDirect3DDevice3_AddViewport(ICOM_INTERFACE(This, IDirect3DDevice3),
-- 
1.4.2.4



More information about the wine-patches mailing list