非常にクールな説明!私も混乱してしまいました。あなたの質問と説明の後、私にとっては明らかです!
しかし私はこの投稿の良い例を見つけました。これは分かち合いたいと思います。それはすべてのSetShaderResourcesタイプのスロットのカウンタを開始するようです。すべてのシェーダ(VS、HS、DS、PS)には独自のカウンタがあるようです。ここでNVidiaの例からコード:
Shaderclassコード:
pd3dDeviceContext->HSSetShaderResources(0, 2, Resources);
pd3dDeviceContext->HSSetShaderResources(8, 1, &m_pRegularWatertightTexSRV);
pd3dDeviceContext->HSSetShaderResources(9, 1, &m_pQuadWatertightTexSRV);
pd3dDeviceContext->HSSetShaderResources(2, 1, &pHeightMapTextureSRV);
pd3dDeviceContext->DSSetShaderResources(2, 1, &pHeightMapTextureSRV);
pd3dDeviceContext->PSSetShaderResources(2, 1, &pHeightMapTextureSRV);
pd3dDeviceContext->PSSetShaderResources(10, 1, &pNormalMapTextureSRV);
pd3dDeviceContext->PSSetShaderResources(3, 1, &pTexRenderRV11);
最初の2つのリソースを保持しているので、次のスロットであり(ライン4)は、出発スロット(0 + 2のために2を追加しなければなりません= 2)。すべてのSetShaderResourcesは0から始める必要がありますが、コード内の別の場所で行うことができます。したがって、ここにはDSとPSのスロットはありません。行を削除してもそれはまだ動作しますが、データは延期されることがあります。 HLSLの最初の4行がt0、t1、t8、t9の行に表示され、他のレジスタは別の場所にバインドされています。
HLSLコード:
Texture2D<float> GregoryStencil : register(t0);
Texture2D<uint> Index : register(t1);
Texture2D<float> g_txHeight : register(t2);
Texture2D<float> g_depth : register(t3);
Texture2D g_FloorTexture : register(t4);
Texture2D<float3> regularPatchControlPoints : register(t5);
Texture2D<float3> gregoryPatchControlPoints : register(t6);
Texture2D<float4> g_floorHeight : register(t7);
Texture2D<float2> RegularWatertightUVs : register(t8);
Texture2D<float2> QuadWatertightUVs : register(t9);
Texture2D<float3> g_txNormal : register(t10);
どうもありがとうございました。これは多くのことをクリアします... Texture2D tex [10]:register(t0)では、レジスタ(t1)またはレジスタ(t2)を使って別の変数を宣言することはできません。それらはすべて使い果たされるため、登録(t9)しますか? (私はあなたに+1を与えました、非常に明示的な答え、もう一度ありがとう、私はこの最後の小さなポイントをクリアした後に受け入れられるとマークします) – l3utterfly
同じレジスタにいくつかの変数をバインドしようとするなら、コンパイラはこのエラーを "重複しているレジスタセマンティクスはまだ実装されていません"とします。 – catflier
ありがとうございます。受け入れられた答え。 – l3utterfly