DXGI SwapChain Представляет производительность после изменения размера буфера при перемещении окна по монитору - PullRequest
0 голосов
/ 31 октября 2019

Я создаю новую программу D3D11 с большим размером окна (1080P). Только с самым простым выводом (Present после ClearRenderTargetView и вызовом отрисовки, рисующим один треугольник), я обнаружил, что при изменении размера SwapChain в ответ на сообщение об изменении размера окон производительность (из-за использования графического процессора в диспетчере задач) значительно изменяется. Если я воссоздаю SwapChain для окна на главном мониторе при использовании встроенной графической карты Intel, или воссоздаю SwapChain для окна на втором мониторе при использовании выделенной графической карты NVidia, производительность после изменения размера будет хорошей (использование графического процессора <5%, в основном из »3D "), но если я воссоздаю SwapChain при использовании другой видеокарты, использование становится ~ 30%, и диспетчер задач сообщает, что использование графического процессора происходит из" Копировать ". </p>

Интересно, существует ли связь между адаптером и выходом и как мы должны его использовать.

Код, используемый для создания SwapChain

    DXGI_SWAP_CHAIN_DESC1 swapChainDesc = {};
    swapChainDesc.Format = WindowDXGIFormat;
    swapChainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
    swapChainDesc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL;
    swapChainDesc.BufferCount = 2;
    swapChainDesc.SampleDesc.Count = 1;
    swapChainDesc.AlphaMode = DXGI_ALPHA_MODE_IGNORE;
    swapChainDesc.Scaling = DXGI_SCALING_NONE;
    dxFactory->CreateSwapChainForHwnd(Device.Get(), hwnd, &swapChainDesc, 0, 0, SwapChain.GetAddressOf());

где WindowDXGIFormat определяется как DXGI_FORMAT_R8G8B8A8_UNORM. Изменение размера SwapChain выполняется просто через IDXGISwapChain1::ResizeBuffers после выпуска RTV.

Пожалуйста, игнорируйте проблему, которую я не проверяю HRESULT, возвращенную из COM API.

РЕДАКТИРОВАТЬ Я нашелIDXGIAdapter имеет функцию EnumOutputs, которая, по-видимому, обеспечивает эти отношения ассоциации, но я до сих пор не понимаю, как управлять ассоциацией при вызове ResizeBuffers.

...