【问题标题】:DirectX11 and packetoffsetDirectX11 和 packetoffset
【发布时间】:2011-01-17 07:43:25
【问题描述】:

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

【问题讨论】:

  • 只是不要打包它。这不是强制性的。
  • 我知道没有必要,但我想知道它是怎么做到的。

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


【解决方案1】:

其实是两个问题:

  1. 如果您使用 packoffset 导致变量超出单个寄存器的范围会怎样?
  2. 如何将packoffsetbool 值一起使用?

第一个问题的答案是: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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多