Черная консоль и черный треугольник.

Нарисовался треугольник на PS3 RSX. Под Линуксом. Последняя стадия была нудной и не такой искрометной как прежние. Всего-то заполнить десяток рендерстейтов, залудить шейдерцы в микрокоде, поместить в командный буфер треугольник.

Конечно, большое спасибо Сони. Если бы они не документировали драйвер, то никто не понял бы, где push buffer. Если бы они закрыли push buffer для ядра Линукса, то никто бы и не рыпнулся. Если бы не отмапили контрольные регистры в юзермоду – то было бы тяжко. Если бы в официальном драйвере фреймбуфера не использовался читовый вызов, который дает контроль над всей видеопамятью – никто бы и не догадался, что при попытке аллоцировать 0 мегабайт видеопамяти дадут все 256 мегабайт, со всеми ништяками в виде контрольных структур. Если бы железку не подготовили правильным образом к 3D, проинициализировав GRAPH контекст как надо – было бы тяжко. Если бы программисты Сони подчищали память хоть иногда ( к примеру push buffer после вызовов blit или после инициализации объектов контекста ) – то у меня опустились бы руки. Но это все лирика.

Практика состоит в том, что хочется написать маахонький драйверочек. Даже не драйверок, а утилитки пользовательского режима. Вот некие соображения, как бы я писал фреймворк для работы с RSX на Cell.

Никакого разделения ресурсов. Стартует приложение, грабит себе эксклюзивно видеокарточку и имеет ее. Пока не закончит работу – никто другой графику рисовать не будет. Памяти и так мало, писать разные “менеджеры” оной, что для системной, что для видео – оставим для программистов MicroSoft. Они  задумчивые.

Вертексные шейдеры, константы к ним – юзать не будем. Ибо надо писать компилятор и как-то менеджить шейдеры и константы. Оно нам не надо. Заведем буферок мегабайта на 4  XDR памяти. Фиксированного размера – будем туда лить геометрию и индексы. В колечко завяжем, с RSX как-нить засинхронизуем. Вертекс стримы, делители частоты и прочая ерунда – в фичекат. У нас есть спушки. Они хорошие. 

Нужны рендерстейты. Будут блоками, будут как в DX10, разве что гранулярность пожиже. Чтобы шарились. Жить будут опять на выделенном куске XDR памяти, будем на них call говорить. Хорошие идеи надо пиздить, даже если они из MS.

Нужны текстуры. Текстуры нужны DXT, RGBA32, RGB565 и A8. Текстуры будут билдиться заранее, если DXT.  А если не DXT – то просто кусок памяти. Текстурки будем класть в DDR память,  XDR памяти жалко и лень мапить на GPU.

Пиксельные шейдерцы. Заюзаем компилятор из нуво, он там полусырой, но какой есть. Поскольку компилятор очевидно говно – то билдить будем заранее, чтобы отгородиться от говна забором пайплайна.  Жить пиксельные шейдерцы будут в выделенном куске видеопамяти. Или в двух.

Вот как-то так. Работа даже обозримая.

  • IronPeter

    Как бы совсем забыл в спешке.
    svn repo:
    http://ps3rsx.googlecode.com/svn/trunk/
    для работы необходимо пропатчить ps3fb.c диффом отсюда:
    http://manwe.homelinux.org/~glaurung/ps3/20071021/
    ну и ядрышко пересобрать

  • CEMEH

    Поздравляю!
    Однако, в Сони тоже удивительно относятся в security. Наши хоть малюсенькую штучку такую пропустили :)

  • IronPeter

    Ну знаешь, тут как бы нет отдельных дыр. Весь код – одна большая дыра. Так что мне кажется – что специально. Случайно так сделать нельзя.

  • IronPeter

    Тупой пример. Видеопамять после ребута живет секунды. Думаешь, при инициализации гипервизора кто-то забивает видеопамять нулями? Да хер там…

  • http://-winnie.livejournal.com _winnie
  • http://www.codygain.com neteraser

    Wow! Поздравляю, АццкийPeter!

  • Sergei_am

    Грац, Петя!