Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

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