Ir para o conteúdo
PS5PCEM
ParcialGráficos

AGC e o fluxo de comandos PM4

Um título de PS5 monta pacotes de GPU na própria memória e envia o buffer. O PS5PCEM decodifica esse fluxo PM4, mantém o estado dos registradores e executa desenhos e dispatches em ordem.

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

O fluxo é a API de gráficos

O título não precisa chamar uma função de desenho de alto nível para cada triângulo. Ele escreve pacotes: atualizações de registrador, desenhos, dispatches, fences e flips. Seja qual for a camada que produziu o buffer, a GPU vê o mesmo fluxo. O decodificador nomeia os pacotes cujos opcodes têm um significado documentado e deixa os outros como números. Um nome inventado num rastreio seria pior do que um opcode.

O comprimento do corpo do pacote é armazenado com viés de um, então um corpo vazio não pode ser codificado. Cada passo verifica os próprios limites. Um corpo que não cabe é informado. Ele não é cortado, porque um corpo cortado deslocaria todo pacote seguinte e o rastreio mentiria.

Estado, esperas e buffers indiretos

O estado dos registradores sobrevive entre envios, inclusive escritas de zero. O executor aplica listas diretas de registradores, listas indiretas nativas e legadas, acquire e release, esperas de 32 bits e de 64 bits, escritas, eventos e SetFlip. Uma espera que não foi atingida devolve bloqueio e a palavra exata de onde retomar. A memória convidada não é modificada para fabricar progresso.

Buffers indiretos são seguidos de forma recursiva, tanto a forma comum de 4 dwords quanto a forma condicional de 14 dwords. Pacotes de encadeamento encerram o pai. O aninhamento para em dezesseis frames. Um filho bloqueado devolve um caminho fixo da raiz até a folha, então retomar não reproduz desenhos que já aconteceram. O escalonador copia cada buffer de comandos raiz e os buffers indiretos que consegue alcançar, então o título pode reciclar a arena enquanto uma espera ainda está bloqueada.

Dos registradores a um desenho

Num desenho ou num dispatch, o instantâneo dos registradores vira recursos tipados: descritores de buffer e de amostrador de 128 bits, descritores de imagem de 256 bits, oito alvos de cor, profundidade e stencil, viewports, scissor, cull, mistura e os campos de swizzle e de MSAA da PS5. Escritas ausentes de controle de cor e de controle de recorte herdam os padrões do AGC. Um desligamento explícito continua desligado. Dois workers de CPU preparam comandos de gráficos e de computação. Um dono Vulkan os envia para que a execução e a conclusão permaneçam ordenadas.

Os metadados do shader fornecem as tabelas de recursos e os registradores de user data. A proveniência escalar percorre um prefixo limitado do shader, carrega só a memória convidada que o prefixo de fato toca e para num desvio desconhecido em vez de inventar um descritor. O resultado é o que o tradutor e o backend Vulkan consomem.

O que está implementado

  • Decodificação PM4 com comprimentos de corpo enviesados e limites rígidos em todo pacote.
  • Bancos de registradores persistentes, esperas bloqueadas e buffers indiretos recursivos até dezesseis frames.
  • Buffers tipados, imagens, alvos de cor, profundidade, viewport, mistura e estado de MSAA na hora do desenho.
  • Dois workers de preparação e um dono ordenado do envio Vulkan.

O que ainda falta

  • Um opcode sem significado documentado permanece sem nome.
  • Uma espera bloqueada nunca é liberada pela escrita de um valor falso de fence.
  • Camadas, metadados e algumas operações de imagem ainda estão incompletos. Esses assuntos têm páginas próprias.

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