有谁知道如何在 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; ??
}
最佳答案
这实际上是两个问题:
- 如果您使用导致变量超出单个寄存器边界的
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);
}
关于algorithm - DirectX11 和 packetoffset,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4710998/