Форум программистов, компьютерный форум, киберфорум
ОС на Assembler
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.69/29: Рейтинг темы: голосов - 29, средняя оценка - 4.69
8 / 8 / 5
Регистрация: 28.03.2014
Сообщений: 137

Способы переключения видео режимов на современных видеокартах в защищенном режиме

24.08.2015, 09:57. Показов 5830. Ответов 51
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Давайте обсуждать способы переключения видео режимов на современных видеокартах в защищенном режиме.

Кто может, выкладывайте маны или код.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.08.2015, 09:57
Ответы с готовыми решениями:

Артефакты переключения режимов...
Добрый день.. помогите пожалуйста исправить код...не получается нормально переключать режимы и выбирать цвета..

Память в защищенном режиме
Всем доброго дня! Я, наконец, сдал основные экзамены и теперь снова могу заняться столь интересным для меня делом!)) Я многое забыл и...

Прерывания в защищенном режиме
Помогите пожалуйста разобраться с прерываниями в защищенном режиме.Какие обращения к памяти есть. Какие ошибки могут быть, есть ли...

51
435 / 246 / 43
Регистрация: 05.08.2013
Сообщений: 1,670
24.08.2015, 12:40
а что обсуждать? смотрите сорцы существующих опенсорсных осей.
2
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
24.08.2015, 16:16
Мда, я вроде в скайпе уже написал, но ты упорно продолжаешь гнуть свою линию.
Еще раз:
1. Документацию на современные карты ты не найдешь. Исключение - intel'овская встроенная графика. Но и там для новых не все описано.
2. Низкоуровневая работа с графическим контроллером, тем более с современным gpu - это самое сложное, что вообще есть в железе PC'ка. С твоим уровнем лучше не начинать.
3. Никакой совместимости нету даже между контроллерами одного производителя. Обычно в каждом новом поколении все меняется. Вот для примера мои потуги(хотя вроде уже давал ссылку тебе) для семейства R600-R700 (и то не на всех работает).
4. Да, есть открытые исходники для *nix. Но они во-первых имеют урезанный функционал (по сравнению с проприетарной версией), во-вторых, что бы там хоть что-то понять, нужно знать архитектуру таких вещей как, например, DRM в линухе. На надейся там удивить в исходниках драйвера функцию типа SetVideoMode(w, h, bpp) - не будет ее. Там куча уровней абстракций.
Вывод:
Используй VBE и займись более приоритетными для ОС вещами.
2
435 / 246 / 43
Регистрация: 05.08.2013
Сообщений: 1,670
25.08.2015, 13:49
я когда писал свою поделку юзал vbe и только текстовый режим. благо груб умеет устанавливать желаемый видеомод.
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
25.08.2015, 16:39
Цитата Сообщение от Мотороллер Посмотреть сообщение
благо груб умеет устанавливать желаемый видеомод.
VBE2.0 или выше обязан поддерживаться всеми карточками, а не только виртуальной машиной. VBE и винда использует, если драйверы найти не может.
0
8 / 8 / 5
Регистрация: 28.03.2014
Сообщений: 137
27.08.2015, 00:10  [ТС]
Буду использовать vbe с виртуальной машиной(аналог v86 режима)
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
27.08.2015, 01:33
Сравнивать виртуальную машину и режим работы процессора, мягко говоря, не корректно.
0
31 / 31 / 5
Регистрация: 24.09.2014
Сообщений: 243
30.08.2015, 09:28
Цитата Сообщение от shmkv Посмотреть сообщение
2. Низкоуровневая работа с графическим контроллером, тем более с современным gpu - это самое сложное, что вообще есть в железе PC'ка. С твоим уровнем лучше не начинать.
3. Никакой совместимости нету даже между контроллерами одного производителя. Обычно в каждом новом поколении все меняется. Вот для примера мои потуги(хотя вроде уже давал ссылку тебе) для семейства R600-R700 (и то не на всех работает).
Не понимаю, почему ОС должна в это лезть? Разве сама видеокарта не способна выполнять функции драйвера, чисто теоретически?
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
30.08.2015, 10:02
Цитата Сообщение от panotnap Посмотреть сообщение
Разве сама видеокарта не способна выполнять функции драйвера, чисто теоретически?
А как ты это представляешь?

Добавлено через 4 минуты
Для полноценной поддержки нужен драйвер, причем уникальный для каждой ОС. Ну чисто для переключения видеорежимов (и то не всех) можно использовать VGA BIOS включая VBE. Он да, прописан прямо в в карточке. Но не более.
0
31 / 31 / 5
Регистрация: 24.09.2014
Сообщений: 243
30.08.2015, 11:53
Цитата Сообщение от shmkv Посмотреть сообщение
А как ты это представляешь?
Я не совсем представляю, как это можно не представить.

Возьмём просто отображение пикселов РГБ + разрешение (а что ещё нужно?).
Видеокарта тестирует монитор и находит совместимые с ней режимы, выводит их список (а-ля ВЕЗА) для ОСи.
Пикселы рисуются через ОЗУ. Зачем ОСе все прочие навороты?

