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

RDNA2 셰이더에서 SPIR-V로

PlayStation 5 셰이더는 RDNA2 기계어입니다. PS5PCEM은 GFX10 계열을 디코딩하고, 제어 흐름 그래프를 만들며, 지원되는 연산을 Vulkan용 SPIR-V 1.5로 낮춥니다.

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

디코딩

프런트엔드는 스칼라 SOP1, SOP2, SOPK, SOPC, SOPP, SMEM 인코딩, 벡터 VOP1, VOP2, VOP3, VOP3P, VOPC, VINTRP 인코딩, 그리고 MUBUF, MTBUF, FLAT, DS, MIMG, EXP를 인식합니다. 아키텍처상의 1워드·2워드 본문, 선택적 리터럴, MIMG NSA 주소 워드를 유지하므로, 뒤에 나오는 지원되지 않는 오피코드가 스트림을 어긋나게 하지 않습니다.

알려진 계열 안의 알 수 없는 오피코드는 지원되지 않는 명령이 되며, 계열, 숫자 오피코드, 원시 워드, 사유를 그대로 담습니다. SDWA와 DPP 확장 워드는 선택자, 수정자, 레인 마스크를 유지합니다. 디코더는 모르는 오피코드에 이름을 붙이지 않습니다.

제어 흐름과 타입 있는 IR

직접 분기 대상이 프로그램을 블록으로 나눕니다. 순방향 병합, 중첩 영역, 역방향 간선은 따로 기록합니다. 실행 중 변환기는 디코딩된 명령에서 바로 출력할 수 있습니다. PS5_GPU_SHADER_IR=1로 설정하면 정규화된 타입 있는 IR을 선택합니다. PS5_GPU_SSA=1로 설정하면 phi와 정의-사용 상태, 상수 접기, 반복적인 죽은 코드 제거가 추가됩니다.

비순환 선택은 합류 지점에 phi 값이 있는 구조화된 SPIR-V 병합이 됩니다. 자연 루프는 루프 병합이 됩니다. 환원 불가능한 제어 흐름은 VCC와 EXEC 술어를 유지하는 블록 인덱스 디스패처가 되므로, 쓰기를 건너뛰어야 했던 레인은 여전히 건너뜁니다. EXEC 마스크는 SPIR-V 블록 안에서는 재사용하고 모든 레이블에서 버립니다. 분기 한쪽의 값이 다른 쪽을 지배하지 않기 때문입니다.

10월 9일 스위트가 측정한 것

10월 9일 스칼라 호출 체크포인트는 GPU 분석 테스트 259개 중 259개, Vulkan 테스트 232개 중 232개를 통과했습니다. RDNA2 스위트는 281개 중 271개를 통과했으며, 기존의 실패 10개가 그대로이고 누수 하나가 보고되었습니다. 이 명령 프로브들이 게임의 새로운 프레임 속도를 입증하지는 않습니다.

다중 텍셀 이미지 로드, 가로 개더, NGG 페치 셰이더, 범위가 정해진 스칼라 호출은 별도 경로로 구현되어 있으며 각자의 페이지에서 설명합니다. 측정 범위에 없던 저장과 디스크립터 조합은 지원되지 않는 상태로 남습니다.

구현된 것

  • 리터럴과 NSA 워드를 포함한 GFX10 스칼라, 벡터, 메모리, 이미지, 익스포트 계열 디코딩.
  • 구조화된 선택, 자연 루프, 레인 마스크를 보존하는 환원 불가능 흐름용 디스패처.
  • 환경 변수로 선택하는 선택적 타입 있는 IR과 SSA 정리.
  • 지원되는 ALU, 메모리, 이미지, 보간, 익스포트 연산에 대한 SPIR-V 1.5.

아직 빠진 것

  • 기존 RDNA2 스위트 실패 10개와 보고된 누수 하나가 남아 있습니다.
  • 지원되지 않는 오피코드는 해당 변환을 멈춥니다. 추측한 연산으로 대체하지 않습니다.
  • 명령 테스트는 프레임 속도 결과가 아닙니다.

관련 메커니즘

이 페이지들에 대하여

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

모든 기술