http://bugs.winehq.org/show_bug.cgi?id=8868
Roman Nykyforchyn loofsoft@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |loofsoft@gmail.com
--- Comment #12 from Roman Nykyforchyn loofsoft@gmail.com 2008-05-16 08:37:04 --- Hi, I found the cause of this issue.
The problem is in wined3d library, in some case we get stack overflow by calling ActivateContext (context.c) function recursively.
I've fixed this and the changes are: 1) in read_from_framebuffer_texture function (surface.c):
+ if(!device->isInDraw) ActivateContext(device, (IWineD3DSurface *) This, CTXUSAGE_BLIT);
2) in FindContext function (context.c):
if (wined3d_settings.offscreen_rendering_mode != ORM_FBO) { /* Make sure we have a OpenGL texture name so the PreLoad() used to read the buffer * back when we are done won't mark us dirty. */ + BOOL oldInDraw = This->isInDraw; + This->isInDraw = TRUE; IWineD3DSurface_PreLoad(target); + This->isInDraw = oldInDraw; }
Now I do not have any crashes with Oblivion, exterior scenes work fine with pbuffer and backbuffer rendering. But I noticed, that sometimes one of the frames in rendered upside down. This happens only on exterior scenes and on the same places that were crashing without my fix.
Can somebody take care of this and fix pbuffer and backbuffer till 1.0 release? This may be good improvement, as pbuffer and backbuffer rendering provides 1.5 times better performance in some games.