Saltar al contenido
PS5PCEM
ParcialGráficos

Llamadas escalares de shader

S_SWAPPC_B64 y S_CALL_B64 guardan una dirección de retorno completa y ejecutan una subrutina local acotada, incluido un llamado que queda después de ENDPGM. Un fetch shader de AGC verificado puede enlazarse del mismo modo.

Notas del repositorio hasta el 10 de octubre de 2026

Llamada y retorno

El opcode SOP1 0x21 es S_SWAPPC_B64. El opcode SOPK 0x16 es S_CALL_B64, con el destino en PC + 4 + sign_extend(SIMM16) * 4, lo que incluye llamadas hacia atrás. Ambos escriben la dirección de la instrucción siguiente en el par SGPR de destino. Un S_SETPC_B64 coincidente vuelve allí. CALL deja SCC y EXEC intactos.

Un SWAPPC cuyo destino es null sigue siendo la continuación S_SETPC_B64 ya existente. Los destinos SWAPPC locales pueden resolverse a partir de un GETPC más una suma o resta inmediata de ancho completo. El destino se captura aunque la instrucción también escriba el registro de enlace. Un llamado que vive después de ENDPGM se descodifica a través de su retorno coincidente, dentro de los límites de la asignación y de las instrucciones. Una continuación de hardware ordinaria sigue deteniéndose antes de los metadatos finales.

Cómo se rebaja la llamada

El grafo de flujo de control gana aristas explícitas de llamada y de retorno. El llamado comparte el estado de registros del llamador y usa el despachador SPIR-V acotado. Una llamada no admitida no puede caer en la ruta lineal de flujo de control. El descubrimiento de recursos del anfitrión sigue las llamadas y los retornos, de modo que un descriptor inicializado dentro del llamado sigue siendo visible.

Cada llamada admitida posee un par SGPR distinto y alineado a par, desde s0:s1 hasta s104:s105, con exactamente un retorno coincidente. Los llamados son anidados o secuenciales en las formas que permite el comprobador. Los destinos dinámicos generales, en los que el destino es un valor arbitrario en tiempo de ejecución, siguen sin admitirse.

Fetch shaders y la sonda

Un fetch shader externo se enlaza cuando el par de user-data sin cambios de la llamada coincide con la dirección que registró AGC. El cuerpo de fetch se descodifica hasta su SETPC de retorno, y ese SETPC debe leer el par de enlace del llamador. La caché de análisis distingue un programa ordinario de un cuerpo de fetch, de modo que una inserción de fetch más antigua no puede sobrescribir el retorno de una subrutina local.

Una sonda de GPU de 42 despachos comprueba 21,504 palabras. El informe del 9 de octubre no afirma un hito nuevo de un juego ni una tasa de fotogramas nueva a partir de las llamadas solas.

Qué está implementado

  • S_SWAPPC_B64 y S_CALL_B64 con una dirección de retorno completa y un S_SETPC_B64 coincidente.
  • Llamados anidados y llamados colocados después de ENDPGM, dentro de los límites ya existentes.
  • Enlace de un fetch shader de AGC verificado cuyo retorno lee el enlace del llamador.
  • Una sonda de 42 despachos que cubre 21,504 palabras.

Qué falta todavía

  • Los destinos de llamada dinámicos generales no están admitidos.
  • Una llamada necesita un par de enlace alineado a par y un retorno coincidente.
  • La sonda no es un resultado de fotogramas por segundo.

Mecanismos relacionados

Qué describen estas páginas

El texto sigue las notas de arquitectura y los informes de octubre de 2026 del repositorio PS5PCEM. Un test concreto que pasa no es una tasa de fotogramas nueva ni una partida terminada nueva.

Todas las tecnologías