Entrevista com Joshua Ashton, desenvolvedor do DXVK e VKD3D-Proton

Entrevista feita pelo GOL (GamingOnLinux), disponibilizada no dia 26 de Julho de 2021.

Traduzido com Google Tradutor, com correções e adaptações para o nosso idioma.
Você pode ler a entrevista no idioma original (inglês) clicando no link ao final da publicação.

É hora de mais uma entrevista do GamingOnLinux! Desta vez, temos alguém com quem muitos seguidores da Valve e do Steam Play Proton estão familiarizados - é Joshua Ashton.

Primeiramente, você poderia se apresentar?

"Olá! Meu nome é Joshua Ashton e gosto de sapos :frog:. Também trabalho no DXVK, VKD3D-Proton e outras coisas relacionadas a gráficos."

Como você começou a programar? O que atraiu seu interesse para realmente começar?

"Eu tenho programado (ou tento) de alguma forma desde meus 7 anos de idade. Eu realmente não me lembro de todos os detalhes além de algo como tutoriais de Hello World e Pong GDI, mas estou constantemente tentando escrever coisas.

Comecei a levar as coisas mais a sério e a considerar isso como o que eu queria fazer quando estava no ensino médio e escrevendo meus próprios motores básicos e mods para jogos.

Eu também gostava bastante de fazer teatro (sou mais qualificado nisso do que ciência da computação/engenharia de software) e ainda gosto, mas não acho que seria sustentável como profissão, então, na maior parte do tempo, fico apenas fazendo shows locais e teatro amador local como hobby.

A partir de então, tenho basicamente apenas juntado pedras para aprender – odeio ler livros ou qualquer coisa assim.

Fiz DXUP e comecei o D9VK como um projeto pessoal enquanto estava na 6ª série (os últimos dois anos do ensino médio para vocês, americanos) e meio que parti daí."

Você é o criador do D9VK (Direct3D 9 para Vulkan), que foi puxado para o DXVK (agora Direct3D 9/10/11 para Vulkan). E agora você está ajudando em projetos como o VKD3D-Proton também? Você poderia nos contar um pouco sobre o trabalho envolvido nisso tudo e como você se envolveu originalmente?

"Hmmm… esta é uma longa história.

Originalmente, comecei a trabalhar no DXUP para jogar Just Cause 2 no Linux traduzindo D3D10 → D3D11. Então, meu amigo Sam achou que seria legal tentar fazer o Blade Symphony funcionar no Windows Phone, mas ele só suportava D3D11, então comecei a adicionar suporte a D3D9 e alguns jogos funcionaram com isso – acho que por esse ponto eu desisti de tentar fazer funcionar no Windows Phone e foi um projeto legal para ver o que eu poderia fazer. Isto também foi interessante no Linux para usá-lo com DXVK.

Eu estava em uma conferência conversando com algumas pessoas sobre o potencialmente de fazer uma camada D3D9 → Vulkan e me disseram que “era uma perda de tempo” e que eu "não poderia fazer isso e deveria trabalhar em outra coisa”.

Isso realmente me irritou, e tipo, eu sei que era muito jovem (17 anos na época), mas eu senti que estava sendo tratado como uma criança burra. Então comecei o D9VK como um projeto maldoso naquela noite no meu quarto de hotel.

Eu entrei completamente cego, tinha muito pouco conhecimento sobre Vulkan além de fazer um triângulo a partir de algum tutorial.

O backend DXVK fez muito trabalho pesado, mas ainda tive que traduzir todos os shaders, state e todos os casos extremos bizarros D3D9 eu mesmo.

Depois de algumas semanas, ele estava rodando algumas demos básicas e, depois de alguns meses, A Hat in Time.

Desde então isto foi incorporado ao DXVK e o padrão no Proton por algum tempo.

Estou feliz que minha arrogância mesquinha se transformou em algo que ajuda as pessoas pela primeira vez…

Quanto ao VKD3D-Proton, meu trabalho começou separando a mudança para o Meson e construindo como PE (.dll ao invés de .so) enquanto eu estava viajando. Eu não contribuo com tanta frequência, mas farei a limpeza, investigação de problemas ou implementação de recursos (como VRS ou ponto flutuante de 64 bits no DXBC, etc) de vez em quando."

Você também fez DXVK-Native, pode nos contar um pouco sobre isso?

"DXVK Native é basicamente apenas DXVK com suporte para compilar nativamente no Linux, e é o que está sendo enviado no Portal 2 e Left 4 Dead 2 agora para -vulkan. Todos os Windows-isms são removidos ou substituídos por material SDL. Por exemplo, um HWND agora é apenas uma SDL_Window. É muito fácil adicionar uma abstração WSI ao DXVK Native, você poderia facilmente fazer uma para GLFW ou diretamente para X11 ou Wayland, só não tive tempo para isso.

Tenho pretendido fazer lançamentos adequados com binários construídos no Steam Runtime e melhor documentação para ele, mas ainda não tem nenhum cliente além de mim.

Se alguém estiver interessado em usá-lo para ajudar com suas próprias portas nativas, entre em contato."

Como é trabalhar para a Valve sob contrato? Como isso aconteceu?

"Gosto de poder trabalhar em várias coisas diferentes, desde DXVK e VKD3D-Proton, Especificação do Vulkan, RADV, jogos de catálogo antigo e muito mais – tenho muitos problemas apenas trabalhando em uma coisa por muito tempo, ter a capacidade de me mover me ajuda muito.

