Acho que muitas das respostas perdem um ponto importante: você pode escrever aplicativos que acessam hardware diretamente, mas não em sistemas operacionais modernos . Não é apenas um problema de tempo, mas um problema de "você não tem escolha".
Windows, Linux, OSX, etc., todos proíbem o acesso direto do hardware a aplicativos arbitrários. Isso é importante por motivos de segurança: você não deseja que nenhum aplicativo aleatório consiga ler a memória arbitrária da GPU pelo mesmo motivo que não deseja que nenhum aplicativo aleatório consiga ler a memória do sistema. Coisas como o buffer de quadros da sua conta bancária ou o que estiver na memória da GPU. Você quer esse material isolado e protegido e o acesso controlado pelo seu sistema operacional.
Somente os drivers podem conversar diretamente com a maioria dos hardwares, e a única maneira de conversar com o driver é através do HAL exposto do sistema operacional e da interface proprietária e incompatível de cada driver. Essa interface do driver não será apenas diferente para cada fornecedor, mas também diferirá entre as versões do próprio driver, tornando quase impossível conversar diretamente com a interface em um aplicativo de consumidor. Essas camadas geralmente são cobertas por controles de acesso que restringem ainda mais a capacidade de um aplicativo acessá-los.
Portanto, não, seu jogo não pode apenas usar o hardware diretamente, a menos que você esteja direcionando apenas sistemas operacionais inseguros como o DOS, e sua única opção viável para um jogo em sistemas operacionais de consumidor modernos é segmentar uma API pública como DirectX, OpenGL ou Vulkan.