panfrost: Implement a disk cache
Wire up the Mesa shader disk cache into Panfrost. Coupled with the precompiles from the previous patch, this should greatly reduce shader recompile jank. This is a bare bones implementation. Obvious future work includes: - Caching internal (outside of Gallium) shaders - Implement finalize_nir to reduce on disk size of shaders That doesn't need to come in this patch. This patch does shuffle some allocation patterns around to avoid extra nir_shader_clones, but the result should be pretty clean. --- Consider dEQP-GLES31.functional.ssbo.layout.basic_unsized_array.* in the CTS. With a cold cache: 44.11user 0.66system 0:45.44elapsed 98%CPU (0avgtext+0avgdata 267804maxresident) k 0inputs+0outputs (130major+74725minor)pagefaults 0swaps But with this commit and a warm cache: 4.07user 0.35system 0:04.56elapsed 96%CPU (0avgtext+0avgdata 211012maxresident) k0inputs+0outputs (1major+49489minor)pagefaults 0swaps That's an 11x improvement! Signed-off-by:Alyssa Rosenzweig <alyssa@collabora.com> Part-of: <mesa/mesa!19363>
- src/gallium/drivers/panfrost/meson.build 1 addition, 0 deletionssrc/gallium/drivers/panfrost/meson.build
- src/gallium/drivers/panfrost/pan_context.c 1 addition, 0 deletionssrc/gallium/drivers/panfrost/pan_context.c
- src/gallium/drivers/panfrost/pan_context.h 49 additions, 3 deletionssrc/gallium/drivers/panfrost/pan_context.h
- src/gallium/drivers/panfrost/pan_disk_cache.c 175 additions, 0 deletionssrc/gallium/drivers/panfrost/pan_disk_cache.c
- src/gallium/drivers/panfrost/pan_screen.c 12 additions, 0 deletionssrc/gallium/drivers/panfrost/pan_screen.c
- src/gallium/drivers/panfrost/pan_screen.h 2 additions, 0 deletionssrc/gallium/drivers/panfrost/pan_screen.h
- src/gallium/drivers/panfrost/pan_shader.c 99 additions, 69 deletionssrc/gallium/drivers/panfrost/pan_shader.c