Git Product home page Git Product logo

parsec-vdd's Introduction


parsec-vdd

✨ Standalone Parsec Virtual Display
Create virtual display up to 4K@240Hz


ℹ About

This project demonstrates a standalone solution to create virtual displays by using Parsec VDD, without relying on the Parsec app.

The Virtual Display Driver (VDD) is required to enable virtual displays on a Windows host. Virtual displays is a feature available for Teams and Warp customers that lets you add up to 3 additional virtual displays to the host while connecting to a machine you own through Parsec.

Parsec VDD is a perfect software driver developed by Parsec. It utilizes the IddCx API (Indirect Display Driver) to create virtual displays on Windows 10+. This virtual display is particularly useful in situations where a physical monitor may not be available or when additional screens are desired.

One of the notable features of Parsec VDD is its support for a wide range of resolutions and refresh rates, including up to 4K and 240 Hz. This makes it well-suited for gaming, as it can provide a high-quality visual experience. It enables users to simulate the presence of additional screens or work without a physical monitor, enhancing flexibility and customization in display management.

📺 ParsecVDisplay App

This is a complete driver application to control the Parsec VDD, written in C# and WPF. It can show the number of virtual displays added, allows adding multiple virtual displays and removing a specific selected one. Also allows to change resolution and take screenshot, and more..

👉 Check out Releases to download it.

Full source code of this application is located in the app folder.

🚀 Using Core API

Make sure you have installed the driver:

The core API is designed as single C/C++ header, see 👉 core/parsec-vdd.h. It has detailed comments, and can be added to any existing projects. There is also a simple usage demo, see 👉 core/vdd-demo.cc.

You can also unzip the driver setup to obtain the driver files and nefconw CLI.

./ nefconw.exe driver/ mm.cat mm.dll mm.inf

Command line method to install the driver using nefconw (may require admin):

start /wait .\nefconw.exe --remove-device-node --hardware-id Root\Parsec\VDA --class-guid "4D36E968-E325-11CE-BFC1-08002BE10318"
start /wait .\nefconw.exe --create-device-node --class-name Display --class-guid "4D36E968-E325-11CE-BFC1-08002BE10318" --hardware-id Root\Parsec\VDA
start /wait .\nefconw.exe --install-driver --inf-path ".\driver\mm.inf"

In additional, you can run the driver setup in silent mode to install it quickly.

.\parsec-vdd-0.45.0.0.exe /S

😥 Known Limitations

This list shows the known limitations of Parsec VDD.

1. HDR support

Parsec VDD does not support HDR on its displays (see the EDID below). Theoretically, you can unlock support by editing the EDID, then adding HDR metadata and setting 10-bit+ color depth. Unfortunately, you cannot flash its firmware like a physical device, or modify the registry value.

All IDDs have their own fixed EDID block inside the driver binary to initialize the monitor specs. So the solution is to modify this block in the driver DLL (mm.dll), then reinstall it with nefconw CLI (see above).

2. Custom resolutions

Before connecting, the virtual display looks in the HKEY_LOCAL_MACHINE\SOFTWARE\Parsec\vdd registry for additional preset resolutions. Currently this supports a maximum of 5 values.

SOFTWARE\Parsec\vdd
  key: 0 -> 5 | (width, height, hz)

To unlock this limit, you need to patch the driver DLL the same way as above, but 5 is enough for personal use.

😑 Known Bugs

This is a list of known issues when working with standalone Parsec VDD.

1. Incompatible with Parsec Privacy Mode

Alt text

If you have enabled "Privacy Mode" in Parsec Host settings, please disable it and clear the connected display configruations in the following Registry path.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\Connectivity

This option causes your main display to turn off when virtual displays are added, making it difficult to turn the display on and disrupting the remote desktop session.

2. // todo

🤔 Comparison with other IDDs

The table below shows a comparison with other popular Indirect Display Driver projects.

Project Iddcx version Signed Gaming HDR H-Cursor Tweakable Controller
usbmmidd_v2
IddSampleDriver 1.2
RustDeskIddDriver 1.2
Virtual-Display-Driver (HDR) 1.10
virtual-display-rs 1.5 #81
parsec-vdd 1.4 🆗

✅ - full support, 🆗 - limited support

Signed means that the driver files have a valid digital signature. H-Cursor means hardware cursor support, without it you will get double cursor on some remote desktop apps. Tweakable is the ability to customize display modes. Visit MSDN IddCx versions to check the minimum supported Windows version.

📘 Parsec VDD Specs

Preset display modes

All of the following display modes are set by driver default.

Resolution Common name Aspect ratio Refresh rates (Hz)
4096 x 2160 DCI 4K 1.90:1 (256:135) 24/30/60/144/240
3840 x 2160 4K UHD 16:9 24/30/60/144/240
3840 x 1600 UltraWide 24:10 24/30/60/144/240
3840 x 1080 UltraWide 32:9 (2x 16:9 FHD) 24/30/60/144/240
3440 x 1440 21.5:9 (43:18) 24/30/60/144/240
3240 x 2160 3:2 60
3200 x 1800 3K 16:9 24/30/60/144/240
3000 x 2000 3:2 60
2880 x 1800 2.8K 16:10 60
2880 x 1620 2.8K 16:9 24/30/60/144/240
2736 x 1824 60
2560 x 1600 2K 16:10 24/30/60/144/240
2560 x 1440 2K 16:9 24/30/60/144/240
2560 x 1080 UltraWide 21:9 24/30/60/144/240
2496 x 1664 60
2256 x 1504 60
2048 x 1152 60/144/240
1920 x 1200 FHD 16:10 60/144/240
1920 x 1080 FHD 16:9 24/30/60/144/240
1800 x 1200 FHD 3:2 60
1680 x 1050 HD+ 16:10 60/144/240
1600 x 1200 HD+ 4:3 24/30/60/144/240
1600 x 900 HD+ 16:9 60/144/240
1440 x 900 HD 16:10 60/144/240
1366 x 768 60/144/240
1280 x 800 HD 16:10 60/144/240
1280 x 720 HD 16:9 60/144/240

Notes:

  • Low GPUs, e.g GTX 1650 will not support the highest DCI 4K.
  • All resolutions are compatible with 60 Hz refresh rates.

Adapter info

  • Name: Parsec Virtual Display Adapter
  • Hardware ID: Root\Parsec\VDA
  • Adapter GUID: {00b41627-04c4-429e-a26e-0265cf50c8fa}
  • Class GUID: {4d36e968-e325-11ce-bfc1-08002be10318}

Monitor info

  • ID: PSCCDD0
  • Name: ParsecVDA
  • EDID:
00 FF FF FF FF FF FF 00  42 63 D0 CD ED 5F 84 00
11 1E 01 04 A5 35 1E 78  3B 57 E0 A5 54 4F 9D 26
12 50 54 27 CF 00 71 4F  81 80 81 40 81 C0 81 00
95 00 B3 00 01 01 86 6F  80 A0 70 38 40 40 30 20
35 00 E0 0E 11 00 00 1A  00 00 00 FD 00 30 A5 C1
C1 29 01 0A 20 20 20 20  20 20 00 00 00 FC 00 50
61 72 73 65 63 56 44 41  0A 20 20 20 00 00 00 10
00 00 00 00 00 00 00 00  00 00 00 00 00 00 01 C6
02 03 10 00 4B 90 05 04  03 02 01 11 12 13 14 1F
8A 4D 80 A0 70 38 2C 40  30 20 35 00 E0 0E 11 00
00 1A FE 5B 80 A0 70 38  35 40 30 20 35 00 E0 0E
11 00 00 1A FC 7E 80 88  70 38 12 40 18 20 35 00
E0 0E 11 00 00 1E A4 9C  80 A0 70 38 59 40 30 20
35 00 E0 0E 11 00 00 1A  02 3A 80 18 71 38 2D 40
58 2C 45 00 E0 0E 11 00  00 1E 00 00 00 00 00 00
00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 A6

Visit http://www.edidreader.com/ to view it online or use an advanced tool AW EDID Editor

parsec-vdd's People

Contributors

darktorres avatar nomi-san avatar solitudechn avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

parsec-vdd's Issues

