为什么 Vulkan 的 VkBool32 被实现为无符号的 int?

Why is Vulkan's VkBool32 implemented as an unsigned int?

本文关键字:无符号 int Vulkan VkBool32 为什么 实现      更新时间:2023-10-16

浏览 Sascha Willem 在 GitHub 上托管的 C++ Vulkan 演示,我注意到一些函数返回了数据类型VkBool32

我很好奇为什么 Khronos 在我注意到线时不使用正常的布尔值

typedef uint32_t VkBool32;

在伏尔坎·uint32_t定义为

typedef unsigned int uint32_t;

在标准中。

我的问题是,如果标准布尔值只用一个字节就可以完成这项工作,为什么扔掉 3 个字节是有意义的?我的小研究表明几乎没有性能差异(参见哪个更快:if(bool)或if(int)?),Khronos 他们自己说他们希望最小化兼容性问题(在这种情况下,旧的C没有原始布尔类型),以便专注于现代代码。

(见特雷维特的引文摘自这里)

从头开始重新设计,我们不向后兼容

尝试在系统上打印sizeof(bool)。 常见的答案是 4 或 1,其值绝不是通用的。 您可以根据所使用的编译器标志获得不同的答案。

Vulkan 需要在所有系统上以相同的方式工作,无论您使用什么编译器标志来编译程序,它都需要正常工作。 如果 Vulkan 是用sizeof(bool) == 1编译的,但你用sizeof(bool) == 4编译,接口将不正确。 我亲眼目睹了这个特殊错误的发生。