Почему приложение Direct3D работает лучше в полноэкранном режиме?

StackOverflow https://stackoverflow.com/questions/304669

Вопрос

Производительность приложения Direct3D в полноэкранном режиме значительно выше, чем в оконном режиме. Каковы технические причины этого?

Я полагаю, это связано с тем, что полноэкранное приложение может получить эксклюзивный контроль над дисплеем. Но почему приложение не может получить эксклюзивный контроль над частью экрана (т.е. окном) и иметь такие же преимущества в производительности?

Это было полезно?

Решение

Вот примечания к скале о том, как все работает под ним.

Экран монитора всегда должен быть связан с так называемой первичной поверхностью, чтобы иметь возможность отображать что-либо, то есть видеокарта может сканировать только одну поверхность в видеопамяти.

Когда приложение работает в полноэкранном режиме (и все настроено правильно для включения переворачивания), первичная поверхность является лишь одним из буферов приложений и переворачивается в другой буфер каждый кадр. Это наиболее эффективный способ представления на экране, но для этого требуется, чтобы приложение владело всей областью монитора (т.е. всей первичной поверхностью).

Когда полноэкранного приложения нет, а DWM выключен, первичная поверхность принадлежит ОС, и каждое оконное приложение выполняет переход от резервного буфера приложения к первичной поверхности. Для завершения этого блита требуется некоторое время на GPU (так же как и для других приложений, видимых на экране), поэтому он не так эффективен, как полноэкранный режим. XP работал таким образом.

Когда DWM создает экран, все становится еще сложнее. Здесь DWM владеет первичной поверхностью и должен рисовать там окна приложений. Чтобы сделать это возможным, каждое окно имеет ассоциированную поверхность, содержащую его содержимое, называемую поверхностью перенаправления (которая позволяет DWM активировать окошко с окошками, эффекты стекла и все такое хорошее). Каждый раз, когда приложение D3D выдает кадр, оно добавляет блик к поверхности перенаправления. Таким образом, должно произойти несколько скачков: перенаправление на поверхность перенаправления приложением, перенаправление с поверхности перенаправления на первичный объект с помощью DWM, что, опять же, приводит к некоторым накладным расходам по сравнению с полноэкранным режимом.

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

Материал для чтения далее:

http://blogs.msdn.com/greg_schechter/ Архив / 2006/03/19 / 555087.aspx

http://blogs.msdn.com/greg_schechter/ Архив / 2006/05/02 / 588934.aspx

http://blogs.msdn.com/greg_schechter/ Архив / 2006/03/05 / 544314.aspx

Другие советы

немного в MSDN это говорит о том, что в полноэкранном режиме используется перелистывание буфера, если оно настроено правильно, в отличие от блиттинга. Это имеет смысл.

Конечно, вы можете (и, в некотором смысле, можете) предоставить исключительный контроль над частью экрана приложению, но что происходит с остальной частью экрана? В остальных окнах вам все еще приходится бить, проверять окклюзию и т. Д., И я думаю, что именно это приводит к снижению производительности.

Я добавлю в @ aib ответ, что остальная часть экрана управляется ОС. Таким образом, если что-то еще нужно рисовать / обрабатывать одновременно, это должно привести к снижению производительности.

Например, если у вас есть видео, воспроизводимое в проигрывателе Windows Media в одном окне, а затем запустите Civilization в другом окне, когда Civ начнет делать свою причудливую графику, ему нужно будет разделить пространство экрана со всем остальным (например, с видео.

Принимая во внимание, что если приложение DirectX имеет полноэкранный режим, все остальное может быть " обновление " или "играем", но не рисуем.

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

Нет конкуренции за видеоресурсы (конвейер, память текстур и т. д.)

В частности, загрузка текстур может стать большим узким местом. Чем меньше вам придется это делать (потому что у вас все это есть), тем лучше.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top