[Feature requests] Please add a feature to disconnect physical display connections via CLI.

While using a physical display, I hope to be able to disconnect or remove a virtual display using the CLI, which I've noticed is included in the upcoming release. However, when connected to a virtual display, the primary screen often remains on the physical display. In such cases, unless I manually switch the main display to the virtual one using the physical controls, I might not find a better solution. Some DP and HDMI monitors, to my knowledge, stop sending signals to the graphics card after being turned off for a while, but I haven’t found a way to control this timing.

Could you please add a feature to turn off the physical display using the CLI in your program? Thank you.

Can you give example build setup?

I like your idea but couldn't figure out how to implement it as you described, so a simple build setup from your description would help alot

Is there an option for users to customize specific resolutions and refresh rates?

Although a wide variety of resolutions and refresh rates are currently supported, is there an option for users to customize specific resolutions and refresh rates? I'm leveraging this solution to use my tablet as a secondary screen, but my tablet has an unconventional resolution ratio. I'd really appreciate the capability to customize both the resolution and refresh rate. Moreover, the official manual for the driver mentions customization through the registry, but I'm unsure if this project follows the same guideline. After installing the driver, I couldn't find the registry path mentioned in the official documentation on my computer(https://support.parsec.app/hc/en-us/articles/4423615425293-VDD-Advanced-Configuration)

Cannot start software after restarting computer

After I installed it, I ran it directly with no problems. However, after restarting the computer, the software did not start with the restart, and it could not be started by double-clicking the software icon.

Virtual display adapter can be seen in device manager

A temporary solution is to reinstall the software after a reboot. But when operating remotely, I had to start RDP to complete the reinstall before continuing to stream remotely using the virtual display

vdd sans parsec wrap ?

Bonjour, est ce que ce repo explique comment utiliser un VDD avec parsec sans souscrire à leurs offre wrap ?

Todo: Parsec VDD v0.45 support

Parsec has announced VDD v0.45 in early of March.
https://builds.parsec.app/vdd/parsec-vdd-0.45.0.0.exe

Parsec Virtual Display Driver 0.45 allows you to select which physical GPU you wish the adapter to spawn on. This change is aimed at virtual machines and the selection can be changed using the Windows Registry.

Parsec Virtual Display Driver 0.45 greatly improves Privacy Mode and Virtual Display Driver reliability when used in combination with 150-93.

Seems the Privacy Mode bug (mentioned in README) has been fixed. And the driver setup (installer) is now using nefconw (by nefarius) instead of MS devcon. That will fix a problem that devcon cannot fully uninstall/override the driver files (mm.dll).

nefconw --remove-device-node --hardware-id Root\Parsec\VDA --class-guid "4D36E968-E325-11CE-BFC1-08002BE10318"
nefconw --create-device-node --class-name Display --class-guid "4D36E968-E325-11CE-BFC1-08002BE10318" --hardware-id Root\Parsec\VDA
nefconw --install-driver --inf-path ".\driver\mm.inf"

Sorry for my late, the ParsecVDisplay app will be released soon in the end of this month and should support VDD v0.45.

HDR Support

Parsec supports HDR 10-bit streaming for now, but the VDD does not.
To unlock that, the driver should be modified to unlock HDR inside its EDID (that will break the signature).

You can use EDID writer to modify directly the plugged vdisplay but I'm not sure that works.
In case of modifying the driver file (mm.dll), check out the README to find EDID in hex editor.

graph LR
A["mm.dll"] .-> B["EDID"] .-> C["HDR support"] -->|apply| A

You need to use atleast 10-bit streaming and an HDR monitor to achive HDR in your view.
For example remote desktop with Moonlight or Parsec.

graph LR
A["VDD with HDR"] --> B["10-bit streaming"] --> C["HDR monitor"]

can i just set the virtual screen as the main screen only?

How about adding only the virtual screen display in windows settings?The settings only function as a copy of the physical screen and extend the physical screen,can i just set the virtual screen as the main screen only?Similar to the privacy mode?

virtual display missing when pc start

hi

Thank you for the development,
When computer restarts, only the software is turned on, and the virtual display does not remember the last time it was added.
Also, is it possible to add a virtual display to boot to the sunshine command line?

thanks in advance for the help!

A step-by-step guide for who don't know code

I only had some experience in matlab to support scientific work, the current read.me, issues and demo.cc excced the my capability,

Is it possible for you to make a step-by-step guide that anyone can follow? e.g. just typing-in code in console?

I would be really appreciated if you can do that. :)

