Shader/material problem — specifically fragment shaders and texture binding.
The black rectangles are solid, the same size, and sitting in the 3D scene. That means the geometry is actually being drawn; it’s just coming out pure black instead of textured.
Under Proton + DXVK on the Arc B580 (xe driver), the common causes for this class of black geometry/texture artifacts (see e.g. [DXVK #3258](https://github.com/doitsujin/dxvk/issues/3258) and [DXVK #3429](https://github.com/doitsujin/dxvk/issues/3429)) are:
It’s not a geometry problem — you’d see holes or missing surfaces, not filled black rectangles.
It’s not depth/stencil, clear-color, post-process, or UI either.
So: shaders + resource binding, almost certainly on the DXVK side with the current Intel Arc/xe stack.
Diablo II: Resurrected – Performance degradation to 15–30 FPS After ~30–50 Minutes
Issue transferred from https://github.com/ValveSoftware/Proton/issues/10103.
@connormclaud posted on 2026-08-29T17:59:57:
ntsync module loaded), but reproducible with various kernels including default UbuntuAfter ~30–50 minutes of continuous runtime (reproducible during active gameplay/zoning as well as simply leaving the character idle in town), the game experiences severe performance
degradation:
ps) in a runaway syscall loop executing ~25,000 syscalls per second.VmRSS: ~2.17 GB, no memory leak).Tracing the Main thread during the lag state reveals a repeating 16-syscall dispatch sequence running ~1,500 times per second:
19:22:23.597950 ioctl(15, NTSYNC_IOC_WAIT_ANY, 0x1000fec90) = 0 <0.010574>
19:22:23.608909 rt_sigprocmask(SIG_BLOCK, [HUP INT USR1 USR2 ALRM CHLD IO], [], 8) = 0 <0.000004>
19:22:23.608955 write(5, "\32\\1\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\1\\0\\0\\0\\344\\1\\5\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0"..., 64) = 64 <0.000009>
19:22:23.608979 readv(11, [{iov_base="\0\\0\\0\\0\\0\\0\\0\\0\\344\\1\\5\\0\\0\\0\\0\\0\\1\\0\\0\\0\\263\\2\\0\\0\\1\\0\\0\\0\\263\\2\\0\\0"..., iov_len=64}], 1) = 64 <0.000004>
19:22:23.608999 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 <0.000002>
19:22:23.609036 futex(0x7559ea4168ac, FUTEX_WAKE_PRIVATE, 1) = 1 <0.000003>
19:22:23.609049 futex(0x7559ea4168ac, FUTEX_WAKE_PRIVATE, 1) = 1 <0.000002>
19:22:23.609057 futex(0x7559ea4168a4, FUTEX_WAKE_PRIVATE, 1) = 1 <0.000002>
19:22:23.609065 futex(0x7559ea4168a4, FUTEX_WAKE_PRIVATE, 1) = 1 <0.000003>
19:22:23.609073 futex(0x7559ea4168b4, FUTEX_WAKE_PRIVATE, 1) = 1 <0.000003>
19:22:23.609082 futex(0x7559ea4168b4, FUTEX_WAKE_PRIVATE, 1) = 1 <0.000003>
19:22:23.609092 futex(0x7559ea4168b8, FUTEX_WAKE_PRIVATE, 1) = 1 <0.000002>
19:22:23.609099 futex(0x7559ea4168b8, FUTEX_WAKE_PRIVATE, 1) = 1 <0.000002>
19:22:23.609106 futex(0x7559ea416898, FUTEX_WAKE_PRIVATE, 1) = 1 <0.000002>
19:22:23.609113 futex(0x7559ea416898, FUTEX_WAKE_PRIVATE, 1) = 1 <0.000002>
19:22:23.609120 futex(0x7559ea4168c0, FUTEX_WAKE_PRIVATE, 1) = 1 <0.000002>
19:22:23.609126 futex(0x7559ea4168c0, FUTEX_WAKE_PRIVATE, 1) = 1 <0.000002>
Main Thread (Thread 1 - LWP 68122):
#0 __GI___ioctl (fd=15, request=3223867010) at ../sysdeps/unix/sysv/linux/ioctl.c:36
#1 0x00007559ebf157ba in linux_wait_objs () from .../ntdll.so
#2 0x00007559ebf16b25 in inproc_wait () from .../ntdll.so
#3 0x00007559ebf1a5bc in NtWaitForSingleObject () from .../ntdll.so
#4 0x00007559ebf081f6 in __wine_syscall_dispatcher () from .../ntdll.so
#5 0x00007559ebf06368 in server_init_process_done () from .../ntdll.so
Background Loop Thread (Thread 54 - LWP 68129):
#0 __GI___ioctl (fd=15, request=3223867010) at ../sysdeps/unix/sysv/linux/ioctl.c:36
#1 0x00007559ebf157ba in linux_wait_objs () from .../ntdll.so
#2 0x00007559ebf16a43 in inproc_wait () from .../ntdll.so
#3 0x00007559ebf1a5bc in NtWaitForSingleObject () from .../ntdll.so
#4 0x00007559ebf081f6 in __wine_syscall_dispatcher () from .../ntdll.so
#5 0x00007559ebf27c7e in start_thread () from .../ntdll.so
VKD3D Fence Thread (Thread 25 - LWP 68189):
#0 syscall () at ../sysdeps/unix/sysv/linux/x86_64/syscall.S:38
#1 0x00007559ebf1d6c8 in NtWaitForAlertByThreadId () from .../ntdll.so
#2 0x00007559ebf081f6 in __wine_syscall_dispatcher () from .../ntdll.so
#3 0x00007559ebf27c7e in start_thread () from .../ntdll.so
Telemetry Metric │ Healthy State (Early Session) │ Lagging State (After ~30–50 min)
───────────────────────────────────────────────────────────┼──────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────
Frame Sleep Behavior │ Clean ~1.65 ms pselect6 frame timer sleeps │ pselect6 frame sleeps absent; continuous 0-timeout loop
Syscall Rate │ Standard frame-rate dispatch │ ~25,000 syscalls/sec (4,100 ioctl + 7,600 futex / 0.5s)
Main Thread CPU │ Work distributed across worker threads │ Single-thread bound (~103% CPU in ps)
GPU Clock / Busy │ 2420–2520 MHz @ ~90% load │ Drops to ~652–1570 MHz @ 14–30% load due to starved submission
Process Memory │ VmRSS: ~2.10 GB │ VmRSS: ~2.17 GB (Stable, no memory leak)
Shader/material problem — specifically fragment shaders and texture binding.
The black rectangles are solid, the same size, and sitting in the 3D scene. That means the geometry is actually being drawn; it’s just coming out pure black instead of textured.
Under Proton + DXVK on the Arc B580 (xe driver), the common causes for this class of black geometry/texture artifacts (see e.g. [DXVK #3258](https://github.com/doitsujin/dxvk/issues/3258) and [DXVK #3429](https://github.com/doitsujin/dxvk/issues/3429)) are:
* Fragment shader outputting black (bad constants, wrong material data, failed translation, or zeroed albedo) * Texture or sampler not bound for those draws, so it defaults to black * Some fixed-size environmental piece (rubble, wall detail, decal, etc.) using a material the translation layer is mishandlingIt’s not a geometry problem — you’d see holes or missing surfaces, not filled black rectangles. It’s not depth/stencil, clear-color, post-process, or UI either.
So: shaders + resource binding, almost certainly on the DXVK side with the current Intel Arc/xe stack.
I've been having the same issues now with the official “Diablo II: Resurrected – Infernal Edition” as well.
https://store.steampowered.com/app/2536520/Diablo_II_Resurrected__Infernal_Edition/
So I had to right-click on the game, select “Properties,” go to “Compatibility,” and switch to Proton 10.0-4.
Should I open a new issue for this, or can this one be relabeled for the official version?
Thank you very much
Translated with Deepl
proton 10.0-4x2 2026-08proton hotfixx1 2026-08proton experimentalx1 2026-07
Hi,
I manually added the Battle.net Launcher to Steam.
Until a few weeks ago (I can't pinpoint the exact time anymore—it might have been 2–3 months ago), I was playing “Diablo II: Resurrected™ – Reign of the Warlock” using Proton Experimental. To do this, I launched the Battle.net Launcher via Proton on Steam and then launched D2RW through the Battle.net Launcher.
Suddenly, small rectangular bars started appearing in the game. They keep multiplying as I play. See the YouTube link below.
I’ve tried various versions of Proton. Proton 10.0-4 still works perfectly fine. Strangely enough, Proton 11 also has the black bars, even though the Experimental version—as I mentioned—wasn’t affected a few weeks ago.
Translated with DeepL.com (free version)
Gameplay Video with black boarders, record with "GPU Screen Recorder 5.15.0"
https://youtu.be/mGhbaq86W8Q
Thank you