【问题标题】:The size limitation of the resources per shader in OpenGL 4.5OpenGL 4.5 中每个着色器的资源大小限制
【发布时间】:2017-11-19 21:46:08
【问题描述】:

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

不知着色器资源的使用是否有限制。

【问题讨论】:

  • 这与请求处理 CPU 中的 RAM 限制相同,不同之处在于没有交换磁盘。纹理必须适合 GPU RAM,否则并行性消失(阅读:崩溃或无绘图)。我相信您可以找到一种方法将您的数据分成几部分,然后将它们连续发送到 GPU。

标签: opengl shader opengl-4 shader-storage-buffer


【解决方案1】:

根据database of OpenGL implementations,没有任何实现允许 SSBO 的大小超过 2GB。也就是说,没有任何实现具有大于 2GB 的GL_MAX_SHADER_STORAGE_BLOCK_SIZE

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

【讨论】:

  • 在创建这么大的 SSBO 对象后,我没有遇到任何 opengl 错误。所以,在我仔细检查了我的 SSBO 的大小之后,我发现它没有超过 2G 限制,而是接近它。我正在使用这个 SSBO 来做每像素链表,我分配了一个 1024*1024*32*sizeof(Fragment) 缓冲区,其中 'Fragment' 包含两个 vec4 浮点向量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多