Mesa

Discussing libraries simplifying applications development
  • Вот карта MTRR на моём ноутбуке в начале загрузки ядра:

    Code: Select all

    K : [MEM_AMOUNT]=BB546000, [LFBAddress]=C0000000
    K : dumping MTRRs:
    K : MTRRCAP = 00000000:00000D08
    K : MTRR00000200 = 00000000:00000006
    K : MTRR00000201 = 0000000F:00000800
    K : MTRR00000202 = 00000001:00000006
    K : MTRR00000203 = 0000000F:C0000800
    K : MTRR00000204 = 00000000:BC000000
    K : MTRR00000205 = 0000000F:FC000800
    K : MTRR00000206 = 00000000:C0000000
    K : MTRR00000207 = 0000000F:C0000800
    K : MTRR00000208 = 00000001:38000000
    K : MTRR00000209 = 0000000F:F8000800
    K : MTRR0000020A = 00000000:00000000
    K : MTRR0000020B = 00000000:00000000
    K : MTRR0000020C = 00000000:00000000
    K : MTRR0000020D = 00000000:00000000
    K : MTRR0000020E = 00000000:00000000
    K : MTRR0000020F = 00000000:00000000
    
    Если игнорировать всё за пределами 4Г, остаётся два диапазона: первый диапазон WB, покрывающий все 4Г, и второй диапазон UC для последнего гигабайта. WB+UC даёт UC. Код init_mtrr видит, что BIOS что-то настроила, и не пытается перенастраивать самостоятельно. Код set_mtrr для LFB видит, что такой базовый адрес уже есть в MTRR, и выходит без перенастройки. Поэтому карта MTRR остаётся неизменной.

    Правильно починить это непросто. Если заставить set_mtrr всегда переустанавливать регистр, даже если он уже есть, кусок памяти в конце 4Г перестанет покрываться UC-диапазоном, но WB-диапазон останется - этот кусок станет WB. Эксперимент показывает, что система от этого виснет при загрузке. Если заставить set_mtrr создавать два дополнительных UC-диапазона D0000000 с маской F0000000 и E0000000 с маской E0000000, система не виснет, но и профита нет: видеопамять оказывается покрыта двумя диапазонами WB+WC, Intel молчит о том, что бывает при конфликте двух MTRR, но по результатам похоже, что снова UC. Если заставить init_mtrr игнорировать настройки BIOS, то он округлит размер памяти до степени двойки вверх, и снова получается WB-диапазон для всей памяти, не перекрываемый UC-диапазонами. Плюс ещё нужно определить размер LFB, константа, которая ещё и не степень двойки, плохо подходит. Для своей конфигурации я просто захардкодила правильную карту MTRR.
    Сделаем мир лучше!
  • Понятно. При перекрытии диапазонов приводится к наименьшему общему, значит будет WC.
    Update.
    Приводится к UC если оба UC или UC+WB. В остальных undefined behavior.
  • Продолжение банкета
    http://ftp.kolibrios.org/users/Serge/ne ... 02-dbg3.7z
    Если не заработает, пожалуйста замените pixlib версией из dump, перезагрузите компьютер, загрузите драйвер i915 и запустите eglgears. В каталоге /tmp1/1 появятся два файла batchbuffer.bin и static.bin. Вместе с логами выложите их на форуме.

    P.S. Сразу после записи /tmp1/1/batchbuffer.bin pixlib вываливается в отладчик по int3.
  • Уже намного лучше. eglgears отрисовывает шестерёнки, поворачивает их один раз, на следующем кадре шестерёнки трескаются, на следующем кадре трещина становится шире и eglgears зависает.
    В архиве логи, static.bin и для каждого кадра скриншот и batchbuffer.bin. Последовательность скриншотов такая: запуск eglgears -> отрисовка рамки -> int3 -> копирование step1/batchbuffer.bin -> g в отладчике -> отрисовка первого кадра "неинициализированная память" -> int3 -> снимок step1/screen.bmp, копирование step2/batchbuffer.bin -> g в отладчике -> отрисовка второго кадра "шестерёнки, часть 1" -> int3 -> снимок step2/screen.bmp, копирование step3/batchbuffer.bin и так далее. После step5/batchbuffer.bin eglgears зависает, scrshoot делает мусор вместо скриншота, поэтому словами: на экране примерно то же, что после предыдущего шага.
    Attachments
    results.7z (43.44 KiB)
    Downloaded 190 times
    Сделаем мир лучше!
  • Лиха беда начало.

    CleverMouse
    А если заменить pixlib на релизную и запустить Fplay ? На несколько кадров хватит ?
  • Fplay с релизной pixlib.dll работает. eglgears с релизной pixlib.dll зависает, но быстрее - промежуточных кадров не видно.
    Сделаем мир лучше!
  • Пока одно чинил, другое поломал. Раньше рендеринг вёлся в два буфера, было точное чередование. Сейчас всё рисуется в один буфер.
    Update.
    В два буфера работал Fplay.
  • http://ftp.kolibrios.org/users/Serge/ne ... i965-v2.7z
    Исправлена EGL, теперь рендеринг ведётся поочерёдно в два буфера. Никаких приростов fps это не дало, но может исправит некоторые ошибки.
  • Никаких видимых изменений.
    Сделаем мир лучше!
  • Serge wrote:http://ftp.kolibrios.org/users/Serge/ne ... i965-v2.7z
    Исправлена EGL, теперь рендеринг ведётся поочерёдно в два буфера. Никаких приростов fps это не дало, но может исправит некоторые ошибки.
    Dell Inspiron отрисовывает один кадр с колесами и далее все, ни один пример не запускает.
    Spoiler:
    Downloaded 191 times
    Acer Packard Bell - все работает, но есть ньюансы:
    1) Колеса вращаются настолько быстро, что зубчики отламываются от колеса, по крайней мере такое ощущение создается.
    2) Поезд на рельсах в обоих примерах перестает рисоваться в одном и том же месте. Это нормально? Все примеры можно завершить штатно, нажав на кнопку закрытия.
    Spoiler:
    boardlog_pb_v2.txt (23.79 KiB)
    Downloaded 189 times
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Все нормально. С шестерёнками стробоскопический эффект и жуткий тиринг. Слишком много fps.
    Поезд - американские горки, анимация привязана к номеру кадра. Если не ограничивать fps пролетает за секунду и все, поезд приехал.

    Получается gen6 и 7 работают, а всё что раньше ещё нет.
  • Mario_r4
    А Fplay работает ? Последний, с длл-ками.
  • Serge wrote:Поезд - американские горки, анимация привязана к номеру кадра. Если не ограничивать fps пролетает за секунду и все, поезд приехал.
    Нет, там именно дело в том что поезд едет некоторое время, а потом картинка встает и дальше ничего не рисует, при этом программа не завершается и подсчет fps продолжается.
    Serge wrote:А Fplay работает ? Последний, с длл-ками.
    Не проверил, вечером попробую.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Нет, там именно дело в том что поезд едет некоторое время, а потом картинка встает и дальше ничего не рисует, при этом программа не завершается и подсчет fps продолжается.
    Как и было задумано. Поезд едет несколько секунд, выходит на финишную прямую и останавливается.
  • Who is online

    Users browsing this forum: No registered users and 15 guests