Skip to content

Ferrum development journal · Part 7 of 19

Building the 32-Bit Graphics Path

The 32-bit path progressed from API setup to real Vulkan commands and a known-pixel readback. That established important pieces without establishing a visible Portal frame.

The 32-bit Windows target is important because an ARM64 Mac can't simply run those programs as native code. Ferrum needs to translate their Intel instructions and correctly handle their smaller pointers, structures, and calling conventions. A graphics API adds a lot of those structures in one place.

During this phase, the i386 path gained more of the Vulkan connection: surfaces, swapchains, presentation, commands, synchronization, and descriptor-related work. One recorded test had a 32-bit guest draw a known pixel and read it back. Another set of changes moved DXVK initialization through its display-adapter requirements and into real device creation.

A known-pixel test is useful because it gives us something more precise than a successful function return. We can ask whether the command reached the right resource and produced the requested result. The conversion code also has to carry array lengths, offsets, handles, and pointers correctly across the 32-to-64-bit boundary.

There is an important limitation here. These focused graphics tests do not prove that an entire 32-bit game has the Windows environment it needs. The existing host-implemented import path was useful for finding problems, but the product goal is to run arbitrary applications through real Wine components, without adding one more title-specific import every time a different game asks for something.

Portal became a demanding case for that work. It exercised a much larger combination of the loader, runtime, graphics, and application APIs than a small drawing fixture. Progress through those layers is worth recording, but I wouldn't describe device creation or command submission as a playable game.

What we had by this stage was a stronger graphics foundation with specific readback evidence. The application startup path, a visible game frame, and the menu were still separate milestones. Keeping them separate makes it easier to see what the next fix actually accomplishes.

Ferrum development journal

View the journal

Live19 entries so farUpdated New (19 entries updated in the last 14 days)

  1. Part 1Bringing FEX to macOS: The First Windows ProgramDevelopment work: Aug 5 – 7, 2026Updated , new
  2. Part 2From Return Values to Pixels and SoundDevelopment work: Aug 8 – 11, 2026Updated , new
  3. Part 3Building More of the Windows RuntimeDevelopment work: Aug 12 – 18, 2026Updated , new
  4. Part 4Following a Game Through Its Opening VideoDevelopment work: Aug 19 – 20, 2026Updated , new
  5. Part 5Installers, Saves, Fonts, and the Parts Around the GameDevelopment work: Aug 21 – 22, 2026Updated , new
  6. Part 6Game Progress and Measuring the Right ThingDevelopment work: Aug 23 – 27, 2026Updated , new
  7. Part 7Building the 32-Bit Graphics PathDevelopment work: Aug 28 – Sep 1, 2026Updated , new
  8. Part 8Making Memory, Files, and Graphics State AgreeDevelopment work: Sep 2 – 3, 2026Updated , new
  9. Part 9DirectX 12, Shader Caches, and the Steam Startup WorkDevelopment work: Sep 4 – 6, 2026Updated , new
  10. Part 10Working on Presentation and Controller InputDevelopment work: Sep 7 – 12, 2026Updated , new
  11. Part 11A Launcher and a Freeze That Wasn't the PresenterDevelopment work: Sep 15 – 17, 2026Updated , new
  12. Part 12Portal Reaches a Command Stream, With the Frame Still AheadDevelopment work: Sep 23 – 26, 2026Updated , new
  13. Part 13Correcting the Ferrum Progress ReportDevelopment work: Oct 2, 2026Updated , new
  14. Part 14Recovering the Project and Resuming Real TestsDevelopment work: Oct 5, 2026Updated , new
  15. Part 15Making Memory Protection and Lifetime Tests More UsefulDevelopment work: Oct 6 – 9, 2026Updated , new
  16. Part 16Getting Wine's Real 32-Bit Startup to RunDevelopment work: Oct 9 – 11, 2026Updated , new
  17. Part 17Making the Launcher Own Its Storage and ProcessesDevelopment work: Oct 11, 2026Updated , new
  18. Part 18A Real Archive Roundtrip and Better File BehaviorDevelopment work: Oct 11, 2026Updated , new
  19. Part 19Asynchronous I/O and the Bytes a Cancelled Write KeepsDevelopment work: Oct 11, 2026Updated , new

Arrow keys move through the results, Enter opens one, Command or Control with Enter opens it in a new tab. Tab and Shift+Tab change which kind of results are shown.