我了解VK_DEFINE_NON_DISPATCHABLE_HANDLE
可能是struct object##_T *object
或uint64_t object
,具体取决于架构。
>理解为什么使用它以及它有什么好处和/或效果。
例如,如果我想从我的pCode
获取VkShaderModule
,为什么我不能去myShaderModule.pCode
?
答案 0 :(得分:4)
VK_DEFINE_NON_DISPATCHABLE_HANDLE是什么意思?
根据对话elsewhere,这里的关键点是:
在64位平台上,您可以使用64位指针来创建许多不同的唯一类型;因此你的句柄类型不能互换。
否则,您可以做的最好的事情是uint64_t
,它不是完全类型安全的。
在C ++ 11中,我们可能会使用enum class handle##_t : uint64_t {}
来充分利用这两个世界。
例如,如果我想从我的VkShaderModule获取pCode,为什么我不能只使用myShaderModule.pCode? p>
不知道这意味着什么,抱歉。
答案 1 :(得分:4)
在许多领域,Vulkan API实现了不透明的句柄。本质上,这意味着实现者可以做任何他们喜欢的事情,并且在对象的内存布局方面不受客户端的任何约束,甚至句柄都是真正的指针。
如果您希望从pCode
获取VkShaderModule
,我建议您在创建时自行存储,而不是依赖实施方法为您存储。
Vulkan的目的是消除图形API的负担并消除臃肿。存储用户提供的数据并提供用于获取所述用户数据的API是膨胀的。如果您想保留这些内容,请将VkShaderModules
的地图设置为您想要保留的VkShaderModuleCreateInfo
个参数。