Shaders RDNA2 para SPIR-V
Os shaders de PlayStation 5 são código de máquina RDNA2. O PS5PCEM decodifica as famílias GFX10, monta um grafo de fluxo de controle e rebaixa as operações suportadas para SPIR-V 1.5 destinado ao Vulkan.
Notas do repositório até 10 de outubro de 2026
Decodificação
O frontend reconhece as codificações escalares SOP1, SOP2, SOPK, SOPC, SOPP e SMEM, as codificações vetoriais VOP1, VOP2, VOP3, VOP3P, VOPC e VINTRP, e MUBUF, MTBUF, FLAT, DS, MIMG e EXP. Corpos arquiteturais de uma palavra e de duas palavras, literais opcionais e palavras de endereço NSA de MIMG são preservados, então um opcode sem suporte mais adiante não dessincroniza o fluxo.
Um opcode não reconhecido dentro de uma família conhecida vira uma instrução sem suporte que ainda carrega a família, o opcode numérico, as palavras brutas e um motivo. Palavras de extensão SDWA e DPP guardam os seletores, os modificadores e as máscaras de lane. O decodificador não renomeia um opcode que não conhece.
Fluxo de controle e a IR tipada
Alvos de desvio direto dividem o programa em blocos. Fusões para a frente, regiões aninhadas e arestas para trás são registradas à parte. O tradutor em uso pode emitir a partir das instruções decodificadas. Definir PS5_GPU_SHADER_IR=1 seleciona a IR tipada legalizada. Definir PS5_GPU_SSA=1 acrescenta estado de phi e de def-use, dobramento de constantes e eliminação iterativa de código morto.
Seleções acíclicas viram fusões estruturadas de SPIR-V com valores phi nas junções. Laços naturais viram fusões de laço. Fluxo de controle irredutível vira um despachante por índice de bloco que preserva os predicados VCC e EXEC, então uma lane que deveria ter pulado uma escrita ainda a pula. Máscaras EXEC são reutilizadas dentro de um bloco SPIR-V e descartadas em todo rótulo, porque um valor de um lado de um desvio não domina o outro lado.
O que a suíte de 9 de outubro mediu
O ponto de verificação das chamadas escalares de 9 de outubro passou 259 de 259 testes de análise de GPU e 232 de 232 testes Vulkan. A suíte RDNA2 passou 271 de 281, com as mesmas dez falhas já existentes e um vazamento informado. Essas sondas de instrução não estabelecem uma nova taxa de quadros para um jogo.
Cargas de imagem de vários texels, gathers horizontais, shaders de fetch NGG e chamadas escalares limitadas estão implementados como caminhos próprios e descritos nas próprias páginas. Armazenamentos e combinações de descritor que não estavam no conjunto medido continuam sem suporte.
O que está implementado
- Decodificação das famílias escalar, vetorial, de memória, de imagem e de exportação do GFX10, inclusive literais e palavras NSA.
- Seleções estruturadas, laços naturais e um despachante para fluxo irredutível que preserva máscaras de lane.
- IR tipada opcional e limpeza SSA, selecionadas com variáveis de ambiente.
- SPIR-V 1.5 para as operações suportadas de ALU, memória, imagem, interpolação e exportação.
O que ainda falta
- Dez falhas já existentes da suíte RDNA2 permanecem, além de um vazamento informado.
- Um opcode sem suporte interrompe esse rebaixamento. Ele não é substituído por uma operação adivinhada.
- Os testes de instrução não são um resultado de taxa de quadros.
Mecanismos relacionados
O que estas páginas descrevem