Ticket #46016

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

Open Date: 2022-10-30 23:19 Last Update: 2022-10-31 00:20

Reporter:
Owner:
Type:
Status:
Closed
Priority:
5 - Medium
Severity:
7
Resolution:
Fixed
File:
None

Details

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

Ticket History (3/4 Histories)

2022-10-30 23:19 Updated by: yknk
  • New Ticket "macOS版 アンチエイリアス設定不備によりアプリ起動時にMetal初期化処理でクラッシュする" created
2022-10-30 23:21 Updated by: yknk
Comment

原因

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 Updated by: yknk
Comment

対策方針

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

対策

MIDITrailApp::_LoadGraphicConf

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

MTGraphicCfgDlg::loadConfFile

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

MTGraphicCfgDlg::initPopUpButtonAntiAlias

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

MTGraphicCfgDlg::saveAntiAlias

  • アンチエイリアス無効が選択されていた場合に、サンプル種別とサンプル数をそれぞれOGLMultisampleBitと1で保存する処理を追加。
2022-10-31 00:20 Updated by: yknk
  • Status Update from Open to Closed
  • Resolution Update from None to Fixed

Attachment File List

No attachments

Edit

Please login to add comment to this ticket » Login