Repository navigation
v1.8.1
What's Changed
Hardware emulation
Voodoo2 on the OpenGL renderer
With voodoo_renderer=opengl, a Voodoo2 now draws on the GPU only and reads back just the rows a game reads, instead of drawing every frame twice. CPU-to-screen copies queue behind the drawing, and SGRAM fills follow the card's tiled layout and stay on the GPU. 3DMark 2000 now runs at full speed with OpenGL.
- Flush once per Voodoo2 CPU-to-screen copy, not per data word by @kibertoad in #327
- Voodoo2 OpenGL: queue CPU-to-screen copies behind the drawing (#334 step 1) by @kibertoad in #339
- Voodoo2 OpenGL: draw on the GPU only, read back the rows a read touches (#334 steps 2-3) by @kibertoad in #340
- voodoo: SGRAM fills go by the card's tiles and stay on the GPU (3DMark 2000 at full speed with OpenGL) by @kibertoad in #351
- voodoo: cut the per-word costs of CPU-to-screen copies by @kibertoad in #354
Timing and speed
- cycles=auto: keep the held frame rate on steps down, judge the host by time lost by @kibertoad in #253
- Voodoo: queue texture data over textures queued triangles read by @kibertoad in #404
- idle: skip a Windows 3.1 PeekMessage loop's passes through the services it calls by @kibertoad in #366
Improved hardware support
- Ask for the discrete GPU on laptops with two graphics chips by @kibertoad in #331
- FPU: round single stores as the control word says on both cores by @kibertoad in #337
- dynrec: store singles of 80-bit values without leaving the block by @kibertoad in #324
- CD images: Joliet long names for Windows programs by @kibertoad in #304
- CD images: read High Sierra discs by @kibertoad in #305
- Win16 DPMI: 0300h-0304h run real-mode code through one entry and return by @kibertoad in #314
- win32_depth=16: a High Color desktop by @kibertoad in #313
- video: update xBRZ only in damaged regions by @firestrand in #308
- Make the Sound Blaster's output frames on the card's clock by @kibertoad in #424
- VGA: honour CRTC Mode Control's address bits 13 and 14 in planar modes by @kibertoad in #428
- Frames: don't end a batch in the blanking after a vertical retrace by @kibertoad in #431
- Built-in Windows: Video for Windows with Indeo 3 and 5, and ACM 1918 by @kibertoad in #418
- Glide: grSstWinOpen loads 3dfx's gamma, 1.3 on a Voodoo2 and Voodoo3 by @kibertoad in #454
Games fixed and optimized
Windows 98 Setup
- Win16: CLI and STI go on; an INT whose real-mode vector a program set runs it by @kibertoad in #306
- Built-in DOS: the FAT32 functions answer at any DOS version while a FAT32 drive is mounted by @kibertoad in #307
- FindFirst: the volume label only in the root, by its name by @kibertoad in #316
- FindNext on a FAT disk goes on from the directory slot by @kibertoad in #317
- IOCTL: fail subfunctions past 11h, so Win98 Setup doesn't find PC-NFS by @kibertoad in #322
- Answer IOCTL input and output status and the remote-handle check as MS-DOS does by @kibertoad in #389
The Tone Rebellion
- Built-in Windows: CreateProcessA starts Windows 3.1 programs by @kibertoad in #300
- DDRAW: leaving exclusive mode gives the desktop back by @kibertoad in #301
Sub Culture
- Built-in Windows: CreateProcessA starts Windows 3.1 programs by @kibertoad in #300
- disk: answer a name its folder lacks without asking the host by @kibertoad in #320
- dynrec: store singles of 80-bit values without leaving the block by @kibertoad in #324
- FPU: round single stores as the control word says on both cores by @kibertoad in #337
MechCommander
- DDRAW: leaving exclusive mode gives the desktop back by @kibertoad in #301
- USER32: per-queue activation, foreground lock, WM_MOUSEACTIVATE by @kibertoad in #303
NetStorm
- CD images: Joliet long names for Windows programs by @kibertoad in #304
Metal Marines
- CD images: read High Sierra discs by @kibertoad in #305
Moto Racer
- KERNEL32: look for a relative program path on the search path by @kibertoad in #310
- Registry: Windows has a product id (Moto Racer install check) by @kibertoad in #311
- COMDLG32: keep the old dialog's folder list in path order by @kibertoad in #312
- Voodoo2: 8-bit texture downloads follow their own TMU's mode by @kibertoad in #315
- Voodoo2: a graphics reset shows buffer 0 and draws into buffer 1 by @kibertoad in #330
Glover
- DirectDraw: give a back buffer attached on the 3dfx device the card's pitch (Glover, #207) by @kibertoad in #319
- win32: a timed wait ends on time, and its thread runs at once by @kibertoad in #333
Oni
- USER32: leave the 0x of %#x out of wsprintf's width by @kibertoad in #345
- Built-in DLLs: export under Windows 98 SE's ordinals by @kibertoad in #364
- Built-in Windows: open the system tables to level 3, as Windows 98 does by @kibertoad in #367
- Built-in Windows: WOW32.DLL's generic thunks by @kibertoad in #380
Unreal Gold
- OPENGL32: draw full screen on a Voodoo2, as 3dfx's Voodoo2 driver did by @kibertoad in #349
Prehistorik 2
- Game fixes in one table: Prehistorik 2's Sound Blaster mix, which had clicks at every note by @kibertoad in #359
- Make the Sound Blaster's output frames on the card's clock by @kibertoad in #424
- VGA: honour CRTC Mode Control's address bits 13 and 14 in planar modes by @kibertoad in #428
- Frames: don't end a batch in the blanking after a vertical retrace by @kibertoad in #431
- Ignore writes to floppy controller ports when no controller is attached by @kibertoad in #399
Jukebox Adventure
- Game fixes in one table: Jukebox Adventure's Sound Blaster mix and its title screen hang by @kibertoad in #359
Johnny Castaway
- USER32: don't take a sent message again while it is being handled by @kibertoad in #355
- Win16: zero the segment registers that hold a selector being freed by @kibertoad in #357
- USER32: a window shown or moved under the cursor gets a WM_MOUSEMOVE by @kibertoad in #365
- idle: skip a Windows 3.1 PeekMessage loop's passes through the services it calls by @kibertoad in #366
- Built-in Windows: the screen saver's timer, and .SCR from the prompt by @kibertoad in #384
Giants: Citizen Kabuto
- Built-in Windows: DINPUT8.DLL, DirectX 8's DirectInput by @kibertoad in #350
- Direct3D 7: clip vertex buffers that ProcessVertices clipped by @kibertoad in #356
- DirectDraw: a mipmap's levels in one block of video memory by @kibertoad in #445
Omikron: The Nomad Soul
- ddraw: IDirectDrawSurface4 compares only dwCaps in GetAttachedSurface by @kibertoad in #368
- MSVCRT: _set_se_translator by @kibertoad in #369
- USER32: clip the update region when validating, as Windows does by @kibertoad in #370
ACM 1918
- Built-in Windows: Video for Windows with Indeo 3 and 5, and ACM 1918 by @kibertoad in #418
Drakkhen
- Keep a process made with AH=26h resident and return to its maker by @kibertoad in #409
Myth: The Fallen Lords
- Voodoo: queue texture data over textures queued triangles read by @kibertoad in #404
Test Drive 4
- Built-in MSACM32.DLL for programs that only ask its metrics by @kibertoad in #436
- Glide: grSstControl gives the monitor to the card and takes it away by @kibertoad in #437
- USER32: ExitWindowsEx ends the session by @kibertoad in #438
- Glide: grSstWinOpen loads 3dfx's gamma, 1.3 on a Voodoo2 and Voodoo3 by @kibertoad in #454
- winmm: the Sound Blaster 16's seven aux devices by @kibertoad in #455
Program Manager (Windows 3.1)
- Win16 KERNEL: GetCurrentDirectory (411) and SetCurrentDirectory (412) for Program Manager by @kibertoad in #448
Other changes:
- ddraw: IDirectDrawSurface4 compares only dwCaps in GetAttachedSurface by @kibertoad in #368
- Record what the frames before an audio underrun did by @kibertoad in #383
- Skip frame limiters that read the built-in Windows's clock by @kibertoad in #388
- Keep the running speed and the mounted disk image on a state load by @kibertoad in #335
- Save states: W32 section version 22 for DirectInput app data by @kibertoad in #430
- Give the debug server's log the lines logged before it started by @kibertoad in #336
- Audio: a null output on an exact clock, and no measuring on SDL's dummy driver by @kibertoad in #427
- Win32: load built-in DLLs dynamically as Windows does by @kibertoad in #394
- win32: run exception handlers with TF clear by @kibertoad in #397
- Add an issue form for problems in a game or program by @kibertoad in #352
- AGENTS.md: a pull request's lifecycle, from draft to ready by @kibertoad in #363
- tools: a run lock with shared builds and exclusive measurements by @kibertoad in #379
- run-lock: wait at most two hours by default by @kibertoad in #406
- AGENTS: decide timing measurements by what the claim quotes by @kibertoad in #407
- web: record memchr in the lock file by @kibertoad in #395
- Test: freeze the host clock in the clock-wait comparison by @kibertoad in #451
- CI: move the Windows 7 build to nightly-2026-10-31 by @kibertoad in #401
- CI: compile shaders with glslang; fix xBRZ's mix overload by @kibertoad in #302
- Add dosc extension and key/mouse focus in libretro by @dividebysandwich in 5c3cba0c
Full Changelog: v1.8.0...v1.8.1