Changes

Jump to navigation Jump to search

Wrappers

6,015 bytes added, 1 April
'90s APIs
A '''wrapper''' is a common name for reimplementation of a technology used [[wikipedia:Library (computing)|library]], where the goal is to transparently replace calls made to one graphics substitute the original API with calls made to anothera better-supported interface. This can be used to run software on systems they were not designed for, such It works as running old PC games made a drop-in replacement 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 original library that replaces the original, though since a lot of software usually bundled it can also be a standalone interceptoras-is without any fine-tuning. Wrappers aren't needed are most common for OpenGL since its APIs don't require much translation. Despite this, [https://www.collabora.com/news-andproprietary interfaces that are either abandoned or otherwise platform-blog/blog/2018/10/31/introducing-zink-opengl-implementation-vulkan/ a wrapper was created for it anyway]specific.
==90's APIs==To understand why wrappers are needed See [[Emulation Accuracy]] page for older gamesmore information about terms like "[[Hypervisors|hypervisors]]", "[[Simulators|simulators]]", it's important to understand that during the 90s the graphics card market for "[[Intel CPUsCompatibility_layer|IBM PCs and compatiblescompatibility layers]] 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"[[Wrappers|wrappers]]", support for Glide didn't stay around and the API was made open"[[FPGA|FPGA-source, but NVIDIA based hardware cloning]]" 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:Category:Emulators|a portsoftware emulators]] to other APIs instead".
=='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 might can benefit from wrappers. Since they can have compatibility or rendering issues , since those interfaces may not even work properly on modern newer systems. Wrappers also can even 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.
{| class="wikitable sortable" style="text-align:center;"
|-
! scope="col" colspan="2"|Name
! scope="col"|OS
! scope="col"|Latest Version
! scope="col"|Translates
! scope="col"|Into
! scope="col"|Compatibility
! scope="col"|<abbr title="Free and Open-Source Software">FOSS</abbr>
! scope="col"|Active
! 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 2.10]
|Glide
|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 ?] ||{{✓}} ||{{✓}} ||{{~}}
|-
|[httphttps://degegithub.freeweb.hucom/narzoul/ dgVoodoo 2DDrawCompat DDrawCompat]
|align=left|{{Icon|Windows}}
|[httphttps://degegithub.freeweb.hucom/narzoul/dgVoodoo2DDrawCompat/dgVoodoo2tags v0.html {{DgVoodoo2Ver}}5.1]|Glide, DirectX DirectDraw 1-97<br>Direct3D 2-7<br>GDI (Partially)|Direct3D 11, Direct3D 12<small>no API conversion</small>| ||{{}} ||{{✓}} ||{{~}}
|-
|[[Wine|WineD3D]https://github.com/FunkyFr3sh/cnc-ddraw cnc-ddraw]|align=left|{{Icon|Windows}}<br>{{Icon|Linux|macOS}}|[https://wiki.winehq.org/Download {{WineVer}}] <smallref group=N name=cnc-ddraw>(Linux, and macOS)are supported through wine.</small><br /ref> |[https://fdossenagithub.com/?p=wined3dFunkyFr3sh/cnc-ddraw/indexreleases 6.frag {{WineDevVer}}3] <small>Windows</small>|DirectX DirectDraw 1-117|Vulkan, GDI<br>OpenGL<br>Direct3D 9| ||{{✓}} ||{{✓}} ||{{~}}
|-
|[https://www.dxgl.org/ DXGL]
|align=left|{{Icon|Windows}}
|[https://www.dxgl.org/downloads/ {{DXGLVer}}]
|DirectX DirectDraw 1-7
|OpenGL
| ||{{✓}} ||{{✓}} ||{{TBD~}}
|-
|[http://www.glidos.net/ Glidos]
|align=left|{{Icon|Windows}}
|[http://www.glidos.net/download.html 1.53b59]
|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| ||{{✗}} ||{{TBD✗}} ||{{✗}}
|-
|[http://openglide.sourceforge.net/ OpenGlide]
|Glide
|OpenGL
| ||{{✓}} ||{{✗}} ||{{✗}}
|-
|[https://sourceforge.net/projects/psvoodoo/ psVoodoo]
|align=left|{{Icon|Windows}}
|[https://sourceforge.net/projects/psvoodoo/files/latest/download 0.1317]
|Glide
|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===
;[http://www.zeus-software.com/downloads/nglide nGlide] :Currently the best Glide wrapper, but it's closed-source. All supporting all three public API versions are supported; (2.11, 2.60 and 3.10, and ) but it reads them using 's closed-source. It originally only used Direct3D 9. until Vulkan output was added in 2.0, which allows 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].
;[httpdgVoodoo2://dege.freeweb.hu/ dgVoodoo 2]Despite the name, dgVoodoo 2 reimplements more than Glide. It replaces multiple APIs; Supports Glide 2.11, 2.45, 3.110, 3.1 Napalm, all versions of DirectDraw , and Direct3D up to version 7, . Outputs Direct3D 8.1, 11 and Direct3D 9. This wrapper outputs Direct3D 11 12 with different device types as wrapping output , such as hardware or software rendering.
;[[Wine|WineD3D]]:Wine is a [[Compatibility layers|compatibility layer]] for Linux 's internal wrapper. Wraps DirectDraw and Direct3D up to 7 into Vulkan and macOSOpenGL. On its own, Wine It works pretty well for running older DirectX Direct3D games, though it does not come with a Glide implementation of its own. Some forks allow Wine's built-in reimplementations to run under A custom build is available for Windows[https://fdossena.com/?p=wined3d/index.frag here].
;[httpsDXGL://wwwReimplements DirectDraw using OpenGL.dxglIt is considered alpha software despite many applications working.org/ DXGL] A free replacement for ddraw.dll outputting ;glrage:Reimplements ATI3DCIF, an API from ATI used in a handful of games, and DirectDraw 2 over OpenGL. It's Originally designed to overcome driver bugsspecifically for Tomb Raider 1/UB patched with ATIRage patch, mainly in Windows Vista currently also supports Assault Rigs and beyondWipeout. It adds various rendering enhancements such as display scaling Additionally, it applies some improvements, fixes and filtering optionsQoL changes to the games. DXGL also supports  ==2000s and later APIs==(Direct3D 78 and higher, however it's currently under development OpenGL 2.x and doesn't higher, Vulkan) Modern Windows games will likely need one of these wrappers to work with many programson 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==
If you want to run modern Windows games on another OS you will likely need one of these wrappers. Usually you don't have to download these separatly as they come packaged into [[compatibility layers]] like [[Proton]], [[Wine]] or [https://www.codeweavers.com/crossover CrossOver]. Some wrappers can also be used on Windows to improve compatibility or stability for games using older Direct3D or OpenGL versions.
{| class="wikitable sortable" style="text-align:center;"
|-
! scope="col"|Active
! 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]
|align=left|{{Icon|Windows|Linux}}
|[https://github.com/doitsujin/dxvk/releases {{DXVKVer}}]
|Direct3D 9-11
|[[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>|Direct3D 18-11|Vulkan<br>OpenGL
|{{✓}} ||{{✓}} ||{{✓}}
|-
|[https://github.com/iXitHansKristian-Work/winevkd3d-nineproton VKD3D-standalone Gallium NineProton]|align=left|{{Icon|Windows|Linux}}|[https://github.com/iXitHansKristian-Work/winevkd3d-nineproton/releases {{VKD3D-standalone 0.7ProtonVer}}]|Direct3D 912|Linux CallsVulkan|{{✓}} ||{{✓}} ||{{~}} <small>WIP</small>
|-
|[https://source.winehq.org/git/vkd3d.git/ vkd3d]
|align=left|{{Icon|Linux}}
|[https://source.winehq.org/git/vkd3d.git/ {{Vkd3dVer}}]
|Direct3D 12
|Vulkan
|{{✓}} ||{{✓}} ||{{~}} |-|[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] <smallbr/>WIP[https://github.com/lightningterror/Mesa3D-Windows lightningterror's builds] <br/small>[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]
|align=left|{{Icon|macOS|iOS}}
|[https://github.com/KhronosGroup/MoltenVK/releases {{MoltenVKVer}}1.3.268]
|Vulkan
|Metal
|{{✓}} ||{{✓}} ||{{TBD✓}}|-|[https://github.com/iXit/wine-nine-standalone Gallium Nine]|align=left|{{Icon|Linux}}|[https://github.com/iXit/wine-nine-standalone/releases v0.9] <small>(WIP)</small>|Direct3D 9|Gallium|{{✓}} ||{{✓}} ||{{~}}
|-
|[https://wwwgitlab.collaborafreedesktop.comorg/mesa/mesa/news-and-blog/blogblob/2018main/10docs/31drivers/introducing-zink-opengl-implementation-vulkan/ .rst Zink]
|align=left|{{Icon|Linux}}
|[https://gitlab.freedesktop.org/kusmamesa/mesa/tree/zink Gitgit]|OpenGL2.1-4.6
|Vulkan
|{{✓}} ||{{✓}} ||{{TBD}}
|-
|[https://github.com/crosiremicrosoft/d3d8to9/ d3d8to9D3D9On12 D3D9On12]
|align=left|{{Icon|Windows}}
|[https://github.com/crosiremicrosoft/d3d8to9/releases 1.11.0D3D9On12 git]|Direct3D 8
|Direct3D 9
|Direct3D 12|{{✓}} ||{{✓}} ||{{~}}|-|[https://github.com/microsoft/D3D11On12/ D3D11On12]|align=left|{{Icon|Windows}}|[https://github.com/microsoft/D3D11On12/ git]|Direct3D 11|Direct3D 12|{{✓}} ||{{✓}} ||{{~}}
|-
|[https://github.com/Joshua-Ashtonbo3b/d9vk D9VK3Dmigoto/ 3Dmigoto]|align=left|{{Icon|LinuxWindows}}|[https://github.com/Joshua-Ashtonbo3b/3Dmigoto/d9vk Gittags 1.3.16]|Direct3D 911 <small>(Stereo3D)</small>|Vulkan<small>no API conversion</small>|{{✓}} ||{{}} ||{{~}}
|-
|[https://githubwww.pcgamingwiki.com/Joshua-Ashtonwiki/dxup DXUPGlossary:VorpX VorpX]($)|align=left|{{Icon|Windows|Linux}}|[https://githubwww.vorpx.com/Joshuasupport-Ashtonfaq/dxup Gitv21.3.2]|Direct3D 9-1011 <small>(Stereo3D)</small>|Direct3D 11<small>no API conversion</small>|{{}} ||{{{✗}} ||{{~}}
|-
|[https://github.com/disks86/VK9 VK9]GLon12|align=left|{{Icon|Windows|LinuxXbox}}|[https://github.com/disks86/VK9/releases 0.29.0]|Direct3D 9OpenGL|VulkanDirect3D 12|{{✓}} ||{{}} ||{{TBD}}
|-
|}
===Comparisons===
;[httpsdgVoodoo2://githubSupports Direct3D 8-9.com/doitsujin/dxvk DXVK] A wrapper for Outputs Direct3D 9-11and Direct3D 12 with different device types as wrapping output, such as hardware or software rendering.  ;DXVK was :Was originally designed to speed up accelerate support for Direct3D 11 games in running under [[Wine]] and, later, [[Proton]] 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 [https://fdossena.com/?p=wined3d/index.frag here].
:;[https://github.com/JoshuaVKD3D-Ashton/d9vk D9VK] Proton:A fork for Direct3D 9of VKD3D funded by Valve, originally created when DXVK was designed which is more developed and has experimental support for Direct3D 10 and 11DXR via VK_KHR_ray_tracing. Was merged back into the main project in version 1Requires DXVK's dxgi.5dll file to work on Windows.
;[[vkd3d:Wine]] 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 work-in-progress Direct3D 12 to use Wine's Vulkan wrapper in Windows using different forks.
;[httpsd3d8to9://github.com/iXit/wine-nine-standalone Gallium Nine]An open-source implementation of Not as versatile as dgVoodoo2, however it's the only wrapper that can wrap Direct3D 8 into 9 library. Gallium Nine Its main advantage 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 speedsWindows XP support, which dgVoodoo2 lacks. The catch is that it relies on Gallium, LinuxIt's open source 3D rendererspecifically useful for Windows XP running in VMware, and any driver that doesn't use Gallium is less likely to work (such as NVIDIAsince VMware's proprietary drivers)Direct3D 8 acceleration has graphical and/or performance issues.
;[httpsMoltenVK://sourceDeveloped by the Brenwill Workshop under the Khronos Group, it re-implements Vulkan for Metal.winehq.org/git/vkd3d.git/ vkd3dEmulators like [[Dolphin]] and [[DuckStation]] A work-in-progress Direct3D 12 use MoltenVK instead of a native Metal renderer to Vulkan wrapper created for Wine by Valvesupport Apple devices.
;[httpsGallium Nine://github.com/disks86/VK9 VK9] A An implementation of the Direct3D 9 wrapper 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 outputs to Vulkanit only works on Mesa, not NVIDIA's proprietary driver.
==External links==;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.gamingonlinuxcollabora.com/articles/dxvknews-102and-isblog/blog/2018/10/31/introducing-outzink-withopengl-someimplementation-bug-fixes-d9vk-seems-to-be-progressing-nicely.13868vulkan/page=2#r151939 State Introducing Zink, an OpenGL implementation on top of Direct3D 9-12 translation layersVulkan] by DXVK author YoRHa-2B (2019-04-02). Collabora.</ref>
==See also==
* [[Compatibility layers]] - Allows software written for one operating system platform to run on a different OSanother.
==References==
{{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]]
11,636
edits

Navigation menu