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

それは実際には2つの質問です:

  1. packoffset変数を単一のレジスタの境界を超えて拡張する結果となるを使用するとどうなりますか?
  2. 値をどのように使用packoffsetboolますか?

最初の質問に対する答えは次のとおりです。HLSLコンパイラーは値に対していくつかの検証を行いpackoffsetます。したがって、に収まらないため、以下はコンパイルされません。また、コンパイラは自動的に次のように「ラップ」しません。Var2c0c1

cbuffer SomeBuffer : register( b1 )
{
    float3 Var1 : packoffset(c0);
    float2 Var2 : packoffset(c0.w); // will not compile
}

2番目の質問に対する答えは次のとおりです。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);
}
于 2011-02-20T16:29:47.010 に答える