Я недавно получал немного отставания, так как я переместил весь мой код рендеринга C# SlimDX DX11 из моей формы (да, я ленивый разработчик), чтобы на заказ. Я хлопнул свою программу в EQATEC Profiler и получил это как основной вклад в моей лаг:Swapchain.Present() слишком долго, вызывая отставание
Теперь ясно, что здесь что бы ни в postRender() действительно коробления драгоценные миллисекунды. На самом деле, какой бы сумасшедший, запутанный код, который у меня есть, эффективно снижает частоту кадров до ~ 15 FPS самостоятельно.
Так что же в postRender()? Только одна строка кода:
swapChain.Present(0, PresentFlags.None);
Я просто понятия не имею, что приводившая замедлить настолько, что я не сделал каких-либо изменений в код swapchain вообще. Все, что я изменил, это разрешение экрана (1680x1050), но это должно быть абсолютно нормально (для справки, эта машина может запускать crysis2 при максимальных настройках при этом разрешении, не разбивая пота).
Есть ли у кого-нибудь идеи, что может заставить swapchain так долго представлять или где я должен смотреть дальше на проблемы?
EDIT:
Глядя на структуру моего кода, функция моя RenderFrame() выглядит следующим образом:
preRender();
DeferredRender(preShader);
//Composite scene to output image
CompositeScene(compositeShader);
//Post Process
PostProcess(postProcShader);
//Depth of Field
DoF(dofShader);
//Present the swapchain
postRender();
Результаты некоторых из этих функций на основе функций ранее (например, , DeferredRender использует четыре цели рендеринга для захвата Diffuse lighting, Normals, Positions и Color в пиксельном режиме. Затем CompositeScene объединяет их. Это потребует, чтобы графический процессор вычислил предыдущий шаг, прежде чем он сможет продолжить. наряду с DoF, требующим результатов PostProcess и т. д. Поэтому единственный шейдер, который возможно, будет содержать Swapchain.Present() вверх должен быть шейдер, который работает в функции DoF, так как все остальные шейдеры заставляют CPU блокироваться, пока они не закончатся. Верный?
Вы нашли решение проблемы? – Kayn
@ Kayn Да, один из моих шейдеров был невероятно неэффективным, и это поддерживало настоящий шаг. –