OSDev

для всех
Текущее время: 28 мар 2024, 22:31

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 52 ]  На страницу Пред.  1, 2, 3, 4, 5, 6  След.
Автор Сообщение
 Заголовок сообщения: Re: driver VGA
СообщениеДобавлено: 26 июн 2017, 14:29 

Зарегистрирован: 12 июн 2017, 01:09
Сообщения: 18
SII, Yoda
Спасибо парни за инфу, вы избавили меня от кучи потраченного времени, я ведь и в самом деле собирался "поплисить", хорошо когда есть у кого спросить.

Yoda писал(а):
Попробуйте попрограммировать на CUDA, вы быстро убедитесь в этом.

На CUDA я не кодил, т.к. карт энвидии у меня нет и не будет, а вот OpenCL потрогал, там определенно нет ничего сложного, конкретно в "userspace", в плане отрисовать пиксели в нужном месте в нужное время, OpenСL даже в разы проще OpenGL, которую я тоже потрогал, обе они, и OpenСL и OpenGL, в конечном итоге заканчиваются составлением исполняемого batch буффера, который отправляется в ядро, а вот что с ним происходит в ядре, я могу только предположить. Тут как раз все дело в ядре (Linux) где уже реализованы драйвера, именно поэтому в "userspace" все так просто.
Yoda писал(а):
Другое дело, что все эти ядра будут работать на частотах максимум в несколько десятков мегагерц, что дискредитирует всю затею по ускорению и переводит всё в область хобби.

Вот именно это я и хотел услышать, четко и просто. Еще раз большое спасибо за НЕ потраченное время моей жизни :)

Ну что делать, значит буду пилить software renderer.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: driver VGA
СообщениеДобавлено: 28 июн 2017, 07:38 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
На мою 50$ ПЛИС даже одно стандартное ядро не влазит.
100$ сразу забываем так как ядро PCI съест больше половины. 1-3 примитивных ядер влезит.
150-200$ Тут вы нормально можете сделать видео карту уровня VGA win95. Возможно тайванцы вам и драйвер подгонят(за доп. денюшку). И да про скорость тут уже писали 1-10 МГц. Если за плечами есть несколько лет практике ускоришь ещё в 10 раз. Я не осилил.

Видео-драйвера это ОС в ОС.
Интел это не абстракции на абстракции. Это шифр какой-то.
Абстракция на абстракции это AMD.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: driver VGA
СообщениеДобавлено: 28 июн 2017, 17:51 

