This is how I believe it fits together. Can someone rearrange the terms in this tree to how things actually are?
Graphics Pipeline
VertexShaderStage
VertexShader
Registers
S0 ... S127
ConstantBuffers
ConstantBuffer 1
ConstantBuffer 2
Samplers
Sampler 1
Sampler 2
Resources
Texture 1
Texture 2
PixelShaderStage
<same here as in vertex shaders>
So in words, shaders distinguish between constant buffers and resources (i.e. constant buffers are not resources). I base that assumption on the fact that HLSL lets you explicitly declare which register a constant buffer is in but not a sampler. Also on the fact that ID3D11DeviceContext::PSSetConstantBuffers() and ID3D11DeviceContext::PSSetShaderResources() are separate methods and I've seen examples assigning a constant buffer to constant buffer slot 0 and a texture to resource slot 0.
And I assume shader registers (S0 ... S127) are the same thing ID3D11DeviceContext::PSSetConstantBuffers() assigns. What happens when I load a pre-SM4.0 shader? Is a constant buffer implicitly created for the parameters it declares? Or can registers hold either a constant buffer or a variable (though I can't find any way to access registers or variables directly in the D3D11 API).
Edited by Cygon, 17 July 2012 - 05:11 AM.







