A path tracer through the translation stack

marianposaceanu1 pts0 comments

A path tracer through the translation stack: Quake II RTX on Apple M4

Skip to content

The short version

It works, but not by persuading stock CrossOver that the M4 is an NVIDIA GPU. The working route gives the unmodified Steam executable an experimental Vulkan implementation that exposes acceleration structures and ray queries, then lets MoltenVK translate those operations to Metal’s native ray-tracing facilities.

Verified outcome

The stock q2rtx.exe selected “Apple M4,” enabled VK_KHR_acceleration_structure and VK_KHR_ray_query, chose the ray-query API, initialized renderer, audio, and input, and produced real gameplay frames with visible god rays.

God-rays result. The patched pass remained active in this outdoor scene at a 70% render scale; the overlay reads 57 FPS. The observed test session remained stable and did not crash. This frame records the result rather than serving as a benchmark or long-duration soak test.

This is a sidecar, not an in-place CrossOver modification. CrossOver’s signed app bundle, q2rtx.exe, and the packaged Steam shaders remain untouched. A launcher selects one custom libMoltenVK.dylib and a loose shader file overrides one packaged Q2RTX shader. Removing the launcher, sidecar directory, and loose override reverses the experiment.

The M4 had the ray-tracing hardware all along. The missing piece was the Vulkan-to-Metal path that could expose it to this Windows game.

Read the boundary before copying commands. The MoltenVK branch is an unmerged experimental pull request, and this build advertises two Vulkan features more generously than the M4 implementation supports. Q2RTX’s only sampler-minimum use is replaced with explicit shader reads; the pipeline-statistics request appears unused. Those exceptions are bounded to this game and these pinned artifacts, not a generic recipe for other ray-traced titles.

M4 Metal ray tracing: Verified<br>Native arm64 and Rosetta x86_64 probes both reported ray tracing and function-pointer support.

Stock CrossOver path: Fails<br>Its bundled MoltenVK does not expose the Vulkan ray-tracing extensions Q2RTX requires.

Custom ray-query path: Verified<br>Q2RTX 1.8 selected Apple M4 and initialized with VK_KHR_ray_query.

God rays on M4: Visually verified<br>A loose SPIR-V override manually reduces the four contributing shadow-map texels. The patched pass rendered coherent volumetric shafts in demo1.

Observed test-session stability: Verified<br>The game remained stable and did not crash during the observed session. Production-grade performance and longer soak stability remain untested.

Why the normal Steam button stops before the first frame

Quake II RTX is unusual in a useful way: although the “RTX” name is associated with NVIDIA, its renderer speaks Vulkan. It does not need DirectX Raytracing, and it does not need the machine to masquerade as an RTX card. It needs a Vulkan device that exposes a compatible acceleration-structure and ray-tracing API.

CrossOver 26.3 ships an x86_64 MoltenVK 1.2.10 library for Vulkan-on-Metal, but that stock library does not advertise the Vulkan ray-tracing extensions. The ordinary Steam launch therefore reaches Q2RTX’s device scan and ends at:

Stock launch result

No ray tracing capable GPU found.

That message is easy to misread. It does not mean the Apple GPU lacks ray tracing. On this machine, a tiny Metal probe compiled for arm64 and again for x86_64 under Rosetta returned supportsRaytracing=1, supportsFunctionPointers=1, and supportsRaytracingFromRender=1 in both cases. CPU translation was not the blocker either.

The failure was an API-exposure gap: Metal could do the work, but the bundled Vulkan bridge did not offer the contract the game asks for. CodeWeavers’ own compatibility entry correspondingly rates the title “Installs, Will Not Run.”

There are five layers between the game and the M4

The useful mental model is a translation stack, not a GPU spoof. The Windows executable remains x86_64; Wine provides Win32 services; MoltenVK maps Vulkan resources and commands to Metal; Metal targets the M4.

GameSteam q2rtx.exe · x86_64 Windows · path-traced renderer

Graphics APIVulkan acceleration structures + VK_KHR_ray_query

CompatibilityCrossOver Wine · Win32/SDL surface and process environment

TranslationExperimental x86_64 MoltenVK sidecar · Vulkan → Metal

HardwareMetal ray tracing · Apple M4 GPU

The launcher changes the fourth layer for this process. It does not patch the first layer or replace CrossOver’s bundled library.

Rosetta matters because CrossOver’s Wine loader and the sidecar are x86_64 Mach-O binaries. It is not emulating the GPU. MoltenVK still submits Metal work to the native Apple GPU driver.

The route exists in an experimental MoltenVK pull request

The enabling work is MoltenVK pull request #2771, carried in the macgaming/ray-query-pr branch of dttdrv/MoltenVK. The test documented here pins commit 25440e4e1d54419a27a72bab3663068c3d797bfe; do not silently build whatever the branch happens to...

vulkan moltenvk metal tracing q2rtx crossover

Related Articles