Wrappers

From Emulation General Wiki
Revision as of 15:09, 9 March 2026 by Intruso (talk | contribs) (2000s and later APIs: Adding KosmicKrisp)
Jump to navigation Jump to search

A wrapper is a reimplementation of a library, where the goal is to substitute the original API with a better-supported interface. It works as a drop-in replacement for the original library, since a lot of software usually bundled it as-is without any fine-tuning. Wrappers are most common for proprietary interfaces that are either abandoned or otherwise platform-specific.

See High and low-level emulation page for more information about terms like "hypervisors", "simulators", "compatibility layers", "wrappers", "FPGA" and "software emulators".

Before diving in;

'90s APIs

(Glide, DirectDraw 1-7, Direct3D 2-7[N 1], OpenGL 1.x)

During the 90s, many IBM-Compatible PC game developers used 3dfx's Glide API for hardware accelerated 3D games, which is compatible only with 3dfx Voodoo cards. Neither NVIDIA nor ATI supported Glide, hence a wrapper is needed to play Glide games on non-Voodoo hardware.

Games using older versions of DirectDraw or Direct3D can also benefit from wrappers, since their interfaces may not work properly on newer systems. Wrappers can also enable various overrides and enhancements, such as ReShade.

Type Name Platform(s) Latest version Translates Into Compatibility License Active Recommended
Graphics dgVoodoo2 Windows 2.87.5 Glide 2.11-3.10
DirectDraw 1-7
Direct3D 2-7
Direct3D 11, 12 ? Proprietary
WineD3D Windows Linux macOS 11.0 (Linux, macOS)
11.10 (Windows)[N 2]
DirectDraw 1-7
Direct3D 2-7
Vulkan
OpenGL
? LGPLv2.1 (Copyleft)
D7VK Windows Linux 1.2 Direct3D 5-6 (experimental)
Direct3D 7
DirectDraw (partial)[N 3]
Vulkan zlib License (Permissive)
DxWnd Windows 2.06.15[N 2] DirectDraw 1-7
Direct3D 2-7
no API conversion GPLv2 (Copyleft)
glrage Windows r10 ATI3DCIF
DirectDraw 2
OpenGL 3.3 LGPLv3 (Copyleft)
RReady (Rendition Verite wrapper) Windows RReady Rendition Verité RRedline
Speedy3D
OpenGL Proprietary
S3d wrappers Windows S3d wrappers S3D
MSI95
Software Proprietary
nGlide Windows 2.10 Glide Vulkan
Direct3D 9
Proprietary
DxWrapper Windows v1.4.7900.25 DirectDraw 1-7
Direct3D 2-7
Direct3D 9[N 4]
Direct3D 7 (for Direct3D 2-6)
DirectDraw 7 (for DirectDraw 1-6)
? zlib License (Permissive) ~
DDrawCompat Windows 0.7.1 DirectDraw 1-7
Direct3D 2-7
GDI (Partially)
no API conversion BSD-0-Clause (Permissive) ~
cnc-ddraw Windows
Linux macOS [N 5]
6.6 DirectDraw 1-7 GDI
OpenGL
Direct3D 9
MIT (Permissive) ~
DXGL Windows 0.5.27 DirectDraw 1-7 OpenGL LGPLv2.1 (Copyleft) ~
Glidos Windows 1.59 Glide (DOS) ? ?
dgVoodoo Windows v1.50b2 Glide 2.11-2.45 Direct3D 7, 9 Proprietary
OpenGlide Windows 0.09 Alpha Glide OpenGL Apache 2.0 (Permissive)
psVoodoo Windows 0.17 Glide Direct3D 9 LGPL (Copyleft)
Input XOutput Windows 3.32 DirectInput XInput MIT (Permissive)
DxWrapper Windows v1.4.7900.25 DirectInput 1-7 DirectInput 8 zlib License (Permissive) ~
Sound DSOAL Windows git
dsoal-XP
DirectSound OpenAL LGPLv2.1 (Copyleft) TBD
  1. Direct3D 1 is not listed, since DirectX 1 did not have a Direct3D component. The first release was Direct3D 2. The internal numbers of Direct3D pre-7 actually differ from the corresponding DirectX, but they were not referred to as such, outside of low-level dev material, possibly to avoid confusion.
  2. 2.0 2.1 DxWnd 2.05.70, WineD3D 1.7.52 or 1.9.7-staging(partially) versions are the latest compatible versions with Windows XP (if OneCoreAPI is not installed to OS), for getting these old "WineD3D for Windows" builds use this link. Also you can use JHRobotics port for using WineD3D on Windows 9x (Wine9x) or Windows XP.
  3. Does not support DirectDraw-only games
  4. Through dd7to9
  5. Linux and macOS are supported through wine.

