VK_DEFINE_NON_DISPATCHABLE_HANDLE 是什么意思

What does VK_DEFINE_NON_DISPATCHABLE_HANDLE mean

我知道 VK_DEFINE_NON_DISPATCHABLE_HANDLEstruct object##_T *objectuint64_t object,具体取决于架构。

理解的是为什么使用它以及它有什么好处and/or效果。

例如,如果我想从我的 VkShaderModule 中获取 pCode 为什么我不能直接去 myShaderModule.pCode

What does VK_DEFINE_NON_DISPATCHABLE_HANDLE mean?

根据对话,这里的重点是:

  1. 句柄类型的大小必须为 64 位
  2. 句柄类型应尽可能唯一

在 64 位平台上,您可以利用 64 位指针来创建许多不同的、独特的类型;因此您的句柄类型不能互换。

否则,您最多只能 uint64_t,这 相当 类型安全。

在 C++11 中,我们可能会选择 enum class handle##_t : uint64_t {} 来两全其美。


For example, if I want to get the pCode from my VkShaderModule why am I not able to just go myShaderModule.pCode?

不知道这是什么意思,抱歉。

在许多领域,Vulkan API 实现了不透明的句柄。从本质上讲,这意味着实现者几乎可以做任何他们想做的事情,并且在对象的内存布局甚至句柄是一个真正的指针方面不受任何与客户端的约束。

如果您想从 VkShaderModule 中获取 pCode,我建议您在创建它时自己存储它,而不是依赖实现来为您存储它。

Vulkan 的目的是减轻图形负担 API 并消除膨胀。存储用户提供的数据并提供 API 以获取所述用户数据是膨胀的。如果你想保留这些东西,请将 VkShaderModules 映射到你想从 VkShaderModuleCreateInfo.

保留的任何参数