Instructions:
- Download the dxwrapper.zip and unzip it to a folder.
- Determine which stub .dll file is needed for the game. This depends on many factors which will be explained on page created later. Common stub dll's to use are
ddraw.dll,d3d8.dll,d3d9.dll,dsound.dllorwinmm.dll. You only need to choose one stub file to load dxwrapper into the game. - Copy this .dll file from the 'Stub' folder plus the
dxwrapper.dllanddxwrapper.inifiles into the game's installation directory, next to the main executable file. For some games the main executable is in a subdirectory (like 'Bin', 'Exe' or 'App') so the files will need to be copied into that directory. Overwriting existing game files is not usually recommended. Always backup any files before overwriting them. - Open up the
dxwrapper.inifile in a text editor and enable the settings needed for the game.
Note: Try the options under the [Compatibility] section first. For many games these are all that are needed. See the Configuration for details on the options.
What's New?
- Added StateBlock emulation for improved compatibility (do not convert DirectDraw StateBlocks to Direct3D9 StateBlocks)
- Added support for IDirect3DVideoDevice9 #291
- Added support for IID_IDirectDrawSurface textures #480
- Added support for D3DOP_PROCESSVERTICES in ExecuteBuffers #432
- Added support for D3DOP_SPAN opcode in Execute() for ExecuteBuffers
- Added atomic locking for ExecuteBuffers in Execute() and Lock()
- Added z-depth clamping after vertex transform
- Added second DdrawClampVertexZDepth mode to clamp RHW, recompute W/Z, then clamp Z #446
- Added DepthBiasFactor and DepthBiasDropOffValue to improve ZBias to DepthBias conversion #268
- Added OverrideStencilFormat support in Direct3D9 #392
- Added support for D3DRENDERSTATE_OLDALPHABLENDENABLE
- Added support for ATOC (Alpha-To-Coverage) #407
- Added option to disable GDI gamma ramp (DisableGDIGammaRamp) #427
- Added FlipEx option for D3d9to9Ex presentation mode #433
- Added UseShadowBackbuffer option to enable or disable shadow back buffers #437
- Added DdrawUseShadowSurface option
- Added DdrawNoDrawBufferSysLock option #453
- Added ForceKeyboardLayout option #464
- Added code to copy color keys during texture Load() #32
- Added code to pre-populate draw textures when using color keys for performance
- Added rotating index buffers for improved rendering performance
- Added minor vertex performance improvement by skipping vertex clearing with DDLOCK_DISCARDCONTENTS #453
- Added DdrawNoMultiThreaded and DdrawVertexLockDiscard options for potential performance improvements #453
- Added extra space to ExecuteBuffer data allocation #335
- Added logging for unsupported IDirect3D9 IIDs
- Added extra logging for profiling, failures, and warnings
- Added hook for CoGetClassObject and updated CoCreateInstance handling
- Added msvbvm60 stub and removed related exports from dxwrapper
- Added warning log when overwritten system DLLs are loaded before dxwrapper
- Added logic to avoid loading System32 DLLs unless required
- Added code to set the viewport before Clear() in CopyZBuffer
- Added code to always forward WM_SYNCPAINT to DefWindowProc
- Added WM_ACTIVATEAPP message support for DirectDraw versions 1 through 3 #487
- Changed Direct3D9 state handling to reduce redundant state calls by caching defaults, ignoring undocumented states, and batching updates
- Changed z-buffer video memory blits to return unsupported status
- Changed compiler configuration to include required WDK headers
- Changed Windows version target to 0x0601 #283
- Changed program optimization settings #283
- Changed DepthBias handling to reduce z-fighting
- Changed StretchRect behavior to use intermediate surfaces when direct copies are not possible #458
- Changed CooperativeLevel flag handling to tolerate unsupported flag combinations #466
- Changed DirectDraw primary surface clearing behavior in certain cases #421
- Changed device creation flow to delay SWP_FRAMECHANGED until after device creation #450
- Changed DirectDraw multisampling behavior to require enabling AntiAliasing in the ini file
- Changed index buffer size limits to support larger buffers #475
- Changed handling of duplicate WM_ACTIVATE / WM_ACTIVATEAPP messages to prevent game misbehavior #484
- Changed stack-allocated buffers to heap allocation in select code paths
- Changed code structure by removing unnecessary do-while loops
- Renamed ForceDirect3D9On12 to D3d9on12
- Removed calls to GetForegroundWindow / SetForegroundWindow that caused game issues #291 #455
- Removed RTTI, runtime
<mutex>,<filesystem>,<atlstr.h>from the project #283 - Removed scaling logic for native DirectDraw rendering
- Removed unnecessary DDBD_8 from dwDeviceRenderBitDepth
- Removed redundant SWP_FRAMECHANGED calls when frame styles are unchanged
- Fixed surface memory usage and removed unused DdrawExtraEmulationSize
- Fixed CreateThread and VirtualAlloc stack size handling when stack size is unspecified #429
- Fixed Texture Stage State behavior to match native DirectDraw
- Fixed Render State behavior to match native DirectDraw
- Fixed Light State behavior to match native DirectDraw
- Fixed return values for get/set state calls
- Fixed ambient light conversion from DirectDraw to Direct3D9
- Fixed TEXTUREMAPBLEND render state to correctly use texture alpha when available #429
- Fixed lighting disable behavior in DX6 and earlier versions #429
- Fixed incorrect hwnd resizing in exclusive mode causing warped or off-screen output
- Fixed return values for SetClipper and SetPalette #432
- Fixed Status return value in Execute() for ExecuteBuffers #432
- Fixed SetLight handling in Viewport #432
- Fixed D3d9to9Ex issues by forcing video memory for surfaces narrower than 64 pixels #446
- Fixed CreateOffscreenPlainSurfaceEx behavior in D3d9to9Ex #444
- Fixed homogeneous viewport scaling algorithm
- Fixed swap effect and source/destination clipping in Present() #452
- Fixed reference counting when using FPS counter, ImGui, shadow back buffers, and gamma shaders
- Fixed d3dx9 compatibility on Windows XP
- Fixed SetAppCompatData handling in DDrawCompat that broke some games on Windows 11 #462
- Fixed GetScanLine to return DDERR_VERTICALBLANKINPROGRESS when InVBlank is true #469
- Fixed CreateQuery() return value #468
- Fixed OverrideRefreshRate by applying it during UpdatePresentParameter #479
- Fixed handling of unknown clippers in SetClipper by using a full proxy lookup table #432