2016-03-20 15 views
2

実行時に生成されるシェーダコードについては、コンパイル済みの金属シェーダ言語(MSL)コードを直接(.metallibファイルにあり、newLibraryWithData:error:メソッドで使用されているように)コードを直接生成することができるかどうかを調べることに興味があります。 (newLibraryWithSource:options:error:メソッドで使用される)人間が読めるMSLソースコードを自動生成する代わりに、このためメタルコンパイルされたメタリブシェーダファイルのフォーマット?

理由は2つある:

  1. コンパイル・コードのフォーマットによっては、むしろ人間をいじりより自動生成コンパイルされたシェーダコードへのプログラムのための簡単かつきれいかもしれ読める形式。
  2. シェーダのコンパイルステージを削除すると、ランタイム生成シェーダの作成が高速化されます。

コンパイルされたMSLコードの形式については、.metallibファイルに記載されていますか?コンパイルされた形式はGPU固有のものか、またはnewLibraryWithData:error:メソッドの最終コンパイル段階でGPUレベルに変換される中間言語形式として存在しますか?

答えて

2

metallibのファイルの形式は一般には公表されていません。ライブラリファイルには、本質的にメタデータとコンパイルされたシェーダコードが、LLVMから派生した中間言語で含まれています。これはデバイスに依存しません。この中間言語を最終マシンコードに変換する第2のバックエンドコンパイルステップがあります。直接中間コードを生成することはできませんが、これが必要な機能であれば、アップルで拡張要求のバグを報告する必要があります。

+0

ありがとうございました。内部構造を理解するためのあなたのソースは何ですか(中間言語とメタなど)。 –

関連する問題