http://bugs.winehq.org/show_bug.cgi?id=18015
--- Comment #10 from H. Verbeet hverbeet@gmail.com 2009-04-18 17:21:52 --- (In reply to comment #8)
Yup it fails at the line
*ppReturnedDeviceInterface = (IWineD3DDevice *)object;
If I comment it out it works, but has an exception later on
It looks like some kind of stack corruption. You may want to print both wineD3DDevice and &wineD3DDevice at the start of DDRAW_Create() and right before the IWineD3D_CreateDevice() call in DDRAW_Create(). Also print it at the start of IWineD3DImpl_CreateDevice(), and compare the different values.
Note that the value of *ppReturnedDeviceInterface, 0x65726944 is different from the NULL it was initialized with in DDRAW_Create(). Also note that 0x65726944 looks like character data ("Dire...").
Also it happens for the demo as well, would my version of mesa matter?
Considering the demo works for me with the nvidia drivers, it might. If this is caused by Mesa, the corruption would have to occur inside the pWineDirect3DCreate() call from DDRAW_Create().
from looking at the commit it doesn't look like much changed in the directx.c file to cause an issue
I doubt the commit is the cause of the problem, but it does add an extra parameter to IWineD3D_CreateDevice(), and changes the position of the output parameter. That changes the layout of the data on the stack, which could make already existing stack corruption more visible.
(In reply to comment #9)
the raise_exception info[1] points to ppReturnedDevciceInterface, I don't know if that means anything special
That's the address is tries to write to. Code c0000005 means EXCEPTION_ACCESS_VIOLATION, 00000001 in info[0] means EXCEPTION_WRITE_FAULT.