2016-06-20 3 views
2

J'apprends DirectX 11 et j'ai atteint la partie HLSL de base. Je veux utiliser plusieurs tampons constants dans le vertex shader, donc j'ai besoin de trouver le bon StartSlot pour VSSetConstantBuffers. J'ai cherché sur Google et trouvé que quelqu'un a suggéré d'utiliser GetResourceBindingDescByName.GetResourceBindingDescByName dans DirectX 11 peut uniquement obtenir le premier cbuffer

J'ai essayé GetResourceBindingDescByName, mais j'ai trouvé qu'il ne peut obtenir que le bon StartSlot pour le premier cbuffer. Par exemple, dans mon vertex shader:

cbuffer Test1 
{ 
    float4 a; 
}; 

cbuffer Test2 
{ 
    float4 b; 
}; 

Maintenant GetResourceBindingDescByName("Test1", &bind_desc) fonctionne correctement, mais GetResourceBindingDescByName("Test2", &bind_desc) échouera (retour E_INVAILDARG).

Quelqu'un peut-il m'aider?

+0

Est-ce que b est utilisé dans votre shader? Il a peut-être été rayé par l'optimisation. – galop1n

+0

Merci. J'utilise juste un dans mon shader. J'ajoute une référence à b dans mon code shader et le problème est résolu. Pouvez-vous répondre à cette question pour que je puisse la marquer comme la réponse à cette question? – delphifirst

Répondre

0

La réflexion contient uniquement des symboles utilisés par un shader. Comme cela a été confirmé dans les commentaires, b n'était pas utilisé, et le problème est résolu une fois que b est référencé dans le code et non supprimé par une optimisation.