От keyming через документацию OpenGL я вроде предполагал, что max_shader_storage_block_size - это фактический предел на размер SSBO. На моем графическом графике это значение сообщается как 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
soulsource 12 Мар 2018 в 01:20

1 ответ

Лучший ответ

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

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

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

1
Nicol Bolas 12 Мар 2018 в 05:00