Doom 3: BFG Edition (Steam) either crashes or launches with weird graphics

Hi all,
Having a bit of trouble getting Doom 3: BFG Edition to work on Steam…hoping someone can lend a helpful hand.

Issue: Doom 3 BFG Edition will launch using Proton Experimental or Proton 6.3, but everything is different shades of red and black…no other color…and after opening cutscene the game crashes and I’m back to my Steam library. Older versions of Proton (pre 6.3) will launch the game with correct colors but it still crashes after opening cutscene. Recently though (last 2-3 days) using older Proton version launches game with with completely black screen.

Additional info:
Output of ls /usr/share/vulkan/icd.d/

nvidia_icd.json

Output of glxinfo -B

name of display: :0
display: :0  screen: 0
direct rendering: Yes
Extended renderer info (GLX_MESA_query_renderer):
    Vendor: Intel Open Source Technology Center (0x8086)
    Device: Mesa DRI Intel(R) HD Graphics 3000 (SNB GT2) (0x116)
    Version: 21.2.1
    Accelerated: yes
    Video memory: 1536MB
    Unified memory: yes
    Preferred profile: core (0x1)
    Max core profile version: 3.3
    Max compat profile version: 3.0
    Max GLES1 profile version: 1.1
    Max GLES[23] profile version: 3.0
OpenGL vendor string: Intel Open Source Technology Center
OpenGL renderer string: Mesa DRI Intel(R) HD Graphics 3000 (SNB GT2)
OpenGL core profile version string: 3.3 (Core Profile) Mesa 21.2.1
OpenGL core profile shading language version string: 3.30
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile

OpenGL version string: 3.0 Mesa 21.2.1
OpenGL shading language version string: 1.30
OpenGL context flags: (none)

OpenGL ES profile version string: OpenGL ES 3.0 Mesa 21.2.1
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.00

What I’ve tried so far:

  • Switching between older versions of Proton (all the way down to 4.2) doesn’t seem to help. The proper colors render, but it either crashes after cutscene or I am only able to see my HUD

  • Adding launch option PROTON_USE_WINED3D=TRUE %command%. The game actually launches with or without this variable present…it doesn’t seem to make any difference at all though.

  • Disabling Steam overlay

I had a log file created in hopes that it would output at least something that I could search for…Output of Doom3BFG_dxvi.log:

info:  Game: Doom3BFG.exe
info:  DXVK: v1.9.1
info:  Built-in extension providers:
info:    Win32 WSI
info:    OpenVR
info:    OpenXR
info:  Required Vulkan extension VK_KHR_surface not supported
err:   DxvkInstance: Failed to create instance

Googling those last 2 lines brought me to suggestions to ensure I had lib32-vulkan-icd-loader as well as vulkan-icd-loader installed, which I do. Below is my output for pacman -Qs vulkan :

local/lib32-nvidia-utils 470.63.01-1
    NVIDIA drivers utilities (32-bit)
local/lib32-vulkan-icd-loader 1.2.184-1
    Vulkan Installable Client Driver (ICD) Loader (32-bit)
local/nvidia-utils 470.63.01-1
    NVIDIA drivers utilities
local/vulkan-icd-loader 1.2.188-1
    Vulkan Installable Client Driver (ICD) Loader
[nick@nick-qosmiox775 ~]$ ls /usr/share/vulkan/icd.d/

I haven’t tried anything else just yet…still googling at this point…in the meantime if anyone has any additional suggestions it would be much appreciated! Let me know if there’s any more info I should provide…thanks!

Looks like you’re running on Intel (i suppose it’s laptop)
Try forcing Nvidia card with something like gamemode

P.S. There’s whole Linux gaming [Guide] (see requirements section for a minimum to get started) and you can always ask here, no need to google :upside_down_face:


btw, some report:

Proton 6.3 and Proton Experimental just render a black screen with HUD in-game.

(c) https://www.protondb.com/app/208200

So try either with Proton 5.13 or some GloriousEggroll or TKG engine

1 Like

Thanks! I’ll give gamemode a try and see what happens! I’ve read over the Linux Gaming Guide once before but I’ll take another closer look at it.

ProtonDB was my first place to check before I even bought the game (and my main reference when I first started messing around with this issue); so glad to have that otherwise I feel like I’d be wasting $ on borked games!

1 Like

I have an update to share…I’m still messing around with gamemode, as @keybreak suggested, but I’m struggling a bit. Following the Arch Wiki and gamemode man pages, I installed it, added gamemoderun %command% to the Steam launch options, and created a gamemode.ini file in /etc/. I made the edits suggested on the Arch Wiki, but I don’t really know what else to change in that file…here’s what mine looks like so far…

[general]
; The reaper thread will check every 5 seconds for exited clients, for config file changes, and for the CPU/iGPU power balance
reaper_freq=5

; The desired governor is used when entering GameMode instead of "performance"
desiredgov=performance
; The default governor is used when leaving GameMode instead of restoring the original value
;defaultgov=powersave

; The iGPU desired governor is used when the integrated GPU is under heavy load
igpu_desiredgov=powersave
; Threshold to use to decide when the integrated GPU is under heavy load.
; This is a ratio of iGPU Watts / CPU Watts which is used to determine when the
; integraged GPU is under heavy enough load to justify switching to
; igpu_desiredgov.  Set this to -1 to disable all iGPU checking and always
; use desiredgov for games.
igpu_power_threshold=0.3

