Ir para o conteúdo
PS5PCEM
ParcialGráficos

Shaders de vértice NGG

Programas de vértice NGG fundidos, inclusive um shader de fetch que continua com S_SETPC_B64, são traduzidos como um único estágio de gráficos. O programa de exportação guarda a própria janela de user data.

Notas do repositório até 10 de outubro de 2026

Fetch e exportação são programas diferentes

Um desenho de PlayStation 5 muitas vezes divide o trabalho de vértice num shader de fetch e num shader de exportação. O shader de fetch termina o prólogo de atributos saltando para o código de exportação com S_SETPC_B64. O PS5PCEM trata essa continuação como parte do mesmo programa de vértice e traduz o resultado fundido.

O programa de exportação NGG não toma emprestado o banco de user data do shader de geometria. Os registradores escalares dele são inicializados a partir do próprio instantâneo de user data, em s8 para o programa de exportação. Supor que a tabela de recursos vive em s0:s1 é um erro que o tradutor evita de propósito. O ponteiro da tabela vem do par user-SGPR de ShaderResourceTable que os metadados declararam.

Atributos de vértice

O shader de fetch e os user data estendidos são resolvidos junto com as tabelas embutidas de buffer de vértices e de atributos de vértice. Até 32 semânticas de entrada guardam o índice semântico, o VGPR de hardware em que caem, o formato de atributo do AGC, o deslocamento em bytes, a taxa de instância e o descritor de buffer de 128 bits.

A busca de atributo usa o byte semântico, não o byte de mapeamento de hardware. Um par de tabelas incompleto ou um índice fora do domínio suportado é rejeitado antes de qualquer leitura convidada. Exportações PARAM do estágio de vértice viram as entradas de interpolação do fragmento, que é como um shader de pixel posterior vê os varyings.

Chamadas para um shader de fetch

Um shader de fetch externo verificado também pode ser ligado a partir de S_SWAPPC_B64 ou de S_CALL_B64 quando o par de user data da chamada ainda guarda o endereço que o AGC registrou. O corpo do fetch é decodificado até o S_SETPC_B64 de retorno, e esse retorno precisa ler o par de ligação de quem chamou. O detalhe de quais chamadas são legais está na página de chamadas escalares.

A tradução NGG fundida é o que permite que cenas tridimensionais passem de um prólogo de fetch que antes parava o decodificador. Ela não fornece, por si, um shader de pixel ausente nem um alvo de renderização ausente.

O que está implementado

  • Programas de vértice NGG fundidos, inclusive prólogos de fetch que terminam em S_SETPC_B64.
  • Uma janela de user data separada para o programa de exportação.
  • Até 32 semânticas de vértice, com formatos, deslocamentos, taxas de instância e descritores de buffer.
  • Exportações PARAM ligadas às entradas de interpolação do fragmento.

O que ainda falta

  • Um shader de fetch cujo retorno não corresponde ao par de ligação de quem chamou não é ligado.
  • Chamadas dinâmicas gerais continuam sem suporte. Veja as chamadas escalares.
  • Geometria que depende de uma exportação ou de um interpolante sem suporte ainda falha nesse desenho.

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