LINUX.ORG.RU
ФорумTalks

[wine][directx]А как оно работает?

 ,


0

2

Привет, ЛОР!
Вот сижу я, играю, значит, во FlatOut 2. Без winetricks d3dx9 оно даже не пыталось запуститься. И ещё у меня опенсурсные дрова radeon. Играется замечательно, тормоза в очень редких местах. Вот со сглаживанием только беда, но это, похоже, неисправимо. Ну да ладно, не об этом сейчас, играть можно, вопрос в другом.
И вопрос таков: а как оно, собсвтвенно, работает? В месе ведь нет поддержки DirectX вплоть до 9 версии?

Deleted
Ответ на: комментарий от Deleted

оно тормозит. Иногда в 20-40 раз медленнее

onon ★★★
()
Ответ на: комментарий от static_lab

Кроме того, D3DX просто-напросто вспомогательная библиотека. Видимо в Wine она реализована недостаточно хорошо, поэтому пришлось использовать оригинальную.

D3DX если и обращается к видеокарте, то только лишь через библиотеку D3D, которая, как я уже сказал выше, реализована на OpenGL.

static_lab ★★★★★
()
Ответ на: комментарий от Deleted

Многие вызовы заменяются заглушками, поэтому работает иногда даже быстрее чем в винде, но картинка заметно хуже.

Reset ★★★★★
()
Ответ на: комментарий от static_lab

Ага, вот как. Спасибо за разъяснения, стало хоть немного понятнее.
Тогда вопрос в другом: почему в месе реализуют DirectX 10, 10.1, 11, а не 9, на котором написано огромное количество игр и приложений? Смотрят в будущее?

Deleted
()
Ответ на: комментарий от Deleted

Суть такова.

Есть такая библиотека (часть Mesa) — Gallium3D. Она представляет собой прослойку между 3D API и драйвером видеокарты. Т.е., по замыслу разработчиков, реализуется следующая цепочка:

Программа => OpenGL => Gallium3D => Драйвер => Видеокарта

На этапе (OpenGL => Gallium3D) происходит преобразование высокоуровневых команд GL в низкоуровневые инструкции Gallium (которые, как ни странно, похожи, по словам разработчиков, на команды внутреннего интерфейса D3D10 :)

Так вот, идея такова, что Gallium должен реализовывать общую часть видеодрайверов, а аппаратно-специфичную — непосредственно конкретный видеодрайвер. Таким образом уменьшается объём кода видеодрайвера. С другой стороны, нет никаких препятствий в том, чтобы рулить галлиумом не через OpenGL, а через какой-либо другой высокоуровневый API, например D3D, ведь для этого драйвер переписывать не нужно.

А переписывать API Direct3D9 под галлиум, видимо, никому не нужно.

static_lab ★★★★★
()
Ответ на: комментарий от Yareg

Обычно это не спасает. Особенно с открытыми дровами)

Deleted
()
Ответ на: комментарий от tim91

Попробую как-нибудь. Но нужно что-то такое, что поддерживается вайном на платину или золото накрайняк. л4д2 подходит под это условие?

Deleted
()
Ответ на: комментарий от static_lab

Программа => OpenGL => Gallium3D => Драйвер => Видеокарта

И вот как эта связка не тормозит? Или оно и не должно тормозить при грамотной реализации?

За объяснения насчёт галлиума спасибо, теперь хоть понимаю, для чего оно нужно. Т.е., если я сильно захочу, то можно писать код прямо на Gallium (по аналогии с LLVM)?

А переписывать API Direct3D9 под галлиум, видимо, никому не нужно.

Собственно, я и удивляюсь, почему. Популярнее ведь.

Deleted
()
Ответ на: комментарий от tim91

платина
неплохо повозился чтобы завести это под вайном

O_o

Deleted
()
Ответ на: комментарий от Deleted

И вот как эта связка не тормозит? Или оно и не должно тормозить при грамотной реализации?

В драйверной модели XPDM (Windows <=XP) вызовы Direct3D мало того, что преобразовывались в инструкции для драйвера, так ещё и заворачивался в специальную структуру-обёртку, идущую с начала 90-х. Естественно, что таких сложных операций, как работа с 3D, тогда и не планировалось, поэтому драйверная команда становилась довольно тяжеловесной. В таком виде она передавалась драйверу, который её разворачивал и интерпретировал. Для висты была разработана новая модель драйвера — WDDM, в которой всю эту ерунду переписали с нуля с учётом современных требований. Как я уже сказал, на низком уровне протоколы WDDM и Gallium довольно похожи.

Естественно, что передавать команды от API драйверу получается быстрее, но думаю, что это не самое узкое место в современном графическом конвейере.

Т.е., если я сильно захочу, то можно писать код прямо на Gallium (по аналогии с LLVM)?

Да, в коде галлиума и примеры есть.

Кстати говоря, насколько я понял, LLVM в галлиуме используется для компиляции шейдеров.

static_lab ★★★★★
()

Direct3D и OpenGL - это почти одно и то же. На NVIDIA и AMD оба реализованы аппаратно и работают с одинаковой скоростью. В Linux Direct3D нет, Wine занимается трансляцией вызовов Direct3D в вызовы OpenGL. При этом есть небольшая потеря скорости, поэтому если игра предоставляет OpenGL, рекомендуется использовать его. Ну, кроме Far Cry, где OpenGL страдает ошибками отрисовки в некоторых местах.

Главное нововведение OpenGL 2 - шейдерный язык GLSL. OpenGL 2 это аналог DirectX 8 и 9. Дело в том, что раньше OpenGL не был догоняющим, он был лидером, поэтому раньше при выходе новой версии Direct3D версия OpenGL не увеличивалась. Последняя версия OpenGL 2 - 2.1.2, кажется. В открытом видеодрайвере radeon поддерживается - но не забывай, что открытый драйвер всё ещё отстаёт от закрытого по скорости работы 3D.

На видеокартах NVIDIA можно получить доступ к шейдерам DirectX через одно из расширений OpenGL. Этим пользуется Wine, если в реестре wine regedit дописать один параметр (UseGLSL - disabled). На NVIDIA это приведёт к ускорению работы некоторых игр, а на ATi - невозможность запуска этих игр. Производители оборудования часто делают расширения, которые есть только на их оборудовании, например GL_NV_*. И кстати, даже в OpenGL 1 можно запускать эффекты из 4-го, если есть нужные расширения - фактически, в Mesa есть расширения из 4-й версии, но так как поддержка стандарта 4 версии неполная, у тебя показывается вторая или третья версия. Полная поддержка третей появилась две недели назад.

Сглаживание. На проприетарном драйвере работает, если выставить его одновременно и в игре, и в окне настроек видеокарты. Но в некоторых играх приводит к повреждениям некоторых объектов (я видел пропадание решётчатого пола в «Сталкер - Зов Припяти, и ускоренную музыку в „Зов Ктулху“). И кстати, я не знаю, обязательно ли его включать в самой игре, может быть достаточно это сделать в настройках видеокарты. Знаю только, что если выставить в самой игре, а в настройках видеокарты не выставить, то его не будет. Для открытого драйвера программы настрйоки видеокарты нет.

Отрытый драйвер radeon - лучший из существующих открытых драйверов, я считаю что он даже лучше драйвера Intel. Но Wine, прослойки, могут работать очень медленно даже на мощной видеокарте. Например, пользователь RussianNeuroMancer запускал игру StarCraft II на открытом видеодрайвере, и имел 10 FPS на мощной видеокарте - в то время как на проприетарном игра выдаёт плавную картинку. Поэтому я советую тебе попробовать так называемые нативные игры - игры в версиях для Linux. Их также используют для тестирования сами разработчики драйвера radeon. Если тебе нужны названия - я могу тебе перечислить свои.

ZenitharChampion ★★★★★
()
Ответ на: комментарий от Yareg

Поддержка сглаживания включается в реестре.

слышал, что в реестре можно включить только сглаживание шрифтов.

demidrol ★★★★★
()
Ответ на: комментарий от tim91

>> Попробую как-нибудь. Но нужно что-то такое, что поддерживается вайном на платину или золото накрайняк. л4д2 подходит под это условие?

там конечно платина.. но я неплохо повозился чтобы завести это под вайном)

Нужно библиотеку gameoverlayrenderer.dll в winecfg установить как «не использовать», и тогда игры от Valve будут работать.

ZenitharChampion ★★★★★
()
Ответ на: комментарий от CYB3R

Да уж)
Хотя я вот до сих пор не понимаю, что погромисты нашли в этом пиве.

Deleted
()
Ответ на: комментарий от ZenitharChampion

 Для открытого драйвера программы настрйоки видеокарты нет.

Есть xorg.conf, но, кажется, сглаживание тупо не реализовали ещё в опенсурсных драйверах.

Отрытый драйвер radeon - лучший из существующих открытых драйверов, я считаю что он даже лучше драйвера Intel

У меня была Nvidia, и мне кажется, что nouveau лучше. И по скорости разработки в том числе. Банальный тест — нативный postal2:
1) nouveau: работает, но тормозит;
2) radeon: вместо графики чёрное нечто.
Но это было почти полгода назад, а то и больше. Но что-то никакого особого прогресса в radeon я не наблюдаю, хотя мне всё пели, что r600 прекрасен, особенно для Evergreen и Northern Islands. У меня HD 6850 и что-то потенциал моей карты раскрыт в опенсорсных дровах, мягко говоря, хреново. А проприетарный я так и не осилил поставить в генте.

Поэтому я советую тебе попробовать так называемые нативные игры

Пробовал недавно Oil Rush. Лучше бы не пробовал. Притом с fglrx была проблема только со сглаживанием.

Deleted
()
Ответ на: комментарий от Deleted

А ты попробуй какое-то ферми замести на nouveau,а не карту 4-5 летней давности, тогда и говори про скорость разработки, моя 520gt только только шестеренки научилась крутить, если собрать все из гита.
Нативного Оилраша у меня нет, но в вайне с опенгл ренлером на средних насройках hd6770 выдает 20-25 фпс, играть можно.

Novell-ch ★★★★★
()
Ответ на: комментарий от Novell-ch

А ты попробуй какое-то ферми замести на nouveau,а не карту 4-5 летней давности, тогда и говори про скорость разработки

Может быть и так. У меня была 9600M GT, там всё действительно было очень даже неплохо.
У radeon вообще жопа — передовые карты ещё хоть что-то, а вот старые просто в пролёте. И нормальной работы 3D нет нигде. nouveau хотя бы для относительно старых карт довольно годно работает.

на средних насройках hd6770 выдает 20-25 фпс, играть можно

У меня на настройках выше минимальных тупо слайдшоу. libdrm, mesa, xf86-video-ati — всё из гита. OpenGL 3 включен. Мб надо его выключить?

А вообще, radeon тормозит и с Nexuiz на ultra-настройках, которые тот же nouveau на ура тянул.

Deleted
()
Ответ на: комментарий от Deleted

у меня есть старая x1100, я играл на ней в кваку, ут2004, всякие туксрейсеры, для этой карты производительность откртых дров меня устраивает,
для hd6770 надеюсь улучшат, но уже сйчас она выдает 130 фпс в лайтсмарке и 34фпс в ET:QW демо на максимум при 1920х1080, а всякие Savage2 и HON просто летают.

Novell-ch ★★★★★
()
Ответ на: комментарий от ZenitharChampion

4.2

Например, пользователь RussianNeuroMancer запускал игру StarCraft II на открытом видеодрайвере, и имел 10 FPS на мощной видеокарте - в то время как на проприетарном игра выдаёт плавную картинку.
Ссылка на тот тред и вот сообщение про «мощность» видеокарты. Откуда про 10 FPS?

RussianNeuroMancer ★★★★★
()
Ответ на: комментарий от Deleted

У меня HD 6850 и что-то потенциал моей карты раскрыт в опенсорсных дровах, мягко говоря, хреново.
До 6770 включительно архитектура VLIW5, а начиная с 6790 уже VLIW4. Видимо оптимизация поддержки VLIW4 в R600g пока в процессе.

RussianNeuroMancer ★★★★★
()
Ответ на: комментарий от Reset

У тебя ко мне прям любовь.
Не могу пройти мимо 4.2.
> Ты случайно не из этих ? Всмысле яблочников ?
А вы случайно не из этих? В смысле вендузятников?

RussianNeuroMancer ★★★★★
()
Ответ на: комментарий от demidrol

[«HKEY_CURRENT_USER/Software/Wine/Direct3D»] «Multisampling»=«enabled»

Yareg ★★★
()
Ответ на: комментарий от Deleted

У radeon вообще жопа

Ты либо нагло вреш, либо тебе очень не везло.

Behem0th ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.