1

ケースを次の単純な 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 を使用してみました。

4

1 に答える 1