Ir para o conteúdo
PS5PCEM
ParcialGráficos

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

O texto segue as notas de arquitetura e os relatórios de outubro de 2026 no repositório do PS5PCEM. Um teste pontual que passa não é uma nova taxa de quadros nem uma nova conclusão de jogo.

Todas as tecnologias