Я немного покопался в том, что на самом деле происходит на аппаратном уровне в GPU, и нашел NVidia Life of the треугольник, который довольно хорошо объясняет конвейер, по крайней мере, для зеленых прямоугольников. Одна вещь, которая мне не ясна, это то, что происходит с индексированными сетками, когда одна и та же вершина используется для группы разных треугольников. Поскольку данные обычно не сохраняются дольше, чем это необходимо в потоковом процессоре, я предполагаю, что вершина просто уничтожается после растеризации, затем извлекается и снова запускается через вершинный шейдер всякий раз, когда она появляется в новом треугольнике. Кто-нибудь может это подтвердить? Кроме того, что происходит в режимах линейной или треугольной полос? Сохраняет ли GPU преобразованные данные вершин где-нибудь до тех пор, пока 2 или 3 соответствующих примитива не будут растеризованы в этих случаях?
8
Это зависит от того, насколько далеко друг от друга вершины используются повторно.
Например, квадрат
0, 1, 2, 2, 1, 3
будет иметь достаточно короткий интервал , что1
и2
вершины будут повторно использоваться. Но если между повторными использованиями будет сто вершин, более вероятно, что повторного использования не будет.Но когда они намного дальше друг от друга, вершина выпадает из кэша и должна быть повторно обработана вершинным шейдером.
Вот почему некоторые 3D-программы имеют способ улучшить локальность вершин для индексированных сеток путем переупорядочения вершин.
источник