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