C++ VK_定义非可调度句柄是什么意思
我知道C++ VK_定义非可调度句柄是什么意思,c++,vulkan,C++,Vulkan,我知道VK_DEFINE_NON_DISPATCHABLE_HANDLE是struct object##T*object或uint64_T object,具体取决于体系结构 我不理解的是为什么使用它以及它有什么好处和/或效果 例如,如果我想从我的VkShaderModule获取pCode,为什么我不能直接转到myShaderModule.pCode VK_定义非可调度句柄是什么意思 根据对话,这里的要点是: 句柄类型的大小必须为64位 如果可能,句柄类型应该是唯一的 在64位平台上,您可以利用6
VK_DEFINE_NON_DISPATCHABLE_HANDLE
是struct object##T*object
或uint64_T object
,具体取决于体系结构
我不理解的是为什么使用它以及它有什么好处和/或效果
例如,如果我想从我的VkShaderModule
获取pCode
,为什么我不能直接转到myShaderModule.pCode
VK_定义非可调度句柄是什么意思
根据对话,这里的要点是:
uint64\t
,这并不是很安全的类型
在C++11中,我们可能会使用enum类句柄###t:uint64_t{}
来充分利用这两个方面
例如,如果我想从VkShaderModule获取pCode,为什么我不能直接转到myShaderModule.pCode
不知道这意味着什么,抱歉。在许多领域,Vulkan API实现了不透明句柄。本质上,这意味着实现者几乎可以做他们喜欢做的任何事情,并且在对象的内存布局方面,甚至在作为真正指针的句柄方面,不受客户机的任何契约的约束 如果您想从
VkShaderModule
中获取pCode
,我建议您在创建它时自己存储它,而不是依赖实现来存储它
Vulkan的意图是消除图形API的负担并消除膨胀。存储用户提供的数据并提供API以获取所述用户数据是膨胀的。如果你想保留这些东西,就把
VkShaderModules
映射到你想从VkShaderModuleCreateInfo
中保留的任何参数。谢谢,这对Vulkan API背后的整体主题来说是有意义的glGetShaderSource
是OpenGL的等价物。这是一个毫无意义的函数调用。如果客户需要这些信息,他们可以自己存储,就像他们一开始提供的那样!实际上,由于驱动程序必须存储这些字符串,系统中的每个图形应用程序都会产生内存浪费。GL中有很多类似的废话,它是从Vulkan中删除的。Vulkan中的不可分派句柄不要求是唯一的。这允许实现直接将有关对象的所有信息存储在句柄本身中(例如,可能对VkSampler有用),而不是分配一个单独的对象。@JesseHall:没有说是这样。@BoundaryImposition:“句柄应尽可能唯一”听起来句柄应该是唯一的。@Nicolas:assert(strcmp(“应该是”,“需要是”)!=0)然而,我确实想说“句柄类型应该是唯一的”;我的回答中的下一句解释了为什么你可能希望他们。。。为什么VK\u DEFINE\u NON\u DISPATCHABLE\u HANDLE
是这样定义的。显然我错了,但我认为OP(似乎接受了一个不相关的答案)是在问这个问题。@JesseHall你能解释一下它的意思吗“这允许实现直接将对象的所有信息存储在句柄本身中”。我已经读了第二遍(规范中的第一遍),但实际上我不明白这意味着什么。道具作为位标志编码到句柄中?还是作为不同位字段中的值?