OpenGL:MAX_SHADER_STORAGE_BLOCK_SIZE 与 SSBO 大小的实际限制有何关系?
OpenGL: How is MAX_SHADER_STORAGE_BLOCK_SIZE related to the real limit of SSBO size?
通过浏览 OpenGL 文档,我假设 MAX_SHADER_STORAGE_BLOCK_SIZE 是 SSBO 可能具有的实际大小限制。在我的 GPU 上,此值报告为 128 MB。但是,创建和使用更大的缓冲区(千兆字节)也能正常工作,只要它们适合显存即可。
几行代码来说明:
在我的计算着色器中,通过
访问缓冲区
layout(std430, binding=2) buffer renderedDataRed
{
uint counts_SSBO[];
};
在 CPU 方面,我正在使用
创建缓冲区
glGenBuffers(1, &drawBuffer);
glBindBuffer(GL_SHADER_STORAGE_BUFFER, drawBuffer);
glBufferData(GL_SHADER_STORAGE_BUFFER, 4 * pixelCount, nullptr, GL_DYNAMIC_COPY);
glClearBufferData(GL_SHADER_STORAGE_BUFFER,GL_R8,GL_RED,GL_UNSIGNED_INT,nullptr);
glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 2, drawBuffer);
如前所述,让 pixelCounts 导致缓冲区大小远远超过 MAX_SHADER_STORAGE_BLOCK_SIZE...
效果很好
所以,MAX_SHADER_STORAGE_BLOCK_SIZE 应该是实际的 SSBO 大小限制,而我的驱动程序 (mesa radeonsi) 只是报告了错误的数字,还是我误解了文档?
未明确确定大小的数组是否不计入 MAX_SHADER_STORAGE_BLOCK_SIZE?
最大存储块大小是存储的最大大小块:您在 GLSL 中定义的将缓冲区对象挂钩到的东西。由于您的存储块我们完全由可变大小的数组组成,因此它没有定义大小。
对于绑定用作 SSBO 的缓冲区对象,绑定范围的大小没有其他限制。所以就OpenGL规范而言,这应该可行。
话虽如此,我不会依赖它。 Vulkan 等效项明确限制了存储缓冲区的缓冲区描述符中使用的大小。很明显,存在这样的限制。
通过浏览 OpenGL 文档,我假设 MAX_SHADER_STORAGE_BLOCK_SIZE 是 SSBO 可能具有的实际大小限制。在我的 GPU 上,此值报告为 128 MB。但是,创建和使用更大的缓冲区(千兆字节)也能正常工作,只要它们适合显存即可。
几行代码来说明:
在我的计算着色器中,通过
layout(std430, binding=2) buffer renderedDataRed
{
uint counts_SSBO[];
};
在 CPU 方面,我正在使用
创建缓冲区glGenBuffers(1, &drawBuffer);
glBindBuffer(GL_SHADER_STORAGE_BUFFER, drawBuffer);
glBufferData(GL_SHADER_STORAGE_BUFFER, 4 * pixelCount, nullptr, GL_DYNAMIC_COPY);
glClearBufferData(GL_SHADER_STORAGE_BUFFER,GL_R8,GL_RED,GL_UNSIGNED_INT,nullptr);
glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 2, drawBuffer);
如前所述,让 pixelCounts 导致缓冲区大小远远超过 MAX_SHADER_STORAGE_BLOCK_SIZE...
效果很好所以,MAX_SHADER_STORAGE_BLOCK_SIZE 应该是实际的 SSBO 大小限制,而我的驱动程序 (mesa radeonsi) 只是报告了错误的数字,还是我误解了文档? 未明确确定大小的数组是否不计入 MAX_SHADER_STORAGE_BLOCK_SIZE?
最大存储块大小是存储的最大大小块:您在 GLSL 中定义的将缓冲区对象挂钩到的东西。由于您的存储块我们完全由可变大小的数组组成,因此它没有定义大小。
对于绑定用作 SSBO 的缓冲区对象,绑定范围的大小没有其他限制。所以就OpenGL规范而言,这应该可行。
话虽如此,我不会依赖它。 Vulkan 等效项明确限制了存储缓冲区的缓冲区描述符中使用的大小。很明显,存在这样的限制。