Встроеные функции видеоадаптеров

Тема в разделе "WASM.OS.DEVEL", создана пользователем dess, 24 ноя 2011.

  1. dess

    dess New Member

    Публикаций:
    0
    Регистрация:
    22 авг 2008
    Сообщения:
    46
    Всем привет!
    Подскажите пожалуйста, есть ли в видеоадаптерах встроенные функции для построения 2D-графических примитивов?
    Задача заключается в том, чтобы на экране за максимально короткий промежуток времени нарисовать большое количество закрашенных прямоугольников и линий. Программа на ассемблере работает в ДОСе, в нереальном режиме процессора, используя VBE2. Напомню, что графика двухмерная. Решается задача путем прямого копирования данных о цвете пикселей в линейный кадровый буфер. В данном случае рисованием графики занимается центральный процессор. Хотелось бы знать, можно ли задачу по прорисовке примитивов переложить на видеокарту! Бедному CPU и без того работы хватает. В общем, как говорится, "Баба с возу - кобыле легче"...
    Заранее благодарен за ответ!
     
  2. Sholar

    Sholar New Member

    Публикаций:
    0
    Регистрация:
    16 окт 2011
    Сообщения:
    189
    Я в сабже не очень разбираюсь, но может GPU?
     
  3. dess

    dess New Member

    Публикаций:
    0
    Регистрация:
    22 авг 2008
    Сообщения:
    46
    Мне тоже кажется, что GPU должен быть шустрым и смышленым малым. Только вот информации по нему нигде не встречал пока. К тому же на разных адаптерах и процы наверное разные. Может существует некий стандарт или интерфейс для подобных проделок?!
     
  4. dess

    dess New Member

    Публикаций:
    0
    Регистрация:
    22 авг 2008
    Сообщения:
    46
    К тому же любая профессиональная ось с GUI прекрасно справляется с подобными задачами.
     
  5. Sholar

    Sholar New Member

    Публикаций:
    0
    Регистрация:
    16 окт 2011
    Сообщения:
    189
    Ммм, не понял. У каждой видеокарты свой GPU, и наверное у видеокарт одного семейства существует обратная совместимость.
    ОСь врятли использует видеокарту напрямую, к примеру где-то слышал, что для создания ГУИ MacOS юзали SDL, уж не знаю насколько достоверная информация.
     
  6. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    dess
    По поводу стандарта. Есть DirectX, OpenGL, GDI. Но реализуются через дрйвера. Так что в вашем случае не подходят и можете считать что стандарта нет. А так можете взять исходники XFree86, это часть видео системы линукса. Там уже есть дрйвера.
    Квадраты относятся к BitBlt.
     
  7. dess

    dess New Member

    Публикаций:
    0
    Регистрация:
    22 авг 2008
    Сообщения:
    46
    Я думал что возможно в видяхе есть нечто высокоразвитое, аналогичное системе прямого доступа к памяти: задал координаты, размеры, цвет и... видюшное железо метнулось рисовать в видеопамять.
    Кстати спасибо за ссылочку на исходники, пойду покопаюсь.
     
  8. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Есть, но только оно зашито в драйверах и не документировано производителями. На драйвера Линукса тоже надежда плохая, т.к. железячная часть там в виде объектных модулей, а не в исходниках. Давно же уже есть VBE3 - может там что есть для ДОС :)
     
  9. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    dess

    2Д-подсистема похожа во многих видюхах (принципиальные различия в 3Д). То есть что бы что-то нарисовать, надо сформировать нечто на языке конкретного адаптера типа (не так на самом деле, но упрощенно)

    02 36
    100 100 200 200
    3с3сff

    , закинуть это дело в специальную область памяти видеоадаптера и записать в его регистры "обработать". Далее мы можем делать что-то с процессором, а видюха параллельно и самостоятельно определит, что 02 - прямоугольник, 36 - операция "заливка одним цветом", 100,100 - 200, 200 - координаты углов, 3c3cff - цвет заливки. И это дело запишет в отображаемую видеопамять. Вся беда в том, что
    - вот та самая область памяти, в которую надо писать такие команды, различается в зависимости от производителя и модели
    - регистр и/или способ, посредством которого подается команда "исполнить", так же различается
    - управляющие коды операций (команд видеопроцессора) и формат данных различаются

    И вот для того, чтобы некую операцию записать соответственно данному адаптеру и выполнить, и нужен драйвер. Который поставляется производителем, и не всегда с (или всегда без?) исходного кода и открытой документации.

    Ну вот например по интегрированным интеловским картам:
    http://download.intel.com/design/chipsets/datashts/29068801.pdf

    попадались такие же доки вплоть до 845 (810, 815, 845) чипсета. Описаны порты ввода-вывода, отображаемые на память регистры, назначение и т.д. и т.п. Иметь хотя бы такую же информацию о NVIDIA и ATI - и можно что-то сделать )

    ЗЫ: может быть имеет смысл так же почитать что-нибудь из найденного по ключевым словам "шейдеры", "OpenCL" и "CUDA". Истина где-то там...
     
  10. dess

    dess New Member

    Публикаций:
    0
    Регистрация:
    22 авг 2008
    Сообщения:
    46
    Всем огромное спасибо за информацию! Вижу, что тема обширная. Вероятно потребуется экскаватор для произведения раскопок. Производители постарались на славу )) В общем то ответ на поставленный вопрос получен: встроенные функции есть и профессиональное ПО умеет этим пользоваться. А в самопальной home-made системе вряд ли удастся учесть все случаи жизни. Всё! Направление, куда копать, получил. Чайную ложку приготовил. Удаляюсь. Надеюсь, что данная тема пока не закрыта.