Инженерная тайна AMD из нулевых: что общего между Xbox 360, HTC HD2, Sony Ericsson Xperia Play и LG Optimus L3
Порой, когда погружаешься в исходный код драйверов и даташиты на железо, удивляешься тому, какие интересные инженерные решения использовались в устройствах прошлых лет. И пожалуй самым диковинным таким решением можно назвать подход AMD к разработке видеочипов в нулевых годах.
В этой статье всё как вы любите — подробная предыстория, анализ зацепок, изучение исходного кода и ответ на вопрос: что-же общего между коммуникатором из 2007'ого, смартфоном 2009'ого, ноутбуком 2012'ого и Xbox 360?
❯ Предыстория
Всё началось в середине 80-х годов, когда небольшая «красная» компания решила выпустить свою первую видеокарту, получившую название Wonder. Нет, нет, это была ещё не AMD, а компания ATI — которую AMD купят только в 2006'ом году. Линейка видеокарт Wonder была известна широкой поддержкой видеостандартов ПК тех лет (EGA/VGA/Hercules), а также относительно высокой степенью интеграции — в Wonder'ах конца 80-х годов можно было найти ТВ-выход, порт для геймпада/мыши, и даже интеграцию с звуковой картой Sound Blaster!
Однако это всё ещё был обычный видеоадаптер без какого-либо ускорения графики: всё что он делал — лишь брал картинку из фреймбуфера, которую предварительно подготовил процессор, и выводил её на монитор. Но уже в 1990'ом году, ATI представила свою новую видеокарту на архитектуре Mach8 — которая впервые позволяла ускорять 2D-графику на ПК за счёт аппаратного блиттера и являлась так называемым GUI-акселлератором. С программной точки зрения, она была клоном ранней видеокарты IBM под названием 8514A, как и многие другие GUI-акселлераторы тех лет.
Немного про GUI-акселлераторы
Изначально GUI-акселлераторы разрабатывались для ускорения графических оболочек в ОС типа Windows, а не для игр, причем концепцию скорее всего почерпнули из компьютеров Amiga, где графическая подсистема с самого начала была очень развитой. Чипсет OCS поддерживал и целых 8 аппаратных спрайтов, и палитры, и даже имел встроенный блиттер!
Тем не менее, один аппаратный спрайт в GUI-акселлераторах все же был — это курсор :)
Вплоть до ~1996 года, большинство 3D-софта и игр на ПК полагались на программный рендеринг на процессоре. С очень жесткими оптимизациями на Pentium 1 вполне можно было получить полноценную трехмерную картинку в 320x200 с приемлемым FPS — при этом оставалось немного процессорного времени и для просчета геймплея/физики/ИИ соперников. Ближе к 1996 году, пользуясь опытом первой PlayStation и игровых автоматов, производители видеокарт поняли, что за 3D-играми на ПК будущее, а значит в видеокарты нужно добавлять растеризаторы треугольников, которые разгрузят процессор от самого тяжелого этапа рендеринга.
Да, да. Первые видеоускорители умели только рисовать треугольники с текстурами (не всегда даже перспективная коррекция была реализована), да и интерполировать цвета по вершинам для реализации освещения в реальном времени.
Всем остальным до 1999 года занимался процессор — а это анимация моделей (чаще всего морфинг), отсечение невидимой геометрии, преобразование мировых координат в экранные, клиппинг, и конечно перспективное деление. В основном именно из-за появления T&L в GeForce 2 резко возрасла полигональность в играх.
Скриншот с сайта PlayGround.ru. Обратите внимание на цветовую гамму и отражения — последние реализовывались хитрым и очень быстрым трюком под названием Spherical environment mapping.
В 1996 году, ATI представила свой первый видеочип с 3D-ускорением — 3D Rage (I). Он был построен на базе оригинальной 2D-архитектуры Mach64: ATI добавила растеризатор треугольников с сэмплером текстур, а также декодер MPEG. По производительности видеокарта сильно уступала той-же 3dfx Voodoo (но обгоняла S3 Virge) и толком не поддерживала OpenGL, но тем не менее, успех на рынке она всё же получила.
Однако всего через год, Nvidia представила свою первую успешную видеокарту, которая была заметно мощнее, чем Rage Pro — Riva 128. В последующие три года, талантливые инженеры из NV умудрились значительно повысить уровень графики на ПК и выдавить практических всех конкурентов — включая S3, Intel, SiS и даже 3dfx. В сегменте десктопной графики из конкурентов у Nvidia оставалась только ATI и Matrox, но последняя скоропостижно выбыла из гонки из-за кривых драйверов.
За счёт чего NV выдавили других производителей?
NV давили других производителей технологиями: как например в случае с тем, что другие видеокарты тех лет занимались только растеризацией.
В Nvidia пошли другим путем и перенесли расчет геометрии и света на видеочип в GeForce 256, заметно разгрузив процессор, а также добавили аппаратную поддержку кубмап (позволяло создавать отражения в реальном времени), компрессии текстур (можно было «бесплатно» повысить разрешение текстур в два раза), и, в 2000 году, бамп-маппинга. Кроме того, только у NV были нормальные драйвера для OpenGL, что было важно для Quake-подобных игр.
В 2000 году, ATI наконец смогла нагнать Nvidia со своей новой линейкой Radeon и видеочипом R100. Красные умудрились реализовать полноценную поддержку T&L, сделали очень раннее подобие пиксельных шейдеров (ближе к комбайнерам), а также добавили в чип аппаратный бамп-маппинг и некоторые другие эффекты. При этом к шейдерам полноценного доступа из софта не было — только через комбайнеры. В последующие годы, ATI развивала архитектуру и в R200 добавились полноценные вершинные и пиксельные шейдеры на модели SM1.1, в R300 уже сделали поддержку DirectX 9 и SM 2.0 (помните Radeon 9500/9600? Вот это все они!), а ближе к 2005 году, компания занялась новым семейством R400 под кодовым названием Crayola...
...и вот на R400 стоит остановиться. Дело в том, что чипы серий R100-R400 (речь про другой R400, тот что Radeon X800) были построены на примерно одной и той же архитектуре, характерной для всех видеокарт начала 2000-х: отдельный блок вершинных шейдеров, отдельный блок пиксельных, а в случае R100 еще и FFP-конвейер. Однако в 2005 году, ATI работала над «другим» R400 под кодовым названием Crayola, который полностью перерабатывал архитектуру старого Radeon: вводил концепцию унифицированных шейдеров, переводил их внутреннюю архитектуру на VLIW5-модель, добавлял поддержку Shader Model 3.0 и в целом закладывал фундамент для поддержки D3D10/D3D11. И хотя сам по себе R400 на ПК в виде Crayola так и не появился, а новые видеокарты X1800 вышли на базе чипа R500 (по сути, продолжение старой микроархитектуры R350 с поддержкой SM3.0), именно Crayola стала основой видеочипа Xbox360 — Xenos. Дальше — интереснее...
❯ ATI Crayola
Конечно исключительно десктопными видеочипами бизнес ATI не ограничивался. У компании было мобильное подразделение под названием Imageon, которое разрабатывало графические ускорители для коммуникаторов, КПК и мобильных телефонов. Их функционал несколько отличался от привычных нам GPU: чаще всего там было 2D-ускорение, контроллер дисплея, контроллер камеры и аппаратный декодер видео. Найти видеочипы Imagoen можно в телефонах Motorola (E398, E1, а в Razr V3 стоял чип от Nvidia), КПК HTC (HP iPaq HX4700, HTC X7500) и еще некоторых других устройствах.
В 2004 году, ATI Imageon представила свой первый мобильный видеочип с поддержкой 3D-графики — 2300. Какое там было ядро досконально сказать сложно, но GPU точно поддерживал трансформацию геометрии, мультитекстурирование, комбайнеры и соответствовал уровню возможностей Rage 128 Pro/GF256. Nvidia не оставалась в стороне и в том же году представила GeForce 4500 — где вместо T&L с комбайнерами были полноценные программируемые вершинные и пиксельные шейдеры. В 2004'ом-то году, даже в топовой для тех лет PSP до сих пор был FFP GPU с функционалом уровня GF256/PS2!
Gizmondo единственной устройство с GoForce 4500. Моя мечта и просто крутая консоль, фото из Википедии.
И вот тут то Imageon пошла во все тяжкие. Мы же с вами помним про то, что основное подразделение ATI разрабатывало новую микроархитектуру R400 с унифицированными шейдерами и именно она легла в основу GPU Xenos в Xbox 360? Так вот: в задачах ATI была унификация этой микроархитектуры под все устройства: смартфоны, коммуникаторы, домашние консоли, ПК — везде были наследники Crayola. Именно Crayola легла в основу микроархитектуры TeraScale, которая использовалась с 2007 вплоть по 2014 год, пока AMD не заменила все десктопные и интегрированные GPU на GCN.
И если с ПК и Xbox 360 всё ясно, то с телефонами ситуация ещё интереснее: в начале нулевых, Qualcomm решила сделать ставку на поддержку 3D-ускорения в обычных кнопочных телефонах. В те годы, большинство кнопочников поддерживало либо Java, либо платформу Mophun, либо вообще ничего. У Qualcomm же была собственная платформа BREW, которая позволяла запускать нативные приложения, написанные на C++. В 2002-2003 году, компания представила чипсет MSM6250, который среди прочего имел свой собственный GPU под названием Stargate3D.
Ниже порт NFS U2 на BREW, использующий возможности Stargate3D:
Примерно в 2005 году, Qualcomm решила выйти на рынок чипсетов для коммуникаторов и выпустила MSM7200, где помимо встроенного в один чип модема, мощного ARM11-ядра и крутых мультимедийных функций, использовался видеоускоритель новой линейки — Adreno 130. MSM7200, 7200A и 7201A использовались в достаточно большом количестве устройств тех лет: тут тебе и первый Android-смартфон от Samsung - i7500 Galaxy, и первый Android-смартфон в мире - HTC Dream, и легендарные коммуникаторы HTC Touch Dual/TyTN II/Touch Diamond 2/Touch Diamond Pro, и ещё много-много разных устройств. И фишка в том, что Adreno 130 уже была разработкой ATI и скорее всего имеет прямые корни от Imageon 2300/2380.
Небольшая история с драйверами на Adreno
В 2007 году вышло несколько устройств HTC на базе Windows Mobile с MSM7200 на борту. И всё в них было хорошо, вот только интерфейс тормозил, да и 3D-ускорения не было. А всё потому что HTC не положили драйвер для D3DM и OpenGL ES с дистрибутивом системы и забили на обновления.
Поддержку 3D-ускорения потом всё таки сделали путём выдергивания драйверов из более поздних коммуникаторов с MSM7200A. С HTC Dream история та же — драйверов из коробки нет, но их чуть позже взяли от какого-то другого аппарата с 7201A, скорее всего Galaxy.
Об этом говорит Vendor String и поддержка ATI'шных расширений. Также здесь есть поддержка вершинных шейдеров, но нет пиксельных, что говорит о родстве с 2300, где был T&L (а скорее всего и полноценный вершинный конвейер).
После выхода TeraScale, в 2008 году Imageon представила новый 3D-ускоритель — Z430, который поддерживал OpenGL ES 2.0/Direct3D 9.0c, имел унифицированную шейдерную архитектуру с 8-ю шейдерными ядрами, мог рендерить до 22млн треугольников в секунду, и по возможностям примерно приближался к карточкам уровня GeForce FX5200. Уже догадались на какой микроархитектуре он построен? :) Да, да — его даже в народе прозвали мини Xenos'ом, поскольку Z430 является урезанным GPU из Xbox 360.
В отличии от прошлых Imageon'ов, Z430 уже лицензировался как IP-ядро другим производителям чипсетов и мне лично известны три SoC с Z430: Qualcomm MSM72xx и QSD82xx, а также Freescale i.MX8. Но уже через год, в 2009 году, AMD зачем-то продала Imageon компании Qualcomm, которые в свою очередь переименовали Z430 в Adreno 200/205 и продолжали использовать в бюджетных (и не очень) смартфонах вплоть до 2013'го — в год, когда вышла последняя ревизия Xbox 360, а AMD активно начала заменять TeraScale GPU на базе архитектуры GCN. Символично.
Все эти смартфоны используют GPU Adreno 200/205, который архитектурно очень близок к Xbox 360. И это далеко не весь список моделей — их сотни! Узнали хоть один? :)
В процессе изучения материала, я исследовал исходный код эмулятора Xenia и драйвера Freedreno, а также реверсил драйвер GLES Adreno для Android. И у Adreno, и у Xenon используется схожий набор регистров и даже идентичные номера опкодов:
С TeraScale у них схожий набор команд, однако число и количество опкодов отличается — немудрено, ведь TeraScale это эволюция Crayola:
❯ Заключение
Ну а в последующие годы Qualcomm решила не использовать наработки Radeon, и Adreno 3xx уже был GPU собственной разработки с суперскалярной архитектурой и TBDR. В 2013 году, история ATI Crayola окончательно закончилась... но AMD с мобильного рынка полностью не ушла и в 2022 году, GPU RDNA интегрировали в Exynos 2200, ознаменовав возвращение красных на рынок мобильных видеоускорителей! А смартфоны с частичкой Xbox 360 все равно останутся в наших сердцах!
К слову, мне было бы интересно пощупать что‑то ещё из семейства Nvidia ION/Radeon Xpress Graphics/VIA Chrome9 HC/Trident Blade, а в будущем возможно написать 3D-демку под GPU. Если у кого‑то есть всякие интересные тонкие клиенты или ноутбуки на прикольном железе, или что‑то AMD'шное времен 939/462 — пишите в ЛС, обязательно сделаю контент!
Ну а я надеюсь, что вам было интересно. Подписывайтесь на блог, чтобы не пропускать новые статьи каждую неделю! А если вам интересна тематика ремонта, моддинга и программирования для гаджетов прошлых лет — подписывайтесь на мой Telegram‑канал «Клуб фанатов балдежа„, куда я выкладываю бэкстейджи статей, ссылки на новые статьи и видео, а также иногда выкладываю полезные посты. А ролики (не всегда дублирующие статьи) можно найти на моём YouTube канале.“»
А если вы хотите что‑нибудь подарить из железа и увидеть о нём статью — пишите мне в Telegram. Меня очень интересуют самые разные гаджеты: начиная от игровых консолей и любых связанных с геймингом устройств, телефонов, смартфонов, КПК, заканчивая ретро‑компьютерами и ноутбуками. Кто знает, может героем следующей подобной статьи окажется ноутбук из 90-х?:‑)
После обзоров устройства не продаются, а остаются в моей коллекции. Когда‑нибудь я хочу сделать музей, где к каждому устройству можно будет приложить QR и почитать мою статью. Кто знает, вдруг на следующей неделе я также подробно расскажу про девайс из вашей юности?:)



















