2016-04-20 17 views
4

Bei Vulkan-Spezifikationen 1.0.9 (S. 180)., haben wir:Ist VkMemoryHeapFlagBits von Vulkan fehlende Werte? die folgende

typedef struct VkMemoryHeap { 
    VkDeviceSize size; 
    VkMemoryHeapFlags flags; 
} VkMemoryHeap; 

und diese Beschreibung:

• Größe ist die Gesamtspeichergröße in Bytes in dem Haufen.

• flags ist eine Bitmaske von Attributflags für den Heap. Die Bits im Flags angegeben sind:

typedef enum VkMemoryHeapFlagBits { 
VK_MEMORY_HEAP_DEVICE_LOCAL_BIT = 0x00000001, 
} VkMemoryHeapFlagBits; 

Aber wenn ich VkPhysicalDeviceMemoryProperties Abfrage Ich habe Flaggen mit Nullwerten. Mein Code stimmt mit der Ausgabe vom Tool "vkjson_info.exe" von Vulkan SDK überein, die eine JSON-Datei mit Eigenschaften von meiner GPU ausgibt.

Fehlt hier etwas?

Antwort

6

Nein. Es ist absolut gültig für VkMemoryHeap::flags zu 0. Eine bestimmte Flagge ist entweder vorhanden oder nicht vorhanden; es ist keine Aufzählung, bei der der Wert eine von einer kleinen Anzahl von verschiedenen Möglichkeiten erreichen kann. Normalerweise sind Flags unabhängig voneinander.

So funktionieren Bitflags; Sie repräsentieren boolesche Bedingungen. Eine bestimmte Flagge ist entweder vorhanden oder nicht vorhanden. Wenn ein Flag vorhanden ist, erreicht das Objekt die Bedeutung, die das Flag definiert. Wenn es nicht vorhanden ist, dann hat das Objekt nicht diese Bedeutung.

Ein Heap mit VK_MEMORY_HEAP_DEVICE_LOCAL_BIT bedeutet genau das, was die Spezifikation sagt: "Der Heap entspricht dem lokalen Speicher des Geräts". Ein Heap ohne diesen Flagsatz bedeutet, dass der Heap nicht "dem lokalen Speicher des Geräts entspricht".

Die Spezifikation erfordert, dass mindestens ein Haufen dieses Flag gesetzt haben. Aber das ist alles.