Jump to content

Linux gaming technical discussion

Recommended Posts

This is a thread meant for Linux gaming experts who have been helping me via email to help decide on the best configuration for doing old game testing in Linux.  I've gotten some conflicting information, so this is an effort to sort it out.  Here's a recap of what I'm trying to do:

 

GOALS / SYSTEM INFO:

•Test compatibility on a battery of games, all 3D accelerated, from about 1997 - 2010.  They'll be DirectX 5 - 9 games with maybe a couple OpenGL titles.  A fair portion of these titles will be obscure and unlikely to be in many game databases.  None of them will be Steam or GOG copies, only disc originals (some with DRM cracks).

 

•I wish to force mixed mode antialiasing (MSAA+SSAA for alpha textures) or SSAA on as many titles as I can.

 

•I wish to measure the framerate on as many titles as I can.  This means disabling vsync for benchmarking, though it would be nice to be able to turn it back on when I'm not also.

 

•The machine I'm using has a FX-8350 CPU and a Geforce 770 GPU.  I have a weaker AMD GPU card also I could use, but my initial research showed a wider range of antialiasing compatibility for Nvidia GPUs on Linux.  I currently have Ubuntu Mate installed.

 

I was using PlayonLinux and was having disappointing performance on many older titles.  I've since been told I should be using Luttris.  What I'm looking for is to collectively come up with a COMPLETE guide for everything I should do from a new install to having a solid set up.  I was starting to make a checklist when I got all the Lutrris info and discovered WINE was forcing Adaptive VSYNC on me, which sent me back to the drawing board.   Here was my checklist so far:

 

 

 

Checklist


INSTALL PLAYONLINUX
Open Ubuntu Software Center / PLayonLinux should be listed / install
ALSO
make sure more recent WINE versions are installed for additional features
Go to tools / manage WINE versions / install at least 4.0 and up to have Nvidia framerate monitoring (x86 versions for my purposes)
ALSO
When installing a new WINE install under PlayonLinux, check "use another version of WINE" to manually select the newer version, otherwise it can default to an older one.
If program fails to install, rebooting is recommended


NVIDIA DRIVERS:
System / Administration / Software & Updates / Additional Drivers
If 415 or newer are unavailable, open terminal and type
sudo add-apt-repository ppa:graphics-drivers/ppa


ENABLE ANTIALIASING:
System / Administration / Nvidia X Server Settings / X Screen 0 / Antialising Settings / Override Application Settings / (set value)
(anisotropic filtering is in the same menu)
also
In PlayonLinux, right click on game profile / Registry editor /
In HKEY_CURRENT_USER/Software/Wine/Direct3D/, (create directory if needed) create new string "OffscreenRenderingMode" and set to "backbuffer"


INSTALL CD EMULATOR
In terminal type:
sudo apt-get install furiusisomount


KILL OPTION:
Create a script to forcibly shutdown WINE on a timer for games that lock up the system and controls when enabling AA.  Recommended to run the script ahead of time when forcing AA on an untested game.
Create text file named "kill.sh" or anything .sh
In it, add the following:

#!/bin/bash
sleep 30
for KILLPID in `ps ax | grep '.exe' | awk ' { print $1;}'`; do
  kill -9 $KILLPID;
done
With "sleep 30" meaning 30 seconds, change time if desired.


FRAMERATE MONITORING
Make sure Nvidia drivers 415 or newer are installed.
System / Administration / Nvidia X Server Settings / X Screen 0 / OpenGL Settings / check Enable Graphics API Visual Indicator


VSYNC ON:
System / Administration / Nvidia X Server Settings / X Screen 0 / OpenGL Settings / Sync to Vblank on
also
Press F2, type mate-tweak
Select Windows / set Window manager to Marco (Compton GPU Compositor)
possibly reboot


FRAMERATE MONITORING OPTION FOR STUBBORN GAMES WHERE IT DOESN'T WORK:
In playonlinux game directory type:
WINEDEBUG=ddraw wine ./bin/nameofgame.exe 2>&1 | grep --line-buffered -i "trace:ddraw:ddraw_surface7_Flip" | pv --line-mode --rate --timer -f 1>/dev/null
 

 

 

Obviously, some of this information is outdated, but I thought it was worth listing here for the parts I did get correct.

 

Anyway, please give me your detailed step-by-step instructions / suggestions for trying to get these games to run.  For example, maybe I should try Luttris in DXVK mode FIRST, but then if that doesn't work for a game, THEN try Playonlinux, etc.  Be as specific as you need to.  Alternately, if you disagree with advice someone else is giving, by all means, feel free to discuss it here.  You only need to "dumb down" the final instructions directed towards me, you can be as technical as you like towards each other. 

 

Thanks in advance for the help and if you're not particularly knowledgeable about Linux gaming, please refrain from posting in this thread.  I'm trying to cut down on the casual chatter here and focus just on the technical aspects of getting things working.

 

 

WHAT I CURRENTLY NEED HELP WITH

 

•Turning off adaptive Vsync in WINE.  It's been suggested to me that I should install libstrangle, which requires me to compile it myself.  It's also been suggested I disable Nvidia DRM, though someone else was claiming that would only work for Opteron setups.  I have no idea which route I should be pursuing, so I would appreciate some clarification here.

 

•Full installation / setup guide to Luttris for the types of games I'm testing (DirectX 5 - 9, mostly, many of which aren't in a Linux database).  Advice on what cases this is likely to be better, worse, etc.

 

