1Quickstart Guide 2 3*** Configure and build mesa 4CFLAGS="-m32" CXXFLAGS="-m32" ./autogen.sh --prefix=/usr \ 5 --with-gallium-drivers=nouveau,r600,swrast --enable-nine \ 6 --enable-debug --enable-texture-float --with-dri-drivers= --disable-dri \ 7 --disable-opengl --disable-egl --disable-vdpau --disable-xvmc --disable-gbm \ 8 --disable-llvm 9make 10 11*** Then we create some symlinks to mesa: 12ln -s "`pwd`/lib/gallium/libd3dadapter9.so.0.0.0" /usr/lib/ 13ln -s "`pwd`/lib/gallium/libd3dadapter9.so.0" /usr/lib/ 14ln -s "`pwd`/lib/gallium/libd3dadapter9.so" /usr/lib/ 15ln -s "`pwd`/include/d3dadapter" /usr/include/ 16 17*** Clone and build a patched wine 18git clone git@github.com:iXit/wine.git 19./configure 20make 21 22*** And finally we create some symlinks to our patched wine files: 23for f in d3d9.dll gdi32.dll user32.dll wineps.drv winex11.drv; 24do 25 mv /usr/lib/wine/$f.so /usr/lib/wine/$f.so.old 26 ln -s "`pwd`/dlls/`basename -s .dll $f`/$f.so" /usr/lib/wine/ 27done 28 29*** Activating it within wine 30regedit 31Navigate to HKCU\Software\Wine\Direct3D 32If it's not there, create it 33Create a new DWORD value called UseNative 34Set its value to 1 35 36Every Direct3D9 program will now try using nine before wined3d 37 38If you want to selectively enable it per-exe instead, use the key: 39HKCU\Software\Wine\AppDefaults\app.exe\Direct3D\UseNative 40where app.exe is the name of your .exe file 41 42 43*** HOW IT WORKS *** 44 45Nine implements the full IDirect3DDevice9 COM interface and a custom COM 46interface called ID3DAdapter9 which is used to implement a final IDirect3D9Ex 47COM interface. 48ID3DAdapter9 is completely devoid of window system code, meaning this can be 49provided by wine, Xlib, Wayland, etc. It's inadvisible to write a non-Windows 50backend though, as we don't want to encourage linux developers to use this API. 51 52The state tracker is compiled, along with pipe-loader, into a library called 53libd3dadapter9.so. This library loads pipe_[driver].so drivers on demand and 54exports a single symbol for getting a subsystem driver. Currently only DRM is 55supported. 56This library is then linked to the library implementing the IDirect3D9[Ex] 57interface and the actual Direct3D9 entry points (Direct3DCreate9[Ex]) 58 59The implementation of IDirect3D9[Ex] lies within wine and coexists with 60wined3d. It's loaded on demand and so if it's not there, it doesn't have any 61drivers or something else is wrong, d3d9.dll will automatically revert to using 62wined3d. 63Whether or not it's even tried is determined by 2 DWORD registry keys. 64> HKCU\Software\Wine\Direct3D\UseNative 65> HKCU\Software\Wine\AppDefaults\app.exe\Direct3D\UseNative 66The former is the global on-switch. The latter is per-exe. 67 68The driver search path can be set at configure time with 69--with-gallium-driver-dir and overridden at runtime with D3D9_DRIVERS_PATH. 70Debugging information can be gotten with the WINEDEBUG channels d3d9 and 71d3dadapter, and state_tracker debug information can be gotten with NINE_DEBUG. 72Help on NINE_DEBUG is shown through NINE_DEBUG=help 73 74Finally, the ID3DPresent[Group] and ID3DAdapter9 interfaces are not set in 75stone, so feel free to hack on those as well as st/nine. 76 77Happy Hacking! 78