Mastering DirectX Gaming on Linux: A Complete Setup & Performance Guide

Explore how DirectX works on Linux through Vulkan and Wine/Proton layers. This guide covers setup, configuration, and performance testing to help you understand and optimize DirectX-based games and apps on your Linux system.

Mastering DirectX Gaming on Linux: A Complete Setup & Performance Guide

1. Why This Guide Matters

On Linux, games built for DirectX (the graphics API used by Windows) don’t run natively. Instead you rely on a stack that translates those DirectX calls into something Linux can handle—most commonly the Vulkan API. The two key players:

The modern, high‑performance translation stack is:

DirectX version Translation layer Target API Typical source
DX9‑DX11 DXVK Vulkan Bundled with Proton (or standalone)
DX12 VKD3D‑Proton Vulkan Bundled with Proton‑Experimental / Proton‑GE

When you launch a Windows game through Steam → Proton (or plain Wine), the stack works like this:

Game (DirectX) → Wine/Proton → DXVK or VKD3D‑Proton → Vulkan driver → GPU

If the stack is mis‑configured, you may fall back to WineD3D (DirectX → OpenGL) which is ~2‑3× slower. The goal of this guide is to make sure DXVK/VKD3D are the active paths and to squeeze every ounce of performance out of your CPU and NVIDIA GPU (or AMD/Intel GPUs, the steps are the same).

  • DXVK translates Direct3D 9/10/11 → Vulkan.
  • VKD3D-Proton translates Direct3D 12 → Vulkan.

But to get good performance, you need to configure your system properly, select a suitable Proton version, ensure drivers and 32-bit libs are present, set launch options and test what works best. This guide will take you step-by-step through installation, configuration, testing, benchmarking and tuning.

2. What You’ll Need (and Why)

Before diving into configuration, gather your prerequisites:

  • A modern Linux distribution (e.g., Ubuntu 25.04/25.10) with up-to-date kernel and drivers supporting Vulkan.
  • A GPU with Vulkan support and up to date proprietary or open drivers.
  • Steam installed, with Steam Play enabled.
  • For DirectX-11 titles: DXVK support.
  • For DirectX-12 titles: VKD3D-Proton support.
  • 32-bit graphics libraries (many Windows games are 32-bit).
  • Benchmarking tools (FPS counter, frame-time overlay, maybe MangoHud).
  • Patience—some games may need individual tweaks for anti-cheat or DRM compatibility.
Component Why it’s needed Quick check
Modern Linux distro (Ubuntu 25.04+, Fedora 40, Arch 2024, etc.) Recent kernel + Mesa/Vulkan libraries uname -r ≥ 6.5,
vulkaninfo works
Vulkan‑capable GPU (NVIDIA RTX 30‑series+, GTX 10‑series+, AMD RX 6000+, Intel Arc) Vulkan is the backend for DXVK/VKD3D vulkaninfo
Up‑to‑date proprietary or open driver Driver must expose Vulkan 1.3 features (descriptor indexing, timeline semaphores) glxinfo
Steam (with Steam Play) Provides the Proton binaries and a convenient UI for per‑game configuration steam
DXVK (for DX9‑DX11) Fast DirectX‑to‑Vulkan translator Bundled with Proton, optional manual update
VKD3D‑Proton (for DX12) DirectX‑12‑to‑Vulkan translator Bundled with Proton‑Experimental, optional manual update
32‑bit graphics libraries Most Windows games ship as 32‑bit binaries; Wine needs matching libs dpkg --print-architecturei386 installed
MangoHud / vkBasalt / Steam overlay Real‑time FPS, frame‑time, and GPU‑usage overlay sudo apt install mangohud
Patience & a log‑viewer Some titles need per‑title tweaks, anti‑cheat work‑arounds, or extra env vars journalctl -f, less, grep

3. Installing Necessary Components

Tip: Keep a terminal window open with watch -n 1 nvidia-smi (NVIDIA) or radeontop (AMD) while you test – you’ll instantly see whether the GPU is being used.

3.1 GPU Drivers & Vulkan Runtime

NVIDIA (proprietary)

# Add the official graphics-drivers PPA (Ubuntu)
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update

# Install the latest stable driver (e.g., 580)
sudo apt install nvidia-driver-580

# Install Vulkan packages for NVIDIA
sudo apt install libvulkan1 libvulkan1:i386 vulkan-tools

AMD (open source)

sudo apt install mesa-vulkan-drivers mesa-vulkan-drivers:i386 vulkan-tools

Intel (open source)

