Far Cry 3 DX11 multithreading

Carfax83

Diamond Member
Nov 1, 2010
6,841
1,536
136
Months late, I finally got around to playing Far Cry 3, and I'm seriously impressed with the game. The scope and size of the sandbox is amazing! One could get lost for hours just walking around.. The detail and graphics is also very good, although it could have been better to be sure..

All in all, it's running very smooth on my machine @ 2560x1440 ultra settings and MSAA turned off..

However, I'm dismayed by the engine's broken DX11 multithreading capability. The setting is in the GamerProfile ini file, so I turned it on but it made the game run far worse than with it off.

Has anyone else experienced this? Did you lose or gain performance by enabling that setting?

It's a damn shame, because this is one game that has a TON of object and detail pop in (as adverse to native DX11 titlesl like Crysis 3 and BF3) and DX11 multithreading could do much to remedy it. You can see the engine streaming in textures and other details the distance the closer you get..

Are there any settings that can increase draw distance?
 

bystander36

Diamond Member
Apr 1, 2013
5,154
132
106
I'm curious as to how DX11 multithreading relates to the textures streaming in. That issue is also in the DX9 version of the game, and appears to just be a design decision.

I'm not sure what that setting is, but given that it was buried in an .ini file, I can only assume they disabled it for a reason.
 

bystander36

Diamond Member
Apr 1, 2013
5,154
132
106
Do you have an AMD card? I found this when searching what that setting does:
http://benchmark3d.com/far-cry-3-benchmark

Basically, DirectX 11 Multithreading doesn’t work with AMD GPUs and drivers, instead of improving performance (creating more than one “rendering thread”) it kills it. You can’t penalize Ubisoft for this because this option is hidden in the xml config file (only available for nVidia GPUs in-game). If you look at Civ 5 performance difference between two AMD and nVidia Cards (similar in performance) you’ll see a huge FPS difference (100% improvement in some cases) in favor of nVidia, that’s what DX11 Multithreading does…

I wonder if it would improve performance on Nvidia cards.
 

Carfax83

Diamond Member
Nov 1, 2010
6,841
1,536
136
I'm curious as to how DX11 multithreading relates to the textures streaming in. That issue is also in the DX9 version of the game, and appears to just be a design decision.

DX11 multithreading allows for draw calls over multiple threads, which means faster rendering and more objects on the screen in less time.

Do you have an AMD card? I found this when searching what that setting does:
http://benchmark3d.com/far-cry-3-benchmark

I wonder if it would improve performance on Nvidia cards.

I have GTX 580 SLI.
 

bystander36

Diamond Member
Apr 1, 2013
5,154
132
106
I do not believe Multithreading the rendering thread is going to have any affect on pop in. It seems to be strictly a method to increase the speed at which frames are rendered in CPU bound games.
 

Carfax83

Diamond Member
Nov 1, 2010
6,841
1,536
136
I just tested enabling DX11 multithreading again, and while it does seem smoother, I get graphical artifacts like textures flashing and what not, or some of them (like sand) being overly bright.
 

Carfax83

Diamond Member
Nov 1, 2010
6,841
1,536
136
I do not believe Multithreading the rendering thread is going to have any affect on pop in. It seems to be strictly a method to increase the speed at which frames are rendered in CPU bound games.

Here, our very own Ryan Smith goes into detail about DX11 multithreading:

Traditionally, rendering is a very serial process. The program needs to setup a bunch of objects and then pass that on to the video drivers and finally to the GPU. There's a high degree of submission overhead, meaning it's possible to choke the CPU while submitting a large number of objects to the GPU. In DirectX 11, multi-threaded rendering is achieved by turning the D3D pipeline into a 3 step process: the Device, the Immediate Context, and the Deferred Context. The important bit here is that the deferred context is full of things that have yet to be sent to the GPU, and that you can have a deferred context for each thread. When developers talk about multi-threaded rendering with DX11, this is what they're referring to. When you use DX11s multi-threaded rendering capabilities correctly, you can have several threads assemble their deferred contexts, and then combine them into a single command list once it comes time to render the scene.

Source

Also, in a Bit-tech article, AMD's Richard Huddy claims DX11 multithreading can double object/draw call throughput:

Source

I'd like to see NVidia's stance on this. I don't even know if AMD has enabled full DX11 multithreading in their drivers yet, but I know NVidia has..

DX11 multithreading may give more than double, if done correctly.
 

futurefields

Diamond Member
Jun 2, 2012
6,470
32
91
Seems every open world game has massive object pop-in.

Atleast, the ones that were also designed to run on consoles. Which is the case in Far Cry 3 I think. They made the engine to scale to 512mb consoles, so theres a lot of streaming going on. Enhancing graphics settings just enhances the lighting, texture quality etc, but you cant fundamentally change how the engine performs. And It's not cost effective for the company to rewrite the engine for PC's which have many GB of RAM and video ram.

So we end up with the compromise that exist today.
 

bystander36

Diamond Member
Apr 1, 2013
5,154
132
106
Here, our very own Ryan Smith goes into detail about DX11 multithreading:



Source

Also, in a Bit-tech article, AMD's Richard Huddy claims DX11 multithreading can double object/draw call throughput:

Source

I'd like to see NVidia's stance on this. I don't even know if AMD has enabled full DX11 multithreading in their drivers yet, but I know NVidia has..

DX11 multithreading may give more than double, if done correctly.

I'm not sure how that says anything different than I said. Obviously he talked in more detail, but the idea is the same. When the CPU is being "chocked" or is bottlenecking the GPU, or as I put it, the game is CPU bound, then splitting up the process into multiple threads can help speed up the process so the game is less CPU bound.

And giving more than double FPS is only the case in Civ 5 because it is heavily CPU bound. It won't do a lot for games that aren't.