Имеет ли значение порядок данных буфера вершин при рендеринге индексированных примитивов?


14

Я строю треугольники трехмерного объекта. Если я смогу записать их в буфер в порядке их вычисления, это упростит код процессора. Вершины для треугольников не будут смежными.

Есть ли какие-либо потери производительности за их написание?

Ответы:


12

Здесь есть (по крайней мере) два фактора. Графические процессоры могут использовать кэш вершин после преобразования при визуализации индексированных примитивов. Размер этого кэша варьируется, и он используется во время отдельного вызова отрисовки (насколько я знаю, не для нескольких вызовов, поэтому не имеет значения, как часто вы меняете данные буфера в этом контексте).

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

Проблема, скорее всего, заключается в том, что графические процессоры также кэшируют доступ к памяти для данных вершин во время рисования. Размер этого кеша также довольно ненадежен, и вполне возможно, что вы можете получить высокую частоту промаха в этом кеше на отдельных ядрах, обрабатывающих эти индексы в очень плохо локализованные данные вершин.

Что касается или нет, это приведет к тому, что достаточно проблем с производительностью, чтобы быть красным флагом в вашем приложении, и, в частности, (это звучит так), чтобы перестроить ваш алгоритм, чтобы лучше организовать данные за счет читабельности алгоритма ... это не то, что я могу ответить, вам придется профилировать некоторые сценарии и посмотреть.

Я бы лично допустил ошибку в отношении читабельного, обслуживаемого кода, хотя, как мне кажется, любой отсутствующий кеш, который вы собираетесь вызвать, не будет достаточно значительным для пользователей, чтобы это заметить.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.