为什么不可调度句柄不总是uint64_t
?为什么必须在64位平台上将它们表示为ptr
?
#if !defined(VK_DEFINE_NON_DISPATCHABLE_HANDLE)
#if defined(__LP64__) || defined(_WIN64) || (defined(__x86_64__) && !defined(__ILP32__) ) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__)
#define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef struct object##_T *object;
#else
#define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef uint64_t object;
#endif
#endif
规范说
不可分派的句柄类型是一种64位整数类型,其含义与实现有关,并且可以直接在句柄中编码对象信息,而不用作对基础对象的引用。不可分派类型的对象在一个类型内或跨类型可能没有唯一的句柄值。如果句柄值不是唯一的,则销毁一个这样的句柄一定不能使其他类型的相同句柄变为无效,并且如果该句柄值的创建次数超过其创建次数,也不能使相同类型的相同句柄变为无效。毁了。
答案 0 :(得分:5)
它们不必使用指针,而只是使用64位。
尽可能使用指针的原因是C和C ++没有强大的typedef,因此使用指针会带来额外的类型安全性,因为您无法将VkImageView_T*
分配给VkImage_T*
。