2.8.2 / 11-05-2023
dgVoodoo is a wrapper for old graphics APIs to run on modern Windows operating systems. Its applied using Direct3D11 with different types of wrapping outputs:
Hardware rendering at GPU feature level 10.1 (recommended)
Hardware rendering at GPU feature level 10.0 (there are some restrictions)
Software rendering through Microsoft WARP renderer
The API's it currently can wrap are:
Glide 2.11, Glide 2.45, Glide 3.1 and Glide 3.1 Napalm
DirectX 1-7 (all versions of DirectDraw and Direct3D up to version 7)
You also need the 3Dfx splash dlls for Glide if you want 3Dfx splash screen or watermark (shameless plug) through dgVoodoo.
You may also need D3DRM.dll (Direct3D Retained mode) for some games and demos. It's not part of the OS since Windows Vista.
Most Recent Changes
Fixing D3D8/9 update-texture again (regressive bug) (Ys Seven, Valley Benchmark, ...)
Support for D3D12 triangle fans if the OS runtime and your driver supports it (Win11)This removes some software overhead in D3D8/9 Draw calls in certain cases
There is a new dbg layer message for what D3D12 optional features are available and used
A bug is fixed in the D3D9 FVF validator (Lord of the Rings - War in the North, missing foliage)
Fractional viewports instead of shader code for D3D11 FL11.0+ (Test Drive Unlimited 2 through D3D11)
Refactoring DDI blitting code (optimization, dev-only feature)
Fixing fogging for DX8.0 (Soul Reaver 2)
Fixing a bug in window handling (Silent Hill 3)
Fixing a bug in the CPU code generator
Changing compiler options for DX modules
A minor DX optimization
Glide fixesGlide lfb-access bug (Mech Warrior 2: 31st Century Combat)
A Glide vertex shader (Nascar Racing 1999 Edition)
A D3D12 Glide backend bug (Nascar Racing 1999 Edition)
A D3D12 pixel shader crash
DDraw fixesImproving handling child windows (Twisted Insurrection)
Surface factoring/handling incompatibilities (Tropico 1, Steel Beasts)
D3D fixesA caching bug (regression) (Lego Island)
D3D fog state bug (Shadow Company)
D3D8/9 fixesChanging D3D9 sm2/3 ps behavior for mismatching sampler/texture type (FEAR)
D3D8 fog incompatibilities (Enclave, Final Fantasy XI)
sm3 fog problem in D3D9 (Lost - Via Domus)
Windowed mode presentation (UnrealEd)
Memory leak (The Legend of Heroes - Trails in the Sky 3rd)
Texture update incompatibility + some improvement for the debug layer (Gray Matter)
Memory allocation incompatibility for cube textures (Lost Planet 2)
Frontend stateblock bug (Tiger Woods PGA Tour 2002)
Device cursor functionality (Deus Ex - Invisible War)
A D3D9Ex incompatibility (VPinballX)
Workaround for a kind of memory overwrite from the application side (Lord of the Rings - War in the North)
Adding a missing resource type/format combination as supported (Lord of the Rings - War in the North)
Software vertex processingFixing an x64 D3D9 bug + some other common ones
CPU code generator for D3D8/9 sw vertex processing (x86/x64 for the time being)
Backend fixesA D3D11 bug (Dawn of War 2 Retribution)
A D3D12 bug causing deadlock (Test Drive Ferrari Racing Legend)
A common bug (Test Drive Ferrari Racing Legend)
Implementing a workaround for a D3D11 limitation (Test Drive Ferrari Racing Legend - car reflection)
Minor shader code generator bugs fixed (Rhino Discharge)
Fixing a mouse handling bug (regression) (Outlast windowed mode)
Fixing other internal bugs I encountered
Changes/refactorings related to the updated compiler tools
Changing option DirectX\BilinearBlitStretch to DirectX\Bilinear2DOperationsSo the filter is not only applied to 2D DD blit operations but CPU-written data as well
Changing option GeneralExt\EnableGDIHandling to GeneralExt\SystemHookFlags (x86-DX only)Flag 'GDI' to hook GDI-rendering (cutscene videos)
Flag 'Cursor' to hook mouse-cursor to suppress double cursor symptoms for emulated cursor
ARM64X version of D3D9 instead of plain ARM64 native only
Implementing the first version of loading and driving dgVoodoo addonsYou can hook the image presentation of the D3D12 backend
Docs and sample addon is added into the dgVoodoo API
Fixing D3D8/9 problemsVertex fog incompatibility (Ephinea PSOBB)
Device reset bug (Harry Potter and the Order of the Phoenix)
Fixing the return values of Check* methods (3DMark 05)
Changes in the D3D8/9 Debug Layer, some more detailed messages and cosmetics
Minor changes in the D3D12 D3D backend
Fixing a DDraw blitter bug (I hope at least) (driver crash with Lego Rock Raiders)
Fixing a bug in system (GDI) hooking (DX modules cooperating)
Fixing a certain D3D bug (Midtown Madness 1)
Fixing a DD/D3D colorkeying bug (Xarlor)
Other minor internal fixes and changes
Fixing a DDraw surface GetDC/ReleaseDC bug (Recoil, missing text)
Fixing D3D clipping again (Grand Prix 3)
Fixing a DDraw blitting colorkeying bug (Wizards and Warriors)
Changing scaling of cpu-written surface data from bilinear to point sampled
Fixing a D3D6 incompatibility with MS D3D (Lego Rock Raiders)
Fixing a bug in D3DImm (could crash at exit) (Crimson Skies)
Fixing a regression bug of swapchains (MS Flight Simulator 2002)
Fixing a bug of D3D8/9 fog state (MS Flight Simulator 2004)
Fixing a bug in sw vertexprocessing (wrong speculars in 3D Scooter Racing)
Broken D3D8/9 clipping, refactored and fixed (BloodRayne 2 HUD)
Fixing a D3D8/9 vertex layout bug (Sonic and All Stars Racing Transformed)
Minor other internal D3D5/6/7/8/9 fixes (like fr-063)
Minor D3D performance optimization
Improving Phong shading to support D3D8/9 level ops (LotR War of the Ring), but it's still not recommended
Shader code generator changes:fixing a bug (Star Wars Republic Commando)
implementing missing mono rendering
A new Debug Layer message
Support for multihead (multimonitor) D3D9 devices (Supreme Commander)
Fixing/implementing DDraw/D3D9 cooperation for DirectShow movie playback (Robots)
D3D9 frontend fixes (Painkiller Black with D3D12)
D3D9 refresh rate validation improvement (Robots)
Adding option DirectXExt\DisplayOutputEnableMask for enabling individual display outputs
Adding option GeneralExt\PresentationModel (for "flip" presentation modes for D3D11)
Removing option DirectXExt\EnableSpecializedShaders
Fixing a regressive crash (Morbus Gravis)
Minor general improvements/optimizations and internal bugfixes (Outlast x64 and others)
Fixing Glide 1.x LFB-lock handling (Mech Warrior 2), but it seems to work only for me (feedbacks are welcome)
Removing DF16/DF24 depthstencil format support from GeForce virtual cards + fixing DF16/24/INTZ component mapping
Changing the behavior of clipping transformed/untransformed vertices
Fixing an incompatibility of updating the clip status in D3D
D3D12 threading fix for potential stuttering (Juiced)
A D3D12 fix for potential D3D9-query freeze (Prince of Persia: The Forgotten Sands)
A fix in the TruForm shader code generator (crash in Rainbow Six 3 Ravenshield)
A minor improvement for hw cursor emulation (Interstate '76)
Compiler toolset upgrade
A D3D8/9 incompatibility is fixed (RE - Operation Raccoon City)
A minor frame presentation optimization again (D3D11/12)
Fixing a Glide Debug Layer message (unnecessary d3dcompiler)
Slight changes in the FF vs DXBC generator for the sake of old FL10.0 drivers
Minor fixes in the D3D11 backend for FL10.0
A minor change in DXGI swapchain handling to reduce possibility of deadlocks (Blade Of Darkness)
Minor internal + CPL fixes
DDraw fixesClip handling (Ed Hunter)
Flip to GDI surface (HyperBlade)
Changes to be compatible with the Windows compat layer (Biko)
Other minor fixes (multi monitor tests)
Improving the DirectShow (Quartz) hook layer (Max Payne)
Implementing more system/GDI hooks (option GeneralExt\EnableGDIHooking) (x86 only)HyperBlade menu
Fixing double mouse cursors (experimental)
D3D8/9 fixesImplementing D3D9 API extensions for alpha-to-coverage and supersampling (nvidia/ATI)
Supersampling needs at least FL10.1
A bug in software buffer usage is fixed for software vertex processing (Everquest 1999)
D3D fixesRemoving support for colorkey blending with GF virtual cards (Interact Play)
Fixing a D3D alpha transparency bug (Interact Play)
Glide fixes:Fixing minor bugs in handling Glide LFB access (without PCI emulation) (XA demo)
Fixing background threaded D3D12 Glide LFB access with PCI emulation (XA demo)
Image presentation changesDX frame presentation optimization for performance
Other general optimization of presentation shaders
Emulated cursor appeared at wrong place with integer scaling, fixed
Fixes for AMDA workaround-fix for clearing integer format RTV's through AMD D3D11 drivers (ClearRenderTargetView) (issue introduced with v2.74)
Adapting the DX shader code generator to handle AMD's DXBC parser limitation (no-sat on indexed temporary) (crash with TruForm, HD7850)
Backend fixesA DX Draw bug fixed in the D3D12 backend
Fixing a D3D11 sampler cache and sampler update bug (BF 1942, scene demo 604)
Fixing a D3D12 sampler table update bug
Fixing a bug in the DX code generator (crash with adaptive TruForm, HD7850)
Changes for generating a bit more optimized code in FF vs code generator
Fixing a DDraw blitter bug (Des Blood 4)
Now all dynamic resolutions can have an integer scaling parameter, it can be useful for achieving manual supersampled rendering
Improving GDI hooking (MCI video player) (Age Of Empires 2)
Some new Debug Layer messages
Fixing an incompatibility of creating additional swapchains (Overlord 2)
Implementing missing MSAA subpixel masking
Implementing missing centroid modifier for ps2/3 input registers
Fixing a bug in user ptr Draw-calls (Halo 2)
Some new debug layer messages
Adding virtual card Geforce 9800 GT to have one that is still - D3D9.0c compatible but more practical because does not support all features like the default internal one (Overlord 2, Raiden 3, ...)
Fixing Glide3+ bugs (SurRender3D engine with Glide3)
Fixing a DDraw blitter bug (Esk Emotion)
Fixing bugs causing crash in the FF vs / TruForm shader code generator
Fixing D3D8/9 texture create-parameter validation (X-Blades)
Fixing a D3D12 swapchain bug (Balls of Steel through D3D12)
Fixing an inconsistency bug of the virtual cards other than the default (The Phantom Menace init error)
Improving the D3D/D3D8 z-biasing implementation (The Phantom Menace)
Adaptive N-Patch tesselation (ATI TruForm) support for D3D8/9 (needs feature level 11.0 through the output API as a minimum)
A new shader code generator for the D3D FF vertex pipeline in favor of better performance with specialized shaders
Enabling mixed MSAA types of D3D9 render- and depthstencil targets (some scene demos)
BugfixesFixing a DDraw surface create parameter validation incompatibility (Rogue Spear Urban Operations)
Fixing x64 D3D9 stateblock handling crash
Fixing a particular D3D8 lighting effect compatibility (Blitzkrieg map editor)
Fixing a bug in the ps.3.0 DXBC generator
Fixing a minor bug in DDraw with fast videomemory access
Fixing freezing video playback in Mega Man X series
New optionsAdding scaling mode 'Stretched, keep aspect ratio (CRT like)'
Adding DirectXExt\NPatchTesselationLevel (only for experimenting purposes)
Adding DirectXExt\EnableSpecializedShaders - this is intented to be a transitioning option, to be removed in a later version
Minor peformance optimization for handling ps FF specialized shaders
A lot of changes under the hood in general
Improving the implementation of user clip planes in the DX backends
Minor performance optimization in the D3D11 DX backend
Fixing potential D3D12 cache overflow
Fixing an incompatibility of GetDC/ReleaseDC on DDraw surfaces (The Secrects of Atlantis)
Fixing a regression bug with GetDC/ReleaseDC on DDraw surfaces (Star Wars Galactic Battlegrounds)
Fixing scaling of point sprites for upscaled resolutions (Falling Down)
Changing the precision of certain visibility calcs to be more compatible with MS D3D (Alien Paranoia)
Other minor code changes
Minor D3D incompatibility fixed (Corn N64 emulator)
Adding dynamic type resolution 'Desktop' (see the appropriate section for details)
Changing the implementation of D3D8/9 software cursor to be compatible with MS implementation
A bug in the general hw cursor emulation is fixed (No One Lives Forever)
Adding ARM64 builds of the 64 bit libraries and the CPL
Fixing a bug in the shader code generator (Virtua Tennis 4)
Minor DDraw compatibility fix (Alien vs Predator 2 corrupted health texture)
DDraw optimizations for LithTech engine lightmap textures handling (Alien vs Predator 2, but it should affect other games as well)
Improved GDI hooking to support the old MCI AVI player (Nocturne)
DDraw/D3D compatibility fixes to support the old ramp device (Banzai Bug)
(As for the rendering, this game now runs fine with dgVoodoo in hw mode. However, still there is a problem, see this bug entry )
Some performance optimizations in the D3D11/12 DX backends
Fixing (refactoring) an old optimization for managed textures (Spirit of Speed 1937, missing textures)
Fractional (rational) values for option GeneralExt\FPSLimit
Reworking of the FPS limiter to avoid a possible input lag with D3D12
Fixing a D3D bug causing unreleased resources (SWAT 3, first run without a config file)
Change in the impl of the emulated hw cursor (SWAT 3 bad preformance, but affects other games too)
Fixing a bug in the new Glide DXBC generator (Scorched Planet demo)
Some optimization on DDrawSurface GetDC/ReleaseDC
Fixing vsync flag validation/interpretation in DDrawSurface::Flip
Minor change in certain DDraw Debug Layer messages
Minor fixes in the CPL
Enabling 16K sized surfaces in DDraw (Demon World 2)
Optimizing filling-type GPU-work all along the code for lower GPU usage (DDraw/D3D/presentation)This also involves some improvements in filling capabilities of DDraw
Removing an old general limitation related to swapchains + code refactoring
Implementing an FPS-limiter configurable through the new option GeneralExt\FPSLimit
Fixing bicubic + Lanczos filters combined with CRT-like appearance and integer scaling
Adding a new option GeneralExt\CursorScaleFactor to control the integer scaled appearance of the emulated hw cursor
Adding option DirectXExt\Default3DRenderFormat for possible higher dynamic range
Fixing a vs.1.x shader translator bug (The History Channel - Civil War)
Fixing a regressive D3D12 DX backend bug
Fixing a D3D12 common backend cache bug (nVidia Chameleon demo)
Fixing a bug with forced MSAA in D3D11/12 DX backends
Implementing missing point-type fillmode (nVidia tech demos)
Implementing some missing things in DDraw (Near Fantasy Space)
Minor change in handling the FPU state (Tantra Online)
A Glide3 incompatibility is fixed (Test Drive 5)
Glide x64 bugfixings: bad thick-line drawing and crash in guDrawPolygonVertexListWithClip
Slight modification in Glide window handling when enviroment is configured to Dosbox
Replacing the HLSL compiler in Glide ps shaders with an own code generator
So now dgVoodoo does not need the external D3DCompiler at all
Optimizations in D3D sw vertex processing calcs
Optimizations in D3D state blocks + some minor D3D9 optimizations
Fixing a D3D9 shader incompatibility (Mass Effect)
Fixing a shader validator bug (Garfield - Lasagna World Tour)
Fixing a regression bug in D3D frontend (Crush)
Fixing another bug in D3D frontend
Fixing a D3D12 API driving bug
Fixing a bump mapping bug in FF shaders (Matrox G400 demo)
Fixing a cube texture resolution scaling bug (Colin McRae Rally 3)
Fixing a vs.1.x code generator bug (Splinter Cell 2)
Fixing D3D9 vs.3.x pointsize output (Fable 3)
Minor comparison sampling fix for D3D8/9 (Test Drive Unlimited 2) (D3D12 is recommended)
Fixing a D3D colorkeying bug (Restricted Area)
Changing the criterions for accepting incoming refresh rate values in DX (see the DirectX readme for details)
Fixing a bug in Glide D3D12 backend (Ultimate Race Pro)
Fixing an encountered Glide bug (texture chroma range)
Minor modification for Glide SstWinOpen to accept (and convert) more invalid buffercount combinations
Some debug layer fixings for Glide3 Napalm
Gamma ramps now automatically work with D3D12 (with underlying optimizations)
Color profile is always inherited because of calibration standards on modern systems
Option General\InheritColorProfileInFullScreenMode is only taken into account when a D3D11 output API is explicitly selected (compatibility mode for old hw)
Introducing option GeneralExt\FullscreenAttributes with attribute 'Fake' to enable fake fullscreen rendering
Enabling control tabbing + fixing tab-order for the CPL
Fixing a state management bug in the D3D11/12 backend (XIII)
Fixing a DDraw incompatibility bug (Tetris Worlds)
Fixing a Glide LFB locking bug + shutdown incompatibility (Speedboats, but this game has other problems too, causing crash)
Fixing a DDraw palette bug (Jedi Knight 2, ... and other old Star Wars games)
Fixing a bug in D3D9 frontend (Gothic 3)
Fixing an incompatibility in D3D8/9 frontend (Gothic 3)
Fixing some bugs in the D3D11 backend when revising code
Minor CPL improvements: adding 4GB to DX predefined videomemory values and observing textboxes to detect config changes
Internal changes/minor optimizations for future features
Fixing a bug in the DXBC generator (Metal Gear 2 Solid Substance, the original version)
Making DDraw device window creation compatible with MS DDraw (Everquest)
Minor improvement in the DDraw hook layer (Submarine Titans)
Fixing a bug in the shader code validator (Anarchy Online)
Implementing a minor missing thing in the D3D12 backend (Anarchy Online, but affects other appications as well)
Fixing a Glide texture upload bug (Montezuma's Return)
Fixing a thing incompatible with MS D3D (Christmas Magic)
Fixing a minor D3D12 leak
Fixing blurry output of upscaled DDraw rendering
Restoring old window handling mode for D3D11
Minor Glide debug layer improvement for nonstandard resolution/refresh rate
Support for true multimonitor DDraw applications (my test app)
Minor performance improvements in D3D frontend and D3D12 backend (most noticable with Dreamfall The Longest Journey with D3D12)
Fixing a memory leak (my own tests)
Some minor refactoring in the code
Fixing a DDraw bug causing crash (Will Rock)
Support for Direct3D12 as output API, the minimum required feature level is 11.0
Improved/fixed fast video memory access for the DirectX modules.
Refactored backend code along with some Direct3D11-related bugs fixed.
See the readme for the details.
dgVoodoo API 2.70 is also included here (for developers).
New type of filters for resampling the output image are added (Bicubic, Lanczos-2, Lanczos-3).
Also, mipmapping support for downscaling the output image is added.
A few bugfixings, see the readme for the details.
Now all section of the configuration file is editable through the CPL.
A new config element is added.
Many bugfixings, see the readme for the details.
Support for the external compiler is completely removed for the DirectX modules.
A lot of DirectX-related bugfixings.
See the readme for the details.
First version of Direct3D9 implementation is added.
Also, support for external HLSL compiler is made optional and replaced with an internal shader code translator.
See the readme for the details.
Debug Layer is added into the special release of dgVoodoo modules.
Migrating to INI format config file to replace old binary ones.
Control Panel app is now PerMonitorAwareV2-aware for DPI scaling.
Tremendous bugfixings, see the readme for the details.
These releases includes minor and incremental bugfixes for v2.55.
Also, x64 version of Glide libraries are added for QEmu for Kjliew's Glide patch.
Some new config elements are also introduced.
Lot of DirectX-related bugfixings.
Some minor Glide-related bugfixings.
Some Windows input and Glide-DirectDraw transition issues are also fixed.
For the details, see the readme.
Support for dynamic resolutions in resolution overriding.
Also, GF4 shadow buffering is implemented, works nicely with Splinter Cell 1.
A lot of bugfixings.
See the readme for the details.
2 new output API's are added: D3D11 with FL 10.1 and the MS WARP renderer.
Movie playing through DirectShow is also supported.
Resolution forcing in DirectX modules is also implemented.
See the readme for the details.