Ativando DRI no OpenChrome para P4M900
Muitas placas compartilham os mesmos recursos ou são evoluções de outras mantendo o conjunto de recursos da anterior ou ainda o modo de compatibilidade. A placa gráfica VIA P4M900 é um caso destes. Ela é encontrada em computadores mais baratos, principalmente alguns modelos de notebooks da Itautec.
O driver AGP/DRM do kernel não reconhece esta placa, por um mero detalhe: ele não tem o pci_id da mesma na listagem de placas suportadas e por isso o DRI não é ativado por padrão.
Consegui ativar o DRI seguindo os passos abaixo e então resolvi compartilhar. Isso não ativa o modo 3D da placa, já que o próprio OpenChrome ainda não tem suporte a 3D. Apenas o DRI é ativado.
O kernel que estou utilizando é o 2.6.29. O driver openchrome instalado no X foi obtido diretamente do repositório do projeto e compilado. Mas acredito que funcione com versões já existentes nas distribuições.
A placa que tenho é listada pelo comando lspci da seguinte forma:
# lspci|grep VGA 01:00.0 VGA compatible controller: VIA Technologies, Inc. CN896/VN896/P4M900 [Chrome 9 HC] (rev 01)
Para conseguir ativar o DRI é necessário um Kernel com os fontes, possivelmente já compilado. É necessário alterar o arquivo /usr/src/linux/include/drm/drm_pciids.h, incluindo no mesmo o id 0×1106, 0×3371. Localize o texto da primeira e terçeira linhas abaixo. A segunda linha deve ser inserida.
{0x1106, 0x3157, PCI_ANY_ID, PCI_ANY_ID, 0, 0, VIA_PRO_GROUP_A}, \
{0x1106, 0x3371, PCI_ANY_ID, PCI_ANY_ID, 0, 0, VIA_DX9_0}, \
{0, 0, 0}
Entre na configuração do kernel (make menuconfig) e ative os módulos listados a seguir:
Device Drivers --->
Graphics support --->
<M> /dev/agpgart (AGP Support) --->
<M> VIA chipset support
<M> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support)
<M> Via unichrome video cards
Compile e instale o kernel e os módulos. Após reiniciar o sistema você verá os seguintes módulos na lista de lsmod. Aparecerá também o arquivo /dev/dri/cards0.
# lsmod Module Size Used by ... via 40160 1 drm 139712 2 via via_agp 7868 1 agpgart 29196 2 drm,via_agp ...
Executando o X e rodando glxinfo, pode-se confirmar que o DRI foi ativado:
$ glxinfo |grep direct direct rendering: Yes
Não é a maior maravilha para uma placa gráfica, mas melhorou muito a exibição de vídeos. Antes de ativar o DRI o glxgears exibia apenas 80-90 FPS e depois:
$ glxgears 774 frames in 5.0 seconds = 154.666 FPS 797 frames in 5.0 seconds = 159.263 FPS 795 frames in 5.0 seconds = 158.824 FPS 786 frames in 5.0 seconds = 157.173 FPS