Vulkan 的 VkMemoryHeapFlagBits 是否缺少值?
Is Vulkan's VkMemoryHeapFlagBits missing values?
在 Vulkan 规范 1.0.9(第 180 页)中,我们有以下内容:
typedef struct VkMemoryHeap {
VkDeviceSize size;
VkMemoryHeapFlags flags;
} VkMemoryHeap;
和这个描述:
• size is the total memory size in bytes in the heap.
• flags is a bitmask of attribute flags for the heap. The bits specified in flags are:
typedef enum VkMemoryHeapFlagBits {
VK_MEMORY_HEAP_DEVICE_LOCAL_BIT = 0x00000001,
} VkMemoryHeapFlagBits;
但是当我查询 VkPhysicalDeviceMemoryProperties
时,我得到了零值的标志。我的代码与 Vulkan SDK vkjson_info.exe 工具的输出相匹配,该工具输出一个 JSON 文件,其中包含我的 GPU 的属性。
这里是不是少了什么?
没有。 VkMemoryHeap::flags
为 0 是完全有效的。一个特定的标志要么存在要么不存在;它不是一个枚举,其中的值可以达到少数不同可能性中的一种。通常,标志是相互独立的。
这就是位标志的工作原理;它们代表布尔条件。特定标志存在或不存在。如果存在标志,则对象获得标志定义的含义。如果不存在,则对象 没有 的含义。
具有 VK_MEMORY_HEAP_DEVICE_LOCAL_BIT
的堆的含义与规范中的含义完全相同:"the heap corresponds to device local memory"。没有设置该标志的堆意味着堆 不 "correspond to device local memory".
规范要求至少 一个堆设置此标志。但仅此而已。
在 Vulkan 规范 1.0.9(第 180 页)中,我们有以下内容:
typedef struct VkMemoryHeap {
VkDeviceSize size;
VkMemoryHeapFlags flags;
} VkMemoryHeap;
和这个描述:
• size is the total memory size in bytes in the heap.
• flags is a bitmask of attribute flags for the heap. The bits specified in flags are:
typedef enum VkMemoryHeapFlagBits {
VK_MEMORY_HEAP_DEVICE_LOCAL_BIT = 0x00000001,
} VkMemoryHeapFlagBits;
但是当我查询 VkPhysicalDeviceMemoryProperties
时,我得到了零值的标志。我的代码与 Vulkan SDK vkjson_info.exe 工具的输出相匹配,该工具输出一个 JSON 文件,其中包含我的 GPU 的属性。
这里是不是少了什么?
没有。 VkMemoryHeap::flags
为 0 是完全有效的。一个特定的标志要么存在要么不存在;它不是一个枚举,其中的值可以达到少数不同可能性中的一种。通常,标志是相互独立的。
这就是位标志的工作原理;它们代表布尔条件。特定标志存在或不存在。如果存在标志,则对象获得标志定义的含义。如果不存在,则对象 没有 的含义。
具有 VK_MEMORY_HEAP_DEVICE_LOCAL_BIT
的堆的含义与规范中的含义完全相同:"the heap corresponds to device local memory"。没有设置该标志的堆意味着堆 不 "correspond to device local memory".
规范要求至少 一个堆设置此标志。但仅此而已。