sudo apt install mesa-vulkan-drivers mesa-vulkan-drivers:i386 vulkan-tools

Verify Vulkan:

vulkaninfo | grep "deviceName"
# Expected output: NVIDIA/AMD/Intel name + "Vulkan 1.3"

On my server is:

deviceName        = NVIDIA GeForce RTX 2080 Ti
deviceName        = NVIDIA GeForce RTX 2080 Ti

If you see an error like Cannot find libvulkan.so.1, the driver install failed – double‑check the packages.

In my case the output is:

vulkaninfo | grep -i "devicename" 
	deviceName        = NVIDIA GeForce RTX 2080 Ti
	deviceName        = NVIDIA GeForce RTX 2080 Ti

3.2 Enable 32-bit support

Many Windows games are 32-bit — you need multi-arch:

# Enable i386 architecture (required only once)
sudo dpkg --add-architecture i386
sudo apt update

# Install 32‑bit graphics libs
sudo apt install libvulkan1:i386 libgl1-mesa-glx:i386 libgl1-mesa-dri:i386

Why? Wine creates a 32‑bit “prefix” (~/.wine or the Proton pfx) that needs matching 32‑bit OpenGL/Vulkan libraries. Without them, any 32‑bit game will abort with “Vulkan not found”.

3.3 Install Steam and enable Steam Play

Install Steam if not yet:

sudo apt install steam
  1. Launch Steam → Settings → Steam Play.
  2. Tick Enable Steam Play for supported titles and Enable Steam Play for all other titles.
  3. Choose Proton Experimental (or the latest stable) as the default.

Note: Proton‑GE (a community‑maintained build) often contains newer DXVK/VKD3D patches. Install it via ProtonDB or the ProtonUp‑Qt GUI (see later).

3.4 Install/Update DXVK & VKD3D‑Proton (Optional Manual Updates)

Proton already bundles recent DXVK/VKD3D, but you can replace them with the latest upstream releases for a performance edge.

Using ProtonUp‑Qt (recommended)

# Install ProtonUp‑Qt (Ubuntu)
sudo add-apt-repository ppa:philip.scott/protonup-qt
sudo apt update
sudo apt install protonup-qt
  • Open ProtonUp‑Qt, click Add Proton, select Proton‑GE (or Proton‑Experimental), and click Install.
  • The tool also lets you install DXVK and VKD3D‑Proton separately if you prefer a stand‑alone Wine setup.

Manual Replacement (advanced)

# Example: Update DXVK to v2.3
cd ~
wget -O dxvk.tar.gz https://github.com/doitsujin/dxvk/releases/download/v2.7.1/dxvk-native-2.7.1-steamrt-sniper.tar.gz
tar -xzf dxvk.tar.gz
cd dxvk-2.7.1

# Find the Proton directory you want to patch, e.g.:
PROTON_DIR=~/.steam/steam/steamapps/common/Proton_7.0