•One person suggested dgvoodoo for getting antialiasing working on games it doesn't function on normally.  I think initial testing made this look like it was unlikely to help in most scenarios.  Any clarification on this + instructions for getting it working if it is in fact, recommended.

 

•For older games that only run at 4x3 resolutions, what is the recommended method to run these in full screen mode on a widescreen monitor with proportional stretching (in other words, the image will be scaled accordingly and not distorted horizontally)?

 

•(low priority) when forcing SSAA, I noticed on at least one title, it led to blurring above and beyond what you normally get from SSAA (all AA has a little bit of blur due to its nature, this was beyond that).  In situations this occurs in, are there any "sharpening" graphics options to counteract it?  If it helps, the title I remember this happening in was Warhammer: Mark of Chaos.

 

Edited by Ross Scott (see edit history)

Share this post


Link to post
3 minutes ago, RaTcHeT302 said:

Sorry for hijacking the thread, but if there's any info on how to turn off billinear filters \ get pixel perfect scaling (I forgot the term for it), it would be nice to have some info on it, it would be useful for games like StarCraft, where the game is just a blurry mess.

That's alright, you reminded me of another thing I wanted to mention, I'm adding it to the original post.

Share this post


Link to post

Some preliminary points:

  • the adaptive vsync issue Ross discovered really seems like it could be very well behavior baked into Wine itself. It'd be prudent to test and determine this as soon as possible, possibly by contacting Wine devs and try to get a patch for Wine made that addresses it.
  • I think we should try to categorize all the games we'll be dealing with, because different types of games will require slightly different approaches depending on the graphics API used and other various nuances in the implementation. I imagine we'll have to tackle a lot of games on a case to case basis so it's important that solutions found in such manner will be correctly classified so they can be reused for others. Like for example as Ross mentions, some games actually benefit from going the whole dgvoodoo + DXVK route but a lot probably wouldn't.
  • Regarding the 4:3 thing, I suspect using Proton would be best since it has fullscreen scaling built in, unless vanilla Wine has finally got that upstreamed. Assuming there isn't a game-specific patch on http://www.wsgf.org/ of course.
  • I do think Lutris should be used as the "base of operations" because it has the best per-game configuration options, including an option of easily enabling DXVK. The only thing it misses is an easy way to make prefixes, but it's not like it's hard to make prefixes, even from a terminal.

I'll write more when I have time and as I collect my thoughts.

 

Edit: also I see nothing wrong with your checklist so far btw, Ross, seems like a reasonable starting point

Edited by qptain Nemo (see edit history)

Share this post


Link to post

Okay just as I wrote I see nothing wrong with that checklist I found some nitpicking material. I'd modify the kill wine script as follows

Quote

 

#!/bin/bash
sleep 30
for KILLPID in `ps ax | grep -i '.exe' | awk ' { print $1;}'`; do
  kill -9 $KILLPID;
done

killall -I -s KILL -v wineserver

 

Rationale:

  • wineserver doesn't have .exe in its name and it's better to make sure it's not still hanging and is killed together with the rest
  • the name of the game's executable might be in all caps so grep without -i won't catch it
Edited by qptain Nemo
oops, screwed up the syntax of kill because i always use killall wrapped in my own script (see edit history)

Share this post


Link to post
1 hour ago, qptain Nemo said:
  • I think we should try to categorize all the games we'll be dealing with, because different types of games will require slightly different approaches depending on the graphics API used and other various nuances in the implementation. I imagine we'll have to tackle a lot of games on a case to case basis so it's important that solutions found in such manner will be correctly classified so they can be reused for others. Like for example as Ross mentions, some games actually benefit from going the whole dgvoodoo + DXVK route but a lot probably wouldn't.

 

What I'm looking for is almost a flowchart process.  In other words, something like

 

Step 1: Try X software with Y settings.

Step 2: If X software is unsuccessful, try Z software with X1 settings, etc.

Step 3: If game is DirectX 7, try X2 software with Y2 settings, etc.

 

I'm looking for a "general procedure" to follow that I can apply to any random game of the type mentioned (DX5 - DX9, 3D accelerated, possibly too obscure to have existing documentation).  So I'm not expecting one piece of software or one setting to work with everything, but I want to be as prepared as possible with my procedure to get the game working.  It's fine if you want to list a different process for a game that already is in an existing database v. one that's not.  Now beyond that, there's also game-specific fixes, but that's a deeper level I can document elsewhere that people can help with later if you want (I can email about that).  For now, I'm just trying to nail down a general process.

 

 

 

 

 

Share this post


Link to post

Hello everyone. It's been a long time since I've used a forum, so forgive me if my etiquette is a little rusty.

 

This post may get a little long, but I'd like to address as much as I possibly can with all the information I have. I'd also like to suggest that we put in explanations on every terminal command that we post on this thread, as that will make it a lot easier for newbies to understand what they're actually doing. I think the best way is to have a commented out part after the command, so we can roughly explain what we're trying to achieve. Now for the actual post...

 

Wine, V-sync, and libstrangle

 

Spoiler

 

