3

有谁知道如何在 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; ??
}
4

1 回答 1

2

这实际上是两个问题:

  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值与 a 占用相同的空间float,因此您可以像这样打包它们:

cbuffer SomeBuffer : register( b1 )
{
    bool SomeBool1 : packoffset(c0);
    bool SomeBool2 : packoffset(c0.y);
    float SomeFloat1 : packoffset(c0.z);
    bool SomeBool3 : packoffset(c0.w);
}
于 2011-02-20T16:29:47.010 回答