DirectX11 et packetoffset
-
11-10-2019 - |
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; ??
}
La solution
C'est en fait deux questions:
- 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? - Comment utilisez-vous
packoffset
avec des valeursbool
?
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