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 0x1106, 0x3371. 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