Во-первых, я рассмотрю это утверждение
В игре, если все позиции вершин вычисляются ЦП, почему ГП все еще имеет значение?Что обычно делает функция вершин?
Я не думаю, что видел кого-то, кто вычислял позиции для мешей, которые позже будут использоваться для их рендеринга на GPU.Это медленно, вам нужно будет передать все эти данные из процессора в графический процессор (что означает копирование их через шину, если у вас есть выделенный графический процессор).И это просто не так гибко.Существуют и другие вещи, кроме позиций вершин, которые необходимы для создания какого-либо значимого изображения, и вычисление всего этого на CPU просто расточительно, поскольку CPU по большей части не заботится об этих данных.
Единственная цель вершинного шейдера - предоставить растеризатору примитивы, которые находятся в пространстве клипа.Но есть и другие варианты использования, которые в основном представляют собой уловки, основанные на различных возможностях графического процессора.
Например, вершинные шейдеры могут записывать некоторые данные в буферы, поэтому, например, вы можете вывести преобразованную геометрию, если неНе требуется преобразовывать его снова на более поздней стадии вершины, если у вас многоходовый рендеринг, в котором одна и та же геометрия используется более чем за один проход.
Вы также можете использовать вершинные шейдеры для вывода только одного треугольника, который покрывает всеscreen, так что фрагментные шейдеры вызываются один раз на пиксель для всего экрана (но, честно говоря, для этого лучше использовать вычислительные (ядра) шейдеры).
Вы также можете записывать данные из вершинного шейдераи не генерировать никаких примитивов.Вы можете сделать это, генерируя вырожденные треугольники.Вы можете использовать это для создания ограничивающих рамок.Используя атомарные операции, вы можете обновлять мин / макс позиции и читать их на более позднем этапе.Это полезно для отбраковки легких, отбраковки усеченного контура, обработки на основе плиток и многих других.
Но , и это БОЛЬШОЙ, НО , вы можете сделать большую частьвсе это в вычислительном шейдере без использования графического процессора для запуска всего конвейера сборки вершин.Это означает, что вы можете делать полноэкранные эффекты, используя только вычислительный шейдер (вместо вершинного и фрагментного шейдера и многих промежуточных этапов конвейера, таких как растеризатор, примитивный отбор, тестирование глубины и объединение вывода).Вы можете вычислять ограничивающие рамки и делать легкие отбраковки или отбраковку усеченного конуса в вычислительном шейдере.
Есть причины запустить весь конвейер рендеринга вместо того, чтобы просто запускать вычислительный шейдер, например, если вы по-прежнему будете использовать треугольники, которые выводятся из вершинного шейдера, или если вы не уверены, каковы примитивызаложен в память, поэтому вам нужен вершинный ассемблер, чтобы выполнить тяжелую сборку примитивов.Но, возвращаясь к вашей точке зрения, почти все разумные варианты использования вершинного шейдера включают вывод примитивов в пространстве клипа.Если вы не используете полученные примитивы, лучше всего * использовать для вычисления шейдеров.