プロジェクト

全般

プロフィール

バグ #444

完了

ゲームプレー中にReset TDR occurred

バグ #444: ゲームプレー中にReset TDR occurred

いづ さん さんが9日前に追加. 8日前に更新.

ステータス:
完了
優先度:
通常
担当者:
対象バージョン:
開始日:
2026/06/27
期日:
進捗率:

100%

予定工数:

説明

楽曲プレー中に発生


ファイル

beatoraja.log (325 KB) beatoraja.log いづ さん, 2026/06/27 20:23
log.evtx (68 KB) log.evtx いづ さん, 2026/06/27 20:23
log2.evtx (68 KB) log2.evtx いづ さん, 2026/06/27 20:23

エージェント ちゃん さんが8日前に更新 操作 #1

  • ステータス未着手 から 実装中 に変更
  • 進捗率0 から 10 に変更

実装に着手しました。

  • ブランチ: feature/444
  • 対応方針: 添付ログ解析の結果、本事象はNVIDIAドライバ起因のGPU TDR(バグチェック0x141 / nvoglv64.dllのfail-fast、Ada GPU)であり、beatoraja内のロジックバグではないことを確認。プロセス内での復帰は原理的に不可能なため、beatoraja側で制御可能な唯一の関連要素である「frame pacing=Low Latency / Low Latencyモード時の毎フレーム glFinish()」を、TDRを誘発・悪化させにくい軽量なfence同期(bounded glClientWaitSync)へ置き換え、GPUドライバへのストレスを低減する。

エージェント ちゃん さんが8日前に更新 操作 #2

  • ステータス実装中 から 完了 に変更
  • 進捗率10 から 100 に変更

対応が完了しました。

概要

楽曲プレー中のWindows GPU TDRクラッシュ(バグチェック0x141 / nvoglv64.dllのfail-fast / Ada GPU)の緩和。根本はNVIDIAドライバ起因のTDRでbeatoraja内のロジックバグではないが、beatoraja側で制御可能な唯一の要素である「Low Latencyフレームペーシング時の毎フレーム glFinish()」を、ドライバ負荷の軽い上限付きフェンス同期へ置換した。

変更点

  • LowLatencyFrameSync(関数型インターフェース)を新設し、低遅延モード時のフレーム末尾GPU同期を戦略化。
  • MainController:戦略を注入可能にし、未注入時は従来どおり Gdx.gl.glFinish() にフォールバック。発火条件は不変。判定を純粋静的ヘルパー isLowLatencyFrameSyncEnabled(Config) に切り出し。
  • Lwjgl3DesktopBackendFenceLowLatencyFrameSync を実装。GL32C.glFenceSync + 50ms上限付き glClientWaitSyncGL_SYNC_FLUSH_COMMANDS_BIT)、GL32/ARB_syncの遅延ケイパビリティ検出、未対応時は GL11.glFinish() フォールバック。
  • 変更ファイル: src/bms/player/beatoraja/LowLatencyFrameSync.java(新規)、src/bms/player/beatoraja/MainController.javasrc/bms/player/beatoraja/desktop/Lwjgl3DesktopBackend.javasrc/test/java/bms/player/beatoraja/LowLatencyFrameSyncTest.java(新規)の計4件

補足

  • 本変更はドライバ起因TDRそのものの根治ではなく緩和です。再発時はドライバ更新・Windows TDR Delay調整の併用もご検討ください。

テスト

  • .\gradlew.bat test : 成功(BUILD SUCCESSFUL、新規 LowLatencyFrameSyncTest 6ケースパス)

関連 MR

  • !123 (feature/444 → develop)

他の形式にエクスポート: PDF Atom