I'll start off by saying that, after the intensive testing I've conducted, I'm fairly certain that the Wine V-Sync issue is game specific and not likely a problem with Wine. To clarify, I've run Messiah (one of the games Ross was having the issue with) and confirmed that it indeed was using V-Sync even when the Nvidia settings had it disabled. I thought my compositor (Kwin) might have been playing a role, but disabling it did nothing. I tried multiple Wine versions in Lutris (tkg-protonified-4.6-x86_64, staging-3.8-i386, staging-2.21-i386) and still the problem remained, with Nvidia's built-in performance indicator not even working on version 2.21. I then tested Medal of Honor: Allied Assault (MoHAA) on those very same Wine prefixes, as they have similar system requirements in GoG (DirectX7 minimum on the GPU), which I assumed meant similar DX versions. Shockingly, MoHAA did not exhibit the V-Sync issue, and even had the indicator working in staging-2.21. All I can conclude from this is that the game itself must have some code that is forcing V-Sync on unless something on the driver side says "no".

 

After testing for many possibly solutions, I remembered libstrangle had options regarding forced V-Sync. I tried it out, and sure enough, I could now get 160FPS in Messiah (up  from 75 with V-Sync on). Typically, you need to run "VSYNC=0 strangle <game executable>" to do this, but with Lutris, it's actually the other way around. For anyone new to Lutris wanting to test this out: go to your game's launcher configuration, then go to the "System options" tab, scroll down until you see "Command prefix", and then type "strangle VSYNC=0" to disable V-Sync on the game. If you don't yet have libstrangle installed on your machine, and are running Ubuntu, you can follow the commands bellow to get it all setup.

 

Quote

sudo apt install git libc6-dev-i386 gcc-multilib ia32-libs      #installs dependent packages and git for downloading the source code
mkdir git && cd git                                                                               #creates a folder called "git" and enters that folder. keeping your home directory tidy
git clone https://gitlab.com/torkel104/libstrangle                  #downloads the contents of the gitlab repository into a directory with the same name
cd libstrange                                                                                        #gets into the directory we just cloned
make                                                                                                     #compiles the code
sudo make install                                                                               #installs libstrangle

 

 

 

 

Lutris
 

Spoiler

 


As for Lutris, the uninitiated may ask: what is Lutris? Lutris is a game manager that tries to be your all-in-one game launcher in Linux. Unlike PlayOnLinux, they aren't just a dedicated Wine manager, but they do that along with many other things. Why should you use Lutris over PlayOnLinux? To rip-off an AMD marketing slogan: "PlayOnLinux was great, but so was coal." One of the project goals of Lutris is to aid game preservation by making it as easy as possible to just install any game from any system. For most games, the process literally is as simple as the click of a button after Lutris is installed. On top of that, it offers many useful features such as Proton-like Wine builds, built-in DXVK support, built-in forced windowed mode, built-in support for resolution switching, and so much more! Lutris provides instructions for installation as well as for DXVK, so I'll be skipping over those and get into how you can install games.

 

The first thing you'll want to do is search for the game you want to install on Lutris's Games page. Chances are the game you're trying to install is on there, and if it is, simply go to the game's page and click "Install" on whichever version you want to install. That will open Lutris and from there you just need to follow the installer.

 

But what if the game you want to install isn't on Lutris yet? Assuming you're trying to install a Windows game in Wine:

  1. Open Lutris and click "Wine" under the "Runners" tab on the left.
  2. Click the "+" icon on the top bar and select "Add Game..."
  3. Type in the name of your game in the "Game info" tab and make sure Runner is set to "Wine (Runs Windows games)".
  4. Under "Game options" click the "Browse..." button for Wine prefix.
  5. Navigate to where you would like to install your game (Typically "/home/<your_username>/Games/").
  6. Create a folder with the name of the game, enter it, and click "OK".
  7. In "Runner options" we can set a bunch of options like enabling DXVK, selecting which Wine version to use (typically the latest tkg-protonified is fine), enabling Esync (usually desirable unless you see stuttering), forced windowed mode, forced AA, and a few other advanced features.
  8. In "System options" we can set options for changing screen resolution for games, as well as restoring our native resolution after the game is done running. It's also where we can use libstrangle under Command prefix.
  9. Once you're satisfied, hit save.
  10. Click the game icon you've just created, and then click "Wine configuration" on the right panel.
  11. Set the Windows version to whatever you feel is appropriate for the game, then hit "OK".
  12. Click "Run EXE inside wine prefix" on the right panel.
  13. Navigate to where your game's setup EXE is (be it your CD/DVD Drive or somewhere in your hard drive), and select it.
  14. Go through the installation process as normal and apply any no-CD cracks if you wish.
  15. Right click the game icon in Lutris and select "Configure".
  16. Now under "Game options", click "Browse..." for Executable.
  17. Navigate to your game installation directory (Should be "/home/<your_username>/Games/<game_name>/drive_c/<windows_install_path>/") and select your game's launch exe.
  18. Hit save.
  19. Finally, double click the game icon or click "Play" in the right panel, and your game should launch.

 

 

 

 

Forced Anti-aliasing
 

Spoiler

 

I'll admit I'm not the most experienced with this, but besides Lutris's forced AA option, you also have the ability to force both AA and Anisotropic Filtering in nvidia-settings. In both cases you want to make sure you're "Overriding Application Settings".

 

 

 

Old games and resolution

 

Spoiler

My personally preferred method for having a clean looking game is to play the game in Lutris's windowed mode. If this is not an option for you, you can have Lutris change your desktop resolution to something the game natively supports and toggle the option to "Restore resolution on game exit". For games not heavily affected by scaling, leaving everything as default should work fine.

 

 

DXVK and D9VK

 

Spoiler

 

