Giter VIP home page Giter VIP logo

Comments (88)

terrymacdonald avatar terrymacdonald commented on May 28, 2024 1

I'll close this issue as it will be fixed in the next release of DisplayMagician. Closing the issue helps me see what issues I have finished fixing and which ones I still have left to process. You can reopen this issue at any stage if you wish.

from displaymagician.

terrymacdonald avatar terrymacdonald commented on May 28, 2024 1

Yep. I think the same. It's time to do that for sure.

One small problem, I'm part way through an update of the NVIDIAInfo software NVIDIALibrary to include CustomDisplays and DisplayConfigs to handle some of the more advanced NVIDIA features. I'll have to get NVIDIAInfo to a stage that it works again, so please give me a few days to sort it out.

I'll get back to you after I've got it running on my test system, and I'll include a list of tests that we will do in a special order so that I can figure out where the error lies. I need to run some more tests myself first so I can get rid of as many bugs as I can before I get you to do any further work :).

Thanks
Terry

from displaymagician.

terrymacdonald avatar terrymacdonald commented on May 28, 2024 1

from displaymagician.

terrymacdonald avatar terrymacdonald commented on May 28, 2024 1

I stayed up late to bring you a test version of DisplayMagician-v2.1.0.254 with the same library ported across from NVIDIAInfo.

Please run the NVIDIAInfo-v1.3.0 first using those latest Win11 config files you made, and if that works, then please install DisplayMagician v2.1.0.254 here: DisplayMagicianSetup-v2.1.0.254.zip

IMPORTANT: Please delete all your DisplayProfiles as you need to recreate them as you moved to Windows 11, and they are Windows 10 DisplayProfiles. Then change all your game shortcuts to use the new DisplayProfiles.

I'm hoping that once you've recreated your DisplayProfiles then everything will work as it should 🤞

Good luck!

Thanks
Terry

from displaymagician.

terrymacdonald avatar terrymacdonald commented on May 28, 2024 1

from displaymagician.

terrymacdonald avatar terrymacdonald commented on May 28, 2024

Hmm. That sounds like a possible race condition. I will need you to do a trace file, and then run through that same process that your described above to get the same errors. I need those trace messages in the log file to point me to the problematic code. Without those trace error messages in the log file it will be nearly impossible to fix this.

I'm very curious to know what bit is broken, because it sounds like it's in the display logic, but then a subsequent run of the same game shortcut does work. That shouldn't work! So lots more analysis to do.

Thanks
Terry

from displaymagician.

domenic avatar domenic commented on May 28, 2024

I tried to create a trace log by changing the shortcut to have --trace at the end. I'm not sure it worked, but here is the result for the first run (that only changes to surround):

DisplayMagician.log

and here is the one for the second run (that launches the game and associated program):

DisplayMagician.log

If this did not properly put it into trace mode then please let me know exactly what command line I should use instead of

"C:\Program Files\DisplayMagician\DisplayMagician.exe" RunShortcut "90fc459c-c470-4dcf-a23d-164b403c9302" --trace

from displaymagician.

terrymacdonald avatar terrymacdonald commented on May 28, 2024

from displaymagician.

terrymacdonald avatar terrymacdonald commented on May 28, 2024

