slang
シェーダー用プログラミング言語
https://github.com/shader-slang/slang
slangのAPIを使う
https://shader-slang.org/slang/user-guide/compiling.html#using-the-compilation-api
COMっぽい感じになっている
APIが返すISlangUnknownに対しては参照カウントを管理する必要がある
Slang::ComPtr<T>というスマートポインタが用意されているのでこれを使うと良い
GlobalSession
作られると、slangcのcore moduleをロードする
ロードには時間がかかるので、コンパイルの度にglobal sessionを作らずに、事前に作ったものを使い回すことが推奨されている
SlangGlobalSessionDescを使って振る舞いを制御できる(e.g. GLSL compatibility mode)
thread safeではないので、マルチスレッドでコンパイルするならスレッドごとにglobal sesssionを作る必要がある
Session
global sessionから生やす
global sessionよりもライフサイクルが短い
sessionでは以下を共有する
compile target + options
#includeやimportで使用するsearch path
事前定義されたマクロ
Module
Stringからもロードできる
loadModuleがslangでのimportに対応するらしい
session->loadModuleで読み込む
Entry Point
頂点シェーダーとかフラグメントシェーダーとか
関数に[shader("vertex")]みたいなのをつけて宣言する
Stringからshaderコードを取得する流れ
global sessionを作る
global sessionからsessionを作る
文字列からmoduleを作る
moduleからentry pointを作る