Если я использую вершинный шейдер для выполнения всех операций над объектом, то константный буфер может быть пустым? - PullRequest
0 голосов
/ 28 марта 2020

Программный цикл равен

Update();
UpdatePipeline();

В Update() постоянном буфере для каждого объекта, который после преобразований копирует эту матрицу мира объектов в кучу загрузки GPU. А в UpdatePipeline(), помимо прочего, называются установленные шейдеры. Поскольку мы выполняем все преобразования матрицы с использованием CPU, вершинный шейдер просто возвращает позицию, верно? Если да - правда ли, что производительность увеличится?

Теперь я хочу сделать все преобразования с использованием графического процессора, то есть с помощью вершинного шейдера. Это означает, что в Update() я просто должен вызвать memcpy() с пустым постоянным буфером в качестве источника?

1 Ответ

0 голосов
/ 24 апреля 2020
  1. Постоянный буфер - это просто буфер для перемещения данных из ЦП в графический процессор. Используете ли вы один или сколько используете, и для чего вы их используете, зависит только от вас.
  2. Наиболее распространенный и самый простой вариант использования постоянного буфера - переместить матрицу преобразования в ГПУ. Эта матрица действительно вычисляется ЦП, и вершинный шейдер использует эту матрицу для преобразования позиций в буфере вершин из локального в экранное пространство. Это позволяет центральному процессору перемещать объект без необходимости обновления (обычно довольно большого) буфера вершин.
  3. Повышение производительности зависит от вашего оборудования, вашего кода и, что наиболее важно, от того, с чем вы сравниваете производительность с. Так как я не знаю ваш текущий код, и какие именно изменения вы намерены сделать, я даже не могу догадаться, увеличится ли он или нет.
  4. Кроме того, хотя я не знаю ваш код, По тому, как вы сформулировали свой вопрос, я бы предположил, что вы определенно не хотите использовать постоянный буфер в качестве источника для какой-либо операции с процессором.
...