Driver de GPU
Alternando entre Panfrost (open-source) e libmali (proprietário)
Dois drivers de GPU acompanham o sistema. O ArchR inicializa com Panfrost (Mesa) por padrão, com libmali disponível como opt-in.
Referência rápida
| Panfrost | libmali | |
|---|---|---|
| Origem | Open-source (Mesa) | Proprietário (blob da ARM) |
| API | OpenGL 3.1, GLES 3.1 | Apenas GLES 3.1 |
| Vulkan | PanVK (experimental) | Sim (apenas Mali-G31) |
| Padrão | ✅ | - |
| RetroArch mais antigo | ⚠️ pode precisar de Mesa mais novo | ✅ mais próximo do stock |
| Desenvolvimento ativo | ✅ Mesa semanalmente | Congelado no BSP do fornecedor |
Trocar de driver
EmulationStation → System Settings → Graphics → GPU driver → escolha panfrost ou libmali. Reinicie.
A configuração é persistida em /storage/.config/system.cfg (gpu.driver=panfrost|libmali). No boot, o script gpudriver --start:
- Carrega o módulo de kernel escolhido (
panfrostoumali_kbase) - Faz bind-mount das bibliotecas de userspace corretas sobre o Mesa
- Mascara o JSON de Vulkan ICD errado
Se o driver escolhido falhar ao se vincular ao nó da GPU (por exemplo, mali_kbase reporta erro de regulador), o script faz fallback automático para o outro, então você tem um sistema gráfico de qualquer maneira.
Por que Panfrost é o padrão
- Mesa 26.0.5 tem suporte sólido a Mali-G31 (Bifrost v9). Nenhuma extensão faltando em nenhum core libretro que distribuímos.
- MESA_GLTHREAD ajustado por emulador (Flycast, PPSSPP) entrega throughput extra.
- Upstream ativo: correções de bug chegam continuamente. Blob de fornecedor congelado significa preso em qualquer peculiaridade de 2019 que foi distribuída.
- Mesma superfície de API que o libmali para tudo exceto Vulkan.
Quando experimentar libmali
Casos de borda específicos relatados em testes da comunidade:
- Um emulador / jogo específico mostra glitches de renderização no Panfrost
- Você quer experimentar Vulkan via mali (PanVK no G31 não é conformante)
- Um pacote de shaders libretro X funciona de um jeito mas não do outro
O fallback em runtime significa que trocar é de baixo risco. Se o driver escolhido falhar ao se anexar à GPU no boot, o sistema troca para o alternativo automaticamente.
Quirks do Mesa aplicados (caminho Panfrost)
Para RK3326 / Mali-G31, o ArchR exporta isso globalmente para os emuladores:
PAN_MESA_DEBUG=forcepack # força format-pack no G31
# (apesar do nome, NÃO é uma flag de debug)
MESA_NO_ERROR=1 # pula o rastreamento de erros do GL
MESA_SHADER_CACHE_DIR=/storage/.cache/mesa_shader_cache
MESA_SHADER_CACHE_MAX_SIZE=128MB # cache de shaders sobrevive a rebootsPor emulador (apenas onde o benefício foi confirmado):
MESA_GLTHREAD=true # Flycast, PPSSPP standalone, veja /docs/mesa-glthread-matrixVulkan
PanVK no Mali-G31 (Bifrost v9) não é conformante. O time upstream do Mesa só distribui PanVK oficialmente para Mali-G610 (Valhall). O ArchR desabilita o PanVK em tempo de build no RK3326, assim emuladores que sondam por Vulkan não tentam e falham.
Se uma futura atualização de emulador precisar de Vulkan e tivermos validado o PanVK contra ele, o toggle apareceria no mesmo menu Graphics.
Troubleshooting
Tela preta após trocar para Panfrost. O overlay DTBO do seu painel pode não ter sido carregado. Verifique com cat /sys/class/drm/card0/connector/*/status. Volte para libmali via o caminho de recuperação:
- Desligue, remova o cartão SD
- Em um PC, monte a partição BOOT
- Edite
/storage/.config/system.cfg(na partição de storage) e definagpu.driver=libmali - Reinsira e inicialize
gpudriver alerta "did not bind to GPU". O auto-fallback já foi disparado. Seu driver efetivo é o outro. Verifique journalctl -t gpudriver (via SSH) para a mensagem exata.
Spam de sonda Vulkan nos logs. Alguns ports do PortMaster tentam Vulkan primeiro. Inofensivo: eles fazem fallback para GLES.