# DxWrapper: stub DLLs in the game folder as a compatibility shim for older DirectX titles

> DxWrapper places renamed DirectX stub files in a game's installation directory to intercept and translate graphics calls from Direct3D 1 through 9 to newer APIs, letting older PC games run on Windows 10 and 11. The installation is a file copy and an ini edit, but choosing the right stub DLL requires consulting the project wikis because the README marks its own stub selection guide as a future page.

**elishacloud/dxwrapper** — Fixes compatibility issues with older games running on Windows 10/11 by wrapping DirectX dlls.  Also allows loading custom libraries with the file extension .asi into game processes.

- Repository: https://github.com/elishacloud/dxwrapper
- Stars: 2,028 · Forks: 138
- Language: C
- License: NOASSERTION
- Published: 2026-10-11 · Updated: 2026-10-11 · Language: en
- Canonical page: https://hysenlabs.com/projects/elishacloud-dxwrapper

## Intercepting DirectX calls before the game reaches the Windows runtime

DxWrapper inserts itself between a game and Windows by acting as a replacement for a DirectX DLL the game already loads. Windows resolves a process's DLL imports by searching the application's own directory before system folders, and DxWrapper uses that order as its entry point. A stub DLL with the same filename as a system DLL, such as ddraw.dll or d3d9.dll, sits in the game folder. When the game loads, it finds that stub first, which in turn loads dxwrapper.dll, intercepting and transforming DirectX calls before they reach the real system DLL.

No changes to the game executable are required, and overwriting system DLLs is explicitly not supported: according to the README, overwriting a DLL in a Windows system directory will not work. All three files placed in the game folder (the stub DLL, dxwrapper.dll, and dxwrapper.ini) can be removed by deleting them along with the optional log file. Written primarily in C, the project's stated primary purpose is fixing issues with games on Windows 10 and 11, with a secondary purpose of combining several compatible projects into one package. The coverage spans graphics, audio, and input APIs: Direct3D, DirectDraw, DirectInput, and DirectSound are all intercepted through the same stub DLL entry point, with each conversion layer residing inside dxwrapper.dll.

## Dd7to9 maps the DirectDraw and Direct3D 1-7 surface model onto Direct3D 9

Dd7to9 is the conversion layer for DirectDraw and Direct3D versions 1 through 7, translating that era's API to Direct3D 9. A separate Dd7to9 wiki covers it, distinct from the general Compatible Games wiki, and the README also links a DirectDraw to Direct3D9 Conversion page that includes a supported 2D games list for the DirectDraw path specifically.

Direct3D 8 to Direct3D 9 conversion uses the bundled d3d8to9 library, attributed in the README to crosire's project at github.com/crosire/d3d8to9. A third path translates Direct3D 9 to Direct3D 12 through the bundled D3D9On12 library from Microsoft's repository. Direct3D9Ex conversion is also an option: the README describes it as providing enhanced rendering performance compared to standard Direct3D 9, and it applies to the same pool of titles. DirectInput versions 1 through 7 convert to DirectInput 8 through dinputto8, hosted under the same elishacloud GitHub account as DxWrapper itself. DirectSound hooking intercepts dsound.dll calls at the same layer as the graphics wrappers, and the README compares the result to DSoundCtrl.

## Three files in the game directory and one ini edit complete the installation

Four installation steps are described in the README, with no build tools, no installer, and no command-line utility. Download the prebuilt archive from the repository page, unzip it, and copy the chosen stub DLL from the Stub folder together with dxwrapper.dll and dxwrapper.ini into the game's main executable directory. Games where the executable sits inside a subdirectory named Bin, Exe, or App require the three files there rather than at the installation root.

Opening dxwrapper.ini in a text editor to enable the relevant settings is the fourth step. A Configuration wiki documents the full option list; the README names several keys inline, among them DdrawEmulateSurface, DdrawEmulateLock, DdrawKeepAllInterfaceCache, DdrawLimitTextureFormats, DdrawLimitDisplayModeCount, LimitStateBlocks, SetPOW2Caps, and GraphicsHybridAdapter, which forces use of the discrete GPU.

Uninstallation reverses the process: delete the stub DLL, dxwrapper.dll, dxwrapper.ini, and the log file if one was written. No uninstaller is described.

## The README marks its own stub DLL selection guide as a page to be written later

Installation step two of the README reads: "Determine which stub .dll file is needed for the game. This depends on many factors which will be explained on page created later." No linked page for this guide exists in the README text. Common choices are offered as a parenthetical: ddraw.dll, d3d8.dll, d3d9.dll, dsound.dll, and winmm.dll.

Choosing the wrong stub either fails to intercept the game's graphics calls at all or intercepts them in a way that produces a black screen or crash. Compatible Games wiki and Dd7to9 Supported Games wiki are the practical substitutes for the missing guide, both linked from the README, and both listing which stub and settings have been confirmed for specific games. According to the README, the author has tested the project with hundreds of games.

For titles not on either wiki, no decision procedure is given. Determining which DirectX version a game originally used is the starting point, with that information often coming from the game's original DLL filenames or the documentation that shipped with it, neither of which the README addresses.

## ASI plugin injection, memory patching, and process launch extend the graphics shim

An ASI loader reads .asi files placed in the game directory and injects them into the game process at startup, compatible with the Ultimate ASI Loader project. Running in the other direction is also supported: DxWrapper loads as an .asi plugin inside a different ASI loader that is already hosting the game.