I've used the term DXVK but not really explained what it means. Basically DXVK is a project that aims to replace Wine's built-in DirectX 10/11 to OpenGL translation layer with an DirectX 10/11 to Vulkan translation layer. The big difference is that Vulkan is that, in short, Vulkan can offer a much faster translation, which results in enhanced performance over stock Wine. DXVK is mostly for modern games, since it only works with DirectX 10 and 11. Using it in Lutris is as simple as enabling it in "Runner options".

 

D9VK is a fork of DXVK, which implements DirectX 9 support onto DXVK's codebase. The project is still in early development, so there can be a few visual glitches, but early results show a substantial improvement over Wine's DX9->OGL translation layer. The creator is hoping to eventually merge the project with DXVK once it's mature enough. Using it in Lutris is slightly more manual at the moment.

  1. Download the latest release zip from the releases page on the project's GitHub.
  2. Open the downloaded zip and navigate inside the "dxvk-release" folder.
  3. Extract the "x32" and "x64" folders into "/home/<your_username>/.local/share/lutris/runtime/dxvk/d9vk_(release_version)/".  If you don't see a .local folder, that's because folders with a dot prefix are hidden by default. Either enable showing hidden folders, or manually type it in the address bar. You can name the d9vk folder whatever you want, so long as it doesn't conflict with the DXVK folders.
  4. Back in Lutris, open your game configuration and go to "Runner options".
  5. Enable DXVK and in DXVK version type in the name of your d9vk folder. Be mindful of casing, as Linux is case sensitive.
  6. Hit save, and you should be good to go. You'll need to repeat this process with new releases of D9VK.

There's not really any project like this for older APIs, as it's more or less accepted that those games should run fast enough on modern systems.

 

 

 

 

 

Phew. I think that's everything so far. Sorry again for the extra long post.

Edited by cgalves (see edit history)

Share this post


Link to post

Okay, thanks for the advice so far, I'll test it when I get a chance.  Question, for D9VK, is the usual method of forcing AA still the same (setting it in the Nvidia control panel + adding the registry setting to the WINE install)?

Share this post


Link to post
17 hours ago, Ross Scott said:

Okay, thanks for the advice so far, I'll test it when I get a chance.  Question, for D9VK, is the usual method of forcing AA still the same (setting it in the Nvidia control panel + adding the registry setting to the WINE install)?

Short answer: yes.

 

Long answer: D9VK operates similarly to what's already built into Wine, by translated D3D9 calls into Vulkan calls. It doesn't require anything special for setup beyond what I delineated in my previous post. If it doesn't take forced AA, it could likely be a bug as it's still in its early days of development. Assuming you're using Lutris, you don't need to mess with the registry, as you can simply use the Anti-Aliasing option under "Runner options".

Share this post


Link to post
15 hours ago, cgalves said:

Short answer: yes.

 

Long answer: D9VK operates similarly to what's already built into Wine, by translated D3D9 calls into Vulkan calls. It doesn't require anything special for setup beyond what I delineated in my previous post. If it doesn't take forced AA, it could likely be a bug as it's still in its early days of development. Assuming you're using Lutris, you don't need to mess with the registry, as you can simply use the Anti-Aliasing option under "Runner options".

Maybe it's different on Linux, but on Windows, forcing AA has always been a crapshoot on DX9 and above.  If you know of any games where it can be forced (in other words, no in-game option to turn on AA, but it does work when forced through drivers), let me know, that could be good to confirm it's working.

Share this post


Link to post
9 minutes ago, Ross Scott said:

Maybe it's different on Linux, but on Windows, forcing AA has always been a crapshoot on DX9 and above.  If you know of any games where it can be forced (in other words, no in-game option to turn on AA, but it does work when forced through drivers), let me know, that could be good to confirm it's working.

I have a pretty big game library, so it's kind of hard for me to remember what games have what settings. Any outstanding examples you want me to test?

Share this post


Link to post
14 minutes ago, cgalves said:

I have a pretty big game library, so it's kind of hard for me to remember what games have what settings. Any outstanding examples you want me to test?

Really just anything that runs on D9VK.  Well known games might be best since they're more likely to have been tested.  It's not essential that you find one, it would just be nice to have a point of reference to ensure it works.

 

EDIT:

If you have a game that has in-game options for AA, but that's disabled, however driver-forced AA is on, that can work too (as long as it's in override mode).

Edited by Ross Scott (see edit history)

Share this post


Link to post
3 minutes ago, Ross Scott said:

Really just anything that runs on D9VK.  Well known games might be best since they're more likely to have been tested.  It's not essential that you find one, it would just be nice to have a point of reference to ensure it works.

 

EDIT:

If you have a game that has in-game options for AA, but that's disabled, however driver-forced AA is on, that can work too (as long as it's in override mode).

D9VK has mostly focused on Shader Models 2 and 3, IIRC. Newer games (more likely to have built-in AA) are more likely to work better on it, ATM. SM 1 is next in line, though. I can test a variety of games, but can add a known odd-ball or two if you can name them.

Share this post


Link to post

Unreal engine games are pretty common.  Maybe something like one of the Mass Effect games (or Unreal Tournament 3) would be a good test.

Share this post


Link to post
6 hours ago, Ross Scott said:

Unreal engine games are pretty common.  Maybe something like one of the Mass Effect games (or Unreal Tournament 3) would be a good test.

Alright. I'll run some tests and tag you in a post whenever I've got something.

Share this post


Link to post

