yeah, it's hard to overstate the importance of getting your hardware into people's hands to work with. A $5k buy-in before you can even play with programming on a device and figure out if your program is going to work on GPGPU at all is a big deal! CUDA being accessible on a $100 gaming GPU has enabled a lot of development, and NVIDIA also has made big efforts to get their hardware out to universities, and that has paid big dividends as well.
Also, just flat-out using your own developers to write the basic code for libraries and frameworks and so on. There are tons of basic libraries like CuRAND and CUB (Cuda UnBound) and I'm sure tons of others that NVIDIA wrote not because a customer wanted that, but because it was building blocks that others could leverage into products that would sell NVIDIA hardware. In contrast AMD has fallen behind in that area, and has further fragmented their development work across a bunch of "flavor of the week" frameworks and implementations that usually get discarded within a couple years (remember HIP? remember Bolt? etc)
Also, just flat-out using your own developers to write the basic code for libraries and frameworks and so on. There are tons of basic libraries like CuRAND and CUB (Cuda UnBound) and I'm sure tons of others that NVIDIA wrote not because a customer wanted that, but because it was building blocks that others could leverage into products that would sell NVIDIA hardware. In contrast AMD has fallen behind in that area, and has further fragmented their development work across a bunch of "flavor of the week" frameworks and implementations that usually get discarded within a couple years (remember HIP? remember Bolt? etc)