タイトルで言いたいことはほぼ表せました!
MTLCompileOptions
( https://developer.apple.com/documentation/metal/mtlcompileoptions )で,MTLLanguageVersion
( https://developer.apple.com/documentation/metal/mtllanguageversion )というのが指定できます.これによって,MetalをコンパイルするときのMetalのバージョン番号を指定することができます.
今回得た知見は,Objective-Cで MTLLanguageVersion3_0
,Swiftで MTLLanguageVersion.version3_0
を含むコードをエラーなしでコンパイルするためには,macOS Ventura 13にアップグレードするだけでは足りず,Xcode 14.1 にする必要があるということです.
またObjective-CでMTLLanguageVersion3_0
はマクロとして宣言されているので,#ifdef
を用いることで,定義されているかどうかを判別できることもわかりました.
20221103 追記: macOS Monterey 12.6.1 で Xcode 14.1 をインストールできたので試したのですが,MTLLanguageVersion3_0
を含めると,下記ウォーニングが出ます.
warning: 'MTLLanguageVersion3_0' is only available on macOS 13.0 or newer [-Wunguarded-availability-new]
また,MTLDevice.newLibraryWithSource:options:error:
メソッドでエラーになって実行できないということも確認できました.
20221103 追記その2: Xcode 14.1の正式リリースが出ました.macOS Ventura 13 + Xcode 14.1 の組み合わせで動作確認できました.