OSDN Ticket Archive


Ticket #46016

macOS版 アンチエイリアス設定不備によりアプリ起動時にMetal初期化処理でクラッシュする

登録: 2022-10-30 23:19 最終更新: 2022-10-31 00:20

報告者:
yknk
担当者:
yknk
チケットの種類:
バグ
状況:
完了
コンポーネント:
MIDITrail Ver.2.x.x for macOS
マイルストーン:
Version 2.0.2 for macOS (完了済み)
優先度:
5 - 中
重要度:
7
解決法:
修正済み
ファイル:
なし

詳細

MIDITrailをVer.1.x.xからVer.2.0.xにバージョンアップした後でアプリを起動すると、 以下のエラーメッセージが繰り返し表示され、アプリを利用できない。

1回目のエラー
ERROR
Metal API error.
FIEL: OGLPrimitive.mm
LINE: 331
INFO: 00000001 00000000

2回目以降のエラー(繰り返し)
ERROR
Program error.
FILE: MTMainView.mm
LINE: 431
INFO: 00000000 00000000

チケットの履歴

2022-10-30 23:19 更新者: yknk
  • 新しいチケット "macOS版 アンチエイリアス設定不備によりアプリ起動時にMetal初期化処理でクラッシュする" が作成されました
2022-10-30 23:21 更新者: yknk
コメント

原因

OpenGLからMetalに移行したときの、ユーザ設定値引き継ぎの検討漏れ。

エラー発生の直接原因

メインビュー初期化処理(MTMainView:initWithFram:rendaerParam)で、 アンチエイリアスのサンプル数に、Mac(Metal)が対応していないサンプル数を設定した場合に、 レンダーパイプラインの生成処理が失敗して、当該エラーが発生する。

エラー発生箇所
OGLPrimitive::_CreateRenderPipelineState_V3N3CT2
----
//レンダーパイプライン状態生成
m_MTLRenderPipelineState = [mtlDevice newRenderPipelineStateWithDescriptor:m_pRenderPipelineDescriptor error:&pError];
----

デバッガによるエラーメッセージ出力
---
2022-10-29 23:08:37.782222+0900 MIDITrail[5720:206089] Failed to created pipeline state, error rasterSampleCount (6) is not supported by device.
---

Mac(Metal)が対応していないサンプル数を設定する原因

OpenGLとMetalでは、サポートしているサンプル数が異なる場合がある。 ユーザがMIDITrail Ver.1.x.xを利用していたときに、グラフィック設定ダイアログでユーザが選択したサンプル数が、 Metal側でサポートされていなかった場合、MIDITrail 2.x.xにアップデートするとアプリ起動時に当該エラーが発生してしまう。

グラフィック設定ダイアログのアンチエイリアス設定

  • MIDITrail Ver.1.x.xでは、OpenGLを用いてMacがサポートしているサンプル数を調べ、アンチエイリアス設定の選択肢として表示してきた。
  • MIDITrail Ver.2.0.xでは、Metalを用いてMacがサポートしているサンプル数を調べ、アンチエイリアス設定の選択肢として表示している。

それぞれで表示するアンチエイリアス設定の選択肢には、次のような差異が生じる。

Mac mini (Late 2014) / MIDITrail Ver.1.3.6 (OpenGL)
 * Multi-Sample 2x
 * Multi-Sample 4x
 * Multi-Sample 6x
 * Multi-Sample 8x
Mac mini (Late 2014) / MIDITrail Ver.2.0.1 (Metal)
 * Multi-Sample 4x
 * Multi-Sample 8x
Mac Book Air (M1, 2020) / MIDITrail Ver.1.3.6 (OpenGL)
 * SUper-Sample 2x
 * SUper-Sample 4x
 * Multi-Sample 2x
 * Multi-Sample 4x
Mac Book Air (M1, 2020) / MIDITrail Ver.2.0.1 (Metal)
 * Multi-Sample 2x
 * Multi-Sample 4x

2022-10-30 23:22 更新者: yknk
コメント

対策方針

ユーザ設定値のサンプル数をそのままメインビューに設定せず、Metalがサポートしているサンプル数であるかを事前にチェックする。 Metalがサポートしていないサンプル数だった場合は、アンチエイリアス無効(サンプル数1)で処理を進める。

対策

MIDITrailApp::_LoadGraphicConf

  • アンチエイリアスのユーザ設定を読み込んだ後に、サンプル数の設定値がMetalでサポートされている値であるかチェックする処理を追加。
  • Metalがサポートしていないサンプル数だった場合は、アンチエイリアス無効とする。

MTGraphicCfgDlg::loadConfFile

  • ユーザ設定値でアンチエイリアス無効が設定されていた場合に、メンバのサンプルモードとサンプル数に値を設定する処理を追加。
  • サンプル種別とサンプル数のユーザ設定値を読み込むとき、デフォルト値をそれぞれOGLMultisampleBitと1に変更。

MTGraphicCfgDlg::initPopUpButtonAntiAlias

  • ユーザ設定値がMetalにサポートされていないサンプル数だった場合は、ユーザ設定値をアンチエイリアス無効とみなす処理を追加。

MTGraphicCfgDlg::saveAntiAlias

  • アンチエイリアス無効が選択されていた場合に、サンプル種別とサンプル数をそれぞれOGLMultisampleBitと1で保存する処理を追加。
2022-10-31 00:20 更新者: yknk
  • 状況オープン から 完了 に更新されました
  • 解決法なし から 修正済み に更新されました

添付ファイルリスト

添付ファイルはありません