How is constant buffer allocation handled in DX11?
- by Marek
I'm starting with DX11 and I'm not sure if I'm doing the things right. I want to have both pixel and vertex shader program in one file. Both use some shared and some different constant buffers. So it looks like this:
Shader.fx
cbuffer ForVS : register(b0)
{
float4x4 wvp;
};
cbuffer ForVSandPS : register(b1)
{
float4 stuff;
float4 stuff2;
};
cbuffer ForVS2 : register(b2)
{
float4 stuff;
float4 stuff2;
};
cbuffer ForPS : register(b3)
{
float4 stuff;
float4 stuff2;
};
....
And in code I use
mContext->VSSetConstantBuffers( 0, 1, bufferVS);
mContext->VSSetConstantBuffers( 1, 1, bufferVS_PS);
mContext->VSSetConstantBuffers( 2, 1, bufferVS2);
mContext->PSSetConstantBuffers( 1, 1, bufferVS_PS);
mContext->PSSetConstantBuffers( 3, 1, bufferPS);
The numbering of buffers in PS is what bugs me, is it alright to bind random slots to shaders (in this example 1 and 3)? Does that mean it still uses just two buffers or does it initialize 0 and 2 buffer pointers to empty?
Thank you.