MPC-BE forum

MPC-BE => Внешние фильтры / External filters => Тема начата: V0lt от 30 апреля 2022, 14:35:09

Название: MPC VR - DX11SubPic
Отправлено: V0lt от 30 апреля 2022, 14:35:09
В MPC VR реализована возможность работать с субтитрами в режиме DirectX 11 без использования текстур DirectX 9.

Фича касается только режима DirectX 11. Фича экспериментальная и в обычных сборках недоступна, т.к. не будет работать вывод субтитров в плеерах (MPC-HC, PotPlayer, старые версии MPC-BE). Никаких режимов совместимости не планируется. Официальное внедрение планируется после какого-нибудь релиза.

mpcvr_1872_dx11subpic.zip (https://disk.yandex.ru/d/wh6uzC-0za5sEw)
Для нормальной работы требуется MPC-BE 1.6.2.7054 или новее.

Просьба потестировать. В качестве рендерера субтитров можно использовать встроенный рендерер субтитров MPC-BE или внешний XySubFilter (https://github.com/pinterf/xy-VSFilter/releases). Для тяжелой анимации можете попробовать XySubFilter with libass (https://github.com/Masaiki/xy-VSFilter/releases).
Название: От: MPC VR - DX11SubPic
Отправлено: V0lt от 01 мая 2022, 16:02:46
Сделал тестовый файл SubtitleScrollingTest60fps.mkv (https://cloud.mail.ru/public/7Lbs/cB3H7kNLV).

Проверял с GTX950 в окне развернутом на весь экран, и с текстурой равно рабочему столу.
Общая нагрузка на видеокарту снизилась. :) Кто будет проверять, смотрите в GPU-Z частоты чипа и памяти, т.к. они важнее процентов. Можно еще смотреть потребляемую мощность.
А вот процессор нагружается сильнее. :(
Название: От: MPC VR - DX11SubPic
Отправлено: MPCfan от 01 мая 2022, 18:44:00
При воспроизведении тестового файла на Intelhd4000 c CPU% особого прироста нет между простым окном и полноэкранным режимом, зато на gt730m CPU% возрастают в два раза.
Название: От: MPC VR - DX11SubPic
Отправлено: Aleksoid1978 от 02 мая 2022, 04:42:52
По поводу нагрузки на CPU - возможно из-за дополнительного копирования данных из текстуру в текстуру. Хоть это и делает D3D11, мало ли ...
Название: От: MPC VR - DX11SubPic
Отправлено: V0lt от 02 мая 2022, 18:29:52
Помучались немного и в MPC-BE 1.6.2.7062 выжали из DX11 все что можно. Работает эффективнее DX9.
Название: От: MPC VR - DX11SubPic
Отправлено: MPCfan от 02 мая 2022, 21:53:20
Что-то совсем на gt730m пошло не так > https://disk.yandex.ru/i/Kot0LBCxsPb-yQ 
1.6.2.7063 alpha git 2022.05.02 - a18c33059
Название: От: MPC VR - DX11SubPic
Отправлено: Aleksoid1978 от 03 мая 2022, 03:49:01
Цитата: MPCfan от 02 мая 2022, 21:53:20Что-то совсем на gt730m пошло не так > https://disk.yandex.ru/i/Kot0LBCxsPb-yQ 
1.6.2.7063 alpha git 2022.05.02 - a18c33059

Ну опять видимо в деле "кривая" поддержка DX11 со стороны видео-драйвера :)

P.S. Вот проверяем, откатил последние изменения касаемо заполнения текстур D3D11 через UpdateSubresource().
https://disk.yandex.ru/d/dnhQkZ_L5zDX2Q
Название: От: MPC VR - DX11SubPic
Отправлено: MPCfan от 03 мая 2022, 06:06:44
Проверил 1.6.2.7060 alpha, такое же поведение как и в 1.6.2.7063 alpha.
Название: От: MPC VR - DX11SubPic
Отправлено: Aleksoid1978 от 03 мая 2022, 06:38:10
Странно. А не зависит от размера окна ?
В настройках плеера в субтитрах какой размер текстуры, если попробовать поиграться с размерами ?
А то возможно как-то связано с размерами и выравниванием.
Название: От: MPC VR - DX11SubPic
Отправлено: MPCfan от 03 мая 2022, 07:08:24
Всё попробовал, не помогает.  1.6.2.7055 корректно выводит сабы, 1.6.2.7058 уже нет. Между ними есть три коммита, наверное какой-то из них.
Название: От: MPC VR - DX11SubPic
Отправлено: Aleksoid1978 от 03 мая 2022, 07:17:06
Цитата: MPCfan от 03 мая 2022, 07:08:24Всё попробовал, не помогает.  1.6.2.7055 корректно выводит сабы, 1.6.2.7058 уже нет. Между ними есть три коммита, наверное какой-то из них.
Лучше указывать хэш git коммита, а то по номеру понять "как бы сложно" :)
Название: От: MPC VR - DX11SubPic
Отправлено: MPCfan от 03 мая 2022, 07:19:35
MPC-BE.1.6.2.7055_git2022.05.01-129332362.x64 и MPC-BE.1.6.2.7058_git2022.05.02-d5ddae406.x64
Название: От: MPC VR - DX11SubPic
Отправлено: V0lt от 03 мая 2022, 08:26:53
MPCfan
Попробуйте 1.6.2.7064, когда будет доступна.

03 мая 2022, 13:11:16
С 7064 не прокатило.

03 мая 2022, 13:22:35
Придется возвращать Map/Unmap, а с UpdateSubresource разберемся позже.
Название: От: MPC VR - DX11SubPic
Отправлено: Aleksoid1978 от 03 мая 2022, 14:50:13
Погоди возвращать, вот тут прочитай:
https://docs.microsoft.com/en-us/windows/win32/api/d3d11/nf-d3d11-id3d11devicecontext-updatesubresource#calling-updatesubresource-on-a-deferred-context

Может это и есть тот случай ?
Название: От: MPC VR - DX11SubPic
Отправлено: V0lt от 03 мая 2022, 16:08:02
Aleksoid1978
Бесполезно возвращать. Не работает корректно на AMD и все тут. Только когда в полный экран перехожу, проскакивает корректная картинка.
Доберусь до основной машины, проверю разные варианты.
Название: От: MPC VR - DX11SubPic
Отправлено: Aleksoid1978 от 03 мая 2022, 16:10:24
А то что по ссылке выше не пробовал ?
Название: От: MPC VR - DX11SubPic
Отправлено: V0lt от 03 мая 2022, 19:03:49
Цитата: Aleksoid1978 от 03 мая 2022, 16:10:24А то что по ссылке выше не пробовал ?
Не работает это. Я даже пробовал вырубить непонятный SetMultithreadProtected в MPC VR.

AMD Vega 8.
1. Если включена статистика, то субтитры всегда искажены.
2. Запускаю без статистики - субтитров вообще нет. Перехожу в эксклюзивный полный экран - появляются корректные субтитры. Возвращаюсь в окно - корректные субтитры не пропадают.
3. Если включить статистику, то субтитры опять искажает.

В общем что-то не так с обработкой команд у некоторых видеокарт.
Название: От: MPC VR - DX11SubPic
Отправлено: Aleksoid1978 от 04 мая 2022, 04:28:19
По поводу "сдвига" субтитров, вот пробуем - https://disk.yandex.ru/d/Y_CvJTvwOatl5A
Название: От: MPC VR - DX11SubPic
Отправлено: MPCfan от 04 мая 2022, 07:38:42
Цитата: Aleksoid1978 от 04 мая 2022, 04:28:19По поводу "сдвига" субтитров, вот пробуем - https://disk.yandex.ru/d/Y_CvJTvwOatl5A
Не помогло gt730m. Более того, cтало хуже на Intel, стали вываливаться кадры на тестовом видео 60fps.
Название: От: MPC VR - DX11SubPic
Отправлено: V0lt от 04 мая 2022, 20:12:03
Кстати, воспроизвел баг на GTX 950 и GTX 1650. Проявляется на стандартных настойках. Просто увеличиваю размер окна. Статистика способствует багу.
Название: От: MPC VR - DX11SubPic
Отправлено: Aleksoid1978 от 05 мая 2022, 00:39:38
Кстати да, решил проверить - и оказалось что такое поведение когда используется VP для ресайза. При использовании шейдеров - все отлично.

05 мая 2022, 02:06:29
Исправил, проверяем:
https://disk.yandex.ru/d/frhcLmsM9R5IBA
Название: От: MPC VR - DX11SubPic
Отправлено: MPCfan от 05 мая 2022, 06:31:11
Цитата: Aleksoid1978 от 05 мая 2022, 00:39:38Исправил, проверяем:
https://disk.yandex.ru/d/frhcLmsM9R5IBA
Проверил по-быстрому. Пока проблем нет ни на Intel, ни на Nvidia.
Название: От: MPC VR - DX11SubPic
Отправлено: V0lt от 07 мая 2022, 21:25:08
MpcVideoRenderer-0.6.0.1878_git2022.05.07-b2f1f34 (https://yadi.sk/d/X0EVMKP4TcmnHQ)
В режиме DX11 используется новый интерфейс рендеринга субтитров ISubRender11. Старые плееры не смогут выводить субтитры в режиме DX11.
Рекомендуемая версия MPC-BE 1.6.2.7075 или новее, но доступные 1.6.2.7070 и 1.6.2.7071 так же будут работать.
Название: От: MPC VR - DX11SubPic
Отправлено: V0lt от 12 мая 2022, 18:09:51
Получилась странная ситуация.
MPC-HC не может работать с MPC VR 0.6.0, если в последнем включен режим DX11.
Чтобы хоть как-то работало в режиме DX11, приходится форсировать фильтр во внешних фильтрах.
Название: От: MPC VR - DX11SubPic
Отправлено: MPCfan от 12 мая 2022, 20:07:29
Цитата: V0lt от 12 мая 2022, 18:09:51MPC-HC не может работать с MPC VR 0.6.0, если в последнем включен режим DX11.
Потплеер тоже не работает с MPC-VR DX11, включает свой DX9, а c MPC-VR DX9 работает.

Название: От: MPC VR - DX11SubPic
Отправлено: Aleksoid1978 от 13 мая 2022, 01:52:41
Ничего странного - для D3D11 режима мы же убрали поддержку интерфейса, плееры проверяют и дают отлуп.
P.S. Вернул совместимость.
Название: От: MPC VR - DX11SubPic
Отправлено: V0lt от 13 мая 2022, 06:38:03
Aleksoid1978
Спасибо. Залил сборку.
MpcVideoRenderer-0.6.0.1883_git2022.05.13-20c8135 (https://disk.yandex.ru/d/X0EVMKP4TcmnHQ)
Название: От: MPC VR - DX11SubPic
Отправлено: V0lt от 14 мая 2022, 20:38:26
Текущие версии
MPC-BE 1.6.2.7093 (git 2022.05.14 - 300c78e36)
MPC Video Renderer 0.6.0.1884 (git-2022.05.14-6e712d7)

В режиме DX11 можно словить баг драйвера на Intel UHD 7xx. Драйвер может начать кушать память при выводе субтитров (растет потребление основной памяти плеером и видеопамяти - для встройки она единая). Потом его отпускает (после 4 ГБ), память восстанавливается и больше так много не кушает.
На Nvidia все хорошо.
Название: От: MPC VR - DX11SubPic
Отправлено: V0lt от 15 мая 2022, 11:20:00
Проделал измерения. Чтобы более точно следить за нагрузкой CPU пришлось залочить частоту на 20%, что в итоге дало постоянные 0.79 ГГц. Также перевел встройку в режим минимального потребления.
В таблице данные нагрузки для процесса MPC-BE. Общая загрузка немного больше, но для выводов это не принципиально. Частоту GPU получал с помощью GPU-Z.
После загрузки системы нужно подождать пока винда перестанет грузить процессор. У меня было 3%, после упало до 0%. Все лишнее отрубить (особенно браузеры).

Тестовое видео SubtitleScrollingTest60fps.mkv (https://cloud.mail.ru/public/7Lbs/cB3H7kNLV). Размер текстуры 2560x1440. Окно развернуто на весь экран. После надо выждать 10-20 секунд пока не устаканится частота GPU. При тесте UpdateSubresource на Intel, выжидал пока из-за бага драйвера перестанет кушать память. Windows 10 x64.

Результаты:
Графический адаптерUpdateSubresourceWriteToSubresourceMap_memcpy
Intel UHD 750CPU - 1.1% 0.79 ГГц
GPU - 27 % 349 МГц
CPU - 1.2% 0.79 ГГц
GPU - 25 % 349 МГц
CPU - 1.0% 0.79 ГГц
GPU - 35 % 349 МГц
Nvidia GTX 950CPU - 1.0% 0.79 ГГц
GPU - 42 % 135 МГц
CPU - 2.3% 0.79 ГГц
GPU - 41 % 135 МГц
CPU - 1.0% 0.79 ГГц
GPU - 43 % 696 МГц

Выводы:
1. UpdateSubresource самый оптимальный по нагрузке. Но есть баг драйвера на Intel.
2. WriteToSubresource дает большую нагрузку на CPU на Nvidia. Работает только на Win10.
3. Map_memcpy дает большую нагрузку на GPU. Работает везде.
Название: От: MPC VR - DX11SubPic
Отправлено: Aleksoid1978 от 15 мая 2022, 11:47:22
Ну и тогда предлагаю оставить как есть (UpdateSubresource) и пусть это будет на совести драйверов Intel. Ну либо делать проверку и для Intel - Map_memcpy, для остальных - как есть.
Название: От: MPC VR - DX11SubPic
Отправлено: V0lt от 04 июня 2022, 10:30:33
Кстати о субтитрах и HDR.

Если у нас на выходе из рендерера SDR, то субтитры накладываются как есть.

Если мы выводим на дисплей в формате HDR, то надо корректировать гамму. Иначе юзеры жалуются на сильную яркость белого текста.
Самый оптимальный способ сделать корректировку - поменять шейдер, который ранее использовался перед вызовом m_pSub11CallBack->Render11.
Соответственно 6e712d7c6 (https://github.com/Aleksoid1978/VideoRenderer/commit/6e712d7c6a71044a1c4021e15a5ae0db88fd49d0) и 9cdcf6375 (https://github.com/Aleksoid1978/MPC-BE/commit/9cdcf6375578b4f1a31fd3ea1547377705bba021) надо будет сначала откатить.

Пример шейдера, есть в коммите для Kodi (https://github.com/xbmc/xbmc/pull/18984/commits/892df0b3d04e2cc4808bd34199f6fb3034cbb47f).

04 июня 2022, 12:42:11
Тестовые билды - Subtitles.HDR.Passthrough (https://disk.yandex.ru/d/RveS2-0zzsfWAg)
Использовать совместно.