You should post more details like a screenshot since it isn't very clear what is meant. Also remember logs.
The issue presents itself like below when you start the game
It can be worked around by forcing a aspect ratio e.g. not anyway for all resolutions. See belowd3d9.forceAspectRatio = 16:9 for my monitor.
Log without config (quite spammy)
Painkiller_d3d9-no-config.log
Log with config
Painkiller_d3d9-yes-config.log
Edit: extra notes.
The window covers the screen proper back in d9vk 0.11 and starts small with 0.12 but neither actually render anything but a black window.
Apitraces captured with dxvk on Linux didn't seem replayable.
Thank you for the answer! I should have precised that I'm on the Steam Deck, but I was able to reproduce this issue in desktop mode as well.
Switching back to DXVK (WINED3D=0), unfortunately force aspect ratio 16:9 doens't help, both in desktop an deck ui, unless the lowest resolution is selected. it's working because only 16:9 resolutions are available
I can also confirm the same issue on my oled deck too where it just resizes itself to a small box on the top left of the screen, plus it's not just Painkiller Black Edition that's effected, but the majority of the Painkiller games save for hell and damnation, found the same issue with the game's below.
Painkiller overdose
Painkiller Reoccurring evil
Painkiller Redemption
Painkiller resurrection
Tried out Black Edition on my windows laptop to see what would happen on there, game wouldn't boot up with DXVK, sharing a link of my Trace file with it incase it helps.
https://www.mediafire.com/file/uc2pwrf5k5fzg5r/Painkiller.zip/file
Weird, just tried on my end on Windows with DXVK 2.3 and 2.3.1 and it works, Nvidia GTX 1080 Ti.
I had to force aspect ratio with the dxvk option to have access to my native resolution for some reason though.
I can confirm that the behaviour of Painkiller Black edition is still the same as the one shown by the screenshot from @Blisto91.
I'm using the latest Proton-GE with dxvk commit e6f89062f5a5af96c4ae28d2ac441e54fbe94068.
System:
Host: fedora Kernel: 6.10.12-200.fc40.x86_64 arch: x86_64 bits: 64
compiler: gcc v: 2.41-37.fc40
Desktop: KDE Plasma v: 6.1.5 tk: Qt v: N/A wm: kwin_wayland dm: SDDM
Distro: Fedora Linux 40 (KDE Plasma)
CPU:
Info: 16-core model: AMD Ryzen 9 5950X bits: 64 type: MT MCP arch: Zen 3+
rev: 0 cache: L1: 1024 KiB L2: 8 MiB L3: 64 MiB
Speed (MHz): avg: 1418 high: 4116 min/max: 550/5084 cores: 1: 550 2: 3599
3: 3599 4: 550 5: 550 6: 550 7: 550 8: 550 9: 4116 10: 550 11: 3600 12: 3453
13: 550 14: 550 15: 550 16: 3602 17: 3600 18: 550 19: 550 20: 550 21: 3596
22: 550 23: 550 24: 550 25: 550 26: 550 27: 550 28: 550 29: 550 30: 550
31: 550 32: 3586 bogomips: 217614
Flags: avx avx2 ht lm nx pae sse sse2 sse3 sse4_1 sse4_2 sse4a ssse3
Graphics:
Device-1: AMD Navi 22 [Radeon RX 6700/6700 XT/6750 XT / 6800M/6850M XT]
vendor: XFX driver: amdgpu v: kernel arch: RDNA-2 pcie: speed: 16 GT/s
lanes: 16 ports: active: DP-1 empty: DP-2, DP-3, HDMI-A-1, Writeback-1
bus-ID: 0a:00.0 chip-ID: 1002:73df
Display: wayland server: X.org v: 1.20.14 with: Xwayland v: 24.1.3
compositor: kwin_wayland driver: X: loaded: amdgpu
unloaded: fbdev,modesetting,radeon,vesa dri: radeonsi gpu: amdgpu
display-ID: 0
Monitor-1: DP-1 res: 2560x1440 size: N/A
API: EGL v: 1.5 platforms: device: 0 drv: radeonsi device: 1 drv: swrast
gbm: drv: kms_swrast surfaceless: drv: radeonsi wayland: drv: radeonsi x11:
drv: radeonsi
API: OpenGL v: 4.6 compat-v: 4.5 vendor: amd mesa v: 24.1.7 glx-v: 1.4
direct-render: yes renderer: AMD Radeon RX 6750 XT (radeonsi navi22 LLVM
18.1.6 DRM 3.57 6.10.12-200.fc40.x86_64) device-ID: 1002:73df
display-ID: :0.0
API: Vulkan v: 1.3.290 surfaces: xcb,xlib,wayland device: 0
type: discrete-gpu driver: N/A device-ID: 1002:73df device: 1 type: cpu
driver: N/A device-ID: 10005:0000
Both Painkiller games seem fine here on latest master.
I am on X11 however, so maybe it's an issue with Gamescope?
Both Painkiller games seem fine here on latest master.
Painkiller: Black Edition
Painkiller: Overdose
I am on X11 however, so maybe it's an issue with Gamescope?
I tried it out lately on deck desktop mode (which I believe uses X11) on proton Experimental and i still run into the issue, unless a newer version of dxvk fixed it and isn't in proton yet.
Edit: Same result with bleeding-edge proton Experimental, game launches weirdly in a small window, if I use wined3d in desktop mode, it properly full screens and looks normal sized.
@WinterSnowfall on Fedora 41 KDE Plasma (Wayland session - Mesa 24.2.5) with the latest release of Proton-GE 9.18 (today), the game loads on a small windows with only a quarter of the menu visible.
@WinterSnowfall No luck with KDE Plasma 6.2.5 (Wayland session), Mesa 24.3.3 and Proton-GE 9.23 (latest as the time of writing), still only a quarter of a windows is visible (as my latest reply).
I've been able to reproduce it in the meantime as well. It's a bug for sure, but a tough nut to crack at that.
Experiencing this issue on Windows 10, latest nvidia drivers. DXVK 2.6.1.
Quite interested in investigating this as it affects the Painkiller RTX Remix project.
We have some insight into the game functionality, if the dxvk folks would like additional information to assist with debugging, please do not hesitate to ask.
Ah good to know some people care, having DXVK work for this would allow Lillium's DXVK HDR mod to perform brightness and possibly channels remastering/upgrades, which would look amazing for such a vibrant game like Painkiller 2004 :)
After that and FEAR 1, there will be no more DX9 outliers at least for me :D
The issue does not seem to occur with DXVK version 1.9.4
I did not test any other versions, but it might be possible to narrow down the commit.
for extra information, painkiller seems to hardcode 640x480 somewhere;
info: D3D9DeviceEx::ResetSwapChain:
info: Requested Presentation Parameters
info: - Width: 2560
info: - Height: 1440
info: - Format: D3D9Format::A8R8G8B8
info: - Auto Depth Stencil: true
info: ^ Format: D3D9Format::D24S8
info: - Windowed: true
info: - Swap effect: 1
info: DXVK: Using 16 compiler threads
info: Device reset
info: D3D9DeviceEx::ResetSwapChain:
info: Requested Presentation Parameters
info: - Width: 1280
info: - Height: 720
info: - Format: D3D9Format::A8R8G8B8
info: - Auto Depth Stencil: true
info: ^ Format: D3D9Format::D24S8
info: - Windowed: false
info: - Swap effect: 1
info: Setting display mode: 1280x720@0
info: Setting display mode: 1280x720@0
info: Presenter: Actual swapchain properties:
info: Format: VK_FORMAT_B8G8R8A8_UNORM
info: Color space: VK_COLOR_SPACE_SRGB_NONLINEAR_KHR
info: Present mode: VK_PRESENT_MODE_IMMEDIATE_KHR (dynamic: yes)
info: Buffer size: 640x480 <---------------------------------------------------------------------------------------------------------
info: Image count: 3
info: Device reset
info: D3D9DeviceEx::ResetSwapChain:
info: Requested Presentation Parameters
info: - Width: 1280
info: - Height: 720
info: - Format: D3D9Format::A8R8G8B8
info: - Auto Depth Stencil: true
info: ^ Format: D3D9Format::D24S8
info: - Windowed: false
info: - Swap effect: 1
warn: Multiple fullscreen windows detected.
This is with desktop resolution 2560x1440,
game resolution options set to 1280x720.
@WinterSnowfall I'm reporting some improvements here! Now the game launch not cut in half but it's VEEEERY tiny inside a black square in the middle of my screen. If i try to change the resolution from 640x480 to 1980x1080 it simply crashes.
Proton-GE 10.1 + Mesa 25.0.4
@WinterSnowfall i'm so happy to report that the game now works perfectly!
It fills my monitor perfectly and i can put it to the maximum resolution of my monitor without any problem.
Just to be sure, i've finished the first level without an hitch!
I've updated to Proton-GE 10.16 (that has till the commit e83650fdf7e64444a166ab0488ab16cae63dcb48 from DXVK) and i'm using the PROTON_ENABLE_WAYLAND=1 and PROTON_ENABLE_HDR=1 as launch option. Also i'm using the NTSync option enabled.
Updated system specs:
System:
Host: fedora Kernel: 6.16.7-200.fc42.x86_64 arch: x86_64 bits: 64
compiler: gcc v: 15.2.1
Desktop: KDE Plasma v: 6.4.5 tk: Qt v: N/A wm: kwin_wayland dm: SDDM
Distro: Fedora Linux 42 (KDE Plasma Desktop Edition)
CPU:
Info: 16-core model: AMD Ryzen 9 5950X bits: 64 type: MT MCP arch: Zen 3+
rev: 0 cache: L1: 1024 KiB L2: 8 MiB L3: 64 MiB
Speed (MHz): avg: 3924 min/max: 582/5086 boost: enabled cores: 1: 3924
2: 3924 3: 3924 4: 3924 5: 3924 6: 3924 7: 3924 8: 3924 9: 3924 10: 3924
11: 3924 12: 3924 13: 3924 14: 3924 15: 3924 16: 3924 17: 3924 18: 3924
19: 3924 20: 3924 21: 3924 22: 3924 23: 3924 24: 3924 25: 3924 26: 3924
27: 3924 28: 3924 29: 3924 30: 3924 31: 3924 32: 3924 bogomips: 217198
Flags-basic: avx avx2 ht lm nx pae sse sse2 sse3 sse4_1 sse4_2 sse4a ssse3
Graphics:
Device-1: Advanced Micro Devices [AMD/ATI] Navi 21 [Radeon RX 6800/6800 XT
/ 6900 XT] driver: amdgpu v: kernel arch: RDNA-2 pcie: speed: 16 GT/s
lanes: 16 ports: active: DP-1 empty: DP-2, DP-3, HDMI-A-1, Writeback-1
bus-ID: 0b:00.0 chip-ID: 1002:73bf
Display: wayland server: Xwayland v: 24.1.8 compositor: kwin_wayland
driver: gpu: amdgpu display-ID: 0
Monitor-1: DP-1 model: Samsung Odyssey G5 res: 2560x1440 hz: 165 dpi: 93
diag: 806mm (31.7")
API: EGL v: 1.5 platforms: device: 0 drv: radeonsi device: 1 drv: swrast
gbm: drv: kms_swrast surfaceless: drv: radeonsi wayland: drv: radeonsi x11:
drv: radeonsi
API: OpenGL v: 4.6 compat-v: 4.5 vendor: amd mesa v: 25.1.7 glx-v: 1.4
direct-render: yes renderer: AMD Radeon RX 6800 (radeonsi navi21 ACO DRM
3.64 6.16.7-200.fc42.x86_64) device-ID: 1002:73bf display-ID: :0.0
API: Vulkan v: 1.4.313 surfaces: N/A device: 0 type: discrete-gpu
driver: mesa radv device-ID: 1002:73bf device: 1 type: cpu
driver: mesa llvmpipe device-ID: 10005:0000
Info: Tools: api: clinfo, eglinfo, glxinfo, vulkaninfo
de: kscreen-console,kscreen-doctor gpu: lact wl: wayland-info x11: xdriinfo,
xdpyinfo, xprop, xrandr
@WinterSnowfall i'm so happy to report that the game now works perfectly!
It fills my monitor perfectly and i can put it to the maximum resolution of my monitor without any problem.
Happy to hear that, but that only confirms it's a WSI issue. Just checked on X11 and it's still broken 🤷.
@WinterSnowfall small PSA: with GE-Proton 10.21 the game has a regression showing the small black screen with inside the tiny game window. GE-Proton 10.20 works perfectly, double checked to be sure. On both cases i'm using the wayland driver and NtSync (PROTON_ENABLE_WAYLAND=1 and PROTON_ENABLE_HDR=1).
Fixed again on GE-Proton 10.22 using the Wayland driver and NtSync (PROTON_ENABLE_WAYLAND=1 and PROTON_ENABLE_HDR=1). 🎉
Well, I tried the fixes proposed here and played with versions but nothing works. I have a tiny game window inside a small black window. Any ideas?
No. Just need to be looked at by the devs at some point
Edit: If dxvk doesn't but wined3d works then you'll have to use that for now
wine3d gives me a grey window, full screen; nothing is displayed but at least it launches (sound works) and it looks like the resolution might be correct -_-
Thx anyway, I'll try again in a few months...
I'm waiting for this MR to be released with the next KDE 6.5 plasma stable update (by their schedule, should be on Tue 2025-12-09) because it fixes a problem very similar to this (cc @WinterSnowfall, maybe it's this the needed fix?).
No. Just need to be looked at by the devs at some point
Not much to look at, since this is a full-screen WSI issue. What I've done for it to work reliably is used
d3d9-wrapper as a first link in the chain, and set ForceWindowedMode = 1 to get a poor man's borderless full-screen, which then always scales/displays properly with dxvk.
...aaaaaaaaanddd works again GE-Proton 10.26 ^^"
No. Just need to be looked at by the devs at some point
Not much to look at, since this is a full-screen WSI issue. What I've done for it to work reliably is used d3d9-wrapper as a first link in the chain, and set
ForceWindowedMode = 1to get a poor man's borderless full-screen, which then always scales/displays properly with dxvk.
Here is another possible workaround for that issue. It seems like calling SetWindowPos() after loading the game also fixes that problem.
For example here is what I do:
#include <Windows.h>
int main() {
HWND handle = nullptr;while (true) {
if (GetAsyncKeyState(VK_MULTIPLY) & 0x8000) {
do {
handle = FindWindow(NULL, L"PainKiller");
} while (handle == nullptr);
SetWindowPos(handle, NULL, 0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN), SWP_FRAMECHANGED);
return 0;
}
Sleep(50);
}
return 0;
}
Just in case if somebody needs that...
This problem was solved about 1 year ago, if you install the 4GB RAM Patch and the Windowed Patch then the game opens normally: https://www.moddb.com/downloads/painkiller-4gb-patch.
You do not need to play in Windowed, you just need to have those 2 patches installed.
This problem was solved about 1 year ago, if you install the 4GB RAM Patch and the Windowed Patch then the game opens normally: https://www.moddb.com/downloads/painkiller-4gb-patch.
You do not need to play in Windowed, you just need to have those 2 patches installed.
By Jove, you’re right! With your patch, no other fixes needed. Thank you so much for this!
Sigh...broken again on wayland on Proton-GE 11-1, the tiny window on black background is back. This game is sure from hell :/
Ticket on ProtonGE tracker: https://github.com/GloriousEggroll/proton-ge-custom/issues/579
It happens without wine-wayland, I noted that already in https://github.com/GloriousEggroll/proton-ge-custom/issues/579
proton 10.26x1 2025-12proton 10.22x1 2025-10proton 10.20x1 2025-10proton 10.21x1 2025-10proton experimentalx1 2024-10PROTON_ENABLE_WAYLAND=1x3 2025-10PROTON_ENABLE_HDR=1).x2 2025-10PROTON_ENABLE_HDR=1x1 2025-09PROTON_USE_WINED3D=1x1 2023-12PROTON_USE_WINED3D=1 %command%x1 2023-12
This is fixable with PROTON_USE_WINED3D=1 %command% but the problem is that it uses direct3d to opengl, it doesn't use dxvk anymore this way, so all the dxvk.conf options are inaccessible. OpenGL is "fine" but can have severe frame pacing and input latency issues with Vsync on (even when there's no action, GPU and CPU underutilized), and SteamOS forces Vsync ON even when "allow tearing" is enabled (it does nothing).
Would be great to have good support for this game, as it's one of the best shooters ever made :)