Skip to content

Commit f291df6

Browse files
committed
Включаем SuperResolution и для 10-битных видео, только если не активно ACM (Windows11 24H2 и выше).
1 parent 42b9192 commit f291df6

File tree

3 files changed

+18
-3
lines changed

3 files changed

+18
-3
lines changed

Source/DX11VideoProcessor.cpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -539,6 +539,8 @@ HRESULT CDX11VideoProcessor::Init(const HWND hwnd, const bool displayHdrChanged,
539539
m_bHdrDisplayModeEnabled = false;
540540
m_DisplayBitsPerChannel = 8;
541541

542+
m_bACMEnabled = false;
543+
542544
MONITORINFOEXW mi = { sizeof(mi) };
543545
GetMonitorInfoW(MonitorFromWindow(m_hWnd, MONITOR_DEFAULTTOPRIMARY), (MONITORINFO*)&mi);
544546
DisplayConfig_t displayConfig = {};
@@ -547,6 +549,8 @@ HRESULT CDX11VideoProcessor::Init(const HWND hwnd, const bool displayHdrChanged,
547549
m_bHdrDisplayModeEnabled = displayConfig.HDREnabled();
548550
m_bHdrPassthroughSupport = displayConfig.HDRSupported() && m_bHdrDisplayModeEnabled;
549551
m_DisplayBitsPerChannel = displayConfig.bitsPerChannel;
552+
553+
m_bACMEnabled = !m_bHdrDisplayModeEnabled && displayConfig.ACMEnabled();
550554
}
551555

552556
if (m_bIsFullscreen != m_pFilter->m_bIsFullscreen) {
@@ -1563,6 +1567,8 @@ bool CDX11VideoProcessor::HandleHDRToggle()
15631567
m_bHdrDisplayModeEnabled = displayConfig.HDREnabled();
15641568
m_bHdrPassthroughSupport = displayConfig.HDRSupported() && m_bHdrDisplayModeEnabled;
15651569
m_DisplayBitsPerChannel = displayConfig.bitsPerChannel;
1570+
1571+
m_bACMEnabled = !m_bHdrDisplayModeEnabled && displayConfig.ACMEnabled();
15661572
}
15671573
}
15681574

@@ -1812,7 +1818,7 @@ HRESULT CDX11VideoProcessor::InitializeD3D11VP(const FmtConvParams_t& params, co
18121818
return hr;
18131819
}
18141820

1815-
auto superRes = (m_bVPScaling && params.CDepth == 8 && !(m_bHdrPassthroughSupport && m_bHdrPassthrough && SourceIsHDR())) ? m_iVPSuperRes : SUPERRES_Disable;
1821+
auto superRes = (m_bVPScaling && (params.CDepth == 8 || !m_bACMEnabled) && !(m_bHdrPassthroughSupport && m_bHdrPassthrough && SourceIsHDR())) ? m_iVPSuperRes : SUPERRES_Disable;
18161822
m_bVPUseSuperRes = (m_D3D11VP.SetSuperRes(superRes) == S_OK);
18171823

18181824
auto rtxHDR = m_bVPRTXVideoHDR && m_bHdrPassthroughSupport && m_bHdrPassthrough && m_iTexFormat != TEXFMT_8INT && !SourceIsHDR();
@@ -3588,7 +3594,7 @@ void CDX11VideoProcessor::Configure(const Settings_t& config)
35883594
}
35893595

35903596
if (changeSuperRes) {
3591-
auto superRes = (m_bVPScaling && m_srcParams.CDepth == 8 && !(m_bHdrPassthroughSupport && m_bHdrPassthrough && SourceIsHDR())) ? m_iVPSuperRes : SUPERRES_Disable;
3597+
auto superRes = (m_bVPScaling && (m_srcParams.CDepth == 8 || !m_bACMEnabled) && !(m_bHdrPassthroughSupport && m_bHdrPassthrough && SourceIsHDR())) ? m_iVPSuperRes : SUPERRES_Disable;
35923598
m_bVPUseSuperRes = (m_D3D11VP.SetSuperRes(superRes) == S_OK);
35933599
}
35943600

Source/DX11VideoProcessor.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,8 @@ class CDX11VideoProcessor
161161
bool m_bHdrDisplaySwitching = false; // switching HDR display in progress
162162
bool m_bHdrDisplayModeEnabled = false;
163163
bool m_bHdrAllowSwitchDisplay = true;
164+
bool m_bACMEnabled = false;
165+
164166
UINT m_srcVideoTransferFunction = 0; // need a description or rename
165167

166168
std::map<std::wstring, bool> m_hdrModeSavedState;

Source/DisplayConfig.h

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* (C) 2020-2024 see Authors.txt
2+
* (C) 2020-2025 see Authors.txt
33
*
44
* This file is part of MPC-BE.
55
*
@@ -127,6 +127,13 @@ struct DisplayConfig_t {
127127

128128
return advancedColor.advancedColorEnabled && !advancedColor.wideColorEnforced && !advancedColor.advancedColorForceDisabled;
129129
}
130+
bool ACMEnabled() const {
131+
if (IsWindows11_24H2OrGreater()) {
132+
return windows1124H2Colors.wideColorSupported && windows1124H2Colors.wideColorUserEnabled;
133+
}
134+
135+
return false;
136+
}
130137
};
131138

132139
double GetRefreshRate(const wchar_t* displayName);

0 commit comments

Comments
 (0)