Медленная работа DX 7 и более старых приложений в Win8.1

Обсуждение проблем видеокарт, драйверов и всего, что с ними связано.

Модераторы: max-sever, iStalker, andser

Ответить
Timich
Старожил
Сообщения: 1247
Зарегистрирован: 01.01.1970 3:00
Откуда: Москва, Россия
Контактная информация:

Медленная работа DX 7 и более старых приложений в Win8.1

Сообщение Timich » 09.09.2014 14:04

Установив на Windows 8.1 x64 старенький тест 3D Mark 2000, заметил, что он демонстрирует аномально низкую производительность. Не такую, как при чисто программном рендеринге, но все же не соответствующую возможностям имеющегося железа ( Core i7 2600K @ GeForce 670 GTX )

Код: Выделить всё

RESULTS
Platform:	Internal
3DMark Result:	1961	3D marks
CPU Speed:	226	CPU 3D marks
Game 1 - Helicopter - Low Detail:	27,3	FPS
Game 1 - Helicopter - Medium Detail:	26,0	FPS
Game 1 - Helicopter - High Detail:	24,8	FPS
Game 2 - Adventure - Low Detail:	30,1	FPS
Game 2 - Adventure - Medium Detail:	28,5	FPS
Game 2 - Adventure - High Detail:	26,8	FPS
Fill Rate (Single-Texturing):	103,7	MTexels/s
Fill Rate (Multi-Texturing):	103,6	MTexels/s
High Polygon Count (1 Light):	4942	KTriangles/s
High Polygon Count (4 Lights):	4942	KTriangles/s
High Polygon Count (8 Lights):	4945	KTriangles/s
8MB Texture Rendering Speed:	31,9	FPS
16MB Texture Rendering Speed:	29,6	FPS
32MB Texture Rendering Speed:	23,2	FPS
64MB Texture Rendering Speed:	Not enough AGP memory	FPS
Bump Mapping (Emboss, 3-pass):	32,9	FPS
Bump Mapping (Emboss, 2-pass):	32,9	FPS
Bump Mapping (Emboss, 1-pass):	33,0	FPS
Bump Mapping (Environment):	32,9	FPS
Любопытно, что:

1) FPS во всех тестах болтается в районе 30, независимо от природы теста
2) Одинаковый результат для одиночного и множественного текстурирования
3) Провален тест рендеринга 64-мегабайтной текстуры

Запустил тот же тест под виртуальной машиной, на которой установлена WinXP. VMWare поддерживает 3D ускорение, и несмотря на то, что эмуляция видеокарты должна по идее снижать производительность, результат в гостевой системе оказался в разы лучше. В некоторых тестах - в сотню раз.

Код: Выделить всё


RESULTS
Platform:	Internal
3DMark Result:	9191	3D marks
CPU Speed:	670	CPU 3D marks
Game 1 - Helicopter - Low Detail:	129,7	FPS
Game 1 - Helicopter - Medium Detail:	101,3	FPS
Game 1 - Helicopter - High Detail:	78,8	FPS
Game 2 - Adventure - Low Detail:	207,1	FPS
Game 2 - Adventure - Medium Detail:	143,3	FPS
Game 2 - Adventure - High Detail:	105,6	FPS
Fill Rate (Single-Texturing):	11548,3	MTexels/s
Fill Rate (Multi-Texturing):	25747,9	MTexels/s
High Polygon Count (1 Light):	36170	KTriangles/s
High Polygon Count (4 Lights):	33083	KTriangles/s
High Polygon Count (8 Lights):	28910	KTriangles/s
8MB Texture Rendering Speed:	493,2	FPS
16MB Texture Rendering Speed:	261,4	FPS
32MB Texture Rendering Speed:	133,0	FPS
64MB Texture Rendering Speed:	65,9	FPS
Bump Mapping (Emboss, 3-pass):	1405,3	FPS
Bump Mapping (Emboss, 2-pass):	1880,9	FPS
Bump Mapping (Emboss, 1-pass):	2808,1	FPS
Bump Mapping (Environment):	3091,5	FPS
С 3D Mark 99 MAX ситуация немного иная - игровые тесты показывают те же 30 fps, тесты рендеринга текстур - сотни fps (см вложение). И refresh rate там жестко указан как 30 герц, хотя в драйвере синхронизация выключена.

