You can sign up to get a daily email of our articles, see the Mailing List page.

Tweaking Performance in XCOM 2

By - | Views: 39,939
When Firaxis chose to use Unreal Engine to power their latest title, XCOM 2, they chose to stay on the older version 3 of the engine instead of the latest, and fully Linux-compatible, version 4. It seems that when they brought XCOM: Enemy Unknown to the masses, they'd hacked that version 3 engine so much, it was practically an entirely new fork. Porting all their customisations to the newer engine would have been daunting, so they decided to stick with that customised engine for XCOM2.

However, this has brought some hangovers from that earlier version with it, hangovers that Feral left in place during the porting. In particular, many titles using UE3 suffer from an extremely low default memory allocation. In fact, the default PoolSize is set at just 10Mb, and I suspect that Feral have to leave it that way to ensure maximum compatibility. In fact, besides Poolsize, you can tweak quite a few settings in your game's ini file, but as usual, it appears that PoolSize is the primary factor in smoothing out the performance. Original credit to this tester for Unreal Engine 3 here from 2013, regarding the original XCOM game.

Having tried these changes myself, I can report that performance leapt from "frustrating and shoddy" to "entirely playable". There is still a little stutter evident in the loading transitions while in the dropship, but in-game performance is definitely a huge improvement. I'd go as far as to use the phrase "buttery smooth". No more slide-show explosions, or missed action-shots.

Here's what you can do.

Important Note: We suggest reverting these changes for any patches that come, as it could affect them. Always revert changes like this when a patch is released.

Before making any changes, you might want to make a copy of your file, then you'll need to open it for editing:

cd ~/.local/share/feral-interactive/XCOM2/VFS/Local/my\ games/XCOM2/XComGame/Config
cp XComEngine.ini XComEngine.ini.original
gedit XComEngine.ini


And then find the PoolSize=10 line and change it to something more reasonable, such as 256.

If you just want the quick fix, you can skip this section, however as the more detailed article points out, you might want to change the following lines too. I did, but it's not entirely clear how much they contribute. Feel free to experiment!


MipFadeInSpeed0=0
MipFadeOutSpeed0=0
MipFadeInSpeed1=0
MipFadeOutSpeed1=0
MinSmoothedFrameRate=30
MaxSmoothedFrameRate=400
bInitializeShadersOnDemand=True
DisableATITextureFilterOptimizationChecks=False
UseMinimalNVIDIADriverShaderOptimization=False
PoolSize=256 (or VideoRAM/4, up to 768 max)
bAllowMultiThreadedShaderCompile=True
ThreadedShaderCompileThreshold=4 (match your CPU cores, so an i3=2, while i5 or i7=4)
OnlyStreamInTextures=True


Having made the changes, the first thing that XCOM 2 tries to do is set it all back to default values again, so you'll need to mark that file read-only:


chattr +i XComEngine.ini


(actually, you might want to make that change with sudo so that root owns the file, preventing XCOM 2 from changing it back - some users reported that XCOM 2 does indeed "undo" the read-only flag!)

And that should be the game fixed up for immediate play!

As always, there are a lot of systems out there that will handle these changes differently, so your mileage may vary. Remember to mark the file read-only before playing and if you still don't see a change, try the "reset to defaults" trick mentioned in the original source article.

For reference, my system specs are:

O/S: Ubuntu 14.04 64bit
GPU: Nvidia GTX670, 2Gb
Chip: Intel i7 2600k
RAM: 16Gb

I used the 256Mb PoolSize as shown above, but could have gone 512Mb, as the original source article suggested "GPU memory divided by four". I used the ShaderThreshold 4 as shown above.

If you don't know your video memory, you have two options. If you're using Nvidia, you can simply run the Nvidia XServer Settings GUI (and I think Catalyst drivers might have a similar option actually). Otherwise, you can run:


dmesg | grep VRAM


That will hopefully show you how much RAM your computer detected on start up.

Good luck, Commander! Article taken from GamingOnLinux.com.
0 Likes
We do often include affiliate links to earn us some pennies. We are currently affiliated with GOG and Humble Store. See more here.
About the author -
author picture
I'm a Scottish Ubuntu user since 2006 and an Ubuntu-only gamer since 2013. I used to contribute to GOL's Funding Crowd articles, but now contribute the odd article directly, most recently the Play It Now series.

I also dabble a bit in Python, I do Internet Security for a living and finally, I'm a big fan of Neil Degrasse Tyson. And not just because he has a cool first name.
See more from me
The comments on this article are closed.
30 comments
Page: «2/3»
  Go to:

