如何在OpenGL中检测SSBO上的访问冲突?

时间:2018-02-01 00:51:11

标签: opengl glsl buffer-overflow opengl-4

假设我在glsl着色器中有一个SSBO,如下所示。

layout(std430, binding = 10) buffer myData
{
  uint64_t intArray[];
};

在主机上,我将动态分配SSBO。在着色器中,我将数据写入此'intArray'变量。如何检测我的着色器代码是否在数组边界内访问?是否有任何工具可以进行检查(类似于valgrind,pageheap,-fsanitize,...在CPU上)?

编辑:一般情况下,有没有办法分析glsl代码并找出内存问题?

1 个答案:

答案 0 :(得分:2)

确定您是否在数组中访问的最简单方法是获取数组的大小,并检查您要使用的索引是否访问它。 intArray.length()将根据您绑定到该SSBO绑定点的缓冲区的大小范围,为您提供数组的运行时长度。