Issue Description (Required):
I hope that the devs at Fatshark see this because my journey of looking for a reproduceable root cause of game stutter and texture streaming not working correctly has ended!
Update: I have just found out that Darktide does not have Fullscreen optimisations enabled. This fix here combined with the below fixes seemed to have solved all of my issues with this game. So far many people have benefited from this. Let me know your results
PLEASE NOTE: I have a high end system, and an AMD graphics card (which are notorious for having issues with darktide), your mileage may vary depdning on your PC’s specs
What was causing it for me? It was the texture streaming and mesh streaming config / settings.
Under the file ‘settings_common.ini’,. Found in your local game files (for steam this is under C:\Program Files (x86)\Steam\steamapps\common\Warhammer 40,000 DARKTIDE\bundle\application_settings). I changed the following values:
BEFORE:
mesh_streamer_settings = {
disable = false
eviction_timeout = 5
frame_time_budget = 1
io_buffer_budget = 10240
limit = 700
streaming_buffer_size = 32
streaming_max_open_streams = 50
streaming_texture_pool_size = 400
surface_properties = "application_settings/global"
texture_streamer_settings = {
streaming_buffer_size = 64
streaming_texture_pool_size = 512
AFTER:
mesh_streamer_settings = {
disable = false
eviction_timeout = 5
frame_time_budget = 1
io_buffer_budget = 10240
limit = 768
streaming_buffer_size = 128
streaming_max_open_streams = 64
streaming_texture_pool_size = 512
surface_properties = "application_settings/global"
texture_streamer_settings = {
streaming_buffer_size = 128
streaming_texture_pool_size = 1024
Extra / Experimental Change to feedback streamer buffer size
If you are a content creator, or getting sweaty, please avoid using the below experimental change as this has occasionally caused my game to crash while testing.
Under the same file settings_common.ini change the following. Thanks to @DashHandsome For finding this one, changing the buffer sizes from 4 has further has improved my games performance.
BEFORE:
feedback_streamer_settings = {
feedback_buffer_size = 4
max_age_out_tiles_per_frame = 64
max_streaming_tiles_per_frame = 64
max_texture_pool_size = 1024
max_write_feedback_threshold = 0.009
min_write_feedback_threshold = 0.005
staging_buffer_size = 4
threaded_streamer = true
tile_age_out_time_ms = 5000
tile_staging_buffer_size = 4
AFTER
feedback_streamer_settings = {
feedback_buffer_size = 2
max_age_out_tiles_per_frame = 64
max_streaming_tiles_per_frame = 64
max_texture_pool_size = 1024
max_write_feedback_threshold = 0.009
min_write_feedback_threshold = 0.005
staging_buffer_size = 1
threaded_streamer = true
tile_age_out_time_ms = 5000
tile_staging_buffer_size = 1
DONT FORGET TO SAVE YOUR CHANGES
*Note: I did try other configurations of values, combinations, etc. but so far in my 4 weeks of testing, this set of values has given me the best results by a large margin. It seems that making the values that I changed be a multiple of 64 makes the game smooth out for me.
@DashHandsome has found the following documentation on AMD GPUs that seems to back up my trial and error solution of ‘multiple of 64’ approach - AMD RDNA™ Performance Guide - AMD GPUOpen.
This states that
Compute Shaders
. GCN runs shader threads in groups of 64 known as wave64.
. RDNA runs shader threads in groups of 32 known as wave32.
. Unused threads in a wave get masked out when running the shader.
. Make the workgroup size a multiple of 64 to obtain best performance across all GPU generations.
This has almost entirely removed stutter, my game is running unbelievable smooth, and went from struggling to hit 110fps, to averaging anywhere from between 150 to 200fps in the vast majority of scenarios. Not to mention its like my game is being played in Ultra HD. Everything is SO UNBELIEVABLY CLEAR AND DETAILED!
Not sure if this works for anyone else, but for me with my AMD graphics card, this has solved ALL of my issues I’ve been plagued with for the last year.
Attempted Solutions (Optional):
Under settings_common.ini change these values to the following:
For AMD DISABLE AMD SAM (Smart Access Memory)
mesh_streamer_settings = {
disable = false
eviction_timeout = 5
frame_time_budget = 1
io_buffer_budget = 10240
limit = 768
streaming_buffer_size = 128
streaming_max_open_streams = 64
streaming_texture_pool_size = 512
surface_properties = "application_settings/global"
texture_streamer_settings = {
streaming_buffer_size = 128
streaming_texture_pool_size = 1024
Extra / Experimental Tweak Under settings_common.ini
feedback_streamer_settings = {
feedback_buffer_size = 1
max_age_out_tiles_per_frame = 64
max_streaming_tiles_per_frame = 64
max_texture_pool_size = 1024
max_write_feedback_threshold = 0.009
min_write_feedback_threshold = 0.005
staging_buffer_size = 1
threaded_streamer = true
tile_age_out_time_ms = 5000
tile_staging_buffer_size = 1
DONT FORGET TO SVAE YOUR CHANGES
Platform (Required):
PC - Steam
[PC] PC Specifications (Optional):
9800x3D
7900xtx
32gb DDR5 6200mhz