Lost Odyssey Recomp v0.6.0
This milestone means a lot to me. Since v0.5.0, I've spent countless hours fixing crashes and visual bugs, improving the importer and updater, and making the game faster. Thank you to everyone who reported a problem, shared a capture, or tested a fix.
The release includes Windows x64 and native Linux x64 packages. Both bundle a portable Vulkan shader pack to avoid the long first-run compilation for shaders we've captured. An uncovered shader can still compile when a scene first uses it, so occasional brief stutter is possible. The performance work spans CPU waits, shader preparation, presentation, and cache behavior. Results vary by machine and scene; Steam Deck performance still needs testing on Deck hardware.
Looking ahead to v0.7.0, I plan to keep improving performance and quality of life, and work toward DLSS and FSR scaling, frame generation, and a macOS release. These are plans, not features in v0.6.0.
Special thanks to Cristian and Whitesun for supporting the project on Ko-fi.
See the installation guide to get started. Please report issues with the log from that run; for visual bugs, the F1 → Capture render state ZIP helps us investigate.
Changes in v0.6.0
English
- 0.6.0 prerelease audit repairs: atomic multi-object waits, reference-counted
kernel handles and non-blocking thread close with independently owned worker state. - Retry transient shader/module failures with bounded backoff; preserve permanent
negative compilation results. Cancel every eager shader/PSO preparation phase. - Preserve presentation resources on allocation/map failure, resolve display
transactions, and synchronize backend selection with window policy updates. - Compare vertex cache content exactly with a bounded CPU snapshot budget; no
per-draw cryptographic hashing. Honor serial overrides and Linux memory limits. - Repair the 0.6.0 audit findings in the geometry, benchmark, clock and updater
paths: large vertex/index cache hits compare complete source content; the
index cache has a 64 MiB payload budget and evicts or bypasses entries under
pressure;tools/drive_city.py --dry-runis read-only and protects overlapping
save paths; guest PPC timebase now uses the same pause-aware high-resolution
clock as the active game clock; Linux update apply removes completed staging
data and restores the previous AppImage when the replacement cannotexecv;
standalone Windows recovery copies its runner from the helper itself. - Harden importer publication: disc resources and
import-info.jsonnow require
successful write, flush and close operations before staged data is published;
any finalization failure aborts the transaction without rereading the full
resource. Align XDVDFS signature scanning to 2048-byte boundaries and reuse
the identity-verified reader during installation while retaining the final
identity check. The destination browser can create a uniquely named folder
with the button,F2, or destination-page controllerY, edit its name,
enter and select it automatically, and report collisions, permission
failures and read-only destinations without starting an import. - Share the portable shader runtime contract with the release verifier; pin shader
inputs and gate releases on native/portable pack regressions. Guard x86 compiler
flags by target architecture. These changes do not certify gameplay or Deck FPS. - GPU index conversion cache (
LostOdysseyRecomp/gpu/renderer.cpp,LostOdysseyRecomp/gpu/vertex_cache.h): cache post-expansion indices for large buffers (count >= 256) keyed by extent plus conversion parameters and validated against exact source content. The cache now has a bounded 64 MiB payload budget and reports bytes, peaks and evictions. Previous 15W city measurements used sampled matching and do not carry over as performance evidence after the correctness repair; remeasure with the final release binary. Extendedtools/tests/vertex_cache_test.cppwith key-participation, hit/miss, exact-mutation and bounded-churn checks. - Build:
EXPORT_COMPILE_COMMANDSenabled andLO_BOLT_READYretained so Clang builds stay BOLT-ready (emit-relocs+ line tables, baseline-neutral).
简体中文
- 0.6.0预发布审计修复:原子化多对象等待、句柄引用管理及不阻塞的线程句柄关闭。
- shader暂时失败可退避重试,确定性失败保留负缓存;取消覆盖shader和PSO准备各阶段。
- 呈现资源分配或映射失败保留旧资源并结束显示事务,同步后端选择与窗口策略。
- 顶点缓存采用有内存上限的精确内容比较,不增加逐draw加密哈希;修正串行优先级及Linux内存检测。
- 修复0.6.0审计发现的几何、基准工具、时钟和更新器问题:大顶点/索引缓存命中完整比较源内容;索引缓存增加64 MiB有效载荷上限并在压力下淘汰或绕过;
tools/drive_city.py --dry-run改为只读并拒绝重叠存档路径;PPC timebase 与感知暂停的高精度游戏时钟统一;Linux 更新成功后清理暂存,替换后无法execv时恢复旧 AppImage;Windows 独立恢复使用 helper 自身作为 runner。 - 加固导入器发布流程:光盘资源与
import-info.json只有在write、flush、close均成功后才发布暂存数据;最终写入失败会中止事务,不重复读取全部大文件。XDVDFS 签名扫描改为按 2048 字节边界前进,安装阶段复用已完成身份校验的读取器,同时保留最终身份复核。目标目录页支持通过按钮、F2或目标页手柄Y创建唯一默认名称的文件夹,创建后自动进入并选中;支持改名,并明确报告重名、权限失败和只读目录,创建不会自动开始导入。 - 发布工具共享runtime的shader兼容契约,固定输入版本,发布前执行回归;按目标架构限定x86编译参数。
本轮改动不代表已经通过游戏全流程或Steam Deck帧率验收。 - GPU索引转换缓存(
LostOdysseyRecomp/gpu/renderer.cpp、LostOdysseyRecomp/gpu/vertex_cache.h):对大缓冲(count >= 256)按范围和转换参数缓存展开后的索引,并对源内容进行完整比较。缓存增加64 MiB有效载荷上限,超限时淘汰或绕过,并记录字节数、峰值和淘汰次数。此前15W乌斯拉进城数据基于抽样比较,正确性修复后不再作为当前性能证据;应使用最终发布二进制重新测量。tools/tests/vertex_cache_test.cpp新增键参与度、命中/失效、完整变异和有界抖动检查。 - 构建:启用
EXPORT_COMPILE_COMMANDS,保留LO_BOLT_READY使Clang构建持续BOLT就绪(emit-relocs+ 行号表,基线代价中性)。