Skip to content

Building & Debugging

Jeff edited this page May 10, 2023 · 15 revisions

Building

To build a dev build of d8vk, run the following handy helper script:

./build_d3d8.sh main build --dev-build

Where build is your builds folder and main is an arbitrary name for this build.

MSVC Test Builds

If you need to make a Windows MSVC build (usually only for development purposes), you will need to provide d3d8.h, d3d8types.h, and d3d8caps.h. They can be found here from the August 2007 DirectX 9 SDK, the last version to include these headers, subject to the DirectX SDK license. It is sufficient to put them in the root include/ folder.

See here for installation instructions.

Tips

Try running the game with gamescope (gamescope %command% in Steam) if the game creates misbehaving windows or struggles to alt-tab.

Alternatively, you can try Wine desktop: wine explorer /desktop=WineDesktop,1920x1080 %command%

Debugging

Debugging 32-bit programs on a 64-bit machine on Wine, often programs without debug symbols, can be quite difficult.

There are many useful environment variables for debugging DXVK. The debug HUD is also essential and can tell you if you're using D3D8.

Before debugging, ensure you have set the right WINEPREFIX where you installed DXVK. The default is ~/.wine.

GDB

Run the following command:

gdb -x <path to WineReload.py> -ex run --args <wine executable> <target .exe> [args...]
  • Make sure to get WineReload.py
  • <wine executable> is the regular wine binary. The default is /usr/bin/wine
    • Proton will have its own version, e.g. ~/.local/share/Steam/steamapps/common/Proton - Experimental/files/bin/wine
  • <target .exe> is the Windows exe you wish to debug.
  • [args...] is any optional arguments to pass to the exe

When you get your first SIGUSR1, run the GDB command wine-reload (or wr) to load debug symbols etc.

  • And then execute continue
  • After that, you shouldn't get another SIGUSR1
  • If you don't ever get a SIGUSR1 I suggest calling __debugbreak(); in Direct3DCreate8.
  • You must run wine-reload after d3d8.dll is loaded.
Clone this wiki locally