2016-05-25 13 views
1

D3D12のさまざまなシェーダステージにリソースをバインドするにはどうすればよいですか?私は2つのシェーダ、1 vertexshaderと1 pixelshader書いDirectX 12リソースバインディング

:ここ

は、頂点シェーダである:ここで

//VertexShader.vs 

float4 main(float3 posL : POSITION, uniform float4x4 gWVP) : SV_POSITION 
{ 
    return mul(float4(posL, 1.0f), gWVP); 
} 

はPixelshaderです:

//PixelShader.ps 

float4 main(float4 PosH : SV_POSITION, uniform float4 Color) : SV_Target 
{ 
    return Color; 
} 

私はこれら二つのシェーダをコンパイルする場合D3DCompile関数を使用して、D3DReflectとそれを反映させ、BoundResorcesメンバーが両方とも持っているシェーダの説明で調べます$ Paramsと呼ばれる定数バッファにはuniform変数がそれぞれ含まれています。問題は、これらのバッファの両方がスロット0にバインドされていることです。リソースをバインドするときは、リソースをリソーススロットにバインドできるID3D12RootSignatureインターフェイスを使用する必要があります。頂点シェーダの$ Paramsバッファを、ピクセルシェーダの頂点シェーダとピクセルシェーダの$ Paramsバッファにのみバインドするにはどうすればよいですか?事前に

おかげで、DX12で

Philinator

答えて

1

は、ここでのパフォーマンスのソリューションは、アプリケーションのニーズを満たしているルート署名を作成することで、同様に理想的declare it in your HLSL。ルート・シグネチャを頻繁に変更したくないので、シェーダの大規模な作業に適したものを作ろうとしています。

DX12はトレーニングホイール、マジック、またはシェーダのパッチを適用しないDirect3Dであることを覚えておいてください。使いやすさは、Direct3D 12の目的ではありません。アプリケーションと開発者のリソースがDirect3D 12の特別なコントロールを必要としない限り、Direct3D 11に固執する十分な理由はたくさんあります。 大きな力をもって大きな責任を負う

CD3DX12_DESCRIPTOR_RANGE descRange[1]; 
descRange[0].Init(D3D12_DESCRIPTOR_RANGE_TYPE_CBV, 1, 0); 
CD3DX12_ROOT_PARAMETER rootParameters[2]; 
rootParameters[0].InitAsDescriptorTable(
    1, &descRange[0], D3D12_SHADER_VISIBILITY_VERTEX); // b0 
rootParameters[1].InitAsDescriptorTable(
    1, &descRange[0], D3D12_SHADER_VISIBILITY_PIXEL); // b0 

// Create the root signature. 
CD3DX12_ROOT_SIGNATURE_DESC rootSignatureDesc(_countof(rootParameters), 
    rootParameters, 0, nullptr, 
    D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT); 

ComPtr<ID3DBlob> signature; 
ComPtr<ID3DBlob> error; 
DX::ThrowIfFailed(D3D12SerializeRootSignature(&rootSignatureDesc, 
    D3D_ROOT_SIGNATURE_VERSION_1, &signature, &error)); 
DX::ThrowIfFailed(
    device->CreateRootSignature(0, signature->GetBufferPointer(), 
     signature->GetBufferSize(), 
     IID_PPV_ARGS(m_rootSignature.ReleaseAndGetAddressOf()))); 
:私はあなたが何かをしたいものを達成できると信じてい

関連する問題