스칼라 셰이더 호출
S_SWAPPC_B64와 S_CALL_B64는 완전한 반환 주소를 저장하고, ENDPGM 뒤에 있는 피호출자를 포함해 범위가 정해진 로컬 서브루틴을 실행합니다. 검증된 AGC 페치 셰이더도 같은 방식으로 링크할 수 있습니다.
2026년 10월 10일까지의 저장소 노트
호출과 반환
SOP1 오피코드 0x21은 S_SWAPPC_B64입니다. SOPK 오피코드 0x16은 S_CALL_B64이며, 대상은 PC + 4 + sign_extend(SIMM16) * 4로 역방향 호출도 포함합니다. 둘 다 다음 명령의 주소를 대상 SGPR 쌍에 씁니다. 짝이 맞는 S_SETPC_B64가 그곳으로 돌아갑니다. CALL은 SCC와 EXEC를 건드리지 않습니다.
대상이 null인 SWAPPC는 기존의 S_SETPC_B64 이어짐으로 남습니다. 로컬 SWAPPC 대상은 GETPC와 전체 폭 즉시값 덧셈이나 뺄셈으로 해결할 수 있습니다. 명령이 링크 레지스터에도 쓰더라도 대상은 포착됩니다. ENDPGM 뒤에 있는 피호출자는 할당과 명령 범위 안에서 짝이 맞는 반환까지 디코딩됩니다. 일반 하드웨어 이어짐은 여전히 뒤따르는 메타데이터 앞에서 멈춥니다.
호출의 변환 방식
제어 흐름 그래프에 명시적인 호출·반환 간선이 추가됩니다. 피호출자는 호출자의 레지스터 상태를 공유하고 범위가 정해진 SPIR-V 디스패처를 사용합니다. 지원되지 않는 호출이 선형 제어 흐름 경로로 흘러 들어갈 수 없습니다. 호스트 리소스 탐색은 호출과 반환을 따라가므로, 피호출자 안에서 초기화된 디스크립터도 보입니다.
지원되는 각 호출은 s0:s1부터 s104:s105까지 중 짝수 정렬된 고유한 SGPR 쌍 하나를 소유하며, 짝이 맞는 반환이 정확히 하나 있습니다. 피호출자는 검사기가 허용하는 방식으로 중첩되거나 순차적으로 배치됩니다. 대상이 임의의 런타임 값인 일반적인 동적 대상은 지원하지 않습니다.
페치 셰이더와 프로브
외부 페치 셰이더는 호출의 바뀌지 않은 사용자 데이터 쌍이 AGC가 등록한 주소와 일치할 때 링크됩니다. 페치 본문은 반환하는 SETPC까지 디코딩되며, 그 SETPC는 호출자의 링크 쌍을 읽어야 합니다. 분석 캐시가 일반 프로그램과 페치 본문을 구분하므로, 이전의 페치 삽입이 로컬 서브루틴의 반환을 덮어쓸 수 없습니다.
디스패치 42회로 된 GPU 프로브가 워드 21,504개를 검사합니다. 10월 9일 보고서는 호출만으로 새로운 게임 이정표나 새로운 프레임 속도를 주장하지 않습니다.
구현된 것
- 완전한 반환 주소와 짝이 맞는 S_SETPC_B64를 갖춘 S_SWAPPC_B64와 S_CALL_B64.
- 기존 범위 안에서 중첩된 피호출자와 ENDPGM 뒤에 놓인 피호출자.
- 반환이 호출자의 링크를 읽는 검증된 AGC 페치 셰이더 링크.
- 워드 21,504개를 다루는 디스패치 42회 프로브.
아직 빠진 것
- 일반적인 동적 호출 대상은 지원하지 않습니다.
- 호출에는 짝수 정렬된 링크 쌍 하나와 짝이 맞는 반환 하나가 필요합니다.
- 프로브는 초당 프레임 수 결과가 아닙니다.
관련 메커니즘
이 페이지들에 대하여