SW and HW accelerated GPU driver for Windows 9x Virtual Machines
This is ready-to-use compilation of my 6 projects:
opengl32.dll
(included in package)ws2_32.dll
, included)Hypervisor | Version | Adapter | VGA driver | 32 bpp | 16 bpp | 8 bpp | HW 3D | Sound drivers |
---|---|---|---|---|---|---|---|---|
Oracle VirtualBox | 6.1, 7.0 | VboxVGA | ✔ | ✔ | ✔ | ✔ | ❌ | SB16, AC97 |
Oracle VirtualBox | 6.1, 7.0 | VboxSVGA | ✔ | ✔ | ✔ | ✔ | ✔ | SB16, AC97 |
Oracle VirtualBox | 6.1, 7.0 | VMSVGA | ✔ | ✔ | ✔ | ✔ | ✔ | SB16, AC97 |
Oracle VirtualBox | 6.0 | VboxVGA | ✔ | ✔ | ✔ | ✔ | ❌ | SB16, AC97 |
Oracle VirtualBox | 6.0 | VboxSVGA | ❌ | - | - | - | ❌ | n/a |
Oracle VirtualBox | 6.0 | VMSVGA | ❌ | - | - | - | ❌ | n/a |
Oracle VirtualBox | 5.2 | - | ✔ | ✔ | ✔ | ✔ | ❌ | SB16, AC97 |
VMware Workstation | 16, 17 | - | ✔ | ✔ | ✔ | ⚠ | ✔ | speaker, SBPCI128 |
QEMU | 7.x, 8.0 | std | ✔ | ✔ | ✔ | ✔ | ❌ | speaker, adlib, GUS, SB16, WSS, AC97, SBPCI128 |
QEMU | 7.x, 8.0 | vmware | ✔ | ✔ | ❌ | ❌ | ❌ | speaker, adlib, GUS, SB16, WSS, AC97, SBPCI128 |
QEMU | 7.x, 8.0 | std + qemu-3dfx | ✔ | ✔ | ✔ | ✔ | ✔ | speaker, adlib, GUS, SB16, WSS, AC97, SBPCI128 |
SoftGPU can use 4 render drivers:
Not all renderers supporting all application/games, performance expectation is in 1024x768 32bit:
Renderer | Guest Requirements | DX9 | DX9 shaders | DX8 | DX8 shaders | DX6-7 | OpenGL | OpenGL version | multiple contexts | window mode | Glide | Glide DOS | Expected FPS |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
softpipe | - | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | 3.3 | ✔ | ✔ | ✔ | ❌ | 1-3 |
llvmlipe (128 bits) | SSE | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | 4.5 | ✔ | ✔ | ✔ | ❌ | 10-15 |
llvmlipe (256 bits) | SSE, AVX | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | 4.5 | ✔ | ✔ | ✔ | ❌ | 12-20 |
SVGA3D | SVGA-II (gen9) | ✔ | ❌ | ✔ | ❌ | ✔ | ✔ | 2.1 | ⚠ | ✔ | ✔ | ❌ | 30-100 |
SVGA3D | SVGA-II (gen10) | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | 3.3-4.3 | ✔ | ✔ | ✔ | ❌ | 30-80 |
qemu-3dfx | qemu-3dfx | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | native | ❌ | ❌ | ✔ * | ✔ * | native/2 * |
Note: expected FPS are for host with i7-4770 + GTX1650.
(*) Note for qemu-3dfx: performance depends on CPU emulation - you can reach about 1/2 of native GPU performance when using KVM acceleration on x86-64 host, about 1/5 when using Hyper-V, and about from 1/100 when is using accelerated emulation and about 1/1000 when using full emulation. DOS Glide and native Glide wrapper isn’t part of SoftGPU. You have to compile it from source or you can donate qemu-3dfx author.
Hypervisor translation to real HW GPU:
Renderer | Host technology | Hypervisor support |
---|---|---|
softpipe | framebuffer | all |
llvmlipe | framebuffer | all |
SVGA3D (gen 9) | DX9/OpenGL 2.1 | VirtualBox 6+7, VMware Workstation |
SVGA3D (gen 10) | DX11/Vulkan | VirtualBox 7, VMware Workstation |
qemu-3dfx | native OpenGL | QEMU with qemu-3dfx patch |
ISO image or ZIP package can be downloaded on release page: https://github.com/JHRobotics/softgpu/releases/
None needed.
Note: sometimes I speak here about BIOS, vGPU or registry, but in every case I speak about software in virtual machine (VM)[1]. Special topic is vGPU: in this context I speak about paravirtual interface allow pass graphical primitives to host OS, but graphical manufacture using “vGPU” word to technology that allows split HW to multiple virtual instance and this technology is uncommon on most end-user hardware[2].
Here are some brief steps for individual virtualization software:
General instruction for most machines:
softgpu.exe
Windows 95 haven’t Setup API, or if has, it isn’t fully operable. This is reason why SoftGPU cannot install driver automatically.
Before installation you have to enable TCP/IP because Winsock 2 depends on that and LLVM in Mesa depends on Winsock. You can do it on Control panel, Network, add Protocol and choose Microsoft and TCP/IP.
After it you can run SoftGPU, when press Start!, program will install all dependencies and configure and copy files but not install driver itself.
After SoftGPU installer is done. Open Device Manager (right click on My Computer, Device Manager). Find VGA adapter and click on Properties…, tab Driver, Change driver…, Have disk…, navigate to SoftGPU installation folder and click on OK.
Now you have to choose correct driver:
VBoxSVGA
as Graphics Controller.VBoxVGA
as Graphics Controller or VirtualBox 5.xVMSVGA
as Graphics Controller or VMware Workstation.Press OK, OK and after reboot, VM should start with the new driver.
If you have an older version of SoftGPU installed, you can update without any problem: insert the CD with the latest version into the VM and click install. The installer will take care of all the necessary modifications, only to increase compatibility it is necessary to do some steps manually:
Update VirtualBox to 7.0.16
VirtualBox 7.0.16 correct some SVGA flags (my bug report). But this need for Mesa9x/SoftGPU to correct some behaviour. When you update from VirtualBox lower version, please run extra/tune/vbox-optimize-7.0.16.reg
on SoftGPU CD/in SoftGPU ZIP archive. If you don’t do do this, you probably will see black screen on most 3D application/games.
Update to version v0.5.2024.27
SVGA3D (especially vGPU10) is very memory consuming. Please consider to apply additional patches and set RAM to 1024 MB. Driver itself can cache memory allocation and it is faster when you have 1 GB RAM and more.
Update to version v0.5.2024.24
VBoxManage setextradata "My Windows 98" "VBoxInternal/Devices/vga/0/Config/VMSVGA10" "1"
For comparison, video from real end-of-era PC is here.
Here are compare between vGPU9 (VirtualBox 6.1 + 7, VMWare) versus vGPU10 (VirtualBox 7):
If we’re speaking about 3DMark99, there is also test width TNT PCI 16MB, © 1999 STB SYSTEM, INC. But on this ‘GPU’ isn’t Quake 3 playable neither in 640x480, so keep in mind that test performance and gaming performance can vary quite a bit.
Here are some videos from older versions of SoftGPU for performance comparison:
Currently there are known these limitations:
Update for 0.5.x versions: Vertex Shaders works on vGPUv10 (VirtualBox 7) and for qemu-3dfx. For vGPU9 (VMware, VirtualBox 6.1) are DirectX shaders disabled, so most of applications can use shader alternative (most of DX8 games lots of DX9).
Windows 95 support is limited - SoftGPU works, but there lots of extra bugs will appear and if you haven’t any special reasons for using Windows 95 use recommended Windows 98 Second edition instead.
There are many bugs in individual components, please post them to individual repositories based on bugged application (DirectX, Glide, OpenGL).
But still, please be patient. SoftGPU compatibility target is about a decade of intensive HW and SW development (from DOS direct VGA/VESA access, SW rendering through GDI, DirectDraw, OpenGL, Glide, DirectX, OpenGL again). After all, there will still applications that cannot be run anyway because there are written for very individual SW/HW combinations.
There are some tips without direct relation to SoftGPU but they can improve the user experience with MS Windows 9x OS.
Prefer new installation over copy older installations done on different (even virtual) HW.
If you installed Windows 9x from CD, on near every system change your will be asked to insert Install CD. You can avoid it if you prepare HDD manually, copy installation from CD and run setup.exe
from C:
drive.
All utilities you need are on patcher9x boot floppy. The short procedure follows:
fdisk
and create primary dos partition (it wizard type program, just keep pressing 1
, Y
and finally ESC
).fdisk
finishformat C:
xcopy /v D:\win98\ C:\install\win98\
patch9x C:\install\win98 -auto
C:
cd install\win98
setup /ie /nm
Explanation: The /v
switch with xcopy
means verify. The /ie
switch with setup
means skip recovery floppy creation and /nm
means no machine check - this is necessary because in Patcher9x boot floppy is using FreeDOS and MS setup program cannot determine RAM size without MS memory manager.
Now setup automatically runs scandisk
and after complete it you can continue with installer GUI. You can also remove floppy and CD from drive at this point.
Windows by default using interrupts to access HDD and CD drive. This is especially slow in the HW accelerated virtual machines because every interrupt will stop executing visualisation engine and hand over access to hypervisor to solve it and after that it’ll be need to restart visualisation engine again. Time consumed by interrupts depends on visualization technology for example in QEMU + kvm is HDD access very slow equally VirtualBox + Hyper-V and combination QEMU + Hyper-V is downright painful. Fortunately there is DMA transfer of whole memory block instead of individual bytes. Unfortunately you have to enable it manually.
You can turn it on in Device Manager on HDD properties enable DMA
checkbox. Do it the same for CD driver and reboot VM for applying changes.
After install network card you are asked every time to enter the credentials - but this is not credentials to the computer but to the network (you can also skip this by press ESC
). If you don’t plan to install NT server as other VM and runs ancient network sharing, this is only annoying thing. You can turn it off in Control panel -> Network and change Primary network logon to Windows Logon.
These are links to some extra drivers for VM:
If you wish download these drivers from Windows 9x directly, you can use these links (simply replace https -> http):
http://files.emulace.cz/ac97_362.zip
http://files.emulace.cz/sbpci_98se.exe
http://files.emulace.cz/vmmouse.zip
If you need tool for decompressing ZIP and other archives, there is 7-Zip in version with Windows 98 compatible:
http://files.emulace.cz/7z920.exe
There a few registry keys to configure SoftGPU and its component, more on softgpu.md or softgpu.html on SoftGPU CD.
make
boxvmini.drv
, vmwsmini.drv
, qemumini.drv
, vmwsmini.vxd
, vmdisp9x.inf
and place them to driver/win95
and driver/win98me
foldervmwsgl32.dll
=> driver/win95/vmwsgl32.dll
opengl32.w98me.dll
=> driver/win95/extra/opengl32.dll
mesa3d.w98me.dll
=> driver/win95/mesa3d.dll
glchecker.exe
=> tools/glchecker.exe
icdtest.exe
=> tools/icdtest.exe
wgltest.exe
=> tools/wgltest.exe
glchecker
=> tools/glchecker
vmwsgl32.dll
=> driver/win98me/vmwsgl32.dll
opengl32.w98me.dll
=> driver/win98me/extra/opengl32.dll
mesa3d.w98me.dll
=> driver/win98me/mesa3d.dll
ddraw.dll
=> driver/win95/ddraw.dll
ddrawme.dll
=> driver/win95/ddrawme.dll
d3d8.dll
=> driver/win95/d3d8.dll
d3d9.dll
=> driver/win95/d3d9.dll
dwine.dll
=> driver/win95/dwine.dll
wined3d.dll
=> driver/win95/wined3d.dll
ddraw.dll
=> driver/win98me/ddraw.dll
ddrawme.dll
=> driver/win95/ddrawme.dll
d3d8.dll
=> driver/win98me/d3d8.dll
d3d9.dll
=> driver/win98me/d3d9.dll
dwine.dll
=> driver/win98me/dwine.dll
wined3d.dll
=> driver/win98me/wined3d.dll
ddreplacer.exe
(by typing make ddreplacer.exe in Wine9x)ddreplacer path/to/extracted/ddraw.dll ddr95.dll
ddr95.dll
=> driver/win95/dx/ddr95.dll
ddr95.dll
=> driver/win98me/dx/ddr95.dll
ddreplacer path/to/extracted/ddraw.dll ddr98.dll
ddr98.dll
=> driver/win95/dx/ddr98.dll
ddr98.dll
=> driver/win98me/dx/ddr98.dll
glide2x.dll
=> driver/win95/glide2x.dll
glide3x.dll
=> driver/win95/glide3x.dll
glide2x.dll
=> driver/win98me/glide2x.dll
glide3x.dll
=> driver/win98me/glide3x.dll
driver/win95/vmdisp9x.inf
and driver/win98me/vmdisp9x.inf
and uncomment files and that you added. CopyFiles options have to look like:CopyFiles=VBox.Copy,Dx.Copy,DX.CopyBackup,Voodoo.Copy
and
CopyFiles=VMSvga.Copy,Dx.Copy,DX.CopyBackup,Voodoo.Copy
and
CopyFiles=Qemu.Copy,Dx.Copy,DX.CopyBackup,Voodoo.Copy
softgpu.ini
for final paths reviewsoftgpu.exe
softgpu.ini
driver
redist
tools
Yes, VM has also own BIOS and VGA BIOS independent on your real HW BIOS. ↩︎
Some manufactures using same silicon in server and end-user hardware and only firmware is different, so by firmware modification you can allow split GPU to multiple instance on much cheaper cards. But SoftGPU cannot utilize anything from it! Please not modify your real HW firmware unless you pretty sure, that you really know, what you doing! ↩︎
Do this before install/update DirectX redistributable, because audio drivers usually overwrite DX files with outdated versions. ↩︎