Для сравнения - результат 2000 марка в Windows 7 x64 с тем же драйвером

Код: Выделить всё

RESULTS
Platform:	Internal
3DMark Result:	55404	3D marks
CPU Speed:	1839	CPU 3D marks
Game 1 - Helicopter - Low Detail:	976,9	FPS
Game 1 - Helicopter - Medium Detail:	709,1	FPS
Game 1 - Helicopter - High Detail:	589,6	FPS
Game 2 - Adventure - Low Detail:	1357,0	FPS
Game 2 - Adventure - Medium Detail:	600,3	FPS
Game 2 - Adventure - High Detail:	384,2	FPS
Fill Rate (Single-Texturing):	18964,2	MTexels/s
Fill Rate (Multi-Texturing):	33762,4	MTexels/s
High Polygon Count (1 Light):	300015	KTriangles/s
High Polygon Count (4 Lights):	279748	KTriangles/s
High Polygon Count (8 Lights):	252375	KTriangles/s
8MB Texture Rendering Speed:	3582,8	FPS
16MB Texture Rendering Speed:	2157,5	FPS
32MB Texture Rendering Speed:	1240,7	FPS
64MB Texture Rendering Speed:	Not enough AGP memory	FPS
Bump Mapping (Emboss, 3-pass):	2064,2	FPS
Bump Mapping (Emboss, 2-pass):	2772,5	FPS
Bump Mapping (Emboss, 1-pass):	4285,1	FPS
Bump Mapping (Environment):	5037,9	FPS
64-мегабайтная текстура также не работает, однако FPS не ограничен 30 кадрами
Вложения
99max.jpg
99max.jpg (140.2 КБ) 927 просмотров

GothMan
Модератор
Сообщения: 11010
Зарегистрирован: 20.11.2005 1:03
Откуда: Запорожье, Украина
Контактная информация:

Re: Медленная работа DX 7 и более старых приложений в Win8.1

Сообщение GothMan » 09.09.2014 21:19

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

Timich
Старожил
Сообщения: 1247
Зарегистрирован: 01.01.1970 3:00
Откуда: Москва, Россия
Контактная информация:

Re: Медленная работа DX 7 и более старых приложений в Win8.1

Сообщение Timich » 10.09.2014 12:39

Небольшой оффтоп про актуальность.

Есть люди, которых эта проблема непосредственно затрагивает, например любители старых игр. Гугление по теме "directdraw windows 8 slow" показывает, что любителей поиздеваться над трупами не так уж и мало :)
Кроме того, существует спортивный интерес - что именно поменяли микрософтовцы при переходе от сравнительно новой системы Windows 7 x64 к Windows 8.1 и в итоге поломали DirectDraw / Direct3D 7 версии и ниже.

Как народ пытается решать эту проблему, помимо использования виртуальных машин и установки семерки на реальное железо?

1) Использование Microsoft Application Compatibility Toolkit - программе назначается фикс DXPrimaryEmulation с параметром -DisableMaxWindowedMode
У меня на 3D марках это не сработало - программы запускались, но при старте тестов тихо умирали, без сообщений об ошибках даже.

2) Использование модифицированных версий библиотеки ddraw.dll, которые, например, транслируют вызовы DirectDraw в OpenGL (врапперы). Недостаток этого решения - проблемы с совместимостью и производительностью. Еще есть версия ddraw, не являющаяся враппером по сути, в нее просто вшит фикс из пункта 1.

Подробности тут --> http://www.blitzbasic.com/Community/pos ... st=1202630 (англ)

Что же могли поменять микрософтовцы... Появился конфликт с Desktop Window Manager, который сделан неотключаемым в восьмерке? Тогда почему он, по сообщениям пользователей, затрагивает только полноэкранный режим и проявляется именно в снижении производительности (а не искажении картинки/артефактах или зависании), причем до относительно четко определенного уровня, независимо от мощности железа или сложности графической сцены. И почему с DWM не конфликтуют программы, использующие OpenGL?

На скриншоте видно, что четко указан параметр Refresh Rate 30 Hz. И именно до такой величины опускается FPS. Значит это не банальный конфликт программ, драка за ресурсы графического процессора, а следование некоторой настройке.

Вопрос - где она хранится и можно ли ее поменять?

