DirectX11和packetoffset

时间:2011-01-17 07:43:25

标签: algorithm rendering hlsl directx-10 directx-11

有没有人知道如何在DirectX10 / 11中使用bool类型的“packetoffset”?我不确定这应该如何对齐

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 个答案:

答案 0 :(得分:2)

这实际上是两个问题:

  1. 如果使用packoffset会导致变量超出单个寄存器的范围,会发生什么?
  2. 如何将packoffsetbool值一起使用?
  3. 第一个问题的答案是:HLSL编译器将对packoffset值进行一些验证。因此,以下将编译,因为Var2不能适合c0,并且编译器不会自动将其“包装”到c1:< / p>

    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);
    }