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

Хотя s3 SDK прекрасно работает, но я использовал простой поток из AWS для чтения и отправки фрагментов данных в ответ.

24
задан smt 20 November 2008 в 08:47
поделиться

4 ответа

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

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

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

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

Когда DWM составляет экран, все становится еще сложнее. Here, DWM owns the primary surface and needs to draw application windows there. To make it possible, every window has an associated surface holding its contents, called redirection surface (which allows DWM to enable window ghosting, glass effects, and all that good stuff). Every time D3D application issues a frame, it adds a blit to a redirection surface. That way, several blits need to happen: blit to a redirection surface by the app, blit from a redirection surface to the primary by DWM, which is, again, some overhead compared to fullscreen.

Note all of that additional work is on the GPU, so it doesn't affect CPU performance.

Stuff to read further:

http://blogs.msdn.com/greg_schechter/archive/2006/03/19/555087.aspx

http://blogs.msdn.com/greg_schechter/archive/2006/05/02/588934.aspx

http://blogs.msdn.com/greg_schechter/archive/2006/03/05/544314.aspx

23
ответ дан 28 November 2019 в 23:47
поделиться

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

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

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

5
ответ дан 28 November 2019 в 23:47
поделиться

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

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

8
ответ дан 28 November 2019 в 23:47
поделиться

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

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

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

1
ответ дан 28 November 2019 в 23:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: