DirectX11 e packetoffset
-
11-10-2019 - |
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; ??
}
Soluzione
Questo è in realtà due domande:
- Che cosa succede se si utilizza un
packoffset
che si traduce in una variabile che si estende oltre i limiti di un unico registro? - Come si usa
packoffset
con i valoribool
?
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