【问题标题】:How to detect access violation on SSBO in OpenGL?如何在 OpenGL 中检测 SSBO 的访问冲突?
【发布时间】:2018-02-01 00:51:10
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: opengl glsl buffer-overflow opengl-4


    【解决方案1】:

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

    【讨论】:

    • 使用 intArray.length() 是防止溢出的好方法。在大多数情况下,它就足够了。但是,如果使用SSBO的地方很多,那就太乱了。我希望可能有一个分析器可以解决一些内存问题,因为有这样一个用于 CUDA(Parallel Nsight)的工具。这里好像没有其他答案,所以我会将您的答案标记为最佳答案。
    • @user3677630: "但是,如果使用SSBO的地方很多,那就太乱了。" 这就是函数的用途。
    猜你喜欢
    • 2021-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多