[False positive] Microsoft Defender Antivirus Flagging ParsecVDisplay as Trojan:Script/Wacatac.B!ml

I have observed that Microsoft Defender Antivirus is flagging ParsecVDisplay v0.45-a as Trojan:Script/Wacatac.B!ml and has isolated related files. Below are the detailed information:

Severity: Severe

Detected: Trojan:Script/Wacatac.B!ml
Status: Isolated
Isolated file location: Restricted area, won't harm the device

Date: March 30, 2024, 10:00 AM
Details: According to the report, the program might contain malicious code possibly intended for executing commands from attackers.

Affected Items:
File: c:\program files\parsecvdisplay\parsecvdisplay.exe
File: C:\ProgramData\Microsoft\Windows\Start Menu\Programs\ParsecVDisplay.lnk
File: C:\Users\Public\Desktop\ParsecVDisplay.lnk

虚拟显示器不显示

虚拟屏幕不显示

在阳光用命令行退出串流切换显示器后,虚拟显示屏就不显示分辨率了,也不能正常使用。已经重新卸载和安装,问题依旧。

Subject: [Feature requests] Fixing the name of the generated virtual screen

I would like to request a feature to fix the name of the generated virtual screen in the program I am using to extend my screen to a tablet. Currently, when setting up the display in Sunshine, I can specify the name of the display, which is convenient for quick setup.

However, the issue I am facing is that the new display is assigned a random name in the format .\DISPLAY{id}, where the "id" part is randomly generated during the screen generation process.

I kindly request an improvement in the program to provide a fixed name for the generated virtual screen, rather than the randomly assigned name. This would greatly enhance the usability and convenience of the program.
Thank you for considering my feature request. I look forward to your positive response.

Does the virtual display not support connecting to a laptop's discrete graphics card with direct-connect mode turned on, but only supports connecting to the core graphics card of the CPU?

When I use sunshine on my laptop, because sunshine states "If a GPU is specified above, the monitor must be connected to that GPU." This causes my sunshine to run normally when using the laptop's cpu core graphics card. When using the independent graphics direct connection mode, it seems that the virtual monitor is not connected to the independent graphics card, resulting in an error when using sunshine for streaming.

Windows 10 Display Configurations Bug

On Windows 10, all connected display configurations will be saved in a specific registry. Each configuration is a combination of current connected displays and the key should be joined names of them. That will produce an issue that when you disconnect a middle display, then all others will be reset their configuration to default. I have not tested on Windows 11, but heard the display configurations system is smarter than Windows 10.

For example, you have plugged 3 displays, the registry keys look like:

DISP001                   // conf for display 1
DISP001_DISP002           // conf for display 1+2
DISP001_DISP002_DISP003   // conf for display 1+2+3
graph LR
Display1 .-> Display2 .-> Display3

Then you unplug the display 2, the registry keys look like:

DISP001                   // conf for display 1
DISP001_DISP002           // conf for display 1+2
DISP001_DISP002_DISP003   // conf for display 1+2+3
DISP001_DISP003           // conf for display 1+3 [new]
graph LR
Display1 .-> Display3 ~~~ Display2

The last registry key is added for display 1 and display 3, it has no configuration before, so these connected displays will be reset to default mode (resolution & refresh rate). To avoid this issue, please unplug each display from right to left (remove the latest first).

graph LR
Display1 ---x|2| Display2 ---x|1| Display3

Sunshine command support

Hi,

Thank you for your development. This has been really helpful/useful to me and I appreciate it a lot :) I just wanted to ask, is it possible to enable/disable or create/remove displays via command line? It would be cool if this was a thing if its not as Sunshine streamer allows for sending command when connecting/disconnecting a client. It would be perfect for creating/removing a display - or the better way to handle it would be enabling/disabling existing displays so the display ID doesnt change. Thank you!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.