2016-06-20 1 views
2

Я изучаю DirectX 11 и достиг базовой части HLSL. Я хочу использовать несколько постоянных буферов в вершинном шейдере, поэтому мне нужно найти правильный StartSlot для VSSetConstantBuffers. Я искал в Google и обнаружил, что кто-то предложил использовать GetResourceBindingDescByName.GetResourceBindingDescByName в DirectX 11 может получить только первый cbuffer

Я пробовал GetResourceBindingDescByName, но обнаружил, что он может получить только правильный StartSlot для первого cbuffer. Например, в моей вершинных шейдеров:

cbuffer Test1 
{ 
    float4 a; 
}; 

cbuffer Test2 
{ 
    float4 b; 
}; 

Теперь GetResourceBindingDescByName("Test1", &bind_desc) работает правильно, но GetResourceBindingDescByName("Test2", &bind_desc) не удастся (вернуть E_INVAILDARG).

Может ли кто-нибудь мне помочь?

+0

Используется ли b в вашем шейдере? Оптимизация может быть изменена. – galop1n

+0

Спасибо. Я просто использую в своем шейдере. Я добавляю ссылку на b в свой шейдерный код, и проблема решена. Можете ли вы ответить на этот вопрос, чтобы я мог отметить его как ответ на этот вопрос? – delphifirst

ответ

0

Отражение содержит только символы, используемые шейдером. Как было подтверждено в комментариях, b не используется, и проблема решается после того, как b ссылается на код и не отделяется оптимизацией.