Chamadas escalares de shader
S_SWAPPC_B64 e S_CALL_B64 salvam um endereço de retorno completo e executam uma sub-rotina local limitada, inclusive um chamado que fica depois de ENDPGM. Um shader de fetch do AGC verificado pode ser ligado do mesmo modo.
Notas do repositório até 10 de outubro de 2026
Chamada e retorno
O opcode SOP1 0x21 é S_SWAPPC_B64. O opcode SOPK 0x16 é S_CALL_B64, com o alvo em PC + 4 + sign_extend(SIMM16) * 4, o que inclui chamadas para trás. Os dois escrevem o endereço da instrução seguinte no par de SGPR de destino. Um S_SETPC_B64 correspondente retorna para lá. CALL deixa SCC e EXEC intocados.
Um SWAPPC cujo destino é nulo continua sendo a continuação já existente de S_SETPC_B64. Alvos locais de SWAPPC podem ser resolvidos a partir de um GETPC mais uma soma ou uma subtração imediata de largura completa. O alvo é capturado mesmo se a instrução também escreve o registrador de ligação. Um chamado que vive depois de ENDPGM é decodificado até o retorno correspondente, dentro da alocação e dos limites de instrução. Uma continuação comum de hardware ainda para antes dos metadados finais.
Como a chamada é rebaixada
O grafo de fluxo de controle ganha arestas explícitas de chamada e de retorno. O chamado compartilha o estado de registradores de quem chamou e usa o despachante SPIR-V limitado. Uma chamada sem suporte não pode cair no caminho linear de fluxo de controle. A descoberta de recursos do anfitrião segue as chamadas e os retornos, então um descritor inicializado dentro do chamado continua visível.
Cada chamada suportada possui um par de SGPR distinto e alinhado em par, de s0:s1 até s104:s105, com exatamente um retorno correspondente. Os chamados são aninhados ou sequenciais nos modos que o verificador permite. Alvos dinâmicos gerais, em que o destino é um valor arbitrário de tempo de execução, continuam sem suporte.
Shaders de fetch e a sonda
Um shader de fetch externo é ligado quando o par de user data inalterado da chamada corresponde ao endereço que o AGC registrou. O corpo do fetch é decodificado até o SETPC de retorno, e esse SETPC precisa ler o par de ligação de quem chamou. O cache de análise distingue um programa comum de um corpo de fetch, então uma inserção antiga de fetch não pode sobrescrever o retorno de uma sub-rotina local.
Uma sonda de GPU de 42 dispatches verifica 21,504 palavras. O relatório de 9 de outubro não afirma um novo marco de jogo nem uma nova taxa de quadros a partir das chamadas sozinhas.
O que está implementado
- S_SWAPPC_B64 e S_CALL_B64 com um endereço de retorno completo e um S_SETPC_B64 correspondente.
- Chamados aninhados e chamados colocados depois de ENDPGM, dentro dos limites já existentes.
- Ligação de um shader de fetch do AGC verificado cujo retorno lê a ligação de quem chamou.
- Uma sonda de 42 dispatches que cobre 21,504 palavras.
O que ainda falta
- Alvos gerais de chamada dinâmica não têm suporte.
- Uma chamada precisa de um par de ligação alinhado em par e de um retorno correspondente.
- A sonda não é um resultado em quadros por segundo.
Mecanismos relacionados
O que estas páginas descrevem