DirectX11 和数据包偏移
有谁知道如何在 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; ??
}
Does anyone know how to use "packetoffset" with a bool type in DirectX10/11? I am not sure how this should be aligned
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; ??
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这实际上是两个问题:
packoffset
导致变量超出单个寄存器的范围,会发生什么?packoffset
与bool
值一起使用?第一个问题的答案是:HLSL 编译器将对
packoffset
值进行一些验证。因此,以下内容将无法编译,因为Var2
无法放入c0
,并且编译器不会自动将其“包装”为< code>c1:第二个问题的答案是:
bool
值与float
占用相同的空间,因此您可以像这样打包它们:That's actually two questions:
packoffset
that results in a variable extending beyond the bounds of a single register?packoffset
withbool
values?The answer to the first question is: The HLSL compiler will do some validation on the
packoffset
values. So the following will not compile, becauseVar2
can't fit in toc0
, and the compiler will not automatically "wrap" it intoc1
:The answer to the second question is:
bool
values take the same space as afloat
, so you can pack them like this: