Jump to content

Linux gaming technical discussion

Recommended Posts

Posted (edited)

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

Share this post


Link to post

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.

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
Posted (edited)

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

Share this post


Link to post
Posted (edited)

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

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
Posted (edited)

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

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
Posted (edited)
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

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
Posted (edited)

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

Share this post


Link to post
Posted (edited)

@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

Share this post


Link to post
Posted (edited)
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

Share this post


Link to post
Posted (edited)

Some Unreal Engine 3 games, if not most, I think straight up refuse to work with forced AA. Most games with a forward shading renderer should work, but for deferred shading rendering games, there are transparency issues, and I think you can only do AA, in post process (crappy AA, like FXAA).

 

All DX8 games seem to work instantly (most of them are probably using forward shading), but DX9 and up, is always a bit of a gamble for me, I can't even remember if I got any games to even work with it, I don't think I ever managed to force AA in a DX10 game.

 

We need a custom anti-aliasing solution, for games with deferred shading, like TAA or MSAA. FXAA is just too crap. Most games might be doing AA in post processing instead, which is what might stop games from working properly, with forced AA.

 

You can always play at higher resolutions, but I never get crystal clear, zaggie free pictures, you always need a basic level of anti-aliasing, even at very high resolutions.

 

I hate the jittering effect some AA techniques have, like if you look at a fence, and if you move the camera around, it looks horrible, or if you look at a wall the wrong way, it starts to shimmer and it drives me insane.

 

I don't think TAA or MSAA solve the flickering \ jitter \ shimmer issue though, but if anyone knows if any better techniques have been invented, for some proper post process AA, post them up. It's great if we can get AA working on everything, but if it's bad AA, we might as well not have any in the first place, I would rather play at a higher resolution instead, until the problem goes away.

 

Some games also have a mix of forward + deferred, or they might be using forward+. I think older games are probably forward, so it should be easier to force AA on those.

 

I completely forgot about clustered shading, and whatever weird in between techniques exist, I have no

idea what those are like.

 

I don't know if this ever went anywhere. I have no memory of it. I remember stumbling on it years ago though.

http://advances.realtimerendering.com/s2016/AGAA_UE4_SG2016_6.pdf

 

Sorry if I probably said a whole lot of nothing, but I posted what I sorta knew already (even if it's kinda basic).

Edited by RaTcHeT302

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

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

×

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.