Отсутствуют ли значения VkMemoryHeapFlagBits Vulkan?

В спецификациях Vulkan 1.0.9 (стр. 180) имеем следующее:

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

и это описание:

• size — общий размер памяти в байтах в куче.

• flags — битовая маска флагов атрибутов кучи. Биты, указанные в flags:

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

Но когда я запрашиваю VkPhysicalDeviceMemoryProperties, у меня есть флаги с нулевыми значениями. Мой код соответствует выходным данным инструмента Vulkan SDK vkjson_info.exe, который выводит файл JSON со свойствами моего графического процессора.

Чего-то здесь не хватает?


person Alex Byrth    schedule 20.04.2016    source источник


Ответы (1)


Нет. Вполне допустимо, что VkMemoryHeap::flags равно 0. Конкретный флаг либо присутствует, либо отсутствует; это не перечисление, где значение может достигать одного из небольшого числа различных возможностей. Обычно флаги не зависят друг от друга.

Вот как работают битовые флаги; они представляют логические условия. Конкретный флаг либо присутствует, либо отсутствует. Если присутствует флаг, то объект приобретает значение, которое определяет этот флаг. Если он отсутствует, то объект не имеет такого значения.

Куча с VK_MEMORY_HEAP_DEVICE_LOCAL_BIT означает именно то, что указано в спецификации: «куча соответствует локальной памяти устройства». Куча без установленного флага означает, что куча не "соответствует локальной памяти устройства".

Спецификация требует, чтобы этот флаг был установлен по крайней мере в одной куче. Но это все.

person Nicol Bolas    schedule 20.04.2016