5

在 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 工具的输出相匹配,该工具输出一个带有我 GPU 属性的 JSON 文件。

这里缺少什么吗?

4

1 回答 1

7

不,为 0 完全有效。VkMemoryHeap::flags一个特定的标志要么存在要么不存在;这不是一个枚举,其中值可以达到少数不同可能性之一。通常,标志是相互独立的。

这就是位标志的工作原理。它们代表布尔条件。一个特定的标志要么存在要么不存在。如果存在标志,则对象将获得标志定义的含义。如果它不存在,那么该对象就没有那个意义。

堆的VK_MEMORY_HEAP_DEVICE_LOCAL_BIT含义与规范所说的完全相同:“堆对应于设备本地内存”。没有设置该标志的堆意味着堆“对应于设备本地内存”。

规范要求至少一个堆设置此标志。但仅此而已。

于 2016-04-20T17:08:28.633 回答