Page 1 of 1

[Posila] [0.14.9] [MP] Not enough of video memory

Posted: Sat Sep 24, 2016 7:29 pm
by yfcz
Hello,

I was idle for several hours while connected to server. Then suddenly my game crashed with error shown on attached screenshot.

When I looked at used video ram (GPU-Z) game was consuming only 1,5 GB out of 4 GB available.

Client log is also attached.

Re: [Posila] [0.14.9] [MP] Not enough of video memory

Posted: Wed Sep 28, 2016 10:33 am
by posila
This might happen when Windows turns off screens or computer goes to sleep or something like that. DirectX loses graphical device and it needs to reset itself. Allegro (and therefore Factorio) handles this poorly. I tried to fix it before as we had kind of lot of bug reports for crashes when putting computer to sleep while Factorio is running, but apparently the fix doesn't work 100%.

I am curious what was happening just before the game crashed:

Code: Select all

22218.854 Device reset internal.
22221.459 Device reset external.
22221.476 Device reset internal.
22223.995 Device reset external.
22224.772 Device reset external.
22224.954 Device reset internal.
22227.494 Info ClientSynchronizer.cpp:253: Changing local latency from 17 to 21 (nextTickToSend: 64997714, ticksClientWillJumpOver: 0 {})
22237.445 Info ClientSynchronizer.cpp:253: Changing local latency from 21 to 13 (nextTickToSend: 64998315, ticksClientWillJumpOver: 0 {})
22242.444 Info ClientSynchronizer.cpp:253: Changing local latency from 13 to 12 (nextTickToSend: 64998609, ticksClientWillJumpOver: 0 {})
22247.429 Info ClientSynchronizer.cpp:253: Changing local latency from 12 to 11 (nextTickToSend: 64998908, ticksClientWillJumpOver: 0 {})
22252.428 Info ClientSynchronizer.cpp:253: Changing local latency from 11 to 10 (nextTickToSend: 64999207, ticksClientWillJumpOver: 0 {})
22267.511 Info ClientSynchronizer.cpp:253: Changing local latency from 10 to 11 (nextTickToSend: 65000108, ticksClientWillJumpOver: 0 {})
22287.578 Info ClientSynchronizer.cpp:253: Changing local latency from 11 to 18 (nextTickToSend: 65001307, ticksClientWillJumpOver: 0 {})
22297.628 Info ClientSynchronizer.cpp:253: Changing local latency from 18 to 10 (nextTickToSend: 65001916, ticksClientWillJumpOver: 0 {})
22313.712 Info ClientSynchronizer.cpp:253: Changing local latency from 10 to 8 (nextTickToSend: 65002808, ticksClientWillJumpOver: 0 {})
22320.195 Info ClientSynchronizer.cpp:253: Changing local latency from 8 to 7 (nextTickToSend: 65003107, ticksClientWillJumpOver: 0 {})
22320.245 Info ClientSynchronizer.cpp:253: Changing local latency from 7 to 9 (nextTickToSend: 65003108, ticksClientWillJumpOver: 0 {})
22338.678 Info ClientSynchronizer.cpp:253: Changing local latency from 9 to 8 (nextTickToSend: 65004008, ticksClientWillJumpOver: 0 {})
22345.245 Info ClientSynchronizer.cpp:253: Changing local latency from 8 to 7 (nextTickToSend: 65004308, ticksClientWillJumpOver: 0 {})
22345.277 Info ClientSynchronizer.cpp:253: Changing local latency from 7 to 9 (nextTickToSend: 65004308, ticksClientWillJumpOver: 0 {})
22349.234 Device reset internal.
22351.306 Info ClientSynchronizer.cpp:253: Changing local latency from 9 to 20 (nextTickToSend: 65004608, ticksClientWillJumpOver: 0 {})
22351.804 Device reset external.
22351.810 Device reset internal.
22354.147 Device reset internal.
22354.500 Error Util.cpp:57: Unable to create sprite (1612X912) probably not enough of video memory.
It resets the DirectX device few times, than runs for two minutes and starts reseting it again, which is fatal this time.
"Device reset internal" usualy happens when window is resized (but can happen also for other reasons).
"Device reset external" is DirectX losing the device due to screens turning off, or something like that.

I'll look into it sometime, but it is kind of minor issue. If you want to play Factorio AFK, set force-opengl=true in %APPDATA%\Factorio\config\config.ini. OpenGL doesn't have this kind of problem.