From 56e44f8635578d0520cb8660862bb13784e65cd9 Mon Sep 17 00:00:00 2001 From: Marek Biolik Date: Thu, 30 Jan 2025 19:43:31 +0100 Subject: [PATCH] [UWP] Prefere 60Hz display mode instead of 120Hz --- starboard/shared/uwp/application_uwp.cc | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/starboard/shared/uwp/application_uwp.cc b/starboard/shared/uwp/application_uwp.cc index 472a03878e43..cd2ed0016aa0 100644 --- a/starboard/shared/uwp/application_uwp.cc +++ b/starboard/shared/uwp/application_uwp.cc @@ -147,7 +147,7 @@ const Platform::String ^ kGenericPnpMonitorAqs = ref new Platform::String( L"True"); const uint32_t kYuv420BitsPerPixelForHdr10Mode = 24; -const uint32_t kHdr4kRefreshRateMaximum = 60; +const uint32_t kRefreshRateMaximum = 60; const uint32_t k4kResolutionWidth = 3840; const uint32_t k4kResolutionHeight = 2160; @@ -976,6 +976,8 @@ void ApplicationUwp::UpdateDisplayPreferredMode() { ScopedLock lock(preferred_display_mode_mutex_); preferred_display_mode_hdmi_ = nullptr; preferred_display_mode_hdr_ = nullptr; + Windows::Graphics::Display::Core::HdmiDisplayMode ^ + preferred_display_mode_sdr_ = nullptr; if (!ApiInformation::IsTypePresent( "Windows.Graphics.Display.Core.HdmiDisplayInformation")) { return; @@ -988,6 +990,11 @@ void ApplicationUwp::UpdateDisplayPreferredMode() { preferred_display_mode_hdmi_ = hdmi_display_info->GetCurrentDisplayMode(); for (auto mode : hdmi_display_info->GetSupportedDisplayModes()) { + // 120Hz is not supported in UWP apps even though the app can select 120Hz display mode. + // Microsoft Support recommend that UWPs do not select 120Hz display mode. + if (mode->RefreshRate > kRefreshRateMaximum) { + continue; + } // Check that resolution matches the preferred display mode. if (mode->ResolutionWidthInRawPixels != preferred_display_mode_hdmi_->ResolutionWidthInRawPixels || @@ -995,6 +1002,11 @@ void ApplicationUwp::UpdateDisplayPreferredMode() { preferred_display_mode_hdmi_->ResolutionHeightInRawPixels) { continue; } + if (preferred_display_mode_hdmi_->RefreshRate > kRefreshRateMaximum && + (!preferred_display_mode_sdr_ || + preferred_display_mode_sdr_->RefreshRate < mode->RefreshRate)) { + preferred_display_mode_sdr_ = mode; + } // Verify HDR metadata and transfer function are supported. if (!mode->Is2086MetadataSupported || !mode->IsSmpte2084Supported) { continue; @@ -1004,18 +1016,14 @@ void ApplicationUwp::UpdateDisplayPreferredMode() { mode->ColorSpace != HdmiDisplayColorSpace::BT2020) { continue; } - // We don't serve 4k HDR videos over 60fps, skipping display modes that will - // consume more power than needed. - if (mode->ResolutionWidthInRawPixels >= k4kResolutionWidth && - mode->ResolutionHeightInRawPixels >= k4kResolutionHeight && - mode->RefreshRate > kHdr4kRefreshRateMaximum) { - continue; - } if (!preferred_display_mode_hdr_ || preferred_display_mode_hdr_->RefreshRate < mode->RefreshRate) { preferred_display_mode_hdr_ = mode; } } + preferred_display_mode_hdmi_ = preferred_display_mode_sdr_ + ? preferred_display_mode_sdr_ + : preferred_display_mode_hdmi_; } bool ApplicationUwp::DispatchNextEvent() {