SDL_GPUShader * SDL_CreateGPUShader(SDL_GPUDevice *device, const SDL_GPUShaderCreateInfo *createinfo);
| SDL_GPUDevice * | device | GPUコンテキスト |
| const SDL_GPUShaderCreateInfo * | createinfo | 生成するシェーダの状態を表す構造体 |
シェーダリソースのバインドはシェーダの形式に依存する特定の順序で記述する必要がある.
SPIR-Vシェーダは次のリソースセットを使用する:
頂点シェーダの場合:
0: サンプリングされたテクスチャ, その次にストレージテクスチャ, その次にストレージバッファ
1: ユニフォームバッファ
フラグメントシェーダの場合:
2: サンプリングされたテクスチャ, その次にストレージテクスチャ, その次にストレージバッファ
3: ユニフォームバッファ
DXBCまたはDXILシェーダは次のレジスタの順で使用する:
(t[n], space0): サンプリングされたテクスチャ, その次にストレージテクスチャ, その次にストレージバッファ
(s[n], space0): サンプリングされたテクスチャに対応したインデックス付きのサンプラ
(b[n], space1): ユニフォームバッファ
ピクセルシェーダの場合:
(t[n], space2): サンプリングされたテクスチャ, その次にストレージテクスチャ, その次にストレージバッファ
(s[n], space2): サンプリングされたテクスチャに対応したインデックス付きのサンプラ
(b[n], space3): ユニフォームバッファ
MSL/metallibは次の順で使用する:
[[texture]]: サンプリングされたテクスチャ, その次にストレージテクスチャ
[[sampler]]: サンプリングされたテクスチャに対応したインデックス付きのサンプラ
[[buffer]]: ユニフォームバッファ, その次にストレージバッファ.
頂点バッファ0は[[buffer(14)]], 頂点バッファ1は[[buffer(15)]]のようにバインドされる.
頂点バッファのインデックス番号は手動で決めるのではなく, 自動的にSDL_GPUGraphicsPipelineから頂点入力情報を使用する[[stage_in]]を使用すること
D3D12では, シェーダセマンティクスは他のシステム値のセマンティクスとは違い重要ではなく, またSDLの実装を使いやすくするためにシステム値のセマンティクス以外は全てTEXCOORDであることを想定している.
シェーダのソース言語としてHLSLを使用する場合, 頂点セマンティクスはTEXCOORD0で始まりTEXCOORD1, TEXCOORD2, ...のように1ずつ増加する必要がある.
セマンティクスの接頭語をTEXCOORD以外に変更したい場合はSDL_CreateGPUDeviceWithProperties()でSDL_PROP_GPU_DEVICE_CREATE_D3D12_SEMANTIC_NAME_STRINGを使用すること.
その他の任意のプロパティはpropsで設定できる.
対応するプロパティ:
SDL_PROP_GPU_SHADER_CREATE_NAME_STRING: デバッグツールに表示される名前