我遇到了一个奇怪的问题:我有一个片段着色器,其中包含几个统一变量(mat4,vec4(,一个采样器2D和一个巨大的SSBO(1GB-2GB(。对于每种类型的变量,它不超过硬件的大小限制。如果没有 SSBO,着色器可以正常工作。使用 SSBO,如果纹理图像的分辨率较低(768x768x4 浮点(,着色器也可以正常工作。但是,如果分辨率达到 1024+ x 1024+,程序会立即在 NVIDIA 驱动程序中崩溃。我已经在GTX980 Ti和Quadro P5000上测试过它。这个问题都发生了。
我想知道着色器资源的使用是否有任何限制。
根据这个OpenGL实现数据库,没有实现允许SSBO的大小超过2GB。也就是说,任何实现GL_MAX_SHADER_STORAGE_BLOCK_SIZE
都大于 2GB。
请注意,Vulkan 实现没有太大区别。AMD实施提供4GB SSBO,但它们仍然存在与存储量分开的限制。