DirectX11とpacketoffset

algorithm directx-10 directx-11 hlsl rendering
DirectX11とpacketoffset

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; ??
}

  3  0


ベストアンサー

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

  1. 変数をもたらす `packoffset`を使用するとどうなりますか
    単一のレジスタの範囲を超えて拡張しますか?

  2. 「bool」値で「packoffset」をどのように使用しますか?

最初の質問への答えは次のとおりです。HLSLコンパイラは packoffset`値の検証を行います。 したがって、以下は_not_コンパイルされます。これは、 `Var2`が c0`に収まらず、コンパイラがそれを自動的に `c1`に「ラップ」しないためです。

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);
}

2


タイトルとURLをコピーしました