DirectX 8 Beta - 1

The majority of the patches have now been merged into Wine CVS, if your trying to play games with wine please try the latest wine release. This patch is intended for beta testing the merging of the DirectX 8 and 9 codebase and is primererraly intended for regression testing of games that currently work in Wine, but should also make more DirectX 8 games playable and with better graphics.

Whats in it for DirectX 8:

Whats out:

Reporting bugs Bugs should be reported at Things to include in a bug report:

Before reporting a not running bug please try the game in windows 98 and windows 2000 mode and with or without sound.

Playable DirectX 8 Games:

2005-06-13 release

It's been a while but here the latest release, attention has been focused on performance and stabilising some games. There are a lot of changes in this release (about a 500k diff), as much regression testing as possible has been done fixing a lot of issues in earlier builds but I'm sure there are a few bugs that will have slipped through.

New feature and changes:

To install this patch I recomend linux gamers WineCVS installation script, select profile 4 for wine with the Directx 9 patches.

Heap fragmentation had been starting to cause some problems, because of this performance improvements were put ahead of shaders. So for this release I've only inclued hardware vertex shader, pixel shaders should be implemented in the next releas or two depending on the ammout of regression and other bugs that popup.

I've been performance tuning with an AMD Athlon 2000+ 1GM, AGP x4, ATI-9660 256MB (capped to 64MB in wined3d). Some examples of the performance improvements I've obtained are:

This is good, but there are still a couple of other areas that needs tuning: Intelligent caching, partial surface updates, texture unit and context states, pixel buffer objects and texture_rectangle for non-power2. So expect to see those numbers going up in future releases. ATI's drivers also seem to be twice as fast under Windows, so there's potential for a doubling in the speed if ATI fix their drivers. I've also sped up reading compressed textures via libtxc_dxtn which should help out people using the DRI drivers as soon as some patches are put together.

Performance tuning still needs to be done on other systems, it would be useful if someone could run some tests with a GeForce card, there are a number of flags wined3d_private.h that control some of the performance options: WORD_ALIGN_X8R8G8B8, SOFTWARE_REPACKING, USE_VBO and INDEXBUFFERCACHE. SOFTWARE_REPACKING was primarily implemented to work around ATI's slow drivers so DirectX may faster if GeForce users to disable the flag. You can use WINEDEBUG=d3d_timings to get a dump of the profiling data to stdout to see which areas of the code, if any, are causing the bottleneck.

VBOs are still in a prototype stage and for now colour fixups have been taken out of the VBO pipeline and will be replaced with custom shaders sometime soon. Because of this I've disabled VBOs by default, but if you don't care about the odd colour artifact or the possibility that the game will hang! you can enable VBOs in wined3d_private.h by changing the line #define USE_VBO 0 to #define USE_VBO 1 and recompiling to see the performance gains and to do some testing. VBOs are working quite well and I haven't had and geometry issues with ATI's drivers so I'm not sure how Cedega have managed to have problems.

Vertex shaders have been ported from d3d8, loading arrays and the cross compiler have been fixed with the parser extended to work with vertex shaders 2 and 3. Only shaders <2 are fully supported by opengl untill a GL shader languange cross compiler is written. I have had a few problems with games that use vertex shaders for blends e.g. The increadables or Evil Genius.

For anyone interested in fixing any faults they come across WINEDEBUG=trace+d3d9_filelog will make d3d9 generate a c file /tmp/wined3d_debugsession.c that can be compiled using the code in wine/dll/d3d9/tests to replay all the operations that have been performed, I've also put together some simple tools to converted the data output into TGA format for the images and CSV format for the vertex data. The file gets big very quickly, so the best thing to do is identify the textures that should be used, using the conversion tools, and then finding the area in the generated code where those textures are used and compiling the sections between device_presents or device_SetRenderTargets.

Finally, if you don't have an accelerated graphics card everything should work fine under Mesa, all be it slowly.

n.b. I've finally got ADSL to be switched on again so future releases should be more frequent.

Some people were having problems with the earlier patch, so I've put a new one together : d3d9patch.2005-04-28-2.diff.bz2, in this patch I've disabled the vertex shader processing so that the characters appear in Kohan 2, Axis and Allies 2 and Evil Genius, Kohan 2 and Axis and Allies should be reasonable playable, but the characters in Evil Genius have no animation so it's not quite so playable.

At the moment I'm working on matching up opengl's state management and DirectX's state management a lot better, this should increase stability and help prevent regression by forcing the correct states prior to rendering and simplifying the pipeline. It should also significantly reduce the number of state changes which should result in a nice performance boost. After that it's probably a good time to move shaders across which should help to get a few more games working nicely.

Thanks for everyones support, DirectX is starting to stabilises nicely and a few games are now almost perfect in therms of graphics support.
I've just moving house recently and for some reason my ISP decided to pull my website which is why I've been AWOL for a while, some of the donations are going towards a more permanent fix so that this doesn't happen again and I'll get back to answering emails ASAP. For now here's a quick snapshot release of the DirectX 9 patch against yesterdays winecvs

With this release I've again been focusing on improving the architecture of wined3d for added stability, performance and easier support of all or the DirectX functionality.

New features in the release... What's not in this release... Work in process

Games now working

Games almost working

Hacks and workarounds
I've added a couple of new registry keys to help make some of the games playable under:
They are:
Sometimes the mouse will stick in the middle of the screen or behave in an oversensitive way, this is because of a 'hack' in dinput that doesn't work on all occasions, to enable or disable this hack modify the key:
	HKEY_LOCAL_MACHINE/Software/Wine/dinput mousehack = "enabled|disabled"  default = enabled
Some examples of games that need this value setting are The increadables needs to have the hack enabled and Evil genius needs the hack disabled.
Pbuffer support has been tacked on and not fully integrated into this release, so for now you can enable it by using the registry keys:
	HKEY_LOCAL_MACHINE/Software/Wine/directx pbuffersupport = "enabled|disabled"  default = disabled
	HKEY_LOCAL_MACHINE/Software/Wine/directx sharedpbuffers= "enabled|disabled"  default = disabled
The second key enables the sharing of pbuffers, this keeps memory down and is required for Axis and Allies, Kohan 2 and pirated if you have an ATI card (because pbuffers cannot be deleted with ATI's drivers). Disabling shared pbuffers slightly improves compatibility between wined3d and DirectX.