Page 14 of 17

Re: Про ZXMAK2

PostPosted: 21 Jan 2015, 03:11
by zxmak
Тест (и график) делался не для vblank а для time, с vblank у меня 100фпс и 10мс на кадр.


синхронизация в любом варианте делается из потока эмуляции, а нотификация происходит одинаково.

Нотификация через тред пул - мега тормоза, любые объекты синхронизации работают через диспетчер, минимальный квант диспетчера 1мс (это если timebeginperiod(1))


timebeginperiod(1) устанавливается. то что трид пул медленный, понятно. Тут дело в том что эта нотификация - узкое место, до этого она происходила через Invalidate, а в обработчике WM_PAINT Present, но это тормозит поток эмуляции при разных месиджах в очереди сообщений. Через трид пул я попробовал развязать, как простейший вариант. Результат удивил :) Даже не ожидал что настолько динамично все работать будет. Даже UI заметно шустрее стал :)

Re: Про ZXMAK2

PostPosted: 21 Jan 2015, 03:12
by zxmak
И таки, да, добавь плиз Ф3 (ну или любой другой хоткей) и опциональное дописывание бута (к старом zxmak кстати было), а то каждый раз набирать в трдос имя файла для запуска неудобно.


так он и так есть - Ctrl+Alt+F1 :)

Re: Про ZXMAK2

PostPosted: 21 Jan 2015, 03:16
by zxmak
Чем плохо отлавливать vblank и делать async present в одном потоке? в тестовом унриале это прекрасно работало.


Эмулятор использует обычную очередь оконных сообщений для полноценной работы UI. Если делать Present и сбрасывать D3D в другом потоке, будут проблемы с ресайзом окна

Re: Про ZXMAK2

PostPosted: 21 Jan 2015, 03:19
by deathsoft
zxmak wrote:Эмулятор использует обычную очередь оконных сообщений для полноценной работы UI.

unreal тоже использует обчныю очередь сообщений, но мему это не мешает все делать в одном потоке, очередь сообщений надо через PeekMessage разбирать, этоприведено даже в любом D3d примере из sdk, где опрос клавиатуры делается.

Re: Про ZXMAK2

PostPosted: 21 Jan 2015, 03:21
by deathsoft
zxmak wrote:так он и так есть - Ctrl+Alt+F1

А почему на против Open стоит ..., а хоткей не написан?

Re: Про ZXMAK2

PostPosted: 21 Jan 2015, 03:24
by deathsoft
Еще zxmak2 безбожно сечется с лучем на crt мониторе (в верхней трети экрана), при том что выводит кадры 100фпс и развертка монитора тоже 100фпс и стоит синхра по vblank.
это видно в shock мегадемо фикшеной под пентагон, на больших зеленых буковках в скроле который по синусу.

Re: Про ZXMAK2

PostPosted: 21 Jan 2015, 03:46
by zxmak
unreal тоже использует обчныю очередь сообщений, но мему это не мешает все делать в одном потоке, очередь сообщений надо через PeekMessage разбирать, этоприведено даже в любом D3d примере из sdk, где опрос клавиатуры делается.


потестил из потока эмуляции Present и сброс делать, вроде все нормально работает, даже перестало реагировать на длительный клик по тайтлу окна :)
Но есть проблема, если начинаешь ресайзить окно, начинаются сбросы d3d, чтобы подстроить размеры. А сброс довольно прилично времени занимает, в итоге поток эмуляции замирает на доли секунды. Проявляется как срывы звука при ресайзе окна

Re: Про ZXMAK2

PostPosted: 21 Jan 2015, 05:05
by zxmak
обновил для тестов, теперь синхра и Present в одном потоке, но если нужен сброс, то кидается нотификация в основной поток и сброс происходит в основном потоке.
На графе почему-то заметные отклонения вверх/вниз от целевого времени фрейма. Непонятно почему. Если скипать фреймы, то все гладко. Видимо какая-то заморочка с планировщиком задач windows.

Протести плиз эту версию тоже: 2.8.6.2 TESTSYNC: https://zxmak2.codeplex.com/releases/view/610909

Re: Про ZXMAK2

PostPosted: 21 Jan 2015, 09:22
by lvd
zxmak wrote:Но тогда теряется кроссплатформенность,

"говнет" и "кроссплатформенность" -- взаимоисключающие параграфы.

Re: Про ZXMAK2

PostPosted: 21 Jan 2015, 11:07
by deathsoft
zxmak wrote:Но есть проблема, если начинаешь ресайзить окно, начинаются сбросы d3d, чтобы подстроить размеры. А сброс довольно прилично времени занимает, в итоге поток эмуляции замирает на доли секунды. Проявляется как срывы звука при ресайзе окна

При ресайзе окна проблема вообще не актуальна, унриал при таскании и ресайзе вообще эмуляцию останавливает. После ресайза то все нормально работает.