# Copy the libraries (both 64‑ and 32‑bit)
cp -r x64/*.so "$PROTON_DIR"/files/lib64/
cp -r lib32/*.so "$PROTON_DIR"/files/lib/

Caution: Back up the original Proton folder (cp -r Proton_7.0 Proton_7.0.backup) before overwriting.

4. Configuring Games for DirectX on Linux

4.1 Choosing the Right Proton Version

Game Type Recommended Proton When to switch
DX9‑DX11 (most titles) Proton 8.0 (stable) If you hit crashes, try Proton‑GE or Proton‑Experimental
DX12 (modern shooters, e.g., Cyberpunk 2077, Control) Proton‑Experimental or Proton‑GE (latest) If you see “VKD3D not found” or poor performance
Games with heavy anti‑cheat (EAC, BattleEye) Proton‑GE + PROTON_NO_ESYNC=1 Many anti‑cheat layers reject ESYNC/FSYNC

How to set per‑game Proton:

  1. Right‑click the game → PropertiesCompatibility.
  2. Tick Force the use of a specific Steam Play compatibility tool.
  3. Pick the desired Proton version from the dropdown.

4.2 Launch Options & Environment Variables

Add these in Properties → Launch Options (append %command% at the end if you need to keep the default).

Variable Purpose Example
DXVK_HUD=1 Shows a tiny overlay with FPS, API, GPU, driver version. DXVK_HUD=1 %command%
DXVK_HUD=version,
devinfo,fps,api,gpu,drawcalls
More detailed HUD (useful for benchmarking). DXVK_HUD=version,
devinfo,fps,api,
gpu,drawcalls
%command%
PROTON_NO_ESYNC=1 Disables the fast‑event sync; fixes many anti‑cheat crashes. PROTON_NO_ESYNC=1
%command%
PROTON_NO_FSYNC=1 Disables frame‑sync; helpful for games that freeze on startup. PROTON_NO_FSYNC=1
%command%
VKD3D_CONFIG=dxr11 Enables DXR 1.1 (ray tracing) if the GPU/driver supports it. VKD3D_CONFIG=dxr11
%command%
MANGOHUD=1 Shows a richer HUD (FPS, frame‑time, VRAM, CPU usage). MANGOHUD=1
%command%
vblank_mode=0 Forces uncapped framerate (VSync off). vblank_mode=0
%command%
__NV_PRIME_RENDER
_OFFLOAD=1

/
__GLX_VENDOR_LIBRARY
_NAME=nvidia
Off‑load rendering to a discrete NVIDIA GPU while using Intel/AMD as the display GPU. __NV_PRIME_RENDER
_OFFLOAD=1
__GLX_VENDOR
_LIBRARY_NAME=
nvidia %command%
VK_DEVICE_SELECT
_PCI_BUS_ID=0x0000
Manually selects a Vulkan device by PCI bus ID (useful on multi‑GPU rigs). VK_DEVICE_SELECT
_PCI_BUS_ID
=0x03:00.0
%command%

Tip: You can chain multiple variables with spaces, e.g.
DXVK_HUD=1 PROTON_NO_ESYNC=1 MANGOHUD=1 %command%

4.3 Verifying Which API Is Running

  1. DXVK HUD – shows API = D3D11 (or D3D9/D3D10) and Backend = Vulkan.
  2. VKD3D HUD – shows API = D3D12 and Backend = Vulkan.
  3. WineD3D fallback – HUD will say Backend = OpenGL. This is a red flag; it means either Vulkan libs are missing or the translation layer failed.

If you get OpenGL, run:

# Check Vulkan libs
ldd "$(which vulkaninfo)" | grep "not found"
# Re‑install missing packages
sudo apt install libvulkan1 libvulkan1:i386

Or

DXVK_HUD=version,devinfo,fps,api,gpu %command%  

It’ll display the API used: DX11 (via DXVK) or D3D12 (via VKD3D).

5. Running DirectX on CPU‑Only Systems (llvmpipe)

Sometimes you may want to test or run a DirectX game on a headless server, a laptop without a dedicated GPU, or a VM. In that case you can force the Vulkan driver to use llvmpipe, a software rasterizer that runs on the CPU.

# Install the software Vulkan driver (Mesa)
sudo apt install mesa-vulkan-drivers mesa-vulkan-drivers:i386

# Force llvmpipe
export MESA_LOADER_DRIVER_OVERRIDE=llvmpipe
export VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/llvmpipe_icd.x86_64.json

# Launch the game (example via Steam)
DXVK_HUD=1 %command%

Performance expectations:

  • llvmpipe can reach ~30‑60 fps at 720p on a modern 8‑core CPU, but you’ll lose any hardware‑accelerated features (ray tracing, DLSS, etc.).
  • Use this only for testing or as a fallback; for serious gaming, you’ll want a GPU.

5.1 Simple API Test

Run a Windows game known to use DirectX 11. Launch with DXVK_HUD=all %command%.
Check if HUD shows “API = D3D11” and backend “DXVK”. If so, your translation pipeline works.

5.2 DirectX 12 Test

Select a DX12 title. Use Proton-GE or Experimental. Launch with DXVK_HUD=all %command%.
Check HUD: “API = D3D12”, backend “VKD3D”. If you see “VKD3D”, translation is working.
Note: Many users report DX12 games have performance hit vs Windows when using VKD3D. (NVIDIA Developer Forums)

5.3 Benchmarking & Frame Time

Use built-in benchmark mode in games, or external tools:

  • Enable FPS counter (Steam overlay, MangoHud).
  • Capture frame time graphs.
    Record: resolution, driver version, Proton version, environment variables used.
    Compare across settings: native Vulkan, DXVK, VKD3D.

5.4 Logging & Troubleshooting

If a game crashes, look in logs: ~/.steam/steam/logs/ and ~/.steam/steam/steamapps/compatdata/<appid>/pfx/.
Search for:

  • DXVK: unable to open libvulkan.so.1 → missing Vulkan libs.
  • vkd3d-proton: failed to create Direct3D 12 device → maybe an unsupported GPU or driver.

6. Optimizing for Best Performance

6.1 Driver & Kernel

Use latest stable GPU driver; optimize Vulkan support (descriptor indexing, etc). VKD3D requires Vulkan 1.3 and certain features.
Run:

sudo apt install mesa-vulkan-drivers mesa-vulkan-drivers:i386  

(if using open drivers).

Item Recommendation Command
Linux kernel Use the latest stable (≥ 6.5) for better Vulkan scheduling. sudo apt install
linux-generic
(Ubuntu)
NVIDIA driver Use the latest R‑driver
(e.g., 560) with nvidia-drm.modeset=1
kernel parameter for
smoother fullscreen.
Edit /etc/default/grub:
GRUB_CMDLINE
_LINUX_DEFAULT
="quiet splash
nvidia-drm.modeset=1"

sudo update-grub
Vulkan loader Ensure libvulkan1 and libvulkan1:i386 are from the same version. apt list
--installed
CPU governor Set to performance while gaming. sudo cpupower
frequency-set -g
performance
IRQ affinity Bind GPU IRQs to a dedicated
CPU core for lower latency
(advanced).
cat /proc/interrupts

echo <cpu_mask> >
/proc/irq/<irq>/
smp_affinity

6.2 Simple API Smoke Test

  1. Pick a lightweight DX11 title (e.g., Portal 2).
  2. In Launch Options, set DXVK_HUD=all.
  3. Start the game.

You should see a HUD overlay like:

API = D3D11  Backend = Vulkan  FPS = 144

If you see DXVK and a respectable FPS, the translation path works.

6.3 Full‑Game Benchmarks

Tool What it measures How to use
Steam In‑Game FPS Counter Instant FPS Enable in Steam → Settings → In‑Game → FPS counter
MangoHud FPS, frame‑time, CPU/GPU usage, VRAM, temperatures Install (sudo apt install mangohud), then add MANGOHUD=1 to launch options
vkBasalt Post‑process effects (e.g., sharpening) – optional for visual quality Install and configure via VK_LAYER_PATH
Game‑internal benchmark Consistent scene, repeatable numbers Most AAA titles have a “Benchmark” option in the menus
GLMark2 / GPUTest Synthetic Vulkan benchmark (useful for hardware sanity check) sudo apt install glmark2-es2 – run glmark2-es2

Typical benchmarking workflow:

# 1. Set HUD & logging
export DXVK_HUD=version,devinfo,fps,api,gpu,drawcalls
export MANGOHUD=1
export MANGOHUD_CONFIG=cpu_temp,gpu_temp,ram,vram,frame_timing

# 2. Launch the game with a benchmark mode (if available)
steam steam://run/<APPID> -benchmark
# OR manually start from terminal:
PROTON_NO_ESYNC=1 DXVK_HUD=all %command%
Game
Proton
DXVK / VKD3D
Resolution
Full‑screen / Windowed
FPS (avg)
1% Low
0.1% Low
CPU % (avg)
GPU % (avg)
Temperature (CPU/GPU)
Notes

6.4 Proton‑Specific Tweaks

Variable When to use Example
PROTON_NO_ESYNC=1 Anti‑cheat incompatibility (EAC, BattleEye). PROTON_NO_ESYNC=1
%command%
PROTON_NO_FSYNC=1 Fixes stuttering in some titles (e.g., Valorant). PROTON_NO_FSYNC=1
%command%
PROTON_USE_WINED3D=1 As a last resort when Vulkan fails (very slow). PROTON_USE_WINED3D=1
%command%
PROTON_DISABLE_ESYNC=1 Alias for older Proton versions. PROTON_DISABLE_ESYNC=1
%command%
PROTON_MAX_THREADS=8 Limits internal thread pool (helpful on low‑core CPUs). PROTON_MAX_THREADS=8
%command%

Proton‑GE tips:

  • Keep the GE version synced with the latest Git commit (via ProtonUp‑Qt).
  • Some titles require a specific GE revision; check ProtonDB for the exact build number.

6.5 Game Settings & Resolution

Lowering resolution or disabling RT features helps when VKD3D has overhead.
Enable Vulkan path if available for native version (rather than DirectX translation).

Game Suggested Settings Reason
Cyberpunk 2077 (DX12) Enable DLSS (if available), set Ray Tracing to Off or Low, use Proton‑GE with VKD3D_CONFIG=dxr11 disabled. VKD3D still has a performance penalty for DXR; DLSS mitigates it.
Control (DX12) Use VSync off, MANGOHUD=1 to monitor frame‑time, set Resolution to 1440p or lower. VKD3D‑Proton performs best at 1080p‑1440p.
The Witcher 3 (DX11) Use DXVK HUD, enable NVIDIA DLSS via DXVK‑HUD overlay (if driver supports). DXVK already provides excellent performance; DLSS boosts further.
Minecraft (Windows 10 Edition) Use Proton‑Experimental, PROTON_NO_ESYNC=1. Anti‑cheat (EAC) is sensitive to ESYNC.

6.6 Multi-GPU / Rendering Device / Off‑load Scenarios

Scenario: Laptop with Intel integrated + NVIDIA dGPU (Optimus).

  1. Verify: HUD should display your NVIDIA GPU name (e.g., GeForce RTX 3070).

Force the dGPU for a specific game:

__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia DXVK_HUD=1 %command%

Enable off‑load:

sudo apt install nvidia-prime
# No further steps needed on recent Ubuntu – the driver sets up __NV_PRIME_RENDER_OFFLOAD automatically.

Scenario: Desktop with two NVIDIA GPUs (one primary display, one compute).

  • Launch with VK_DEVICE_SELECT_PCI_BUS_ID=0x01:00.0 to force rendering on the second card.

Find the PCI bus IDs:

lspci -nn | grep -i vga
# Example output: 01:00.0 VGA compatible \ 
 controller [0300]: NVIDIA Corporation \ 
 Device [10de:1f08] (rev a1)

6.7 Anti-Cheat & DRM Work‑arounds

Anti‑Cheat Known Issues Work‑around
EasyAntiCheat (EAC) Fails with ESYNC/FSYNC, crashes on launch. PROTON_NO_ESYNC=1
PROTON_NO_FSYNC=1 %command%
BattleEye Often blocks Proton entirely. Use Proton‑GE with PROTON_NO_ESYNC=1;
check ProtonDB for a game‑specific “run in Windows” fallback.
Steam DRM (SteamPipe) Usually fine; just ensure the game’s AppID
is correctly recognized by Proton.
None required.
Uplay/Ubisoft Connect Needs PROTON_USE_WINED3D=1
for some older titles.
Add PROTON_USE_WINED3D=1
(very slow, only for legacy).

Some anti-cheat (e.g., EAC, BattleEye) may block. Use ProtonDB to check workaround: e.g., PROTON_NO_ESYNC=1 %command%.

Always consult ProtonDB for the latest community fixes:
https://www.protondb.com/app/<APPID>

6.8 Collecting Logs & Crash Dumps

Wine/Proton logs:

# Enable verbose logging (temporary)
PROTON_LOG=1 %command%
# Logs appear at:
cat ~/.steam/steam/logs/proton.log

DXVK logs:

export DXVK_LOG_LEVEL=info   # or "warn", "debug"
DXVK_HUD=1 %command%
# Look at: ~/.local/share/dxvk/dxvk.log

VKD3D logs:

export VKD3D_DEBUG=1
%command%
# Check: ~/.local/share/vkd3d/vkd3d.log

When a game crashes:

  1. Open ~/.steam/steam/steamapps/compatdata/<APPID>/pfx/drive_c/users/steamuser/Local Settings/Application Data/CrashDumps/ (if present).
  2. Search for “Segmentation fault” in ~/.steam/steam/logs/ – the line right before the crash often hints at missing libs.

7. Step-by-Step: A Typical Setup Walk-through

Step Action Commands / UI
1 Update the system & kernel sudo apt update &&
sudo apt full-upgrade &&
sudo reboot
2 Install GPU driver (example NVIDIA) sudo apt install
nvidia-driver-560
3 Install Vulkan packages sudo apt install
libvulkan1 libvulkan1:i386
vulkan-tools
4 Enable i386 arch &
install 32‑bit libs
sudo dpkg --add-architecture
i386 &&
sudo apt update
&& sudo apt install
libvulkan1:i386
libgl1-mesa-glx:i386
5 Install Steam & enable Steam Play Launch Steam → Settings
→ Steam Play
→ tick both boxes
6 Install Proton‑GE via ProtonUp‑Qt (optional) protonup-qt
Add Proton → Proton‑GE
→ Install
7 Pick a DX11 game (e.g., Portal 2) Install via Steam
8 Force Proton‑GE for the game
(Properties → Compatibility)
UI: Right‑click → Properties
→ Compatibility → Force tool
Proton‑GE
9 Add launch options for HUD &
no ESYNC (if needed)
DXVK_HUD=1 MANGOHUD=1
%command%
10 Verify Vulkan path – start the game,
check HUD shows Backend = Vulkan.
Look at overlay.
11 Run the game’s internal benchmark
(menu → “Benchmark”) while HUD is active.
Press the in‑game key (usually
F10 for DXVK HUD).
12 Record numbers in a spreadsheet
(see Section 6.2).
N/A
13 Repeat for a DX12 title
(e.g., Control)
using Proton‑Experimental.
Same steps, but select
Proton‑Experimental.
14 Compare results: DXVK vs VKD3D,
note FPS difference.
Use the table you built.
15 If performance is low, try
newer DXVK/VKD3D via ProtonUp‑Qt,
or switch to Proton‑GE.
protonup-qt
Install latest build
→ re‑launch game.
16 Optional: Apply CPU governor &
disable ESYNC for anti‑cheat.
sudo cpupower frequency-set
-g performance
;
add PROTON_NO_ESYNC=1
17 Archive logs for future reference. tar czvf
benchmark-<GAME>-$(date +%F).tgz
~/.local/share/dxvk
~/.local/share/vkd3d
~/.steam/steam/logs

You now have a reproducible benchmark that can be shared on forums or used for future hardware upgrades.

8. Interpreting Your Results

  • If DX11 via DXVK runs near Windows performance, you’re in good shape.
  • If DX12 via VKD3D lags significantly, that’s a known limitation (overhead of translation + driver maturity) (NVIDIA Developer Forums)
  • Use frame-time consistency (not just FPS) to judge smoothness.
  • Check GPU utilization (nvidia-smi, radeontop, etc) to ensure hardware is used.

9. Common Pitfalls & Fixes

Problem Fix
Game won’t launch, “DirectX not supported” error Try a different Proton version or enable DXVK/HUD.
API shows “OpenGL” in HUD Probably using WineD3D fallback instead of DXVK — force DXVK or use Proton.
DX12 game shows poor performance Accept performance penalty, tweak settings, or wait for newer VKD3D/driver updates.
Anti-cheat/DRM fails Use ProtonDB for game-specific workaround, set PROTON_NO_ESYNC=1.

10. Frequently Asked Questions

Question Answer
Why does a game show “Backend = OpenGL” even though I have Vulkan installed? Either the Vulkan loader cannot find the ICD (install libvulkan1:i386) or the game’s Proton version is too old to support DXVK. Update Proton or install DXVK manually.
Can I use Nvidia’s DLSS with DXVK? Yes, DXVK forwards the NVAPI call to the driver, which then applies DLSS. Enable DLSS in the game’s graphics options and watch the FPS jump.
Is there a way to get “RTX‑on” on a DX11 game? DXVK does not support RTX; you need a DX12 version of the game (or a Vulkan native build).
What’s the benefit of Proton‑GE over Proton‑Experimental? GE includes latest DXVK/VKD3D patches, sometimes experimental features (e.g., Vulkan 1.3 optimizations) before they land in official Proton.
My game runs but crashes after a few minutes. Check dxvk.log for “GPU hang” messages. Try PROTON_MAX_THREADS=4 or lower the graphics settings.
Can I use NVIDIA’s G-Sync with Proton? Yes – just enable G-Sync in the NVIDIA Control Panel (Linux driver) and keep VSync off (vblank_mode=0).

11. Future & What to Watch

  • VKD3D-Proton receives regular updates (v2.14 adds DLSS3 support, improved DXR).
  • Vulkan drivers continue to improve — key for translation layers.
  • Native Vulkan ports of games bypass translation overhead. Consider native versions when available.

12. Summary

Running DirectX games on Linux is absolutely possible and getting better every year. The translation stack (Wine + Proton + DXVK + VKD3D) enables you to launch many Windows-only games.

  • For DirectX 9/10/11: DXVK → Vulkan is solid.
  • For DirectX 12: VKD3D → Vulkan works, but performance may lag behind Windows.
    By configuring drivers, enabling Steam Play, setting appropriate launch options, and benchmarking you can tune your system to get the best from your hardware.
    Think of this guide as your toolkit to navigate the DirectX-on-Linux terrain — install, configure, test, benchmark, tweak, and repeat until you have a smooth, playable experience.

Enjoy your gaming!

Read next

Automating GRUB Configuration Across Linux Distributions

In this post, we’re going to explore the grub.sh script, which is designed to handle the configuration and hardening of GRUB across various Linux distributions. We’ll go over each line of the script to understand what it does and how it contributes to the overall configuration.