Як працює кеш текстури в GPU-графічному відтворенні на основі плитки


9

Як кеш працює з відображенням на основі плитки?

Чи є поради, як покращити співвідношення кількості кеш-пам'яті для цього? (наприклад, якщо плитки обробляються горизонтально і у мене є вертикальні сегменти трикутників з однаковою текстурою, чи це працює гірше для кешу, ніж якби у мене було розташування трикутників горизонтально?)


1
Що ви маєте на увазі під вертикальним та горизонтальним розташуванням трикутників?
Мокоша

@Mokosha вибачте, це мені якось непомітно. Я щойно це побачив. Це скоріше теоретичне, ніж практичне питання, і я навіть не знаю, чи має це зараз сенс. У будь-якому випадку, що я мав на увазі, скажімо, трикутник перетинає плитки (x, y) і (x + 1, y), і що ці дві плитки обробляються одна за одною. Чи було б це краще для кеш текстури, ніж якби у мене трикутник перетинався (x, y) та (x, y + 1)? (Оскільки межі пікселів та компонування трикутників не є в одному напрямку, обробка плитки є)
Феліпе Ліра

Відповіді:


19

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

Як результат, ефективніше відображати трикутники, близькі до рівносторонніх трикутників, оскільки система пам’яті GPU витягує кешові лінії текстилів.

Тож очевидно, що на кордонах плитки може статися, що вам доведеться вибирати текстилі двічі. Це має невелику вартість, оскільки межі плитки - це лише "кілька" пікселів.

Можливо, настільні графічні процесори поводяться ідентично графічним графічним процесорам, оскільки такі експерименти демонструють: http://www.g-truc.net/post-0597.html

Розміри плиток відрізняються, але обидві архітектури фактично обробляють фрагменти в ієрархію плиток різного розміру.

При кодуванні графічних процесорів на основі плитки моя рекомендація завжди мати на увазі:

  1. Не перемикайте об'єкти framebuffer, якщо вам це не потрібно.
  2. Прив’язуючи новий об'єкт framebuffer, якщо вам не потрібно зберігати вміст поточного фреймбуфер, відкиньте його. Якщо ви не хочете завантажувати вміст нового фреймбуфера, слід очистити фреймбуфер.

Я оновив другий елемент, оскільки редагування було не те, що я мав на увазі. Інакше це виглядає чудово!
Крістоф

Привіт Крістофе, ти мав на увазі "рівносторонні" трикутники, а не "рівнобедрені"? Замість «Гільберта» я б сказав, що замовлення «Мортон», оскільки адресація набагато простіша в апараті.
Саймон Ф

@Christophe дякую! Це справді корисно. Отже, для пікселів кордону не має значення кеш текстури? Це було щось таке, що мені було цікаво. Отже, якщо у мене є трикутник, який перетинає плитки (x, y) і (x + 1, y), а GPU просто растровані плитки (x, y). Якщо припустити, що плитка (x + 1, y) буде наступною, навіть якщо інша одиниця виконання виконує її обробку, чи не отримаю я користі від кеш-текстур при відборі текстур для цього трикутника?
Феліпе Ліра

Також мені стало цікаво про Гільбертовий візерунок. Я завжди припускав, що це справедливо для блокованих стислих текстур. Чи правда це для всіх текстур? PS: Я також не дотримувався останнього абзацу.
Феліпе Ліра

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