[Bug 5955] DirectDrawCreate crash on non-OpenGL desktop

Wine Bugs wine-bugs at winehq.org
Wed Mar 21 17:04:36 CDT 2007


http://bugs.winehq.org/show_bug.cgi?id=5955





------- Additional Comments From stefandoesinger at gmx.at  2007-21-03 17:04 -------
The winecfg this is easilly answered: There is no winecfg option and there 
will never be one. The DirectDraw renderer should be opengl by default, and 
autodetected to fall back to gdi if no opengl libs are available, or only 
uppon direct request.

The issue that DDraw fails to load completely without opengl is because the 
DDraw software renderer is built into wined3d.dll and wined3d.dll is 
dynamically linked(at load time) to libGL.so. Having the sw renderer in 
wined3d allows us to use it as a fallback if Direct3D blitting 
operations(StretchRect, CopyRects) are not supported by the opengl code.

What needs to be done to make DDraw work without gl is to replace the dynamic 
load-time linking with lazy linking. The last time this was discussed the idea 
was to link wined3d (dynamically) to out opengl32.dll(or native opengl32.dll 
on windows). OpenGL32.dll does the lazy linking against libGL.so. For 
initialization opengl calls our display driver, winex11.drv or winequartz.drv 
which does the platform dependent initialization. Platform independent calls 
go from opengl32.dll to libGL.so.

I dislike that idea because I do not think it is good to put abstraction layer 
above abstraction layer above abstraction layer in performance critical things 
like 3D graphics. In the worst case we have 
d3d9->wined3d->opengl32->winex11->libGL.so

Also, if I understand the linking concept correctly, dynamic load time linking 
results in faster calls than lazy linking. Thus if we take even the simplest 
approach and implement lazy linking in wined3d, this will result in decreased 
Direct3D performance. It would be a minor decrease, but still a decrease. 
Honestly I think that there are more Direct3D users than users who use 
DirectDraw on a non-opengl display. I think Gentoo is the only distro that 
offers a way to compile wine without opengl, except manual compiling with 
fidling with configure params. Keep in mind that you do not need a 3d 
accelerator. The Mesa3D software renderer is perfectly enough, and it maybe 
even gives faster performance than our software ddraw renderer.

If you want to implement lazy linking to libGL.so the first step would be a 
discussion of the approach on wine-devel. My personal preference would be not 
to implement lazy linking and close this bug as invalid, or wait for a general 
opengl loading cleanup which moves wined3d over to wgl(opengl32.dll), which we 
will need if we want to use our (future) Direct3D10 implementation on windows 
xp(and thus close the bug as later).

-- 
Configure bugmail: http://bugs.winehq.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.



More information about the wine-bugs mailing list