Чи має значення порядок вершинних буферних даних при візуалізації індексованих примітивів?


14

Я будую трикутники 3d-об’єкта. Якщо я можу записати їх у буфер у порядку, який вони розраховують, це спростить код CPU. Вершини для трикутників не будуть суміжними.

Чи є штраф за виконання, щоб виписати їх з ладу?

Відповіді:


12

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

Якщо ви організуєте свої дані, щоб скористатися цим кешем (прикладний алгоритм тут ), ви можете побачити покращення продуктивності. Однак ця організація має більше спільного з упорядкуванням ваших індексів, щоб кожен потрійний індекс повторно використовував якомога більше нещодавно вершин. Це, мабуть, мало стосується вашого конкретного сценарію, якщо тільки ваші трикутники через індексний буфер також не випадково розкидані по буфері ... в такому випадку ви, ймовірно, часто дуєте кеш. Мені не було зрозуміло у вашому запитанні, чи так це, чи я вважав, що це варто згадати.

Що більш ймовірно, що це проблема полягає в тому, що графічні процесори також кешують доступ до пам'яті даних вершин під час нічиї. Розмір цього кешу також є досить ненадійним розміром, і можливо, що ви можете отримати високу частоту пропуску в цьому кеші на окремих ядрах, що обробляють ці індекси в дуже погано локалізовані дані вершин.

Що стосується того, щоб це зробити чи ні, це не призведе до того, що проблема з продуктивністю буде червоним прапором у вашій програмі, і, зокрема, (це здається) для перепроектування алгоритму для кращого упорядкування даних за рахунок читабельності алгоритму ... це не те, на що я можу відповісти, вам доведеться профайлювати деякі сценарії та подивитися.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.