Comparisons

dgVoodoo2
Supports Glide 2.11, 2.45, 3.10, 3.1 Napalm, all versions of DirectDraw, and Direct3D up to version 7. Outputs Direct3D 11 and Direct3D 12 with different device types as wrapping output, such as hardware or software rendering.
WineD3D
Wine's internal wrapper. Wraps DirectDraw and Direct3D up to 7 into Vulkan and OpenGL. It works pretty well for running older Direct3D games, though it does not come with a Glide implementation of its own. A custom build is available for Windows here.
nGlide
A great Glide wrapper, supporting all three public versions (2.11, 2.60 and 3.10) but it's closed-source. It originally only used Direct3D 9 until Vulkan output was added in 2.0, allowing it to work under Linux using Wine 2.10.0 and newer.[1] nGlide also supports high resolution modes. See the compatibility list.
DXGL
Reimplements DirectDraw using OpenGL. It is considered alpha software despite many applications working.
glrage
Reimplements ATI3DCIF, an API from ATI used in a handful of games, and DirectDraw 2 over OpenGL. Originally designed specifically for Tomb Raider 1/UB patched with ATIRage patch, currently also supports Assault Rigs and Wipeout. Additionally, it applies some improvements, fixes and QoL changes to the games.

2000s and later APIs

(Direct3D 8 and higher, OpenGL 2.x and higher, Vulkan)

Modern Windows games will likely need one of these wrappers to work on other platforms. Usually these are not separate downloads, and will come packaged into compatibility layers like Proton, Wine, or CrossOver.

The term "wrapper" is not entirely accurate for some software listed in this table, such as OpenAL Soft. Unlike a true wrapper, which translates or redirects API calls to another system (e.g., DSOAL mapping OpenAL to DirectSound3D), OpenAL Soft is a complete, open-source software implementation of the OpenAL 3D audio API. It directly provides full functionality, including positional audio, distance attenuation, Doppler effects, and environmental audio processing, through software-based rendering. Operating independently of hardware acceleration, OpenAL Soft supports multiple platforms (e.g., Linux, Windows, macOS) and audio backends (e.g., ALSA, PulseAudio, WASAPI), making it a standalone audio engine rather than a wrapper layer.

