Closed robibla closed 6 years ago
Hey,
I need your help with reproducing this problem. If it is possible for you, please follow this post:
Please provide me with this file:
%appdata%\HeliosDisplayManagement.Shared\DisplayProfiles_1.0.xml
And while in surround mode, execute the attached .exe file in this post, navigate to "DeviceContext" by pressing 0
and then Enter
and later on navigate to "DeviceContext: Connected Displays" by pressing 1
and then Enter
. This will show you a list of currently connected devices. Copy paste the output here.
WindowsDisplayAPISample.zip
Also please mention your Windows version and platform as well as your Nvidia control panel version.
Hi !
I have the same case,
I see that the projects is quite young but, damn ! I have been waiting for this proper surround toggle for years ! Do not hesitate to ask anything you need I will be happy to provide the info
I my case Nvidia 1060 + 4 screens, one is kept separate of surround mode
Here my saved profiles : DisplayProfiles_1.0.xml.txt
Connected displays when surround is enabled alone :
Display.GetDisplays()
________________________________________________________________________________________________________________________
[0]: {
Adapter: DisplayAdapter: NVIDIA GeForce GTX 1060 6GB
CurrentSetting: {Width=5760, Height=1080} Progressive 60hz @ Depth32Bit @ {X=0,Y=0}
DeviceKey: \Registry\Machine\System\CurrentControlSet\Control\Class\{4d36e96e-e325-11ce-bfc1-08002be10318}\0007
DeviceName: Generic PnP Monitor
DevicePath: \\?\DISPLAY#NVS10DE#5&3a6677c5&3&UID5120#{e6f07b5f-ee97-4a90-b076-33f57bf4eaa7}
DisplayFullName: \\.\DISPLAY1\Monitor0
DisplayName: \\.\DISPLAY1
IsAvailable: True
IsGDIPrimary: True
IsValid: True
SavedSetting: {Width=5760, Height=1080} Progressive 60hz @ Depth32Bit @ {X=0,Y=0}
},
Connected displays when surround is enabled and 4th screen extended too :
[0]: {
Adapter: DisplayAdapter: NVIDIA GeForce GTX 1060 6GB
CurrentSetting: {Width=5760, Height=1080} Progressive 60hz @ Depth32Bit @ {X=0,Y=0}
DeviceKey: \Registry\Machine\System\CurrentControlSet\Control\Class\{4d36e96e-e325-11ce-bfc1-08002be10318}\0007
DeviceName: Generic PnP Monitor
DevicePath: \\?\DISPLAY#NVS10DE#5&3a6677c5&3&UID5120#{e6f07b5f-ee97-4a90-b076-33f57bf4eaa7}
DisplayFullName: \\.\DISPLAY1\Monitor0
DisplayName: \\.\DISPLAY1
IsAvailable: True
IsGDIPrimary: True
IsValid: True
SavedSetting: {Width=5760, Height=1080} Progressive 60hz @ Depth32Bit @ {X=0,Y=0}
},
[1]: {
Adapter: DisplayAdapter: NVIDIA GeForce GTX 1060 6GB
CurrentSetting: {Width=1280, Height=720} Progressive 60hz @ Depth32Bit @ {X=2216,Y=1080}
DeviceKey: \Registry\Machine\System\CurrentControlSet\Control\Class\{4d36e96e-e325-11ce-bfc1-08002be10318}\0008
DeviceName: Generic PnP Monitor
DevicePath: \\?\DISPLAY#RTK4C54#5&3a6677c5&3&UID4353#{e6f07b5f-ee97-4a90-b076-33f57bf4eaa7}
DisplayFullName: \\.\DISPLAY2\Monitor0
DisplayName: \\.\DISPLAY2
IsAvailable: True
IsGDIPrimary: False
IsValid: True
SavedSetting: {Width=1280, Height=720} Progressive 60hz @ Depth32Bit @ {X=2216,Y=1080}
},
Currently running w10 pro w64 up to date, Nvidia control panel 8.1.970
Little update : I've debugged, from what i see, when I apply the defective profile the 4th screen is recognized as surround topology.
I've manually made a mix in the profiles and now I can reload my target topology properly !
So it looks like the problem is definitely into the profile generation, not in the profile application.
Here the modified profile : DisplayProfiles_1.0_workingnow.xml.txt
Hope it will help ;)
Man seriously ... Thanks ! Finally having a tool to switch those damn profiles is magic !
@zegreatclan I adapted your modified profile, and it seems to work great for me. I wrote a gist with instructions as to how I got it working, as well as my own working .xml file.
@falahati Thank you very much for digging into the NVAPI and creating this tool. Those Mosiac functions seem a little rough. You're doing NVidia's work for them...even with the incomplete config generation, your tool works far better than NVidia Control Panel for toggling surround 😃
@amasover I attempted to follow your instructions during some downtime for OSVR and couldn't use it to get my display ID's, instead I compiled and used the demo of the NvAPI wrapper @falahati wrote: https://github.com/falahati/NvAPIWrapper
Huge thanks to both of you for the software and guide!
Below is my DisplayProfiles_1.0.xml, hope somebody finds it useful =)
<ArrayOfProfile xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Profile>
<Name>Windows</Name>
<Paths>
<Path>
<PixelFormat>PixelFormat32Bpp</PixelFormat>
<Position>
<X>-2560</X>
<Y>0</Y>
</Position>
<Resolution>
<Width>2560</Width>
<Height>1440</Height>
</Resolution>
<SourceId>1</SourceId>
<Targets>
<PathTarget>
<DevicePath>\\?\DISPLAY#ACI27EC#5&2e126b7&5&UID4356</DevicePath>
<DisplayName>ROG PG279Q</DisplayName>
<FrequencyInMillihertz>165000</FrequencyInMillihertz>
<Rotation>Identity</Rotation>
<Scaling>Identity</Scaling>
<ScanLineOrdering>Progressive</ScanLineOrdering>
</PathTarget>
</Targets>
</Path>
<Path>
<PixelFormat>PixelFormat32Bpp</PixelFormat>
<Position>
<X>0</X>
<Y>0</Y>
</Position>
<Resolution>
<Width>2560</Width>
<Height>1440</Height>
</Resolution>
<SourceId>0</SourceId>
<Targets>
<PathTarget>
<DevicePath>\\?\DISPLAY#ACI27EC#5&2e126b7&5&UID4358</DevicePath>
<DisplayName>ROG PG279Q</DisplayName>
<FrequencyInMillihertz>165000</FrequencyInMillihertz>
<Rotation>Identity</Rotation>
<Scaling>Identity</Scaling>
<ScanLineOrdering>Progressive</ScanLineOrdering>
</PathTarget>
</Targets>
</Path>
<Path>
<PixelFormat>PixelFormat32Bpp</PixelFormat>
<Position>
<X>2560</X>
<Y>0</Y>
</Position>
<Resolution>
<Width>2560</Width>
<Height>1440</Height>
</Resolution>
<SourceId>2</SourceId>
<Targets>
<PathTarget>
<DevicePath>\\?\DISPLAY#ACI27EC#5&2e126b7&5&UID4354</DevicePath>
<DisplayName>ROG PG279Q</DisplayName>
<FrequencyInMillihertz>165000</FrequencyInMillihertz>
<Rotation>Identity</Rotation>
<Scaling>Identity</Scaling>
<ScanLineOrdering>Progressive</ScanLineOrdering>
</PathTarget>
</Targets>
</Path>
</Paths>
</Profile>
<Profile>
<Name>Nvidia</Name>
<Paths>
<Path>
<PixelFormat>PixelFormat32Bpp</PixelFormat>
<Position>
<X>0</X>
<Y>0</Y>
</Position>
<Resolution>
<Width>7680</Width>
<Height>1440</Height>
</Resolution>
<SourceId>0</SourceId>
<Targets>
<PathTarget>
<DevicePath>\\?\DISPLAY#ACI27EC#5&2e126b7&5&UID5120</DevicePath>
<DisplayName>NV Surround</DisplayName>
<FrequencyInMillihertz>165000</FrequencyInMillihertz>
<Rotation>Identity</Rotation>
<Scaling>Identity</Scaling>
<ScanLineOrdering>Progressive</ScanLineOrdering>
<SurroundTopology>
<AcceleratePrimaryDisplay>true</AcceleratePrimaryDisplay>
<ApplyWithBezelCorrectedResolution>true</ApplyWithBezelCorrectedResolution>
<BaseMosaicPanoramic>false</BaseMosaicPanoramic>
<ColorDepth>32</ColorDepth>
<Columns>3</Columns>
<Displays>
<SurroundTopologyDisplay>
<DisplayId>2147881095</DisplayId>
<DisplayName>ROG PG279Q</DisplayName>
<Overlap>
<X>0</X>
<Y>0</Y>
</Overlap>
<PixelShiftType>NoPixelShift</PixelShiftType>
<Rotation>Identity</Rotation>
</SurroundTopologyDisplay>
<SurroundTopologyDisplay>
<DisplayId>2147881093</DisplayId>
<DisplayName>ROG PG279Q</DisplayName>
<Overlap>
<X>-90</X>
<Y>0</Y>
</Overlap>
<PixelShiftType>NoPixelShift</PixelShiftType>
<Rotation>Identity</Rotation>
</SurroundTopologyDisplay>
<SurroundTopologyDisplay>
<DisplayId>2147881089</DisplayId>
<DisplayName>ROG PG279Q</DisplayName>
<Overlap>
<X>-90</X>
<Y>0</Y>
</Overlap>
<PixelShiftType>NoPixelShift</PixelShiftType>
<Rotation>Identity</Rotation>
</SurroundTopologyDisplay>
</Displays>
<DriverReloadAllowed>false</DriverReloadAllowed>
<Frequency>165</Frequency>
<ImmersiveGaming>true</ImmersiveGaming>
<Resolution>
<Width>2560</Width>
<Height>1440</Height>
</Resolution>
<Rows>1</Rows>
</SurroundTopology>
</PathTarget>
</Targets>
</Path>
</Paths>
</Profile>
<Profile>
<Name>WinFour</Name>
<Paths>
<Path>
<PixelFormat>PixelFormat32Bpp</PixelFormat>
<Position>
<X>0</X>
<Y>0</Y>
</Position>
<Resolution>
<Width>2560</Width>
<Height>1440</Height>
</Resolution>
<SourceId>1</SourceId>
<Targets>
<PathTarget>
<DevicePath>\\?\DISPLAY#ACI27EC#5&2e126b7&5&UID4358</DevicePath>
<DisplayName>ROG PG279Q</DisplayName>
<FrequencyInMillihertz>165000</FrequencyInMillihertz>
<Rotation>Identity</Rotation>
<Scaling>Identity</Scaling>
<ScanLineOrdering>Progressive</ScanLineOrdering>
</PathTarget>
</Targets>
</Path>
<Path>
<PixelFormat>PixelFormat32Bpp</PixelFormat>
<Position>
<X>-2560</X>
<Y>0</Y>
</Position>
<Resolution>
<Width>2560</Width>
<Height>1440</Height>
</Resolution>
<SourceId>0</SourceId>
<Targets>
<PathTarget>
<DevicePath>\\?\DISPLAY#ACI27EC#5&2e126b7&5&UID4356</DevicePath>
<DisplayName>ROG PG279Q</DisplayName>
<FrequencyInMillihertz>165000</FrequencyInMillihertz>
<Rotation>Identity</Rotation>
<Scaling>Identity</Scaling>
<ScanLineOrdering>Progressive</ScanLineOrdering>
</PathTarget>
</Targets>
</Path>
<Path>
<PixelFormat>PixelFormat32Bpp</PixelFormat>
<Position>
<X>2560</X>
<Y>0</Y>
</Position>
<Resolution>
<Width>2560</Width>
<Height>1440</Height>
</Resolution>
<SourceId>2</SourceId>
<Targets>
<PathTarget>
<DevicePath>\\?\DISPLAY#ACI27EC#5&2e126b7&5&UID4354</DevicePath>
<DisplayName>ROG PG279Q</DisplayName>
<FrequencyInMillihertz>165000</FrequencyInMillihertz>
<Rotation>Identity</Rotation>
<Scaling>Identity</Scaling>
<ScanLineOrdering>Progressive</ScanLineOrdering>
</PathTarget>
</Targets>
</Path>
<Path>
<PixelFormat>PixelFormat32Bpp</PixelFormat>
<Position>
<X>5120</X>
<Y>447</Y>
</Position>
<Resolution>
<Width>1360</Width>
<Height>768</Height>
</Resolution>
<SourceId>3</SourceId>
<Targets>
<PathTarget>
<DevicePath>\\?\DISPLAY#GSM0001#5&2e126b7&5&UID4353</DevicePath>
<DisplayName>32LV2400</DisplayName>
<FrequencyInMillihertz>60015</FrequencyInMillihertz>
<Rotation>Identity</Rotation>
<Scaling>Identity</Scaling>
<ScanLineOrdering>Progressive</ScanLineOrdering>
</PathTarget>
</Targets>
</Path>
</Paths>
</Profile>
<Profile>
<Name>NvFour</Name>
<Paths>
<Path>
<PixelFormat>PixelFormat32Bpp</PixelFormat>
<Position>
<X>0</X>
<Y>0</Y>
</Position>
<Resolution>
<Width>7680</Width>
<Height>1440</Height>
</Resolution>
<SourceId>0</SourceId>
<Targets>
<PathTarget>
<DevicePath>\\?\DISPLAY#ACI27EC#5&2e126b7&5&UID5120</DevicePath>
<DisplayName>NV Surround</DisplayName>
<FrequencyInMillihertz>165000</FrequencyInMillihertz>
<Rotation>Identity</Rotation>
<Scaling>Identity</Scaling>
<ScanLineOrdering>Progressive</ScanLineOrdering>
<SurroundTopology>
<AcceleratePrimaryDisplay>true</AcceleratePrimaryDisplay>
<ApplyWithBezelCorrectedResolution>true</ApplyWithBezelCorrectedResolution>
<BaseMosaicPanoramic>false</BaseMosaicPanoramic>
<ColorDepth>32</ColorDepth>
<Columns>3</Columns>
<Displays>
<SurroundTopologyDisplay>
<DisplayId>2147881095</DisplayId>
<DisplayName>ROG PG279Q</DisplayName>
<Overlap>
<X>0</X>
<Y>0</Y>
</Overlap>
<PixelShiftType>NoPixelShift</PixelShiftType>
<Rotation>Identity</Rotation>
</SurroundTopologyDisplay>
<SurroundTopologyDisplay>
<DisplayId>2147881093</DisplayId>
<DisplayName>ROG PG279Q</DisplayName>
<Overlap>
<X>-90</X>
<Y>0</Y>
</Overlap>
<PixelShiftType>NoPixelShift</PixelShiftType>
<Rotation>Identity</Rotation>
</SurroundTopologyDisplay>
<SurroundTopologyDisplay>
<DisplayId>2147881089</DisplayId>
<DisplayName>ROG PG279Q</DisplayName>
<Overlap>
<X>-90</X>
<Y>0</Y>
</Overlap>
<PixelShiftType>NoPixelShift</PixelShiftType>
<Rotation>Identity</Rotation>
</SurroundTopologyDisplay>
</Displays>
<DriverReloadAllowed>false</DriverReloadAllowed>
<Frequency>165</Frequency>
<ImmersiveGaming>true</ImmersiveGaming>
<Resolution>
<Width>2560</Width>
<Height>1440</Height>
</Resolution>
<Rows>1</Rows>
</SurroundTopology>
</PathTarget>
</Targets>
</Path>
<Path>
<PixelFormat>PixelFormat32Bpp</PixelFormat>
<Position>
<X>7680</X>
<Y>196</Y>
</Position>
<Resolution>
<Width>1920</Width>
<Height>1080</Height>
</Resolution>
<SourceId>1</SourceId>
<Targets>
<PathTarget>
<DevicePath>\\?\DISPLAY#GSM0001#5&2e126b7&5&UID4353</DevicePath>
<DisplayName>32LV2400</DisplayName>
<FrequencyInMillihertz>60000</FrequencyInMillihertz>
<Rotation>Identity</Rotation>
<Scaling>Identity</Scaling>
<ScanLineOrdering>Progressive</ScanLineOrdering>
</PathTarget>
</Targets>
</Path>
</Paths>
</Profile>
</ArrayOfProfile>
Hey,
It would be great if some of you guys could create a copy from their correct "DisplayProfile_1.0.xml" file (if you made one manually), delete it and try the program again with invalid profiles. Then follow these steps:
At the end of this process, you should have multiple ".log" files each generated while your system was in a correct mode. I need this information as I need to follow the program's logic based on your system while you are in a specific mode. Send these log files to me. Feel free to check the log files for any information you might not want to share with the public.
Also, the source code of this program is now available as a part of this repository, so you can always check the source code or even compile it yourself.
Love the project, switching to my default triple separate screen setup works great, but I'm also having the same issue and can't switch to my surround profile. I made the profile in surround and couldn't switch back to it, that profile is exactly the same as what I've attacked but without the displaytopology field, I just copy/pasted that in 3 different times from 3 different users that posted their working solutions and changed all appropriate fields to the correct display ID's, and names. All the information I had to change is accurate. It did actually change one time after I fiddled around with it a ton and I have no clue what it was that I changed, and no matter how I messed with it my screens were locked at 50hz for some reason, since then it just hasn't worked. After making the profile from the in-app interface and making all those changes it simply does the 30 second countdown and doesn't change anything, with the exception of that one time it almost worked.
I'd love to see this working properly, if you get it figured out please release a new build with an installer. :)
I've included my profile, the reporter logs for both screen modes, and the WindowsDisplayAPISample output for both screen modes. My Nvidia Control Panel version is 8.1.940.0 I'm running Windows 10 ver 1803
HeliosReporting - Triple Separate Monitors.log
HeliosReporting - Triple Screen Surround.log
WindowsDisplayOUTPUT - Triple Separate Monitors.txt
Sorry for the delay, here are my logs:
Let me know if there's any other configurations you'd like me to try, or if I can help in any other way.
Thanks,
Unfortunately, with my setup, NVidia control panel works quite different comparing to the results I see in your log files. Therefore I can't really debug the problem and I have to simulate the code with the log files you provided.
However, I tried one more time to fix this problem and released a new version, please try it out and report back about how it went. https://github.com/falahati/HeliosDisplayManagement/releases/tag/v0.9.3
I strongly recommend rebooting your system after upgrading your installation, unless it is your first time installing this app
Thanks
I upgraded to 0.9.3 and am still having the same issue I talked about above. Even rebooted twice after upgrading. I can't switch into surround, it just ticks down the 30 second timer and does nothing at all. Just letting you know.
Also, would be really cool if you could include an uninstaller
Please try this version: https://github.com/falahati/HeliosDisplayManagement/releases/tag/v0.9.3.4
Looks like this is very close to working in v0.9.3.4.
Compare the generated json with my hand-edited working version.
It seems Helios is grabbing the wrong monitor to add to the surround topology. In the generated json, Helios adds a single monitor (my Acer XB270HU) to the surround topology. My intended surround configuration instead has three Dell U2414H monitors.
Single monitor in the topology is probably also why ApplyWithBezelCorrectedResolution
and ImmersiveGaming
are incorrectly toggled off.
ImmersiveGaming
is for Quadro boards only. You shouldn't enable it from there.
ApplyWithBezelCorrectedResolution
is also irrelevant because Helios going to change resolution later again. To enable bezel correction, you should change the resolution on the parent path.
I take another look at this. Thanks for helping fix this problem.
Please try this one: https://github.com/falahati/HeliosDisplayManagement/releases/tag/v0.9.4.4
Hope this works.
ImmersiveGaming is for Quadro boards only. You shouldn't enable it from there. ApplyWithBezelCorrectedResolution is also irrelevant
Good to know. I ended up enabling both of those while fiddling with things in my manual setup, so I just assumed they were necessary to get surround working.
I tried v0.9.4.4, and it seems to generate a correct DisplayProfiles_2.0.json
for my setup! I tested deleting my existing .json
file and re-creating it from scratch in the UI (switching via NVidia Control Panel / Windows Display Settings, and then cloning each configuration in Helios). I can switch to/from my (generated) surround profile without needing to manually edit the config file.
Thanks again for your work on this @falahati. It definitely beats the laborious process of opening NVidia control panel -> configure surround -> close 50 apps -> set up bezel correction -> hit okay -> wait for surround to enable -> manually enable additional non-surround monitors.
Thanks for reporting back, I going to close this issue, please feel free to create a new issue if anyone else had a similar problem.
I have successfully captured two profiles:
Both of the profiles have images that look correct according to the screen layout.
I can switch to the "extended" profile perfectly, however; I cannot load the nVidia surround profile successfully. It seems that the app has problems with nVidia Surround?
Thanks!