我理解VK_DEFINE_NON_DISPATCHABLE_HANDLE是struct object##_T *object或uint64_t object,具体取决于体系结构。我不明白的是为什么要使用它,以及它有什么好处和/或效果。例如,如果我想从我的VkShaderModule中获取pCode,为什么我不能直接访问myShaderModule.pCode?
VK_DEFINE_NON_DISPATCHABLE_HANDLE
struct object##_T *object
uint64_t object
VkShaderModule
pCode
myShaderModule.pCode
odopli941#
在许多领域,Vulkan API实现了不透明句柄。本质上,这意味着实现者可以做任何他们喜欢的事情,并且在对象的内存布局方面不受任何契约的约束,甚至句柄是一个真实的的指针。如果你想从你的VkShaderModule中获取pCode,我建议你在创建它的时候自己存储它,而不是依靠实现来存储它。Vulkan的目的是消除图形API的负担并消除膨胀。存储用户提供的数据并提供API以获得所述用户数据是膨胀的。如果您想保留这些内容,请将VkShaderModulesMap到您想从VkShaderModuleCreateInfo中保留的任何参数。
VkShaderModules
VkShaderModuleCreateInfo
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?不知道这是什么意思,抱歉。
uint64_t
enum class handle##_t : uint64_t {}
u0njafvf3#
第3.3节。Vulkan规范的“对象模型”描述了这两种类型的句柄。https://registry.khronos.org/vulkan/specs/1.3/html/chap3.html#fundamentals-objectmodel-overview可调度句柄是指向内存中对象的指针。虽然在客户端是不透明的,但实现可以取消引用它。它是独一无二的。不可调度句柄,即使转换为指针类型,也是一个不能取消引用的数字句柄,并且仅在上下文中有效。数字句柄比指针有一些优点:它们更安全,因为指针没有暴露,它们是灵活的,可以只是索引或枚举,并且它们允许底层对象在内存中重新定位。
3条答案
按热度按时间odopli941#
在许多领域,Vulkan API实现了不透明句柄。本质上,这意味着实现者可以做任何他们喜欢的事情,并且在对象的内存布局方面不受任何契约的约束,甚至句柄是一个真实的的指针。
如果你想从你的
VkShaderModule
中获取pCode
,我建议你在创建它的时候自己存储它,而不是依靠实现来存储它。Vulkan的目的是消除图形API的负担并消除膨胀。存储用户提供的数据并提供API以获得所述用户数据是膨胀的。如果您想保留这些内容,请将
VkShaderModules
Map到您想从VkShaderModuleCreateInfo
中保留的任何参数。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?
不知道这是什么意思,抱歉。
u0njafvf3#
第3.3节。Vulkan规范的“对象模型”描述了这两种类型的句柄。
https://registry.khronos.org/vulkan/specs/1.3/html/chap3.html#fundamentals-objectmodel-overview
可调度句柄是指向内存中对象的指针。虽然在客户端是不透明的,但实现可以取消引用它。它是独一无二的。不可调度句柄,即使转换为指针类型,也是一个不能取消引用的数字句柄,并且仅在上下文中有效。数字句柄比指针有一些优点:它们更安全,因为指针没有暴露,它们是灵活的,可以只是索引或枚举,并且它们允许底层对象在内存中重新定位。