I've done some tests

  • I can confirm that libstrangle indeed unlocks the adaptive fps. Seeing as the compilation instructions provided by cgalves are very straightforward I absolutely second that solution. I'm thinking if there is an elegant way to invoke strangle from Lutris though to easily "attach" it to games...
  • [DX 7] using force AA option of Lutris with Nocturne (in DX 7 mode) freezes the game
  • [DX 7] using dgvoodoo + DXVK allows forcing of antialising and anisotropic filtering in Nocturne and Messiah
  • [DX 7] running Messiah with the Lutris AA options has no effect
  • [DX 7] running Messiah and Nocturne with the enable FXAA option in the NVidia settings had no effect
  • [DX 9] Regarding D9VK: The developer states this: "Please do not use wine's d3d9x or d3dcompiler with d9vk. They make invalid API calls and generate bad shaders. I cannot stress this enough." This means that in the wine prefix used with D9VK the following command should be ran 
    Quote

    winetricks -q d3dcompiler_43 d3dx9

    This also means that it's better to make a separate Wine prefix for the usage of D9VK to avoid switching between the native and built in versions of these components, or worse still forget to switch and get bad results.
    Although I'm not entirely sure if the way Lutris invokes DXVK actually takes care of this or not?

Edited by qptain Nemo (see edit history)

Share this post


Link to post

@Ross Scott Apologies for the wait, but I tried to be very extensive with my testing. Sorry in advance for the long post.

 

@qptain Nemo Thanks for your post, it adds quite a bit to what I'm about to detail in this. I'm interested in testing the dgvoodoo method as I tested something similar, which you can see in the "Other Games" section. Can you post instructions on how to set it up in Lutris?

 

With the intro out of the way, let's get onto the meat and potatoes.

 

Testing System and Methodology

Spoiler

I'll be splitting this post into several alphabetically sorted sections - one for each game I tested - complete with screenshots for every variation I tested. The machine used for testing was my daily driver desktop, running Arch Linux with the Linux kernel 5.1.2 with the VFIO patches from the AUR applied. My CPU is a Ryzen 7 1700 with a stable overclock of 3.9GHz. My GPU is an Nvidia GTX 970 running on the 430.14 drivers. I've got 32GB of DDR4 clocked at 2933MHz.

The games were ran inside two Lutris Wine prefixes (one 32bit, the other 64bit), running off of a LVM partition, formatted to ext4, on a 7200RPM drive. Throughout my testing I toggled between Wine's Open GL translation layer (from here on referred to as WOGL), and D9VK 0.11 in the same Lutris Wine prefix and noted no adverse effects. Unless otherwise noted, the Wine version used was "tkg-protonified-4.6-x86_64".

 

To easily install the dependencies for D9VK (as pointed out by @qptain Nemo) in Lutris do the following:

  1. On the right side of the Lutris window, click "Winetricks"
  2. Once the Winetricks window appears, choose "Select the default Wine prefix" and hit "OK"
  3. Choose "Install a Windows DLL or component" and hit "OK"
  4. Tick the boxes for "d3dcompiler_43" and "d3dx9" and hit "OK"
  5. Let it run until you're presented with the previous window again. Then simply hit "Cancel" until you've exited Winetricks.

Assuming you've done what I detailed in my last post, you should now have a working D9VK installation. You can use this method for installing any other components in the future.

 

For forcing Anti-Aliasing. I started with Lutris's drop down menu and tested at 16. If that gave me any issues, I would try 8 and then 4. If I still had issues, I would try setting the menu to 0 and using the Override feature of Nvidia's driver at 16x (4xSS, 4xMS), then at 8x (8xMS), 4x (4xMS), and finally FXAA.

I stuck purely to DX9 era games, as the purpose was to test D9VK's compatibility and ability for force AA.  All games were tested at max settings, with AA turned off where possible. If the game had no advanced settings, I would set it all to minimum settings. The resolution was just under 1080p (1850x1040) in a Wine virtual desktop, as that made it easier to take screenshots without any cropping. Exceptions are games that don't support modern resolutions without modding, in which case I ran them at whatever the highest resolution was.

I mostly stuck with using the 64bit prefix. If that failed, I tried the 32bit.

I did not bother to disable V-Sync in games which had V-Sync forced on.

 

Feel free to pixel-peep, since that's the point in this case.

 

Games Tested

Spoiler

 

Alpha Protocol

Spoiler

 

This was a pretty straight forward game. It installed easily from the DVD with no extra steps required. The game ran well both with WOGL and D9VK. Although it's hard to compare performance, since the game has forced v-sync, I'd say D9VK felt smoother with slightly less hitching. The game was still very playable in WOGL.

I noticed no missing visual features here between D9VK and WOGL. Unfortunately, I wasn't able to force AA in the game with any of the methods.

AapKV2d.jpg

 

Brothers in Arms: Hell's Highway

Spoiler

 

Also a fairly straight-forward install. The game was a little sluggish with WOGL, but absolutely soared with D9VK with anywhere between 2x to 3x the performance of WOGL. Looking at the screenshots, you'll notice there's a few missing lighting features, and post-processing effects in D9VK vs WOGL. Given the performance delta, I'd probably still stick with D9VK.

Again, no dice on forced AA.

TkOoyey.jpg

 

FlatOut 2

Spoiler

 

This is an odd one. The install process with the GOG installer was flawless (they do ship this game for Linux with a Wine wrapper after all). The performance was great on both WOGL and D9VK. The visual difference between the two is absolutely massive, with a lot of the lighting effects missing in D9VK. Vsync also appears broken under D9VK in this title.