Добавлено через 17 минут
Цитата Сообщение от shmkv Посмотреть сообщение
для переключения видеорежимов (и то не всех) можно использовать VGA BIOS включая VBE
Вот это и не понятно, почему - не всех. Чем принципиально отличаются широкоформатные разрешения в данном случае?

Да, кстати, и это выполняет не видеокарта, а БИОС-код, который вроде бы крайне неудобен в защищённом режиме.

Добавлено через 13 минут
И в случае возможности включения всех поддерживаемых картой-монитором видеорежимов (без всяких там многомониторностей, стерео, старых режимов) относительно простым способом и такой же простой работы с ними вопрос топика становится исчерпарным, не так ли?
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
30.08.2015, 19:10
Цитата Сообщение от panotnap Посмотреть сообщение
Зачем ОСе все прочие навороты?
Как бэ для всего вышеперечисленного есть VBE, один только нюанс - не будет никакого использования gpu (т.е. поддержки аппаратного ускорения). Также через VBE не всегда удается установить нужный режим для монитора (некоторые производители ограничивают список режимов).
Цитата Сообщение от panotnap Посмотреть сообщение
Вот это и не понятно, почему - не всех
Вопрос к производителям графических чипов.
Цитата Сообщение от panotnap Посмотреть сообщение
Чем принципиально отличаются широкоформатные разрешения в данном случае?
Все VGA видеорежими отличаются лишь таймингами (подробнее есть в моей статье на исходниках).
Цитата Сообщение от panotnap Посмотреть сообщение
который вроде бы крайне неудобен в защищённом режиме.
Заметим, что единственная реальная польза от VBE - это переключения видеорежимов, ну может еще чтение EDID (только он не везде работает).
исходя из чего варианты работы (в порядке сложности):
1. перед входом в PM установить нужный режимы с LFB и забыть.
2. для переключения кратковременно выйти в RM и вернуться обратно.
3. Использовать V86.
4. Написать (или спизпозаимствовать) интерпретатор машинного кода.
5. Использовать технологию виртуализации.
выбирай понравившийся.
Цитата Сообщение от panotnap Посмотреть сообщение
И в случае возможности включения всех поддерживаемых картой-монитором видеорежимов (без всяких там многомониторностей, стерео, старых режимов) относительно простым способом и такой же простой работы с ними вопрос топика становится исчерпарным, не так ли?
Я не понимаю о чем ты. VBE ничего не гарантирует относительно поддерживаемых режимов. Более того, далеко не все карточки поддерживают функцию VBE для чтения EDID, соответственно ты и "родной" видеорежим у монитора знать не будешь.

Добавлено через 12 минут
Цитата Сообщение от panotnap Посмотреть сообщение
Пикселы рисуются через ОЗУ
На практике (если использовать VBE) это обстоит так: если карта встроенная (использует общую память), что видеопамять располагается в ОЗУ, только имеет аттрибут "некэшируемая" в MSR. Скорость записи в такую память не ахти, если честно. Установить атрибут кэшируемости можно, но на экране будут артефакты (придется постоянно юзать инструкцию сброса кэша, что не всегда допустимо).
Если карта внешняя (PCI-e, AGP), видеопамять отображается как обычный MMIO. Следовательно скорость записи соответствующая - т.е. очень медленно и огромная нагрузка на ЦП для вывода графики. Укорить это штатными средствами никак. Чтобы современные карточки "брали" данные из RAM (не VRAM) нужно инициализировать GART - это адски сложно и бесполезно: для каждого семейства карт придется писать свой код.
1
31 / 31 / 5
Регистрация: 24.09.2014
Сообщений: 243
31.08.2015, 13:29
Цитата Сообщение от shmkv Посмотреть сообщение
1. перед входом в PM установить нужный режимы с LFB и забыть.
2. для переключения кратковременно выйти в RM и вернуться обратно.
3. Использовать V86.
А буферизацией как управлять? Каждый кадр процессором щёлкать?

Цитата Сообщение от shmkv Посмотреть сообщение
VBE ничего не гарантирует относительно поддерживаемых режимов. Более того, далеко не все карточки поддерживают функцию VBE для чтения EDID, соответственно ты и "родной" видеорежим у монитора знать не будешь.
Как понимать - не гарантирует? Сбоит в работе? Или производитель не соблюдает стандарт?
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
31.08.2015, 14:16
Цитата Сообщение от panotnap Посмотреть сообщение
А буферизацией как управлять? Каждый кадр процессором щёлкать?
О чем это ты?
Цитата Сообщение от panotnap Посмотреть сообщение
Как понимать - не гарантирует?
Спецификация не требует, чтобы VBE обеспечивал поддержку всех видеорежимов доступных для видеокарты. Также спецификация не обязывает производителей делать поддержку работы с EDID.
Цитата Сообщение от panotnap Посмотреть сообщение
Сбоит в работе? Или производитель не соблюдает стандарт?

Не по теме:

Почему на этом форуме практически все меня читают по диагонали?:(

0
31 / 31 / 5
Регистрация: 24.09.2014
Сообщений: 243
05.09.2015, 21:43
Цитата Сообщение от shmkv Посмотреть сообщение
О чем это ты?
Вы предлагаете мне смотреть на судороги перерисовки экрана или есть какой-то секрет, о котором я не знаю?
0
1127 / 261 / 9
Регистрация: 11.06.2010
Сообщений: 1,049
06.09.2015, 11:10
panotnap,
1. Формирование изображения нужно проводить ТОЛЬКО В ОБЫЧНОЙ ПАМЯТИ.
2. В LFB нужно копировать ТОЛЬКО ИЗМЕНИВШУЮСЯ ЧАСТЬ ИЗОБРАЖЕНИЯ.
3. Должен присутствовать буфер глубины, чтобы не закрашивать одну часть изображения по 40 раз.

Ну и ещё при копировании лучше всего использовать инструкцию rep movsd, но это, думаю, не секрет.

Если следовать этим принципам, то ГУЙ будет рисоваться быстро и без мерцаний. Да и не только гуй. У колибри даже демки ОпенЖЛ без дров на пне четвертом 2.4ггц старого образца(там ещё нет гипертридинга) при разрешении 1024x768 рисовались с ~30 фпс. Память была ддр1, а шина видео - АГП. Думаю, это о чем-то говорит. Сейчас память в разы шустрее, как и процессоры.
0
31 / 31 / 5
Регистрация: 24.09.2014
Сообщений: 243
06.09.2015, 15:48
Не надо капслочить. Спасибо, но это не секреты... А кроме "ГУЯ" есть ещё перемещение равёрнутого окна, воспроизведение видео и рендеринг игр, где всё вышеперечисленное не поможет.
0
1127 / 261 / 9
Регистрация: 11.06.2010
Сообщений: 1,049
06.09.2015, 16:05
panotnap, перемещение развернутого окна нормально отрисуется. Воспроизведение видео в той же колибри работает нормально, вроде как, и без дров. Думаю, декодинг работает не в реальном времени, а используется предварительная буферизация распакованных кадров. Спрайтовые игры без шейдерных спецэффектов в реальном времени нормально заведутся. Вот что-то сложное уже создаст проблемы, но, если на твою ОС нет видеодров, то и игры с супер-графоном вряд ли есть, поэтому нет смысла пыхтеть и искать дрова на граф. ускорители.
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
06.09.2015, 16:50
Цитата Сообщение от panotnap Посмотреть сообщение
Вы предлагаете мне смотреть на судороги перерисовки экрана или есть какой-то секрет, о котором я не знаю?
sh2ezo в целом дело говорит.
Цитата Сообщение от sh2ezo Посмотреть сообщение
Сейчас память в разы шустрее, как и процессоры.
Вот тут не все так однозначно. Самое слабое место - это запись в видеопамять. И тут получится интересно - если карта встроенная (использует общую память), то все будет очень шустро: т. к. видеопамять это обычная память с выключенным кэшированием. А вот с внешними картами все сложнее, там vram отображается на физическую память как MMIO, что не сильно способствует скорости работы. Производителе предполагают, что доступ к памяти будет осуществятся через gart, а линейный буфер оставлен лишь для совместимости.

Добавлено через 3 минуты
Цитата Сообщение от sh2ezo Посмотреть сообщение
лучше всего использовать инструкцию rep movsd
Вот не уверен на счет верности этого утверждения.
Цитата Сообщение от panotnap Посмотреть сообщение
есть ещё перемещение равёрнутого окна, воспроизведение видео и рендеринг игр, где всё вышеперечисленное не поможет.
Поможет: формируешь в памяти кадр и целиком заливаешь его в нужною область vram.
0
1127 / 261 / 9
Регистрация: 11.06.2010
Сообщений: 1,049
06.09.2015, 16:53
shmkv, ну в случае с пнем четвертым карта была внешней geforce 5200 fx. Да и тесты на современных внешних видео покпзывают, что скорость действительно выше. Правда, не в разы
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
06.09.2015, 16:55
Кстати в колибри большинство их демок рендерят кадры с bpp=24, это к вопросу о rep movsd.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.09.2015, 16:55
Помогаю со студенческими работами здесь

Принципы адресации в защищенном режиме
Здраствуйте, давно когда начинал заниматься ассемблером не разобрался с одним вопросом ... начал заниматься программированием в другой...

Удаленный доступ в защищенном режиме
Обычный удаленный доступ: Ввожу IP, пользователя и пароль, а затем подключаюсь. Мне не нравится, что безопасность зависит от каких-то двух...

Не обрабатываются прерывания в защищенном режиме
Здравствуйте! Помогите, пожалуйста, найти и исправить ошибку. Программа должна переводить процессор в защищенный режим и обрабатывать...

Работа с файлами в защищенном режиме
Здравствуйте, я взялся писать ОС, уже готов загрузчик переводящий в защищенный режим процессор, IDT GDT разумеется тоже. Хотелось бы...

Размер программы в защищенном режиме
и снова возникли проблемы. Дело в том,что при достижении определенного размера программы,она перестает работать,а порою работает с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru