2016-02-18 9 views
6

Guardando attraverso Demo C++ Vulkan di Sascha Willem ospitato su GitHub, ho notato che alcune funzioni hanno restituito il tipo di dati VkBool32.Perché VkBool32 di Vulkan è implementato come int unsigned?

ero curioso di perché Khronos non usavano un bool normale quando ho notato che la linea

typedef uint32_t VkBool32;

in vulkan.h. L'uint32_t è definito come

typedef unsigned int uint32_t;

in stdint.h.

La mia domanda è: perché fa Sense buttare via 3 byte se un Bool standard farebbe il lavoro con un solo byte? La mia piccola Recherche ha mostrato che non vi è alcuna differenza in termini di prestazioni (vedi Which is faster : if (bool) or if(int)?), e Khronos ha affermato che volevano ridurre al minimo i problemi di compatibilità (in questo caso il vecchio C non avendo un tipo booleano primitivo) nell'ordine di concentrarsi sul codice moderno.

(Vedi citazione di Trevett tratto da here)

una riprogettazione terra-up, non siamo compatibili

+6

Sembra che tu abbia già risposto alla tua domanda lì – JustSid

+0

"Khronos ha affermato che volevano ridurre al minimo i problemi di compatibilità (in questo caso il vecchio C non ha un tipo booleano primitivo)" –

+3

"un Bool standard avrebbe fatto il lavoro solo con un byte "- ipotesi infondata. Troverete più di un compilatore che ha 'sizeof (bool) == sizeof (int)'. – MSalters

risposta

8

provare a stampare sizeof(bool) sul sistema. Le risposte comuni sono 4 o 1 e il valore non è affatto universale. Puoi ottenere risposte diverse a seconda dei flag del compilatore che stai utilizzando.

Vulkan deve funzionare allo stesso modo su tutti i sistemi e deve funzionare correttamente indipendentemente dal flag del compilatore che si sta utilizzando per compilare il programma. Se Vulkan è stato compilato con sizeof(bool) == 1 ma si compila con sizeof(bool) == 4, l'interfaccia sarà errata. Ho personalmente assistito a questo particolare errore.

+1

Suoni ragionevoli, ma perché usare 3 byte invece di 1? –

+4

@JanNilsFerner: In pratica, c'è un sacco di hardware là fuori dove quattro byte hanno senso. Per caricare un singolo byte, potresti dover caricare quattro byte e poi fare la maschera e lo spostamento appropriati, il che è un lavoro extra. –

+2

@DietrichEpp: Grazie, ha senso! –

Problemi correlati