К Refresh Rate монитора она, скорее всего, отношения не имеет - у меня она была выставлена в 120 герц
Если невозможно совсем снять это жесткое ограничение, хорошо бы поднять его до установленной в системе частоты развертки монитора или хотя бы 60 герц.

Timich
Старожил
Сообщения: 1247
Зарегистрирован: 01.01.1970 3:00
Откуда: Москва, Россия
Контактная информация:

Re: Медленная работа DX 7 и более старых приложений в Win8.1

Сообщение Timich » 06.10.2014 23:41

Качаю превью Windows 10 , посмотрим что там с этим глюком...

Timich
Старожил
Сообщения: 1247
Зарегистрирован: 01.01.1970 3:00
Откуда: Москва, Россия
Контактная информация:

Re: Медленная работа DX 7 и более старых приложений в Win8.1

Сообщение Timich » 08.10.2014 2:59

Глюк в свежеустановленной Windows 10 Preview сохранился.

Однако есть пара отличий

1) Microsoft Application Compatibility Toolkit падает с ошибкой в apphelp.dll при попытке сохранить фикс или запустить программу в режиме тестирования фикса
2) Метод с подменой ddraw.dll (использовалась версия от Windows 8.1) работает... почти. Тест на 64-мегабитную текстуру также не проходит, у 32-мегабайтной текстуры низкая производительность. Но ограничение на 30 fps снято.
DLL копируется в папку с программой.

До подмены

Код: Выделить всё

3DMark Result:	2284	3D marks
CPU Speed:	270	CPU 3D marks
Game 1 - Helicopter - Low Detail:	31,8	FPS
Game 1 - Helicopter - Medium Detail:	31,9	FPS
Game 1 - Helicopter - High Detail:	30,9	FPS
Game 2 - Adventure - Low Detail:	31,9	FPS
Game 2 - Adventure - Medium Detail:	31,9	FPS
Game 2 - Adventure - High Detail:	31,9	FPS
Fill Rate (Single-Texturing):	100,1	MTexels/s
Fill Rate (Multi-Texturing):	100,3	MTexels/s
High Polygon Count (1 Light):	4946	KTriangles/s
High Polygon Count (4 Lights):	4960	KTriangles/s
High Polygon Count (8 Lights):	4942	KTriangles/s
8MB Texture Rendering Speed:	31,9	FPS
16MB Texture Rendering Speed:	31,8	FPS
32MB Texture Rendering Speed:	30,3	FPS
64MB Texture Rendering Speed:	Not enough AGP memory	FPS
Bump Mapping (Emboss, 3-pass):	31,9	FPS
Bump Mapping (Emboss, 2-pass):	32,0	FPS
Bump Mapping (Emboss, 1-pass):	32,0	FPS
Bump Mapping (Environment):	31,9	FPS
После

Код: Выделить всё

3DMark Result:	15014	3D marks
CPU Speed:	900	CPU 3D marks
Game 1 - Helicopter - Low Detail:	169,5	FPS
Game 1 - Helicopter - Medium Detail:	137,1	FPS
Game 1 - Helicopter - High Detail:	118,4	FPS
Game 2 - Adventure - Low Detail:	408,8	FPS
Game 2 - Adventure - Medium Detail:	244,1	FPS
Game 2 - Adventure - High Detail:	173,2	FPS
Fill Rate (Single-Texturing):	10861,8	MTexels/s
Fill Rate (Multi-Texturing):	15937,1	MTexels/s
High Polygon Count (1 Light):	178311	KTriangles/s
High Polygon Count (4 Lights):	171560	KTriangles/s
High Polygon Count (8 Lights):	161317	KTriangles/s
8MB Texture Rendering Speed:	937,3	FPS
16MB Texture Rendering Speed:	318,4	FPS
32MB Texture Rendering Speed:	85,9	FPS
64MB Texture Rendering Speed:	Not enough AGP memory	FPS
Bump Mapping (Emboss, 3-pass):	1734,3	FPS
Bump Mapping (Emboss, 2-pass):	2570,2	FPS
Bump Mapping (Emboss, 1-pass):	4117,2	FPS
Bump Mapping (Environment):	4525,3	FPS
Может у кого получится метод с подменой DLL и на восьмерках.
Вложения
Windows_8_8_1_DDRAW_FPS_FIX.zip
Модифицированная DDRAW.DLL
(490.22 КБ) 20 скачиваний

Ответить