在uimageBuffer上的GLSL imageStore比在uimage2D上慢吗?

时间:2012-12-06 11:26:15

标签: performance opengl glsl

我有一个#version 420 GLSL顶点着色器,使用imageStore函数写入uimage的texel(总是相同的)。 (在实际发布版本中,我使用了多个纹素,因此这个设置只是性能测量的极端测试用例。)

我尝试了两种不同的方式:

  • 写入'layout(r32ui)coherent uniform uimage2D', 即,我将GL_TEXTURE_2D绑定到图像单元

  • 写一个'layout(r32ui)coherent uniform uimageBuffer', 即,我将一个GL_TEXTURE_BUFFER绑定到图像单元,它本身有一个带有GL_STATIC_DRAW边界的VBO)

在具有360K顶点的测试场景中,对于两种替代方案,我测量不同的性能(顶点被简单地光栅化为GL_POINTS,因此片段着色器的工作量是可以忽略的):

  • 没有imageStore的着色器:2.1毫秒
  • const-coord imageStore to uimage2D:2.1 ms
  • const-coord imageStore to uimageBuffer:3.2 ms

因此,似乎imageStore到imageBuffer的速度比图像2D慢。但它变得更糟。如果我没有像上面那样使用常量坐标将图像存储到固定纹理像素,而是使用动态确定的偏移量,那么我得到了这些性能:

  • dynamic-coord imageStore to uimage2D:2.1 ms
  • dynamic-coord imageStore to uimageBuffer:7.2 ms

任何人都可以确认这种性能差异,或解释为什么写入uimageBuffer比写入uimage2D要慢得多?是因为VBO绑定到Buffer-Texture?或者我似乎做错了什么?

我还应该提到顶点着色器还使用第二个uimage2D进行一些原子计数,但每种情况都是一样的,并且与imageStore无关。

0 个答案:

没有答案