c++ VK_DEFINE_NON_DISPATCHABLE_HANDLE是什么意思

oug3syen  于 2023-05-02  发布在  其他
关注(0)|答案(3)|浏览(95)

我理解VK_DEFINE_NON_DISPATCHABLE_HANDLEstruct object##_T *objectuint64_t object,具体取决于体系结构。
我不明白的是为什么要使用它,以及它有什么好处和/或效果。
例如,如果我想从我的VkShaderModule中获取pCode,为什么我不能直接访问myShaderModule.pCode

odopli94

odopli941#

在许多领域,Vulkan API实现了不透明句柄。本质上,这意味着实现者可以做任何他们喜欢的事情,并且在对象的内存布局方面不受任何契约的约束,甚至句柄是一个真实的的指针。
如果你想从你的VkShaderModule中获取pCode,我建议你在创建它的时候自己存储它,而不是依靠实现来存储它。
Vulkan的目的是消除图形API的负担并消除膨胀。存储用户提供的数据并提供API以获得所述用户数据是膨胀的。如果您想保留这些内容,请将VkShaderModulesMap到您想从VkShaderModuleCreateInfo中保留的任何参数。

bvjxkvbb

bvjxkvbb2#

VK_DEFINE_NON_DISPATCHABLE_HANDLE是什么意思?
根据对话elsewhere,这里的关键点是:
1.句柄类型的大小必须为64位
1.句柄类型应尽可能唯一
在64位平台上,您可以使用64位指针来创建许多不同的、唯一的类型;所以你的手柄类型不能互换。
否则,你能做的最好的是uint64_t,它不是 * 完全 * 类型安全的。
在C++11中,我们可能会使用enum class handle##_t : uint64_t {}来获得两个世界的最佳效果。
例如,如果我想从我的VkShaderModule中获取pCode,为什么我不能直接进入myShaderModule。pCode?
不知道这是什么意思,抱歉。

u0njafvf

u0njafvf3#

第3.3节。Vulkan规范的“对象模型”描述了这两种类型的句柄。
https://registry.khronos.org/vulkan/specs/1.3/html/chap3.html#fundamentals-objectmodel-overview
可调度句柄是指向内存中对象的指针。虽然在客户端是不透明的,但实现可以取消引用它。它是独一无二的。不可调度句柄,即使转换为指针类型,也是一个不能取消引用的数字句柄,并且仅在上下文中有效。数字句柄比指针有一些优点:它们更安全,因为指针没有暴露,它们是灵活的,可以只是索引或枚举,并且它们允许底层对象在内存中重新定位。

相关问题