为什么 GPU 不递增每个像素的原子计数器?

问题描述 投票:0回答:1

根据this博客页面,以下着色器使用原子计数器的值写入帧缓冲区像素:

#version 420 compatibility
layout(binding = 0, offset = 0) uniform atomic_uint ac;
void main(void)
{
  uint counter = atomicCounterIncrement(ac);
  float r = (counter/255) / 255.f;
  gl_FragColor = vec4(r, 0, 0, 1);
}

他们正在做 / 255 / 255 因为图像是 256 x 256 像素。在某些 GPU 上,结果是这样的:

enter image description here

在其他 GPU 上,结果是这样的:

enter image description here

较暗的像素显然是计数器的较低值。为什么每次像素着色器调用原子计数器都不会增加?

glsl vulkan
1个回答
0
投票

counter/255
将一个整数除以另一个整数。就像在 C 或 C++ 中一样,这会产生一个“整数”,而不是一个浮点值。因此,255 次片段着色器调用将得到相同的结果。 这可能就是代码的意图。

至于一张图片与另一张图片中的排列是否更加有序,这完全取决于实现。

© www.soinside.com 2019 - 2024. All rights reserved.