我已将我的案例缩小到这个简单的 GLSL 代码:
uniform int zeroUniform; // Always set to zero, it is there so that the code is not optimized out
out int c;
int a = 8660165;
int b = 6;
c = (a + zeroUniform) / b;
当我将它放入着色器并使用 RenderDoc 检查着色器时,它说 c 是 1443361!但它应该是 1443360。到底发生了什么?在十六进制中,8660165 是 0x8424C5,因此在符号位可以改变计算之前有一个完整的字节空闲。我错过了什么还是这是一个 GPU 错误?
OpenGL 4.6 内核,在 AMD RX 5700 XT 上测试。我也尝试过使用 uint 而不是 int,它可以正常工作。