January 14th, 2007

msme

Shaders and stuff - part 1: ATI

Совсем забросил технические посты с этой всей Америкой и впечатлениями от нее. Попробую потихоньку исправляться, дальнейшим искоренением старых знаний из мозгов.
А тут как раз повод - недавно спросили, на какой версии шейдеров для какой карточки оптимальней писать код, особенно в свете запускания шейдеров ранних версий на новых картах. Ответ слишком долгий, и поэтому я попытаюсь написать его здесь.

Сразу оговорюсь, я пишу в основном с DX point of view, хотя ссылаться на OGL все равно придется. За сегодня успеваю написать про vertex shaders и про pixel shaders на ATI. Pixel shaders на NV - это значительно более долгая история :)

Collapse )

ATI живет стандартами и большей частью им скурпулезно следует. Поддерживают нужную версию DX shaders, все ARB-расширения OGL и for fun обеспечивают некоторый кроссовер.
На ATI в DX жить приятно, общие рекомендации "код меньшей версии запускай сколько хочешь" и "если не нужно, чтобы код работал на старых картах, пиши на последней версии, которая поддерживается" - за редкими исключениями всегда работают. Не надо пытаться писать на старых версиях, чтобы получить лучшую производительность. Вся функциональность карты кроме мелочей на ладони и предсказуема. Можно реюзать много кода для более старых карт не только ATI, но и NV. Красота.

К сожалению, в обратную сторону такой переход нихрена не работает - NV далеко не всегда будет любить код с ATI. А иногда, что удивительно, будет любить еще больше своего собственного.
Об этом - как-нибудь потом.