OpenGL 4.5中每个着色器的资源大小限制

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

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

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

根据这一点,没有允许SSBO大小超过2GB的实现。也就是说,没有任何实现的
GL\u MAX\u SHADER\u STORAGE\u BLOCK\u SIZE
大于2GB

请注意,它们没有太大不同。AMD的实施方案提供4GB SSBO,但它们仍有与存储容量不同的限制。

根据这一点,没有任何实施方案允许SSBO的大小超过2GB。也就是说,没有任何实现的
GL\u MAX\u SHADER\u STORAGE\u BLOCK\u SIZE
大于2GB


请注意,它们没有太大不同。AMD实施提供4GB SSBO,但它们仍有与存储量不同的限制。

这与要求处理CPU中的RAM限制是一样的,不同之处在于没有交换磁盘。纹理必须适合GPU RAM,否则并行性就会消失(读:崩溃或无图形)。我相信你可以找到一种方法,将你的数据分成几部分,并将它们连续发送到GPU。这与要求处理CPU中的RAM限制是一样的,不同的是没有交换磁盘。纹理必须适合GPU RAM,否则并行性就会消失(读:崩溃或无图形)。我相信你可以找到一种方法,将你的数据分解成碎片,并将它们连续发送到GPU。在创建了这么大的SSBO对象之后,我没有遇到任何opengl错误。所以,在我仔细检查了我的SSBO的大小之后,我发现它没有超过2G限制,但已经接近了。我用这个SSBO做每像素链表,我分配了一个1024*1024*32*sizeof(Fragment)缓冲区,其中“Fragment”包含两个vec4浮点向量。在创建这么大的SSBO对象后,我没有遇到任何opengl错误。所以,在我仔细检查了我的SSBO的大小之后,我发现它没有超过2G限制,但已经接近了。我用这个SSBO做每像素链表,我分配一个1024*1024*32*sizeof(Fragment)缓冲区,其中“Fragment”包含两个vec4浮点向量。