GPU folks: we need to talk about control flow
Buggy shader compilers are no surprise to me but it&#x27;s a serious issue that needs to be addressed by <i>all</i> GPU vendors. Vulkan and SPIR-V may help a little as the GLSL compiler frontend is moved out of the &quot;driver&quot; component and the resulting SPIR-V blob can be more easily manipulated.<p>There are some major issues at play:<p>1) Shipping an OpenGL-based product on multiple vendors&#x27; devices (especially on mobile) requires a huge amount of QA effort and per-device bug workarounds. Pretty much everyone makes their games on top of Unity&#x2F;Unreal&#x2F;etc because the engine vendors do most of the QA work.<p>2) Issue #1 is made worse by the fact that many consumer devices do not get GPU driver updates because the phone&#x2F;tablet OEM end-of-lifes their products too soon and&#x2F;or the mobile operators and other middlemen don&#x27;t ship updates as they should. This means that if you ship a GPU-using product, you need to support devices with old, buggy drivers and this is expensive.<p>3) There&#x27;s a huge untapped potential in GPUs, there are very few non-graphics apps taking advantage of the processing power but I can&#x27;t see it changing for the better before GPUs become easier to target and verify correctness of operation.<p>It would be too easy to blame GPU vendors&#x27; software engineering practices, but I (as a GPU driver programmer) see that the bigger problem is issue #2 (not that the GPU drivers are faultless). Even if the drivers <i>do</i> get fixed and updated, getting the updates to the hands of the customers is still going to be an issue. The middlemen need to be cut out of the equation, we can&#x27;t be dependent on the business requirements of OEMs and operators when shipping mission critical software infrastructure.<p>This is a bit of a chicken and egg problem, games are not important enough to OEMs and operators fixing their update delivery mechanisms, but no-one dares to use GPUs for anything more important before this issue gets sorted out.