ケースを次の単純な 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 のはずです。一体何が起こっているのでしょうか? 16 進数では、8660165 は 0x8424C5 であるため、符号ビットが計算を変更する前に、1 バイト全体が空いています。何か不足していますか、それとも GPU のバグですか?
OpenGL 4.6 コア、AMD RX 5700 XT でテスト済み。また、正しく機能する int の代わりに uint を使用してみました。