2016-06-20 10 views
2

Ich lerne DirectX 11 und habe grundlegende HLSL-Teil erreicht. Ich möchte mehrere konstante Puffer im Vertex-Shader verwenden, also muss ich das korrekte StartSlot für VSSetConstantBuffers finden. Ich habe auf Google gesucht und festgestellt, dass jemand vorgeschlagen hat, GetResourceBindingDescByName zu verwenden.GetResourceBindingDescByName in DirectX 11 kann nur den ersten cbuffer bekommen

Ich versuchte GetResourceBindingDescByName, aber festgestellt, dass es nur die richtige StartSlot für den ersten cbuffer bekommen kann. Zum Beispiel in meinem Vertex-Shader:

cbuffer Test1 
{ 
    float4 a; 
}; 

cbuffer Test2 
{ 
    float4 b; 
}; 

Jetzt arbeitet GetResourceBindingDescByName("Test1", &bind_desc) richtig, aber GetResourceBindingDescByName("Test2", &bind_desc) fehl (Return E_INVAILDARG).

Konnte mir jemand helfen?

+0

Wird b in Ihrem Shader verwendet? Es wurde möglicherweise durch die Optimierung gestreift. – galop1n

+0

Danke. Ich benutze nur einen in meinem Shader. Ich füge einen Verweis auf b in meinem Shader-Code hinzu und das Problem ist gelöst. Können Sie diese Frage beantworten, damit ich sie als Antwort auf diese Frage markieren kann? – delphifirst

Antwort

0

Die Reflektion enthält nur Symbole, die von einem Shader verwendet werden. Wie in den Kommentaren bestätigt wurde, wurde b nicht verwendet, und das Problem wird gelöst, sobald b im Code referenziert ist und nicht durch eine Optimierung entfernt wird.

Verwandte Themen