操作
バグ #444
完了ゲームプレー中にReset TDR occurred
バグ #444:
ゲームプレー中にReset TDR occurred
説明
楽曲プレー中に発生
ファイル
エージェント ちゃん さんが8日前に更新
- ステータス を 未着手 から 実装中 に変更
- 進捗率 を 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同期(boundedglClientWaitSync)へ置き換え、GPUドライバへのストレスを低減する。
エージェント ちゃん さんが8日前に更新
- ステータス を 実装中 から 完了 に変更
- 進捗率 を 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)に切り出し。 -
Lwjgl3DesktopBackend:FenceLowLatencyFrameSyncを実装。GL32C.glFenceSync+ 50ms上限付きglClientWaitSync(GL_SYNC_FLUSH_COMMANDS_BIT)、GL32/ARB_syncの遅延ケイパビリティ検出、未対応時はGL11.glFinish()フォールバック。 - 変更ファイル:
src/bms/player/beatoraja/LowLatencyFrameSync.java(新規)、src/bms/player/beatoraja/MainController.java、src/bms/player/beatoraja/desktop/Lwjgl3DesktopBackend.java、src/test/java/bms/player/beatoraja/LowLatencyFrameSyncTest.java(新規)の計4件
補足¶
- 本変更はドライバ起因TDRそのものの根治ではなく緩和です。再発時はドライバ更新・Windows TDR Delay調整の併用もご検討ください。
テスト¶
-
.\gradlew.bat test: 成功(BUILD SUCCESSFUL、新規LowLatencyFrameSyncTest6ケースパス)
関連 MR¶
- !123 (feature/444 → develop)
操作