Почти нативный Direct3D в VirtualBox

    Совсем недавно обновилась замечательная виртуальная машина с открытым исходным кодом от InnoTek/Sun/Oracle (нужное подчеркнуть) — среди прочих фишек в VirtualBox 3.0 была заявлена более или менее внятная поддержка DirectX 8/9 на уровне драйвера виртуального графического адаптера в гостевой Windows-машине. По хорошему, это должно было означать что сбылась мечта идиота геймера: можно гонять в любые win-игрушки не осуществляя рандомных подпрыгиваний с бубном и высушенной куриной лапкой. На деле все естественно оказалось не так просто, под катом предлагается микро-howto, позволяющее запускать в виртуальной машине DirectX-игрушки

    UPD: Спасибо за карму, перенес в блог Linux для всех


    Итак, что нам понадобится:

    — Linux box
    — VirtualBox 3.0
    — WineD3D
    — Дистрибутив Windows (эксперименты осуществлялись на XP SP2)
    — Дистрибутив любимой виндовой игрушки (экзекуции производились над Myst V: End of Ages)

    Процесс установки VBox особых затруднений вызвать не должен: качаем, запускаем из-под рута (su и sudo в помощь) бинарный установщик, например так:

    root@localhost:[~]# wget dlc.sun.com/virtualbox/3.0.0/VirtualBox-3.0.0-49315-Linux_x86.run
    root@localhost:[~]# ./VirtualBox-3.0.0-49315-Linux_x86.run


    Если ничего нештатного не произошло и нас радостно оповестили об успешном окончании установки, то переходим к следующей части — то есть запуску VirtualBox и установке Windows в виртуальной машине.

    Бывает так, что инсталлер не может корректно определить дистрибутив, в связи с чем начинает паниковать и отказывается собирать ядерный модуль. Впрочем, лечится это довольно просто:

    root@localhost:[~]# cd /opt/VirtualBox/src
    root@localhost:[/opt/VirtualBox/src]# ls
    Makefile vboxdrv vboxnetadp vboxnetflt
    root@localhost:[/opt/VirtualBox/src]# make


    Далее, удостоверимся в том что ядерный модуль подгружен:

    root@localhost:[/opt/VirtualBox/src]# lsmod |grep vboxdrv
    vboxdrv 107720 0
    root@localhost:[/opt/VirtualBox/src]#


    Если нет, то:

    root@localhost:[/opt/VirtualBox/src]# modprobe vboxdrv

    ОК, будем считать что VBox у нас есть. Дальше все просто, создаем — виртуальную машинку, не забывая после создания зайти в «Свойства» и проставить галочки напротив «Включить IO APIC», и " Включить 3D-ускорение". Видеопамяти выделяем не меньше 32 мегабайт, после чего подключаем образ или физический CD/DVD-драйв и ставим любимую сборку Windows.

    После установки загружаемся и начинаем шаманить. На самом деле, на этом этапе у нас уже есть поддержка 3D-ускорения, но проблема в том, что ускорять драйвер может только OpenGL. Это можно легко проверить, запустив dxdiag.exe. Логично предположить, что если DirectX (9c например) отсутствует нужно его установить. То есть, на этапе когда мы начнем ставить Guest OS Addons, DirectX уже должен присутствовать в системе.

    Далее собственно и выполняем установку Guest Addons — Устройства > Установить Дополнения Гостевой ОС. На провокационные вопросы мастера отвечаем «Все равно продолжить установку». Перезагружаемся.

    Теперь необходимо установить WineD3D — набор DLL из дистрибутива wine, которые заменят нативные DLLки DirectX. Это нужно для того чтобы DirectX-запросы транслировались в OpenGL (так, как это и происходит, когда запускаем игрушки под вайном). Скачать можно тут — download.savannah.nongnu.org/releases/wined3d/latest/wined3d.exe

    Единственное примечание касается того, что свежескачаный exe'шник нужно запускать в безопасном режиме, ради чего придется еще раз перезагрузиться.

    Ну вот теперь можно пробовать ставить игрушки. На интегрированной интелловой графике Myst V безбожно тормозил и рисовал артефакты, но с увеличением количества виртуальной видеопамяти до 128 Мб ситуация заметно изменилась к лучшему. Других игрушек под рукой не оказалось, поэтому отписывайтесь об удачных и не очень попытках поиграть в ту или геймзу в VBox'е.

    Итого: конечно не панацея, но уже что то… Ждем дальнейших улучшений драйвера.

    PS. Не судите строго — это мой первый хабрапост
    Поделиться публикацией
    Ой, у вас баннер убежал!

    Ну. И что?
    Реклама
    Комментарии 76
      +1
      Хороший такой первый пост :)
      За ссылку на wined3d.exe отдельное спасибо
      0
      Что-то работает, battlefield heroes отвалился с GPF. Кажется, это вопрос шейдеров.
      Собрать бы где все советы по Vbox…
        0
        А на какой железке пытались запустить батлфилд?
          0
          GL960 intel и что-то от GeForce на другом ноуте.
            +1
            Я на GM965 испытания проводил — у линуксового драйвера этого чипа есть проблемы с шейдерами и с компрессией текстур — в частности не смог запустить нативный четвертый квейк.
              +4
              Иногда мне кажется что у линуксового драйвера именно этого чипа есть проблемы со ВСЕМ.

              Простите, наболело.
                0
                Вы еще драйвер для x200m не видели =)
                  0
                  Свят, свят, свят.
                0
                Может UXA ускорение мешает…
                Да по сути я и не запускаю ничего круче старкрафта )
                  0
                  Старкрафт и под вайном неплохо работает. Правда нужно небольшой хинт применить для того чтобы играть по сети, ибо безгранична любовь близзарда к протоколу IPX.
          0
          На гостевой Windows 7 RC работает? Какие ограничения?
            0
            На Win7 RC работает. С вистой странности.
              0
              На Win7 (7100) установил. В тестах получаю менее 10 fps при том, что на хост-машине всё «летает». От объёма выделяемой памяти результат практически не зависит. Где слажал — не пойму.
                0
                Хмм, ну да, 3DMark (если вы об этом) действительно показывает ~15 fps. Но если есть хотя бы этот результат, я думаю остается всего один шаг до нормальных частот.
            0
            И все равно не работает, какие то неведомые ошибки с библиотеками при любом чихе в сторону dx, как при запуске игр, так и при запуске dxdiag
              0
              Хмм, а сам DirectX 9c был проставлен перед тем как запустили WineD3D?
                0
                У меня похожая ситуация. DX9c (4.09.0000.0904) стоял перед установкой WineD3D.
                0
                Аналогично.
                dxdiag тест не проходит, валится. Если посмотреть на монитор файлов dx, то паказывает «устаревшую версию» ddraw, d3d8, d3d9.
                Занятно, что даже переустановка DirectX заново не исправляет эти библиотеки. Осталось попробовать их вручную вынести.
                  0
                  Устаревшие версии — это как раз результат работы wineD3D — нативные DLLки заменяются вайновскими.
                    0
                    Ну, это очевидно довольно.
                    Проблема-то в том, что валилось, а не в том, что устаревшее. Поставить более старый directx, а поверх него wined3d — наверное, поможет, но моя попытка удалить dx закончилась невозможностью его заново поставить, поэтому просто переставил винду. Сечас все в порядке, версия dx более старая, чем была в прошлый раз.
                      0
                      У меня под скальпелем была сборка от PHILKA — там на сколько я понял DX9c уже был интегрирован. Возможно дело еще и в каких-нибудь майкрософтовских хотфиксах…
                +9
                Ура, теперь шаманить с wine можно и под Windows :)
                  +3
                  Вообще устанавливать ПО через установщик неправильно. Обновления сами не скачиваются, удаление не такое гладкое и т. д. Для Ubuntu и Debian гораздо лучше добавить репозиторий: deb download.virtualbox.org/virtualbox/debian jaunty non-free
                    +2
                    VBox 3.0 не так давно вышел, посему есть ещё не во всех вариантах дистрибутивов. А описание действий в статье какбе намекает на то, чтобы установить именно 3-ю версию, независимо от дистра.

                    Кстати, вот почитываю Хабр — создаётся такое впечатление, что хабражители не в курсе, что линукс не ограничивается убунтой.
                      0
                      Обратите внимание, я написал «добавьте репозиторий» именно от производителя, где как раз самая последняя версия, независимо от дистрибутива ;).
                        0
                        Не все дистрибутивы имеют пакеты deb :)
                          0
                          Ну скажите это производителю, других репов он не предоставляет, чего вы к человеку-то пристали?
                            0
                            Не ose нужен как собаке пятая нога.

                            например для сузе:
                            download.opensuse.org/repositories/Virtualization:/VirtualBox/openSUSE_11.1/
                              0
                              Так это не репозиторий от virtualbox.org
                              Разве ose уже поддерживает 3D?
                                0
                                На сайте написано, что в закрытом только USB и PATA.
                        0
                        Ну я писал не только об Ubuntu, а обо всех deb-дистрибутивах.

                        А вообще, мне нравится, что Ubuntu стало стандартом де-факто — в статье можно писать конкретные команды — новичок и так будет на Ubuntu, а зрелый пользователь (который уже выбрал другой дистрибутив) всегда сможет изменить команды (в данном случае, зайти на сайт и взять URL для rpm-дистрибутивов).

                        Конечно идеальная статья, должна содержать кнопки, которые бы с помощью JS показывали команды для основным дистрибутивов. Но, во-первых, всё равно должен быть какой-то выбор по умолчанию. Во-вторых, не всегда такое возможно.
                          0
                          Да ладно Вам, я описал (на мой взгляд) ситуацию вобщем ;)
                            0
                            В «стандартнах дефакто» нет ничего хорошего. Любому хоть сколько-нибудь свующему в линухах человеку понятно, что надо зайти в пакетный менеджер, поикать virtual box там и установить.
                              0
                              В том-то и дело, что если поискать, то там может быть только OSE-версия и точно не 3.0. Для последней версии нужен именно репозиторий разработчика (URL на который ещё надо найти).
                          0
                          Я описывал наиболее общий сценарий, поэтому и отталкивался от тех средств которые есть в любом дистрибутиве. По мне так, например, лучше ставить софт из исходников тотально контролируя опции конфигура и выставляя нужный набор флагов gcc, но я вовсе не утверждаю, что так делать «правильно» =)
                            0
                            Более полное количество дистрибутивов, а также процесс установки ключей описан здесь: www.virtualbox.org/wiki/Linux_Downloads
                            0
                            Попробовал Braid на двух виртуальных машинах с одной и той же виндой но с разными настройками:
                            1. «Включить IO APIC» — выключено, wined3d не установлен. (было до того как прочитал эту статью)
                            2. «Включить IO APIC» — включено, wined3d установлен. (сделал после прочтения топика)

                            И в первом и во втором случае игра запустилась, но играть невозможно. Хотя во втором случае выглядит все-таки чуть-чуть получше =)
                              0
                              А вы включали именно «3D ускорение» в свойствах ВМ (IO APIC — это система прерываний)?
                                0
                                Да. И в первом и во втором случае 3д ускорение было включено.
                                0
                                Braid работает под wine же. А по поводу новости — игру, которая не запускается в wine, вряд ли потянет по производительности эмулятор. Так что радоваться рано. Да и чему радоваться — в эмуляторе-то тоже Windows ставить нужно, а он дорогой ;)
                                  0
                                  У Вас в эмуляторе «дорогая» венда? ;)
                                    0
                                    У меня wine :)
                                    0
                                    Эмулятор (виртуальная машина) запускает де-факто все что угодно (читать любую виндовую игрушку или аппликуху), вопрос только в производительности виртуального драйвера.
                                    Поковырять что ли на досуге svn… Нет желающих присоединиться?
                                      0
                                      Во-первых, де-факто — совсем не любой софт оно запускает и совсем не любой софт работает. А во-вторых, перечитайте еще раз мой комментарий — там так и написано — «по производительности». К чему Ваш комментарий? ;)
                                      0
                                      Тут смысл был не в том чтобы поиграть, а в том чтобы нормально запустить =)
                                    +1
                                    Наконец то заработал Baldur's Gate=)
                                      0
                                      Ооооо! Вот как раз ради BGT, точнее ради Big World Project ребят с форумов shsforums.net я и начал эту мороку с вайнами и виртуалбоксами! Под вайном идет, но икоточно лагает каждую секунду. Под виртулбоксом пока запустить не удалось.
                                        0
                                        Именно ради BGT=) Ранее не работало под wine, пауза глючила, а под virtual box просто не работало, а теперь чувствую — кайфы! На часок и то хорошо раз в день поностальгировать.
                                          0
                                          Спасибо, что заставил поверить в ее, игры, работоспособность! Переставил виндуза, потому что попытки удалить DirectX штатными и нештатными способами просто сделали систему неработоспособной =)
                                          Теперь все работает!
                                            0
                                            А virtualbox образом с работающим BGT не поделитесь?
                                              0
                                              Это, прости, ты о чем? Игра сама занимает 13Гб, это сам BGT плюс самые популярные моды. Пожатая, думаю, будет весить гигов 7, такое разве что на торрент заливать.
                                      +1
                                      Для пользователей убунту все проще
                                      добавьте если нет репозитария в /etc/apt/source.list в вашей Ubuntu
                                      Код:
                                      ## virtualbox — поменяйте на свое имя дистриба
                                      deb download.virtualbox.org/virtualbox/debian jaunty non-free

                                      удалите старый VirtualBox 2.х — к сожалению третья ветка не заменяет вторую автоматом и поставьте сами VirtualBox 3.х

                                      загрузите гостевую винду в Безопасном режиме тыкая F8
                                      и переставьте Guest Additions — отметьте галочкой Direct3D на одном из этапов

                                      еще рестарт и можно проверять dxdiag и играть!
                                        +2
                                        А в dxdiag — на вкладке Дисплей тесты Direct3D прогоняются без WineD3D?
                                          +2
                                          Тесты дх7 и дх8 выдают ошибки, а дх9 — нормально отрабатывает. С вайнд3д не пробовал прогонять.
                                            0
                                            Странно, у меня Direct3D недоступен там. Или совсем обязательно Guest Additions ставить в безопасном режиме? Галку на D3D поставил при установке.
                                              0
                                              Guest Additions ставятся в обычном режиме. А сам ДиректХ вобще установлен?
                                                0
                                                Да. После замены файлами сабжа dxdiag вообще перестал стартовать.
                                                0
                                                Guest Addons вовсе не нужно ставить в безопасном режиме. Безопасный режим нужен лишь для того чтобы WineD3D мог спокойно заменить файлы DirectX своими.
                                                  0
                                                  нужно ставить Guest Additions в Безопасном режиме, чтобы Винда своей технологией SFC не вернула назад измененые файлы.
                                                  0
                                                  у меня ошибки на dx7 остальное отлично
                                                  виню старую винду, вскоре проверю все на чистовую
                                              0
                                              Может быть я чего то не понимаю, но мне кажется, что запускать винду под линуксом для того чтоб поиграть в винде, да еще и испытывая дикие лаги, это очень странно. Не легче ли поставить на отдельный раздел винду и забыть о странном геморе?
                                                0
                                                +1

                                                завел специально отдельный винт для венды, чтоб можно было в любой момент переустановить чистую венду и играть по человечески и без анальной ебли.
                                                  0
                                                  венда у вас груб не стирает? «в любой момент когда можно переустановить венду», потом заново груб устанавливать надо чтобы грузить другие ос
                                                    0
                                                    Ну можно теоретически грубом здесь вообще не пользоваться, а юзать фичу биоса «One time boot device» доступную чаще всего по F2/F12
                                                      0
                                                      Поддерживаю :)
                                                      Почти все матплаты сейчас поддерживают быстрый выбор загрузочного устройства по F8/ESC/и.т.п.
                                                        0
                                                        извиняюсь, не заметил что вы говорите «отдельный винт», а не отдельный раздел, потом долго еще соображал, что такая за фича в биосе, которая позволяет грузиться с определенных разделов:)
                                                        0
                                                        У меня для таких целей на флешке есть GParted LiveUSB. Делов на 5 минут. Так что не стоит утрировать.
                                                      0
                                                      я лично не гамаю в топовые игры
                                                      мои игрульки не требуют большой «мощности»
                                                      дал в VirtualBox3 2ядра для виртуальной машины из 3ядер и 1Gb ОЗУ и все!
                                                      не надо никаких «виндей» на отдельных дисках
                                                      благодаря Бесшовному режиму в VB вся винда представлена 1 панелью задач и работать может с Рабочим Столом Убунту. Очень удобно и не надо никуда рестартиться
                                                      +1
                                                      Недавно нашёл ссылку по теме. Думаю кому-нибудь пригодится
                                                        0
                                                        спасибо, хорошая заметка
                                                          0
                                                          WoW жалуется на ошибку 3D-ускорения.
                                                            0
                                                            WoW замечательно играется и без VBox'ов… на «чистом» WINE… И таки дает неплохой FPS. Но ради эксперимента, чего не сделаешь, правда? :)
                                                              0
                                                              Ага…
                                                              Под opengl фпс низкий — играть невозможно.
                                                              А под d3d вылетаю постоянно. Уже и багрепорт написал. Молчат.
                                                                0
                                                                Нашёл выход — играю на ноуте в opengl режиме в окошке с эмуляцией окна 1024x768. (основное 1440х900)

                                                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                          Самое читаемое