OK - Did some more testing of this today, and there was a bug I introduced fairly recently that caused this specific issue :(. I've updated in the code, so this shouldn't happen again.

from displaymagician.

domenic avatar domenic commented on May 28, 2024

Great! Let me know when there's a new alpha to install and I can help confirm.

from displaymagician.

terrymacdonald avatar terrymacdonald commented on May 28, 2024

Great news! DisplayMagician v2.0.1 has been released, and it should fix this very issue. Please test it out, and if you still have any issues please log a new issue. You can get DisplayMagician v2.0.1 from here: https://github.com/terrymacdonald/DisplayMagician/releases/tag/v2.0.1

I'm closing this issue as the fix is in DisplayMagician v2.0.1, and I need to clear out the completed issues so I am able to work on the new issues that come in.

Thanks
Terry

from displaymagician.

domenic avatar domenic commented on May 28, 2024

This issue is still occuring for me with DisplayMagician v2.0.1. Here is a trace log file from the first run (which only changes to surround):

DisplayMagician.log

and here it is from the second run (which starts the external program and the game):
DisplayMagician.log

Here is the shortcuts file, renamed from .json to .txt:

Shortcuts_2.0.txt

from displaymagician.

terrymacdonald avatar terrymacdonald commented on May 28, 2024

@domenic I did find some issues with the profile detection that may have been contributing to this issue you reported. I've spent some time testing and it appears to be fixed for me on my test system, so I'm very keen to have you test this beofre I release it to the wider community.

DisplayMagicianSetup-v2.1.0.35-test.zip

One important thing to note - it will require you to create new Display Profiles as part of the upgrade. It turns out I needed a bit more information than was available in the DisplayProfiles_2.0.json format I created earlier. So this new 2.1 version creates a DisplayProfiles_2.1.json instead.

Hopefully everything works, and then I can release a new DisplayMagician version and move on to adding other features!

Thanks
Terry

from displaymagician.

terrymacdonald avatar terrymacdonald commented on May 28, 2024

@domenic I'll leave this issue open for a week or two to wait to hear if this test version has fixed your problem. If I don't hear from you in the next week or two then I'll close the issue. Feel free to reop it after that time if you still have the issue even after installing DisplayMagician v2.1.0.

from displaymagician.

terrymacdonald avatar terrymacdonald commented on May 28, 2024

@domenic Please install this new build, and see if it's fixed the issue you had in the past.

DisplayMagicianSetup-v2.1.0.79.zip

Thanks
Terry

from displaymagician.

domenic avatar domenic commented on May 28, 2024

Unfortunately it has not. The shortcut still only changes the mode on first launch and requires clicking it a second time to launch the external program and the game.

from displaymagician.

terrymacdonald avatar terrymacdonald commented on May 28, 2024

from displaymagician.

domenic avatar domenic commented on May 28, 2024

The profiles seem to be in the latest format to me: that is, the DisplayProfiles_2.1.txt I posted above has the new ColorConfig section, whereas my DisplayProfiles_2.0.json does not have that section.

When I recreate the profiles from scratch, I get the same JSON as my above DisplayProfiles_2.1.txt (except for the UUIDs).

I have confirmed I am running DisplayMagician v2.1.079 (according to the version number in the lower left on the main DisplayMagician screen).

So if there is supposed to be extra data in my profiles, or some newer format, I think DisplayMagician is not writing that data out to the DisplayProfiles_2.1.json file.

from displaymagician.

terrymacdonald avatar terrymacdonald commented on May 28, 2024

@domenic, what step did you get in the list that I sent through? I need you to perform those tests in the order that I listed them, as that will help me understand what bits are breaking.

The list of steps I need you to follow:

  • Delete all your existing display profiles
  • Create a new triple screen profile, and a new NVIDIA Surround profile
  • Try and swap between the two profiles from the DisplayProfiles screen,
    and see if that works
  • If it does work, reboot your PC, then try and swap between the two
    profiles from the DisplayProfiles screen, and see if that works
  • If that works too, then please update some of your shortcuts to use
    the new profiles
  • Test using the newly created profiles from the Game Shortcuts, and see
    if that works.

I've just created a new test version (v2.1.0.160) and the changes I've made might help, so please install it over the top of your last install, and then try the list of tasks again.

DisplayMagicianSetup-v2.1.0.160.zip

I'm not that confident that this latest version will fix your underlying problem, but that list of tests will at least hopefully provide some extra information about what's occurring.

Thanks
Terry

from displaymagician.

domenic avatar domenic commented on May 28, 2024

I did all those steps. The result was the same as before, as you might expect from the profile JSON files being the same as before.

I will try the new version this weekend!

from displaymagician.

terrymacdonald avatar terrymacdonald commented on May 28, 2024

Sorry to be overly specific, but I really need to understand the exact point you got up to, so that I can understand what stage DisplayMagician might be failing. Based on your comments you got here:

  • Delete all your existing display profiles
  • Create a new triple screen profile, and a new NVIDIA Surround profile
  • Try and swap between the two profiles from the DisplayProfiles screen,
    and see if that works

And then it didn't work after that point (as before). Is that correct?

I think we need to move to NVIDIAInfo testing in order to progress this. Are you happy to do some more testing with NVIDIAInfo?

If so, please download the latest version of NVIDIAInfo from https://github.com/terrymacdonald/NVIDIAInfo/releases and please make the same two profiles that you're having issues with. Then please attempt to perform the swap that is causing the errors.

That should generate an NVIDIA.log. Please upload that and the two .cfg files you used, and it should hopefully give me some more information for me to test.

Thanks
Terry

from displaymagician.

domenic avatar domenic commented on May 28, 2024

It worked past that point. I rebooted and it worked after reboot. And I recreated my shortcuts using the new profiles. After that I went to the last step, to test the game shortcut. The game shortcut had the same behavior as before, of only changing the profile and not launching the game on the first click.

Happy to test with NVIDIAInfo. However I'm a bit surprised that it's at the NVIDIA level; given that the profile switching part of the shortcut works fine, and it's just the game-launching part that fails, I was hoping the fix would be in the game-launching logic.

from displaymagician.

terrymacdonald avatar terrymacdonald commented on May 28, 2024

Excellent, that clears things up a bit. I was under the impression that it was a display profile problem, hence my focus in that area. I'm not sure how I got that impression, but there you go! Glad we got that cleared up.

Are you having problems with all games, or just with Star wars old republic?

Also, can you create another Star wars old republic shortcut but don't add a start program. Then please test that. I want to know if the fault is being caused by start programs or not.

Also, can you please provide me a link to the friend location for starparse.exe? I think it could be something with starting starparse.exe which is faulting, and causing the rest of the shortcut processing to be ignored.

Can you please test with the latest test version that I just dropped here: DisplayMagicianSetup-v2.1.0.160.zip

And then report back with what you find please. Really sorry about the mix up!

[EDIT] I just saw in scrollback that you already tested this version. It must still be an issue, so I'll do some testing myself as soon as I find out what startparse.exe is

[EDIT2] Found it. Amazingly I also have SWTOR in my game collection so I'm installing it now so I can test with exactly the same game setup as you have. I should then be able to debug live on my machine and hopefully find the cause of the issue.

Thanks
Terry

from displaymagician.

terrymacdonald avatar terrymacdonald commented on May 28, 2024

@domenic OK - Now that I understand the problem, I've developed a fix for the issue. Turns out starparse.exe is a Java application that has a launcher. The launcher starts, then loads the java code as a child process, and then exits the original process. That completely broke DisplayMagician's process starting logic.

I had to completely rewrite the ProcessUtils library from scratch :(. I've now got a version of DisplayMagician that I think is pretty robust. I've been able to find some amazing example code that I've tweaked, modified and extended to completely rebuild the process starting library. The new process library does a few cool things:

  • It tries to launch programs with the correct process priority, meaning that you can select a higher priority than default if you want just a few more frames per second
  • It tries to catch launcher processes, and then automatically finds their child processes and monitors them instead.
  • It handles multiple child processes if needed
  • If it can't use some of the lower-level win32 library calls, it falls back to the standard C# process library calls, so the programs at least get started (even though they may not have a custom process priority)

I'm pretty darn happy with the code that came out of the rewrite process now, and I feel like your help pointing out all the broken bits really helped pull DisplayMagician forwards. It feels like it's nearly ready to ship (though I might need some more tweaks to support NVIDIA Display Config extraction...that's another story).

Note: I tested this with SWTOR and Starparse.exe and it worked on my machine, even handling the child processes and even closing it down after I exited SWTOR! So I'm pretty happy.

Anyway, can you please test this latest version, and see if there is anything that doesn't work. I'd love to get all the issues fixed if I can before release :D.

DisplayMagicianSetup-v2.1.0.197.zip

Thanks
Terry

from displaymagician.

domenic avatar domenic commented on May 28, 2024

Wow, thank you for all that investigative work! I was really excited to see all that you'd done. Unfortunately, I'm still having issues...

Using DisplayMagician 2.1.0.197, I deleted everything, and created new display profiles from scratch. Then I created a game shortcut for SWTOR with no pre-run program (i.e. no StarParse).

Unfortunately, the game shortcut still only changes the display profile, and doesn't launch the program. Probably it is related to these lines from the log?

2021-11-07 12:52:23.1521|DEBUG|DisplayMagician.Program|ProfileRepository/UpdateActiveProfile: The NVIDIA profile 'Surround' is currently active (in use now).
2021-11-07 12:52:23.1521|DEBUG|DisplayMagician.Program|ProfileRepository/ApplyProfile: Display change attempt took 0:6.279 and was successful.
2021-11-07 12:52:23.1521|ERROR|DisplayMagician.ShortcutRepository|ShortcutRepository/RunShortcut: Cannot apply 'Surround' Display Profile
2021-11-07 12:52:23.1521|DEBUG|DisplayMagician.Program|Beginning to shutdown

i.e. for some reason it seems to have successfuly gotten into the "Surround" mode, but then it thinks it failed and so stops the shortcut process. If I understand correctly.

I created a second shortcut that tries to launch another game (Splitgate) which has the same issue.

I've also encountered some other bugs which are troubling:

  • All my Steam games are listed twice when creating or editing a game shortcut.
  • I've several times gotten a screen "Preparing images..." which hangs forever. (Or at least, for longer than 10 minutes.) I have to "End task" on DisplayMagician from the task manager to make it stop.
    • The first time was when I was trying to edit the SWTOR shortcut
    • The second time was when I was trying to launch the SWTOR shortcut from my desktop
    • The third time was when I launched the Splitgate test game shortcut

I wish I had better news! :(

from displaymagician.

terrymacdonald avatar terrymacdonald commented on May 28, 2024

from displaymagician.

terrymacdonald avatar terrymacdonald commented on May 28, 2024

from displaymagician.

domenic avatar domenic commented on May 28, 2024

How many games do you have installed in each game library? Steam, Uplay,
Epic, Origin and Galaxy of gamers (GOG)? If you can tell me which game
libraries you don't have installed then that may help me figure out where
the bug lives.

Just Steam (although I guess Origin is installed by Steam in the background to run some games like Mass Effect)? A total of 12 games installed right now (so, 24 games showing in DisplayMagician). Here is a screenshot in case it helps:

image
image

Also, can you please try and go into the new game shortcut, and let the
image parsing screen show, and then save a copy of the DisplayMagician.log?
It should show at the bottom of the log where it has gotten stuck, and that
again will help me troubleshoot.

Here is a log. It actually allows me to create the new shortcut, and the "Preparing images..." screen is just stuck in a background window.

DisplayMagician.log

Oh, I almost forgot. As a test, could you please try changing the display
profile on that surround shortcut that fails to run, to another different
profile that doesn't use NVIDIA surround. Then try to run it after you've
made the change.

That works! I used my "Work" profile (2 monitors enabled, 1 disabled, no surround) and it launched SWTOR.

from displaymagician.

terrymacdonald avatar terrymacdonald commented on May 28, 2024

Good stuff, we're at least getting somewhere.

The steam parsing l didn't have enough logging around, so I've added some additional error checking, so I've temporarily added a 'contains' check to the steam library to make sure it only adds things that aren't already added. Can you please test this build to see if the doubled Steam icons disappear?

DisplayMagicianSetup-v2.1.0.199.zip

As for the surround profile, this is where the error lies:

2021-11-07 12:58:55.5022|ERROR|DisplayMagician.Program|WinLibrary/SetActiveConfig: ERROR - SetDisplayConfig couldn't validate the display configuration supplied. This display configuration won't work if applied.
2021-11-07 12:58:55.5022|TRACE|DisplayMagician.Program|ProfileRepository/SetActive: The Windows CCD display settings within profile Surround were NOT applied correctly.
2021-11-07 12:58:55.5022|ERROR|DisplayMagician.Program|ProfileRepository/ApplyProfile: Error applying the NVIDIA Profile!

The issue appears to be that the Windows part of the surround profile can't be applied. This is what happens when a profile is applied:

  • The NVIDIA Surround is turned on or off
  • The Windows display layout is updated to move screens around
  • Windows colour settings/refresh rate settings are applied
  • Any NVIDIA colour overrides are applied

That error message means that it is stopping on step 2 above (Windows display layout arrangement),

So, as a test, can you please create a brand new Surround profile. Please wait while you make it until no more screen changes are happening, and all the screens are in their final layouts. Then save that new surround profile as a new display profile. And then use that profile with that same SWTOR game shortcut you used before.

What I'm hoping to see is whether a newly created surround profile works. It could be that there is a bug that only happens some times when creating surround profiles, and doesn't happen other times. I'm trying to see if that is what is happening here. If it still happens with a new surround profile, then we know its something else.

Please report back with the DisplayMagician.log and the DisplayProfiles_2.1.json as I want to see what's different between the two display profiles.

Thanks
Terry

from displaymagician.

terrymacdonald avatar terrymacdonald commented on May 28, 2024

To be honest, I think we're going to need to do some testing with NVIDIAInfo to eliminate the surround profile issue. I'll have a think about it during the day while I'm at work and see what I can come up with later tonight.

What's your availability like over the next few days/week?

Thanks
Terry

from displaymagician.

domenic avatar domenic commented on May 28, 2024

So, as a test, can you please create a brand new Surround profile. Please wait while you make it until no more screen changes are happening, and all the screens are in their final layouts. Then save that new surround profile as a new display profile. And then use that profile with that same SWTOR game shortcut you used before.

I'm unsure how best to follow these instructions. How I normally create the Surround profile is the following:

  1. Open NVIDIA Control Panel
  2. Go to "Configure Surround, PhysX"
  3. Click "Configure..."
  4. This always shows my displays as 3/1/2, whereas they are physically arranged as 2/1/3. So I drag display 3 over to the right.
  5. I change the Refresh Rate dropdown from 120 Hz to 98 Hz. (98 Hz is necessary for HDR to continue working.)
  6. I click "Enable Surround"
  7. I completely exit NVIDIA Control Panel.
  8. I go to DisplayMagician and create a new profile.

Note that when I try do this again DisplayMagician says "Surround: This is the Display Profile currently in use" and will not let me create a new one. Presumably I'd have to delete the old one first.

After deleting it, closing the dialog, reopening it, and pressing "Save As", I get the following:

If there is a different sequence of instructions for creating a profile that might have a better chance of working, let me know.

What's your availability like over the next few days/week?

In general I'm available after work hours (Eastern US time) most days.

from displaymagician.

terrymacdonald avatar terrymacdonald commented on May 28, 2024

@domenic sorry for the poor instructions :(. What I meant was:

  • Recreate the surround profile (which you have done)
  • Update the SWTOR game shortcut to use the newly recreated surround profile (Surround Again)
  • Save the SWTOR game shortcut and exit back to the Main window
  • Go into the DisplayProfile window and change your display profile to a non-surround screen profile (either Work or Normal)
  • Exit back to the Main window then go into the Game Shortcut Library window again.
  • Run the SWTOR shortcut.
  • Take note of what happens, and save the DisplayMagician.log (Note - you can actually go to the Settings area of the main window and click on 'Create Support Zip File' which will collect all the config files into a single zip. That may make things a bit easier each time!)

If everything works ok, and the game runs, then that means that the previous display profile had an issue. If everything still is broken and the surround profile gets applied but the RunShortcut function exits straight after applying the profile without running anything, then that means we've got some video library testing to do :).

Thanks
Terry

from displaymagician.

domenic avatar domenic commented on May 28, 2024

The game does not run. DisplayMagician-Support-20211108-1824.zip

Ready for some video library testing!

from displaymagician.

terrymacdonald avatar terrymacdonald commented on May 28, 2024

Ok @domenic,

I got NVIDIAInfo into a state we can test with. I've tested it on my own system and it works with cloned windows, extended windows, and NVIDIA surround windows. I've tried after multiple reboots, and I can swap between all 3 types of configurations perfectly fine.

So, now it's time to try it on your system.

Can you please download NVIDIAInfo v1.2.3 zip file from https://github.com/terrymacdonald/NVIDIAInfo/releases/tag/v1.2.3 and unzip it somewhere on your computer. Then please print out the following instructions, and follow them exactly, recording what happened after each command. This is REALLY important as the order I've given these commands is exact, and they need to be run in exactly the order they are listed.

If you get any errors, please immediately save the NVIDIAInfo.log file and rename the copy to a name that will indicate what the error is for e.g. NVIDIAInfo-work-to-normal-first-time.log. Then I'll know exactly what the log file is for.

  • Open a powershell or command prompt to the same directory/folder as where you unzipped NVIDIAInfo
  • Set your screens to your 'Normal' configuration, and then run NVIDIAInfo.exe save normal.cfg to save that configuration in a cfg file.
  • Next, run NVIDIAInfo.exe equal normal.cfg which will check to see if NVIDIAInfo thinks the config we just saved is the same as the current display. We want NVIDIAInfo to say they are equal.
  • Set your screens to your 'Work' configuration, and then run NVIDIAInfo.exe save work.cfg to save that configuration in a cfg file.
  • Next, run NVIDIAInfo.exe equal work.cfg which will check to see if NVIDIAInfo thinks the config we just saved is the same as the current display. We want NVIDIAInfo to say they are equal.
  • Next, run NVIDIAInfo.exe equal normal.cfg which will check to see if NVIDIAInfo thinks the config we just saved is the same as the current display. We want NVIDIAInfo to say they are NOT equal.
  • Next, run NVIDIAInfo.exe load normal.cfg which will try to change the display layout to the Normal configuration. We want NVIDIAInfo to change to the normal layout with no errors.
  • Next, run NVIDIAInfo.exe equal normal.cfg which will check to see if NVIDIAInfo thinks the config we just saved is the same as the current display. We want NVIDIAInfo to say they are equal. If it says they are not equal, please run NVIDIAInfo.exe save error-normal1.cfg
  • Next, run NVIDIAInfo.exe equal work.cfg which will check to see if NVIDIAInfo thinks the config we just saved is the same as the current display. We want NVIDIAInfo to say they are NOT equal.

If all that testing above works without any errors, then we want to start testing the NVIDIA Surround configuration part of the code. To do that, follow these instructions:

  • Set your screens to your 'Surround' configuration within NVIDIA Control Panel, and then run NVIDIAInfo.exe save surround.cfg to save that configuration in a cfg file.
  • Next, run NVIDIAInfo.exe equal surround.cfg which will check to see if NVIDIAInfo thinks the config we just saved is the same as the current display. We want NVIDIAInfo to say they are equal. If it says they are not equal, please run NVIDIAInfo.exe save error-surround1.cfg
  • Next, run NVIDIAInfo.exe equal normal.cfg which will check to see if NVIDIAInfo thinks the config we just saved is the same as the current display. We want NVIDIAInfo to say they are NOT equal.
  • Next, run NVIDIAInfo.exe equal work.cfg which will check to see if NVIDIAInfo thinks the config we just saved is the same as the current display. We want NVIDIAInfo to say they are NOT equal.

If we get to this point, then we're really humming along :). Next test, is to change out of surround mode, and see if the other configs still work.

  • Next, run NVIDIAInfo.exe load normal.cfg which will try to change the display layout to the Normal configuration. We want NVIDIAInfo to change to the normal layout with no errors.
  • Next, run NVIDIAInfo.exe equal normal.cfg which will check to see if NVIDIAInfo thinks the config we just saved is the same as the current display. We want NVIDIAInfo to say they are equal.If it says they are not equal, please run NVIDIAInfo.exe save error-normal2.cfg
  • Next, run NVIDIAInfo.exe equal work.cfg which will check to see if NVIDIAInfo thinks the config we just saved is the same as the current display. We want NVIDIAInfo to say they are NOT equal.
  • Next, run NVIDIAInfo.exe equal surround.cfg which will check to see if NVIDIAInfo thinks the config we just saved is the same as the current display. We want NVIDIAInfo to say they are NOT equal.
  • Next, run NVIDIAInfo.exe load work.cfg which will try to change the display layout to the Work configuration. We want NVIDIAInfo to change to the work layout with no errors.
  • Next, run NVIDIAInfo.exe equal work.cfg which will check to see if NVIDIAInfo thinks the config we just saved is the same as the current display. We want NVIDIAInfo to say they are equal. If it says they are not equal, please run NVIDIAInfo.exe save error-work1.cfg
  • Next, run NVIDIAInfo.exe equal normal.cfg which will check to see if NVIDIAInfo thinks the config we just saved is the same as the current display. We want NVIDIAInfo to say they are NOT equal.
  • Next, run NVIDIAInfo.exe equal surround.cfg which will check to see if NVIDIAInfo thinks the config we just saved is the same as the current display. We want NVIDIAInfo to say they are NOT equal.

And if we reach this point, then we've tested that we can change to surround and back again and still have the equality testing working fine as well.

This test group of tests is to make sure that we can go back into surround without any errors.

  • Next, run NVIDIAInfo.exe load surround.cfg which will try to change the display layout to the Surround configuration. We want NVIDIAInfo to change to the surround layout with no errors.
  • Next, run NVIDIAInfo.exe equal surround.cfg which will check to see if NVIDIAInfo thinks the config we just saved is the same as the current display. We want NVIDIAInfo to say they are equal. If it says they are not equal, please run NVIDIAInfo.exe save error-surround2.cfg
  • Next, run NVIDIAInfo.exe equal normal.cfg which will check to see if NVIDIAInfo thinks the config we just saved is the same as the current display. We want NVIDIAInfo to say they are NOT equal.
  • Next, run NVIDIAInfo.exe equal work.cfg which will check to see if NVIDIAInfo thinks the config we just saved is the same as the current display. We want NVIDIAInfo to say they are NOT equal.

And then as a final double check, we want to go back to the work config:

  • Next, run NVIDIAInfo.exe load work.cfg which will try to change the display layout to the Work configuration. We want NVIDIAInfo to change to the work layout with no errors.
  • Next, run NVIDIAInfo.exe equal work.cfg which will check to see if NVIDIAInfo thinks the config we just saved is the same as the current display. We want NVIDIAInfo to say they are equal. If it says they are not equal, please run NVIDIAInfo.exe save error-work2.cfg
  • Next, run NVIDIAInfo.exe equal normal.cfg which will check to see if NVIDIAInfo thinks the config we just saved is the same as the current display. We want NVIDIAInfo to say they are NOT equal.
  • Next, run NVIDIAInfo.exe equal surround.cfg which will check to see if NVIDIAInfo thinks the config we just saved is the same as the current display. We want NVIDIAInfo to say they are NOT equal.

If we get here, then we're almost done. We've proved that we can swap freely between 3 different configurations so far with the testing above, but we've not checked if those configurations stay valid after a reboot. Windows changes display IDs and a whole lot of other bits of the config that I have to patch and tweak as part of the saving process. This is what I need you to test next:

  • Reboot your computer
  • Open a powershell or command prompt to the same directory/folder as where you unzipped NVIDIAInfo
  • We should still be on the work config, so lets check that it still matches after a reboot....
  • Run NVIDIAInfo.exe equal work.cfg which will check to see if NVIDIAInfo thinks the config we just saved is the same as the current display. We want NVIDIAInfo to say they are equal. If it says they are not equal, please run NVIDIAInfo.exe save error-work3.cfg
  • Next, run NVIDIAInfo.exe equal normal.cfg which will check to see if NVIDIAInfo thinks the config we just saved is the same as the current display. We want NVIDIAInfo to say they are NOT equal.
  • Next, run NVIDIAInfo.exe equal surround.cfg which will check to see if NVIDIAInfo thinks the config we just saved is the same as the current display. We want NVIDIAInfo to say they are NOT equal.

This test group of tests is to make sure that we can go back into surround without any errors, even after a reboot.

  • Next, run NVIDIAInfo.exe load surround.cfg which will try to change the display layout to the Surround configuration. We want NVIDIAInfo to change to the surround layout with no errors.
  • Next, run NVIDIAInfo.exe equal surround.cfg which will check to see if NVIDIAInfo thinks the config we just saved is the same as the current display. We want NVIDIAInfo to say they are equal. If it says they are not equal, please run NVIDIAInfo.exe save error-surround3.cfg
  • Next, run NVIDIAInfo.exe equal normal.cfg which will check to see if NVIDIAInfo thinks the config we just saved is the same as the current display. We want NVIDIAInfo to say they are NOT equal.
  • Next, run NVIDIAInfo.exe equal work.cfg which will check to see if NVIDIAInfo thinks the config we just saved is the same as the current display. We want NVIDIAInfo to say they are NOT equal.

And then as a final double check, we want to go back to the work config, proving this works after a reboot:

  • Next, run NVIDIAInfo.exe load work.cfg which will try to change the display layout to the Work configuration. We want NVIDIAInfo to change to the work layout with no errors.
  • Next, run NVIDIAInfo.exe equal work.cfg which will check to see if NVIDIAInfo thinks the config we just saved is the same as the current display. We want NVIDIAInfo to say they are equal. If it says they are not equal, please run NVIDIAInfo.exe save error-work5.cfg
  • Next, run NVIDIAInfo.exe equal normal.cfg which will check to see if NVIDIAInfo thinks the config we just saved is the same as the current display. We want NVIDIAInfo to say they are NOT equal.
  • Next, run NVIDIAInfo.exe equal surround.cfg which will check to see if NVIDIAInfo thinks the config we just saved is the same as the current display. We want NVIDIAInfo to say they are NOT equal.

If we get here, then we're done for now! This means all the bits you need are working.

If we get to the end of all these tests and they all work, then I'll get you to do some more tests for me for cloned displays. I didn't want to complicate matters right now, so we'll test those once we get your three configs working well.

Once the tests are finished, please upload the results of each individual test (one per bullet point), and please include multiple the NVIDIAInfo log files you saved earlier when you found errors. Please also include the 3 cfg files so that I can compare them all. And if there are any error-.cfg files you save, then please upload those as well.

That should be enough for me to fully understand what's happening with your displays :)

Really sorry its so much work, but these are exactly the step-by-step tests I do on my machine when I'm troubleshooting :D.

Thanks
Terry

from displaymagician.

domenic avatar domenic commented on May 28, 2024

First block of instructions gave an error at NVIDIAInfo.exe load normal.cfg, with the attached log and the following stack trace:

$ ./NVIDIAInfo.exe load normal.cfg

NVIDIAInfo v1.2.3
=================
By Terry MacDonald 2021

Attempting to apply NVIDIA display config from normal.cfg

Unhandled Exception: System.Collections.Generic.KeyNotFoundException: The given key was not present in the dictionary.
   at System.ThrowHelper.ThrowKeyNotFoundException()
   at System.Collections.Generic.Dictionary`2.get_Item(TKey key)
   at DisplayMagicianShared.NVIDIA.NVIDIALibrary.SetActiveConfigOverride(NVIDIA_DISPLAY_CONFIG displayConfig) in H:\vscode-projects\NVIDIAInfo\NVIDIAInfo\NVIDIALibrary.cs:line 1565
   at NVIDIAInfo.Program.loadFromFile(String filename) in H:\vscode-projects\NVIDIAInfo\NVIDIAInfo\Program.cs:line 345
   at NVIDIAInfo.Program.Main(String[] args) in H:\vscode-projects\NVIDIAInfo\NVIDIAInfo\Program.cs:line 116

However, the display configuration did seem to change to normal, and NVIDIAInfo.exe equal normal.cfg told me they were equal when I ran it immediately after. Also as hoped, NVIDIAInfo.exe equal work.cfg said they were NOT equal.

I'm unsure whether to proceed with the next block of instructions. Let me know if I should, or if you want to try to straighten out that KeyNotFoundException first!

from displaymagician.

terrymacdonald avatar terrymacdonald commented on May 28, 2024

from displaymagician.

terrymacdonald avatar terrymacdonald commented on May 28, 2024

@domenic Well delving into that latest error is weird. The code shouldn't be having an error in that place (which is where its trying to load ColorData after it's done the surround, and after windows has set things up, and NVIDIA then tries to set color as the last thing).

The error says that the key's aren't in the dictionary, but I know they are as I can see them in your config! So there may be a couple of things going on here. 1. Your video card may not be returning the right data when queried...but thats unlikely. 2. There is an odd serialisation error with the way that the JSON CFG files are written to disk... I've made changes in NVIDIAInfo v1.2.3b assuming this is the problem. 3. Something else I've not thought of yet.

I have tweaked the code assuming it's #2 in that list, so please go ahead and try to do the first section of tests. You can reuse the same cfg files to start with. If you get the same error as the last one you reported, please delete the cfg files and then try again.

Thanks
Terry

from displaymagician.

terrymacdonald avatar terrymacdonald commented on May 28, 2024

oh forgot to post the new code :). Please run this NVIDIAInfo for the tests:
NVIDIAInfo-v1.2.3b.zip

from displaymagician.

domenic avatar domenic commented on May 28, 2024

Same issue, even with fresh profiles.

I managed to boot up the invocation in Visual Studio and noted the failure is in this line, if it helps (decompiled code, so the variable names are presumably wrong):

foreach (KeyValuePair<string, NV_COLOR_DATA_V5> colorDataDict2 in displayConfig.ColorConfig.ColorData)
{
  NV_COLOR_DATA_V5 colorData2 = colorDataDict2.Value;
  string displayId2 = colorDataDict2.Key;
  uint displayIdAsUInt33 = uint.Parse(displayId2);
  if (colorData2.ColorSelectionPolicy != NV_COLOR_SELECTION_POLICY.NV_COLOR_SELECTION_POLICY_BEST_QUALITY && ActiveDisplayConfig.ColorConfig.ColorData[displayId2].ColorSelectionPolicy != colorData2.ColorSelectionPolicy) // HERE
  {

Indeed, displayId2 is "2147881091", but ActiveDisplayConfig.ColorConfig.ColorData does not contain that key: it contains the two keys "2147881088" and "2147881093".

Starting to speculate here: in the work configuration, my right display is turned off, i.e. only two displays are turned on. Whereas in the normal configuration all three are turned on. Maybe "2147881091" is the rightmost display ID, but ActiveDisplayConfig.ColorConfig.ColorData only contains the left and middle display.

from displaymagician.

terrymacdonald avatar terrymacdonald commented on May 28, 2024

from displaymagician.

terrymacdonald avatar terrymacdonald commented on May 28, 2024

Hi @domenic,

So I decided to add a check first rather than cause the exception, so now the situation that is causing the crash is being bypassed. Hopefully that works!

Please give it another shot with NVIDIA v1.2.3c:
NVIDIAInfo-v1.2.3c.zip

This is good stuff. I wouldn't have found that config problem without your doing what you did! 👍

Thanks
Terry

from displaymagician.

domenic avatar domenic commented on May 28, 2024

Alright, got much further this time! To

This test group of tests is to make sure that we can go back into surround without any errors.

  • Next, run NVIDIAInfo.exe load surround.cfg which will try to change the display layout to the Surround configuration. We want NVIDIAInfo to change to the surround layout with no errors.

which gives

$ ./NVIDIAInfo.exe load surround.cfg

NVIDIAInfo v1.2.3c
=================
By Terry MacDonald 2021

Attempting to apply NVIDIA display config from surround.cfg
ERROR - NVIDIAInfo Windows CCD settings were not applied correctly.

with the following logs and configs:

Note however that I did end up in surround mode after running the command.

from displaymagician.

domenic avatar domenic commented on May 28, 2024

Oh, I also ran NVIDIAInfo.exe equal surround.cfg after loading the surround config, and it said they were equal!

$ ./NVIDIAInfo.exe equal surround.cfg

NVIDIAInfo v1.2.3c
=================
By Terry MacDonald 2021

The NVIDIA display settings in surround.cfg and the currently active display configuration are equal.

from displaymagician.

terrymacdonald avatar terrymacdonald commented on May 28, 2024

@domenic was that surround.cfg.txt you uploaded the original one you created? Or is it the equivalent of the error-surround2.cfg config I mentioned here:

Next, run NVIDIAInfo.exe equal surround.cfg which will check to see if NVIDIAInfo thinks the config we just saved is the same as the current display. We want NVIDIAInfo to say they are equal. If it says they are not equal, please run NVIDIAInfo.exe save error-surround2.cfg

The error-surround2.cfg file would let me see what's different between the original surround.cfg and the current display config (error-surround2.cfg). This lets me figure out if there is a problem with equality matching, or just with a particular function that's applying some config changes.

If you're still on the surround display config then could you please generate the error-surround2.cfg file (only if you haven't already) and send that through. I'll do some comparison and see what I can find.

Thanks!
Terry

from displaymagician.

domenic avatar domenic commented on May 28, 2024

It was the original one I created. Note that NVIDIAInfo says that they are equal, so I don't think the step you're discussing applies.

from displaymagician.

terrymacdonald avatar terrymacdonald commented on May 28, 2024

@domenic it might. That equality testing is based on my custom equality testing logic, and its that part which I'd like to confirm. Those instructions I've given you are extremely specific because I want to doublecheck my work at each step. I need to confirm it is the same, and for that I need the information from you. At each step I need to be sure it is right so I can discount that as a potential flaw. It may be that a certain step works for you, but it is actually wrong in the equality code, and that is something I'll be potentially able to see if you send me the configs in the order I need them.

I'm really keen to iron out some of these logic flaws so that we fix problems for everyone, and you're currently the best person to enable this to happen. With your help I might be able to get the NVIDIALibrary finally fully ironed out of bugs.

So, if you're still in the same surround profile, it would be really helpful if you could send me the error-surround.cfg that you generate using NVIDIAInfo.exe save error-surround2.cfg. I'll then do a compare and see what differences there are between the one we asked NVIDIAInfo to set, and the one we actually got.

Thanks
Terry

from displaymagician.

domenic avatar domenic commented on May 28, 2024

I'm currently back in the normal profile. So I'll try going back to the work profile, then to surround, and then saving the result again?

from displaymagician.

domenic avatar domenic commented on May 28, 2024
Domenic@Domenic-Desktop MSYS ~/Downloads/NVIDIAInfo-v1.2.3
$ ./NVIDIAInfo.exe load work.cfg

NVIDIAInfo v1.2.3c
=================
By Terry MacDonald 2021

Attempting to apply NVIDIA display config from work.cfg
NVIDIAInfo Display config successfully applied


Domenic@Domenic-Desktop MSYS ~/Downloads/NVIDIAInfo-v1.2.3
$ ./NVIDIAInfo.exe load surround.cfg

NVIDIAInfo v1.2.3c
=================
By Terry MacDonald 2021

Attempting to apply NVIDIA display config from surround.cfg
ERROR - NVIDIAInfo Windows CCD settings were not applied correctly.


Domenic@Domenic-Desktop MSYS ~/Downloads/NVIDIAInfo-v1.2.3
$ ./NVIDIAInfo.exe save error-surround2.cfg

NVIDIAInfo v1.2.3c
=================
By Terry MacDonald 2021

Display settings successfully saved to error-surround2.cfg.

error-surround2.cfg.txt

from displaymagician.

terrymacdonald avatar terrymacdonald commented on May 28, 2024

Also, just to let you know I'm part way through a new version v1.2.4 which has some additional logging to find out what exactly Windows CCD SetDisplayConfig doesn't like about the config it's getting. Hopefully that will shed some more light on the problem. I'm trying to figure out what it hates.

In this version I've also moved where the prior color settings are removed until before the mosaic/surround screen changes, as that's where they should logically sit. This also should avoid the 'missing' dictionary keys completely, as they will still be there at this point. 🤞.

New build within the next hour or so.

from displaymagician.

terrymacdonald avatar terrymacdonald commented on May 28, 2024

@domenic I think we're getting somewhere. I have high hopes for this set of tests.....

So a summary of what I've found:

The Windows CCD display config validation function doesn't actually validate in the way we need it to :). What this means is that it is saying a display config is invalid, when it is valid with the right combination of flags. So I've disabled validation in this version, and the code will just have to handle any failures after we've tried to apply the setting. I figure that as the setting is retrieved directly from a valid, working Windows CCD Display layout anyway, then this shouldn't matter. Windows should always provide us with a valid display config, so no real need to check for a valid config in my code!

The new changed colour settings code location is working well, with no skipped screens. It's in the correct logical place now.

The Windows CCD SetDisplayConfig now logs as much information as we can from the API as to what the failure is if it cannot apply it. This should help me when troubleshooting.

Thanks for the error-surround.cfg file too. I compared that to the previous surround.cfg file and it only changes in windows adapter IDs, which is perfect! It confirms to me that the WinLibrary display config generation is working, that the WinLibrary display ID patching is working, and that the existing equality testing will work fine. 👍

So, here is a brand new NVIDIAInfo v1.2.4, and 🤞 it works! Please restart the testing, and here's hoping we get to the end without any more problems.

NVIDIAInfo-v1.2.4.zip

Thanks
Terry

from displaymagician.

domenic avatar domenic commented on May 28, 2024

Fascinating, this time I got a problem at this step:

Next, run NVIDIAInfo.exe equal normal.cfg which will check to see if NVIDIAInfo thinks the config we just saved is the same as the current display. We want NVIDIAInfo to say they are equal.If it says they are not equal, please run NVIDIAInfo.exe save error-normal2.cfg

configs-and-log.zip

I really appreciate your persistence!

from displaymagician.

terrymacdonald avatar terrymacdonald commented on May 28, 2024

Ohhhhhhh! This one is juicy. A couple of things for me to investigate. One question first - are you on Windows 11 at the moment or still on Win 10? Just want to know for future reference.

When coming back from the surround to the normal config, Windows CCD reports the items in a completely different order! This also happens in the GDI settings as well. I'll have to check whether the equality testing actually handles that situation. My gut feel is that it doesn't, and that I'll need to write a custom equality test that doesn't break when things are in different order in a dictionary and will swap to using that.

I've also noticed an issue with your NVIDIA colour config that doesn't happen with mine. As you can see from this screenshot, your HDR settings are different when changing back...

image

I wonder whether some of the past config changes have every so slightly changed the config, making them different enough that they don't match? This would impact all our testing from now on, so we're going to need to start again from the complete NVIDIAInfo beginning, and remove all the existing cfg files to start again just to make sure all the configs match the real settings again.

So, can you please delete all the .cfg's you have, and start again completely from scratch, e.g. recreate the display configs again and then go through the instructions step by step, and then we'll see if we get the same problem you got this time. If we do get the same problem then that's excellent because we know that the error is repeatable, which means we'll know when I fix it. And if we don't get the same error, then that's also excellent because we know it was an issue with reusing the old configs! (Does that make sense?)

Finally if there's one thing people can say about me , it's that I'm persistent ;P. I've spent nearly 9 months developing my own custom video libraries to support 3 different groups of video cards, so I'm definitely going to keep going until we finally get these bugs sorted! We're soooo close!

Thank you for all the time you're spending doing these tests. I know how monotonous they are, but they really are key to enable me to squash those bugs. Just imagine yourself at the end of this process just clicking on a single desktop shortcut to have all the magic happen :).

Thanks
Terry

from displaymagician.

terrymacdonald avatar terrymacdonald commented on May 28, 2024

OK, Further testing has shown that the equality tests fail for the first profile after returning from a surround profile to a non-surround profile. If that profile is applied again, then the equality tests start working again! This is shown in the following output:

NVIDIAInfo v1.2.4
=================
By Terry MacDonald 2021

Display settings successfully saved to .\test-surround-only.cfg.

PS H:\vscode-projects\NVIDIAInfo\NVIDIAInfo\bin\Debug> .\NVIDIAInfo.exe load .\test-triple-left.cfg

NVIDIAInfo v1.2.4
=================
By Terry MacDonald 2021

Attempting to apply NVIDIA display config from .\test-triple-left.cfg
NVIDIAInfo Display config successfully applied

PS H:\vscode-projects\NVIDIAInfo\NVIDIAInfo\bin\Debug> .\NVIDIAInfo.exe equal .\test-triple-left.cfg

NVIDIAInfo v1.2.4
=================
By Terry MacDonald 2021

The NVIDIA display settings in .\test-triple-left.cfg and the currently active display configuration are equal.

PS H:\vscode-projects\NVIDIAInfo\NVIDIAInfo\bin\Debug> .\NVIDIAInfo.exe equal .\test-triple-middle.cfg

NVIDIAInfo v1.2.4
=================
By Terry MacDonald 2021

The NVIDIA display settings in .\test-triple-middle.cfg and the currently active display configuration are NOT equal.

PS H:\vscode-projects\NVIDIAInfo\NVIDIAInfo\bin\Debug> .\NVIDIAInfo.exe load .\test-surround-only.cfg

NVIDIAInfo v1.2.4
=================
By Terry MacDonald 2021

Attempting to apply NVIDIA display config from .\test-surround-only.cfg
NVIDIAInfo Display config successfully applied

PS H:\vscode-projects\NVIDIAInfo\NVIDIAInfo\bin\Debug> .\NVIDIAInfo.exe equal .\test-triple-left.cfg

NVIDIAInfo v1.2.4
=================
By Terry MacDonald 2021

The NVIDIA display settings in .\test-triple-left.cfg and the currently active display configuration are NOT equal.

PS H:\vscode-projects\NVIDIAInfo\NVIDIAInfo\bin\Debug> .\NVIDIAInfo.exe equal .\test-surround-only.cfg

NVIDIAInfo v1.2.4
=================
By Terry MacDonald 2021

The NVIDIA display settings in .\test-surround-only.cfg and the currently active display configuration are equal.

PS H:\vscode-projects\NVIDIAInfo\NVIDIAInfo\bin\Debug> .\NVIDIAInfo.exe load .\test-triple-left.cfg

NVIDIAInfo v1.2.4
=================
By Terry MacDonald 2021

Attempting to apply NVIDIA display config from .\test-triple-left.cfg
NVIDIAInfo Display config successfully applied

PS H:\vscode-projects\NVIDIAInfo\NVIDIAInfo\bin\Debug> .\NVIDIAInfo.exe equal .\test-triple-left.cfg

NVIDIAInfo v1.2.4
=================
By Terry MacDonald 2021

The NVIDIA display settings in .\test-triple-left.cfg and the currently active display configuration are NOT equal.

PS H:\vscode-projects\NVIDIAInfo\NVIDIAInfo\bin\Debug> .\NVIDIAInfo.exe load .\test-triple-left.cfg

NVIDIAInfo v1.2.4
=================
By Terry MacDonald 2021

Attempting to apply NVIDIA display config from .\test-triple-left.cfg
NVIDIAInfo Display config successfully applied

PS H:\vscode-projects\NVIDIAInfo\NVIDIAInfo\bin\Debug> .\NVIDIAInfo.exe equal .\test-triple-left.cfg

NVIDIAInfo v1.2.4
=================
By Terry MacDonald 2021

The NVIDIA display settings in .\test-triple-left.cfg and the currently active display configuration are equal.

Now that this is reproducible repetitively, I should be able to figure out a work around! I'm going to save some cfg files between the responses to see what the differences are.

@domenic you don't need to do that last bit of testing any longer as I've been able to trigger the bug myself. I can now test myself if it's fixed :). When I have squashed the bug here, I'll get you to test again to make sure it's fixed for good.

Again, thanks for all your help.
Terry

from displaymagician.

terrymacdonald avatar terrymacdonald commented on May 28, 2024

Great news! I have fixed the problem on my PC, so now it's time to see how it works on yours.

NVIDIAInfo v1.2.5
=================
By Terry MacDonald 2021

Attempting to apply NVIDIA display config from .\test-triple-left.cfg
NVIDIAInfo Display config successfully applied

PS H:\vscode-projects\NVIDIAInfo\NVIDIAInfo\bin\Debug> .\NVIDIAInfo.exe load .\test-surround-only.cfg

NVIDIAInfo v1.2.5
=================
By Terry MacDonald 2021

Attempting to apply NVIDIA display config from .\test-surround-only.cfg
NVIDIAInfo Display config successfully applied

PS H:\vscode-projects\NVIDIAInfo\NVIDIAInfo\bin\Debug> .\NVIDIAInfo.exe load .\test-triple-left.cfg

NVIDIAInfo v1.2.5
=================
By Terry MacDonald 2021

Attempting to apply NVIDIA display config from .\test-triple-left.cfg
NVIDIAInfo Display config successfully applied

PS H:\vscode-projects\NVIDIAInfo\NVIDIAInfo\bin\Debug> .\NVIDIAInfo.exe equal .\test-triple-left.cfg

NVIDIAInfo v1.2.5
=================
By Terry MacDonald 2021

The NVIDIA display settings in .\test-triple-left.cfg and the currently active display configuration are equal.

So the problem turned out to be two-fold. Firstly, the colour settings had the wrong criteria for resetting the colour settings to a default. They also just didn't successfully reset the colour to the default at all. And now they do :).

Secondly, When moving from surround to non-surround, the screen changes so much that the original 'Active' colour settings that we compare against aren't valid any longer. The NVIDIA driver seems to makes it's own changes, and those mess with the colour settings. NVIDIAInfo thought the colour settings were set, when in fact the NVIDIA driver had changed them. This difference was enough for the equality tests to fail.

The fix was to get NVIDIALibrary to rescan the currently ActiveConfig so that it noticed the changes that the NVIDIA driver made. This then ensured that the DisplayMagician colour application logic worked, and now the colour gets applied as it should!

Downsides:

  • The screen flashes a couple more times when changing screens
  • The screen changes are about a second slower

Upsides:

  • The screen changes work :)

Now @domenic it's over to you. Here is NVIDIAInfo v1.2.5 to test. Can you please delete all your cfg files, and start with a new set, following the test plan I gave you earlier.

NVIDIAInfo-v1.2.5.zip

I REALLY hope it works this time. But there is a slim chance all we've done is remove some of the earlier bugs and there are still one or two to find.

Thanks
Terry

from displaymagician.

terrymacdonald avatar terrymacdonald commented on May 28, 2024

As it's working here, I've updated a new build of DisplayMagician v2.1.0.215 with those changes in it. It's working well for me now, so I'm uploading it for you as a reward just in case it all works :).

Here it is: DisplayMagicianSetup-v2.1.0.215.zip

If the NVIDIAInfo testing works without any errors, then please test DisplayMagician v2.1.0.215 and we'll see if that works too!.

Thanks
Terry

from displaymagician.

domenic avatar domenic commented on May 28, 2024

Failed at work-to-surround again, i.e.

This test group of tests is to make sure that we can go back into surround without any errors.

  • Next, run NVIDIAInfo.exe load surround.cfg which will try to change the display layout to the Surround configuration. We want NVIDIAInfo to change to the surround layout with no errors.

with the same symptoms as #41 (comment) (but with v1.2.5 in the output)

work-to-surround.zip

from displaymagician.

terrymacdonald avatar terrymacdonald commented on May 28, 2024

@domenic On my test system I have had the display apply ok when changing from a surround profile, but only after applying it twice. I need you to do the following tests in order so that I can see if that also will work on your system. Can you please do the following test with NVIDIAInfo v1.2.5:

  • Load the surround.cfg to swap to surround
  • Next, run NVIDIAInfo.exe load work.cfg which will try to change the display layout to the Work configuration.
  • Run NVIDIAInfo.exe save error-work-first-attempt.cfg to save the config right after a surround application
  • Next, run NVIDIAInfo.exe load work.cfg again. This has worked the second time fine on my system in the past, so I want to see if it works fine on yours
  • Run NVIDIAInfo.exe save error-work-second-attempt.cfg to save the config right after a surround application

Then please upload the error-work-first-attempt.cfg and the error-work-second-attempt.cfg files here please. (I'm assuming that you're going to reuse the last work.cfg and surround.cfg you uploaded in the last work-to-surround.zip)

I'm looking to see what differences there are (if any) between the original work.cfg, the error-work-first-attempt.cfg and the error-work-second-attempt.cfg files. If your system was like mine used to be, then the original work.cfg and the error-work-second-attempt.cfg will be the same, but the error-work-first-attempt.cfg will be different. If that's not the case then something else is happening. This will give me enough information to make the next set of guesses.

It mightn't seem like it, but we are getting closer and closer. 👍

Thanks
Terry

from displaymagician.

domenic avatar domenic commented on May 28, 2024

I'm not sure I fully got the instructions but I gave it a shot. Here's the command listing so you can double-check, with abbreviated outputs.

Starting in normal.cfg:

$ ./NVIDIAInfo.exe load surround.cfg

ERROR - NVIDIAInfo Windows CCD settings were not applied correctly.

$ ./NVIDIAInfo.exe load surround.cfg

The display settings in surround.cfg are already installed. No need to install them again. Exiting.

$ ./NVIDIAInfo.exe load work.cfg

NVIDIAInfo Display config successfully applied

$ ./NVIDIAInfo.exe load surround.cfg

ERROR - NVIDIAInfo Windows CCD settings were not applied correctly.

$ ./NVIDIAInfo.exe save error-work-first-attempt.cfg

Display settings successfully saved to error-work-first-attempt.cfg.

$ ./NVIDIAInfo.exe load work.cfg

NVIDIAInfo Display config successfully applied

$ ./NVIDIAInfo.exe load surround.cfg

ERROR - NVIDIAInfo Windows CCD settings were not applied correctly.

$ ./NVIDIAInfo.exe save error-work-second-attempt.cfg

Display settings successfully saved to error-work-second-attempt.cfg.

work-multiple-attempts.zip

from displaymagician.

domenic avatar domenic commented on May 28, 2024

BTW I can reproduce this issue without involving the work profile at all. That might be helpful because it eliminates the 2 vs. 3 monitors consideration.

From a fresh setup (with newly-created normal.cfg and surround.cfg):

$ ./NVIDIAInfo.exe save normal.cfg

Display settings successfully saved to normal.cfg.


(... use NVIDIA Control Panel to set to Surround ...)


$ ./NVIDIAInfo.exe save surround.cfg

Display settings successfully saved to surround.cfg.

$ ./NVIDIAInfo.exe load normal.cfg

NVIDIAInfo Display config successfully applied

$ ./NVIDIAInfo.exe load surround.cfg

ERROR - NVIDIAInfo Windows CCD settings were not applied correctly.

$ ./NVIDIAInfo.exe load surround.cfg

The display settings in surround.cfg are already installed. No need to install them again. Exiting.

$ ./NVIDIAInfo.exe equal surround.cfg

The NVIDIA display settings in surround.cfg and the currently active display configuration are equal.

$ ./NVIDIAInfo.exe save error-normal-to-surround-1.cfg

Display settings successfully saved to error-normal-to-surround-1.cfg.

$ ./NVIDIAInfo.exe load normal.cfg

NVIDIAInfo Display config successfully applied

$ ./NVIDIAInfo.exe load surround.cfg

ERROR - NVIDIAInfo Windows CCD settings were not applied correctly.

$ ./NVIDIAInfo.exe save error-normal-to-surround-2.cfg

Display settings successfully saved to error-normal-to-surround-2.cfg.

normal-to-surround-errors.zip

from displaymagician.

domenic avatar domenic commented on May 28, 2024

I spent a bit of time in the debugger, and maybe this is clear already from the logs, but the following line is failing:

switch (CCDImport.SetDisplayConfig(myPathsCount, displayConfig.DisplayConfigPaths, myModesCount, displayConfig.DisplayConfigModes, SDC.SDC_USE_SUPPLIED_DISPLAY_CONFIG | SDC.SDC_APPLY | SDC.SDC_SAVE_TO_DATABASE | SDC.SDC_ALLOW_CHANGES | SDC.SDC_FORCE_MODE_ENUMERATION))

and ending up in

case WIN32STATUS.ERROR_INVALID_PARAMETER:

from displaymagician.

domenic avatar domenic commented on May 28, 2024

Here is a dump file that you can load up in Visual Studio to get all the local variable values at that time (73 MiB): https://www.dropbox.com/s/4p2ttj2ibc9syfj/NVIDIAInfo.dmp.zip?dl=0

from displaymagician.

terrymacdonald avatar terrymacdonald commented on May 28, 2024

@domenic thanks

My guess at the issue (I haven't looked at the logs yet) was that some of the order of screens in Windows is different returning from a surround install, and that is causing the failure. I'm not quite sure why its doing it on your computer versus mine, but it could well be a Windows 10 vs Windows 11 issue here as well.

That debugger line is an excellent help to me, as I can zero in on exactly the failing statement! So thank you. I'll check out the rest of the logs and information your provided later this evening and see what I can extract from this.

Thank you so much for all your help!

Terry

from displaymagician.

terrymacdonald avatar terrymacdonald commented on May 28, 2024

@domenic,

I have a suspicion that Win 10 or the NVIDIA driver might be hating the SDC_FORCE_MODE_ENUMERATION flag sent to the SetDisplayConfig, So, I've created NVIDIInfo-v1.2.5b which removes that flag specifically.

NVIDIAInfo-v1.2.5b.zip

Can you please perform that exact same test you've done before (got to surround, then go to a non-surround config straight after) as I want to see if that flag is the reason it was erroring. Please grab the configs in the same way that you did above as that's perfect.

This will help me understand if I need to change the structure of the display paths, or whether its the flags being send that are the issues. The weird thing in all of this is that it works perfectly on my Win 11 system with a Gigabyte Aorus RTX 3070Ti running NVIDIA driver v460.49.

What version of the NVIDIA display Driver are you on right now BTW? And are you installing the stock driver or using some sort of customised 'lite' installer?

Thanks
Terry

from displaymagician.

terrymacdonald avatar terrymacdonald commented on May 28, 2024

@domenic After looking through your files, they are all the same in order, which is actually different to what happens in my situation with my hardware (!?!). It looks as thought NVDIA and Windows work together differently depending on hardware config. There is no difference between your files when it fails, yet there were differences between my files when it failed. That tells me it's most unlikely to be the same problem we're facing...(though there is still a 5% chance it could be)

I'm REALLY hoping that NVIDIAInfo-v1.2.5b works for you, as it would be easiest for everyone if the SDC_FORCE_MODE_ENUMERATION flag was the thing causing the issues with your hardware/windows/driver combination. It's not a critical thing, as SDC_ALLOW_CHANGES should still be enough for the display profile to work on machines after a reboot.

If you're interested you can read through the minimalistic documentation at https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setdisplayconfig to see the flags I'm talking about.

I'll be watching the results of your testing SO VERY CLOSELY.

Thanks
Terry

from displaymagician.

domenic avatar domenic commented on May 28, 2024

I ran the steps in #41 (comment) and got the same results :(. Maybe a couple more flickers on the first transition back to normal.

normal-to-surround-1.2.5b.zip

What version of the NVIDIA display Driver are you on right now BTW? And are you installing the stock driver or using some sort of customised 'lite' installer?

Stock driver installed through GeForce Experience. I am on version 496.49 although I just got the notification that 496.76 is out; I will try that soon.

I also just got the "Windows 11 is ready" update notification as well. I'll probably delay that update until at least Thursday, or maybe the weekend, just in case something goes wrong.

I do suspect the issue could be with the other stuff being passed in. Did you get a chance to check out the dump file? I don't really know what any of the values are supposed to be, but I found it potentially suspicious that displayConfig.DisplayConfigModes[0].SourceMode.Height is 0, and Width is the exact same value as PixelFormat (both 2550430000). Other suspicious values were displayConfig.DisplayConfigModes[1].TargetMode.TargetVideoSignalInfo.HSyncFreq being 5 / 0 and VSyncFreq being 0 / 0.

Although, now that I dig deeper, it seems like maybe [0] contains a bogus SourceMode and a good TargetMode, whereas [1] contains a good SourceMode and a bogus TargetMode, which seems like maybe that's supposed to be how it works. Ah, yeah, I see from the docs you linked that they use a union for sourceMode vs. targetMode so I guess that makes sense.

Maybe TotalSize being 11700 / 2225 while ActiveSize is the more-expected 11520 / 2160 could be the problem? I'm not using any bezel correction, I swear. Anyway, I'll stop guessing now and leave it to the expert :)

from displaymagician.

terrymacdonald avatar terrymacdonald commented on May 28, 2024

@domenic As you rightly point out the structures are all unions. The structure is used in different ways depending on what 'mode' it is. C# doesn't have the concept of the differences, so the same structure is used for all path objects when written to JSON (even through the underlying code treats them completely differently.

Those path objects are all grabbed from QueryDisplayConfig, which returns the relevant object. I grab the objects, and store them as-is. There is no modification made to the objects on storage.

When we go to apply the new windows display config, the only change I make is to 'patch' the displayadapter id with the one currently in use by the OS. Windows HELPFULLY changes this after a reboot. This patching was needed to get the display to apply after a reboot. No other changes are made.

This is why I am puzzled. At the moment it seems that SetDisplayConfig doesn't like the information that it generated itself when it is supplied after a return from a surround profile the first time, but is more than happy to get it the second time. This is very odd. It smacks of a NVIDIA Windows driver problem to me, as it seems to happen when Windows returns from a surround profile, that it doesn't work properly.

My gut feel is that the NVIDIA driver messes up the order of the paths in Windows, and that this causes the first problem when it is used. I can 'fix' this by just applying the profile twice after a return from a surround profile, but that doesn't let me help understand what is happening.

After checking your latest error in NVIDIAInfo.log, it mentions that SetDisplayConfig failed with a ERROR_INVALID_PARAMETER. Yet the exact same code works fine for me on my system. It all just works for me. So it does seems like there could be an issue with that NVIDIA driver?

In any case, the best way to get this sorted might be to have the code just try again if there is an issue with the ERROR_INVALID_PARAMETER error during the first attempt to apply the config. I've made a code change that will re-attempt if it fails with that error, and have made NVIDIAInfo v1.2.5c here:
NVIDIAInfo-v1.2.5c.zip

Please try that, and see if that works. If it doesn't, then I might try adding the SDC_FORCE_MODE_ENUMERATION back in....

Thanks
Terry

from displaymagician.

domenic avatar domenic commented on May 28, 2024

Note that on my system with the repro steps in #41 (comment) I never am able to enter the surround profile without errors. The very first time I run NVIDIAInfo.exe load surround.cfg I get ERROR - NVIDIAInfo Windows CCD settings were not applied correctly.

1.2.5c has the same problem: NVIDIAInfo.log

from displaymagician.

domenic avatar domenic commented on May 28, 2024

If this is really a driver issue then maybe the best course is to admit defeat and just ignore the invalid parameter error? At least for my use case I can't find anything that is missing; it's just the error message being output. So presumably if you ignored that error, that would solve the original problem, since DisplayMagician could then proceed to launch my game even if there's an error in that step.

from displaymagician.

domenic avatar domenic commented on May 28, 2024

OK, I have a clue.

Using 1.2.5c, I was able to create a surround profile that loads without error. However, the problem is that the ordering of the displays is wrong. Let me explain.

Normally, when I am first creating my surround profile, I go to NVIDIA Control Panel's surround configuration and it shows me this:

Displays in 3 1 2 order

However, my displays are actually arranged in 2 1 3 order. So I drag the monitors around until I get this:

Displays in 2 1 3 order

I then create surround.cfg.

This time, I did not drag my displays around, leaving them in the 3 1 2 order NVIDIA Control Panel starts them in when I enter the "Configure Surround" screen. I then ran NVIDIAInfo.exe save surround-bad-order.cfg, then back to NVIDIAInfo.exe load normal.cfg.

Then, upon running NVIDIAInfo.exe load surround-bad-order.cfg, it loaded without error:

NVIDIAInfo v1.2.5c
=================
By Terry MacDonald 2021

Attempting to apply NVIDIA display config from surround-bad-order.cfg
NVIDIAInfo Display config successfully applied

Of course, the order is wrong, so my mouse cursor goes to the wrong display whenever I move it to the edge of one display. But at least it loads.

This does suggest a possible workaround for me would be to physically move my monitor plugs around so that whatever order NVIDIA Control Panel shows by default, is correct. Hopefully then the profile I create would apply without error. But maybe you want to investigate the issue yourself...

configs-with-bad-order-1.2.5c.zip: in this ZIP file:

  • surround.cfg is from a previous boot
  • surround-bad-order.cfg is the one created per the above by not rearranging the displays
  • surround-2.cfg is created by rearranging the displays in NVIDIA Control Panel, after loading surround-bad-order.cfg with NVIDIAInfo. It appears to only differ from surround.cfg in adapter ID.

Both surround.cfg and surround-2.cfg give the usual error when trying to load them, whereas surround-bad-order.cfg loads without error.

from displaymagician.

domenic avatar domenic commented on May 28, 2024

Hmm, interestingly after successfully loading surround-bad-order.cfg I lose HDR. This does not happen after loading surround.cfg; surround.cfg has correct HDR.

After I manually turn HDR back on using Windows Control Panel, and save the result as surround-bad-order-hdr.cfg, now I'm back to things failing every time. So I guess the issue is HDR, not ordering...

Yep, just confirmed. The surround-no-hdr.cfg attached works fine (and the displays are in my desired 2 1 3 order), whereas the surround-bad-order-hdr.cfg gives an error.
configs-comparing-hdr-1.2.5c.zip

from displaymagician.

terrymacdonald avatar terrymacdonald commented on May 28, 2024

@domenic OK, just to completely confirm, are you doing the following when setting up the Surround config?

  • Opening NVIDIA Control Panel
  • Clicking on Configure Surround
  • Clicking on Configure button
  • Waiting until the NVIDIA Set Up Surround window opens
  • Dragging the screens into the correct order
  • Click Enable Surround
  • Wait until the screen changes, and the NVIDIA Set Up Surround window is re-drawn
  • Close the NVIDIA Set Up Surround window by clicking the X in the top right of the window
  • Close the NVIDIA Control Panel
  • Swap to the NVIDIAInfo powershell window
  • run the NVIDIAInfo save surround.cfg command in the window to store the surround config.

Is that exactly how you're doing it @domenic? I just want to confirm the steps, as the above steps are how I do my testing.

One of the important things with troubleshooting is to try and work out a pattern that always happens reliably, as that will then point you towards the likely place that the error happens. I can't do that with the situation you've described...it's just too strange!

As far as I can remember, the following situations are true:

  • When you change from normal.cfg to surround.cfg, there is a Windows CCD error when the SetDsiplayConfig is run.
  • When you change from surround.cfg to normal.cfg, there is a Windows CCD error when the SetDsiplayConfig is run.

None of those calls to SetDisplayConfig include HDR. HDR is set afterwards, once that above step completes. The HDR part you found is interesting, but I would need to see the NVIDIAInfo.log file error message before I would believe that is definitely the issue. The reason is that could be an error that is actually caused by something upstream. I need to have the actual error in the logs to be sure which point is failing.

I have also given you a slightly tweaked version of NVIDIAInfo-v1.2.5d to test with. I have added some better logging in it, and tried to give the Mosaic/Surround NVAPI calls a little longer to 'settle down' before continuing to avoid any race conditions. Can you please use this version of NVIDIAInfo for your tests?:
NVIDIAInfo-v1.2.5d.zip

Some tests for HDR which might shed some light: (don't use NVIDIA HDR settings for any of these tests - only Windows HDR)

  1. Can you please try setting up a surround without HDR, and then try changing from that to an non-surround without HDR? I'd like to test if this works ok. Please keep the NVIDIAInfo.log.
  2. Can you please try changing from a non-surround without HDR to a surround without HDR? This test and the one above will check that non-HDR to non-HDR works ok. Please keep the NVIDIAInfo.log.

If we get to this stage without errors, then we know non-HDR is fine. We next need to test the HDR to HDR functionality. Firstly.....

  1. Can you please then setup a HDR surround, and then try changing from that to a HDR non-surround? Please keep the NVIDIAInfo.log.
  2. Can you please then try swapping back to the HDR surround? Please keep the NVIDIAInfo.log.

If we get here, then we know that HDR-to-HDR works. Next step is to check the HDR-to-non-HDR.

  1. Can you please then try changing from a surround without HDR to a HDR non-surround? Please keep the NVIDIAInfo.log.
  2. Can you try to change back to a surround without HDR?

If we get here then I'll figure out what to do next.

Thanks
Terry

from displaymagician.

domenic avatar domenic commented on May 28, 2024

OK, just to completely confirm, are you doing the following when setting up the Surround config?

Yes, exactly that.

When you change from surround.cfg to normal.cfg, there is a Windows CCD error when the SetDsiplayConfig is run.

This is not correct. Changing to normal.cfg always works with no error.

I'll try to run the tests you indicate tonight when I'm back at my home computer!

from displaymagician.

terrymacdonald avatar terrymacdonald commented on May 28, 2024

from displaymagician.

domenic avatar domenic commented on May 28, 2024

I ran a series of the tests you mentioned. logs-and-configs-v1.2.5d.zip

  • normal-sdr to surround-sdr: success
  • surround-sdr to normal-sdr: success
  • normal-sdr to surround-hdr: fail
  • surround-hdr to normal-hdr: success
  • normal-hdr to surround-hdr: fail according to NVIDIAInfo, although it did successfully enter surround HDR
  • surround-hdr to surround-sdr: success according to NVIDIAInfo, but it did not change away from HDR settings according to Windows Display Settings / NVIDIA Control Panel, and running NVIDIAInfo.exe equal surround-sdr.cfg immediately afterward showed them as NOT equal.

from displaymagician.

terrymacdonald avatar terrymacdonald commented on May 28, 2024

from displaymagician.

terrymacdonald avatar terrymacdonald commented on May 28, 2024

OK, I have a theory I'd like us to test. It's possible that when NVIDIA returns from a surround profile that it takes a while to settle down. I think that could be possibly be causing issues when windows tries to measure the current display layout.

So I've added in a reallllllly long pause after applying/removing a surround profile into this version of NVIDIAInfo. Its a 10 second pause, (just to see if a really long pause works) so don't be surprised if it takes ages to change :). This will help us see if this is part of the problem.

NVIDIAInfo-v1.2.5e.zip

Can you please try the normal-sdr to surround-hdr transition again please? And we'll see if it works this time. 🤞

Thanks
Terry

from displaymagician.

terrymacdonald avatar terrymacdonald commented on May 28, 2024

Also - I realised that I cannot test surround-hdr, as only one of my displays is HDR ready :(. So I'll be relying on you for that part of the testing.

from displaymagician.

domenic avatar domenic commented on May 28, 2024

One further question... Were all of those HDR profiles only using Windows HDR?

Yes, at least, that is the only setting I've modified.

Relatedly: I've noticed that Windows HDR has a 1:1 correspondence with NVIDIA Control Panel's 8-bit vs. 10-bit setting, i.e. if I set HDR in Windows NVIDIA Control Panel flips to 10-bit, and if I turn off HDR in Windows NVIDIA Control Panel flips to 8-bit. Similarly if I change from 10-/8-bit in NVIDIA Control Panel, Windows switches from HDR on to HDR off.

I'll run a new round of tests tonight!

from displaymagician.

terrymacdonald avatar terrymacdonald commented on May 28, 2024

from displaymagician.

domenic avatar domenic commented on May 28, 2024

No luck :(

NVIDIAInfo.log going from normal-hdr to surround-hdr, still errors.

from displaymagician.

terrymacdonald avatar terrymacdonald commented on May 28, 2024

from displaymagician.

domenic avatar domenic commented on May 28, 2024

It semi-instantly fails now. NVIDIAInfo.log

That is interesting because back with the original v1.2.5 it just said that we were already in the surround configuration... see #41 (comment) . I wonder if upgrading to Windows 11 caused this.

I will try with fresh profiles re-created on Windows 11 to see if that makes a difference...

So the next question is what do we do now?

I'm somewhat inclined to go with the "ignore invalid parameter error" option...

from displaymagician.

terrymacdonald avatar terrymacdonald commented on May 28, 2024

from displaymagician.

domenic avatar domenic commented on May 28, 2024

OMG. With Windows 11 recreated profiles it seems to be working... I can go back and forth between normal-hdr and surround-hdr with no errors several times.

I'm going to try 1.2.5d to see if the extra pause is necessary or if Windows 11 fixed things somehow.

Here are the configs in case it illuminates anything... the only diff I notice is PixelFormat changing from 5 to 4?
windows-10-vs-windows-11-configs.zip

from displaymagician.

domenic avatar domenic commented on May 28, 2024

OK, 1.2.5d works too. So it seems like it's some combination of the changes you made between v1.2.3 and v1.2.5d, combined with Windows 11.

I should go to sleep now, but tomorrow I'm happy to try other builds, e.g. if there are changes (besides the extra long pause in 1.2.5e) which you'd like to try reverting. Just let me know. Now that I have these two golden profiles which I can switch between...

from displaymagician.

terrymacdonald avatar terrymacdonald commented on May 28, 2024

That's awesome news! \o/

Yes indeed, I'll create a new build with only 0.5sec wait time when swapping to/from a surround profile. I'll make sure I have it waiting for you when you get home from work :)

Based on your comments I'm contemplating adding an OS version into the file format, so that DM would warn when changing Operating Systems. But looking at the code, it's just too hard to do reliably until I move the codebase to .NET6.0, and that's not going to happen for a while yet, as I really need a break after so many months sorting out DisplayMagician v2.1 :). (as I'm sure you do too!)

Anyway - new version of NVIDIAInfo to test is inbound shortly.

from displaymagician.

terrymacdonald avatar terrymacdonald commented on May 28, 2024

OK - after some more testing I found that I had mucked up Windows HDR removal (rolls eyes). That is now fixed, and I'm so confident in this build that I've made it an official NVIDIAInfo v1.3.5 release which you can get here: https://github.com/terrymacdonald/NVIDIAInfo/releases/tag/v1.3.0

Can you please test it out, and make sure it's working fine.

I will continue to port the updates to AMDInfo and CCDInfo and DisplayMagician so they all stay in lockstep. I'll also drop a new DisplayMagician here for you to test too if I have enough time tonight. It could be later tomorrow though as I'm pretty tired :).

Thanks
Terry

from displaymagician.

domenic avatar domenic commented on May 28, 2024

It's working!! I just was able to play my game in surround via clicking on the shortcut, once, launching both the game and the associated. And after I was done it switched back to normal.

Thanks so much!

from displaymagician.

Related Issues (20)

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.