В настоящее время я создаю приложение на vulkan, где я буду собирать много данных из буфера. Я буду использовать как можно больше памяти, но скорость выборки также важна. Мои данные представлены в виде двумерного массива 32-битных целых чисел. Я могу либо загрузить его как текстуру и использовать для нее сэмплер текстуры, либо как буфер для хранения. Я читал, что буферы хранения, как правило, медленные, поэтому я рассматривал возможность использования сэмплера изображений для чтения моих данных во фрагментном шейдере. Мне пришлось бы отключить мипмэппинг и фильтрацию и преобразовать координаты UV в индексы массива, но если это быстрее, я думаю, оно того стоит.
Мой вопрос в том, стоит ли вообще хранить мои данные в сэмплере изображений, или я должен сделать очевидное и использовать буфер хранения? Каковы плюсы/минусы каждого подхода?
Гарантий на работоспособность не существует.
Но Vulkan API старается вас не обманывать. Очевидный путь, скорее всего, правильный.
Если вы хотите попробовать, то попробуйте. Если вы хотите сделать необработанный доступ, то, очевидно, сделайте необработанный доступ. Как правило, вы не должны насильно пытаться вставить квадрат в круглое отверстие.
Кроме того, изображения имеют ограничения по размеру, которых нет у SSBO. Это также делает очевидным, когда вы хотите использовать изображение, а когда нет.
"Я читал, что буферы хранения обычно работают медленно" Где?