Independent guide · not affiliated with the DXVK project or Valve · downloads always link to the official GitHub

Try: d3d9.maxAvailableMemory, DXVK_HUD, GTA IV, Failed to create Vulkan instance

EXPLAINER · TECHNICAL, BUT READABLE · DXVK 3.1.1

How DXVK turns DirectX into Vulkan

When a game calls Direct3D, DXVK's DLLs receive the call instead of Microsoft's, record it as Vulkan commands on a worker thread, translate the game's DXBC or Direct3D 9 shaders into SPIR-V, and present frames through a Vulkan swap chain. Since 3.0 a new compiler (dxbc-spirv) does the shader work in the background and caches results on disk.
Checked
2026-11-07
On this page
  1. The path of one frame
  2. Why shaders are the hard part
  3. What changed in 3.0
  4. DXGI: the piece people forget
  5. Where the CPU time goes
  6. Built-in game profiles
  7. Glossary
How we checked this

Direct3D is the set of calls a game uses to ask for pictures. Vulkan is a different set, used by most graphics drivers on Linux and available on Windows too. DXVK sits between them. This page follows one frame through that translation, so you can see where time goes and why some things (first-run stutter, odd GPU names, a missing dxgi.dll) happen.

The path of one frame

Click a step. Each one names the HUD item that measures it, so you can watch the same numbers on your own screen.

Step 1: Game calls Draw. The game asks Direct3D to draw something. Because DXVK’s DLLs sit where Microsoft’s would, the call lands in DXVK instead.

HUD item DXVK_HUD=drawcalls Draw calls, dispatches, render passes and barriers counted per frame.

Simplified illustration of the flow, not a measurement. The HUD items are listed on the HUD page.

Here is the full HUD on a Direct3D 11 test program under Wine. Draw calls, pipelines, shaders and CS chunks are the lines that map to steps 1, 3, 4 and 5.

DXVK_HUD=full on Direct3D 11: every HUD line, from the version banner down to the shader cache line (F18).2026-11-07 · T-LAB-01
Triangle test window with the full DXVK HUD: version, feature level, driver, FPS, draw calls, pipelines, memory, cache

Why shaders are the hard part

A shader is a small program that runs on the GPU. Games ship them as DXBC bytecode (Direct3D 10 and 11) or the older Direct3D 9 shader bytecode. Vulkan drivers do not accept either: they want SPIR-V, Vulkan’s own format. So DXVK translates every shader it sees.

Translation is only half the job. A GPU runs a complete pipeline, which bundles the shaders with state such as blending and the vertex layout. The driver has to compile one pipeline for each combination the game uses, and a game can ask for a new combination at any moment. If that compile happens while a frame is being drawn, the frame waits: that is shader stutter.

DXVK 2.0 added support for the Graphics Pipeline Library (GPL), a Vulkan extension that lets the driver compile pipeline parts ahead of time, while the game is still loading its own shaders. The README says games that only reveal their shaders at draw time, such as most Unreal Engine titles, will still stutter somewhat, though less than without it. Our shader stutter page shows what this looks like and what you can change.

What changed in 3.0

According to the 3.0 release notes:

  • dxbc-spirv. A new compiler, kept in its own repository, handles every shader model, including Direct3D 9, and replaces the older translators. All compilation now happens on worker threads.
  • A shader cache on disk. We saw it create a .dxvk.bin and a .dxvk.lut file per game in %LOCALAPPDATA%\dxvk, and a log line starting Created cache file: (F19).
  • A new binding model. On drivers with descriptor heap support DXVK uses it; otherwise our 3.1.1 log on a software driver printed Binding model: Descriptor buffer and Graphics pipeline libraries supported (F20).

The notes do not describe 3.0 as a general FPS gain, and we have not measured one. The point is smoother loading and less work on the thread that draws. See DXVK 3.x for who should upgrade.

DXGI: the piece people forget

Direct3D does not draw to a window by itself. A second API, DXGI, lists your GPUs (adapters) and owns the swap chain: the set of images that are drawn into while another is on screen. DXVK ships its own dxgi.dll and maps swap chains onto a Vulkan swap chain.

Two things follow from that, and we tested both:

  • A Direct3D 11 game needs dxgi.dll as well as d3d11.dll. With only d3d11.dll copied, device creation failed with D3D11CreateDevice: Failed to create swap chain and the app received error 0x887A0004, on Windows Server 2025, Windows Server 2022 and Wine (F06). The DLL page lists which files each API needs.
  • The GPU name can differ by API. On a GPU whose vendor DXVK does not treat as AMD, NVIDIA or Intel, Direct3D 9 reported AMD Radeon RX 6700 XT and logged D3D9: Hiding actual GPU, reporting, while Direct3D 11 reported the real name (F28). This is a compatibility choice, not a bug, and it can be changed with dxvk.conf.

