Direct3D 12 백엔드
0.3.5 이후에 추가된 실험적인 네이티브 Windows 렌더러입니다. PM4 디코더와 RDNA2 셰이더 변환을 Vulkan과 공유한 뒤, D3D12와 DXGI로 실행하고 화면에 표시합니다. 기본값은 여전히 Vulkan이며, 게임은 아직 이 경로로 실행되지 않습니다.
2026년 10월 17일까지의 저장소 노트
렌더러 선택
Windows 런처의 설정에는 Vulkan과 DirectX 12를 고르는 그래픽 API 카드가 있습니다. 런처는 포터블 ps5pcem.ini에 graphics_api=vulkan 또는 graphics_api=d3d12를 저장하고 PS5_GRAPHICS_API를 game-run에 전달하므로, 선택은 다음 실행부터 적용됩니다. 기본값은 Vulkan입니다. 런처는 12개 언어 모두에서 DirectX 12를 실험적이라고 표시하고, 사이드바는 Vulkan 장치 상태 대신 DirectX 12를 보여 줍니다.
같은 변수는 명령줄에서도 쓸 수 있으며, d3d12와 dx12를 모두 받아들입니다. Linux 빌드는 Vulkan을 고르고, 러너는 그곳에서 d3d12를 거부합니다. 알 수 없는 값은 타이틀을 불러오기 전에 거부됩니다. D3D12 초기화나 실행이 실패해도 러너는 Vulkan으로 대신하지 않습니다. 지원되지 않는 GPU 작업은 이유를 출력하고, 작업이 완료되었다고 보고하는 대신 실험적 실행을 끝냅니다. 이 백엔드에는 헤드리스 실행이 없습니다.
백엔드가 실행하는 것
장치, 직접 큐, 명령 할당자와 명령 목록, 배리어, 펜스, 리소스 수명은 COM 위의 작은 C 인터페이스 뒤에 있습니다. 업로드, 기본, 리드백 버퍼, 원시 UAV 디스크립터 배열, GPU 복사가 구현되어 있습니다. 셰이더는 Vulkan 경로와 같은 RDNA2 디코더, IR, SPIR-V 생성을 거칩니다. SPIRV-Cross가 그 SPIR-V를 HLSL로 바꾸고, Windows의 D3DCompiler가 Shader Model 5.1 바이트코드를 만듭니다. 여기서 SPIR-V는 중간 형식일 뿐이며, Vulkan을 통해 실행되는 것은 없습니다. SPIRV-Cross는 소스 해시로 고정되어 있고, 그 Apache-2.0 라이선스는 프로젝트와 함께 배포됩니다.
PM4 쪽에서는 DISPATCH_DIRECT가 범위가 정해지고 정적으로 해결된 MUBUF·MTBUF 스토리지 디스크립터, USER_DATA 특수화, 게스트 메모리로의 정확한 기록 반영과 함께 실행됩니다. DRAW_INDEX_AUTO는 제한된 경우를 다룹니다. 리소스가 없는 정점·픽셀 셰이더, 삼각형 목록 또는 스트립, 선형 RGBA8 UNORM 타깃 하나, 뷰포트, 시저, 컬링, 채널 마스크, 인스턴싱이며, 타깃에 이미 있던 바이트는 보존됩니다. 3버퍼 DXGI 플립 스왑체인이 선형 RGBA8과 BGRA8 스캔아웃을 표시하고, 창 제목에 렌더러와 FPS를 보여 줍니다. GPU 작업은 그 결과가 게스트 메모리에 닿기 전에 동기적으로 완료되고, 병렬 AGC 실행은 꺼져 있으며, 셰이더, 파이프라인 상태, 준비된 리소스는 아직 호출 사이에 캐시되지 않습니다.
확인된 내용
2026년 10월 17일 NVIDIA GeForce RTX 3070 Ti에서 하드웨어 프로브가 통과했습니다. 여섯 가지 크기의 버퍼 업로드와 리드백, 여섯 가지 디스패치 크기의 네이티브 컴퓨트, 출력을 정확히 대조한 RDNA2 컴퓨트·래스터 변환, 명령 실행기를 거쳐 D3D12로 들어가 게스트 메모리에 기록하는 PM4 컴퓨트와 드로, 그리고 세 가지 스왑체인 크기에서의 창 출력입니다. D3D12 디버그 레이어가 설치되어 있지 않았으므로, 이 실행들이 디버그 레이어에서 문제가 없음을 입증하지는 않습니다.
PS5_GRAPHICS_API=d3d12로 Raiden IV를 시작하자 RTX 3070 Ti가 선택되고 게임이 시작되었으며, 첫 인덱스 드로에서 종료 코드 1로 멈췄습니다(IndexedAndIndirectDrawNotImplemented). 이는 D3D12에서의 게임 부팅이 아니라 확인된 한계입니다. 이 사이트의 모든 게임 결과와 FPS 수치는 Vulkan으로 측정했습니다.
구현된 것
- 런처의 선택이 ps5pcem.ini에 저장되고 PS5_GRAPHICS_API로 전달됩니다. 기본값은 Vulkan입니다.
- COM 위의 C 인터페이스 뒤에 있는 네이티브 장치, 큐, 펜스, 버퍼, UAV 디스크립터, GPU 복사.
- 공유 SPIR-V 경로, SPIRV-Cross가 만든 HLSL, Shader Model 5.1 바이트코드를 거치는 RDNA2 셰이더.
- 범위가 정해진 컴퓨트 디스패치, 제한된 자동 인덱스 드로, 3버퍼 DXGI 플립 스왑체인.
아직 빠진 것
- 텍스처와 샘플러, 이미지 형식과 디타일링, 인덱스·간접 드로, NGG와 테셀레이션은 아직 구현되지 않았습니다.
- 게스트 깊이와 스텐실, 블렌딩, 다중 렌더 타깃, MSAA, 메타데이터, 비디오 출력이 아직 없습니다.
- 셰이더·파이프라인 캐시와 비동기 완료가 없어 게임 FPS를 측정할 수 없으며, Linux 빌드에는 D3D12가 없습니다.
관련 메커니즘
이 페이지들에 대하여