Difference between revisions of "Wrappers"

From Emulation General Wiki
Jump to navigation Jump to search
(2000's and later APIs)
('90s APIs)
 
(136 intermediate revisions by 26 users not shown)
Line 1: Line 1:
{{WIP}}
+
A '''wrapper''' is a reimplementation of a [[wikipedia:Library (computing)|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.
A '''wrapper''' is a common name for a technology used to transparently replace calls made to one graphics API with calls made to another. This can be used to run software on systems they were not designed for, such as running old PC games made for 3Dfx Glide graphics card on modern Windows 10 systems, or running modern Windows-only DirectX 11 games on Linux. A wrapper often takes the form of a shared library that replaces the original, though it can also be a standalone interceptor. Wrappers aren't needed for OpenGL since its APIs don't require much translation. Despite this, [https://www.collabora.com/news-and-blog/blog/2018/10/31/introducing-zink-opengl-implementation-vulkan/ a wrapper was created for it anyway].
 
  
==90's APIs==
+
See [[Emulation Accuracy]] page for more information about terms like "[[Hypervisors|hypervisors]]", "[[Simulators|simulators]]", "[[Compatibility_layer|compatibility layers]]", "[[Wrappers|wrappers]]", "[[FPGA|FPGA-based hardware cloning]]" and "[[:Category:Emulators|software emulators]]".
To understand why wrappers are needed for older games, it's important to understand that during the 90s the graphics card market for [[Intel CPUs|IBM PCs and compatibles]] was in its infancy, and Direct3D wasn't an automatic choice for developers. Some games were often designed for 3Dfx's Glide API so that it would run with their Voodoo card. With 3dfx going bankrupt however, support for Glide didn't stay around and the API was made open-source, but NVIDIA and AMD never incorporated it into their drivers. A wrapper is now needed to play these games with hardware acceleration, or if we're lucky the game gets [[Game Engine Recreations and Source Ports|a port]] to other APIs instead.
 
  
Even games using older versions of DirectDraw or Direct3D might benefit from wrappers. Since they can have compatibility or rendering issues on modern systems. Wrappers also enable various overrides and enhancements, such as the use of third-party tools like [https://reshade.me/ ReShade], to enhance or improve the gaming experience.
+
=='90s APIs==
 +
(Glide, DirectDraw 1-7, Direct3D 2-7<ref group=N name=>Direct3D 1 doesn't exist, since DirectX 1 did not have a Direct3D component. The first release was Direct3D 2.</ref>, OpenGL 1.x)
 +
 
 +
During the 90s, many [[POS_(Pong_Consoles)_CPUs_and_Other_Chips#Intel_CPU.27s|PC]] game developers chose to use 3Dfx's Glide API for their Voodoo graphics cards. These developers didn't anticipate that 3Dfx would run out of money trying to compete with NVIDIA's offering, and in 2000 NVIDIA bought them for their IP assets (presumably to improve their own cards). Despite the API getting an open source release in 2003, neither NVIDIA or ATI adopted support for Glide in their own drivers, meaning a wrapper is now needed to play these games with hardware acceleration. Or, if we're lucky, the game gets [[Game Engine Recreations and Source Ports|ported or reimplemented]] to use other APIs instead.
 +
 
 +
Even games using older versions of DirectDraw or Direct3D can benefit from wrappers, since those interfaces may not even work properly on newer systems. Wrappers can even enable various overrides and enhancements, such as [https://reshade.me/ ReShade].
  
 
{| class="wikitable sortable" style="text-align:center;"
 
{| class="wikitable sortable" style="text-align:center;"
 
|-
 
|-
! scope="col"|Name
+
! scope="col" colspan="2" | Name
 
! scope="col"|OS
 
! scope="col"|OS
 
! scope="col"|Latest Version
 
! scope="col"|Latest Version
 
! scope="col"|Translates
 
! scope="col"|Translates
 
! scope="col"|Into
 
! scope="col"|Into
 +
! scope="col"|Compatibility
 +
! scope="col"|<abbr title="Free and Open-Source Software">FOSS</abbr>
 
! scope="col"|Active
 
! scope="col"|Active
 
! scope="col"|[[Recommended Emulators|Recommended]]
 
! scope="col"|[[Recommended Emulators|Recommended]]
 +
|-
 +
| rowspan=14 |Graphics
 +
|[http://dege.freeweb.hu/dgVoodoo2/ dgVoodoo2]
 +
|align=left|{{Icon|Windows}}
 +
|[http://dege.freeweb.hu/dgVoodoo2/dgVoodoo2/ {{DgVooDoo2Ver}}]
 +
|Glide 2.11-3.10<br>DirectDraw 1-7<br>Direct3D 2-7
 +
|Direct3D 11, 12
 +
|[https://www.vogons.org/viewforum.php?f=59 ?] ||{{✗}} ||{{✓}} ||{{✓}}
 +
|-
 +
|[[Wine|WineD3D]]
 +
|align=left|{{Icon|Windows|Linux|macOS}}
 +
|[https://wiki.winehq.org/Download {{WineVer}}] <small>(Linux, macOS)</small><br/>[https://fdossena.com/?p=wined3d/index.frag {{WineDevVer}}] <small>(Windows)</small><ref group=N name=XPcompatibility>DxWnd 2.05.70, WineD3D 1.7.52 or 1.9.7-staging(partially) versions are the latest compatible versions with Windows XP (if [https://github.com/Skulltrail192/One-Core-API-Binaries OneCoreAPI] is '''not''' installed to OS), for getting these old "WineD3D for Windows" builds use [https://www.vogonsdrivers.com/wrappers/files/DirectX/OpenGL/WineD3D/2000+/ this link]. Also you can use [https://github.com/JHRobotics/wine9x?tab=readme-ov-file#wined3d-port-for-windows-9x JHRobotics port for using WineD3D on Windows 9x or Windows XP].</ref>
 +
|DirectDraw 1-7<br>Direct3D 2-7
 +
|Vulkan<br>OpenGL
 +
|[https://appdb.winehq.org/objectManager.php?sClass=application&sTitle=Browse%20Applications&sOrderBy=appName&bAscending=true ?] ||{{✓}} ||{{✓}} ||{{✓}}
 +
|-
 +
|[https://sourceforge.net/projects/dxwnd DxWnd]
 +
|align=left|{{Icon|Windows}}
 +
|[https://sourceforge.net/projects/dxwnd/files/Latest%20build/ {{DxWndVer}}]<ref group=N name=XPcompatibility></ref>
 +
|DirectDraw 1-7<br>Direct3D 2-7
 +
|<small>no API conversion</small>
 +
| ||{{✓}} ||{{✓}} ||{{✓}}
 
|-
 
|-
 
|[http://www.zeus-software.com/downloads/nglide nGlide]
 
|[http://www.zeus-software.com/downloads/nglide nGlide]
Line 21: Line 48:
 
|[http://www.zeus-software.com/downloads/nglide 2.10]
 
|[http://www.zeus-software.com/downloads/nglide 2.10]
 
|Glide
 
|Glide
|Vulkan, Direct3D 9
+
|Vulkan<br>Direct3D 9
|{{✓}} ||{{✓}}
+
| ||{{✗}} ||{{✗}} ||{{✓}}
 +
|-
 +
|[https://github.com/elishacloud/dxwrapper DxWrapper]
 +
|align=left|{{Icon|Windows}}
 +
|[https://github.com/elishacloud/dxwrapper/releases v1.0.6900.22]
 +
|DirectDraw 1-7<br>Direct3D 2-7
 +
|Direct3D 9<ref group=N name=dxwrapper>Through '''dd7to9'''.</ref><br>Direct3D 7 (for Direct3D 2-6)<br>DirectDraw 7 (for DirectDraw 1-6)
 +
|[https://github.com/elishacloud/dxwrapper/wiki/DirectDraw-to-Direct3D9-Conversion#table-key ?] ||{{✓}} ||{{✓}} ||{{~}}
 
|-
 
|-
|[http://dege.freeweb.hu/ dgVoodoo 2]
+
|[https://github.com/narzoul/DDrawCompat DDrawCompat]
 
|align=left|{{Icon|Windows}}
 
|align=left|{{Icon|Windows}}
|[http://dege.freeweb.hu/dgVoodoo2/dgVoodoo2.html 2.63.1]
+
|[https://github.com/narzoul/DDrawCompat/tags v0.5.1]
|Glide, DirectX 1-9
+
|DirectDraw 1-7<br>Direct3D 2-7<br>GDI (Partially)
|Direct3D 11
+
|<small>no API conversion</small>
|{{✓}} ||{{✓}}
+
| ||{{✓}} ||{{✓}} ||{{~}}
 
|-
 
|-
|[[Wine|WineD3D]]
+
|[https://github.com/FunkyFr3sh/cnc-ddraw cnc-ddraw]
|align=left|{{Icon|Windows|Linux|macOS}}
+
|align=left|{{Icon|Windows}}<br>{{Icon|Linux|macOS}}<ref group=N name=cnc-ddraw>Linux and macOS are supported through wine.</ref>
|[https://wiki.winehq.org/Download {{WineVer}}] <small>(Linux, macOS)</small><br /> [https://fdossena.com/?p=wined3d/index.frag {{WineDevVer}}] <small>Windows</small>
+
|[https://github.com/FunkyFr3sh/cnc-ddraw/releases 6.3]
|DirectX 1-11
+
|DirectDraw 1-7
|OpenGL
+
|GDI<br>OpenGL<br>Direct3D 9
|{{✓}} ||{{✓}}
+
| ||{{✓}} ||{{✓}} ||{{~}}
 
|-
 
|-
 
|[https://www.dxgl.org/ DXGL]
 
|[https://www.dxgl.org/ DXGL]
 
|align=left|{{Icon|Windows}}
 
|align=left|{{Icon|Windows}}
|[https://www.dxgl.org/downloads/ 0.5.17]
+
|[https://www.dxgl.org/downloads/ {{DXGLVer}}]
|DirectX 1-7
+
|DirectDraw 1-7
 
|OpenGL
 
|OpenGL
|{{✓}} ||{{}} <small>WIP</small>
+
| ||{{✓}} ||{{✓}} ||{{~}}
 
|-
 
|-
 
|[http://www.glidos.net/ Glidos]
 
|[http://www.glidos.net/ Glidos]
 
|align=left|{{Icon|Windows}}
 
|align=left|{{Icon|Windows}}
|[http://www.glidos.net/download.html 1.53b]
+
|[http://www.glidos.net/download.html 1.59]
 
|Glide <small>(DOS)</small>
 
|Glide <small>(DOS)</small>
 
|?
 
|?
|{{✗}} ||?
+
| ||{{✓}} ||{{✓}} ||{{✗}}
 +
|-
 +
|[http://dege.freeweb.hu/dgVoodoo/dgVoodoo/ dgVoodoo]
 +
|align=left|{{Icon|Windows}}
 +
|[http://dege.freeweb.hu/dgVoodoo/dgVoodoo/ v1.50b2]
 +
|Glide 2.11-2.45
 +
|Direct3D 7, 9
 +
| ||{{✗}} ||{{✗}} ||{{✗}}
 
|-
 
|-
 
|[http://openglide.sourceforge.net/ OpenGlide]
 
|[http://openglide.sourceforge.net/ OpenGlide]
Line 57: Line 98:
 
|Glide
 
|Glide
 
|OpenGL
 
|OpenGL
|{{✗}} ||?
+
| ||{{✓}} ||{{✗}} ||{{✗}}
 
|-
 
|-
 
|[https://sourceforge.net/projects/psvoodoo/ psVoodoo]
 
|[https://sourceforge.net/projects/psvoodoo/ psVoodoo]
 
|align=left|{{Icon|Windows}}
 
|align=left|{{Icon|Windows}}
|[https://sourceforge.net/projects/psvoodoo/files/latest/download 0.13]
+
|[https://sourceforge.net/projects/psvoodoo/files/latest/download 0.17]
 
|Glide
 
|Glide
 
|Direct3D 9
 
|Direct3D 9
|{{✗}} ||?
+
| ||{{✓}} ||{{✗}} ||{{✗}}
 +
|-
 +
|[https://github.com/ata4/glrage glrage]
 +
|align=left|{{Icon|Windows}}
 +
|[https://github.com/ata4/glrage/releases/latest r10]
 +
|ATI3DCIF<br>DirectDraw 2
 +
|OpenGL 3.3
 +
| ||{{✓}} ||{{✗}} ||{{✓}}
 +
|-
 +
|[https://apps.microsoft.com/detail/9NRCQJ8VLGTK?hl=en-us&gl=US RReady (Rendition Verite wrapper)]
 +
|align=left|{{Icon|Windows}}
 +
|[https://apps.microsoft.com/detail/9NRCQJ8VLGTK?hl=en-us&gl=US RReady Rendition Verité]
 +
|RRedline
 +
|OpenGL
 +
| ||{{✗}} ||{{✓}} ||{{✓}}
 +
|-
 +
| rowspan=2 |Input
 +
|[https://github.com/csutorasa/XOutput XOutput]
 +
|align=left|{{Icon|Windows}}
 +
|[https://github.com/csutorasa/XOutput/tags 3.32]
 +
|DirectInput
 +
|XInput
 +
| ||{{✓}} ||{{✓}} ||{{✓}}
 +
|-
 +
|[https://github.com/elishacloud/dxwrapper DxWrapper]
 +
|align=left|{{Icon|Windows}}
 +
|[https://github.com/elishacloud/dxwrapper/releases v1.0.6900.22]
 +
|DirectInput 1-7
 +
|DirectInput 8
 +
| ||{{✓}} ||{{✓}} ||{{~}}
 +
|-
 +
| rowspan=1 |Sound
 +
|[https://github.com/kcat/dsoal DSOAL]
 +
|align=left|{{Icon|Windows}}
 +
|[https://github.com/kcat/dsoal/actions git]
 +
|DirectSound
 +
|OpenAL
 +
| ||{{✓}} ||{{✓}} ||{{TBD}}
 
|-
 
|-
 
|}
 
|}
 +
 +
<references group=N />
  
 
===Comparisons===
 
===Comparisons===
;[http://www.zeus-software.com/downloads/nglide nGlide]
+
;nGlide
Currently the best Glide wrapper, but it's closed-source. All three public API versions are supported; 2.11, 2.60 and 3.10, and it reads them using Direct3D 9. Vulkan output was added in 2.0, which allows it to work under Linux using [[Wine]] 2.10.0 and newer.<ref name="nglidevulkan">http://www.zeus-software.com/forum/viewtopic.php?f=2&t=2044</ref> nGlide also supports high resolution modes. See the [http://www.zeus-software.com/downloads/nglide/compatibility compatibility list].
+
:Currently the best 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.<ref name="nglidevulkan">http://www.zeus-software.com/forum/viewtopic.php?f=2&t=2044</ref> nGlide also supports high resolution modes. See the [http://www.zeus-software.com/downloads/nglide/compatibility compatibility list].
  
;[http://dege.freeweb.hu/ dgVoodoo 2]
+
;dgVoodoo2
Despite the name, dgVoodoo 2 reimplements more than Glide. It replaces multiple APIs; Glide 2.11, 2.45, 3.1, 3.1 Napalm, all versions of DirectDraw and Direct3D up to version 7, Direct3D 8.1, and Direct3D 9. This wrapper outputs Direct3D 11 with different device types as wrapping output such as hardware or software rendering.
+
: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.
  
;[[Wine]]
+
;[[Wine|WineD3D]]
Wine is a [[Compatibility layers|compatibility layer]] for Linux and macOS. On its own, Wine works pretty well for running older DirectX games. Some forks allow Wine's built-in reimplementations to run under Windows.
+
: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 [https://fdossena.com/?p=wined3d/index.frag here].
  
;[https://www.dxgl.org/ DXGL]
+
;DXGL
A free replacement for ddraw.dll outputting OpenGL. It's designed to overcome driver bugs, mainly in Windows Vista and beyond. It adds various rendering enhancements such as display scaling and filtering options. DXGL also supports Direct3D 7, however it's currently under development and doesn't work with many programs.
+
: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 [https://www.codeweavers.com/crossover CrossOver].
  
==2000's and later APIs==
 
 
{| class="wikitable sortable" style="text-align:center;"
 
{| class="wikitable sortable" style="text-align:center;"
 
|-
 
|-
Line 89: Line 176:
 
! scope="col"|Translates
 
! scope="col"|Translates
 
! scope="col"|Into
 
! scope="col"|Into
 +
! scope="col"|<abbr title="Free and Open-Source Software">FOSS</abbr>
 
! scope="col"|Active
 
! scope="col"|Active
 
! scope="col"|[[Recommended Emulators|Recommended]]
 
! scope="col"|[[Recommended Emulators|Recommended]]
 +
|-
 +
|[http://dege.freeweb.hu/dgVoodoo2/ dgVoodoo2]
 +
|align=left|{{Icon|Windows}}
 +
|[http://dege.freeweb.hu/dgVoodoo2/dgVoodoo2/ {{DgVoodoo2Ver}}]
 +
|Direct3D 8-9
 +
|Direct3D 11, 12
 +
|{{✗}} ||{{✓}} ||{{✓}}
 +
|-
 +
|[https://github.com/AlpyneDreams/d8vk D8VK]
 +
|align=left|{{Icon|Windows|Linux}}
 +
|[https://github.com/AlpyneDreams/d8vk/releases 1.0]
 +
|Direct3D 8
 +
|Vulkan
 +
|{{✓}} ||{{✓}} ||{{✓}}
 
|-
 
|-
 
|[https://github.com/doitsujin/dxvk DXVK]
 
|[https://github.com/doitsujin/dxvk DXVK]
|align=left|{{Icon|Linux}}
+
|align=left|{{Icon|Windows|Linux}}
|[https://github.com/doitsujin/dxvk/releases 1.5.4]
+
|[https://github.com/doitsujin/dxvk/releases {{DXVKVer}}]
 
|Direct3D 9-11
 
|Direct3D 9-11
 
|Vulkan
 
|Vulkan
|{{✓}} ||{{✓}}
+
|{{✓}} ||{{✓}} ||{{✓}}
 
|-
 
|-
 
|[[Wine|WineD3D]]
 
|[[Wine|WineD3D]]
 
|align=left|{{Icon|Windows|Linux|macOS}}
 
|align=left|{{Icon|Windows|Linux|macOS}}
|[https://wiki.winehq.org/Download {{WineVer}}] <small>(Linux, macOS)</small><br /> [https://fdossena.com/?p=wined3d/index.frag {{WineDevVer}}] <small>Windows</small>
+
|[https://wiki.winehq.org/Download {{WineVer}}] <small>(Linux, macOS)</small><br/>[https://fdossena.com/?p=wined3d/index.frag {{WineDevVer}}] <small>(Windows)</small>
|Direct3D 1-11
+
|Direct3D 8-11
|OpenGL
+
|Vulkan<br>OpenGL
|{{✓}} ||{{✓}}
+
|{{✓}} ||{{✓}} ||{{✓}}
 
|-
 
|-
|[https://github.com/iXit/wine-nine-standalone Gallium Nine]
+
|[https://github.com/HansKristian-Work/vkd3d-proton VKD3D-Proton]
|align=left|{{Icon|Linux}}
+
|align=left|{{Icon|Windows|Linux}}
|[https://github.com/iXit/wine-nine-standalone 0.5]
+
|[https://github.com/HansKristian-Work/vkd3d-proton/releases {{VKD3D-ProtonVer}}]
|Direct3D 9
+
|Direct3D 12
|Linux Calls
+
|Vulkan
|{{✓}} ||{{~}} <small>WIP</small>
+
|{{✓}} ||{{✓}} ||{{✓}}
 
|-
 
|-
|[https://source.winehq.org/git/vkd3d.git/ vkd3d]
+
|vkd3d
 
|align=left|{{Icon|Linux}}
 
|align=left|{{Icon|Linux}}
|[https://source.winehq.org/git/vkd3d.git/ 1.1]
+
|[https://source.winehq.org/git/vkd3d.git/ {{Vkd3dVer}}]
 
|Direct3D 12
 
|Direct3D 12
 
|Vulkan
 
|Vulkan
|{{✓}} ||{{✗}} <small>WIP</small>
+
|{{✓}} ||{{✓}} ||{{✗}}
 +
|-
 +
|[https://github.com/crosire/d3d8to9/ d3d8to9]
 +
|align=left|{{Icon|Windows}}
 +
|[https://github.com/crosire/d3d8to9/releases 1.12.0]
 +
|Direct3D 8
 +
|Direct3D 9
 +
|{{✓}} ||{{✓}} ||{{✓}}
 +
|-
 +
|[https://downloads.fdossena.com/Projects/Mesa3D/Builds/index.php Mesa3D for Windows + MesaInjector]
 +
|align=left|{{Icon|Windows}}
 +
|[https://downloads.fdossena.com/Projects/Mesa3D/Builds/index.php 20.1.8] <br/>[https://github.com/lightningterror/Mesa3D-Windows lightningterror's builds] <br/>[http://www.vogonsdrivers.com/wrappers/files/OpenGL/GDI/Mesa/ vogonsdrivers builds]
 +
|OpenGL
 +
|Software
 +
|{{✓}} ||{{✓}} ||{{✓}}
 +
|-
 +
|[https://github.com/libcg/grvk grvk]
 +
|align=left|{{Icon|Windows}}
 +
|[https://github.com/libcg/grvk/tags 0.5.0]
 +
|Mantle
 +
|Vulkan 1.2
 +
|{{✓}} ||{{✓}} ||{{✓}}
 
|-
 
|-
 
|[https://github.com/KhronosGroup/MoltenVK MoltenVK]
 
|[https://github.com/KhronosGroup/MoltenVK MoltenVK]
 
|align=left|{{Icon|macOS|iOS}}
 
|align=left|{{Icon|macOS|iOS}}
|[https://github.com/KhronosGroup/MoltenVK/releases 1.0.40]
+
|[https://github.com/KhronosGroup/MoltenVK/releases 1.3.268]
 
|Vulkan
 
|Vulkan
 
|Metal
 
|Metal
|{{✓}} ||?
+
|{{✓}} ||{{✓}} ||{{✓}}
 
|-
 
|-
|[https://www.collabora.com/news-and-blog/blog/2018/10/31/introducing-zink-opengl-implementation-vulkan/ Zink]
+
|[https://github.com/iXit/wine-nine-standalone Gallium Nine]
 
|align=left|{{Icon|Linux}}
 
|align=left|{{Icon|Linux}}
|[https://gitlab.freedesktop.org/kusma/mesa/tree/zink Git]
+
|[https://github.com/iXit/wine-nine-standalone/releases v0.9]  <small>(WIP)</small>
|OpenGL
+
|Direct3D 9
|Vulkan
+
|Gallium
|{{✓}} ||?
+
|{{✓}} ||{{✓}} ||{{~}}
 
|-
 
|-
|[https://github.com/Joshua-Ashton/d9vk D9VK]
+
|[https://gitlab.freedesktop.org/mesa/mesa/-/blob/main/docs/drivers/zink.rst Zink]
 
|align=left|{{Icon|Linux}}
 
|align=left|{{Icon|Linux}}
|[https://github.com/Joshua-Ashton/d9vk Git]
+
|[https://gitlab.freedesktop.org/mesa/mesa/tree/zink git]
|Direct3D 9
+
|OpenGL 2.1-4.6
 
|Vulkan
 
|Vulkan
|{{✓}} ||{{}}
+
|{{✓}} ||{{✓}} ||{{TBD}}
 
|-
 
|-
|[https://github.com/crosire/d3d8to9/ d3d8to9]
+
|[https://github.com/microsoft/D3D9On12 D3D9On12]
 
|align=left|{{Icon|Windows}}
 
|align=left|{{Icon|Windows}}
|[https://github.com/crosire/d3d8to9/releases 1.11.0]
+
|[https://github.com/microsoft/D3D9On12 git]
|Direct3D 8
 
 
|Direct3D 9
 
|Direct3D 9
|{{✓}} ||{{}}
+
|Direct3D 12
 +
|{{✓}} ||{{✓}} ||{{~}}
 
|-
 
|-
|[https://github.com/Joshua-Ashton/dxup DXUP]
+
|[https://github.com/microsoft/D3D11On12/ D3D11On12]
|align=left|{{Icon|Windows|Linux}}
+
|align=left|{{Icon|Windows}}
|[https://github.com/Joshua-Ashton/dxup Git]
+
|[https://github.com/microsoft/D3D11On12/ git]
|Direct3D 9-10
 
 
|Direct3D 11
 
|Direct3D 11
|{{{}} ||{{}}
+
|Direct3D 12
 +
|{{✓}} ||{{}} ||{{~}}
 
|-
 
|-
|[https://github.com/disks86/VK9 VK9]
+
|[https://github.com/bo3b/3Dmigoto/ 3Dmigoto]
|align=left|{{Icon|Windows|Linux}}
+
|align=left|{{Icon|Windows}}
|[https://github.com/disks86/VK9/releases 0.29.0]
+
|[https://github.com/bo3b/3Dmigoto/tags 1.3.16]
|Direct3D 9
+
|Direct3D 11 <small>(Stereo3D)</small>
|Vulkan
+
|<small>no API conversion</small>
|{{✗}} ||{{}}
+
|{{✓}} ||{{✓}} ||{{~}}
 +
|-
 +
|[https://www.pcgamingwiki.com/wiki/Glossary:VorpX VorpX] ($)
 +
|align=left|{{Icon|Windows}}
 +
|[https://www.vorpx.com/support-faq/ v21.3.2]
 +
|Direct3D 11 <small>(Stereo3D)</small>
 +
|<small>no API conversion</small>
 +
|{{✗}} ||{{✓}} ||{{~}}
 +
|-
 +
|GLon12
 +
|align=left|{{Icon|Windows|Xbox}}
 +
|
 +
|OpenGL
 +
|Direct3D 12
 +
|{{✓}} ||{{✓}} ||{{TBD}}
 
|-
 
|-
 
|}
 
|}
  
 
===Comparisons===
 
===Comparisons===
;[https://github.com/doitsujin/dxvk DXVK]
+
;dgVoodoo2
A wrapper for Direct3D 9-11. DXVK was designed to speed up support for Direct3D 11 games in [[Wine]] and, later, [[Proton]] since a native implementation seemed unlikely.
+
:Supports Direct3D 8-9. Outputs Direct3D 11 and Direct3D 12 with different device types as wrapping output, such as hardware or software rendering.
  
:;[https://github.com/Joshua-Ashton/d9vk D9VK]
+
;DXVK
:A fork for Direct3D 9, originally created when DXVK was designed for Direct3D 10 and 11. Was merged back into the main project in version 1.5.  
+
: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]]. Later merged D9VK to add Direct3D 9 support.
  
;[[Wine]]
+
;WineD3D
Has an internal graphics API wrapper for Direct3D 1-11 using OpenGL. It works mostly well for older games, but is slower and has more bugs than newer wrappers using Vulkan, such as DXVK. It's possible to use Wine's wrapper in Windows using different forks.
+
: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 [https://fdossena.com/?p=wined3d/index.frag here].
  
;[https://github.com/iXit/wine-nine-standalone Gallium Nine]
+
;VKD3D-Proton
An open-source implementation of the Direct3D 9 library. Gallium Nine is different since it uses calls native to Linux as opposed to another graphics API like Vulkan. This allows applications to run at near-native speeds. The catch is that it relies on Gallium, Linux's open source 3D renderer, and any driver that doesn't use Gallium is less likely to work (such as NVIDIA's proprietary drivers).
+
: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.
  
;[https://source.winehq.org/git/vkd3d.git/ vkd3d]
+
;vkd3d
A work-in-progress Direct3D 12 to Vulkan wrapper created for Wine by Valve.
+
:Wine's work-in-progress Direct3D 12 to Vulkan wrapper.
  
;[https://github.com/disks86/VK9 VK9]
+
;d3d8to9
A Direct3D 9 wrapper that outputs to Vulkan.
+
: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.
  
==External links==
+
;MoltenVK
* [https://www.gamingonlinux.com/articles/dxvk-102-is-out-with-some-bug-fixes-d9vk-seems-to-be-progressing-nicely.13868/page=2#r151939 State of Direct3D 9-12 translation layers] by DXVK author YoRHa-2B (2019-04-02)
+
: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.<ref>Erik Faye-Lund (October 31, 2018). [https://www.collabora.com/news-and-blog/blog/2018/10/31/introducing-zink-opengl-implementation-vulkan/ Introducing Zink, an OpenGL implementation on top of Vulkan]. Collabora.</ref>
  
 
==See also==
 
==See also==
* [[Compatibility layers]] - Allows software written for one operating system to run on a different OS.
+
* [[Compatibility layers]] - Allows software written for one platform to run on another.
  
 
==References==
 
==References==
 
{{Reflist}}
 
{{Reflist}}
 +
 +
==External links==
 +
;* [https://www.vogons.org/viewtopic.php?f=9&t=36412 VOGONS: The Wrapper Collection Project]
 +
;* [https://www.pcgamingwiki.com/wiki/Glossary:Display_wrapper PCGamingWiki: Display wrapper]
 +
* [https://www.gamingonlinux.com/articles/dxvk-102-is-out-with-some-bug-fixes-d9vk-seems-to-be-progressing-nicely.13868/page=2#r151939 State of Direct3D 9-12 translation layers] by DXVK author YoRHa-2B (2019-04-02)
 +
* [https://www.youtube.com/@Levan4KGaming/search?query=performance%20benchmark Levan's Wrapper Benchmarks]
 +
 +
[[Category:Not really emulators]]

Latest revision as of 10:53, 1 April 2024

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 Emulation Accuracy page for more information about terms like "hypervisors", "simulators", "compatibility layers", "wrappers", "FPGA-based hardware cloning" and "software emulators".

'90s APIs[edit]

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

During the 90s, many PC game developers chose to use 3Dfx's Glide API for their Voodoo graphics cards. These developers didn't anticipate that 3Dfx would run out of money trying to compete with NVIDIA's offering, and in 2000 NVIDIA bought them for their IP assets (presumably to improve their own cards). Despite the API getting an open source release in 2003, neither NVIDIA or ATI adopted support for Glide in their own drivers, meaning a wrapper is now needed to play these games with hardware acceleration. Or, if we're lucky, the game gets ported or reimplemented to use other APIs instead.

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

Name OS Latest Version Translates Into Compatibility FOSS Active Recommended
Graphics dgVoodoo2 Windows 2.82.5 Glide 2.11-3.10
DirectDraw 1-7
Direct3D 2-7
Direct3D 11, 12 ?
WineD3D Windows Linux macOS 9.0 (Linux, macOS)
9.7 (Windows)[N 2]
DirectDraw 1-7
Direct3D 2-7
Vulkan
OpenGL
?
DxWnd Windows 2.06.03 [N 2] DirectDraw 1-7
Direct3D 2-7
no API conversion
nGlide Windows 2.10 Glide Vulkan
Direct3D 9
DxWrapper Windows v1.0.6900.22 DirectDraw 1-7
Direct3D 2-7
Direct3D 9[N 3]
Direct3D 7 (for Direct3D 2-6)
DirectDraw 7 (for DirectDraw 1-6)
? ~
DDrawCompat Windows v0.5.1 DirectDraw 1-7
Direct3D 2-7
GDI (Partially)
no API conversion ~
cnc-ddraw Windows
Linux macOS [N 4]
6.3 DirectDraw 1-7 GDI
OpenGL
Direct3D 9
~
DXGL Windows 0.5.22 DirectDraw 1-7 OpenGL ~
Glidos Windows 1.59 Glide (DOS) ?
dgVoodoo Windows v1.50b2 Glide 2.11-2.45 Direct3D 7, 9
OpenGlide Windows 0.09 Alpha Glide OpenGL
psVoodoo Windows 0.17 Glide Direct3D 9
glrage Windows r10 ATI3DCIF
DirectDraw 2
OpenGL 3.3
RReady (Rendition Verite wrapper) Windows RReady Rendition Verité RRedline OpenGL
Input XOutput Windows 3.32 DirectInput XInput
DxWrapper Windows v1.0.6900.22 DirectInput 1-7 DirectInput 8 ~
Sound DSOAL Windows git DirectSound OpenAL TBD
  1. Direct3D 1 doesn't exist, since DirectX 1 did not have a Direct3D component. The first release was Direct3D 2.
  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 or Windows XP.
  3. Through dd7to9.
  4. Linux and macOS are supported through wine.

Comparisons[edit]

nGlide
Currently the best 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.
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.
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[edit]

(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.

Name OS Latest Version Translates Into FOSS Active Recommended
dgVoodoo2 Windows 2.8.2 Direct3D 8-9 Direct3D 11, 12
D8VK Windows Linux 1.0 Direct3D 8 Vulkan
DXVK Windows Linux 2.3 Direct3D 9-11 Vulkan
WineD3D Windows Linux macOS 9.0 (Linux, macOS)
9.7 (Windows)
Direct3D 8-11 Vulkan
OpenGL
VKD3D-Proton Windows Linux 2.11.1 Direct3D 12 Vulkan
vkd3d Linux 1.11 Direct3D 12 Vulkan
d3d8to9 Windows 1.12.0 Direct3D 8 Direct3D 9
Mesa3D for Windows + MesaInjector Windows 20.1.8
lightningterror's builds
vogonsdrivers builds
OpenGL Software
grvk Windows 0.5.0 Mantle Vulkan 1.2
MoltenVK macOS iOS 1.3.268 Vulkan Metal
Gallium Nine Linux v0.9 (WIP) Direct3D 9 Gallium ~
Zink Linux git OpenGL 2.1-4.6 Vulkan TBD
D3D9On12 Windows git Direct3D 9 Direct3D 12 ~
D3D11On12 Windows git Direct3D 11 Direct3D 12 ~
3Dmigoto Windows 1.3.16 Direct3D 11 (Stereo3D) no API conversion ~
VorpX ($) Windows v21.3.2 Direct3D 11 (Stereo3D) no API conversion ~
GLon12 Windows Xbox OpenGL Direct3D 12 TBD

Comparisons[edit]

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
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. Later merged D9VK to add Direct3D 9 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.
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[edit]

References[edit]

External links[edit]