假设我在glsl着色器中有一个SSBO,如下所示。
layout(std430, binding = 10) buffer myData
{
uint64_t intArray[];
};
在主机上,我将动态分配SSBO。在着色器中,我将数据写入此'intArray'变量。如何检测我的着色器代码是否在数组边界内访问?是否有任何工具可以进行检查(类似于valgrind,pageheap,-fsanitize,...在CPU上)?
编辑:一般情况下,有没有办法分析glsl代码并找出内存问题?
答案 0 :(得分:2)
确定您是否在数组中访问的最简单方法是获取数组的大小,并检查您要使用的索引是否访问它。 intArray.length()
将根据您绑定到该SSBO绑定点的缓冲区的大小范围,为您提供数组的运行时长度。