"I changed this byte in the library to fix the problem" is the ultimate triumph of being in control of your device imo. If your CPU can do a thing, you can (in principle) always find out why it does that thing and make it do something else if you want. It's just bytes all the way down.
The corollary is that fixing any such problem is only a matter of how efficiently you can do the necessary detective work to narrow down where those important bytes are. Onlookers are often puzzled how you did something that seems impossible to them, but the key is the realization that "it's possible" was never in question. It's only a matter of finding the path to make your computer do what you want - just like programming.
(Yes, there are fundamental limits like CPU bugs, web requests or homeomorphic encryption. Normally one can be quite sure which of these are relevant in the first place though. And of course, you can't fix software that is a complete mess in the first place, but working around specific bugs is often practical.)
Nice writeup! I probably would've kept unplugging my joystick for years. Impressive how good of a job Ghidra's decompiler did on libcef - this is almost on par with HexRays.
Chromium is open source, so we can take a look at the source code:
Somewhat more retro, all that stops current nvidia drivers working on Xfree86 4.8 (from 2008, though we're working with an earlier version) is a single missing call, put this in a preloaded library:-
int miIsSolidAlpha(void)
{
/* fprintf(stderr,"miIsSolidAlpha called\n"); */
return 0;
}
I'm not sure if this is an argument for progress or not (we use embedded development systems, and it's really common to 'export DISPLAY=someothercomputer:0') this trivial hack means Eclipse/segger/other random IDE's run perfectly on systems some of which are 22 years old now.
With how much of the X server the NVIDIA driver outright replaces, I’m not surprised. It also has a ridiculously huge back-support for X ABIs. They don’t remove the old ones, and compatibility code is all baked into one driver instead of separate drivers.
This dude is amazing. My guess is that he had something more important to do and was applying the principles of structured procrastination. He had to solve every less important task before he could move onto his #1 priority.
Both posts ask at the end something like "why/how did they mess this up" but it's pretty obvious to me as a developer ... when software systems get big, teams and timelines get big, pressure for new features and fixes for more critical problems crowd out minor cleanups and quality-of-life refinements, and that helps perpetuate the cycle. I think it is kind of important to have a reminder of how the biggest, wealthiest, and most prestigious companies can have numerous small dumb bugs hidden randomly throughout their huge software suites, and not have the motivation to fix ones that have been reported for years. But one random but smart person outside the org can take a couple of days and figure it out.
Great writing skills are what really drive humanity forward.
This amazing work could have been done quietly for the benefit of the ONE.
Now the MANY benefit from the fix and more importantly the process, the challenges, the failures. Writing the post doubled the work required and likely required longer than fixing the original problem.
IF YOU DON'T WRITE IT DOWN, IT NEVER HAPPENED.
There should be a Presidential award for posts like this this
Though I'm also amazed people install Geforce Experience, see that you need to create an account to log into it (supports Facebook login even) for something you're ostensibly using to manage local Nvidia drivers, and then proceed with the installation process.
anything requiring overlay actually requires experience install (lol). i cannot figure out a way to take an ansel without experience installed so i am convinced its not actually there too
What I'm getting at is that other software can do overlays too, looking it up I notice Windows even has it built in now: https://asapguide.com/fps-game-bar/
MSI Afterburner is another one I've seen mentioned but I've not tested it.
Yes, other software can do most of what GeForce Experience can do. Not everyone wants to install and run 5 different things when the one included with their graphics driver can do them all.
Excellent writeup. Of particular note were the x64dbg Windows program debugging tool, and the Ghidra reverse engineering tool developed by the NSA. I wasn't familiar with either one before.
There's always a bigger fish. Some people think I'm smart because I can make an app, but I'm just a mere mortal code monkey compared to these true geniuses
I remember that Joystick dialogue box from years ago -- maybe even Windows 98 days. Surprised it's not been updated, but I suppose it serves it's purpose.
>Enabling raw input either as a system-wide input sink (dwFlags = RIDEV_INPUTSINK 0x100) or only on foreground focus (default, dwFlags = 0x0) causes devices to flood the HWND's message queue with WM_INPUTs, and prevents the system from becoming idle
> [...]
>Changing the 0x04 to a 0x06 means that instead of trying to get raw input from joysticks, they get it from the keyboard instead
Why does changing the usage id fix the issue? The prior paragraph suggests the issue is with the api itself, not with a particular usage id.
As i understood it, using raw input keeps the system awake and that may be working as intended (hence they suggest that Microsoft better document that//reflect it in powercfg /requests). The issue is that GeForce experience was requesting raw input when it wasn't necessary.
I believe his issue was that I'd was poorly documented, and that NVIDIA needed to use a more exclusive id. Presumably, it's not clear in the documentation that the input class NVIDIA chose also included the controller input too.
When nVidia launched ShadowPlay eons ago I gave it a try. But few hours in I decided it's too annoying and resumed to use OBS for my streaming/game recording activities hence ShadowPlay is always disabled. When I fresh install a new Windows it's on the checklist - disable ShadowPlay
Now if only someone can fix the bug with ShadowPlay that records your screen in the wrong aspect ratio event though you tell it to output in 1080p and play in 1080p with dual monitor
There's also a bug in geforce experience that will render the application useless if your username is not a valid regular expression. That's been in there for years too.
Some of the features are genuinely useful. The screen recording stuff built-in is fast, high quality, and easy to use. I have OBS set up and know how to use it but I usually use Shadowplay instead
Sure, up to the point where you've reached your screen's refresh rate. I manage to maintain a solid 60 FPS everywhere with OBS recording and doing full-software encoding, with mid-tier hardware. By the way, you can use nvenc in OBS without GeForce Experience running.
The corollary is that fixing any such problem is only a matter of how efficiently you can do the necessary detective work to narrow down where those important bytes are. Onlookers are often puzzled how you did something that seems impossible to them, but the key is the realization that "it's possible" was never in question. It's only a matter of finding the path to make your computer do what you want - just like programming.
(Yes, there are fundamental limits like CPU bugs, web requests or homeomorphic encryption. Normally one can be quite sure which of these are relevant in the first place though. And of course, you can't fix software that is a complete mess in the first place, but working around specific bugs is often practical.)