Всё про геймдев для девелоперов, художников, левел- и геймдизайнеров, сценаристов
Разместить рекламу: @tproger_sales_bot
Другие каналы: @tproger_channels
Другие наши проекты: https://tprg.ru/media
Post #1811
2.02K

О, тут вышло продолжение серии про сборку Quake на ретро-железе. Санглар отключил все ASM-оптимизации Абраша и измерил FPS: 42,2 упали до 22,7 на Pentium MMX 233MHz. Кармак не врал: ассемблер действительно давал x2.
🔘63 asm-функции в 21 файле, но 65% прироста даёт одна
🔘Главный трюк: перспективно-корректная текстура требует деления, а FDIV на Pentium занимает 39 тактов. Абраш запускает деление для следующего блока из 8 пикселей в начале текущего, и пока FPU считает, целочисленные пайплайны U/V рисуют пиксели. В коде комментарий: «this is what we've gone to all this trouble to overlap».
🔘
🔘Ещё: self-modifying code (база colormap вшивается прямо в инструкции), полная развёртка циклов, jump table вместо ветвления на последнем блоке спана,
В общем, лучше оригинал почитайте, там подробнее и понятнее.
@make_game
🔘63 asm-функции в 21 файле, но 65% прироста даёт одна
D_DrawSpans8 (растеризация стен). Ещё 22% от surface caching (R_DrawSurfaceBlock8), 11% — отрисовка моделей (D_Polyset*).🔘Главный трюк: перспективно-корректная текстура требует деления, а FDIV на Pentium занимает 39 тактов. Абраш запускает деление для следующего блока из 8 пикселей в начале текущего, и пока FPU считает, целочисленные пайплайны U/V рисуют пиксели. В коде комментарий: «this is what we've gone to all this trouble to overlap».
🔘
TransformVector — пример работы с x87 FPU. Компилятор считает три dot product последовательно и стоит на каждом fadd (ждёт результат fmul 3 такта). Абраш считает три dot product параллельно, перемешивая операции через бесплатный fxch. Ноль столлов.🔘Ещё: self-modifying code (база colormap вшивается прямо в инструкции), полная развёртка циклов, jump table вместо ветвления на последнем блоке спана,
ja вместо двух сравнений для clamp.В общем, лучше оригинал почитайте, там подробнее и понятнее.
@make_game
- ⚡ 9
- 🫡 3
- 👍 2








