~mmach/netext73/mesa-haswell

« back to all changes in this revision

Viewing changes to src/gallium/frontends/nine/README

  • Committer: mmach
  • Date: 2022-09-22 19:56:13 UTC
  • Revision ID: netbit73@gmail.com-20220922195613-wtik9mmy20tmor0i
2022-09-22 21:17:09

Show diffs side-by-side

added added

removed removed

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