OpenGL: Как MAX_SHADER_STORAGE_BLOCK_SIZE связано с реальным пределом размера SSBO?

Просматривая документацию OpenGL, я предположил, что MAX_SHADER_STORAGE_BLOCK_SIZE - это фактический предел размера, который может иметь SSBO. На моем GPU это значение указано как 128 МБ. Тем не менее, он прекрасно работает для создания и использования гораздо больших буферов (гигабайт), если они помещаются в видеопамять.

Несколько строк кода для пояснения:
В моем вычислительном шейдере доступ к буферу осуществляется через

layout(std430, binding=2) buffer renderedDataRed
{
    uint counts_SSBO[];
};

На стороне процессора я создаю буфер с

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?

1 ответ

Решение

Максимальный размер блока хранения - это максимальный размер блока хранения: то, что вы определяете в GLSL, к которому вы подключаете буферный объект. Поскольку ваш блок хранения полностью состоит из массива переменного размера, он не имеет определенного размера.

В противном случае нет никаких ограничений на размер ограниченного диапазона для объекта буфера, который связан для использования в качестве SSBO. Итак, что касается спецификации OpenGL, это должно работать.

При этом я бы не стал на это полагаться. Вулканский эквивалент явно ограничивает размер, используемый в дескрипторах буфера для буферов хранения. Ясно, что такие ограничения существуют.

Другие вопросы по тегам