VK_DEFINE_NON_DISPATCHABLE_HANDLE是什么意思

时间:2017-05-02 15:39:39

标签: c++ vulkan

我了解VK_DEFINE_NON_DISPATCHABLE_HANDLE可能是struct object##_T *objectuint64_t object,具体取决于架构。

>理解为什么使用它以及它有什么好处和/或效果。

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

2 个答案:

答案 0 :(得分:4)

  

VK_DEFINE_NON_DISPATCHABLE_HANDLE是什么意思?

根据对话elsewhere,这里的关键点是:

  1. 句柄类型必须为64位大小
  2. 句柄类型应尽可能唯一
  3. 在64位平台上,您可以使用64位指针来创建许多不同的唯一类型;因此你的句柄类型不能互换。

    否则,您可以做的最好的事情是uint64_t,它不是完全类型安全的。

    在C ++ 11中,我们可能会使用enum class handle##_t : uint64_t {}来充分利用这两个世界。

      

    例如,如果我想从我的VkShaderModule获取pCode,为什么我不能只使用myShaderModule.pCode?

    不知道这意味着什么,抱歉。

答案 1 :(得分:4)

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

如果您希望从pCode获取VkShaderModule,我建议您在创建时自行存储,而不是依赖实施方法为您存储。

Vulkan的目的是消除图形API的负担并消除臃肿。存储用户提供的数据并提供用于获取所述用户数据的API是膨胀的。如果您想保留这些内容,请将VkShaderModules的地图设置为您想要保留的VkShaderModuleCreateInfo个参数。