Where the CPU time goes

Every draw call a game makes passes through DXVK’s front end. In some games DXVK spends less CPU per call than the layer it replaces, so it can help when the CPU is the limit. In others it adds work: it validates state, records commands and compiles shaders, and some of that cannot be moved to another thread.

That is why there is no honest one-line answer. Our lab machines have no real GPU, so we cannot give game numbers here. We did measure draw-call scaling on a software renderer, and we publish it only as a demonstration of method on How we test: on a CPU renderer it says nothing about games. For measured game results see Does DXVK increase FPS? once it has data, and DXVK vs WineD3D.

Built-in game profiles

DXVK carries 263 built-in profiles at version 3.1.1 (262 in its profile table plus one for Steam Deck, counted from its source). When a game’s executable name matches, DXVK sets options for it automatically. Five from our extract of 100 well-known titles:

UPSTREAM
Examples of built-in DXVK profiles at v3.1.1 (upstream source)
Watch Dogs 2d3d11.forceComputeUavBarriers = TrueAdds synchronisation the game needs to render correctly
Borderlands 2d3d9.lenientClear = True, d3d9.supportDFFormats = False, d3d9.floatEmulation = StrictDirect3D 9 behaviour tweaks for this engine
The Sims 2 (and spin-offs)d3d9.customDeviceDesc = GeForce 7800 GTX, d3d9.maxAvailableMemory = 2048 and morePresents an era-appropriate GPU and limits memory in a 32-bit game
Skyrim Special Editiond3d11.cachedDynamicResources = aChanges how dynamic buffers are cached
Crysis / Crysis Warheadd3d9.maxFrameRate = -1, dxgi.maxFrameRate = -1Turns off any DXVK frame cap for these games

The last column is our interpretation of the option names, not upstream’s stated reason. Options are explained in the options reference and how to add your own is on the dxvk.conf page.

Glossary

Vulkan

A graphics and compute API from the Khronos Group. Most GPU drivers on Linux, and many on Windows, expose it. It is lower level than Direct3D 9 to 11, so the translator has to do work the old APIs hid.

SPIR-V

Vulkan’s shader format. DXVK converts every game shader into it.

DXBC

The bytecode Direct3D 10 and 11 games ship their shaders in. Direct3D 9 uses an older format.

GPL (Graphics Pipeline Library)

A Vulkan extension that allows pipelines to be compiled in parts and ahead of time. In the DXVK release notes “GPL” always means this, not the GNU licence.

Swap chain

The queue of images a game draws into, one at a time, while the previous one is shown on screen.

DXGI

The Windows layer that lists graphics adapters and manages swap chains. DXVK replaces it with its own dxgi.dll.

ICD and loader

The Vulkan loader finds the driver (the installable client driver, ICD) your GPU maker supplies and passes DXVK’s Vulkan calls to it. If no working ICD is found, DXVK cannot start; see error messages.

wined3d

Wine’s own Direct3D implementation. It is what runs Direct3D games under Wine when DXVK is not installed.

Questions people ask

Is DXVK an emulator?

No. Nothing is emulated: the game's own code runs normally on your CPU. DXVK only replaces the graphics API the game calls, turning Direct3D calls into Vulkan calls.

Why does DXVK stutter the first time?

Each combination of shaders and render state needs a pipeline compiled by your GPU driver. If that happens in the middle of a frame, the frame waits. DXVK 2.0 and newer can compile earlier with the Graphics Pipeline Library, and 3.x keeps a shader cache on disk, but games that only reveal their shaders at draw time can still stutter.

Does DXVK use more CPU?

It does extra work on the CPU to translate calls, but spreads some of it over worker threads. Whether that is a net gain or loss depends on the game and the driver. We have no real-game measurements yet, so we make no claim either way.

What is GPL in DXVK?

GPL means Graphics Pipeline Library, a Vulkan extension that lets a driver compile parts of a pipeline early. It has nothing to do with the GNU licence. DXVK 2.0 introduced support for it.

Why does my Direct3D 9 game think I have an AMD card?

DXVK hides GPUs it does not recognise from Direct3D 9 games. In our test on a GPU with an unknown vendor, Direct3D 9 reported an AMD Radeon RX 6700 XT while Direct3D 11 reported the real name (F28).

Sources

  1. DXVK README at v3.1.1 · accessed 2026-11-07
  2. DXVK 3.0 release notes · accessed 2026-11-07
  3. dxbc-spirv repository · accessed 2026-11-07
  4. Khronos: VK_EXT_graphics_pipeline_library · accessed 2026-11-07