OpenGL remaining tasks
- [x] Fix remaining regressions after optimization changes (Nier) - https://github.com/RPCS3/rpcs3/pull/12169
- [x] Accelerate CopyImageToBuffer and CopyBufferToImage to improve typeless copy performance.
- [x] Refactor GLHelpers into something more manageable
- [x] Accelerate BGRA<->RGBA operations
- [ ] SPIRV shader compiler
- [x] Implement proper async shader compilation using the extension (Cancelled, not feasible)
- [x] Port FSR to work with GL
- [ ] MSAA support
Link #11432
Optimizations are mostly complete, but I need to avoid doing full buffer round-trips for some data types when doing copies. These can be trivially implemented using custom shaders. Specifically BGRA<->RGBA conversions need not use the slow copy method with double compute pipelines. After that I only need to do async shader compilation and FSR to get OGL to have functional parity with Vulkan.
I implemented the SPIRV recompiler years ago but had to throw it away since it doesn't support traditional uniforms. This isn't really a big deal since we can rewrite all shaders to go with UBOs but it is very inconvenient to rewrite all the passes without some refactoring first. Fortunately this is in progress slowly over time to use unified shaders with vulkan, so I'll leave the point open as I'll get around to it eventually. That said, it may not be worth pursuing especially as intel's new drivers may already be good enough to compile glsl without bugs.
MSAA now supported after https://github.com/RPCS3/rpcs3/pull/16683