D3D7 -> WineD3D, 2nd attempt
Stefan Dösinger
stefandoesinger at gmx.at
Sat Oct 15 09:58:00 CDT 2005
Hello,
Just one question about thread safety: The openGL crash I am struggling with
seems related to threading:
<~30000 lines of debug output from thread 0xb >
000b:trace:ddraw:Main_DirectDrawSurface_Unlock (0x7c8a3910)->Unlock((nil))
000b:trace:d3d_surface:IWineD3DSurfaceImpl_UnlockRect (0x7c8a3cb8 ) :
dirtyfied(1)
000b:fixme:d3d_surface:IWineD3DSurfaceImpl_UnlockRect unsupported unlocking to
surface surf at 0x7c8a3cb8 usage(512)
000b:trace:ddraw:Main_DirectDrawSurface_Unlock (0x7c8a2e60)->Unlock((nil))
000b:trace:d3d_surface:IWineD3DSurfaceImpl_UnlockRect (0x7c8a3208 ) :
dirtyfied(1)
000b:fixme:d3d_surface:IWineD3DSurfaceImpl_UnlockRect unsupported unlocking to
surface surf at 0x7c8a3208 usage(512)
001c:trace:ddraw:Main_IDirect3DDeviceImpl_7_Clear
(0x7c7e0cd8/0x7c7e0cd8)->(00000001,0x5c59f4e4,00000002,00000000,0.000000,00000000)
001c:trace:ddraw:d3ddevice_clear (0x7c7e0cd8) Relay
001c:trace:d3d:IWineD3DDeviceImpl_Clear (0x7c833250) Count (1), pRects
(0x5c59f4e4), Flags (2), Z (0.000000), Stencil (0)
001c:trace:d3d:IWineD3DDeviceImpl_Clear glEnable GL_SCISSOR_TEST call ok
device.c / 4666
001c:trace:d3d:IWineD3DDeviceImpl_Clear glClearDepth call ok device.c / 4688
001c:trace:d3d:IWineD3DDeviceImpl_Clear (0x7c833250) 0x5c59f4e4
Rect=(662,430)->(0,0) glRect=(662,768), len=-662, hei=-430
001c:fixme:d3d:IWineD3DDeviceImpl_Clear >>>>>>>>>>>>>>>>> 501 from glScissor @
device.c / 4717
001c:trace:d3d:IWineD3DDeviceImpl_Clear glClear call ok device.c / 4729
001c:trace:d3d:IWineD3DDeviceImpl_Clear glDisable call ok device.c / 4756
001c:trace:ddraw:WineD3D_IDirect3DDeviceImpl_7_3T_2T_1T_BeginScene
(0x7c7e0cd8/0x7c7e0cd8)->(): Relay!
001c:trace:d3d:IWineD3DDeviceImpl_BeginScene (0x7c833250) : stub
001c:trace:ddraw:WineD3D_IDirect3DDeviceImpl_7_3T_2T_SetRenderState
(0x7c7e0cd8/0x7c7e0cd8)->(00000089,00000000): Relay!
001c:err:ddraw:WineD3D_IDirect3DDeviceImpl_7_3T_2T_SetRenderState Calling
glBegin
001c:err:ddraw:WineD3D_IDirect3DDeviceImpl_7_3T_2T_SetRenderState Calling
glEnd
001c:err:ddraw:WineD3D_IDirect3DDeviceImpl_7_3T_2T_SetRenderState Done!
001c:trace:d3d:IWineD3DDeviceImpl_SetRenderState (0x7c833250)->state =
WINED3DRS_LIGHTING(137), value = 0
001c:trace:d3d:IWineD3DDeviceImpl_SetRenderState glDisable GL_LIGHTING call ok
device.c / 2817
001c:err:ddraw:WineD3D_IDirect3DDeviceImpl_7_3T_2T_SetRenderState Calling
glBegin
---Crash in fglrx---
The nvidia OpenGL implementation crashes in IWineD3DDeviceImpl_Clear, the
fglrx implementation on the first glBegin or glReadPixels call after the
thread switch - Here an injected glBegin()-glEnd call after SetRenderState.
Is WineD3D threading safe yet? Or might be the underlying OpenGL layer have
problems with threading?
On the fglrx side glDisable(GL_LIGHTNING) comes into play somewhere. Without
this call there's no crash, but a completely blocked X server. However, I
don't think it's related to the cause, but it only changes the symptom.
Without Hardware accellerated OpenGL there's no crash in OpenGL, but there's a
DIB crash later on. With the old D3D7 Implementation I've also seen texture
problems after the thread switch.
Thanks,
Stefan
More information about the wine-devel
mailing list