1

我遇到了一个奇怪的问题:我有一个片段着色器,其中包含几个统一变量(mat4、vec4)、一个 sampler2D 和一个巨大的 SSBO(1GB-2GB)。对于每种类型的变量,它都不会超过硬件的大小限制。没有 SSBO,着色器可以正常工作。使用 SSBO,如果纹理图像的分辨率较低(768x768x4 浮点数),着色器也可以正常工作。但是,如果分辨率达到 1024+ x 1024+,程序会立即在 NVIDIA 驱动程序中崩溃。我已经在 GTX980 Ti 和 Quadro P5000 上对其进行了测试。这个问题都发生了。

我想知道着色器资源的使用是否有任何限制。

4

1 回答 1

1

根据这个OpenGL 实现数据库,没有任何实现允许 SSBO 的大小超过 2GB。也就是说,没有实现GL_MAX_SHADER_STORAGE_BLOCK_SIZE大于 2GB。

请注意,Vulkan 的实现并没有太大的不同。AMD 实现提供 4GB SSBO,但它们仍然存在与其拥有的存储量不同的限制。

于 2017-06-17T15:49:17.180 回答