Domanda

Qualcuno sa come utilizzare "packetoffset" con un tipo bool in DirectX10 / 11? Non sono sicuro di come questo dovrebbe essere allineato

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; ??
}
È stato utile?

Soluzione

Questo è in realtà due domande:

  1. Che cosa succede se si utilizza un packoffset che si traduce in una variabile che si estende oltre i limiti di un unico registro?
  2. Come si usa packoffset con i valori bool?

La risposta alla prima domanda è: Il compilatore HLSL farà fare un po 'di validazione sui valori packoffset. Così il seguente sarà non di compilazione, perché Var2 non può adattarsi a c0, e il compilatore non sarà automaticamente "involucro" in c1:

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

La risposta alla seconda domanda è: i valori bool prendono lo stesso spazio di un float, in modo da poterli imballare in questo modo:

cbuffer SomeBuffer : register( b1 )
{
    bool SomeBool1 : packoffset(c0);
    bool SomeBool2 : packoffset(c0.y);
    float SomeFloat1 : packoffset(c0.z);
    bool SomeBool3 : packoffset(c0.w);
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top