; GameMode can change the scheduler policy to SCHED_ISO on kernels which support it (currently
; not supported by upstream kernels). Can be set to "auto", "on" or "off". "auto" will enable
; with 4 or more CPU cores. "on" will always enable. Defaults to "off".
softrealtime=off

; GameMode can renice game processes. You can put any value between 0 and 20 here, the value
; will be negated and applied as a nice value (0 means no change). Defaults to 0.
renice=11

; By default, GameMode adjusts the iopriority of clients to BE/0, you can put any value
; between 0 and 7 here (with 0 being highest priority), or one of the special values
; "off" (to disable) or "reset" (to restore Linux default behavior based on CPU priority),
; currently, only the best-effort class is supported thus you cannot set it here
ioprio=0

; Sets whether gamemode will inhibit the screensaver when active
; Defaults to 1
inhibit_screensaver=1

[filter]
; If "whitelist" entry has a value(s)
; gamemode will reject anything not in the whitelist
;whitelist=RiseOfTheTombRaider

; Gamemode will always reject anything in the blacklist
;blacklist=HalfLife3
;    glxgears

[gpu]
; Here Be Dragons!
; Warning: Use these settings at your own risk
; Any damage to hardware incurred due to this feature is your responsibility and yours alone
; It is also highly recommended you try these settings out first manually to find the sweet spots

; Setting this to the keyphrase "accept-responsibility" will allow gamemode to apply GPU optimisations such as overclocks
;apply_gpu_optimisations=0

; The DRM device number on the system (usually 0), ie. the number in /sys/class/drm/card0/
;gpu_device=0

; Nvidia specific settings
; Requires the coolbits extension activated in nvidia-xconfig
; This corresponds to the desired GPUPowerMizerMode
; "Adaptive"=0 "Prefer Maximum Performance"=1 and "Auto"=2
; See NV_CTRL_GPU_POWER_MIZER_MODE and friends in https://github.com/NVIDIA/nvidia-settings/blob/master/src/libXNVCtrl/NVCtrl.h
;nv_powermizer_mode=1

; These will modify the core and mem clocks of the highest perf state in the Nvidia PowerMizer
; They are measured as Mhz offsets from the baseline, 0 will reset values to default, -1 or unset will not modify values
;nv_core_clock_mhz_offset=0
;nv_mem_clock_mhz_offset=0

; AMD specific settings
; Requires a relatively up to date AMDGPU kernel module
; See: https://dri.freedesktop.org/docs/drm/gpu/amdgpu.html#gpu-power-thermal-controls-and-monitoring
; It is also highly recommended you use lm-sensors (or other available tools) to verify card temperatures
; This corresponds to power_dpm_force_performance_level, "manual" is not supported for now
;amd_performance_level=high

[supervisor]
; This section controls the new gamemode functions gamemode_request_start_for and gamemode_request_end_for
; The whilelist and blacklist control which supervisor programs are allowed to make the above requests
;supervisor_whitelist=
;supervisor_blacklist=

; In case you want to allow a supervisor to take full control of gamemode, this option can be set
; This will only allow gamemode clients to be registered by using the above functions by a supervisor client
;require_supervisor=0

[custom]
; Custom scripts (executed using the shell) when gamemode starts and ends
;start=notify-send "GameMode started"
;    /home/me/bin/stop_ethmining.sh

;end=notify-send "GameMode ended"
;    /home/me/bin/start_ethmining.sh

; Timeout for scripts (seconds). Scripts will be killed if they do not complete within this time.
;script_timeout=10

In the meantime, I installed vkd3d as an optional dependency for wine…it wasn’t installed prior, so I thought I’d give it a go but it doesn’t seem to be helping the issue. I got the idea from reading through the Gaming Guide here, specifically the part that talks about disabling vkd3d if games crash after launching. I figured I’d try it because I didn’t have it installed at all before.

Are you using optimus manager or optimus switch

on gamemode, i think it should be enough to just install it and run gamemoderun %command%, i believe it should make everything else automatically, no need to mess with /etc/

It’s not necessary package, as far as i remember, unless you use default system Wine in default prefix directly, without using Steam / Lutris…

Don’t think I’m using either honestly…optimus manager is only in the AUR right now and I’ve never installed it from there. Additionally I’ve never configured anything to the extent of what’s outlined in the optimus-switch guide here on this forum (Optimus Switch - Another Solution for Optimus Laptops). Looks like I’m only using the standard nvidia drivers:

$ pacman -Q | grep nvidia
lib32-nvidia-utils 470.63.01-1
lib32-opencl-nvidia-340xx 340.108-1
nvidia-utils 470.63.01-1
opencl-nvidia-340xx 340.108-1

No bbswitch installed either on my system…

According to your glxinfo -B you are using your Intel graphics not your Nvidia

I also have a log file from yesterday when I attempted to launch the game. The only launch parameter I used was WINEDEBUG="+timestamp,+pid,+tid,+seh,+debugstr,+module" %command% which created the log and plopped it into my /home folder. It’s pretty big so I linked the log here from my Google Drive…hope that’s ok…

@theremper thanks for pointing that out…I feel silly for not realizing that myself. I’ll take a closer look at possibly using one of those options (optimus manager vs switch vs bbswitch). I’ve got 3 other games that have worked without issue (only 1 is Linux-native) with my current setup so I’m a bit puzzled why Doom 3 has been giving me so much trouble.

Looking at the log, I see a handful of lines that show some .dll modules failing to load…could this simply be a config issue on my end for this particular game? I’m using PlayonLinux btw…