Skip to content

Commit 2bfbb0e

Browse files
author
Bud
committed
HDR+ Toggle
- Added support for HDR10+ support toggle in xml (12 bit depth) - Added xml as resource file (Easier to edit)
1 parent 76f6893 commit 2bfbb0e

4 files changed

Lines changed: 135 additions & 4 deletions

File tree

Virtual Display Driver (HDR)/MttVDD/Driver.cpp

Lines changed: 125 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ wstring gpuname;
8989
wstring confpath = L"C:\\VirtualDisplayDriver";
9090
bool logsEnabled = false;
9191
bool debugLogs;
92+
bool HDRPlus = false;
9293

9394

9495

@@ -351,6 +352,108 @@ void vddlog(const char* type, const char* message) {
351352
}
352353

353354

355+
356+
bool HDRPLUSEnabledQuery() {
357+
wstring settingsname = confpath + L"\\vdd_settings.xml";
358+
HKEY hKey;
359+
DWORD dwValue;
360+
DWORD dwBufferSize = sizeof(dwValue);
361+
LONG lResult = RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\MikeTheTech\\VirtualDisplayDriver", 0, KEY_READ, &hKey);
362+
363+
if (lResult == ERROR_SUCCESS) {
364+
vddlog("d", "Get HDRPlus - Successfully opened registry key.");
365+
366+
lResult = RegQueryValueExW(hKey, L"HDRPLUS", NULL, NULL, (LPBYTE)&dwValue, &dwBufferSize);
367+
if (lResult == ERROR_SUCCESS) {
368+
RegCloseKey(hKey);
369+
vddlog("d", "Get HDRPlus - HDRPLUS value retrieved from registry.");
370+
371+
if (dwValue == 1) {
372+
vddlog("d", "Get HDRPlus - HDRPLUS is enabled (value = 1).");
373+
return true;
374+
}
375+
else if (dwValue == 0) {
376+
vddlog("d", "Get HDRPlus - HDRPLUS is disabled (value = 0). Checking XML settings.");
377+
goto check_xml;
378+
}
379+
}
380+
else {
381+
vddlog("e", "Get HDRPlus - Failed to retrieve HDRPLUS value from registry. Attempting to read as string.");
382+
wchar_t path[MAX_PATH];
383+
dwBufferSize = sizeof(path);
384+
lResult = RegQueryValueExW(hKey, L"HDRPLUS", NULL, NULL, (LPBYTE)path, &dwBufferSize);
385+
386+
if (lResult == ERROR_SUCCESS) {
387+
wstring HDRValue(path);
388+
RegCloseKey(hKey);
389+
vddlog("d", "Get HDRPlus - HDRPLUS string value retrieved from registry. ");
390+
391+
if (HDRValue == L"true" || HDRValue == L"1") {
392+
vddlog("d", "Get HDRPlus - HDRPLUS is enabled (string value).");
393+
return true;
394+
}
395+
else if (HDRValue == L"false" || HDRValue == L"0") {
396+
vddlog("d", " Get HDRPlus - HDRPLUS is disabled (string value). Checking XML settings.");
397+
goto check_xml;
398+
}
399+
}
400+
RegCloseKey(hKey);
401+
vddlog("e", " Get HDRPlus - Failed to retrieve HDRPLUS string value from registry.");
402+
}
403+
}
404+
else {
405+
vddlog("e", "Get HDRPlus - Failed to open registry key for HDRPLUS.");
406+
}
407+
408+
check_xml:
409+
CComPtr<IStream> pFileStream;
410+
HRESULT hr = SHCreateStreamOnFileEx(settingsname.c_str(), STGM_READ, FILE_ATTRIBUTE_NORMAL, FALSE, nullptr, &pFileStream);
411+
412+
if (FAILED(hr)) {
413+
vddlog("e", "Get HDRPlus - Failed to create file stream for XML settings.");
414+
return false;
415+
}
416+
vddlog("d", "Get HDRPlus - File stream created for XML settings.");
417+
418+
CComPtr<IXmlReader> pReader;
419+
hr = CreateXmlReader(__uuidof(IXmlReader), (void**)&pReader, nullptr);
420+
421+
if (FAILED(hr)) {
422+
vddlog("e", "Get HDRPlus - Failed to create XML reader.");
423+
return false;
424+
}
425+
vddlog("d", "Get HDRPlus - XML reader created.");
426+
427+
hr = pReader->SetInput(pFileStream);
428+
if (FAILED(hr)) {
429+
vddlog("e", "Get HDRPlus - Failed to set input for XML reader.");
430+
return false;
431+
}
432+
vddlog("d", "Get HDRPlus - Input set for XML reader.");
433+
434+
XmlNodeType nodeType;
435+
const wchar_t* pwszLocalName;
436+
bool xmlHDRvalue = false;
437+
438+
while (S_OK == pReader->Read(&nodeType)) {
439+
if (nodeType == XmlNodeType_Element) {
440+
pReader->GetLocalName(&pwszLocalName, nullptr);
441+
if (wcscmp(pwszLocalName, L"HDRPlus") == 0) {
442+
pReader->Read(&nodeType);
443+
if (nodeType == XmlNodeType_Text) {
444+
const wchar_t* pwszValue;
445+
pReader->GetValue(&pwszValue, nullptr);
446+
xmlHDRvalue = (wcscmp(pwszValue, L"true") == 0);
447+
vddlog("i", xmlHDRvalue ? "HDRPlus is enabled." : "HDRPlus is disabled.");
448+
break;
449+
}
450+
}
451+
}
452+
}
453+
454+
return xmlHDRvalue;
455+
}
456+
354457
void LogIddCxVersion() {
355458
IDARG_OUT_GETVERSION outArgs;
356459
NTSTATUS status = IddCxGetVersion(&outArgs);
@@ -807,6 +910,7 @@ extern "C" NTSTATUS DriverEntry(
807910
Config.EvtDriverUnload = EvtDriverUnload;
808911
initpath();
809912
logsEnabled = LogEnabledQuery();
913+
HDRPlus = HDRPLUSEnabledQuery();
810914
vddlog("i", "Driver Starting");
811915
string utf8_confpath = WStringToString(confpath);
812916
string logtext = "VDD Path: " + utf8_confpath;
@@ -2039,7 +2143,13 @@ void CreateTargetMode2(IDDCX_TARGET_MODE2& Mode, UINT Width, UINT Height, UINT V
20392143
vddlog("d", logStream.str().c_str());
20402144

20412145
Mode.Size = sizeof(Mode);
2042-
Mode.BitsPerComponent.Rgb = IDDCX_BITS_PER_COMPONENT_8 | IDDCX_BITS_PER_COMPONENT_10;
2146+
if (HDRPlus) {
2147+
Mode.BitsPerComponent.Rgb = IDDCX_BITS_PER_COMPONENT_8 | IDDCX_BITS_PER_COMPONENT_12;
2148+
}
2149+
else {
2150+
Mode.BitsPerComponent.Rgb = IDDCX_BITS_PER_COMPONENT_8 | IDDCX_BITS_PER_COMPONENT_10;
2151+
}
2152+
20432153

20442154
logStream.str("");
20452155
logStream << "IDDCX_TARGET_MODE2 configured with Size: " << Mode.Size
@@ -2138,7 +2248,12 @@ NTSTATUS IddSampleEvtIddCxAdapterQueryTargetInfo(
21382248
UNREFERENCED_PARAMETER(pInArgs);
21392249

21402250
pOutArgs->TargetCaps = IDDCX_TARGET_CAPS_HIGH_COLOR_SPACE;
2141-
pOutArgs->DitheringSupport.Rgb = IDDCX_BITS_PER_COMPONENT_10;
2251+
if (HDRPlus) {
2252+
pOutArgs->DitheringSupport.Rgb = IDDCX_BITS_PER_COMPONENT_12;
2253+
}
2254+
else {
2255+
pOutArgs->DitheringSupport.Rgb = IDDCX_BITS_PER_COMPONENT_10;
2256+
}
21422257

21432258
logStream.str("");
21442259
logStream << "Target capabilities set to: " << pOutArgs->TargetCaps
@@ -2212,7 +2327,14 @@ NTSTATUS IddSampleEvtIddCxParseMonitorDescription2(
22122327
pInArgs->pMonitorModes[ModeIndex].Size = sizeof(IDDCX_MONITOR_MODE2);
22132328
pInArgs->pMonitorModes[ModeIndex].Origin = IDDCX_MONITOR_MODE_ORIGIN_MONITORDESCRIPTOR;
22142329
pInArgs->pMonitorModes[ModeIndex].MonitorVideoSignalInfo = s_KnownMonitorModes2[ModeIndex];
2215-
pInArgs->pMonitorModes[ModeIndex].BitsPerComponent.Rgb = IDDCX_BITS_PER_COMPONENT_8 | IDDCX_BITS_PER_COMPONENT_10;
2330+
2331+
if (HDRPlus) {
2332+
pInArgs->pMonitorModes[ModeIndex].BitsPerComponent.Rgb = IDDCX_BITS_PER_COMPONENT_8 | IDDCX_BITS_PER_COMPONENT_12;
2333+
}
2334+
else {
2335+
pInArgs->pMonitorModes[ModeIndex].BitsPerComponent.Rgb = IDDCX_BITS_PER_COMPONENT_8 | IDDCX_BITS_PER_COMPONENT_10;
2336+
}
2337+
22162338

22172339
logStream << "\n ModeIndex: " << ModeIndex
22182340
<< "\n Size: " << pInArgs->pMonitorModes[ModeIndex].Size

Virtual Display Driver (HDR)/MttVDD/MttVDD.vcxproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -329,6 +329,9 @@
329329
<ItemGroup>
330330
<None Include="readme.md" />
331331
</ItemGroup>
332+
<ItemGroup>
333+
<Xml Include="..\vdd_settings.xml" />
334+
</ItemGroup>
332335
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
333336
<ImportGroup Label="ExtensionTargets">
334337
</ImportGroup>

Virtual Display Driver (HDR)/MttVDD/MttVDD.vcxproj.filters

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,4 +42,9 @@
4242
<ItemGroup>
4343
<None Include="readme.md" />
4444
</ItemGroup>
45+
<ItemGroup>
46+
<Xml Include="..\vdd_settings.xml">
47+
<Filter>Resource Files</Filter>
48+
</Xml>
49+
</ItemGroup>
4550
</Project>

Virtual Display Driver (HDR)/vdd_settings.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,8 @@
6161

6262
</resolutions>
6363
<options>
64-
<logging>false</logging>
64+
<HDRPlus>false</HDRPlus>
65+
<logging>false</logging>
6566
<!-- DEBUG LOGGING FOR EXPERTS ONLY!-->
6667
<debuglogging>false</debuglogging>
6768
<!-- DEBUG LOGS CAN GENERATE 1000+ LINES-->

0 commit comments

Comments
 (0)