Ограничение размера ресурсов на шейдер в OpenGL 4.5
Я столкнулся со странной проблемой: у меня есть фрагментный шейдер, содержащий несколько одинаковых переменных (mat4, vec4), один sampler2D и гигантский SSBO (1GB-2GB). Для каждого типа переменных оно не превышает ограничение размера аппаратного обеспечения. Без SSBO шейдер работает нормально. С SSBO, если разрешение текстурного изображения низкое (768x768x4 с плавающей точкой), шейдер тоже работает нормально. Однако, если разрешение достигает 1024+ x 1024+, программа мгновенно вылетает в драйвере NVIDIA. Я тестировал его на GTX980 Ti и Quadro P5000. Эта проблема все случилось.
Интересно, есть ли какие-либо ограничения на использование шейдерных ресурсов?
1 ответ
Согласно этой базе данных реализаций OpenGL, не существует реализации, которая позволила бы иметь размер SSBO более 2 ГБ. То есть ни одна реализация не имеет GL_MAX_SHADER_STORAGE_BLOCK_SIZE
больше 2ГБ.
Обратите внимание, что реализации Vulkan не сильно отличаются. Реализации AMD предлагают 4 ГБ SSBO, но у них все еще есть ограничения, которые отличаются от объема памяти, который они имеют.