The irregular Nouveau-Development companion
Перевод выпуска за 21 марта
1. Введение
Привет! Перед Вами 37-й выпуск TiNDC. Если вы ожидаете, что этот выпуск будет столь же обширным, как и предыдущий, то должен разочаровать Вас. В этот раз он будем как обычно коротким.
В общем и целом видимого прогресса почти не видно, так как люди сражаются с Gallium или работают над тем, чтобы заставить Gallium работать на их карточках. Если вы чувствуете в себе Силу - можете тоже попробовать. Следуйте заметкам из блога Hanno Boeck'а (http://www.hboeck.de/archives/599-A-try-on-current-nouveau.html) или загляните на страничку нашей Wiki: http://nouveau.freedesktop.org/wiki/GalliumHowto
Пожалуйста заметьте! Пока мы не сможем и не хотели бы помогать Вам в этом деле. Если заработает - Вам повезло, если нет - пожалуйста, не жалуйтесь. На данный момент известны ошибки как в nouveau, так и в gallium; мы работаем над ними. Но мы только начали...
Как-то возник вопрос, должен ли nouveau управлять вещами типа скорости вентилятора: ответ - нет. Пожалуйста, используйте для этого утилиту NVClock от Thunderbird'а.
Последняя тема во введении: мы получили карточку 8400 пожертвованную kho. Она не покидает жадных маленьких ручек Marcheu, который объединит усилия с Darktama, чтобы заставить работать 3D и на чипах NV50. Большое спасибо, kho, за Ваш щедрый дар!
В GSoC 2008 Xorg принят как организация-наставник(mentor organization). Исходя из прошлогодних результатов мы настроены не так оптимистично на счёт места под руководством Xorg. Если выгорит, мы бы хотели поработать над NV5x, так что если у Вас завалялась лишняя карточка 8x00 - у Вас есть возможность вручить ее нам, не стесняйтесь :). Нет, мы даже не думаем о всяких 8800 GTS или 9x00, еще одной 8400 или 8500 было бы вполне достаточно!
В IRC несколько раз спрашивали о G92: мы рассматриваем распоследние карточки на G92 как NV50 и в будущем мы будем поддерживать их. Но заметьте, сейчас есть проблемы (а об этом чуть позже).
2. Текущее состояние
Как мы и намекали в предыдущем выпуске, установка режимов в ядре (kernel mode setting) скоро будет в основной ветке. Fedora 9 будет первой, кто будет содержать всё необходимое (http://people.freedesktop.org/~ahuillet/irclogs/nouveau-2008-03-06.htm#1251).
Stillunknown и Malc0 продолжили причёсывание кода и исправление ошибок в Randr1.2. Код для NV50 был почищен, так как там скопилось много мусора. Новая версия больше похожа на код для других чипов, но новой функциональности добавлено не было. Были исправлены только очевидные проблемы (прошу отметить, что ни у Malc0, ни у Stillunknown карточек на NV5x нет), так что код работает также хорошо (или плохо), как и раньше.
Но всё еще есть надежда: Xorg-NV содержит код код для обработки таблиц BIOS для карточек на NV50. Возможно Malc0 сможет адаптировать его для нашей кодовой базы. Что получится - посмотрим.
А в это время: Randr1.2 был в основном поддержан (дальше идет непереводимый переводчиком фольклор). Кстати, nouveau не валится при выходе из X. Он просто пытается восстановить текстовый режим и страшно обламывается, оставляя неюзабельную текстовую консоль.
Airlied протестировал (http://people.freedesktop.org/~ahuillet/irclogs/nouveau-2008-03-12.htm#0053) Gallium на PPC и поимел немного проблем с буферами глубины(depth buffers). Дальнейшее исследование Darktama и Marcheu указали на возможные проблемы Mesa для PPC. Кажется - это всё-таки проблема в буферах глубины. Посмотрите для иллюстрации на зеленую шестеренку:
Darktama немного поработал с NV30 помогая pmdata заставить код инициализации работать. "Я всего лишь положил NV30GL на место и исправил основные проблемы, теперь дело за pmdata :)". Benkai всё еще работает над обобщением возможностей, проблем и возможных решений по поддержке suspend для nouveau. Он начал работать над тестированием функций suspend/resume на NV04 в процесссе повыряния в коде для suspend в EnterVT (переключение в текстовую консоль) и resume в LeaveVT. Так переходя в текстовую консоль состояние сохранялось и восстанавливалось при переключении назад в X.
Для этой функциональности пришлось добавить ioctl() в DRM и PGRAPH, что оказалось тривильным для NV04: nouveau просто выделяет канал и вызывает engine->graph.save_context() перед инициализацей PGRAPH. Для resume было достаточно вызова engine->graph.restore_context(). После этого nouveau работал после цикла LeaveVT/EnterVT (с инициализацией PMC/PTIMER/PFB/PGRAPH).
После такого успеха Benkai добавил созранение/восстановление всех регистров PFIFO в ioctl(). Теперь nouveau получает прерывание переключения контекста PGRAPH после того, как X начал посылать комманды через FIFO снова(FIXME: Nouveau now gets a PGRAPH context switch interrupt after X starts sending commands through the FIFO again). К несчастью после всего этого карочка плюется ошибками.
Как было отмечено в предыдущем выпуске, почитать о текущем состоянии можно здесть: http://nouveau.freedesktop.org/wiki/Suspend_support . После того, как Ahuillet увидел свой счёт за электричество - он тоже выразил интерес к этой теме.
А теперь немного о NV50. Сначала мы надеялись, что NV50 имеет режим совместимости с NV40, но эти мечты быстро развеялись. Так как реверс инжениринг был ненадолго отложен и запланирован на прицел к Gallium, Darktama решил поработать над NV4x, где большинство необходимых вещей уже было известно.
Сосредоточение на NV40 помогло nouveau представить впечатляющие демонстрации на LCA и FOSDEM, но оставило NV50 нетронутым. Когда Darktama сменил его NV43 на NV30 чтобы помочь pmdata с кодом инициализации, он к несчастью сломал свою NV40. Будучи поставленным перед выбором работать над NV30 или NV50 он выбрал NV50 и взялся за 3D движок. После некоторой кропотливой работы он выяснил, что 3D движок отказывается рендерить на линейные поверхности и единственный путь совмещать их (make them tiled) - это использовать некоторые флаги в таблицах страниц(page tables) GPU.
Первая вещь, которую он завёл - очистка буферов. Следующая вещь, которую он адаптировал - это DRM. Изменения (в чипе) не дают GPU каналам(channels) прямого доступа в VRAM. Теперь они идут через подсистему виртуальной памяти карточки. Это необходимый шаг для поддержки совмещенных поверхностей(tiled surfaces), которые нужны для 3D.
Следующая вещь - это попытка отрисовывать треугольники. Однако это требует серьезных изменений в nouveau DRM. Предполагается, что начальная поддержка Gallium будет до EXA composite так как все pix maps должны быть совмещаемыми (be tiled), и возня со случаями программной отрисовки(software fallback) была бы нетривиальной. Gallium проще, также там болжно быть гораздо меньше программных орисовок(software fallback). Отрисовка всегда производится в private буфер (даже при прорисовке на "front buffer") и переключается(blitted) на настоящий front buffer. Есть надежда, что 2D движок NV50 поддерживает переключение(blit) с составной(tiled) повехности на несоставную(untiled). Но это еще не известно наверняка.
И, наконец, небольшое ассорти из тем:
- Marcheu покончил с прототипом Gallium драйвера для NV10 и внес(pushed) его в репозиторий. Теперь за остальными взять его от туда.
- pq послал свои патчи MMioTrace на рассморение на включение в ядро (текужее 2.6.25). Пожалуйста, помогите ему с тестированием MMioTrace на вашем компьютере,если модете.
- Выявили и исправили еще пару случаев зависаний на PPC.
С пор, когда pq испытывал некоторые проблемы с AGP (в основном ImageFromCpu), всё было найдено и, надеемся, исправлены.
- После решения проблем с инициализацией на NV30 pmdata начал работать над Gallium3D для NV30 и чего-то испугался в шейдерах. Он думает взяться за NV10.
- p0g тоже берется за Gallium для nouveau.
3. Нужна помощь
Как всегда: взгляните на нашу страничку TestersWanted.
pq нуждается в вашей помощи в тестировании MMioTrace. Пожалуйста, не накладываете патч, если являетесь пользователем недавних релиз кандидатов ядра. Тестеры с SMP тоже приветствуются.
Stillunknown ищет тестеров NV5x, чтобы проверить, что его очистка кода ничего не сломала. Также Вы можете присылать MMioTrace логи для переключения blob драйвера (nvidia) в/из консольного режима, это тоже было бы полезно. Пожалуйста, спросите совета у pq, stillunknown или malc0.
Я думаю мы не упоминали кое-чего в последних выпусках, мы с радостью примем еще разработчиков. Пожалуста, обращайтесь в случае, если какая-нибудь карточка или фича надоедает Вам
И, наконец, последнее, но важное (last but far from least): пожалуйста, тестируйте Randr1.2 с nouveau. Мы переключимся на него по умолчанию, если не всплывет серьезных проблем. Пожалуйста, помните: Если вы не будете тестировать, погибнут милые котята! (cute kittens will die!)