Зарегистрирован: 12 июн 2017, 01:09
Сообщения: 18
Еще вопрос по теме.
Как заюзать двойную буфферизацию, ведь рисовать в 'foreground buffer' просто не прилично. Положим отжать кусок видео памяти под 'background buffer', а затем перещелкнуться на него, нет проблем, здесь написано (http://forum.osdev.org/viewtopic.php?f= ... 28&start=0), а вот как отловить само событие, условно назовем его 'PAGE_FLIP_EVENT', когда контроллер дисплея или видяха (я точно еще не понял) закончил сканирование 'foreground buffer' и готов начать сначала, именно в этот момент ему и надо подсунуть другой буффер.
Правильно ли я понимаю, что видяха (любая VESA совместимая) посылает камню прерывание, что вот прямо сейчас я готова флипнуться, желаешь сменить буффер или оставим как есть? Как отловить прерывание, вопросов нет, вопрос в его номере, он стандартен или нет, и как отличить, что прерывание вызвано событием 'PAGE_FLIP_EVENT', а не каким-либо другим, понятно что по номеру, а где эти номера прописаны?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: driver VGA
СообщениеДобавлено: 28 июн 2017, 18:03 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
Всё прописано в ACPI. Генерировать прерывания ещё надо заставить, они не идут сами по себе. Возможно в APCI есть сервисная функция активации прерывания, точно не знаю. Может даже в VESA это есть.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: driver VGA
СообщениеДобавлено: 28 июн 2017, 20:13 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
pavia писал(а):
На мою 50$ ПЛИС даже одно стандартное ядро не влазит.
100$ сразу забываем так как ядро PCI съест больше половины. 1-3 примитивных ядер влезит


Не совсем так: зависит от конкретной плисины. Дело в том, что есть вполне дешёвые микрухи (у Хилинха, во всяком случае), где есть аппаратные блоки для подключения к PCI Express, а также аппаратные контроллеры памяти. Соответственно, на эти вещи не приходится тратить ресурсы собственно ПЛИС, и можно сосредоточиться на решении конкретной задачи.

Пы.Сы. Если у кого-то есть желание обсуждать плисины, это лучше делать в отдельной теме: всё ж эта посвящена другой теме.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: driver VGA
СообщениеДобавлено: 29 июн 2017, 11:48 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
sabir писал(а):
Еще вопрос по теме.
Как заюзать двойную буфферизацию, ведь рисовать в 'foreground buffer' просто не прилично. Положим отжать кусок видео памяти под 'background buffer', а затем перещелкнуться на него, нет проблем, здесь написано (http://forum.osdev.org/viewtopic.php?f= ... 28&start=0), а вот как отловить само событие, условно назовем его 'PAGE_FLIP_EVENT', когда контроллер дисплея или видяха (я точно еще не понял) закончил сканирование 'foreground buffer' и готов начать сначала, именно в этот момент ему и надо подсунуть другой буффер.
Правильно ли я понимаю, что видяха (любая VESA совместимая) посылает камню прерывание, что вот прямо сейчас я готова флипнуться, желаешь сменить буффер или оставим как есть? Как отловить прерывание, вопросов нет, вопрос в его номере, он стандартен или нет, и как отличить, что прерывание вызвано событием 'PAGE_FLIP_EVENT', а не каким-либо другим, понятно что по номеру, а где эти номера прописаны?

Замечание, сейчас мода что-бы монитор подстраивался под видюшку. А не наоборот.
IBM-PC (XT?) было стандартное IRQ2, но это конфликтует с современной архитектурой AT и PS/2 и прочее. У которых на нём сидит второй PIC.

Единственный универсальный вариант это периодически читать из VGA регистра 3BAh/3DAh.
http://semestr.com.ua/book_381_glava_16 ... y_VGA.html

Что касается прерывания. То сейчас его номер можно получить через PCI-CFG.
Его ещё надо настроить, ни VESA ни какой либо другой стандарт это не предусматривает.

Для примера для Intel 965

PIPEASTAT—Pipe A Display Status
Memory Offset Address: 70024h
PIPEBSTAT—Pipe B Display Status
Memory Offset Address: 71024h

25 бит
Vertical Sync Interrupt Enable: This will enable the consideration of the vertical sync interrupt status bit in the first line interrupt logic.
0 = Vertical Sync Interrupt/Status Disabled
1 = Vertical Sync Interrupt/Status Enabled

и 9 бит для сброса прерывания.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: driver VGA
СообщениеДобавлено: 29 июн 2017, 16:23 

Зарегистрирован: 10 окт 2013, 14:54
Сообщения: 93
sabir писал(а):
Как заюзать двойную буфферизацию, ведь рисовать в 'foreground buffer' просто не прилично. Положим отжать кусок видео памяти под 'background buffer', а затем перещелкнуться на него, нет проблем
Слушьте - зачем при изобретении велосипеда обязательно делать шестиколёсный с GPS и встроенной кофемашиной?

Нафиг вообще это железо не нужно при нынешних скоростях. Даже функции работы с хардварным курсором не нужны - с некоторым трахом, но любой вывод можно сделать так, что курсор мерцать не будет.

Делается shadow в обычной памяти, с WB разумеется... Туда всё рисуется, оттуда читается, если надо сделать копию экрана или скроллирование. И оттуда же выводится в видеопамять (у которой WC). Для человеческого глаза и обычного GUI - этого хватает более чем.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: driver VGA
СообщениеДобавлено: 29 июн 2017, 18:32 

Зарегистрирован: 12 июн 2017, 01:09
Сообщения: 18
pavia
По ходу таки придется ковыряться в Intel HD, но я все равно собирался, сомнения у меня только были, что проще плиска или Intel, плиска отпала сама собой со всеми вытекающими.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: driver VGA
СообщениеДобавлено: 05 июл 2017, 00:50 

Зарегистрирован: 12 июн 2017, 01:09
Сообщения: 18
В продолжение темы, нарыл я тут интересную и старую как мир мульку относительно двойной буферизации (далее описаны исключительно мои личные фантазии, которые могут не совпадать с реальностью).
А именно, вовсе не обязательно отлавливать прерывание видюхи, тем более что его можно и вовсе не дождаться, а как же тогда быть?
Да очень просто, в ядре по любому есть обработчик таймера на IRQ0, пусть, для примера, это будет 1000 раз в секунду, все одно видюха больше 60 раз в секунду не сможет обновить экран, так что с запасом.
Так вот при срабатывании таймера можно проверить состояние видюхи (т.н. Input Status Register One) на предмет обратного хода луча по кадру фреймбуфера и как только луч пойдет обратно подсунуть ему второй буфер.
А сделать это не составляет никакого труда, например (тиснуто у Кулакова, так что это уже не мои фантазии):
Код:
;=======================================================================
;   Ожидание обратного хода луча по кадру
;=======================================================================
WaitVSync:
   push rax
   push rdx
   
   mov edx, 0x03DA            ; читаем регистр статуса VGA
   
@WaitNotVSyncLoop:
   in al, dx
   and al, 0x08            ; выделяем бит вертикальной синхронизации
   jnz @WaitNotVSyncLoop
   
@WaitVSyncLoop:            ; не пойму только, зачем здесь два раза
   in al, dx
   and al, 0x08            ; выделяем бит вертикальной синхронизации
   jz @WaitVSyncLoop
   
   pop rdx
   pop rax
   ret
;=======================================================================

А вот мой вариант, в отличии от оригинала нет никаких бесконечных циклов ожидания выстрела, срабатывает только по таймеру и исполняется только один раз за сеанс:
Код:
WaitVSync:
   push rax
   push rdx
   
   mov edx, 0x03DA            ; читаем регистр статуса VGA
   in al, dx
   bt eax, 3               ; проверяем бит вертикальной синхронизации
   jc @VSYNC_EVENT
   
   ...                     ; нет? ну так может в другой раз, я подожду

@VSYNC_EVENT:
   ...                     ; здесь перещелкиваемся на backgroung буфер
   
   pop rdx
   pop rax
   ret

Если кто в теме покритикуйте мой вариант, в сравнении с оригиналом, камень не нагружаем, а событие ловим.
На практике пока не проверял, кто-нибудь уже пользовал такой метод, поделитесь :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: driver VGA
СообщениеДобавлено: 05 июл 2017, 06:45 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Обратный ход луча длиться меньше чем 0.5 мс. Это значит что половину из 60 фпс вы потеряете. Лечится повышением частоты таймера.
А вывод картинке внутри прерывания приведёт к потере прерываний. Что-бы это немешало нужен колбек и нужен мьютекс.
А вообще лучше ввести штамп времени для засечки обратного-хода и тройную буфферезацию.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 52 ]  На страницу Пред.  1, 2, 3, 4, 5, 6  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB