github freefrank/LostOdysseyRecomp v0.6.0

latest release: v0.6.1
5 hours ago

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-run is 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 cannot execv;
    standalone Windows recovery copies its runner from the helper itself.
  • Harden importer publication: disc resources and import-info.json now 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 controller Y, 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. Extended tools/tests/vertex_cache_test.cpp with key-participation, hit/miss, exact-mutation and bounded-churn checks.
  • Build: EXPORT_COMPILE_COMMANDS enabled and LO_BOLT_READY retained 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 只有在 writeflushclose 均成功后才发布暂存数据;最终写入失败会中止事务,不重复读取全部大文件。XDVDFS 签名扫描改为按 2048 字节边界前进,安装阶段复用已完成身份校验的读取器,同时保留最终身份复核。目标目录页支持通过按钮、F2 或目标页手柄 Y 创建唯一默认名称的文件夹,创建后自动进入并选中;支持改名,并明确报告重名、权限失败和只读目录,创建不会自动开始导入。
  • 发布工具共享runtime的shader兼容契约,固定输入版本,发布前执行回归;按目标架构限定x86编译参数。
    本轮改动不代表已经通过游戏全流程或Steam Deck帧率验收。
  • GPU索引转换缓存(LostOdysseyRecomp/gpu/renderer.cppLostOdysseyRecomp/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 + 行号表,基线代价中性)。

Don't miss a new LostOdysseyRecomp release

NewReleases is sending notifications on new releases.