This time forced AA did something. Forcing AA with D9VK can occasionally cause a very pixelated effect, the kind you'd see when adding a sharpening filter and cranking it all the way up. It's weird, and I can't seem to get it to trigger consistently. I tried swapping AA samples, switching between Override and Enhance on the Nvidia panel, but no option did this consistently. Very bizarre.

Forced AA on WOGL, cleans up the aliasing quite nicely!

U4gfLbI.jpg

 

Fuel

Spoiler

 

I had some trouble with this one, but it could be due to my copy being a little "strange". It's a physical copy that was distributed by a local PC magazine after GFWL was shut down, with its DRM partially removed. Using the game's .exe gives a message complaining about how I need to use the "Games for Windows Launcher". None of the .exes in the "Games for Windows" folder in the prefix's "C: drive" actually work. The solution turned out to be to run the Autorun.exe from the CD. Not many issues after that.

As for AA, forced AA completely breaks the visuals in WOGL. WOGL in general has some visual glitching, with a weird "draw in" to the lighting, where anything more than 5 feet in front of you will render way darker. None of the AA, seems to have an effect beyond that, including the AA in the game.

Considering the visual issue, not only did D9VK look better, but it played way better. The FPS delta was close to 100FPS most of the time.

sTJminU.jpg

 

Gothic 3

Spoiler

 

Straight forward install process. The game just crashes after a black screen with D9VK, which is a shame because the performance with WOGL isn't the best when in towns. That aside, forcing AA breaks the visuals (though it does reduce aliasing, if you look closely).

8YzrfvU.jpg

 

Hitman: Blood Money

Spoiler

 

Install just worked. Forcing AA in D9VK does nothing, and it breaks the visuals in WOGL. D9VK can't play back the FMVs for the cutscenes and intro, and can't render some of the post processing. I was hitting my 75FPS V-Sync with both options, so WOGL might be the way to go here.

As a small correction, the AA in WOGL is 16x forced, but the AA in D9VK is with the in game options.

4BY7PBk.jpg

 

Mass Effect

Spoiler

 

This was a good one to test. For a while the whole trilogy has ran quite well under Wine, and modding support is about on par with Windows. How smoothly the installation goes will largely depend on your install method. If you're installing from Steam or DVD, it should go very smoothly. If you're using Origin however, it can be a frustrating experience.

In my personal experience, I had to restart Origin several times before the game would actually install, getting all sorts of errors in the process. After the game was done downloading, the install would crash on installing DirectX. A look at the Lutris wiki page for Origin revealed the solution. Now the game would finally run, but Origin wasn't done being a pain in my ass yet. Origin doesn't really like being run in a Wine virtual desktop, and doing so will actually place the client in the foreground when a game is running. The two solutions for this are to close all Origin windows before the game launches, or to have Lutris use the game's shortcut to launch the game.

Mass Effect presents another problem: what do you do when your game has a separate exe for game settings and doesn't have a unified launcher to access both the config and game exes? My preferred solution with Lutris was to use the "Run EXE inside wine prefix" option and running the settings exe that way.

With that out of the way, let's talk about D9VK and WOGL. Both of the ran the game very well, but D9VK fails to render the FMVs (intro logos, small scenes in the opening cutscene, loading screens). WOGL stutters a little bit more under loading than D9VK does. Forcing AA in WOGL creates this red overlay, while in D9VK there is no effect. In either case, no actual anti-aliasing seems to be present.

wH7h9dx.jpg

 

Rise of Nations: Rise of Legends

Spoiler

 

This game was a straight forward install. D9VK produced a black screen menu. WOGL ran the game very well, and forcing AA on it cleaned up the image quite nicely.

JNQ1lpf.jpg

 

Splinter Cell: Chaos Theory

Spoiler

 

Another game the performs excellently with both D9VK and WOGL, easily hitting the 100FPS cap. This game is rather interesting since it lets you select between Shader Model 1.1 and Anti-Aliasing or Shader Model 3.0 and advanced effects. SM1.1 produces an unplayable experience in D9VK, with basically no lighting available. In WOGL, it works fine until you try to force Anti-Aliasing, which results in an overly dark image. SM3.0 works well on both, but forcing AA does nothing in D9VK, and it makes certain objects appear ethereal in WOGL.

wGvZsOa.jpg

 

Unreal Tournament 3

Spoiler

 

I had a really hard time capturing the aliasing in this game on a screenshot, largely due to the abundance of overly dark maps. I ultimately set the in-game render resolution to the lowest, along with the texture quality, hoping any AA would still show up somewhat. Unfortunately, neither D9VK nor WOGL showed any AA. At least they both managed to hit the 62FPS cap.

yMwHnEE.jpg

 

Warhammer 40,000: Dawn of War

Spoiler

 

Yet another game that was no fuss to install, and ran excellently to boot. D9VK only managed to render a black screen on the main menu, so I tested it with WOGL and saw a very nice AA effect both in the menu and in game. There was no visible glitching anywhere across the map.

ejuQb2Z.jpg

 

The Witcher

Spoiler

 

Using the GOG installer threw an error at the end of the install, but I had no issues when running the game. Both D9VK and WOGL ran the game well, but D9VK had a very obvious performance advantage. In combat WOGL was prone to micro-stutter while D9VK was smooth throughout. I saw no visual difference between WOGL and D9VK in the game's graphics, however all 2D elements of the game appeared way too bright (main menu included). Forcing AA made no difference in D9VK, but did smooth out WOGL quite a bit. Strangely, forced AA in WOGL seems to make the image quite a bit darker and I'm not sure why. Further testing may be required here.

