# Direct Rendering Manager

Direct Rendering Manager (abreviado como DRM, Gerenciador de Renderização Direta em inglês) é um subsistema do kernel do Linux que faz interface com as GPUs das placas de vídeo modernas. O DRM expõe uma API que os programas de espaço de usuário podem usar para enviar comandos e dados para a GPU, e para executar operações, como configurar o modo de exibição do monitor. O DRM foi desenvolvido inicialmente como o componente de espaço do kernel do Direct Rendering Infrastructure do servidor X, mas desde então tem sido usado por outras alternativas de pilha gráfica como o Wayland.
Os programas de espaço do usuário podem usar a API do DRM para comandar a GPU para fazer a renderização em 3D e a decodificação de vídeo acelerada por hardware, além da computação GPGPU.

## Visão geral

O kernel do Linux já tinha uma API chamada fbdev, usada para gerenciar o framebuffer de um adaptador gráfico, mas ela não podia ser usada para lidar com as necessidades do hardware de vídeo baseado em GPU com aceleração 3D moderno. Esses dispositivos geralmente exigem a configuração e o gerenciamento de uma fila de comandos em sua própria memória para enviar comandos para a GPU, e também exigem o gerenciamento de buffers e espaço livre nessa memória. Inicialmente, os programas de espaço do usuário (como o servidor X) gerenciavam esses recursos diretamente, mas geralmente agiam como se fossem os únicos com acesso a eles. Quando dois ou mais programas tentavam controlar o mesmo hardware ao mesmo tempo e definiam seus recursos, cada um à sua maneira, na maioria das vezes eles terminavam catastroficamente.
O Direct Rendering Manager foi criado para permitir que vários programas usem recursos de hardware de vídeo cooperativamente. O DRM obtém acesso exclusivo à GPU e é responsável por inicializar e manter a fila de comandos, a memória e qualquer outro recurso de hardware. Os programas que desejam usar as solicitações de envio de GPU para o DRM, que atua como um árbitro e toma cuidado para evitar possíveis conflitos.
O escopo do DRM foi expandido ao longo dos anos para abranger mais funcionalidades previamente tratadas pelos programas de espaço do usuário, como gerenciamento de framebuffer e configuração de modo, compartilhamento de objetos de memória e sincronização de memória. Algumas dessas expansões recebem nomes específicos, como o Graphics Execution Manager (GEM) ou o Kernel Mode-Setting (KMS), e a terminologia prevalece quando a funcionalidade que eles fornecem é especificamente aludida. Mas eles são realmente partes de todo o subsistema DRM do kernel.
A tendência de incluir duas GPUs em um computador—uma GPU discreta e uma integrada—levou a novos problemas, como a comutação da GPU, que também precisavam ser resolvidos na camada de DRM. A fim de combinar a tecnologia Nvidia Optimus, o DRM foi expandido com a capacidade de descarregamento de GPU, chamado PRIME.

## Adoção

O subsistema de kernel Direct Rendering Manager foi inicialmente desenvolvido para ser usado com a nova infraestrutura de renderização direta do servidor de exibição XFree86 4.0, posteriormente herdado por seu sucessor, o X.Org Server. Portanto, os principais usuários do DRM eram clientes DRI que se vinculam à implementação do OpenGL acelerada por hardware que reside na biblioteca do Mesa 3D, bem como ao próprio servidor X. Atualmente, o DRM também é usado por vários compositores Wayland, incluindo o compositor de referência Weston. O kmscon é uma implementação de console virtual que é executada no espaço do usuário usando os recursos do KMS presentes no DRM.
Em 2015, a versão 358.09 (beta) do driver proprietário Nvidia GeForce recebeu suporte para a configuração de modo da interface DRM implementada como um novo blob do kernel chamado nvidia-modeset.ko. Esse novo componente de driver funciona em conjunto com o módulo do kernel nvidia.ko para programar o mecanismo de exibição (ou seja, o controlador de exibição) da GPU.