I think this situation can only be fixed by moving up into languages that compile to vendor specific GPU languages. Just treat CUDA, openCL, vulkan compute, metal compute(??) etc. as the assembly of graphics cards.
CUDA wiped out OpenCL, because it went polyglot as of version 3.0, while insisting that everyone should write in a C dialect.
They also provide great graphical debugging tools and libraries.
Khronos waited too long to introduce SPIR, and in traditional Khronos fashion, waited for the partners to provide the tooling.
One could blame NVidia, but it isn't as the competition has done a better job.