Name Platform(s) Latest Version Translates Into License Active Recommended
dgVoodoo2 Windows 2.87.5 Direct3D 8-9 Direct3D 11, 12 Proprietary
DXVK Windows Linux 3.0.2 Direct3D 8-11 Vulkan zlib License (Permissive)
WineD3D Windows Linux macOS 11.0 (Linux, macOS)
11.10 (Windows)
Direct3D 8-11 Vulkan
OpenGL
LGPLv2.1 (Copyleft)
VKD3D-Proton Windows Linux 3.0.1 Direct3D 12 Vulkan LGPLv2.1 (Copyleft)
Zink Windows Linux git
pal1000's Windows builds[N 1]
OpenGL 2.1-4.6 Vulkan MIT (Permissive)
d3d8to9 Windows 1.12.0 Direct3D 8 Direct3D 9 BSD-2-Clause (Permissive)
Mesa3D for Windows + MesaInjector Windows 20.1.8
lightningterror's builds
vogonsdrivers builds
OpenGL Software MIT (Permissive)
grvk Windows 0.5.0 Mantle Vulkan 1.2 zlib License (Permissive)
MoltenVK macOS iOS 1.3.268 Vulkan Metal Apache 2.0 (Permissive)
KosmicKrisp macOS Vulkan 1.3/1.4 Metal style="background: #DFD; color: black; vertical-align: middle; text-align: center; " class="table-green" data-sort-value="1" | MIT (Permissive) TBD
OpenAL Soft Windows 1.24.3 OpenAL no API conversion LGPL
GLon12 Windows Xbox git
pal1000's Windows builds
OpenGL Direct3D 12 MIT (Permissive) ~
D3D9On12 Windows git Direct3D 9 Direct3D 12 MIT (Permissive) ~
D3D11On12 Windows git Direct3D 11 Direct3D 12 MIT (Permissive) ~
3Dmigoto Windows 1.3.16 Direct3D 11 (Stereo3D) no API conversion GPLv3 (Copyleft) ~
VorpX ($) Windows v21.3.2 Direct3D 11 (Stereo3D) no API conversion Proprietary ~
Indium Linux Metal Vulkan BSD-0-Clause (Permissive) ~ ~
vkd3d Linux [https://source.winehq.org/git/vkd3d.git/

This page is a candidate for deletion. The reason is:

"duplicate template"

If you disagree with the candidate, explain why at the talk page or improve the page and remove the {{delete}} tag.

Remember to check for any active links to the page and its history before deleting.

]
Direct3D 12 Vulkan LGPLv2.1 (Copyleft)
D8VK Windows Linux 1.0 Direct3D 8 Vulkan zlib License (Permissive) [N 2]
Gallium Nine Linux v0.10 (WIP) Direct3D 9 Gallium LGPLv2.1 (Copyleft) [N 3]
ToGL Windows Linux Direct3D 9.0c OpenGL MIT (Permissive)
  1. Requires setting environment variable GALLIUM_DRIVER=zink
  2. Merged to DXVK. Use that instead
  3. Deprecated in favor of more portable translation layers, such as DXVK or WineD3D

Comparisons

dgVoodoo2
Supports Direct3D 8-9. Outputs Direct3D 11 and Direct3D 12 with different device types as wrapping output, such as hardware or software rendering.
DXVK
It was originally designed to accelerate support for Direct3D 11 games running under Wine since a native implementation seemed unlikely. Today it is bundled with Proton. D9VK was later merged to add Direct3D 9 support, and D8VK was also merged to add Direct3D 8 support.
WineD3D
Wine's internal wrapper. Wraps Direct3D 8-11 into Vulkan and OpenGL. For newer APIs it has more bugs than DXVK. A custom build is available for Windows here.
VKD3D-Proton
A fork of VKD3D funded by Valve, which is more developed and has experimental support for DXR via VK_KHR_ray_tracing. Requires DXVK's dxgi.dll file to work on Windows.
vkd3d
Wine's work-in-progress Direct3D 12 to Vulkan wrapper.
d3d8to9
Not as versatile as dgVoodoo2, however it's the only wrapper that can wrap Direct3D 8 into 9. Its main advantage is Windows XP support, which dgVoodoo2 lacks. It's specifically useful for Windows XP running in VMware, since VMware's Direct3D 8 acceleration has graphical and/or performance issues.
Indium
A implementation of Metal on top of Vulkan, originally devolped by iglunix and later by Darling the open-source macOS compatibility layer.
MoltenVK
Developed by the Brenwill Workshop under the Khronos Group, it re-implements Vulkan for Metal. Emulators like Dolphin and DuckStation use MoltenVK instead of a native Metal renderer to support Apple devices.
Gallium Nine
An implementation of the Direct3D 9 library on top of the Gallium driver for Linux. By using calls native to Linux, applications running under Wine run "at near-native speeds" according to the maintainers. The caveat is that it only works on Mesa, not NVIDIA's proprietary driver.
Zink
A "just-in-case" implementation of OpenGL on top of Vulkan first introduced in 2018 by Collabora for the Mesa driver.[2]

See also

References