Closed terrymacdonald closed 2 years ago
OK @matthex,
So I've taken a look at your DisplayMagician.log file, and it's very interesting indeed. Firstly, because you're the current winner for the number of screens connected to a single PC :).
The good news is that DisplayMagician does detect your NVIDIA card and the Intel CPU Video chipset, so that's my big concern out the way:
"DisplayAdapters": {
"73207": "\\\\?\\PCI#VEN_10DE&DEV_1B06&SUBSYS_447119DA&REV_A1#4&18ed1e2a&0&0008#{5b45201d-f2f2-4f3b-85bb-30ff1f953599}",
"76388": "\\\\?\\PCI#VEN_8086&DEV_3E92&SUBSYS_7B461462&REV_00#3&11583659&0&10#{5b45201d-f2f2-4f3b-85bb-30ff1f953599}"
},
This is good to see, as it confirms that the PCI card detection is working fine. This also makes it a different problem to the one shown in #44 (as that is an issue with USB-C connections).
So now, onto trying to figure out what's wrong with your situation. Now, for the two different profiles you've specified, this is what DisplayMagician recognises:
DisplayMagician sees the following in your 'Racing' display config:
"NVIDIA|NVIDIA GeForce GTX 1080 Ti|PCI_EXPRESS|1|DP|ACI|10148|16843009|2147881093",
"NVIDIA|NVIDIA GeForce GTX 1080 Ti|PCI_EXPRESS|1|DP|ACI|10148|16843009|2147881095",
"NVIDIA|NVIDIA GeForce GTX 1080 Ti|PCI_EXPRESS|1|HDMI|ACI|10148|16843009|2147881090"
"WINAPI|\\\\?\\PCI#VEN_10DE&DEV_1B06&SUBSYS_447119DA&REV_A1#4&18ed1e2a&0&0008#{5b45201d-f2f2-4f3b-85bb-30ff1f953599}|DISPLAYCONFIG_OUTPUT_TECHNOLOGY_DVI|26884|10148|\\\\?\\DISPLAY#ACI27A4#5&384b97d5&1&UID5120#{e6f07b5f-ee97-4a90-b076-33f57bf4eaa7}|NV Surround",
"WINAPI|\\\\?\\PCI#VEN_8086&DEV_3E92&SUBSYS_7B461462&REV_00#3&11583659&0&10#{5b45201d-f2f2-4f3b-85bb-30ff1f953599}|DISPLAYCONFIG_OUTPUT_TECHNOLOGY_HDMI|58633|26|\\\\?\\DISPLAY#BOE001A#4&29cbb371&0&UID206347#{e6f07b5f-ee97-4a90-b076-33f57bf4eaa7}|BOE TV"
DisplayMagician sees the following in your 'Regular' display config:
"NVIDIA|NVIDIA GeForce GTX 1080 Ti|PCI_EXPRESS|1|DP|ACR|1327|2167428480|2147881089",
"NVIDIA|NVIDIA GeForce GTX 1080 Ti|PCI_EXPRESS|1|DVI|GSM|22127|204933|2147881091"
"WINAPI|\\\\?\\PCI#VEN_10DE&DEV_1B06&SUBSYS_447119DA&REV_A1#4&18ed1e2a&0&0008#{5b45201d-f2f2-4f3b-85bb-30ff1f953599}|DISPLAYCONFIG_OUTPUT_TECHNOLOGY_DISPLAYPORT_EXTERNAL|29188|1327|\\\\?\\DISPLAY#ACR052F#5&384b97d5&1&UID4354#{e6f07b5f-ee97-4a90-b076-33f57bf4eaa7}|XB271HU A",
"WINAPI|\\\\?\\PCI#VEN_10DE&DEV_1B06&SUBSYS_447119DA&REV_A1#4&18ed1e2a&0&0008#{5b45201d-f2f2-4f3b-85bb-30ff1f953599}|DISPLAYCONFIG_OUTPUT_TECHNOLOGY_DVI|27934|22127|\\\\?\\DISPLAY#GSM566F#5&384b97d5&1&UID4352#{e6f07b5f-ee97-4a90-b076-33f57bf4eaa7}|L227W",
"WINAPI|\\\\?\\PCI#VEN_8086&DEV_3E92&SUBSYS_7B461462&REV_00#3&11583659&0&10#{5b45201d-f2f2-4f3b-85bb-30ff1f953599}|DISPLAYCONFIG_OUTPUT_TECHNOLOGY_HDMI|45850|2066|\\\\?\\DISPLAY#FUS0812#4&29cbb371&0&UID198147#{e6f07b5f-ee97-4a90-b076-33f57bf4eaa7}|B24W-6 LED"
We can see from that list above, that the 'Racing' config doesn't show the B24W-6 LED, yet the 'Regular' config does. This tells me that the detection and config works fine of the B24W-6 LED display, it's just not working for you in the specific scenario you're using at the moment.
So I need to ask you some more specific questions in order to dig into your specific config a bit more....
This will hopefully give me a bit more information to go on.
My guess is that the logic that runs when DisplayMagician is in 'NVIDIA' mode and there is a surround profile used is not handling more than one extra display... but that's something we'll have to look into.
@matthex I will probably need you to do some tests with my video library testing software called NVIDIAInfo. It is designed to test the new NVIDIALibrary and WinLibrary video libraries that I made for DisplayMagician, and will allow us to see what is happening. They are command line programs so I hope you're ok to use those if we need to do some deeper testing?
Thanks Terry
Hi @terrymacdonald
thank you so much for digging deep into this issue and my handling of all the screens 😇
Of course, I am happy to help with testing and using a command line is completely fine for me. It just take sometimes a few days (mostly until the next weekend) until I reply, because during the working week it is sometimes difficult to find time. ;-) But I will not forget it ;-)
Interesting, that both profiles contain the desired screens in the log, although they are not visible in the UI. But that might be a good sign, as you said, since all screens are detected independent of card they are connected to.
Regarding your questions:
A lof of information – I hope something helpful is in it. Thank you so much for your patience! 😊
You have a lot of monitors Terrance.
@matthex So, first thing is first - the DisplayMagician UI draws a picture based on the information in the configuration, but I didn't write it to cope with such an unusual configuration. I'm not sure there is the logic in there to draw the screen placement of all your screens at the moment. It is possible that some of your 'screens' are actually being drawn behind the others in the picture you see.
But that is a problem to fix later. We first need to confirm that the video libraries can actually detect the configuration you have, and then apply it. You have BY FAR the most complicated display setup I've ever seen. It will be a great test to make sure that the video libraries work with complicated displays, and to iron out any problems we find.
As we want to test the video libraries themselves, then I think it's best that we move over to using NVIDIAInfo. NVIDIAInfo is a command line program that I use to test that the video library parts of DisplayMagician are working without worrying about thee other parts of DisplayMagician interfering. And that's exactly what we need to do for this issue.
So, can you please download the NVIDIAInfo zip and unzip it to a test folder. Then open a command line/powershell to that same folder and run through the following commands. Make sure you do every step in order, and record the results:
NVIDIAInfo save regular.cfg
. That will save the Regular configurationnv-save-regular.log
so that you can send it to me later.NVIDIAInfo equal regular.cfg
. Please record if this test was equal or not. We want it to be equal.NVIDIAInfo save racing.cfg
. That will save the Racing configurationnv-save-racing.log
so that you can send it to me later.NVIDIAInfo equal racing.cfg
. Please record if this test was equal or not. We want it to be equal.At this stage we have the two basic configs set. Next step is to see if it works changing between them:
NVIDIAInfo load regular.cfg
. That will try to swap to the Regular configuration. nv-change-to-regular1.log
so that you can send it to me later.NVIDIAInfo equal racing.cfg
. Please record if this test was equal or not. We want it to NOT be equal.NVIDIAInfo equal regular.cfg
. Please record if this test was equal or not. We want it to be equal. This means the profile was matched properly.NVIDIAInfo load racing.cfg
. That will try to swap to the Racing configuration. nv-change-back-racing1.log
so that you can send it to me later.NVIDIAInfo equal regular.cfg
. Please record if this test was equal or not. We want it to NOT be equal.NVIDIAInfo equal racing.cfg
. Please record if this test was equal or not. We want it to be equal. This means the profile was matched properly.Once you've got to this point, please come back here and tell me the results, and upload all the log files, and the .cfg files you created. That will all give me enough information to tell you the next steps.
Hope that helps! Terry
Hi @terrymacdonald Thank you for this great step-by-step guidance!
I share the results with you:
nv-save-regular.log Equality test: Equal to regular
nv-save-racing.log Equality test: Equal to racing
nv-change-to-regular1.log Equality test: Not equal to regular and not equal to racing
nv-change-back-racing1.log Equality test: Not equal to regular but equal to racing (as it should be)
I hope this helps a bit :-)
Hi @matthex ,
Ok, I think we found where an issue is. In step 3 when you swapped from racing to regular, it should have shown that the regular.cfg was equal to the current config, but it didn't. That tells me that there is a difference between what the regular.cfg is, and the actual resulting configuration after regular.cfg is applied. In other words not all of the regular.cfg is being applied in your situation.
I'm going to need you to send me a couple of files so I can see what is in your two cfg files you made:
I've checked through the log files you gave me, and the nv-change to-regular1.log is very interesting, specifically this bit:
2021-12-04 16:47:34.6653|TRACE|DisplayMagicianShared.SharedLogger|WinLibrary/SetActiveConfig: Patching the adapter IDs to make the saved config valid
2021-12-04 16:47:34.6653|TRACE|DisplayMagicianShared.SharedLogger|WinLibrary/PatchAdapterIDs: Going through the list of adapters we stored in the config to figure out the old adapterIDs
2021-12-04 16:47:34.6653|TRACE|DisplayMagicianShared.SharedLogger|WinLibrary/PatchAdapterIDs: We found that saved adapter 68995 has now been assigned adapter id 68995 (AdapterName is \\?\PCI#VEN_10DE&DEV_1B06&SUBSYS_447119DA&REV_A1#4&18ed1e2a&0&0008#{5b45201d-f2f2-4f3b-85bb-30ff1f953599})
2021-12-04 16:47:34.6812|TRACE|DisplayMagicianShared.SharedLogger|WinLibrary/PatchAdapterIDs: Going through the display config paths to update the adapter id
2021-12-04 16:47:34.6812|WARN|DisplayMagicianShared.SharedLogger|WinLibrary/PatchAdapterIDs: Uh Oh. Adapter 72213 didn't have a current match! It's possible the adapter was swapped or disabled. Attempting to use adapter 68995 instead.
2021-12-04 16:47:34.6812|TRACE|DisplayMagicianShared.SharedLogger|WinLibrary/PatchAdapterIDs: Going through the display config modes to update the adapter id
2021-12-04 16:47:34.6812|WARN|DisplayMagicianShared.SharedLogger|WinLibrary/PatchAdapterIDs: Uh Oh. Adapter 72213 didn't have a current match! It's possible the adapter was swapped or disabled. Attempting to use adapter 68995 instead.
2021-12-04 16:47:34.6812|WARN|DisplayMagicianShared.SharedLogger|WinLibrary/PatchAdapterIDs: Uh Oh. Adapter 72213 didn't have a current match! It's possible the adapter was swapped or disabled. Attempting to use adapter 68995 instead.
2021-12-04 16:47:34.6812|TRACE|DisplayMagicianShared.SharedLogger|WinLibrary/PatchAdapterIDs: Going through the display config HDR info to update the adapter id
2021-12-04 16:47:34.6812|WARN|DisplayMagicianShared.SharedLogger|WinLibrary/PatchAdapterIDs: Uh Oh. Adapter 72213 didn't have a current match! It's possible the adapter was swapped or disabled. Attempting to use adapter 68995 instead.
From that, I think I know what the issue is!
The NVIDIALibrary I built performs profile changes like this:
After a LOT of testing, I've found this is the best way to make all the settings apply as they should. The error above is in the WinLibrary part - the "Do Windows Display layout changes" part shown above.
As you can see from the function name "WinLibrary/PatchAdapterIDs", I have to patch the adapter IDs in the Windows configuration. The reason for this is that Windows changes Adapter IDs after every reboot :(. I'm forever grateful to @falahati for pointing that fact out to me (Soroush Falahati is the creator of Helios Display Management which DisplayMagician was developed from). We have to ensure that the Windows Adapter IDs are patched to current ones, otherwise the display configuration won't work after a reboot.
It looks to me that DisplayMagician isn't coping with the fact that there are two sets of Display Adapters in use. Instead of trying to look up what the 2nd adapter ID is now (after the reboot), it is unfortunately overwriting the 2nd adapter ID with the ID of the first adapter!
Now, because the issue is in the WinLibrary, we need to test just the WinLibrary to get rid of the bug, and then we can move back towards using NVIDIAInfo. I actually have a different test program just for the WinLibrary. It's called CCDInfo and is available here: https://github.com/terrymacdonald/CCDInfo/releases/tag/v1.3.1. I have tried to build a fix for the above problem, and I've released a new version of CCDInfo with the fix (hopefully) included.
IMPORTANT - CCDInfo cannot do NVIDIA Surround. You will not be able to test your racing configuration (we'll do that later once we fix patching multiple adapter IDs).
Can you please download the CCDInfo v1.3.1 ZIP into a NEW FOLDER, extract it and then perform the following steps. It's VERY IMPORTANT that you do them in that EXACT order, as the order is specifically designed to generate any errors and to make sure they are saved in the right log files. So please try really hard to get the steps exactly correct. :)
CCDInfo save first.cfg
Rename-Item -Path "CCDInfo.log" -NewName "CCDInfo-first-save.log"
CCDInfo equal first.cfg
(we want it to be equal)Next create a second windows display layout:
CCDInfo save second.cfg
Rename-Item -Path "CCDInfo.log" -NewName "CCDInfo-second-save.log"
CCDInfo equal second.cfg
(we want it to be equal)Next swap back to the first display layout:
CCDInfo load first.cfg
Rename-Item -Path "CCDInfo.log" -NewName "CCDInfo-first-reload.log"
CCDInfo equal first.cfg
(we want it to be equal)CCDInfo save first-reload.cfg
CCDInfo equal second.cfg
(we DO NOT want it to be equal)Next swap back to the second display layout:
CCDInfo load second.cfg
Rename-Item -Path "CCDInfo.log" -NewName "CCDInfo-second-reload.log"
CCDInfo equal second.cfg
(we want it to be equal)CCDInfo save second-reload.cfg
CCDInfo equal first.cfg
(we DO NOT want it to be equal)Once that series of tests are done, please upload the following files to this github issue:
And then I'll be able to see if it worked or not!
I'm really sorry that this is so many steps in the instructions above, but what we're testing is a really specific problem, so we need to be really specific in how we test for it. I promise the results will be worth it in the end :),
Thanks Terry
Just to let you know, I tested on a gaming laptop that has an AMD onboard display and a separate NVIDIA external graphics card out through a USB-C connector, and it worked ok. That still doesn't mean that it will work in your use case, as it may be something else that's not right.
Hopefully we'll see soon.
Thanks Terry
Hi @terrymacdonald
don't worry about all the steps! With your great instructions, it is really nice and easy to follow :-)
So, first the two config files from the previous test run with NVIDIAInfo: NVIDIAInfo-cfgs.zip I had to put them in a zip file, because Github does not allow uploading cfg files, it seems.
Now, the new steps:
All equality tests gave the expected results - that looks great to me!
Thank you so much for all the effort and your great instructions! :-)
@matthex Awesome! That's great news!
Next step for us is to add in some NVIDIA specific functionality to the tests. I've ported those WinLibrary changes from CCDInfo into NVIDIAInfo v1.3.1. NVIDIAInfo will test both NVIDIALibrary and WinLibrary together, which is what we need to test in your case. Our goal is to have NVIDIAInfo work with your incredibly complex setup. Once we get NVIDIA working, then I can update DisplayMagician so the configs are stored and loaded correctly, and lastly I can then fix how those configs are shown on the screen (this last bit still needs to be fixed).
Ok, so for NVIDIAInfo, please delete your old NVIDIAInfo folder and all the files in it, including the old cfg files. We have tweaked the way that WinLibrary works, so I need to be sure you're starting with brand new cfg files.
Next, please download NVIDIAInfo v1.3.1 from here (https://github.com/terrymacdonald/NVIDIAInfo/releases/tag/v1.3.1) and then extract the zip file to a new folder, and open a powershell window in that same folder.
IMPORTANT - These instructions are likely to fail, so I need you to save/rename the NVIDIAInfo.log file as shown below. Each run of NVIDIAInfo overwrites the previous NVIDIAInfo.log, so I need you to rename it each time so it doesn't get overwritten. I need to see the log file entries to know what is broken.
After that, please complete the following instructions in this specific order:
Create your racing display layout with some of your screens (racing):
NVIDIAInfo save racing.cfg
Rename-Item -Path "NVIDIAInfo.log" -NewName "NVIDIAInfo-racing-save.log"
NVIDIAInfo equal racing.cfg
(we want it to be equal)Next create a second windows display layout (regular):
NVIDIAInfo save regular.cfg
Rename-Item -Path "NVIDIAInfo.log" -NewName "NVIDIAInfo-regular-save.log"
NVIDIAInfo equal regular.cfg
(we want it to be equal)Next swap back to the racing display layout:
NVIDIAInfo load racing.cfg
Rename-Item -Path "NVIDIAInfo.log" -NewName "NVIDIAInfo-racing-reload.log"
NVIDIAInfo equal racing.cfg
(we want it to be equal)NVIDIAInfo save racing-reload.cfg
NVIDIAInfo equal regular.cfg
(we DO NOT want it to be equal)Next swap back to the regular display layout:
NVIDIAInfo load regular.cfg
Rename-Item -Path "NVIDIAInfo.log" -NewName "NVIDIAInfo-regular-reload.log"
NVIDIAInfo equal regular.cfg
(we want it to be equal)NVIDIAInfo save regular-reload.cfg
NVIDIAInfo equal racing.cfg
(we DO NOT want it to be equal)Once that series of tests are done, please upload the following files to this github issue:
And then I'll be able to see if it worked or not! I'm expecting it to fail, so it will be a nice surprise if it works :).
Thanks Terry
Hi @terrymacdonald
Unfortunately, I think I cannot provide a nice surprise:
NVIDIAInfo-racing-reload.log
As you can see, I got an exception there (Index was outside the bounds of the array.):
Unbehandelte Ausnahme: System.IndexOutOfRangeException: Der Index war außerhalb des Arraybereichs. bei DisplayMagicianShared.Windows.WinLibrary.GetWindowsDisplayConfig(QDC selector) in H:\vscode-projects\NVIDIAInfo\NVIDIAInfo\WinLibrary.cs:Line 302. bei DisplayMagicianShared.Windows.WinLibrary.SetActiveConfig(WINDOWS_DISPLAY_CONFIG displayConfig) in H:\vscode-projects\NVIDIAInfo\NVIDIAInfo\WinLibrary.cs:Line 1010. bei NVIDIAInfo.Program.loadFromFile(String filename) in H:\vscode-projects\NVIDIAInfo\NVIDIAInfo\Program.cs:Line 342. bei NVIDIAInfo.Program.Main(String[] args) in H:\vscode-projects\NVIDIAInfo\NVIDIAInfo\Program.cs:Line 116.
It nevertheless did something: it loaded the surround screens correctly, but not the additional screen.
NVIDIAInfo-regular-reload.log The same exception, and unfortunately this time it did not load any screens from the regular setup correctly.
I wish I could have given a nice surprise to you, but I hope the data is still helpful :-)
@matthex After having a quick look through the logs, it's clear that something is happening in WinLibrary when the NVIDIALibrary is involved. That is why you were getting the IndexOutOfRange exception in NVIDIAInfo, but not in CCDInfo.
The racing.cfg and racing-realod.cfg are quite different, but they are ONLY different in the WinLibrary section of the config. This confirms to me that the NVIDIALibrary functions and WinLibrary functions aren't happy at the moment. The problem is trying to understand why exactly....
I'll try doing some more detailed inspection of the other logs you sent, and try to do some tests locally to see if I can find where the bug lies. It may take a few days before I'll get back to you with something else to try.
Thanks Terry
@mathex Thinking about it, can you please try one more thing...
The errors above are all going to or from an NVIDIA surround profile. Can you please try creating another non-surround display profile and try swapping from that to regular.cfg? In other words:
Create another NON-Surround windows display layout (don't use NVIDIA Surround with it):
NVIDIAInfo save regular2.cfg
Rename-Item -Path "NVIDIAInfo.log" -NewName "NVIDIAInfo-regular2-save.log"
NVIDIAInfo equal regular2.cfg
(we want it to be equal)Next swap back to the regular display layout:
NVIDIAInfo load regular.cfg
Rename-Item -Path "NVIDIAInfo.log" -NewName "NVIDIAInfo-regular-reload.2log"
NVIDIAInfo equal regular.cfg
(we want it to be equal)NVIDIAInfo save regular-reload2.cfg
NVIDIAInfo equal regular2.cfg
(we DO NOT want it to be equal)The above steps will test the non-surround to non-surround transition. If that works then I know the issue occurs is when a display profile involves nvidia surround. If the above test doesn't work, then I know its an issue that affects the whole NVIDIAInfo build.
If you could perform those steps it would help me out a lot!
Thanks Terry
@matthex I should really give myself more credit. I think it will take me a while to find a bug, and then I seem to find it far faster than I thought! :)
OK, I think I know what's going on. When NVIDIALibrary makes it's changes, it updates the Windows display layout. Because of prior changes I made in WinLibrary to help speed it up, WinLibrary wasn't looking to see what NVIDIALibrary had changed. This meant that when WinLibrary attempted to make changes, it wouldn't always work. Luckily I managed to get the same fault happening on my development machine and I could see what was happening.
So this new NVIDIAInfo v1.3.2 adds one single line of code: winLibrary.UpdateActiveConfig();
And when I did that, it all started working again!
Now the above changes may not fix the underlying issue that you're having @matthex, but it at least gets us a bit closer.
Can you please download NVIDIAInfo v1.3.2, and re-run the last tests you did as well as the ones I just sent before. I'm hoping that both sets of them work this time 🤞.
NOTE: You can re-use the last configs you had as the last error was all in the NVIDIAInfo code itself :)
Thanks Terry
Hi @terrymacdonald This time, I think I have better news ;-)
First, I tried the non-surround settings:
You see there already, that the exception appeared again. But only once, after executing the same command (load) again, no exception was there.
The switch from non-surround to regular worked in the same way, so I did not save the logs but immediately tried with the racing setup, i.e., the surround setup:
First the screenshot, in which you see, that I executed the command twice. After the first command, it did not work (it switched screens, but to a random display only), but after the second execution, everything was fine. Here are both logs of the loading: NVIDIAInfo-regular-load.log NVIDIAInfo-regular-load2.log
Basically, exactly the same. Loading once did not work, but the second attempt did. NVIDIAInfo-racing-load.log NVIDIAInfo-racing-load2.log
I have the feeling that you are getting closer and closer :-) In fact, by just loading twice, it works already nicely.
@matthex This is great news!
The error seems to be in the GetWindowsDisplayConfig function, which I expect is happening in the initial call just before the NVIDIALibrary changes take place. I might be able to move where the initial call is made to further down the function which may get rid of that error. I'll do some testing later this evening after work and see what I can find.
I also had a quick review of the DisplayView bit of the code in DisplayMagician last night. That's the bit that des the drawing of the display layout when you click a profile, and shows you what layout it is. The logic should work ok once we get the data logic working properly, so I'm going to leave it for now until we get this error fixed.
Thanks Terry
@matthex Well that took WAAAAAAAY longer than expected!
As I dug further into that error message you gave me, it became apparent that there was a serious flaw in my logic that I made to 'patch' cloned modes so they worked. This logic would fail if people had monitors that didn't provide the right information.
The prior clone correction logic relied on HDR information being returned from the Windows CCD API. This wouldn't always work, leading to errors when trying to correct cloned profiles when the info wasn't there. Additionally, it always tried running the correction logic even when there were no cloned displays!
The changes I made makes use of the fact that windows display configs are returned in path priority order. It grabs all physical display info, and finds the UID associated with them by Windows. It then goes through the returned display paths, and looks for the cloned display IDs that's invented by Windows. It then goes through the paths again, looking for the unmatched physical display UIDs. It then matches those two things up, in the order of how they were found, making a map from the faked clone ID to the real display ID.
You may ask why do all this work? Unfortuantely, for windows to load a cloned display, you need to set the cloned target display path entry ID to a specific high number in order for the cloned display to be recognised, and created. But the corresponding mode also needs to have it's ID changed, BUT TO THE ID OF THE REAL DISPLAY! This is such a pain in arse. And results in the complex code I had to make today :(.
Typically, there is only one cloned screen, and so there is 1 matching 'missing' physical display UID. In some instances there may be multiple cloned displays, and this logic should now even work in those instances!
I've tested the code myself and it appears to work perfectly, but I will need you to perform the tests you have tried last time. I'm hoping that these will just work now!
Please download NVIDIAInfo v1.3.3 from here: https://github.com/terrymacdonald/NVIDIAInfo/releases/tag/v1.3.3
And then do all your last tests, and we'll see what other errors and bugs fall out :)
Thanks Terry
Hi @terrymacdonald
Unfortunately, I think it is the same behavior as before: The changing of profiles works, but before it works, there is this one step with an exception.
NVIDIAInfo-regular-load1.log I saved the state in which it is after the first attempt as "weird.cfg".
I did not save the logs of the switching from regular to racing, because the same thing happens, i.e., it works the second time. But if they are helpful, just let me know and I will create them.
@matthex Damn it. Looks like I fixed a potential future bug, but not the one we're experiencing :/.
OK, so I revamped the section of code that NVIDIAInfo is complaining about in your screenshots. It's an area of code that works perfectly fine on my system, so I can't get it to fail... this makes it more difficult to troubleshoot I'm afraid. We're going to have to rely on your system for testing.
Can you please download NVIDIAInfo v1.3.4 from here and re-run those last tests again to see if they work?
https://github.com/terrymacdonald/NVIDIAInfo/releases/tag/v1.3.4
Thanks Terry
Hi @terrymacdonald
I keep this message short, because: It works! 🥳 There are no exceptions any more - every change works perfectly. Awesome! :-)
Thank you so much for your patience and for figuring out what the issue is and solving it!
Cool!
Ok, we're not finished yet though, as we now need to get that Winlibrary integrated into DisplayMagician. I'll update the code and then I'll put a test DisplayMagician build in this issue for you to try.
I'm really interested in whether the display profile drawings work. I've looked at the code recently, and it looked like it would work as soon as we got the rest of the WinLibrary working properly.
I'll have something for you soon.
Thanks Terry
On Sun, 12 Dec 2021, 04:03 matthex, @.***> wrote:
Hi @terrymacdonald https://github.com/terrymacdonald
I keep this message short, because: It works! 🥳 There are no exceptions any more - every change works perfectly. Awesome! :-)
Thank you so much for your patience and for figuring out what the issue is and solving it!
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/terrymacdonald/DisplayMagician/issues/60#issuecomment-991674479, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABLU5LDFDZSMP4UGCARSLG3UQNR43ANCNFSM5I5THSGA . Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.
@matthex I just thought - I need you to do one more NVIDIAInfo test for me please. We need to check that cloned displays still work. I made some changes to how that works in order to work more reliably, so I'd like to test that on your incredible array of screens.
PLEASE RUN THIS TEST FIRST
So can you please create a cloned windows display layout (don't use NVIDIA Surround with it):
NVIDIAInfo save cloned.cfg
Rename-Item -Path "NVIDIAInfo.log" -NewName "NVIDIAInfo-cloned-save.log"
NVIDIAInfo equal cloned.cfg
(we want it to be equal)Next swap back to the racing display layout:
NVIDIAInfo load racing.cfg
Rename-Item -Path "NVIDIAInfo.log" -NewName "NVIDIAInfo-racing-reload.log"
NVIDIAInfo equal racing.cfg
(we want it to be equal)NVIDIAInfo save racing-reload.cfg
NVIDIAInfo equal regular.cfg
(we DO NOT want it to be equal)Next swap back to the cloned display layout:
NVIDIAInfo load cloned.cfg
Rename-Item -Path "NVIDIAInfo.log" -NewName "NVIDIAInfo-cloned-reload.log"
NVIDIAInfo equal cloned.cfg
(we want it to be equal)NVIDIAInfo save cloned-reload.cfg
NVIDIAInfo equal racing.cfg
(we DO NOT want it to be equal)That should be a good enough test for cloned stuff! Please upload the results back here.
Once you've done that testing, then please download and install this test version of DisplayMagician v2.1.1.40: DisplayMagicianSetup-v2.1.1.40.zip
Please see if any of your previous Display Profiles are now working, and if they are not, please delete those Display Profiles, and recreate them. Please reply with the following information:
Thanks Terry
Hi @terrymacdonald
I first give you the results of the cloned display test:
NVIDIAInfo-cloned-save.log This worked well.
NVIDIAInfo-racing-reload.log This also worked.
NVIDIAInfo-cloned-reload.log Sadly, this does not work :-( I also tried loading "cloned" from "regular", but the same error occurs.
Ah gosh @matthex. I just found an error in the GetCurrentPCIVendors function which meant that it wouldn't detect a PCI card unless it was actively being used :(.
I've made the adjustment and have fixed up NVIDIAInfo v1.3.5. Can you please download NVIDIAINfo v1.3.5 and test that cloned config again please (same steps as last time).
Thanks! We're getting really close, and we're finding some really important bugs that affect all our user. This is excellent stuff! Thank you so much for your troubleshooting with me.
Thanks Terry
Hi @terrymacdonald
Sadly, with NVIDIAInfo 1.3.6 the same thing happens: When I load the cloned.cfg, it shows the error message as before:
Here is the log file from trying to load cloned.cfg from regular.cfg: NVIDIAInfo-cloned-load.log
And the two cfg files: NVIDIAInfo-cfgs.zip
I hope it helps.
By the way: I did the "clone test" with cloning a screen connected to the CPU to a screen connected to the graphics card. I do not know whether it makes a difference, but let me know if I should make a test with only screens connected to the graphics card.
And finally I can give some feedback to the new version of DisplayMagician (2.1.1.40):
The old regular profile did not work, but the racing profile did. After saving a new regular profile, also this was fine and switching to it works perfectly.
The drawing of the regular profile and the racing-data profile are missing the display that is connected to the CPU: (In the second screenshot, display 5 is active - it is a bit hard to see) I did not add a screenshot of the racing profile, because it looks exactly the same as "racing data", since it correctly does not draw the additional display.
In the moment I write this message and once more switch between the profiles to check an issue that might be there (it has nothing to do with the current problem, I think, because I had this problem also with v1 of DisplayMagician - I will explain in a seperate message after more testing), the switching to regular no longer works. I had to delete the regular profile and create it again to make it work. I will observe that in the next days if it happens again.
I notice that switching between the profiles makes the screens flicker once - so, loading a profile that should turn a screen off turns it off, then on, then off. As if it is loading an intermediate state. But actually, not a problem for me, I just observed it and thought to write it down. ;-) I will also test that and see, if it happens in certain conditions.
Hi @matthex ,
So if I'm reading what you're saying correctly, then NVIDIAInfo v1.3.6 and DisplayMagician 2.1.1.40 both work with handling multiple display adapters now? But that there are the following issues:
Ok. I think we need to go back to doing some more NVIDIAInfo testing just to be sure we got all the bugs. It sounds like we still have a couple to figure out, and using DisplayMagician will potentially bring in more bugs to fix. I really want to concentrate on getting the NVIDIALibrary and WinLibrary working properly, so we'll do a bit more testing just with NVIDIAInfo, and I will be very explicit again with the command order and files again, just to be sure the information is in the right order. I'm now a little confused over what works and what doesn't. I'd like to start the tests again so that we are 100% confident in the test results.
So that we can refer to these instructions later on, I'm going to call them "FULL TEST STEPS", so if later on I say "please complete the full test steps again" you'll know which ones I mean :D.
And really, really sorry the instructions are so long, but I promise it will be worth it when we get this fixed!
FULL TEST STEPS
PART 1: Remove old display configs Firstly I'd like you to delete ALL the old cfg files and the old log files, as I really want to make sure that we are using brand new configs that you'll create next.
PART 2: Create new display configs Next, create your racing display layout with some of your screens (racing):
NVIDIAInfo save racing.cfg
Rename-Item -Path "NVIDIAInfo.log" -NewName "NVIDIAInfo-racing-save.log"
NVIDIAInfo equal racing.cfg
(we want it to be equal)Next create your regular windows display layout (regular):
NVIDIAInfo save regular.cfg
Rename-Item -Path "NVIDIAInfo.log" -NewName "NVIDIAInfo-regular-save.log"
NVIDIAInfo equal regular.cfg
(we want it to be equal)NVIDIAInfo equal racing.cfg
(we DO NOT want it to be equal)Next, please create a cloned windows display layout (don't use NVIDIA Surround with it):
NVIDIAInfo save cloned.cfg
Rename-Item -Path "NVIDIAInfo.log" -NewName "NVIDIAInfo-cloned-save.log"
NVIDIAInfo equal cloned.cfg
(we want it to be equal)NVIDIAInfo equal racing.cfg
(we DO NOT want it to be equal)NVIDIAInfo equal regular.cfg
(we DO NOT want it to be equal)PART 3: Change between display configs Next swap to the racing display layout:
NVIDIAInfo load racing.cfg
Rename-Item -Path "NVIDIAInfo.log" -NewName "NVIDIAInfo-racing-reload.log"
NVIDIAInfo equal racing.cfg
(we want it to be equal)NVIDIAInfo save racing-reload.cfg
NVIDIAInfo equal regular.cfg
(we DO NOT want it to be equal)NVIDIAInfo equal cloned.cfg
(we DO NOT want it to be equal)Next swap to the regular display layout:
NVIDIAInfo load regular.cfg
Rename-Item -Path "NVIDIAInfo.log" -NewName "NVIDIAInfo-regular-reload.log"
NVIDIAInfo equal regular.cfg
(we want it to be equal)NVIDIAInfo save regular-reload.cfg
NVIDIAInfo equal racing.cfg
(we DO NOT want it to be equal)NVIDIAInfo equal cloned.cfg
(we DO NOT want it to be equal)Next swap to the cloned display layout:
NVIDIAInfo load cloned.cfg
Rename-Item -Path "NVIDIAInfo.log" -NewName "NVIDIAInfo-cloned-reload.log"
NVIDIAInfo equal cloned.cfg
(we want it to be equal)NVIDIAInfo save cloned-reload.cfg
NVIDIAInfo equal racing.cfg
(we DO NOT want it to be equal)NVIDIAInfo equal regular.cfg
(we DO NOT want it to be equal)Next swap to the racing display layout:
NVIDIAInfo load racing.cfg
Rename-Item -Path "NVIDIAInfo.log" -NewName "NVIDIAInfo-racing-reload.log"
NVIDIAInfo equal racing.cfg
(we want it to be equal)NVIDIAInfo save racing-reload.cfg
NVIDIAInfo equal regular.cfg
(we DO NOT want it to be equal)NVIDIAInfo equal cloned.cfg
(we DO NOT want it to be equal)PART 4: Restart your computer If the tests in part 1,2 & 3 all work, then please restart your computer. Windows Display API changes the adapter IDs after a restart, and so we need to restart to test that WinLibrary will cope with the new adapter IDs after a restart (it patches the Adapter IDs with the new versions).
PART 5: Change between display configs after a reboot Next swap to the racing display layout:
NVIDIAInfo load racing.cfg
Rename-Item -Path "NVIDIAInfo.log" -NewName "NVIDIAInfo-racing-reload.log"
NVIDIAInfo equal racing.cfg
(we want it to be equal)NVIDIAInfo save racing-reload.cfg
NVIDIAInfo equal regular.cfg
(we DO NOT want it to be equal)NVIDIAInfo equal cloned.cfg
(we DO NOT want it to be equal)Next swap to the regular display layout:
NVIDIAInfo load regular.cfg
Rename-Item -Path "NVIDIAInfo.log" -NewName "NVIDIAInfo-regular-reload.log"
NVIDIAInfo equal regular.cfg
(we want it to be equal)NVIDIAInfo save regular-reload.cfg
NVIDIAInfo equal racing.cfg
(we DO NOT want it to be equal)NVIDIAInfo equal cloned.cfg
(we DO NOT want it to be equal)Next swap to the cloned display layout:
NVIDIAInfo load cloned.cfg
Rename-Item -Path "NVIDIAInfo.log" -NewName "NVIDIAInfo-cloned-reload.log"
NVIDIAInfo equal cloned.cfg
(we want it to be equal)NVIDIAInfo save cloned-reload.cfg
NVIDIAInfo equal racing.cfg
(we DO NOT want it to be equal)NVIDIAInfo equal regular.cfg
(we DO NOT want it to be equal)Next swap to the racing display layout:
NVIDIAInfo load racing.cfg
Rename-Item -Path "NVIDIAInfo.log" -NewName "NVIDIAInfo-racing-reload.log"
NVIDIAInfo equal racing.cfg
(we want it to be equal)NVIDIAInfo save racing-reload.cfg
NVIDIAInfo equal regular.cfg
(we DO NOT want it to be equal)NVIDIAInfo equal cloned.cfg
(we DO NOT want it to be equal)DONE! If you get down here and everything is working then AWESOME! It means it's all working.
Please zip up all the cfgs and the log files you created, and then upload them here as normal.
Thanks Terry
@matthex Once you've done the tests above, please try and use this new test version of DisplayMagician. It includes the improvements we've made over the last few weeks.
DisplayMagicianSetup-v2.1.1.42.zip
If you get any strange behaviour with a DisplayMagician display profile, please delete the Display Profile and create it again. Then update the Game Shortcuts using that Display Profile so that the use the replacement Display Profile
Please test the following things:
If you can reply back in this issue with information about if it worked or not that would be great!
Thanks Terry
@matthex I've just fixed the GUI display for multiple adapters in DisplayMagician v2.1.1.49 test version. I tested it on another computer with multiple adapters and it worked! So please install this new version and test this to make sure that it shows all your displays correctly: DisplayMagicianSetup-v2.1.1.49.zip
Thanks Terry
@matthex Ignore all the previous comments :D. I've managed to get help from others, and I'm pretty convinced that I've fixed the multiple adapter support.
So rather than do all that other testing I asked for, can you please test out this new version for me? Please check out that it now works with your racing and regular layouts. I've made the windows all resizable. It's a little thing that's been nagging me for a while, so I wanted to get it fixed. Can you please test that the shortcut editing window works, and that the Display Profile window works? There is a possibility that a button or checkbox doesn't work now due to the changes I had to make. Would be great if you could test it for me so I'm sure everything works before the next release.
DisplayMagicianSetup-v2.1.1.64.zip
If everything is fixed, then I'll close this issue, and prepare for a new version of DisplayMagician!
Thanks Terry
Hi @terrymacdonald I am sorry for the late reply. I tested the new version (2.1.1.64) and all the drawings of my display setups and the switching between them works!
Thank you so much! 😊 I think, you can close this issue 😇
I'm so happy! That's great news. I know now that if it works with your sweet up, it will work with anyone's 😁. You have so many screens!
Will it be ok to contact you again if I need to test some new changes that might impact a large number of screens?
I'll close this issue now everything is working.
Fell free to tell your friends about DisplayMagician. And thank you for your donation too. I just saw it come through.
Thanks Terry
On Sun, 19 Dec 2021, 04:18 matthex, @.***> wrote:
Hi @terrymacdonald https://github.com/terrymacdonald I am sorry for the late reply. I tested the new version (2.1.1.64) and all the drawings of my display setups and the switching between them works! [image: image] https://user-images.githubusercontent.com/1175713/146646134-9ac7a880-78f8-4ec5-824c-dc82384178b0.png
Thank you so much! 😊 I think, you can close this issue 😇
— Reply to this email directly, view it on GitHub https://github.com/terrymacdonald/DisplayMagician/issues/60#issuecomment-997216633, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABLU5LAYSVXDRFERADWRJXTURSQ33ANCNFSM5I5THSGA . Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.
You are receiving this because you were mentioned.Message ID: @.***>
Closing issue as fixed in codebase.
Yes, sure, you can contact me any time :-) I am happy to help whereever I can ;-)
Hello @terrymacdonald
I attached the support file and here is the additional information about my system:
Operating system: Windows 10 Pro (Version 21H1) Motherboard: MSI Z370 SLI Plus (MS-7B46) CPU: Intel Core i7-8700K CPU @ 3.70GHz with Intel UHD Graphics 360 Video card: NVIDIA GeForce GTX 1080 Ti Displays make and model:
I also add a screenshot which might help to see, what the issue is: Display number 6 is the Fujitsu display that is connected to the CPU and is not recognized by Display Magician.
Thank you!
DisplayMagician-Support-20211128-1523.zip
Originally posted by @matthex in https://github.com/terrymacdonald/DisplayMagician/issues/44#issuecomment-981097614