Question

Using Direct3D 11 and SharpDX, given the name of a Texture Map as declared in the shader, how do I know what slot to assign my Sampler and TextureView to?

Documentation indicates I can use ShaderReflection, however it is not clear how...

void SetTexture(MyShaderProgram shaderProgram, string name, MyTextureMap textureMap)
{
    byte[] byteCode = shaderProgram.ByteCode;
    var shaderReflection = new 
      SharpDX.D3DCompiler.ShaderReflection(byteCode);
    var slot = ?
    PixelShaderStage pixelShader = shaderProgram.PixelShader;
    pixelShader.SetSampler(slot, textureMap.Sampler);
    pixelShader.SetShaderResource(slot, textureMap.TextureView);
}
Was it helpful?

Solution

It seems that BindPoint of shader InputBindingDescription serves this purpose. Thus, this may suffice:

var slot = shaderReflection.GetResourceBindingDescription(name).BindPoint;

It may also be worth noting that it seems technically one should get two bind points: one for the sample and one for the texture view. As they are often declared side-by-side this solution may be sufficient.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top