Это на самом деле два вопроса:
- Что произойдет, если вы используете
packoffset
, что приводит к переменной, простирающейся за пределы единого реестра?
- Как вы используете
packoffset
с bool
значениями?
Ответ на первый вопрос: компилятор HLSL проведет проверку на значения packoffset
. Таким образом, следующий будет не компиляции, потому что Var2
может не поместиться в c0
, и компилятор не будет автоматически «обернуть» его в c1
:
cbuffer SomeBuffer : register(b1)
{
float3 Var1 : packoffset(c0);
float2 Var2 : packoffset(c0.w); // will not compile
}
Ответ на второй вопрос: bool
значения принимают в том же пространстве, что и у float
, поэтому вы можете упаковать их следующим образом:
cbuffer SomeBuffer : register(b1)
{
bool SomeBool1 : packoffset(c0);
bool SomeBool2 : packoffset(c0.y);
float SomeFloat1 : packoffset(c0.z);
bool SomeBool3 : packoffset(c0.w);
}
просто не упаковывайте его. это не обязательно. –
Я знаю, что это не обязательно, но я хочу знать, как это делается. – jack