diff --git a/libobs-d3d11/d3d11-subsystem.cpp b/libobs-d3d11/d3d11-subsystem.cpp index 3b858b8a1..8fad75087 100644 --- a/libobs-d3d11/d3d11-subsystem.cpp +++ b/libobs-d3d11/d3d11-subsystem.cpp @@ -72,6 +72,12 @@ static bool screen_supports_hdr(gs_device_t *device, HMONITOR hMonitor) if (!factory1->IsCurrent()) { device->InitFactory(); factory1 = device->factory; + device->monitor_to_hdr.clear(); + } + + for (const std::pair &pair : device->monitor_to_hdr) { + if (pair.first == hMonitor) + return pair.second; } ComPtr adapter; @@ -86,9 +92,13 @@ static bool screen_supports_hdr(gs_device_t *device, HMONITOR hMonitor) if (SUCCEEDED(output->QueryInterface(&output6))) { DXGI_OUTPUT_DESC1 desc1; if (SUCCEEDED(output6->GetDesc1(&desc1)) && - desc1.Monitor == hMonitor) { - return desc1.ColorSpace == - DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020; + (desc1.Monitor == hMonitor)) { + const bool hdr = + desc1.ColorSpace == + DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020; + device->monitor_to_hdr.emplace_back( + hMonitor, hdr); + return hdr; } } } diff --git a/libobs-d3d11/d3d11-subsystem.hpp b/libobs-d3d11/d3d11-subsystem.hpp index 34297e00b..6ffc5fcb8 100644 --- a/libobs-d3d11/d3d11-subsystem.hpp +++ b/libobs-d3d11/d3d11-subsystem.hpp @@ -1036,6 +1036,8 @@ struct gs_device { vector loss_callbacks; gs_obj *first_obj = nullptr; + vector> monitor_to_hdr; + void InitCompiler(); void InitFactory(); void ReorderAdapters(uint32_t &adapterIdx);