Моя видеокарта GTX 1080 ti. Я хочу использовать OpenGL 3D текстуру. Пиксельный (воксельный) формат - GL_R32F. OpenGL не сообщал об ошибках, когда я инициализировал текстуру и рендеринг с текстурой.
Когда 3D-текстура была маленькой (512x512x512), моя программа работала быстро (~ 500FPS).
Однако, если я увеличил размер до 1024x1024x1024 (4 ГБ), FPS резко упал до менее 1FPS. Когда я отслеживал использование памяти графическим процессором, объем памяти графического процессора не превышал 3 ГБ, хотя размер текстуры составлял 4 ГБ, а всего у меня 11 ГБ.
Если я изменил формат пикселя на GL_R16F, он снова заработал, и FPS вернулся к 500FPS, а потребление памяти графическим процессором составляет около 6,2 ГБ.
Моя гипотеза состоит в том, что 3D-текстура 4 ГБ на самом деле не в графическом процессоре, а в памяти процессора. В каждом кадре драйвер снова и снова передает эти данные из памяти процессора в память графического процессора. В результате это замедляет производительность.
Мой первый вопрос: верна ли моя гипотеза? Если это так, почему это происходит, даже если у меня достаточно памяти GPU? Как заставить все данные OpenGL находиться в памяти GPU?