QuanTuM 9 Feb, 2016
I'll have another hint, if you don't mind to often change graphics settings:
If you are in your base you can actually get Diashow-Com to an acceptable behavior if you set the shadows to "Directional Only", other settings like Texture Detail and Filtering have way less impact.
At least in my case it helps out a lot, it's just a bit annoying to turn the shadows back on on a mission and restart the game to remove stuttering...

(Intel i5, Nvidia GTX 960)
Xpander 9 Feb, 2016
Quoting: TheBoss@xpander, you're using a beta though arent you frome what I saw in the IRC?

ohh yes...that might explain
Devlin 9 Feb, 2016
Wow!!! A complete different game after applying the modifications, now it's perfectly playable. I wonder why the default values behave so bad.

Thank you for the tweaks!!
melkemind 10 Feb, 2016
Downloading now. We will be in touch, Commander.
dubigrasu 10 Feb, 2016
The PoolSize is a proven tweak for UE3 titles, but why would I set
MaxSmoothedFrameRate to 400?
DePingus 10 Feb, 2016
Just changing the poolsize to 512 helped quite a bit for me. I was maxing at about 30 FPS, now I'm maxing at like 42 FPS with low/med settings (using the Steam FPS counter).

Running on Antergos / FX8320 / R9270 / Catalyst15.12
Tuxee 10 Feb, 2016
WTF? Changed XComEngine.ini to bigger pool size and ThreadedShaderCompileThreshold to 2. chown'ed the file to root:root and gave it a 0755. Guess what? It got both reowned by the "me" and chmod'ed to 0770 again. How can that be? Any suggestions?
Anyway, contrary to the article my settings were not reverted - pool size is still 512 and the compile threshold still 2.
scaine 10 Feb, 2016
View PC info
  • Contributing Editor
  • Mega Supporter
Quoting: TuxeeWTF? Changed XComEngine.ini to bigger pool size and ThreadedShaderCompileThreshold to 2. chown'ed the file to root:root and gave it a 0755. Guess what? It got both reowned by the "me" and chmod'ed to 0770 again. How can that be? Any suggestions?
Anyway, contrary to the article my settings were not reverted - pool size is still 512 and the compile threshold still 2.

The only way that should be possible is if you're running Steam as root, which would (obviously) be a terrible idea. Beyond that possibility, you have a serious flaw on your box if you're seeing root-owned files being chowned by non-root processes...

Did the game improve for you though? That's the most important thing. :D
scaine 10 Feb, 2016
View PC info
  • Contributing Editor
  • Mega Supporter
Quoting: dubigrasuThe PoolSize is a proven tweak for UE3 titles, but why would I set
MaxSmoothedFrameRate to 400?

Good question! The original source suggests "leaving" this at 400, but I found my setting was actually 62. I bumped it up to 400 because I have no experience to argue against an obviously knowledgeable UE3 tester, but since that advice came from 2013, it may well be flawed. 400 does seem a bit on the high side and potentially risks running your card hot generating frames that your screen can't draw and your eyes are incapable of discerning.

Of course, if this was CS:GO, you'd have some folk argue that 400 isn't really high enough... :)
dubigrasu 10 Feb, 2016
Quoting: scaine
Quoting: dubigrasuThe PoolSize is a proven tweak for UE3 titles, but why would I set
MaxSmoothedFrameRate to 400?

Good question! The original source suggests "leaving" this at 400, but I found my setting was actually 62. I bumped it up to 400 because I have no experience to argue against an obviously knowledgeable UE3 tester, but since that advice came from 2013, it may well be flawed. 400 does seem a bit on the high side and potentially risks running your card hot generating frames that your screen can't draw and your eyes are incapable of discerning.

Of course, if this was CS:GO, you'd have some folk argue that 400 isn't really high enough... :)
Yes, I could see the reason for a higher value than the default 62 in case of a higher refresh monitor, but for the usual 60 Hz ones I would leave it as it is.
I was curious to see if there is a special argument for the 400 value.
While you're here, please consider supporting GamingOnLinux on:

Reward Tiers: Patreon. Plain Donations: Liberapay or PayPal.

This ensures all of our main content remains totally free for everyone with no article paywalls. We also don't have tons of adverts, there's also no tracking and we respect your privacy. Just good, fresh content. Without your continued support, we simply could not continue!

You can find even more ways to support us on this dedicated page any time. If you already are, thank you!
The comments on this article are closed.