【问题标题】:Is Vulkan's VkMemoryHeapFlagBits missing values?Vulkan 的 VkMemoryHeapFlagBits 是否缺少值?
【发布时间】:2016-04-21 01:08:28
【问题描述】:

在 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 文件,其中包含来自我的 GPU 的属性。

这里有什么遗漏吗?

【问题讨论】:

    标签: memory enumeration vulkan


    【解决方案1】:

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

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

    带有VK_MEMORY_HEAP_DEVICE_LOCAL_BIT 的堆的含义正是规范所说的:“堆对应于设备本地内存”。没有设置该标志的堆意味着堆“对应于设备本地内存”。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-05
      • 2014-01-12
      • 1970-01-01
      • 1970-01-01
      • 2016-08-16
      • 1970-01-01
      相关资源
      最近更新 更多