A deep-dive into debugging a GPU fault in an open-source Apple AGX graphics driver (part of the Asahi Linux project). The bug caused rendering failures with large amounts of geometry. Investigation revealed that AGX, as a tile-based deferred renderer, uses a 'parameter buffer' (tiled vertex buffer) to store all per-vertex data before fragment shading. When this buffer overflows, the GPU performs a 'partial render' — but the open-source driver wasn't supplying the required auxiliary GPU programs to reload the framebuffer and depth buffer into the tilebuffer after a partial render. Fixing the null pointer fault by providing the missing load program resolved GPU crashes, but depth buffer state also needed to be stored and reloaded across partial renders to fully fix rendering artifacts.
Sort: