DirectX11 и смещение пакетов - PullRequest
       102

DirectX11 и смещение пакетов

3 голосов
/ 17 января 2011

Кто-нибудь знает, как использовать "packetoffset" с типом bool в DirectX10 / 11? Я не уверен, как это должно быть выровнено

cbuffer SomeBuffer : register( b1 )
{
    float3 SomeFloat3: packoffset(c0);
    float SomeFloat: packoffset(c0.w);

    float3 SomeFloat32: packoffset(c1);
    float2 SomeFloat2; ??

    bool SomeBool1; ??
    bool SomeBool2; ??
    bool SomeBool3; ??
}

1 Ответ

2 голосов
/ 20 февраля 2011

На самом деле это два вопроса:

  1. Что произойдет, если вы используете packoffset, в результате чего переменная выходит за пределы одного регистра?
  2. Как вы используете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);
}
...