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