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

How to detect access violation on SSBO in OpenGL?

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

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

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

编辑:一般来说,有什么方法可以分析 glsl 代码并找出内存问题吗?

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