Eu me sinto muito privilegiado por trabalhar com um monte de pessoas incríveis e fazer grandes coisas que deixam as pessoas felizes!"

Você também é responsável por colocar Vulkan no Portal 2 através do DXVK. Quem abordou quem para fazer isso acontecer? Como é conectar uma API tão nova em um mecanismo mais antigo?

"O DXVK Native já existia de alguma forma há mais de um ano, mas nunca teve nenhum teste do mundo real em qualquer lugar.

Na verdade, a maior parte do trabalho consistia em manter a compatibilidade com o ToGL (a camada D3D9 → GL que o jogo usava anteriormente) ao mesmo tempo.

O ToGL tem muitos hacks sobre hacks no D3D9 para coisas como determinar se uma textura é uma sombra, desvio de profundidade, etc, ou fazer algo um pouco diferente em algum lugar no motor ou código do jogo.

Se eu recebesse o jogo portado sem ToGL, então, em teoria, seria mais fácil no final, já que DXVK Native é totalmente opcional e funciona, pois não requer nenhuma dessas soluções alternativas."

Você também ajudou em outros jogos, como o Portal 2: Desolation. Você poderia nos contar um pouco sobre o que esperar e como foi o seu trabalho envolvido?

"Acho que sou o programador líder para isso, junto com Josh Dowell (Slartibarty) e Sam Pavlovic. Principalmente eu trabalho em gráficos lá, temos nosso próprio DXVK nativo personalizado com um monte de interfaces estendidas com recursos extras – para desempenho e fidelidade visual.

É um projeto bastante ambicioso, acho que estamos visando cerca de 50 testes para o lançamento, bem como uma história muito emocionante e comovente. É um longo caminho, principalmente por causa do escopo, então definitivamente nenhuma data de lançamento concreta definida no momento; mas há um progresso constante sendo feito o tempo todo!

Nós temos um “catálogo do consumidor” in-lore disponível para você ler online também: Aperture Science Consumer Catalog - 1981

Para o GameOnLinux, também tenho algumas imagens rápidas das três últimas screenshots Steam que fiz do Portal 2: Desolation :frog::"



Para nós programadores não-desktop, todos nós já ouvimos como o Vulkan é muito mais difícil do que o OpenGL. Quão difícil é trabalhar com Vulkan?

"Bem, é uma abordagem totalmente diferente para a programação gráfica – no Vulkan você está definindo todos os diferentes bits do estado do pipeline explicitamente, todos os descritores e buffers de comando a serem executados (e toda a sincronização), enquanto no GL, você basicamente apenas diga à “máquina OpenGL” o que você quer fazer. É como a diferença entre dirigir um carro, seguir em frente e virar à direita, para você mesmo montar o carro de forma que ele vá em frente e depois vire à esquerda.

Há uma curva muito íngreme no início, mas quando você começa a entender que a especificação é sua amiga, e não sua inimiga, e supera todo o incômodo de fazer as coisas iniciais para renderizar um triângulo, as coisas se tornam muito mais fáceis.

Dito isso, definitivamente não é para todos ou para todos os casos de uso (diretamente). Portar bases de código mais antigas para usar o Vulkan diretamente é doloroso se você quiser fazer isso corretamente e quiser tirar os principais benefícios do Vulkan disso.

Eu ainda recomendaria definitivamente o GL/DX11 para pessoas que desejam aprender gráficos, simplesmente porque é muito fácil de aprender.

Eu realmente não sou um grande amante do GL, porém, acho que é apenas uma pilha confusa de “como podemos adicionar o recurso X na API sem quebrar qualquer compatibilidade com versões anteriores”. Na minha opinião, as versões do GL deveriam ter interfaces totalmente diferentes, não apenas estendendo o mesmo design horrível desde bem antes de eu nascer para sempre."

O que você acha de tecnologias como Ray Tracing, DLSS da NVIDIA e o recente anúncio de Super Resolução da AMD?

"Eu acho que DLSS é legal e definitivamente uma técnica maravilhosa – mas apesar de ter resultados realmente impressionantes, há uma parte dentro de mim que parece errado que é nisso que devemos confiar no futuro. Eu realmente acho que é um paliativo muito bom até encontrarmos as melhores soluções para tornar o raytracing em tempo real mais viável em termos de desempenho.

FSR é bastante legal e tem resultados impressionantes por ser atemporal, mas pelo que entendi, ele não resolve todos os mesmos problemas que o DLSS resolve – ele apenas lida com a parte de upscaling, então você ainda precisa trazer seu próprio AA (que pode muito bem ser temporal) que você não tem que fazer com DLSS."

O que você pensa sobre o Steam Deck da Valve?

"Estou feliz que finalmente esteja disponível e estou animado para tocar coisas nele :smiley: Eu queria algo assim há muito tempo, pessoalmente. Eu tenho um catálogo muito grande de títulos mais antigos que venho pensando em jogar, então talvez isso me dará uma chance de passar por eles.

Estou muito orgulhoso de trabalhar com um monte de pessoas incríveis na tecnologia por trás disso! "

Alguns planos divertidos para o futuro?

"Definitivamente, mas não tenho certeza do que posso dizer de específico :stuck_out_tongue: Estou trabalhando em alguns diversos projetos paralelos pessoais, mas nada que eu realmente queira compartilhar ainda. Além disso, apenas mantendo o trabalho :frog:."

Fonte original: An interview with Joshua Ashton, developer on the likes of DXVK, VKD3D-Proton and more | GamingOnLinux

10 curtidas