Hot-patch memory writes a specified byte sequence to a given address in the running process. Removing a CD check and fixing a bug are both listed in the README as representative cases, though the specific addresses and byte sequences that achieve either change are not documented there. If a game reliably crashes at a specific instruction address, the crash-patch option overwrites that address with no-operation bytes, skipping the problematic code rather than allowing the fault.

What the README names as the use case for the process-launch option is starting a helper application before the game initialises its own subsystems, with no documentation of what happens if that helper fails or what environment it inherits. Injection, patching, and process launch together extend DxWrapper beyond its primary graphics role.

## DDrawCompat is bundled as three separately configurable options, not a live external dependency

DDrawCompat integration is listed in the README as three separately configurable options, letting a game target the DDrawCompat build that produces correct output. DDrawCompat, by narzoul, addresses DirectDraw compatibility issues with the Windows Display Driver Model on modern hardware. Bundling three configurations rather than a single current build means different games can use whichever one works without a separate DDrawCompat installation.

Repository structure reflects how bundled libraries sit alongside DxWrapper's own code: top-level entries include a DDrawCompat directory, separate directories for ddraw, d3d8, and d3d9, and a .gitmodules file indicating submodule references. The Stub directory holds the DLL files the installation step copies. A Visual Studio solution (dxwrapper.sln) and project file (dxwrapper.vcxproj) sit at the root.

No bundled component such as d3d8to9 or D3D9On12 can be updated on its own; each update goes through the DxWrapper project itself. As of the last push on 2026-10-06, the repository is not archived.

## FPS ceiling, counter patching, resolution increase, and display overrides all live in dxwrapper.ini

Three options are grouped under frame and timing control in the README: an FPS limiter, a performance counter patch, and a CPU affinity setting. An FPS ceiling throttles the rendering loop; performance counter patching substitutes a value below the one-day threshold for whatever the game reads from the Windows performance counter; and CPU affinity assignment forces game threads onto one processor core, addressing what the README calls multi-core compatibility issues.

LegacyD3DResolutionHack adds higher-resolution rendering to Direct3D 1 through 7 games, with the README naming 4K as a reachable target. Games that offer no windowed launch path get one through the windowed mode override in dxwrapper.ini. DisableGameUX blocks the Microsoft Game Explorer service from the game launch sequence, removing the source of the rundll32.exe CPU spikes the README describes. High-DPI display issues for games that predate DPI awareness are addressed by disabling DPI scaling for the game process.

Several Direct3D 9 rendering corrections are also included. Clip plane caching is among them, with the README linking a Far Cry bug report as an illustration of the problem it resolves. Vertex processing mode override and environment cube map fixes address two other D3D9-specific problems the README groups under rendering and compatibility. Scanline and interlacing artifacts produced by certain games are each handled by dedicated options in dxwrapper.ini. Games without native anti-aliasing, anisotropic filtering, or vertical sync controls can have those features enabled for the game process through the same ini file.

Application Compatibility Toolkit overrides sit under DXPrimaryEmulation in dxwrapper.ini. Twelve flags are documented in the README for this setting: LockEmulation, BltEmulation, ForceLockNoWindow, ForceBltNoWindow, LockColorkey, FullscreenWithDWM, DisableLockEmulation, EnableOverlays, DisableSurfaceLocks, RedirectPrimarySurfBlts, StripBorderStyle, and DisableMaxWindowedMode. None require modifications to game files or to the Windows installation.

## Conclusion

DxWrapper is the right tool when a specific game appears in the Compatible Games wiki or the Dd7to9 Supported Games wiki, because those pages document which stub DLL and ini settings have been confirmed to work. For games outside those lists, the stub selection guide is described in the README as a future page that has not yet been linked. Before relying on it for an untested game, confirm which DirectX version the game loaded, pick the matching stub from the Stub folder, and check the Configuration wiki for the applicable ini keys. The licence is a custom file at License.txt, which GitHub classifies as Other.

## FAQ

### What is DxWrapper?

DxWrapper is a .dll file that wraps DirectX DLLs to fix compatibility issues in older games on Windows 10 and 11. It converts DirectDraw and Direct3D 1 through 9 calls to newer APIs and also loads ASI plugins from the game directory.

### How do I install DxWrapper?

Download the prebuilt archive from the GitHub repository, then copy the chosen stub DLL from the Stub folder together with dxwrapper.dll and dxwrapper.ini into the game's main executable directory. Open dxwrapper.ini in a text editor and enable the settings the game needs.

### Which stub DLL should I use with DxWrapper?

The README lists ddraw.dll, d3d8.dll, d3d9.dll, dsound.dll, and winmm.dll as common choices but notes the selection depends on factors described in a guide marked as a future page. The Compatible Games wiki and Dd7to9 Supported Games wiki document confirmed stub choices for tested titles.

### Can DxWrapper load ASI mods?

The README describes an ASI loader that injects .asi files from the game directory into the game process, compatible with the Ultimate ASI Loader project. DxWrapper can also run as an ASI plugin inside another ASI loader.

### How does DxWrapper relate to DDrawCompat?

DxWrapper bundles DDrawCompat as an optional component with three separately configurable options, selectable in dxwrapper.ini per game. The two tools are related rather than competing: DDrawCompat runs as one conversion option inside DxWrapper's configuration.

## Sources

- [elishacloud/dxwrapper on GitHub](https://github.com/elishacloud/dxwrapper)
- [Issues](https://github.com/elishacloud/dxwrapper/issues)
- [README](https://github.com/elishacloud/dxwrapper/blob/master/README.md)
- [Releases](https://github.com/elishacloud/dxwrapper/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/elishacloud-dxwrapper
