From 5b4a24b841c00a400c5517d16245bfe2d5d952ce Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Sun, 27 Jan 2019 10:42:44 +0200 Subject: [PATCH] Show monitor rotation and color space info if DXGI 1.6 is supported. --- od-win32/direct3d11.cpp | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/od-win32/direct3d11.cpp b/od-win32/direct3d11.cpp index b4dd818e..e2d516a5 100644 --- a/od-win32/direct3d11.cpp +++ b/od-win32/direct3d11.cpp @@ -3,6 +3,7 @@ #include "resource.h" #include +#include #include #include @@ -3400,15 +3401,29 @@ static int xxD3D11_init2(HWND ahwnd, int monid, int w_w, int w_h, int t_w, int t d3d->outputAdapter = adapterOutput; - ComPtr adapterOutput1; - result = adapterOutput->QueryInterface(__uuidof(IDXGIOutput1), &adapterOutput1); + ComPtr adapterOutputx; + ComPtr adapterOutput6; + result = adapterOutput->QueryInterface(__uuidof(IDXGIOutput6), &adapterOutput6); if (FAILED(result)) { - write_log(_T("IDXGIOutput QueryInterface %08x\n"), result); - return 0; + write_log(_T("IDXGIOutput6 QueryInterface %08x\n"), result); + ComPtr adapterOutput1; + result = adapterOutput->QueryInterface(__uuidof(IDXGIOutput1), &adapterOutput1); + if (FAILED(result)) { + write_log(_T("IDXGIOutput QueryInterface %08x\n"), result); + return 0; + } + adapterOutputx = adapterOutput1; + } else { + DXGI_OUTPUT_DESC1 desc1; + result = adapterOutput6->GetDesc1(&desc1); + if (SUCCEEDED(result)) { + write_log(_T("Monitor Rotation=%d BPC=%d ColorSpace=%d\n"), desc1.Rotation, desc1.BitsPerColor, desc1.ColorSpace); + } + adapterOutputx = adapterOutput6; } // Get the number of modes that fit the display format for the adapter output (monitor). - result = adapterOutput1->GetDisplayModeList1(d3d->scrformat, DXGI_ENUM_MODES_INTERLACED, &numModes, NULL); + result = adapterOutputx->GetDisplayModeList1(d3d->scrformat, DXGI_ENUM_MODES_INTERLACED, &numModes, NULL); if (FAILED(result)) { write_log(_T("IDXGIOutput1 GetDisplayModeList1 %08x\n"), result); @@ -3424,7 +3439,7 @@ static int xxD3D11_init2(HWND ahwnd, int monid, int w_w, int w_h, int t_w, int t } // Now fill the display mode list structures. - result = adapterOutput1->GetDisplayModeList1(d3d->scrformat, DXGI_ENUM_MODES_INTERLACED, &numModes, displayModeList); + result = adapterOutputx->GetDisplayModeList1(d3d->scrformat, DXGI_ENUM_MODES_INTERLACED, &numModes, displayModeList); if (FAILED(result)) { write_log(_T("IDXGIAdapter1 GetDesc %08x\n"), result); @@ -3503,7 +3518,7 @@ static int xxD3D11_init2(HWND ahwnd, int monid, int w_w, int w_h, int t_w, int t md1.Height = w_h; md1.Scaling = DXGI_MODE_SCALING_UNSPECIFIED; md1.ScanlineOrdering = apm->gfx_interlaced ? DXGI_MODE_SCANLINE_ORDER_UPPER_FIELD_FIRST : DXGI_MODE_SCANLINE_ORDER_PROGRESSIVE; - result = adapterOutput1->FindClosestMatchingMode1(&md1, &md2, NULL); + result = adapterOutputx->FindClosestMatchingMode1(&md1, &md2, NULL); if (FAILED(result)) { write_log(_T("FindClosestMatchingMode1 %08x\n"), result); } else { -- 2.47.3