GNLhdk0.jpg

 

Other games

Spoiler

 

Here are some other games I tested but don't deserve their own entry for a few reasons.

  • Shaun White Snowboarding
    • Couldn't get it to actually launch under any circumstance. I have a feeling I've ran it in Wine in the past, and there's a video on YouTube of a Spanish guy running it (my Spanish is too shitty to ask him for technical details on how he got it to run, though). Then again, my copy could just be weird (similar circumstances to Fuel.
  • Red Faction Guerrilla
    • Runs great with DXVK in DX11 mode. Setting it to DX9 and trying it with D9VK is more of a novelty. Runs well, but no AA.
  • F.E.A.R.
    • Running it with D9VK just produces a black screen on the FMV menus. Runs well enough with D9VK. So long as you don't max it out, you should be at 60FPS in all but the most extreme of firefights.
  • S.T.A.L.K.E.R. Clear Sky
    • Similar issue to F.E.A.R.. The FMV menu just fails to render in D9VK.
  • Prince of Persia: Warrior Within
    • Same as above.
  • Star Wars: Republic Commando
    • Probably one of the more interesting games I tested. Despite being a game from 2005 and requiring DirectX 9.0c, the game renders all visuals with DirectX 8 (!). Game runs quite well with WOGL, after you remove or rename the .avi files in the "Game Data/Movies" folder. Otherwise, you're going to hang on a black screen. There might be another way around it, but this is what worked for me. The game also only ran on a 32bit prefix.
    • I did manage to get the game running under D9VK, by using a wrapper for D3D8 called "d3d8to9". Just download the .dll and put it wherever the game's exe is.  Then in the Lutris launcher, go to "DLL overrides" and click add. Under key put "d3d8", and under value put "native, builtin". Sadly, in this case I only got a black screen on the main menu.
  • The Chronicles of Riddick: Escape from Butcher Bay + Assault on Dark Athena
    • Turns out this game runs in OpenGL natively. Performance should be about 1:1 with Windows. Forcing AA is a no-go.
  • Tomb Raider: The Angel of Darkness
    • Only runs in a 32bit prefix. Running it with D9VK crashes the game when you try to launch it. In WOGL, I couldn't get the FMVs (intro, cutscenes) to work. There might be a fix, but I couldn't find one. The game runs quite well. Forcing AA breaks the game's menu, doesn't noticeably reduce aliasing.
  • RollerCoaster Tycoon 3: Platinum
    • The game runs very well. D9VK never lets you get into the menu. Forcing AA in WOGL breaks the visuals. The music doesn't work, but according to one guy on WineHQ (under How To), it works if you convert it to mp3 (I did not test this).

 

 

Link for all the screenshots in full resolution here.

 

 

Conclusions

Spoiler

 

Alright, time for the big moment of all of these tests: the conclusion! I'd say this is all probably a bit too early to be set in stone, but they're good starting points at least.

  1. D9VK seems to have no support for forced Anti-Aliasing at the present moment. It may be a good idea to open up a feature request on the D9VK GitHub if we can confirm this is the case. There are a lot of DX9 games with no support for Anti-Aliasing, and such a feature would be very helpful for game preservation.
  2. D9VK seems to be able to support Anti-Aliasing if it's requested by the game directly. I can't say it works across the board, but if it's not working right now it probably will work soon.
  3. D9VK seems to have an immense performance boost over WOGL. In games where the performance isn't locked the difference could be as much as 100FPS.
  4. D9VK seems to have a lot of issues displaying FMV. This and other compatibility issues make it not ready for prime-time yet, but it's definitely worth playing around with. If DXVK is anything to go by, expect this to change dramatically a year from now.
  5. WOGL support for forced AA seems to be inconsistent, and can often result in rendering problems. There might be ways around this, but I genuinely tried everything I could think of.
  6. Forced FXAA in nvidia-settings never seems to do anything. Maybe someone at Nvidia hates FXAA with a passion (can't blame them) but they just couldn't remove the button. Who knows.
  7. There doesn't seem to be any noticeable difference between AA selected in Lutris and AA selected in nvidia-settings. Settings seem to perfectly match on either end, and they both seem to have the same compatibility. Considering Nvidia's setting can apply to desktop applications, I'd say leave that alone and stick to Lutris.
  8. Games from 2008 or older should probably be played in a 32bit prefix. I only ran into this with two games I tested, but some game straight up refuse to launch otherwise.
  9. Looking over a Lutris install script, or a game's page on WineHQ can be extremely helpful to getting a game to work. You'll probably find that one DLL or component that you need in order for the game to run. Failing that, there's always a search engine, I suppose.

I'm not sure where to go from here, as I more or less exhausted my knowledge of forcing AA. Perhaps we could try enlisting the help of folks over on r/linux_gaming and r/wine_gaming? Someone there might have some useful ideas.

 

 

Sorry for yet another massively long thread. Hopefully all this testing can be useful and we can figure out where to go from here.

@Ross Scott , please let me know if there's anything here you'd like a detailed guide on.

Edited by cgalves (see edit history)

Share this post


Link to post
On 5/25/2019 at 1:22 AM, cgalves said:

 

@qptain Nemo Thanks for your post, it adds quite a bit to what I'm about to detail in this. I'm interested in testing the dgvoodoo method as I tested something similar, which you can see in the "Other Games" section. Can you post instructions on how to set it up in Lutris?

dgvoodoo is one of those DLL overrides solutions so to utilize it just extract the contents of the installer archive into the game directory of each game, although without any directory hierarchy, just dumping all files directly together with the game executable. It's going to be these files: dgVoodooCpl.exe, dgVoodoo.conf, D3DImm.dll, DDraw.dll, D3D8.dll, D3D9.dll (32 bit or 64 bit version, matching the game). Then of course you need to set up DLL overrides for D3DImm, DDraw, D3D8 and D3D9 to "native, builtin" either in the Lutris config for the game or in the prefix itself. Then just run dgVoodooCpl.exe and/or edit dgVoodoo.conf to set the settings as you want them and you're good to go.

And don't forget to enable DXVK. You'd want to use DXVK with it rather than WOGL.

Edited by qptain Nemo (see edit history)

Share this post


Link to post

Btw, Ross, I want to draw your attention to something cgalves mentions in passing:

Quote

Unless otherwise noted, the Wine version used was "tkg-protonified-4.6-x86_64".

here's the description of that build (from here)

Quote

This build uses the fullscreen patch from Proton to run older games at the native desktop resolution (For example, games running only at 800x600 will be stretched to the native resolution, without deforming the aspect ratio). On supported setups, this also disable the desktop compositor (Kwin, Mutter, Compton and possibly other compositors are compatible)

This, I believe, addresses one of your concerns.

Share this post


Link to post

 

cgalves: Thanks a bunch for your testing, you may have saved me a bunch of time.   I have a few questions, based on your results.

 

 

•Since AA is a cornerstone of what I'll be testing for, unless the game I'm testing is DX9 or higher AND supports in-game AA options, does it make any sense for me to even use D9VK?  Obviously it has its uses, but if it can't force AA, that makes it less relevant for what I'm testing for except for a few games in my testing.

 

•What's the advantage to using Lutris over PlayonLinux for DX5 - DX8 games?  Also, many of the games I'm testing are a little less common, I tried typing in a dozen titles of games I was going to test that didn't even have entries in the Lutris database.

 

•Maybe qptain Nemo could assist with this also.  Are there any games that give better results with dgvoodoo under DKVK?  I think you use it to tell it to render the game under DX11, but whether it works with the specific game is another question.

 

 

RaTcHeT302: Regarding the fence test, that has only 3 solutions:

 

•Mixed mode MSAA / SSAA (called TSAA by Nvidia, Adaptive AA by AMD, but they may have changed the naming).  This uses MSAA for polygon edges and SSAA for alpha textures.  Won't clear up all aliasing (like some shader effects), but will clear up the fence (when it works).  This technique often doesn't work on most modern games.

•SSAA costly in performance, but gives the cleanest picture (when it works)

•Downsampling.  Similar to SSAA and can be even more costly, but has a much higher compatibility (assuming the game isn't resolution capped)

 

I'll talk a little about this when I make the video.

Share this post


Link to post

@qptain Nemo Thank you for the instructions on dgvoodoo, I'll have to try it out whenever I get the chance. In regards to the patch in question, I'm not fully sure if it does integer scale or just proportional stretch to full screen. Ross may correct me if I'm wrong, but I believe he was looking for the former, since it provides a sharper look. More info here.

 

@RaTcHeT302 I wasn't aware of that issue on UE3. Is there a reliable way of telling which games run on which engine? I'd like to cross-compare the games I tested with what engine to better see where the issues I encountered lie.

I had zero luck with FXAA, but I agree that a more bespoke solution would be nice. Unless we manage to make a fund for some programmer to design something to our exact criteria, our best bet is to probably make a feature request on the D9VK GitHub for some option to more reliably add AA in the middle of the rendering pipeline, rather than some endpoint defined by Lutris/Nvidia.

 

@Ross Scott You're welcome! I'm glad I could be of assistance. As for your questions...

It's hard to say, since these projects evolve so quickly. If you were to release the video tomorrow, I'd say probably not worth using in most games. If you were to release it 6 months from now, then the lack of forced AA might well have been solved by then. I'd say that at a minimum it deserves a mention, since (as my testing shows) the performance boost can be huge, leading to games that might've not been playable before being playable now.

The advantages for Lutris aren't just necessarily on DXVK/D9VK being a lot easier to use. The whole interface feels newer and more modern, complete with the way you interact with Wine being done through drop-down menus, rather than messing with winecfg or wine registry. Then there's the inclusion of the Protonified Wine builds, which use patches made by Valve to improve game compatibility and performance across the board. The one click game installs are also a lot better than what PoL had, with tons more games available since the scripts are a lot easier to make. Lutris is also under more active development so new features get added fairly frequently (they recently added GOG integration!). The only downside I can think about Lutris vs PoL is that PoL had a nicer method for making new Wine prefixes, while Lutris's is a little more convoluted. I'd still say the other benefits outweigh that drawback, though.

I hadn't really heard of dgvoodoo until this thread, but from their description, it seems like they're doing to DirectX 1 through 8.1 and Glide, what WOGL, D9VK and DXVK do to DirectX. Basically, taking instructions that might not have support on modern GPUs/Windows drivers, and translating them into modern DX11 instructions. I've yet to try it, but it's hard to say whether or not we'd have better luck with forced AA down that route. At that point you're taking code and pushing it through two translation layers, so all sorts of weird things could happen. Or it could all work perfectly with zero issues. I'll figure it out soon enough, I suppose.

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in the community.

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


×
×
  • Create New...

This website uses cookies, as do most websites since the 90s. By using this site, you consent to cookies. We have to say this or we get in trouble. Learn more.