Question

Quelqu'un sait comment utiliser "packetoffset" avec un type bool en DirectX10 / 11? Je ne sais pas comment cela devrait être aligné

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; ??
}
Était-ce utile?

La solution

C'est en fait deux questions:

  1. Qu'est-ce qui se passe si vous utilisez un packoffset qui donne lieu à une variable allant au-delà des limites d'un seul registre?
  2. Comment utilisez-vous packoffset avec des valeurs bool?

La réponse à la première question est: Le compilateur HLSL fera une validation sur les valeurs de packoffset. Ainsi, les éléments suivants seront pas décompiler, parce que Var2 ne rentre pas pour c0, et le compilateur ne sera pas automatiquement « wrap » dans c1:

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

La réponse à la deuxième question est: les valeurs de bool prennent le même espace comme float, de sorte que vous pouvez les emballer comme ceci:

cbuffer SomeBuffer : register( b1 )
{
    bool SomeBool1 : packoffset(c0);
    bool SomeBool2 : packoffset(c0.y);
    float SomeFloat1 : packoffset(c0.z);
    bool SomeBool3 : packoffset(c0.w);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top