본문으로 건너뛰기
PS5PCEM
부분그래픽

NGG 정점 셰이더

S_SETPC_B64로 이어지는 페치 셰이더를 포함한 병합된 NGG 정점 프로그램을 하나의 그래픽 단계로 변환합니다. 익스포트 프로그램은 자신만의 사용자 데이터 창을 유지합니다.

2026년 10월 10일까지의 저장소 노트

페치와 익스포트는 다른 프로그램입니다

PlayStation 5 드로는 정점 작업을 페치 셰이더와 익스포트 셰이더로 나누는 경우가 많습니다. 페치 셰이더는 속성 프롤로그 끝에서 S_SETPC_B64로 익스포트 코드로 점프합니다. PS5PCEM은 이 이어짐을 같은 정점 프로그램의 일부로 보고 병합된 결과를 변환합니다.

NGG 익스포트 프로그램은 지오메트리 셰이더의 사용자 데이터 뱅크를 빌려 쓰지 않습니다. 스칼라 레지스터는 익스포트 프로그램 자신의 사용자 데이터 스냅샷에서, s8부터 초기화됩니다. 리소스 테이블이 s0:s1에 있다고 가정하는 것은 변환기가 일부러 피하는 버그입니다. 테이블 포인터는 메타데이터가 선언한 ShaderResourceTable 사용자 SGPR 쌍에서 옵니다.

정점 속성

페치 셰이더와 확장 사용자 데이터는 내장된 정점 버퍼·정점 속성 테이블과 함께 해결됩니다. 입력 시맨틱은 최대 32개까지, 시맨틱 인덱스, 값이 들어가는 하드웨어 VGPR, AGC 속성 형식, 바이트 오프셋, 인스턴스 비율, 128비트 버퍼 디스크립터를 유지합니다.

속성 조회는 하드웨어 매핑 바이트가 아닌 시맨틱 바이트를 사용합니다. 불완전한 테이블 쌍이나 지원 범위를 벗어난 인덱스는 게스트 읽기 전에 거부됩니다. 정점 단계의 PARAM 익스포트는 프래그먼트 보간 입력이 되며, 이렇게 해서 이후의 픽셀 셰이더가 varying 값을 봅니다.

페치 셰이더 호출

검증된 외부 페치 셰이더는 호출의 사용자 데이터 쌍이 AGC가 등록한 주소를 여전히 담고 있을 때 S_SWAPPC_B64나 S_CALL_B64에서도 링크할 수 있습니다. 페치 본문은 반환하는 S_SETPC_B64까지 디코딩되며, 그 반환은 호출자의 링크 쌍을 읽어야 합니다. 어떤 호출이 허용되는지는 스칼라 호출 페이지에서 자세히 다룹니다.

병합된 NGG 변환 덕분에 3D 장면이 예전에 디코더를 멈추던 페치 프롤로그를 넘어갈 수 있습니다. 그것만으로 없는 픽셀 셰이더나 없는 렌더 타깃이 채워지지는 않습니다.

구현된 것

  • S_SETPC_B64로 끝나는 페치 프롤로그를 포함한 병합된 NGG 정점 프로그램.
  • 익스포트 프로그램을 위한 별도의 사용자 데이터 창.
  • 형식, 오프셋, 인스턴스 비율, 버퍼 디스크립터를 갖춘 최대 32개의 정점 시맨틱.
  • 프래그먼트 보간 입력에 연결된 PARAM 익스포트.

아직 빠진 것

  • 반환이 호출자의 링크 쌍과 맞지 않는 페치 셰이더는 링크하지 않습니다.
  • 일반적인 동적 호출은 여전히 지원하지 않습니다. 스칼라 호출을 참고하세요.
  • 지원되지 않는 익스포트나 보간값에 의존하는 지오메트리는 여전히 해당 드로가 실패합니다.

관련 메커니즘

이 페이지들에 대하여

본문은 PS5PCEM 저장소의 아키텍처 노트와 2026년 10월 보고서를 따릅니다. 특정 테스트를 통과했다고 해서 새로운 프레임 속도나 새로운 완주를 뜻하지는 않습니다.

모든 기술