MCPcopy Create free account
hub / github.com/RavEngine/RavEngine / DXGetVideoAdapterDesc

Function DXGetVideoAdapterDesc

deps/LLGL/sources/Renderer/DXCommon/DXCore.cpp:484–545  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

482}
483
484VideoAdapterDescriptor DXGetVideoAdapterDesc(IDXGIAdapter* adapter)
485{
486 ComPtr<IDXGIOutput> output;
487
488 /* Query adapter description */
489 DXGI_ADAPTER_DESC desc;
490 adapter->GetDesc(&desc);
491
492 /* Setup adapter information */
493 VideoAdapterDescriptor videoAdapterDesc;
494
495 videoAdapterDesc.name = std::wstring(desc.Description);
496 videoAdapterDesc.vendor = GetVendorByID(desc.VendorId);
497 videoAdapterDesc.videoMemory = static_cast<uint64_t>(desc.DedicatedVideoMemory);
498
499 /* Enumerate over all adapter outputs */
500 for (UINT j = 0; adapter->EnumOutputs(j, &output) != DXGI_ERROR_NOT_FOUND; ++j)
501 {
502 /* Get output description */
503 DXGI_OUTPUT_DESC desc;
504 output->GetDesc(&desc);
505
506 /* Query number of display modes */
507 UINT numModes = 0;
508 output->GetDisplayModeList(DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_ENUM_MODES_INTERLACED, &numModes, nullptr);
509
510 /* Query display modes */
511 std::vector<DXGI_MODE_DESC> modeDesc(numModes);
512
513 auto hr = output->GetDisplayModeList(DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_ENUM_MODES_INTERLACED, &numModes, modeDesc.data());
514 DXThrowIfFailed(hr, "failed to get display mode list with format DXGI_FORMAT_R8G8B8A8_UNORM");
515
516 /* Add output information to the current adapter */
517 VideoOutputDescriptor videoOutput;
518
519 for (UINT i = 0; i < numModes; ++i)
520 {
521 DisplayModeDescriptor displayMode;
522 {
523 displayMode.resolution.width = modeDesc[i].Width;
524 displayMode.resolution.height = modeDesc[i].Height;
525 displayMode.refreshRate = (modeDesc[i].RefreshRate.Denominator > 0 ? modeDesc[i].RefreshRate.Numerator / modeDesc[i].RefreshRate.Denominator : 0);
526 }
527 videoOutput.displayModes.push_back(displayMode);
528 }
529
530 /* Remove duplicate display modes */
531 std::sort(videoOutput.displayModes.begin(), videoOutput.displayModes.end(), CompareSWO);
532
533 videoOutput.displayModes.erase(
534 std::unique(videoOutput.displayModes.begin(), videoOutput.displayModes.end()),
535 videoOutput.displayModes.end()
536 );
537
538 /* Add output to the list and release handle */
539 videoAdapterDesc.outputs.push_back(videoOutput);
540
541 output.Reset();

Callers 2

QueryVideoAdaptersMethod · 0.85
QueryVideoAdaptersMethod · 0.85

Calls 9

DXThrowIfFailedFunction · 0.85
sortFunction · 0.50
GetDescMethod · 0.45
dataMethod · 0.45
push_backMethod · 0.45
beginMethod · 0.45
endMethod · 0.45
eraseMethod · 0.45
ResetMethod · 0.45

Tested by

no test coverage detected